├── .eslintrc.js ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src ├── classify.ts ├── functions.ts └── index.ts └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "es2020": true, 4 | "amd": true, 5 | "node": true 6 | }, 7 | "extends": [ 8 | "eslint:recommended", 9 | "plugin:@typescript-eslint/eslint-recommended", 10 | "plugin:@typescript-eslint/recommended" 11 | ], 12 | "parser": "@typescript-eslint/parser", 13 | "parserOptions": { 14 | "ecmaVersion": 11, 15 | "sourceType": "module" 16 | }, 17 | "plugins": [ 18 | "@typescript-eslint", 19 | "prefer-arrow" 20 | ], 21 | "rules": [{ 22 | "prefer-arrow/prefer-arrow-functions": [ 23 | "warn", 24 | { 25 | "disallowPrototype": true, 26 | "singleReturnOnly": false, 27 | "classPropertiesAllowed": false 28 | } 29 | ] 30 | },] 31 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | dist 4 | ignore -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | ignore 3 | tsconfig.json 4 | .eslintrc.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 ZedDev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/0ef0263db65e44b5886beed7e8aa0381)](https://app.codacy.com/manual/zedd3v/hsolve?utm_source=github.com&utm_medium=referral&utm_content=zedd3v/hsolve&utm_campaign=Badge_Grade_Dashboard) 2 | 3 | # hSolve 4 | 5 | A library for solving HCaptcha. 6 | 7 | ## Installation 8 | 9 | ```bash 10 | $ npm install hsolve 11 | ``` 12 | 13 | ## Usage 14 | 15 | ```javascript 16 | const hsolve = require('hsolve'); 17 | 18 | // Typescript: import hsolve from 'hsolve'; 19 | 20 | /* RANDOM SOLUTIONS */ 21 | 22 | const token = await hsolve("https://captcha.website/"); // => P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V... 23 | 24 | 25 | /* AWS */ 26 | 27 | const token = await hsolve("https://captcha.website/", { 28 | solveService: { 29 | name: "aws", 30 | awsAccessKey: "xxxxxxxxxxxxx", 31 | awsSecretAccessKey: "xxxxxxxxxxxxx", 32 | awsRegion: "xxxxxxxxxxxxx", 33 | }, 34 | }); // => P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V... 35 | 36 | 37 | /* AZURE */ 38 | 39 | const token = await hsolve("https://captcha.website/", { 40 | solveService: { 41 | name: "azure", 42 | azureApiKey: "xxxxxxxxxxxxx", 43 | azureEndpoint: "xxxxxxxxxxxxx", 44 | }, 45 | }); // => P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V... 46 | 47 | 48 | /* CUSTOM */ 49 | 50 | const token = await hsolve("https://captcha.website/", { 51 | solveService: { 52 | name: "custom", 53 | customUrl: "https://custom-api.com/", 54 | }, 55 | }); // => P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V.... 56 | 57 | ``` 58 | For custom solving solution code makes a GET request to the API url with imageurl parameter and expects a json response. 59 | Example json response from your api: 60 | 61 | ```json 62 | { success: true, message: [{ className: "bicycle" }] } 63 | ``` 64 | 65 | ## Maintainer 66 | 67 | [![ZedDev](https://github.com/zedd3v.png?size=100)](https://abck.dev/) 68 | 69 | ## Contributing 70 | 71 | Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. 72 | 73 | ## License 74 | 75 | [MIT](https://choosealicense.com/licenses/mit/) 76 | 77 | Heavily inspired by https://github.com/JimmyLaurent/hcaptcha-solver 78 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hsolve", 3 | "version": "1.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@azure/cognitiveservices-computervision": { 8 | "version": "7.0.0", 9 | "resolved": "https://registry.npmjs.org/@azure/cognitiveservices-computervision/-/cognitiveservices-computervision-7.0.0.tgz", 10 | "integrity": "sha512-z9K+qXKjLPYHUeFDI77P99i4KovqVDMnfnESjANuz33ppNq7+X41A4iFlGcjrxUc6g0nIiuxxxunXS3ZluPyvQ==", 11 | "requires": { 12 | "@azure/ms-rest-js": "^2.0.4", 13 | "tslib": "^1.10.0" 14 | } 15 | }, 16 | "@azure/ms-rest-js": { 17 | "version": "2.0.7", 18 | "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-2.0.7.tgz", 19 | "integrity": "sha512-rQpNxDhyOIyS4E+4sUCBMvjrtbNwB32wH06cC2SFoQM4TR29bIKaTlIC1tMe0K07w9c5tNk/2uUHs6/ld/Z3+A==", 20 | "requires": { 21 | "@types/node-fetch": "^2.3.7", 22 | "@types/tunnel": "0.0.1", 23 | "abort-controller": "^3.0.0", 24 | "form-data": "^2.5.0", 25 | "node-fetch": "^2.6.0", 26 | "tough-cookie": "^3.0.1", 27 | "tslib": "^1.10.0", 28 | "tunnel": "0.0.6", 29 | "uuid": "^3.3.2", 30 | "xml2js": "^0.4.19" 31 | }, 32 | "dependencies": { 33 | "uuid": { 34 | "version": "3.4.0", 35 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 36 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 37 | } 38 | } 39 | }, 40 | "@babel/code-frame": { 41 | "version": "7.10.4", 42 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 43 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 44 | "dev": true, 45 | "requires": { 46 | "@babel/highlight": "^7.10.4" 47 | } 48 | }, 49 | "@babel/helper-validator-identifier": { 50 | "version": "7.10.4", 51 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 52 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 53 | "dev": true 54 | }, 55 | "@babel/highlight": { 56 | "version": "7.10.4", 57 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 58 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 59 | "dev": true, 60 | "requires": { 61 | "@babel/helper-validator-identifier": "^7.10.4", 62 | "chalk": "^2.0.0", 63 | "js-tokens": "^4.0.0" 64 | }, 65 | "dependencies": { 66 | "chalk": { 67 | "version": "2.4.2", 68 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 69 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 70 | "dev": true, 71 | "requires": { 72 | "ansi-styles": "^3.2.1", 73 | "escape-string-regexp": "^1.0.5", 74 | "supports-color": "^5.3.0" 75 | } 76 | } 77 | } 78 | }, 79 | "@sindresorhus/is": { 80 | "version": "3.0.0", 81 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.0.0.tgz", 82 | "integrity": "sha512-kqA5I6Yun7PBHk8WN9BBP1c7FfN2SrD05GuVSEYPqDb4nerv7HqYfgBfMIKmT/EuejURkJKLZuLyGKGs6WEG9w==" 83 | }, 84 | "@szmarczak/http-timer": { 85 | "version": "4.0.5", 86 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", 87 | "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", 88 | "requires": { 89 | "defer-to-connect": "^2.0.0" 90 | } 91 | }, 92 | "@tootallnate/once": { 93 | "version": "1.1.2", 94 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 95 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" 96 | }, 97 | "@types/cacheable-request": { 98 | "version": "6.0.1", 99 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", 100 | "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", 101 | "requires": { 102 | "@types/http-cache-semantics": "*", 103 | "@types/keyv": "*", 104 | "@types/node": "*", 105 | "@types/responselike": "*" 106 | } 107 | }, 108 | "@types/color-name": { 109 | "version": "1.1.1", 110 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 111 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 112 | "dev": true 113 | }, 114 | "@types/eslint-visitor-keys": { 115 | "version": "1.0.0", 116 | "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 117 | "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", 118 | "dev": true 119 | }, 120 | "@types/http-cache-semantics": { 121 | "version": "4.0.0", 122 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", 123 | "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" 124 | }, 125 | "@types/json-schema": { 126 | "version": "7.0.5", 127 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", 128 | "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", 129 | "dev": true 130 | }, 131 | "@types/keyv": { 132 | "version": "3.1.1", 133 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", 134 | "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", 135 | "requires": { 136 | "@types/node": "*" 137 | } 138 | }, 139 | "@types/lodash": { 140 | "version": "4.14.157", 141 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.157.tgz", 142 | "integrity": "sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ==", 143 | "dev": true 144 | }, 145 | "@types/node": { 146 | "version": "14.0.23", 147 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.23.tgz", 148 | "integrity": "sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw==" 149 | }, 150 | "@types/node-fetch": { 151 | "version": "2.5.7", 152 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", 153 | "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", 154 | "requires": { 155 | "@types/node": "*", 156 | "form-data": "^3.0.0" 157 | }, 158 | "dependencies": { 159 | "form-data": { 160 | "version": "3.0.0", 161 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", 162 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", 163 | "requires": { 164 | "asynckit": "^0.4.0", 165 | "combined-stream": "^1.0.8", 166 | "mime-types": "^2.1.12" 167 | } 168 | } 169 | } 170 | }, 171 | "@types/responselike": { 172 | "version": "1.0.0", 173 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 174 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 175 | "requires": { 176 | "@types/node": "*" 177 | } 178 | }, 179 | "@types/tunnel": { 180 | "version": "0.0.1", 181 | "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.1.tgz", 182 | "integrity": "sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A==", 183 | "requires": { 184 | "@types/node": "*" 185 | } 186 | }, 187 | "@types/user-agents": { 188 | "version": "1.0.0", 189 | "resolved": "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.0.tgz", 190 | "integrity": "sha512-oOSdQ9CULdFN2SJ9NNHvPrkP9aJ6oAz7BiiAeMC4vca+AzFqktlGdetMjlbCA0J3AemMn7ToU3U74VgrMecHtA==", 191 | "dev": true 192 | }, 193 | "@types/uuid": { 194 | "version": "8.0.0", 195 | "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.0.0.tgz", 196 | "integrity": "sha512-xSQfNcvOiE5f9dyd4Kzxbof1aTrLobL278pGLKOZI6esGfZ7ts9Ka16CzIN6Y8hFHE1C7jIBZokULhK1bOgjRw==", 197 | "dev": true 198 | }, 199 | "@typescript-eslint/eslint-plugin": { 200 | "version": "3.6.1", 201 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.6.1.tgz", 202 | "integrity": "sha512-06lfjo76naNeOMDl+mWG9Fh/a0UHKLGhin+mGaIw72FUMbMGBkdi/FEJmgEDzh4eE73KIYzHWvOCYJ0ak7nrJQ==", 203 | "dev": true, 204 | "requires": { 205 | "@typescript-eslint/experimental-utils": "3.6.1", 206 | "debug": "^4.1.1", 207 | "functional-red-black-tree": "^1.0.1", 208 | "regexpp": "^3.0.0", 209 | "semver": "^7.3.2", 210 | "tsutils": "^3.17.1" 211 | } 212 | }, 213 | "@typescript-eslint/experimental-utils": { 214 | "version": "3.6.1", 215 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.6.1.tgz", 216 | "integrity": "sha512-oS+hihzQE5M84ewXrTlVx7eTgc52eu+sVmG7ayLfOhyZmJ8Unvf3osyFQNADHP26yoThFfbxcibbO0d2FjnYhg==", 217 | "dev": true, 218 | "requires": { 219 | "@types/json-schema": "^7.0.3", 220 | "@typescript-eslint/types": "3.6.1", 221 | "@typescript-eslint/typescript-estree": "3.6.1", 222 | "eslint-scope": "^5.0.0", 223 | "eslint-utils": "^2.0.0" 224 | } 225 | }, 226 | "@typescript-eslint/parser": { 227 | "version": "3.6.1", 228 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.6.1.tgz", 229 | "integrity": "sha512-SLihQU8RMe77YJ/jGTqOt0lMq7k3hlPVfp7v/cxMnXA9T0bQYoMDfTsNgHXpwSJM1Iq2aAJ8WqekxUwGv5F67Q==", 230 | "dev": true, 231 | "requires": { 232 | "@types/eslint-visitor-keys": "^1.0.0", 233 | "@typescript-eslint/experimental-utils": "3.6.1", 234 | "@typescript-eslint/types": "3.6.1", 235 | "@typescript-eslint/typescript-estree": "3.6.1", 236 | "eslint-visitor-keys": "^1.1.0" 237 | } 238 | }, 239 | "@typescript-eslint/types": { 240 | "version": "3.6.1", 241 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.6.1.tgz", 242 | "integrity": "sha512-NPxd5yXG63gx57WDTW1rp0cF3XlNuuFFB5G+Kc48zZ+51ZnQn9yjDEsjTPQ+aWM+V+Z0I4kuTFKjKvgcT1F7xQ==", 243 | "dev": true 244 | }, 245 | "@typescript-eslint/typescript-estree": { 246 | "version": "3.6.1", 247 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.6.1.tgz", 248 | "integrity": "sha512-G4XRe/ZbCZkL1fy09DPN3U0mR6SayIv1zSeBNquRFRk7CnVLgkC2ZPj8llEMJg5Y8dJ3T76SvTGtceytniaztQ==", 249 | "dev": true, 250 | "requires": { 251 | "@typescript-eslint/types": "3.6.1", 252 | "@typescript-eslint/visitor-keys": "3.6.1", 253 | "debug": "^4.1.1", 254 | "glob": "^7.1.6", 255 | "is-glob": "^4.0.1", 256 | "lodash": "^4.17.15", 257 | "semver": "^7.3.2", 258 | "tsutils": "^3.17.1" 259 | } 260 | }, 261 | "@typescript-eslint/visitor-keys": { 262 | "version": "3.6.1", 263 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.6.1.tgz", 264 | "integrity": "sha512-qC8Olwz5ZyMTZrh4Wl3K4U6tfms0R/mzU4/5W3XeUZptVraGVmbptJbn6h2Ey6Rb3hOs3zWoAUebZk8t47KGiQ==", 265 | "dev": true, 266 | "requires": { 267 | "eslint-visitor-keys": "^1.1.0" 268 | } 269 | }, 270 | "abort-controller": { 271 | "version": "3.0.0", 272 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 273 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 274 | "requires": { 275 | "event-target-shim": "^5.0.0" 276 | } 277 | }, 278 | "acorn": { 279 | "version": "7.3.1", 280 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", 281 | "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", 282 | "dev": true 283 | }, 284 | "acorn-jsx": { 285 | "version": "5.2.0", 286 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 287 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 288 | "dev": true 289 | }, 290 | "agent-base": { 291 | "version": "6.0.1", 292 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", 293 | "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", 294 | "requires": { 295 | "debug": "4" 296 | } 297 | }, 298 | "ajv": { 299 | "version": "6.12.3", 300 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", 301 | "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", 302 | "dev": true, 303 | "requires": { 304 | "fast-deep-equal": "^3.1.1", 305 | "fast-json-stable-stringify": "^2.0.0", 306 | "json-schema-traverse": "^0.4.1", 307 | "uri-js": "^4.2.2" 308 | } 309 | }, 310 | "ansi-colors": { 311 | "version": "4.1.1", 312 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 313 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 314 | "dev": true 315 | }, 316 | "ansi-regex": { 317 | "version": "5.0.0", 318 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 319 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 320 | "dev": true 321 | }, 322 | "ansi-styles": { 323 | "version": "3.2.1", 324 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 325 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 326 | "dev": true, 327 | "requires": { 328 | "color-convert": "^1.9.0" 329 | } 330 | }, 331 | "argparse": { 332 | "version": "1.0.10", 333 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 334 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 335 | "dev": true, 336 | "requires": { 337 | "sprintf-js": "~1.0.2" 338 | } 339 | }, 340 | "astral-regex": { 341 | "version": "1.0.0", 342 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 343 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 344 | "dev": true 345 | }, 346 | "asynckit": { 347 | "version": "0.4.0", 348 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 349 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 350 | }, 351 | "aws-sdk": { 352 | "version": "2.714.2", 353 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.714.2.tgz", 354 | "integrity": "sha512-R79E/790Wr7GzPQtkUIUlh7H1GGMvgCSdQ/9c79QTVKEKTkVAbcYE678pwP7nzRk5PTzU/ECvbH2p9hWXNa4UA==", 355 | "requires": { 356 | "buffer": "4.9.2", 357 | "events": "1.1.1", 358 | "ieee754": "1.1.13", 359 | "jmespath": "0.15.0", 360 | "querystring": "0.2.0", 361 | "sax": "1.2.1", 362 | "url": "0.10.3", 363 | "uuid": "3.3.2", 364 | "xml2js": "0.4.19" 365 | }, 366 | "dependencies": { 367 | "uuid": { 368 | "version": "3.3.2", 369 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 370 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 371 | } 372 | } 373 | }, 374 | "balanced-match": { 375 | "version": "1.0.0", 376 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 377 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 378 | "dev": true 379 | }, 380 | "base64-js": { 381 | "version": "1.3.1", 382 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 383 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 384 | }, 385 | "brace-expansion": { 386 | "version": "1.1.11", 387 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 388 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 389 | "dev": true, 390 | "requires": { 391 | "balanced-match": "^1.0.0", 392 | "concat-map": "0.0.1" 393 | } 394 | }, 395 | "buffer": { 396 | "version": "4.9.2", 397 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 398 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 399 | "requires": { 400 | "base64-js": "^1.0.2", 401 | "ieee754": "^1.1.4", 402 | "isarray": "^1.0.0" 403 | } 404 | }, 405 | "cacheable-lookup": { 406 | "version": "5.0.3", 407 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", 408 | "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==" 409 | }, 410 | "cacheable-request": { 411 | "version": "7.0.1", 412 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", 413 | "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", 414 | "requires": { 415 | "clone-response": "^1.0.2", 416 | "get-stream": "^5.1.0", 417 | "http-cache-semantics": "^4.0.0", 418 | "keyv": "^4.0.0", 419 | "lowercase-keys": "^2.0.0", 420 | "normalize-url": "^4.1.0", 421 | "responselike": "^2.0.0" 422 | } 423 | }, 424 | "callsites": { 425 | "version": "3.1.0", 426 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 427 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 428 | "dev": true 429 | }, 430 | "chalk": { 431 | "version": "4.1.0", 432 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 433 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 434 | "dev": true, 435 | "requires": { 436 | "ansi-styles": "^4.1.0", 437 | "supports-color": "^7.1.0" 438 | }, 439 | "dependencies": { 440 | "ansi-styles": { 441 | "version": "4.2.1", 442 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 443 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 444 | "dev": true, 445 | "requires": { 446 | "@types/color-name": "^1.1.1", 447 | "color-convert": "^2.0.1" 448 | } 449 | }, 450 | "color-convert": { 451 | "version": "2.0.1", 452 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 453 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 454 | "dev": true, 455 | "requires": { 456 | "color-name": "~1.1.4" 457 | } 458 | }, 459 | "color-name": { 460 | "version": "1.1.4", 461 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 462 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 463 | "dev": true 464 | }, 465 | "has-flag": { 466 | "version": "4.0.0", 467 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 468 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 469 | "dev": true 470 | }, 471 | "supports-color": { 472 | "version": "7.1.0", 473 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 474 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 475 | "dev": true, 476 | "requires": { 477 | "has-flag": "^4.0.0" 478 | } 479 | } 480 | } 481 | }, 482 | "clone-response": { 483 | "version": "1.0.2", 484 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 485 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 486 | "requires": { 487 | "mimic-response": "^1.0.0" 488 | } 489 | }, 490 | "color-convert": { 491 | "version": "1.9.3", 492 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 493 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 494 | "dev": true, 495 | "requires": { 496 | "color-name": "1.1.3" 497 | } 498 | }, 499 | "color-name": { 500 | "version": "1.1.3", 501 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 502 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 503 | "dev": true 504 | }, 505 | "combined-stream": { 506 | "version": "1.0.8", 507 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 508 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 509 | "requires": { 510 | "delayed-stream": "~1.0.0" 511 | } 512 | }, 513 | "concat-map": { 514 | "version": "0.0.1", 515 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 516 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 517 | "dev": true 518 | }, 519 | "cross-spawn": { 520 | "version": "7.0.3", 521 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 522 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 523 | "dev": true, 524 | "requires": { 525 | "path-key": "^3.1.0", 526 | "shebang-command": "^2.0.0", 527 | "which": "^2.0.1" 528 | } 529 | }, 530 | "debug": { 531 | "version": "4.1.1", 532 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 533 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 534 | "requires": { 535 | "ms": "^2.1.1" 536 | } 537 | }, 538 | "decompress-response": { 539 | "version": "6.0.0", 540 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 541 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 542 | "requires": { 543 | "mimic-response": "^3.1.0" 544 | }, 545 | "dependencies": { 546 | "mimic-response": { 547 | "version": "3.1.0", 548 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 549 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" 550 | } 551 | } 552 | }, 553 | "deep-is": { 554 | "version": "0.1.3", 555 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 556 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 557 | "dev": true 558 | }, 559 | "defer-to-connect": { 560 | "version": "2.0.0", 561 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", 562 | "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==" 563 | }, 564 | "delayed-stream": { 565 | "version": "1.0.0", 566 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 567 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 568 | }, 569 | "detect-indent": { 570 | "version": "6.0.0", 571 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", 572 | "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==" 573 | }, 574 | "docopt": { 575 | "version": "0.6.2", 576 | "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", 577 | "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=" 578 | }, 579 | "doctrine": { 580 | "version": "3.0.0", 581 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 582 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 583 | "dev": true, 584 | "requires": { 585 | "esutils": "^2.0.2" 586 | } 587 | }, 588 | "dot-json": { 589 | "version": "1.2.0", 590 | "resolved": "https://registry.npmjs.org/dot-json/-/dot-json-1.2.0.tgz", 591 | "integrity": "sha512-4bEM7KHFl/U9gAI5nIvU0/fwVzNnE713K339vcxAMtxd2D9mZP6o65UwlcXigJL4rfk90UM0J+D7IPIFYZMQ8Q==", 592 | "requires": { 593 | "detect-indent": "~6.0.0", 594 | "docopt": "~0.6.2", 595 | "underscore-keypath": "~0.0.22" 596 | } 597 | }, 598 | "emoji-regex": { 599 | "version": "7.0.3", 600 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 601 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 602 | "dev": true 603 | }, 604 | "end-of-stream": { 605 | "version": "1.4.4", 606 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 607 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 608 | "requires": { 609 | "once": "^1.4.0" 610 | } 611 | }, 612 | "enquirer": { 613 | "version": "2.3.6", 614 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 615 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 616 | "dev": true, 617 | "requires": { 618 | "ansi-colors": "^4.1.1" 619 | } 620 | }, 621 | "escape-string-regexp": { 622 | "version": "1.0.5", 623 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 624 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 625 | "dev": true 626 | }, 627 | "eslint": { 628 | "version": "7.4.0", 629 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz", 630 | "integrity": "sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g==", 631 | "dev": true, 632 | "requires": { 633 | "@babel/code-frame": "^7.0.0", 634 | "ajv": "^6.10.0", 635 | "chalk": "^4.0.0", 636 | "cross-spawn": "^7.0.2", 637 | "debug": "^4.0.1", 638 | "doctrine": "^3.0.0", 639 | "enquirer": "^2.3.5", 640 | "eslint-scope": "^5.1.0", 641 | "eslint-utils": "^2.0.0", 642 | "eslint-visitor-keys": "^1.2.0", 643 | "espree": "^7.1.0", 644 | "esquery": "^1.2.0", 645 | "esutils": "^2.0.2", 646 | "file-entry-cache": "^5.0.1", 647 | "functional-red-black-tree": "^1.0.1", 648 | "glob-parent": "^5.0.0", 649 | "globals": "^12.1.0", 650 | "ignore": "^4.0.6", 651 | "import-fresh": "^3.0.0", 652 | "imurmurhash": "^0.1.4", 653 | "is-glob": "^4.0.0", 654 | "js-yaml": "^3.13.1", 655 | "json-stable-stringify-without-jsonify": "^1.0.1", 656 | "levn": "^0.4.1", 657 | "lodash": "^4.17.14", 658 | "minimatch": "^3.0.4", 659 | "natural-compare": "^1.4.0", 660 | "optionator": "^0.9.1", 661 | "progress": "^2.0.0", 662 | "regexpp": "^3.1.0", 663 | "semver": "^7.2.1", 664 | "strip-ansi": "^6.0.0", 665 | "strip-json-comments": "^3.1.0", 666 | "table": "^5.2.3", 667 | "text-table": "^0.2.0", 668 | "v8-compile-cache": "^2.0.3" 669 | } 670 | }, 671 | "eslint-plugin-prefer-arrow": { 672 | "version": "1.2.1", 673 | "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.1.tgz", 674 | "integrity": "sha512-CPAvdTGG0YbFAJrUKdRBrOJ0X1I7jTtF5VIM4m2Bw1/A2jrhfUeUAcPy4pAEB5DNaUuDqc59f3pKTeiVeamS1A==", 675 | "dev": true 676 | }, 677 | "eslint-scope": { 678 | "version": "5.1.0", 679 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", 680 | "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", 681 | "dev": true, 682 | "requires": { 683 | "esrecurse": "^4.1.0", 684 | "estraverse": "^4.1.1" 685 | } 686 | }, 687 | "eslint-utils": { 688 | "version": "2.1.0", 689 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 690 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 691 | "dev": true, 692 | "requires": { 693 | "eslint-visitor-keys": "^1.1.0" 694 | } 695 | }, 696 | "eslint-visitor-keys": { 697 | "version": "1.3.0", 698 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 699 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 700 | "dev": true 701 | }, 702 | "espree": { 703 | "version": "7.1.0", 704 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", 705 | "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", 706 | "dev": true, 707 | "requires": { 708 | "acorn": "^7.2.0", 709 | "acorn-jsx": "^5.2.0", 710 | "eslint-visitor-keys": "^1.2.0" 711 | } 712 | }, 713 | "esprima": { 714 | "version": "4.0.1", 715 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 716 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 717 | "dev": true 718 | }, 719 | "esquery": { 720 | "version": "1.3.1", 721 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 722 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 723 | "dev": true, 724 | "requires": { 725 | "estraverse": "^5.1.0" 726 | }, 727 | "dependencies": { 728 | "estraverse": { 729 | "version": "5.1.0", 730 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 731 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", 732 | "dev": true 733 | } 734 | } 735 | }, 736 | "esrecurse": { 737 | "version": "4.2.1", 738 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 739 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 740 | "dev": true, 741 | "requires": { 742 | "estraverse": "^4.1.0" 743 | } 744 | }, 745 | "estraverse": { 746 | "version": "4.3.0", 747 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 748 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 749 | "dev": true 750 | }, 751 | "esutils": { 752 | "version": "2.0.3", 753 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 754 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 755 | "dev": true 756 | }, 757 | "event-target-shim": { 758 | "version": "5.0.1", 759 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 760 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 761 | }, 762 | "events": { 763 | "version": "1.1.1", 764 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 765 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" 766 | }, 767 | "fast-deep-equal": { 768 | "version": "3.1.3", 769 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 770 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 771 | "dev": true 772 | }, 773 | "fast-json-stable-stringify": { 774 | "version": "2.1.0", 775 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 776 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 777 | "dev": true 778 | }, 779 | "fast-levenshtein": { 780 | "version": "2.0.6", 781 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 782 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 783 | "dev": true 784 | }, 785 | "file-entry-cache": { 786 | "version": "5.0.1", 787 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 788 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 789 | "dev": true, 790 | "requires": { 791 | "flat-cache": "^2.0.1" 792 | } 793 | }, 794 | "flat-cache": { 795 | "version": "2.0.1", 796 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 797 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 798 | "dev": true, 799 | "requires": { 800 | "flatted": "^2.0.0", 801 | "rimraf": "2.6.3", 802 | "write": "1.0.3" 803 | } 804 | }, 805 | "flatted": { 806 | "version": "2.0.2", 807 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 808 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 809 | "dev": true 810 | }, 811 | "form-data": { 812 | "version": "2.5.1", 813 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 814 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 815 | "requires": { 816 | "asynckit": "^0.4.0", 817 | "combined-stream": "^1.0.6", 818 | "mime-types": "^2.1.12" 819 | } 820 | }, 821 | "fs.realpath": { 822 | "version": "1.0.0", 823 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 824 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 825 | "dev": true 826 | }, 827 | "functional-red-black-tree": { 828 | "version": "1.0.1", 829 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 830 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 831 | "dev": true 832 | }, 833 | "get-stream": { 834 | "version": "5.1.0", 835 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 836 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 837 | "requires": { 838 | "pump": "^3.0.0" 839 | } 840 | }, 841 | "glob": { 842 | "version": "7.1.6", 843 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 844 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 845 | "dev": true, 846 | "requires": { 847 | "fs.realpath": "^1.0.0", 848 | "inflight": "^1.0.4", 849 | "inherits": "2", 850 | "minimatch": "^3.0.4", 851 | "once": "^1.3.0", 852 | "path-is-absolute": "^1.0.0" 853 | } 854 | }, 855 | "glob-parent": { 856 | "version": "5.1.1", 857 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 858 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 859 | "dev": true, 860 | "requires": { 861 | "is-glob": "^4.0.1" 862 | } 863 | }, 864 | "globals": { 865 | "version": "12.4.0", 866 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 867 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 868 | "dev": true, 869 | "requires": { 870 | "type-fest": "^0.8.1" 871 | } 872 | }, 873 | "got": { 874 | "version": "11.5.1", 875 | "resolved": "https://registry.npmjs.org/got/-/got-11.5.1.tgz", 876 | "integrity": "sha512-reQEZcEBMTGnujmQ+Wm97mJs/OK6INtO6HmLI+xt3+9CvnRwWjXutUvb2mqr+Ao4Lu05Rx6+udx9sOQAmExMxA==", 877 | "requires": { 878 | "@sindresorhus/is": "^3.0.0", 879 | "@szmarczak/http-timer": "^4.0.5", 880 | "@types/cacheable-request": "^6.0.1", 881 | "@types/responselike": "^1.0.0", 882 | "cacheable-lookup": "^5.0.3", 883 | "cacheable-request": "^7.0.1", 884 | "decompress-response": "^6.0.0", 885 | "http2-wrapper": "^1.0.0-beta.5.0", 886 | "lowercase-keys": "^2.0.0", 887 | "p-cancelable": "^2.0.0", 888 | "responselike": "^2.0.0" 889 | } 890 | }, 891 | "has-flag": { 892 | "version": "3.0.0", 893 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 894 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 895 | "dev": true 896 | }, 897 | "http-cache-semantics": { 898 | "version": "4.1.0", 899 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 900 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" 901 | }, 902 | "http-proxy-agent": { 903 | "version": "4.0.1", 904 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 905 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 906 | "requires": { 907 | "@tootallnate/once": "1", 908 | "agent-base": "6", 909 | "debug": "4" 910 | } 911 | }, 912 | "http2-wrapper": { 913 | "version": "1.0.0-beta.5.2", 914 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", 915 | "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", 916 | "requires": { 917 | "quick-lru": "^5.1.1", 918 | "resolve-alpn": "^1.0.0" 919 | } 920 | }, 921 | "https-proxy-agent": { 922 | "version": "5.0.0", 923 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 924 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 925 | "requires": { 926 | "agent-base": "6", 927 | "debug": "4" 928 | } 929 | }, 930 | "ieee754": { 931 | "version": "1.1.13", 932 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 933 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 934 | }, 935 | "ignore": { 936 | "version": "4.0.6", 937 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 938 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 939 | "dev": true 940 | }, 941 | "import-fresh": { 942 | "version": "3.2.1", 943 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 944 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 945 | "dev": true, 946 | "requires": { 947 | "parent-module": "^1.0.0", 948 | "resolve-from": "^4.0.0" 949 | } 950 | }, 951 | "imurmurhash": { 952 | "version": "0.1.4", 953 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 954 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 955 | "dev": true 956 | }, 957 | "inflight": { 958 | "version": "1.0.6", 959 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 960 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 961 | "dev": true, 962 | "requires": { 963 | "once": "^1.3.0", 964 | "wrappy": "1" 965 | } 966 | }, 967 | "inherits": { 968 | "version": "2.0.4", 969 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 970 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 971 | "dev": true 972 | }, 973 | "ip-regex": { 974 | "version": "2.1.0", 975 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", 976 | "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" 977 | }, 978 | "is-extglob": { 979 | "version": "2.1.1", 980 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 981 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 982 | "dev": true 983 | }, 984 | "is-fullwidth-code-point": { 985 | "version": "2.0.0", 986 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 987 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 988 | "dev": true 989 | }, 990 | "is-glob": { 991 | "version": "4.0.1", 992 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 993 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 994 | "dev": true, 995 | "requires": { 996 | "is-extglob": "^2.1.1" 997 | } 998 | }, 999 | "isarray": { 1000 | "version": "1.0.0", 1001 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1002 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1003 | }, 1004 | "isexe": { 1005 | "version": "2.0.0", 1006 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1007 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1008 | "dev": true 1009 | }, 1010 | "jmespath": { 1011 | "version": "0.15.0", 1012 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", 1013 | "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" 1014 | }, 1015 | "js-tokens": { 1016 | "version": "4.0.0", 1017 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1018 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1019 | "dev": true 1020 | }, 1021 | "js-yaml": { 1022 | "version": "3.14.0", 1023 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 1024 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 1025 | "dev": true, 1026 | "requires": { 1027 | "argparse": "^1.0.7", 1028 | "esprima": "^4.0.0" 1029 | } 1030 | }, 1031 | "json-buffer": { 1032 | "version": "3.0.1", 1033 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1034 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" 1035 | }, 1036 | "json-schema-traverse": { 1037 | "version": "0.4.1", 1038 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1039 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1040 | "dev": true 1041 | }, 1042 | "json-stable-stringify-without-jsonify": { 1043 | "version": "1.0.1", 1044 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1045 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1046 | "dev": true 1047 | }, 1048 | "keyv": { 1049 | "version": "4.0.1", 1050 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", 1051 | "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", 1052 | "requires": { 1053 | "json-buffer": "3.0.1" 1054 | } 1055 | }, 1056 | "levn": { 1057 | "version": "0.4.1", 1058 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1059 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1060 | "dev": true, 1061 | "requires": { 1062 | "prelude-ls": "^1.2.1", 1063 | "type-check": "~0.4.0" 1064 | } 1065 | }, 1066 | "lodash": { 1067 | "version": "4.17.19", 1068 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", 1069 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" 1070 | }, 1071 | "lodash.clonedeep": { 1072 | "version": "4.5.0", 1073 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 1074 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 1075 | }, 1076 | "lowercase-keys": { 1077 | "version": "2.0.0", 1078 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1079 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" 1080 | }, 1081 | "mime-db": { 1082 | "version": "1.44.0", 1083 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1084 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 1085 | }, 1086 | "mime-types": { 1087 | "version": "2.1.27", 1088 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1089 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1090 | "requires": { 1091 | "mime-db": "1.44.0" 1092 | } 1093 | }, 1094 | "mimic-response": { 1095 | "version": "1.0.1", 1096 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1097 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 1098 | }, 1099 | "minimatch": { 1100 | "version": "3.0.4", 1101 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1102 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1103 | "dev": true, 1104 | "requires": { 1105 | "brace-expansion": "^1.1.7" 1106 | } 1107 | }, 1108 | "minimist": { 1109 | "version": "1.2.5", 1110 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1111 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1112 | "dev": true 1113 | }, 1114 | "mkdirp": { 1115 | "version": "0.5.5", 1116 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1117 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1118 | "dev": true, 1119 | "requires": { 1120 | "minimist": "^1.2.5" 1121 | } 1122 | }, 1123 | "ms": { 1124 | "version": "2.1.2", 1125 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1126 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1127 | }, 1128 | "natural-compare": { 1129 | "version": "1.4.0", 1130 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1131 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1132 | "dev": true 1133 | }, 1134 | "node-fetch": { 1135 | "version": "2.6.0", 1136 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 1137 | "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" 1138 | }, 1139 | "normalize-url": { 1140 | "version": "4.5.0", 1141 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1142 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" 1143 | }, 1144 | "once": { 1145 | "version": "1.4.0", 1146 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1147 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1148 | "requires": { 1149 | "wrappy": "1" 1150 | } 1151 | }, 1152 | "optionator": { 1153 | "version": "0.9.1", 1154 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1155 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1156 | "dev": true, 1157 | "requires": { 1158 | "deep-is": "^0.1.3", 1159 | "fast-levenshtein": "^2.0.6", 1160 | "levn": "^0.4.1", 1161 | "prelude-ls": "^1.2.1", 1162 | "type-check": "^0.4.0", 1163 | "word-wrap": "^1.2.3" 1164 | } 1165 | }, 1166 | "p-cancelable": { 1167 | "version": "2.0.0", 1168 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", 1169 | "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" 1170 | }, 1171 | "parent-module": { 1172 | "version": "1.0.1", 1173 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1174 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1175 | "dev": true, 1176 | "requires": { 1177 | "callsites": "^3.0.0" 1178 | } 1179 | }, 1180 | "path-is-absolute": { 1181 | "version": "1.0.1", 1182 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1183 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1184 | "dev": true 1185 | }, 1186 | "path-key": { 1187 | "version": "3.1.1", 1188 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1189 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1190 | "dev": true 1191 | }, 1192 | "prelude-ls": { 1193 | "version": "1.2.1", 1194 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1195 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1196 | "dev": true 1197 | }, 1198 | "progress": { 1199 | "version": "2.0.3", 1200 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1201 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1202 | "dev": true 1203 | }, 1204 | "psl": { 1205 | "version": "1.8.0", 1206 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1207 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 1208 | }, 1209 | "pump": { 1210 | "version": "3.0.0", 1211 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1212 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1213 | "requires": { 1214 | "end-of-stream": "^1.1.0", 1215 | "once": "^1.3.1" 1216 | } 1217 | }, 1218 | "punycode": { 1219 | "version": "1.3.2", 1220 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1221 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 1222 | }, 1223 | "querystring": { 1224 | "version": "0.2.0", 1225 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1226 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 1227 | }, 1228 | "quick-lru": { 1229 | "version": "5.1.1", 1230 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1231 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" 1232 | }, 1233 | "regexpp": { 1234 | "version": "3.1.0", 1235 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 1236 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 1237 | "dev": true 1238 | }, 1239 | "resolve-alpn": { 1240 | "version": "1.0.0", 1241 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", 1242 | "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==" 1243 | }, 1244 | "resolve-from": { 1245 | "version": "4.0.0", 1246 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1247 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1248 | "dev": true 1249 | }, 1250 | "responselike": { 1251 | "version": "2.0.0", 1252 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", 1253 | "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", 1254 | "requires": { 1255 | "lowercase-keys": "^2.0.0" 1256 | } 1257 | }, 1258 | "rimraf": { 1259 | "version": "2.6.3", 1260 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1261 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1262 | "dev": true, 1263 | "requires": { 1264 | "glob": "^7.1.3" 1265 | } 1266 | }, 1267 | "sax": { 1268 | "version": "1.2.1", 1269 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 1270 | "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" 1271 | }, 1272 | "semver": { 1273 | "version": "7.3.2", 1274 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 1275 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 1276 | "dev": true 1277 | }, 1278 | "shebang-command": { 1279 | "version": "2.0.0", 1280 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1281 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1282 | "dev": true, 1283 | "requires": { 1284 | "shebang-regex": "^3.0.0" 1285 | } 1286 | }, 1287 | "shebang-regex": { 1288 | "version": "3.0.0", 1289 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1290 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1291 | "dev": true 1292 | }, 1293 | "slice-ansi": { 1294 | "version": "2.1.0", 1295 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1296 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1297 | "dev": true, 1298 | "requires": { 1299 | "ansi-styles": "^3.2.0", 1300 | "astral-regex": "^1.0.0", 1301 | "is-fullwidth-code-point": "^2.0.0" 1302 | } 1303 | }, 1304 | "sprintf-js": { 1305 | "version": "1.0.3", 1306 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1307 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1308 | "dev": true 1309 | }, 1310 | "string-width": { 1311 | "version": "3.1.0", 1312 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1313 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1314 | "dev": true, 1315 | "requires": { 1316 | "emoji-regex": "^7.0.1", 1317 | "is-fullwidth-code-point": "^2.0.0", 1318 | "strip-ansi": "^5.1.0" 1319 | }, 1320 | "dependencies": { 1321 | "ansi-regex": { 1322 | "version": "4.1.0", 1323 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1324 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1325 | "dev": true 1326 | }, 1327 | "strip-ansi": { 1328 | "version": "5.2.0", 1329 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1330 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1331 | "dev": true, 1332 | "requires": { 1333 | "ansi-regex": "^4.1.0" 1334 | } 1335 | } 1336 | } 1337 | }, 1338 | "strip-ansi": { 1339 | "version": "6.0.0", 1340 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1341 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1342 | "dev": true, 1343 | "requires": { 1344 | "ansi-regex": "^5.0.0" 1345 | } 1346 | }, 1347 | "strip-json-comments": { 1348 | "version": "3.1.1", 1349 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1350 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1351 | "dev": true 1352 | }, 1353 | "supports-color": { 1354 | "version": "5.5.0", 1355 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1356 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1357 | "dev": true, 1358 | "requires": { 1359 | "has-flag": "^3.0.0" 1360 | } 1361 | }, 1362 | "table": { 1363 | "version": "5.4.6", 1364 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1365 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1366 | "dev": true, 1367 | "requires": { 1368 | "ajv": "^6.10.2", 1369 | "lodash": "^4.17.14", 1370 | "slice-ansi": "^2.1.0", 1371 | "string-width": "^3.0.0" 1372 | } 1373 | }, 1374 | "text-table": { 1375 | "version": "0.2.0", 1376 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1377 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1378 | "dev": true 1379 | }, 1380 | "tough-cookie": { 1381 | "version": "3.0.1", 1382 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", 1383 | "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", 1384 | "requires": { 1385 | "ip-regex": "^2.1.0", 1386 | "psl": "^1.1.28", 1387 | "punycode": "^2.1.1" 1388 | }, 1389 | "dependencies": { 1390 | "punycode": { 1391 | "version": "2.1.1", 1392 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1393 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1394 | } 1395 | } 1396 | }, 1397 | "tslib": { 1398 | "version": "1.13.0", 1399 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1400 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" 1401 | }, 1402 | "tsutils": { 1403 | "version": "3.17.1", 1404 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", 1405 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", 1406 | "dev": true, 1407 | "requires": { 1408 | "tslib": "^1.8.1" 1409 | } 1410 | }, 1411 | "tunnel": { 1412 | "version": "0.0.6", 1413 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1414 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" 1415 | }, 1416 | "type-check": { 1417 | "version": "0.4.0", 1418 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1419 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1420 | "dev": true, 1421 | "requires": { 1422 | "prelude-ls": "^1.2.1" 1423 | } 1424 | }, 1425 | "type-fest": { 1426 | "version": "0.8.1", 1427 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1428 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1429 | "dev": true 1430 | }, 1431 | "typescript": { 1432 | "version": "3.9.7", 1433 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", 1434 | "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", 1435 | "dev": true 1436 | }, 1437 | "underscore": { 1438 | "version": "1.10.2", 1439 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", 1440 | "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==" 1441 | }, 1442 | "underscore-keypath": { 1443 | "version": "0.0.22", 1444 | "resolved": "https://registry.npmjs.org/underscore-keypath/-/underscore-keypath-0.0.22.tgz", 1445 | "integrity": "sha1-SKUoOSu278QkvhyqVtpLX6zPJk0=", 1446 | "requires": { 1447 | "underscore": "*" 1448 | } 1449 | }, 1450 | "uri-js": { 1451 | "version": "4.2.2", 1452 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1453 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1454 | "dev": true, 1455 | "requires": { 1456 | "punycode": "^2.1.0" 1457 | }, 1458 | "dependencies": { 1459 | "punycode": { 1460 | "version": "2.1.1", 1461 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1462 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1463 | "dev": true 1464 | } 1465 | } 1466 | }, 1467 | "url": { 1468 | "version": "0.10.3", 1469 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 1470 | "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", 1471 | "requires": { 1472 | "punycode": "1.3.2", 1473 | "querystring": "0.2.0" 1474 | } 1475 | }, 1476 | "user-agents": { 1477 | "version": "1.0.559", 1478 | "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.0.559.tgz", 1479 | "integrity": "sha512-HdAlNS3vDxOGMRwmv8or05xL96MV3CEwQhUSFTCRoOvTOEnWhTEBPAHRry/xZpVTTOtx77UHMal8YKcx6fs7Lg==", 1480 | "requires": { 1481 | "dot-json": "^1.2.0", 1482 | "lodash.clonedeep": "^4.5.0" 1483 | } 1484 | }, 1485 | "uuid": { 1486 | "version": "8.2.0", 1487 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz", 1488 | "integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==" 1489 | }, 1490 | "v8-compile-cache": { 1491 | "version": "2.1.1", 1492 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", 1493 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", 1494 | "dev": true 1495 | }, 1496 | "which": { 1497 | "version": "2.0.2", 1498 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1499 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1500 | "dev": true, 1501 | "requires": { 1502 | "isexe": "^2.0.0" 1503 | } 1504 | }, 1505 | "word-wrap": { 1506 | "version": "1.2.3", 1507 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1508 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1509 | "dev": true 1510 | }, 1511 | "wrappy": { 1512 | "version": "1.0.2", 1513 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1514 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1515 | }, 1516 | "write": { 1517 | "version": "1.0.3", 1518 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1519 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1520 | "dev": true, 1521 | "requires": { 1522 | "mkdirp": "^0.5.1" 1523 | } 1524 | }, 1525 | "xml2js": { 1526 | "version": "0.4.19", 1527 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", 1528 | "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", 1529 | "requires": { 1530 | "sax": ">=0.6.0", 1531 | "xmlbuilder": "~9.0.1" 1532 | } 1533 | }, 1534 | "xmlbuilder": { 1535 | "version": "9.0.7", 1536 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 1537 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" 1538 | } 1539 | } 1540 | } 1541 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hsolve", 3 | "version": "1.0.1", 4 | "description": "Solves hCaptcha", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "author": "zeddev", 8 | "scripts": { 9 | "build": "tsc", 10 | "prepare": "npm run build" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "directory": "git+https://github.com/zedd3v/hsolve.git" 15 | }, 16 | "keywords": [ 17 | "hcaptcha", 18 | "captcha", 19 | "solve" 20 | ], 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/zedd3v/hsolve/issues" 24 | }, 25 | "homepage": "https://github.com/zedd3v/hsolve#readme", 26 | "dependencies": { 27 | "@azure/cognitiveservices-computervision": "^7.0.0", 28 | "@azure/ms-rest-js": "^2.0.7", 29 | "aws-sdk": "^2.714.2", 30 | "got": "^11.5.1", 31 | "http-proxy-agent": "^4.0.1", 32 | "https-proxy-agent": "^5.0.0", 33 | "lodash": "^4.17.19", 34 | "user-agents": "^1.0.559", 35 | "uuid": "^8.2.0" 36 | }, 37 | "devDependencies": { 38 | "@types/lodash": "^4.14.157", 39 | "@types/node": "^14.0.23", 40 | "@types/user-agents": "^1.0.0", 41 | "@types/uuid": "^8.0.0", 42 | "@typescript-eslint/eslint-plugin": "^3.6.1", 43 | "@typescript-eslint/parser": "^3.6.1", 44 | "eslint": "^7.4.0", 45 | "eslint-plugin-prefer-arrow": "^1.2.1", 46 | "typescript": "^3.9.7" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/classify.ts: -------------------------------------------------------------------------------- 1 | import got from "got"; 2 | import _ from "lodash"; 3 | import * as AWS from 'aws-sdk'; 4 | import { ComputerVisionClient } from "@azure/cognitiveservices-computervision"; 5 | import { ApiKeyCredentials } from "@azure/ms-rest-js"; 6 | import { ImageTask, ImageSolution, SolveService } from './index'; 7 | 8 | interface CustomRecognitionResult { 9 | success: boolean; 10 | message: { 11 | className: string; 12 | }[]; 13 | } 14 | 15 | const initiateAWSClient = (awsAccessKey: string, awsSecretAccessKey: string, awsRegion: string) => { 16 | const config = new AWS.Config({ 17 | credentials: new AWS.Credentials({ accessKeyId: awsAccessKey, secretAccessKey: awsSecretAccessKey }), 18 | region: awsRegion 19 | }); 20 | if (!AWS.config.region) { 21 | AWS.config.update({ 22 | region: awsRegion, 23 | }); 24 | } 25 | return new AWS.Rekognition(); 26 | }; 27 | 28 | const getRawImage = async (url: string): Promise => { 29 | try { 30 | const { body } = await got(url, { responseType: `buffer` }); 31 | return body; 32 | } catch (e) { 33 | throw new Error(e); 34 | } 35 | }; 36 | 37 | 38 | const awsRekognition = async (awsClient: AWS.Rekognition, bytes: Buffer): Promise => { 39 | return new Promise((resolve, reject) => { 40 | awsClient.detectLabels({ 41 | Image: { 42 | Bytes: bytes 43 | }, 44 | MaxLabels: 5 45 | }, (e, res) => { 46 | if (e) reject(e); 47 | resolve(res.Labels); 48 | }); 49 | }); 50 | } 51 | 52 | const classify = async (solveService: SolveService, image: ImageTask, question: string): Promise => { 53 | let retryLimit = 0; 54 | try { 55 | if (solveService.name === "azure") { 56 | 57 | const computerVisionClient = new ComputerVisionClient( 58 | new ApiKeyCredentials({ 59 | inHeader: { 60 | 'Ocp-Apim-Subscription-Key': solveService.azureApiKey, 61 | }, 62 | }), 63 | solveService.azureEndpoint, 64 | ); 65 | let solve = await computerVisionClient.describeImage(image.datapoint_uri); 66 | return { 67 | [image.task_key]: solve.tags.includes(question), 68 | }; 69 | 70 | } else if (solveService.name === "aws") { 71 | 72 | const imageRaw = await getRawImage(image.datapoint_uri); 73 | const { awsAccessKey, awsSecretAccessKey, awsRegion } = solveService; 74 | const awsClient = initiateAWSClient(awsAccessKey, awsSecretAccessKey, awsRegion); 75 | const solve = await awsRekognition(awsClient, imageRaw); 76 | return { 77 | [image.task_key]: solve.some(e => e.Name.toLowerCase().includes(question)), 78 | } 79 | 80 | } else if (solveService.name === "custom") { 81 | 82 | const { body }: { body: CustomRecognitionResult } = await got(solveService.customUrl, { 83 | searchParams: { 84 | imageurl: image.datapoint_uri 85 | }, 86 | responseType: `json`, 87 | }); 88 | return { 89 | [image.task_key]: body.success ? body.message.some(s => s.className.includes(question)) : false, 90 | }; 91 | 92 | } else if (solveService.name === "random") { 93 | 94 | return { 95 | [image.task_key]: _.sample([true, false]), 96 | }; 97 | 98 | } 99 | } catch (e) { 100 | return retryLimit > 5 ? false : retryLimit--, classify(solveService, image, question); 101 | } 102 | } 103 | 104 | const classifyImages = async (solveService: SolveService, images: ImageTask[], question: string): Promise => { 105 | try { 106 | const promises = []; 107 | for (let i = 0; i < images.length; i++) { 108 | promises.push(classify(solveService, images[i], question)); 109 | } 110 | return Promise.all(promises); 111 | } catch (e) { 112 | throw new Error(e); 113 | } 114 | } 115 | 116 | export default classifyImages; -------------------------------------------------------------------------------- /src/functions.ts: -------------------------------------------------------------------------------- 1 | import UserAgent from 'user-agents'; 2 | import * as http from "http"; 3 | import * as https from "https"; 4 | import { parse } from "url"; 5 | import { HttpsProxyAgent } from 'https-proxy-agent'; 6 | import { HttpProxyAgent } from 'http-proxy-agent'; 7 | import _ from "lodash"; 8 | import { Agents } from 'got'; 9 | export const sleep = (ms: number): Promise => new Promise(r => setTimeout(r, ms)); 10 | 11 | export const generateUA = (deviceCategory = "desktop"): string => new UserAgent([/Chrome/, { deviceCategory }]).toString(); 12 | 13 | export const generateMouse = (timestamp: number): number[][] => { 14 | const mouse = []; 15 | for (let i = 0, ts = timestamp; i < _.random(1000, 10000); i++) { 16 | ts += _.random(0, 10); 17 | mouse.push([_.random(0, 500), _.random(0, 500), ts]); 18 | } 19 | return mouse; 20 | }; 21 | 22 | export const createAgents = (proxy: string): Agents => { 23 | return { 24 | http: new HttpProxyAgent(parse(proxy)) as unknown as http.Agent, 25 | https: new HttpsProxyAgent(parse(proxy)) as unknown as https.Agent, 26 | } 27 | }; -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import got, { Agents } from "got"; 2 | import * as URL from "url"; 3 | import _ from "lodash"; 4 | import * as VM from "vm"; 5 | import { v4 as uuidv4 } from "uuid"; 6 | import { generateUA, generateMouse, sleep, createAgents } from "./functions"; 7 | import classifyImages from "./classify"; 8 | 9 | export interface SolveService { 10 | name: "random" | "aws" | "azure" | "custom"; 11 | awsAccessKey?: string; 12 | awsSecretAccessKey?: string; 13 | awsRegion?: string; 14 | azureApiKey?: string; 15 | azureEndpoint?: string; 16 | customUrl?: string; 17 | } 18 | 19 | export interface ImageTask { 20 | datapoint_uri: string; 21 | task_key: string; 22 | } 23 | 24 | export interface ImageSolution { 25 | [key: string]: boolean; 26 | } 27 | 28 | interface SiteConfig { 29 | pass: boolean; 30 | c: { 31 | type: string; 32 | req: string; 33 | }; 34 | } 35 | 36 | interface CaptchaTask { 37 | challenge_uri: string; 38 | key: string; 39 | request_config: { 40 | version: number; 41 | shape_type: null; 42 | min_points: null; 43 | max_points: null; 44 | min_shapes_per_image: null; 45 | max_shapes_per_image: null; 46 | restrict_to_coords: null; 47 | minimum_selection_area_per_shape: null; 48 | multiple_choice_max_choices: number; 49 | multiple_choice_min_choices: number; 50 | }; 51 | request_type: string; 52 | requester_question: { 53 | en: string; 54 | }; 55 | requester_question_example: string[]; 56 | tasklist: ImageTask[]; 57 | "bypass-message": string; 58 | c: { 59 | type: string; 60 | req: string; 61 | }; 62 | generated_pass_UUID?: string; 63 | } 64 | 65 | const siteConfig = async ( 66 | host: string, 67 | siteKey: string, 68 | userAgent: string, 69 | agent?: Agents 70 | ): Promise => { 71 | try { 72 | const { body } = await got(`https://hcaptcha.com/checksiteconfig`, { 73 | searchParams: { 74 | host, 75 | sitekey: siteKey, 76 | sc: 1, 77 | swa: 0, 78 | }, 79 | headers: { 80 | "user-agent": userAgent, 81 | }, 82 | responseType: `json`, 83 | agent, 84 | }); 85 | return (body as SiteConfig).c; 86 | } catch (e) { 87 | if (e.response && e.response.statusCode === 429) { 88 | await sleep(30000); 89 | } else { 90 | throw new Error(e); 91 | } 92 | } 93 | }; 94 | 95 | const hsl = async (req: string) => { 96 | try { 97 | const { body } = await got( 98 | `https://assets.hcaptcha.com/c/500c658/hsl.js` 99 | ); 100 | return new Promise((resolve, reject) => { 101 | VM.runInNewContext( 102 | `var self={};function atob(a){return Buffer.from(a,'base64').toString('binary')} ${body} hsl('${req}').then(resolve).catch(reject)`, 103 | { 104 | Buffer, 105 | resolve, 106 | reject, 107 | } 108 | ); 109 | }); 110 | } catch (e) { 111 | throw new Error(e); 112 | } 113 | }; 114 | 115 | const getCaptcha = async ( 116 | host: string, 117 | siteKey: string, 118 | userAgent: string, 119 | c: SiteConfig["c"], 120 | timestamp: number, 121 | agent?: Agents 122 | ): Promise => { 123 | try { 124 | const { body } = await got.post(`https://hcaptcha.com/getcaptcha`, { 125 | searchParams: { 126 | host, 127 | sitekey: siteKey, 128 | sc: 1, 129 | swa: 0, 130 | }, 131 | headers: { 132 | "user-agent": userAgent, 133 | }, 134 | responseType: `json`, 135 | form: { 136 | sitekey: siteKey, 137 | host, 138 | n: await hsl(c.req), 139 | c: JSON.stringify(c), 140 | motionData: { 141 | st: timestamp, 142 | dct: timestamp, 143 | mm: generateMouse(timestamp), 144 | }, 145 | }, 146 | agent, 147 | }); 148 | return body as CaptchaTask; 149 | } catch (e) { 150 | if (e.response && e.response.statusCode === 429) { 151 | await sleep(30000); 152 | } else { 153 | throw new Error(e); 154 | } 155 | } 156 | }; 157 | 158 | const submitCaptcha = async ( 159 | host: string, 160 | siteKey: string, 161 | userAgent: string, 162 | timestamp: number, 163 | key: string, 164 | jobType: string, 165 | answers: { 166 | [key: string]: any; 167 | }, 168 | agent?: Agents 169 | ): Promise => { 170 | try { 171 | const { body }: { body: CaptchaTask } = await got.post( 172 | `https://hcaptcha.com/checkcaptcha/${key}`, 173 | { 174 | searchParams: { 175 | host, 176 | sitekey: siteKey, 177 | sc: 1, 178 | swa: 0, 179 | }, 180 | headers: { 181 | "user-agent": userAgent, 182 | }, 183 | responseType: `json`, 184 | form: { 185 | sitekey: siteKey, 186 | serverdomain: host, 187 | answers, 188 | job_mode: jobType, 189 | motionData: { 190 | st: timestamp, 191 | dct: timestamp, 192 | mm: generateMouse(timestamp), 193 | }, 194 | }, 195 | agent, 196 | } 197 | ); 198 | return body.generated_pass_UUID ? body.generated_pass_UUID : null; 199 | } catch (e) { 200 | if (e.response && e.response.statusCode === 429) { 201 | await sleep(30000); 202 | } else { 203 | throw new Error(e); 204 | } 205 | } 206 | }; 207 | 208 | const hsolve = async ( 209 | url: string, 210 | options: { 211 | timeout?: number; 212 | solveService?: SolveService; 213 | proxy?: string; 214 | } = {} 215 | ): Promise => { 216 | try { 217 | let { solveService, timeout, proxy } = options; 218 | if (timeout === undefined) timeout = 12000000; 219 | if (!proxy) proxy = null; 220 | if (!solveService) 221 | solveService = { 222 | name: "random", 223 | }; 224 | 225 | const startTimestamp = Date.now(); 226 | 227 | const timeoutCheck = 228 | timeout !== null 229 | ? setInterval(() => { 230 | if (Date.now() - startTimestamp > timeout) { 231 | clearInterval(timeoutCheck); 232 | throw new Error("hSolve Timeout"); 233 | } 234 | }, 200) 235 | : null; 236 | 237 | const agents = proxy ? createAgents(proxy) : undefined; 238 | 239 | const { hostname } = URL.parse(url); 240 | const userAgent = generateUA(); 241 | const siteKey = uuidv4(); 242 | 243 | const c = await siteConfig(hostname, siteKey, userAgent, agents); 244 | 245 | const captchaTask = await getCaptcha( 246 | hostname, 247 | siteKey, 248 | userAgent, 249 | c, 250 | Date.now() + _.random(30, 120), 251 | agents 252 | ); 253 | 254 | if (captchaTask.generated_pass_UUID) 255 | return captchaTask.generated_pass_UUID; 256 | 257 | const question = captchaTask.requester_question.en.includes( 258 | "containing an" 259 | ) 260 | ? captchaTask.requester_question.en.split( 261 | "Please click each image containing an " 262 | )[1] 263 | : captchaTask.requester_question.en 264 | .split("Please click each image containing a ")[1] 265 | .toLowerCase(); 266 | 267 | const answers = (await classifyImages( 268 | solveService, 269 | captchaTask.tasklist, 270 | question 271 | )).reduce((obj, ans) => Object.assign(obj, { [Object.keys(ans)[0]]: ans[Object.keys(ans)[0]] }), {}); 272 | 273 | const solution = await submitCaptcha( 274 | hostname, 275 | siteKey, 276 | userAgent, 277 | Date.now() + _.random(30, 120), 278 | captchaTask.key, 279 | captchaTask.request_type, 280 | answers, 281 | agents 282 | ); 283 | 284 | if (solution) { 285 | clearInterval(timeoutCheck); 286 | return solution; 287 | } 288 | 289 | await sleep(3000); 290 | return hsolve(url, { 291 | solveService, 292 | timeout: null, 293 | proxy, 294 | }); 295 | } catch (e) { 296 | throw new Error(e); 297 | } 298 | }; 299 | 300 | export default hsolve; 301 | 302 | // CommonJS support for default export 303 | module.exports = hsolve; 304 | module.exports.default = hsolve; 305 | module.exports.__esModule = true; 306 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "CommonJS", 4 | "target": "ESNext", 5 | "declaration": true, 6 | "declarationDir": "./dist", 7 | "outDir": "./dist", 8 | "noImplicitAny": true, 9 | "esModuleInterop": true 10 | }, 11 | "include": [ 12 | "src/**/*" 13 | ], 14 | "exclude": [ 15 | "dist/" 16 | ] 17 | } --------------------------------------------------------------------------------