├── .github └── workflows │ └── CI.yml ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── renovate.json └── src ├── examples ├── request.js └── screenshot.js ├── index.js ├── lib └── p-which.js └── test.js /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | node-version: [14.x, 15.x] 20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 21 | 22 | steps: 23 | - uses: actions/checkout@v2 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v2 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | - name: Install Tor 29 | run: sudo apt-get update && sudo apt-get install -y tor 30 | - run: npm ci 31 | - run: npm run build --if-present 32 | - run: npm test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nightlink 2 | 3 | > Start and control a Tor instance. 4 | 5 | ## Install 6 | 7 | $ npm install --save nightlink 8 | 9 | ## Usage 10 | 11 | ### Basic 12 | 13 | ```js 14 | const nightlink = require('nightlink'); 15 | 16 | const tor = await nightlink.launch({ 17 | SocksPort: 9050 18 | }); 19 | 20 | // Tor has started and connected to the network. 21 | 22 | await tor.close(); 23 | ``` 24 | 25 | ### Logs 26 | 27 | ```js 28 | tor.on('log', {level, msg} => { 29 | console.log(`[${level}] ${msg}`); 30 | }) 31 | ``` 32 | 33 | ### Logs by level 34 | 35 | ```js 36 | tor.on('notice', console.log); 37 | tor.on('warn', console.log); 38 | tor.on('err', console.error); 39 | ``` 40 | 41 | ## Examples 42 | 43 | * [Start Tor, make a HTTP request and shutdown](./src/examples/request.js) 44 | * [Start Tor, start Chrome, screenshot URL and shutdown](./src/examples/screenshot.js) 45 | 46 | ## API 47 | 48 | ### nightlink.launch([options]) 49 | 50 | 51 | #### options 52 | 53 | Type: `object` 54 | 55 | Define options to be used. 56 | 57 | ##### SocksPort 58 | 59 | Type: Number 60 | 61 | Define port Tor should start the SOCKS proxy on. 62 | 63 | #### .close() 64 | 65 | #### .on('log', callback) 66 | #### .on('notice', callback) 67 | #### .on('warn', callback) 68 | #### .on('err', callback) 69 | 70 | ## Licence 71 | 72 | MIT © [Ben Evans](https://bencevans.io) -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nightlink", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "0.1.0", 9 | "license": "MIT", 10 | "dependencies": { 11 | "split": "^1.0.1", 12 | "which": "^2.0.2" 13 | }, 14 | "devDependencies": { 15 | "proxy-agent": "^4.0.1", 16 | "puppeteer": "^10.0.0" 17 | } 18 | }, 19 | "node_modules/@tootallnate/once": { 20 | "version": "1.1.2", 21 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 22 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 23 | "dev": true, 24 | "engines": { 25 | "node": ">= 6" 26 | } 27 | }, 28 | "node_modules/@types/node": { 29 | "version": "15.12.2", 30 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", 31 | "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", 32 | "dev": true, 33 | "optional": true 34 | }, 35 | "node_modules/@types/yauzl": { 36 | "version": "2.9.1", 37 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", 38 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", 39 | "dev": true, 40 | "optional": true, 41 | "dependencies": { 42 | "@types/node": "*" 43 | } 44 | }, 45 | "node_modules/agent-base": { 46 | "version": "6.0.2", 47 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 48 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 49 | "dev": true, 50 | "dependencies": { 51 | "debug": "4" 52 | }, 53 | "engines": { 54 | "node": ">= 6.0.0" 55 | } 56 | }, 57 | "node_modules/ast-types": { 58 | "version": "0.13.4", 59 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 60 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 61 | "dev": true, 62 | "dependencies": { 63 | "tslib": "^2.0.1" 64 | }, 65 | "engines": { 66 | "node": ">=4" 67 | } 68 | }, 69 | "node_modules/balanced-match": { 70 | "version": "1.0.2", 71 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 72 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 73 | "dev": true 74 | }, 75 | "node_modules/base64-js": { 76 | "version": "1.5.1", 77 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 78 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 79 | "dev": true, 80 | "funding": [ 81 | { 82 | "type": "github", 83 | "url": "https://github.com/sponsors/feross" 84 | }, 85 | { 86 | "type": "patreon", 87 | "url": "https://www.patreon.com/feross" 88 | }, 89 | { 90 | "type": "consulting", 91 | "url": "https://feross.org/support" 92 | } 93 | ] 94 | }, 95 | "node_modules/bl": { 96 | "version": "4.1.0", 97 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 98 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 99 | "dev": true, 100 | "dependencies": { 101 | "buffer": "^5.5.0", 102 | "inherits": "^2.0.4", 103 | "readable-stream": "^3.4.0" 104 | } 105 | }, 106 | "node_modules/bl/node_modules/readable-stream": { 107 | "version": "3.6.0", 108 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 109 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 110 | "dev": true, 111 | "dependencies": { 112 | "inherits": "^2.0.3", 113 | "string_decoder": "^1.1.1", 114 | "util-deprecate": "^1.0.1" 115 | }, 116 | "engines": { 117 | "node": ">= 6" 118 | } 119 | }, 120 | "node_modules/bl/node_modules/string_decoder": { 121 | "version": "1.3.0", 122 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 123 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 124 | "dev": true, 125 | "dependencies": { 126 | "safe-buffer": "~5.2.0" 127 | } 128 | }, 129 | "node_modules/brace-expansion": { 130 | "version": "1.1.11", 131 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 132 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 133 | "dev": true, 134 | "dependencies": { 135 | "balanced-match": "^1.0.0", 136 | "concat-map": "0.0.1" 137 | } 138 | }, 139 | "node_modules/buffer": { 140 | "version": "5.7.1", 141 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 142 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 143 | "dev": true, 144 | "funding": [ 145 | { 146 | "type": "github", 147 | "url": "https://github.com/sponsors/feross" 148 | }, 149 | { 150 | "type": "patreon", 151 | "url": "https://www.patreon.com/feross" 152 | }, 153 | { 154 | "type": "consulting", 155 | "url": "https://feross.org/support" 156 | } 157 | ], 158 | "dependencies": { 159 | "base64-js": "^1.3.1", 160 | "ieee754": "^1.1.13" 161 | } 162 | }, 163 | "node_modules/buffer-crc32": { 164 | "version": "0.2.13", 165 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 166 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 167 | "dev": true, 168 | "engines": { 169 | "node": "*" 170 | } 171 | }, 172 | "node_modules/bytes": { 173 | "version": "3.1.0", 174 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 175 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", 176 | "dev": true, 177 | "engines": { 178 | "node": ">= 0.8" 179 | } 180 | }, 181 | "node_modules/chownr": { 182 | "version": "1.1.4", 183 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 184 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 185 | "dev": true 186 | }, 187 | "node_modules/concat-map": { 188 | "version": "0.0.1", 189 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 190 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 191 | "dev": true 192 | }, 193 | "node_modules/core-util-is": { 194 | "version": "1.0.2", 195 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 196 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 197 | "dev": true 198 | }, 199 | "node_modules/data-uri-to-buffer": { 200 | "version": "3.0.1", 201 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", 202 | "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", 203 | "dev": true, 204 | "engines": { 205 | "node": ">= 6" 206 | } 207 | }, 208 | "node_modules/debug": { 209 | "version": "4.3.1", 210 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 211 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 212 | "dev": true, 213 | "dependencies": { 214 | "ms": "2.1.2" 215 | }, 216 | "engines": { 217 | "node": ">=6.0" 218 | }, 219 | "peerDependenciesMeta": { 220 | "supports-color": { 221 | "optional": true 222 | } 223 | } 224 | }, 225 | "node_modules/deep-is": { 226 | "version": "0.1.3", 227 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 228 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 229 | "dev": true 230 | }, 231 | "node_modules/degenerator": { 232 | "version": "2.2.0", 233 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", 234 | "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", 235 | "dev": true, 236 | "dependencies": { 237 | "ast-types": "^0.13.2", 238 | "escodegen": "^1.8.1", 239 | "esprima": "^4.0.0" 240 | }, 241 | "engines": { 242 | "node": ">= 6" 243 | } 244 | }, 245 | "node_modules/depd": { 246 | "version": "1.1.2", 247 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 248 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 249 | "dev": true, 250 | "engines": { 251 | "node": ">= 0.6" 252 | } 253 | }, 254 | "node_modules/devtools-protocol": { 255 | "version": "0.0.883894", 256 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.883894.tgz", 257 | "integrity": "sha512-33idhm54QJzf3Q7QofMgCvIVSd2o9H3kQPWaKT/fhoZh+digc+WSiMhbkeG3iN79WY4Hwr9G05NpbhEVrsOYAg==", 258 | "dev": true 259 | }, 260 | "node_modules/end-of-stream": { 261 | "version": "1.4.4", 262 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 263 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 264 | "dev": true, 265 | "dependencies": { 266 | "once": "^1.4.0" 267 | } 268 | }, 269 | "node_modules/escodegen": { 270 | "version": "1.14.3", 271 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", 272 | "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", 273 | "dev": true, 274 | "dependencies": { 275 | "esprima": "^4.0.1", 276 | "estraverse": "^4.2.0", 277 | "esutils": "^2.0.2", 278 | "optionator": "^0.8.1" 279 | }, 280 | "bin": { 281 | "escodegen": "bin/escodegen.js", 282 | "esgenerate": "bin/esgenerate.js" 283 | }, 284 | "engines": { 285 | "node": ">=4.0" 286 | }, 287 | "optionalDependencies": { 288 | "source-map": "~0.6.1" 289 | } 290 | }, 291 | "node_modules/esprima": { 292 | "version": "4.0.1", 293 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 294 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 295 | "dev": true, 296 | "bin": { 297 | "esparse": "bin/esparse.js", 298 | "esvalidate": "bin/esvalidate.js" 299 | }, 300 | "engines": { 301 | "node": ">=4" 302 | } 303 | }, 304 | "node_modules/estraverse": { 305 | "version": "4.3.0", 306 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 307 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 308 | "dev": true, 309 | "engines": { 310 | "node": ">=4.0" 311 | } 312 | }, 313 | "node_modules/esutils": { 314 | "version": "2.0.3", 315 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 316 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 317 | "dev": true, 318 | "engines": { 319 | "node": ">=0.10.0" 320 | } 321 | }, 322 | "node_modules/extract-zip": { 323 | "version": "2.0.1", 324 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 325 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 326 | "dev": true, 327 | "dependencies": { 328 | "debug": "^4.1.1", 329 | "get-stream": "^5.1.0", 330 | "yauzl": "^2.10.0" 331 | }, 332 | "bin": { 333 | "extract-zip": "cli.js" 334 | }, 335 | "engines": { 336 | "node": ">= 10.17.0" 337 | }, 338 | "optionalDependencies": { 339 | "@types/yauzl": "^2.9.1" 340 | } 341 | }, 342 | "node_modules/fast-levenshtein": { 343 | "version": "2.0.6", 344 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 345 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 346 | "dev": true 347 | }, 348 | "node_modules/fd-slicer": { 349 | "version": "1.1.0", 350 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 351 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 352 | "dev": true, 353 | "dependencies": { 354 | "pend": "~1.2.0" 355 | } 356 | }, 357 | "node_modules/file-uri-to-path": { 358 | "version": "2.0.0", 359 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", 360 | "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", 361 | "dev": true, 362 | "engines": { 363 | "node": ">= 6" 364 | } 365 | }, 366 | "node_modules/find-up": { 367 | "version": "4.1.0", 368 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 369 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 370 | "dev": true, 371 | "dependencies": { 372 | "locate-path": "^5.0.0", 373 | "path-exists": "^4.0.0" 374 | }, 375 | "engines": { 376 | "node": ">=8" 377 | } 378 | }, 379 | "node_modules/fs-constants": { 380 | "version": "1.0.0", 381 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 382 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 383 | "dev": true 384 | }, 385 | "node_modules/fs-extra": { 386 | "version": "8.1.0", 387 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 388 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 389 | "dev": true, 390 | "dependencies": { 391 | "graceful-fs": "^4.2.0", 392 | "jsonfile": "^4.0.0", 393 | "universalify": "^0.1.0" 394 | }, 395 | "engines": { 396 | "node": ">=6 <7 || >=8" 397 | } 398 | }, 399 | "node_modules/fs.realpath": { 400 | "version": "1.0.0", 401 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 402 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 403 | "dev": true 404 | }, 405 | "node_modules/ftp": { 406 | "version": "0.3.10", 407 | "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", 408 | "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", 409 | "dev": true, 410 | "dependencies": { 411 | "readable-stream": "1.1.x", 412 | "xregexp": "2.0.0" 413 | }, 414 | "engines": { 415 | "node": ">=0.8.0" 416 | } 417 | }, 418 | "node_modules/get-stream": { 419 | "version": "5.2.0", 420 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 421 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 422 | "dev": true, 423 | "dependencies": { 424 | "pump": "^3.0.0" 425 | }, 426 | "engines": { 427 | "node": ">=8" 428 | }, 429 | "funding": { 430 | "url": "https://github.com/sponsors/sindresorhus" 431 | } 432 | }, 433 | "node_modules/get-uri": { 434 | "version": "3.0.2", 435 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", 436 | "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", 437 | "dev": true, 438 | "dependencies": { 439 | "@tootallnate/once": "1", 440 | "data-uri-to-buffer": "3", 441 | "debug": "4", 442 | "file-uri-to-path": "2", 443 | "fs-extra": "^8.1.0", 444 | "ftp": "^0.3.10" 445 | }, 446 | "engines": { 447 | "node": ">= 6" 448 | } 449 | }, 450 | "node_modules/glob": { 451 | "version": "7.1.7", 452 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 453 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 454 | "dev": true, 455 | "dependencies": { 456 | "fs.realpath": "^1.0.0", 457 | "inflight": "^1.0.4", 458 | "inherits": "2", 459 | "minimatch": "^3.0.4", 460 | "once": "^1.3.0", 461 | "path-is-absolute": "^1.0.0" 462 | }, 463 | "engines": { 464 | "node": "*" 465 | }, 466 | "funding": { 467 | "url": "https://github.com/sponsors/isaacs" 468 | } 469 | }, 470 | "node_modules/graceful-fs": { 471 | "version": "4.2.6", 472 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 473 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 474 | "dev": true 475 | }, 476 | "node_modules/http-errors": { 477 | "version": "1.7.3", 478 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 479 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 480 | "dev": true, 481 | "dependencies": { 482 | "depd": "~1.1.2", 483 | "inherits": "2.0.4", 484 | "setprototypeof": "1.1.1", 485 | "statuses": ">= 1.5.0 < 2", 486 | "toidentifier": "1.0.0" 487 | }, 488 | "engines": { 489 | "node": ">= 0.6" 490 | } 491 | }, 492 | "node_modules/http-proxy-agent": { 493 | "version": "4.0.1", 494 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 495 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 496 | "dev": true, 497 | "dependencies": { 498 | "@tootallnate/once": "1", 499 | "agent-base": "6", 500 | "debug": "4" 501 | }, 502 | "engines": { 503 | "node": ">= 6" 504 | } 505 | }, 506 | "node_modules/https-proxy-agent": { 507 | "version": "5.0.0", 508 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 509 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 510 | "dev": true, 511 | "dependencies": { 512 | "agent-base": "6", 513 | "debug": "4" 514 | }, 515 | "engines": { 516 | "node": ">= 6" 517 | } 518 | }, 519 | "node_modules/iconv-lite": { 520 | "version": "0.4.24", 521 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 522 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 523 | "dev": true, 524 | "dependencies": { 525 | "safer-buffer": ">= 2.1.2 < 3" 526 | }, 527 | "engines": { 528 | "node": ">=0.10.0" 529 | } 530 | }, 531 | "node_modules/ieee754": { 532 | "version": "1.2.1", 533 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 534 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 535 | "dev": true, 536 | "funding": [ 537 | { 538 | "type": "github", 539 | "url": "https://github.com/sponsors/feross" 540 | }, 541 | { 542 | "type": "patreon", 543 | "url": "https://www.patreon.com/feross" 544 | }, 545 | { 546 | "type": "consulting", 547 | "url": "https://feross.org/support" 548 | } 549 | ] 550 | }, 551 | "node_modules/inflight": { 552 | "version": "1.0.6", 553 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 554 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 555 | "dev": true, 556 | "dependencies": { 557 | "once": "^1.3.0", 558 | "wrappy": "1" 559 | } 560 | }, 561 | "node_modules/inherits": { 562 | "version": "2.0.4", 563 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 564 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 565 | "dev": true 566 | }, 567 | "node_modules/ip": { 568 | "version": "1.1.5", 569 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 570 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", 571 | "dev": true 572 | }, 573 | "node_modules/isarray": { 574 | "version": "0.0.1", 575 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 576 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 577 | "dev": true 578 | }, 579 | "node_modules/isexe": { 580 | "version": "2.0.0", 581 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 582 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 583 | }, 584 | "node_modules/jsonfile": { 585 | "version": "4.0.0", 586 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 587 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 588 | "dev": true, 589 | "optionalDependencies": { 590 | "graceful-fs": "^4.1.6" 591 | } 592 | }, 593 | "node_modules/levn": { 594 | "version": "0.3.0", 595 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 596 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 597 | "dev": true, 598 | "dependencies": { 599 | "prelude-ls": "~1.1.2", 600 | "type-check": "~0.3.2" 601 | }, 602 | "engines": { 603 | "node": ">= 0.8.0" 604 | } 605 | }, 606 | "node_modules/locate-path": { 607 | "version": "5.0.0", 608 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 609 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 610 | "dev": true, 611 | "dependencies": { 612 | "p-locate": "^4.1.0" 613 | }, 614 | "engines": { 615 | "node": ">=8" 616 | } 617 | }, 618 | "node_modules/lru-cache": { 619 | "version": "5.1.1", 620 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 621 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 622 | "dev": true, 623 | "dependencies": { 624 | "yallist": "^3.0.2" 625 | } 626 | }, 627 | "node_modules/minimatch": { 628 | "version": "3.0.4", 629 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 630 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 631 | "dev": true, 632 | "dependencies": { 633 | "brace-expansion": "^1.1.7" 634 | }, 635 | "engines": { 636 | "node": "*" 637 | } 638 | }, 639 | "node_modules/minimist": { 640 | "version": "1.2.6", 641 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 642 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 643 | "dev": true 644 | }, 645 | "node_modules/mkdirp": { 646 | "version": "0.5.5", 647 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 648 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 649 | "dev": true, 650 | "dependencies": { 651 | "minimist": "^1.2.5" 652 | }, 653 | "bin": { 654 | "mkdirp": "bin/cmd.js" 655 | } 656 | }, 657 | "node_modules/ms": { 658 | "version": "2.1.2", 659 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 660 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 661 | "dev": true 662 | }, 663 | "node_modules/netmask": { 664 | "version": "2.0.2", 665 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 666 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", 667 | "dev": true, 668 | "engines": { 669 | "node": ">= 0.4.0" 670 | } 671 | }, 672 | "node_modules/node-fetch": { 673 | "version": "2.6.1", 674 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 675 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 676 | "dev": true, 677 | "engines": { 678 | "node": "4.x || >=6.0.0" 679 | } 680 | }, 681 | "node_modules/once": { 682 | "version": "1.4.0", 683 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 684 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 685 | "dev": true, 686 | "dependencies": { 687 | "wrappy": "1" 688 | } 689 | }, 690 | "node_modules/optionator": { 691 | "version": "0.8.3", 692 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 693 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 694 | "dev": true, 695 | "dependencies": { 696 | "deep-is": "~0.1.3", 697 | "fast-levenshtein": "~2.0.6", 698 | "levn": "~0.3.0", 699 | "prelude-ls": "~1.1.2", 700 | "type-check": "~0.3.2", 701 | "word-wrap": "~1.2.3" 702 | }, 703 | "engines": { 704 | "node": ">= 0.8.0" 705 | } 706 | }, 707 | "node_modules/p-limit": { 708 | "version": "2.3.0", 709 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 710 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 711 | "dev": true, 712 | "dependencies": { 713 | "p-try": "^2.0.0" 714 | }, 715 | "engines": { 716 | "node": ">=6" 717 | }, 718 | "funding": { 719 | "url": "https://github.com/sponsors/sindresorhus" 720 | } 721 | }, 722 | "node_modules/p-locate": { 723 | "version": "4.1.0", 724 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 725 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 726 | "dev": true, 727 | "dependencies": { 728 | "p-limit": "^2.2.0" 729 | }, 730 | "engines": { 731 | "node": ">=8" 732 | } 733 | }, 734 | "node_modules/p-try": { 735 | "version": "2.2.0", 736 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 737 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 738 | "dev": true, 739 | "engines": { 740 | "node": ">=6" 741 | } 742 | }, 743 | "node_modules/pac-proxy-agent": { 744 | "version": "4.1.0", 745 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", 746 | "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", 747 | "dev": true, 748 | "dependencies": { 749 | "@tootallnate/once": "1", 750 | "agent-base": "6", 751 | "debug": "4", 752 | "get-uri": "3", 753 | "http-proxy-agent": "^4.0.1", 754 | "https-proxy-agent": "5", 755 | "pac-resolver": "^4.1.0", 756 | "raw-body": "^2.2.0", 757 | "socks-proxy-agent": "5" 758 | }, 759 | "engines": { 760 | "node": ">= 6" 761 | } 762 | }, 763 | "node_modules/pac-resolver": { 764 | "version": "4.2.0", 765 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", 766 | "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", 767 | "dev": true, 768 | "dependencies": { 769 | "degenerator": "^2.2.0", 770 | "ip": "^1.1.5", 771 | "netmask": "^2.0.1" 772 | }, 773 | "engines": { 774 | "node": ">= 6" 775 | } 776 | }, 777 | "node_modules/path-exists": { 778 | "version": "4.0.0", 779 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 780 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 781 | "dev": true, 782 | "engines": { 783 | "node": ">=8" 784 | } 785 | }, 786 | "node_modules/path-is-absolute": { 787 | "version": "1.0.1", 788 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 789 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 790 | "dev": true, 791 | "engines": { 792 | "node": ">=0.10.0" 793 | } 794 | }, 795 | "node_modules/pend": { 796 | "version": "1.2.0", 797 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 798 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 799 | "dev": true 800 | }, 801 | "node_modules/pkg-dir": { 802 | "version": "4.2.0", 803 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 804 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 805 | "dev": true, 806 | "dependencies": { 807 | "find-up": "^4.0.0" 808 | }, 809 | "engines": { 810 | "node": ">=8" 811 | } 812 | }, 813 | "node_modules/prelude-ls": { 814 | "version": "1.1.2", 815 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 816 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 817 | "dev": true, 818 | "engines": { 819 | "node": ">= 0.8.0" 820 | } 821 | }, 822 | "node_modules/progress": { 823 | "version": "2.0.1", 824 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", 825 | "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", 826 | "dev": true, 827 | "engines": { 828 | "node": ">=0.4.0" 829 | } 830 | }, 831 | "node_modules/proxy-agent": { 832 | "version": "4.0.1", 833 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", 834 | "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", 835 | "dev": true, 836 | "dependencies": { 837 | "agent-base": "^6.0.0", 838 | "debug": "4", 839 | "http-proxy-agent": "^4.0.0", 840 | "https-proxy-agent": "^5.0.0", 841 | "lru-cache": "^5.1.1", 842 | "pac-proxy-agent": "^4.1.0", 843 | "proxy-from-env": "^1.0.0", 844 | "socks-proxy-agent": "^5.0.0" 845 | }, 846 | "engines": { 847 | "node": ">=6" 848 | } 849 | }, 850 | "node_modules/proxy-from-env": { 851 | "version": "1.1.0", 852 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 853 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 854 | "dev": true 855 | }, 856 | "node_modules/pump": { 857 | "version": "3.0.0", 858 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 859 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 860 | "dev": true, 861 | "dependencies": { 862 | "end-of-stream": "^1.1.0", 863 | "once": "^1.3.1" 864 | } 865 | }, 866 | "node_modules/puppeteer": { 867 | "version": "10.0.0", 868 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.0.0.tgz", 869 | "integrity": "sha512-AxHvCb9IWmmP3gMW+epxdj92Gglii+6Z4sb+W+zc2hTTu10HF0yg6hGXot5O74uYkVqG3lfDRLfnRpi6WOwi5A==", 870 | "dev": true, 871 | "hasInstallScript": true, 872 | "dependencies": { 873 | "debug": "4.3.1", 874 | "devtools-protocol": "0.0.883894", 875 | "extract-zip": "2.0.1", 876 | "https-proxy-agent": "5.0.0", 877 | "node-fetch": "2.6.1", 878 | "pkg-dir": "4.2.0", 879 | "progress": "2.0.1", 880 | "proxy-from-env": "1.1.0", 881 | "rimraf": "3.0.2", 882 | "tar-fs": "2.0.0", 883 | "unbzip2-stream": "1.3.3", 884 | "ws": "7.4.6" 885 | }, 886 | "engines": { 887 | "node": ">=10.18.1" 888 | } 889 | }, 890 | "node_modules/raw-body": { 891 | "version": "2.4.1", 892 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", 893 | "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", 894 | "dev": true, 895 | "dependencies": { 896 | "bytes": "3.1.0", 897 | "http-errors": "1.7.3", 898 | "iconv-lite": "0.4.24", 899 | "unpipe": "1.0.0" 900 | }, 901 | "engines": { 902 | "node": ">= 0.8" 903 | } 904 | }, 905 | "node_modules/readable-stream": { 906 | "version": "1.1.14", 907 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 908 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 909 | "dev": true, 910 | "dependencies": { 911 | "core-util-is": "~1.0.0", 912 | "inherits": "~2.0.1", 913 | "isarray": "0.0.1", 914 | "string_decoder": "~0.10.x" 915 | } 916 | }, 917 | "node_modules/rimraf": { 918 | "version": "3.0.2", 919 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 920 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 921 | "dev": true, 922 | "dependencies": { 923 | "glob": "^7.1.3" 924 | }, 925 | "bin": { 926 | "rimraf": "bin.js" 927 | }, 928 | "funding": { 929 | "url": "https://github.com/sponsors/isaacs" 930 | } 931 | }, 932 | "node_modules/safe-buffer": { 933 | "version": "5.2.1", 934 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 935 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 936 | "dev": true, 937 | "funding": [ 938 | { 939 | "type": "github", 940 | "url": "https://github.com/sponsors/feross" 941 | }, 942 | { 943 | "type": "patreon", 944 | "url": "https://www.patreon.com/feross" 945 | }, 946 | { 947 | "type": "consulting", 948 | "url": "https://feross.org/support" 949 | } 950 | ] 951 | }, 952 | "node_modules/safer-buffer": { 953 | "version": "2.1.2", 954 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 955 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 956 | "dev": true 957 | }, 958 | "node_modules/setprototypeof": { 959 | "version": "1.1.1", 960 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 961 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", 962 | "dev": true 963 | }, 964 | "node_modules/smart-buffer": { 965 | "version": "4.1.0", 966 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", 967 | "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", 968 | "dev": true, 969 | "engines": { 970 | "node": ">= 6.0.0", 971 | "npm": ">= 3.0.0" 972 | } 973 | }, 974 | "node_modules/socks": { 975 | "version": "2.6.1", 976 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", 977 | "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", 978 | "dev": true, 979 | "dependencies": { 980 | "ip": "^1.1.5", 981 | "smart-buffer": "^4.1.0" 982 | }, 983 | "engines": { 984 | "node": ">= 10.13.0", 985 | "npm": ">= 3.0.0" 986 | } 987 | }, 988 | "node_modules/socks-proxy-agent": { 989 | "version": "5.0.0", 990 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", 991 | "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", 992 | "dev": true, 993 | "dependencies": { 994 | "agent-base": "6", 995 | "debug": "4", 996 | "socks": "^2.3.3" 997 | }, 998 | "engines": { 999 | "node": ">= 6" 1000 | } 1001 | }, 1002 | "node_modules/source-map": { 1003 | "version": "0.6.1", 1004 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1005 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1006 | "dev": true, 1007 | "optional": true, 1008 | "engines": { 1009 | "node": ">=0.10.0" 1010 | } 1011 | }, 1012 | "node_modules/split": { 1013 | "version": "1.0.1", 1014 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 1015 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", 1016 | "dependencies": { 1017 | "through": "2" 1018 | }, 1019 | "engines": { 1020 | "node": "*" 1021 | } 1022 | }, 1023 | "node_modules/statuses": { 1024 | "version": "1.5.0", 1025 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1026 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 1027 | "dev": true, 1028 | "engines": { 1029 | "node": ">= 0.6" 1030 | } 1031 | }, 1032 | "node_modules/string_decoder": { 1033 | "version": "0.10.31", 1034 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1035 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 1036 | "dev": true 1037 | }, 1038 | "node_modules/tar-fs": { 1039 | "version": "2.0.0", 1040 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", 1041 | "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", 1042 | "dev": true, 1043 | "dependencies": { 1044 | "chownr": "^1.1.1", 1045 | "mkdirp": "^0.5.1", 1046 | "pump": "^3.0.0", 1047 | "tar-stream": "^2.0.0" 1048 | } 1049 | }, 1050 | "node_modules/tar-stream": { 1051 | "version": "2.2.0", 1052 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1053 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1054 | "dev": true, 1055 | "dependencies": { 1056 | "bl": "^4.0.3", 1057 | "end-of-stream": "^1.4.1", 1058 | "fs-constants": "^1.0.0", 1059 | "inherits": "^2.0.3", 1060 | "readable-stream": "^3.1.1" 1061 | }, 1062 | "engines": { 1063 | "node": ">=6" 1064 | } 1065 | }, 1066 | "node_modules/tar-stream/node_modules/readable-stream": { 1067 | "version": "3.6.0", 1068 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1069 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1070 | "dev": true, 1071 | "dependencies": { 1072 | "inherits": "^2.0.3", 1073 | "string_decoder": "^1.1.1", 1074 | "util-deprecate": "^1.0.1" 1075 | }, 1076 | "engines": { 1077 | "node": ">= 6" 1078 | } 1079 | }, 1080 | "node_modules/tar-stream/node_modules/string_decoder": { 1081 | "version": "1.3.0", 1082 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1083 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "safe-buffer": "~5.2.0" 1087 | } 1088 | }, 1089 | "node_modules/through": { 1090 | "version": "2.3.8", 1091 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1092 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1093 | }, 1094 | "node_modules/toidentifier": { 1095 | "version": "1.0.0", 1096 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1097 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", 1098 | "dev": true, 1099 | "engines": { 1100 | "node": ">=0.6" 1101 | } 1102 | }, 1103 | "node_modules/tslib": { 1104 | "version": "2.3.0", 1105 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 1106 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", 1107 | "dev": true 1108 | }, 1109 | "node_modules/type-check": { 1110 | "version": "0.3.2", 1111 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1112 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1113 | "dev": true, 1114 | "dependencies": { 1115 | "prelude-ls": "~1.1.2" 1116 | }, 1117 | "engines": { 1118 | "node": ">= 0.8.0" 1119 | } 1120 | }, 1121 | "node_modules/unbzip2-stream": { 1122 | "version": "1.3.3", 1123 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", 1124 | "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", 1125 | "dev": true, 1126 | "dependencies": { 1127 | "buffer": "^5.2.1", 1128 | "through": "^2.3.8" 1129 | } 1130 | }, 1131 | "node_modules/universalify": { 1132 | "version": "0.1.2", 1133 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1134 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1135 | "dev": true, 1136 | "engines": { 1137 | "node": ">= 4.0.0" 1138 | } 1139 | }, 1140 | "node_modules/unpipe": { 1141 | "version": "1.0.0", 1142 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1143 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 1144 | "dev": true, 1145 | "engines": { 1146 | "node": ">= 0.8" 1147 | } 1148 | }, 1149 | "node_modules/util-deprecate": { 1150 | "version": "1.0.2", 1151 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1152 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1153 | "dev": true 1154 | }, 1155 | "node_modules/which": { 1156 | "version": "2.0.2", 1157 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1158 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1159 | "dependencies": { 1160 | "isexe": "^2.0.0" 1161 | }, 1162 | "bin": { 1163 | "node-which": "bin/node-which" 1164 | }, 1165 | "engines": { 1166 | "node": ">= 8" 1167 | } 1168 | }, 1169 | "node_modules/word-wrap": { 1170 | "version": "1.2.3", 1171 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1172 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1173 | "dev": true, 1174 | "engines": { 1175 | "node": ">=0.10.0" 1176 | } 1177 | }, 1178 | "node_modules/wrappy": { 1179 | "version": "1.0.2", 1180 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1181 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1182 | "dev": true 1183 | }, 1184 | "node_modules/ws": { 1185 | "version": "7.4.6", 1186 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", 1187 | "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", 1188 | "dev": true, 1189 | "engines": { 1190 | "node": ">=8.3.0" 1191 | }, 1192 | "peerDependencies": { 1193 | "bufferutil": "^4.0.1", 1194 | "utf-8-validate": "^5.0.2" 1195 | }, 1196 | "peerDependenciesMeta": { 1197 | "bufferutil": { 1198 | "optional": true 1199 | }, 1200 | "utf-8-validate": { 1201 | "optional": true 1202 | } 1203 | } 1204 | }, 1205 | "node_modules/xregexp": { 1206 | "version": "2.0.0", 1207 | "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", 1208 | "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", 1209 | "dev": true, 1210 | "engines": { 1211 | "node": "*" 1212 | } 1213 | }, 1214 | "node_modules/yallist": { 1215 | "version": "3.1.1", 1216 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1217 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 1218 | "dev": true 1219 | }, 1220 | "node_modules/yauzl": { 1221 | "version": "2.10.0", 1222 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1223 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1224 | "dev": true, 1225 | "dependencies": { 1226 | "buffer-crc32": "~0.2.3", 1227 | "fd-slicer": "~1.1.0" 1228 | } 1229 | } 1230 | }, 1231 | "dependencies": { 1232 | "@tootallnate/once": { 1233 | "version": "1.1.2", 1234 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 1235 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 1236 | "dev": true 1237 | }, 1238 | "@types/node": { 1239 | "version": "15.12.2", 1240 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", 1241 | "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", 1242 | "dev": true, 1243 | "optional": true 1244 | }, 1245 | "@types/yauzl": { 1246 | "version": "2.9.1", 1247 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", 1248 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", 1249 | "dev": true, 1250 | "optional": true, 1251 | "requires": { 1252 | "@types/node": "*" 1253 | } 1254 | }, 1255 | "agent-base": { 1256 | "version": "6.0.2", 1257 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 1258 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 1259 | "dev": true, 1260 | "requires": { 1261 | "debug": "4" 1262 | } 1263 | }, 1264 | "ast-types": { 1265 | "version": "0.13.4", 1266 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 1267 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 1268 | "dev": true, 1269 | "requires": { 1270 | "tslib": "^2.0.1" 1271 | } 1272 | }, 1273 | "balanced-match": { 1274 | "version": "1.0.2", 1275 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1276 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1277 | "dev": true 1278 | }, 1279 | "base64-js": { 1280 | "version": "1.5.1", 1281 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1282 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1283 | "dev": true 1284 | }, 1285 | "bl": { 1286 | "version": "4.1.0", 1287 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 1288 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 1289 | "dev": true, 1290 | "requires": { 1291 | "buffer": "^5.5.0", 1292 | "inherits": "^2.0.4", 1293 | "readable-stream": "^3.4.0" 1294 | }, 1295 | "dependencies": { 1296 | "readable-stream": { 1297 | "version": "3.6.0", 1298 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1299 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1300 | "dev": true, 1301 | "requires": { 1302 | "inherits": "^2.0.3", 1303 | "string_decoder": "^1.1.1", 1304 | "util-deprecate": "^1.0.1" 1305 | } 1306 | }, 1307 | "string_decoder": { 1308 | "version": "1.3.0", 1309 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1310 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1311 | "dev": true, 1312 | "requires": { 1313 | "safe-buffer": "~5.2.0" 1314 | } 1315 | } 1316 | } 1317 | }, 1318 | "brace-expansion": { 1319 | "version": "1.1.11", 1320 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1321 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1322 | "dev": true, 1323 | "requires": { 1324 | "balanced-match": "^1.0.0", 1325 | "concat-map": "0.0.1" 1326 | } 1327 | }, 1328 | "buffer": { 1329 | "version": "5.7.1", 1330 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1331 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1332 | "dev": true, 1333 | "requires": { 1334 | "base64-js": "^1.3.1", 1335 | "ieee754": "^1.1.13" 1336 | } 1337 | }, 1338 | "buffer-crc32": { 1339 | "version": "0.2.13", 1340 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1341 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 1342 | "dev": true 1343 | }, 1344 | "bytes": { 1345 | "version": "3.1.0", 1346 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 1347 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", 1348 | "dev": true 1349 | }, 1350 | "chownr": { 1351 | "version": "1.1.4", 1352 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 1353 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 1354 | "dev": true 1355 | }, 1356 | "concat-map": { 1357 | "version": "0.0.1", 1358 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1359 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1360 | "dev": true 1361 | }, 1362 | "core-util-is": { 1363 | "version": "1.0.2", 1364 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1365 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1366 | "dev": true 1367 | }, 1368 | "data-uri-to-buffer": { 1369 | "version": "3.0.1", 1370 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", 1371 | "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", 1372 | "dev": true 1373 | }, 1374 | "debug": { 1375 | "version": "4.3.1", 1376 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 1377 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 1378 | "dev": true, 1379 | "requires": { 1380 | "ms": "2.1.2" 1381 | } 1382 | }, 1383 | "deep-is": { 1384 | "version": "0.1.3", 1385 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1386 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 1387 | "dev": true 1388 | }, 1389 | "degenerator": { 1390 | "version": "2.2.0", 1391 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", 1392 | "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", 1393 | "dev": true, 1394 | "requires": { 1395 | "ast-types": "^0.13.2", 1396 | "escodegen": "^1.8.1", 1397 | "esprima": "^4.0.0" 1398 | } 1399 | }, 1400 | "depd": { 1401 | "version": "1.1.2", 1402 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1403 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 1404 | "dev": true 1405 | }, 1406 | "devtools-protocol": { 1407 | "version": "0.0.883894", 1408 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.883894.tgz", 1409 | "integrity": "sha512-33idhm54QJzf3Q7QofMgCvIVSd2o9H3kQPWaKT/fhoZh+digc+WSiMhbkeG3iN79WY4Hwr9G05NpbhEVrsOYAg==", 1410 | "dev": true 1411 | }, 1412 | "end-of-stream": { 1413 | "version": "1.4.4", 1414 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1415 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1416 | "dev": true, 1417 | "requires": { 1418 | "once": "^1.4.0" 1419 | } 1420 | }, 1421 | "escodegen": { 1422 | "version": "1.14.3", 1423 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", 1424 | "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", 1425 | "dev": true, 1426 | "requires": { 1427 | "esprima": "^4.0.1", 1428 | "estraverse": "^4.2.0", 1429 | "esutils": "^2.0.2", 1430 | "optionator": "^0.8.1", 1431 | "source-map": "~0.6.1" 1432 | } 1433 | }, 1434 | "esprima": { 1435 | "version": "4.0.1", 1436 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1437 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1438 | "dev": true 1439 | }, 1440 | "estraverse": { 1441 | "version": "4.3.0", 1442 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1443 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1444 | "dev": true 1445 | }, 1446 | "esutils": { 1447 | "version": "2.0.3", 1448 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1449 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1450 | "dev": true 1451 | }, 1452 | "extract-zip": { 1453 | "version": "2.0.1", 1454 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 1455 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 1456 | "dev": true, 1457 | "requires": { 1458 | "@types/yauzl": "^2.9.1", 1459 | "debug": "^4.1.1", 1460 | "get-stream": "^5.1.0", 1461 | "yauzl": "^2.10.0" 1462 | } 1463 | }, 1464 | "fast-levenshtein": { 1465 | "version": "2.0.6", 1466 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1467 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1468 | "dev": true 1469 | }, 1470 | "fd-slicer": { 1471 | "version": "1.1.0", 1472 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1473 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 1474 | "dev": true, 1475 | "requires": { 1476 | "pend": "~1.2.0" 1477 | } 1478 | }, 1479 | "file-uri-to-path": { 1480 | "version": "2.0.0", 1481 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", 1482 | "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", 1483 | "dev": true 1484 | }, 1485 | "find-up": { 1486 | "version": "4.1.0", 1487 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1488 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1489 | "dev": true, 1490 | "requires": { 1491 | "locate-path": "^5.0.0", 1492 | "path-exists": "^4.0.0" 1493 | } 1494 | }, 1495 | "fs-constants": { 1496 | "version": "1.0.0", 1497 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 1498 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 1499 | "dev": true 1500 | }, 1501 | "fs-extra": { 1502 | "version": "8.1.0", 1503 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1504 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1505 | "dev": true, 1506 | "requires": { 1507 | "graceful-fs": "^4.2.0", 1508 | "jsonfile": "^4.0.0", 1509 | "universalify": "^0.1.0" 1510 | } 1511 | }, 1512 | "fs.realpath": { 1513 | "version": "1.0.0", 1514 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1515 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1516 | "dev": true 1517 | }, 1518 | "ftp": { 1519 | "version": "0.3.10", 1520 | "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", 1521 | "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", 1522 | "dev": true, 1523 | "requires": { 1524 | "readable-stream": "1.1.x", 1525 | "xregexp": "2.0.0" 1526 | } 1527 | }, 1528 | "get-stream": { 1529 | "version": "5.2.0", 1530 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1531 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1532 | "dev": true, 1533 | "requires": { 1534 | "pump": "^3.0.0" 1535 | } 1536 | }, 1537 | "get-uri": { 1538 | "version": "3.0.2", 1539 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", 1540 | "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", 1541 | "dev": true, 1542 | "requires": { 1543 | "@tootallnate/once": "1", 1544 | "data-uri-to-buffer": "3", 1545 | "debug": "4", 1546 | "file-uri-to-path": "2", 1547 | "fs-extra": "^8.1.0", 1548 | "ftp": "^0.3.10" 1549 | } 1550 | }, 1551 | "glob": { 1552 | "version": "7.1.7", 1553 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 1554 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 1555 | "dev": true, 1556 | "requires": { 1557 | "fs.realpath": "^1.0.0", 1558 | "inflight": "^1.0.4", 1559 | "inherits": "2", 1560 | "minimatch": "^3.0.4", 1561 | "once": "^1.3.0", 1562 | "path-is-absolute": "^1.0.0" 1563 | } 1564 | }, 1565 | "graceful-fs": { 1566 | "version": "4.2.6", 1567 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 1568 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 1569 | "dev": true 1570 | }, 1571 | "http-errors": { 1572 | "version": "1.7.3", 1573 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 1574 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 1575 | "dev": true, 1576 | "requires": { 1577 | "depd": "~1.1.2", 1578 | "inherits": "2.0.4", 1579 | "setprototypeof": "1.1.1", 1580 | "statuses": ">= 1.5.0 < 2", 1581 | "toidentifier": "1.0.0" 1582 | } 1583 | }, 1584 | "http-proxy-agent": { 1585 | "version": "4.0.1", 1586 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 1587 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 1588 | "dev": true, 1589 | "requires": { 1590 | "@tootallnate/once": "1", 1591 | "agent-base": "6", 1592 | "debug": "4" 1593 | } 1594 | }, 1595 | "https-proxy-agent": { 1596 | "version": "5.0.0", 1597 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1598 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1599 | "dev": true, 1600 | "requires": { 1601 | "agent-base": "6", 1602 | "debug": "4" 1603 | } 1604 | }, 1605 | "iconv-lite": { 1606 | "version": "0.4.24", 1607 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1608 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1609 | "dev": true, 1610 | "requires": { 1611 | "safer-buffer": ">= 2.1.2 < 3" 1612 | } 1613 | }, 1614 | "ieee754": { 1615 | "version": "1.2.1", 1616 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1617 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1618 | "dev": true 1619 | }, 1620 | "inflight": { 1621 | "version": "1.0.6", 1622 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1623 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1624 | "dev": true, 1625 | "requires": { 1626 | "once": "^1.3.0", 1627 | "wrappy": "1" 1628 | } 1629 | }, 1630 | "inherits": { 1631 | "version": "2.0.4", 1632 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1633 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1634 | "dev": true 1635 | }, 1636 | "ip": { 1637 | "version": "1.1.5", 1638 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 1639 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", 1640 | "dev": true 1641 | }, 1642 | "isarray": { 1643 | "version": "0.0.1", 1644 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1645 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1646 | "dev": true 1647 | }, 1648 | "isexe": { 1649 | "version": "2.0.0", 1650 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1651 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 1652 | }, 1653 | "jsonfile": { 1654 | "version": "4.0.0", 1655 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1656 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1657 | "dev": true, 1658 | "requires": { 1659 | "graceful-fs": "^4.1.6" 1660 | } 1661 | }, 1662 | "levn": { 1663 | "version": "0.3.0", 1664 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1665 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1666 | "dev": true, 1667 | "requires": { 1668 | "prelude-ls": "~1.1.2", 1669 | "type-check": "~0.3.2" 1670 | } 1671 | }, 1672 | "locate-path": { 1673 | "version": "5.0.0", 1674 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1675 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1676 | "dev": true, 1677 | "requires": { 1678 | "p-locate": "^4.1.0" 1679 | } 1680 | }, 1681 | "lru-cache": { 1682 | "version": "5.1.1", 1683 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1684 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1685 | "dev": true, 1686 | "requires": { 1687 | "yallist": "^3.0.2" 1688 | } 1689 | }, 1690 | "minimatch": { 1691 | "version": "3.0.4", 1692 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1693 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1694 | "dev": true, 1695 | "requires": { 1696 | "brace-expansion": "^1.1.7" 1697 | } 1698 | }, 1699 | "minimist": { 1700 | "version": "1.2.6", 1701 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1702 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1703 | "dev": true 1704 | }, 1705 | "mkdirp": { 1706 | "version": "0.5.5", 1707 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1708 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1709 | "dev": true, 1710 | "requires": { 1711 | "minimist": "^1.2.5" 1712 | } 1713 | }, 1714 | "ms": { 1715 | "version": "2.1.2", 1716 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1717 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1718 | "dev": true 1719 | }, 1720 | "netmask": { 1721 | "version": "2.0.2", 1722 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 1723 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", 1724 | "dev": true 1725 | }, 1726 | "node-fetch": { 1727 | "version": "2.6.1", 1728 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1729 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 1730 | "dev": true 1731 | }, 1732 | "once": { 1733 | "version": "1.4.0", 1734 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1735 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1736 | "dev": true, 1737 | "requires": { 1738 | "wrappy": "1" 1739 | } 1740 | }, 1741 | "optionator": { 1742 | "version": "0.8.3", 1743 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1744 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1745 | "dev": true, 1746 | "requires": { 1747 | "deep-is": "~0.1.3", 1748 | "fast-levenshtein": "~2.0.6", 1749 | "levn": "~0.3.0", 1750 | "prelude-ls": "~1.1.2", 1751 | "type-check": "~0.3.2", 1752 | "word-wrap": "~1.2.3" 1753 | } 1754 | }, 1755 | "p-limit": { 1756 | "version": "2.3.0", 1757 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1758 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1759 | "dev": true, 1760 | "requires": { 1761 | "p-try": "^2.0.0" 1762 | } 1763 | }, 1764 | "p-locate": { 1765 | "version": "4.1.0", 1766 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1767 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1768 | "dev": true, 1769 | "requires": { 1770 | "p-limit": "^2.2.0" 1771 | } 1772 | }, 1773 | "p-try": { 1774 | "version": "2.2.0", 1775 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1776 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1777 | "dev": true 1778 | }, 1779 | "pac-proxy-agent": { 1780 | "version": "4.1.0", 1781 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", 1782 | "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", 1783 | "dev": true, 1784 | "requires": { 1785 | "@tootallnate/once": "1", 1786 | "agent-base": "6", 1787 | "debug": "4", 1788 | "get-uri": "3", 1789 | "http-proxy-agent": "^4.0.1", 1790 | "https-proxy-agent": "5", 1791 | "pac-resolver": "^4.1.0", 1792 | "raw-body": "^2.2.0", 1793 | "socks-proxy-agent": "5" 1794 | } 1795 | }, 1796 | "pac-resolver": { 1797 | "version": "4.2.0", 1798 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", 1799 | "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", 1800 | "dev": true, 1801 | "requires": { 1802 | "degenerator": "^2.2.0", 1803 | "ip": "^1.1.5", 1804 | "netmask": "^2.0.1" 1805 | } 1806 | }, 1807 | "path-exists": { 1808 | "version": "4.0.0", 1809 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1810 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1811 | "dev": true 1812 | }, 1813 | "path-is-absolute": { 1814 | "version": "1.0.1", 1815 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1816 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1817 | "dev": true 1818 | }, 1819 | "pend": { 1820 | "version": "1.2.0", 1821 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1822 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1823 | "dev": true 1824 | }, 1825 | "pkg-dir": { 1826 | "version": "4.2.0", 1827 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1828 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1829 | "dev": true, 1830 | "requires": { 1831 | "find-up": "^4.0.0" 1832 | } 1833 | }, 1834 | "prelude-ls": { 1835 | "version": "1.1.2", 1836 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1837 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1838 | "dev": true 1839 | }, 1840 | "progress": { 1841 | "version": "2.0.1", 1842 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", 1843 | "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", 1844 | "dev": true 1845 | }, 1846 | "proxy-agent": { 1847 | "version": "4.0.1", 1848 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", 1849 | "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", 1850 | "dev": true, 1851 | "requires": { 1852 | "agent-base": "^6.0.0", 1853 | "debug": "4", 1854 | "http-proxy-agent": "^4.0.0", 1855 | "https-proxy-agent": "^5.0.0", 1856 | "lru-cache": "^5.1.1", 1857 | "pac-proxy-agent": "^4.1.0", 1858 | "proxy-from-env": "^1.0.0", 1859 | "socks-proxy-agent": "^5.0.0" 1860 | } 1861 | }, 1862 | "proxy-from-env": { 1863 | "version": "1.1.0", 1864 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1865 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 1866 | "dev": true 1867 | }, 1868 | "pump": { 1869 | "version": "3.0.0", 1870 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1871 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1872 | "dev": true, 1873 | "requires": { 1874 | "end-of-stream": "^1.1.0", 1875 | "once": "^1.3.1" 1876 | } 1877 | }, 1878 | "puppeteer": { 1879 | "version": "10.0.0", 1880 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.0.0.tgz", 1881 | "integrity": "sha512-AxHvCb9IWmmP3gMW+epxdj92Gglii+6Z4sb+W+zc2hTTu10HF0yg6hGXot5O74uYkVqG3lfDRLfnRpi6WOwi5A==", 1882 | "dev": true, 1883 | "requires": { 1884 | "debug": "4.3.1", 1885 | "devtools-protocol": "0.0.883894", 1886 | "extract-zip": "2.0.1", 1887 | "https-proxy-agent": "5.0.0", 1888 | "node-fetch": "2.6.1", 1889 | "pkg-dir": "4.2.0", 1890 | "progress": "2.0.1", 1891 | "proxy-from-env": "1.1.0", 1892 | "rimraf": "3.0.2", 1893 | "tar-fs": "2.0.0", 1894 | "unbzip2-stream": "1.3.3", 1895 | "ws": "7.4.6" 1896 | } 1897 | }, 1898 | "raw-body": { 1899 | "version": "2.4.1", 1900 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", 1901 | "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", 1902 | "dev": true, 1903 | "requires": { 1904 | "bytes": "3.1.0", 1905 | "http-errors": "1.7.3", 1906 | "iconv-lite": "0.4.24", 1907 | "unpipe": "1.0.0" 1908 | } 1909 | }, 1910 | "readable-stream": { 1911 | "version": "1.1.14", 1912 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1913 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 1914 | "dev": true, 1915 | "requires": { 1916 | "core-util-is": "~1.0.0", 1917 | "inherits": "~2.0.1", 1918 | "isarray": "0.0.1", 1919 | "string_decoder": "~0.10.x" 1920 | } 1921 | }, 1922 | "rimraf": { 1923 | "version": "3.0.2", 1924 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1925 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1926 | "dev": true, 1927 | "requires": { 1928 | "glob": "^7.1.3" 1929 | } 1930 | }, 1931 | "safe-buffer": { 1932 | "version": "5.2.1", 1933 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1934 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1935 | "dev": true 1936 | }, 1937 | "safer-buffer": { 1938 | "version": "2.1.2", 1939 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1940 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1941 | "dev": true 1942 | }, 1943 | "setprototypeof": { 1944 | "version": "1.1.1", 1945 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1946 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", 1947 | "dev": true 1948 | }, 1949 | "smart-buffer": { 1950 | "version": "4.1.0", 1951 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", 1952 | "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", 1953 | "dev": true 1954 | }, 1955 | "socks": { 1956 | "version": "2.6.1", 1957 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", 1958 | "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", 1959 | "dev": true, 1960 | "requires": { 1961 | "ip": "^1.1.5", 1962 | "smart-buffer": "^4.1.0" 1963 | } 1964 | }, 1965 | "socks-proxy-agent": { 1966 | "version": "5.0.0", 1967 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", 1968 | "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", 1969 | "dev": true, 1970 | "requires": { 1971 | "agent-base": "6", 1972 | "debug": "4", 1973 | "socks": "^2.3.3" 1974 | } 1975 | }, 1976 | "source-map": { 1977 | "version": "0.6.1", 1978 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1979 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1980 | "dev": true, 1981 | "optional": true 1982 | }, 1983 | "split": { 1984 | "version": "1.0.1", 1985 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 1986 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", 1987 | "requires": { 1988 | "through": "2" 1989 | } 1990 | }, 1991 | "statuses": { 1992 | "version": "1.5.0", 1993 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1994 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 1995 | "dev": true 1996 | }, 1997 | "string_decoder": { 1998 | "version": "0.10.31", 1999 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2000 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 2001 | "dev": true 2002 | }, 2003 | "tar-fs": { 2004 | "version": "2.0.0", 2005 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", 2006 | "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", 2007 | "dev": true, 2008 | "requires": { 2009 | "chownr": "^1.1.1", 2010 | "mkdirp": "^0.5.1", 2011 | "pump": "^3.0.0", 2012 | "tar-stream": "^2.0.0" 2013 | } 2014 | }, 2015 | "tar-stream": { 2016 | "version": "2.2.0", 2017 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 2018 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 2019 | "dev": true, 2020 | "requires": { 2021 | "bl": "^4.0.3", 2022 | "end-of-stream": "^1.4.1", 2023 | "fs-constants": "^1.0.0", 2024 | "inherits": "^2.0.3", 2025 | "readable-stream": "^3.1.1" 2026 | }, 2027 | "dependencies": { 2028 | "readable-stream": { 2029 | "version": "3.6.0", 2030 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2031 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2032 | "dev": true, 2033 | "requires": { 2034 | "inherits": "^2.0.3", 2035 | "string_decoder": "^1.1.1", 2036 | "util-deprecate": "^1.0.1" 2037 | } 2038 | }, 2039 | "string_decoder": { 2040 | "version": "1.3.0", 2041 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2042 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2043 | "dev": true, 2044 | "requires": { 2045 | "safe-buffer": "~5.2.0" 2046 | } 2047 | } 2048 | } 2049 | }, 2050 | "through": { 2051 | "version": "2.3.8", 2052 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2053 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 2054 | }, 2055 | "toidentifier": { 2056 | "version": "1.0.0", 2057 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 2058 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", 2059 | "dev": true 2060 | }, 2061 | "tslib": { 2062 | "version": "2.3.0", 2063 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 2064 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", 2065 | "dev": true 2066 | }, 2067 | "type-check": { 2068 | "version": "0.3.2", 2069 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2070 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2071 | "dev": true, 2072 | "requires": { 2073 | "prelude-ls": "~1.1.2" 2074 | } 2075 | }, 2076 | "unbzip2-stream": { 2077 | "version": "1.3.3", 2078 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", 2079 | "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", 2080 | "dev": true, 2081 | "requires": { 2082 | "buffer": "^5.2.1", 2083 | "through": "^2.3.8" 2084 | } 2085 | }, 2086 | "universalify": { 2087 | "version": "0.1.2", 2088 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2089 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 2090 | "dev": true 2091 | }, 2092 | "unpipe": { 2093 | "version": "1.0.0", 2094 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2095 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 2096 | "dev": true 2097 | }, 2098 | "util-deprecate": { 2099 | "version": "1.0.2", 2100 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2101 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2102 | "dev": true 2103 | }, 2104 | "which": { 2105 | "version": "2.0.2", 2106 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2107 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2108 | "requires": { 2109 | "isexe": "^2.0.0" 2110 | } 2111 | }, 2112 | "word-wrap": { 2113 | "version": "1.2.3", 2114 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2115 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2116 | "dev": true 2117 | }, 2118 | "wrappy": { 2119 | "version": "1.0.2", 2120 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2121 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2122 | "dev": true 2123 | }, 2124 | "ws": { 2125 | "version": "7.4.6", 2126 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", 2127 | "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", 2128 | "dev": true, 2129 | "requires": {} 2130 | }, 2131 | "xregexp": { 2132 | "version": "2.0.0", 2133 | "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", 2134 | "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", 2135 | "dev": true 2136 | }, 2137 | "yallist": { 2138 | "version": "3.1.1", 2139 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2140 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 2141 | "dev": true 2142 | }, 2143 | "yauzl": { 2144 | "version": "2.10.0", 2145 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2146 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 2147 | "dev": true, 2148 | "requires": { 2149 | "buffer-crc32": "~0.2.3", 2150 | "fd-slicer": "~1.1.0" 2151 | } 2152 | } 2153 | } 2154 | } 2155 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nightlink", 3 | "version": "0.1.0", 4 | "description": "Start and control a Tor instance", 5 | "main": "src/index.js", 6 | "dependencies": { 7 | "split": "^1.0.1", 8 | "which": "^2.0.2" 9 | }, 10 | "devDependencies": { 11 | "proxy-agent": "^4.0.1", 12 | "puppeteer": "^10.0.0" 13 | }, 14 | "scripts": { 15 | "test": "node src/test.js" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/bencevans/nightlink.git" 20 | }, 21 | "keywords": [ 22 | "tor", 23 | "onion", 24 | "proxy", 25 | "socks", 26 | "control" 27 | ], 28 | "author": "Ben Evans (https://bencevans.io)", 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/bencevans/nightlink/issues" 32 | }, 33 | "homepage": "https://github.com/bencevans/nightlink#readme" 34 | } 35 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/examples/request.js: -------------------------------------------------------------------------------- 1 | var http = require('http'); 2 | var ProxyAgent = require('proxy-agent'); 3 | var nightlink = require('../'); 4 | 5 | const run = async () => { 6 | const tor = await nightlink.launch({ 7 | SocksPort: 9000 8 | }); 9 | 10 | var proxyUri = process.env.http_proxy || 'socks://127.0.0.1:9000'; 11 | 12 | var opts = { 13 | method: 'GET', 14 | host: 'api.ipify.org', 15 | path: '/', 16 | agent: new ProxyAgent(proxyUri) 17 | }; 18 | 19 | const onresponse = async (res) => { 20 | console.log(res.statusCode, res.headers); 21 | res.pipe(process.stdout); 22 | 23 | await tor.close() 24 | } 25 | 26 | // the rest works just like any other normal HTTP request 27 | http.get(opts, onresponse); 28 | }; 29 | 30 | 31 | run().then(console.log).catch(console.error) -------------------------------------------------------------------------------- /src/examples/screenshot.js: -------------------------------------------------------------------------------- 1 | const nightlink = require('../'); 2 | const puppeteer = require('puppeteer'); 3 | 4 | const run = async () => { 5 | // Start Tor (and waits till ready) 6 | const tor = await nightlink.launch({ 7 | SocksPort: '9000' 8 | }); 9 | 10 | // Start Chrome (and waits till ready) 11 | const browser = await puppeteer.launch({ 12 | args: ['--proxy-server=socks5://127.0.0.1:9000'] 13 | }); 14 | 15 | // Browsing 16 | const page = await browser.newPage(); 17 | await page.goto('http://facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion/'); 18 | await page.screenshot({path: 'example.png'}); 19 | 20 | console.log('screenshot captured') 21 | 22 | // Shutting down 23 | await browser.close(); 24 | await tor.close(); 25 | }; 26 | 27 | run().then(console.log) 28 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const EventEmitter = require('events'); 2 | const path = require('path'); 3 | const which = require('./lib/p-which'); 4 | const spawn = require('child_process').spawn; 5 | const split = require('split'); 6 | 7 | const onceEvent = (ee, name) => { 8 | return new Promise((resolve) => { 9 | ee.once(name, resolve); 10 | }) 11 | } 12 | 13 | const launch = async (uopts = {}) => { 14 | const args = Object.assign({ 15 | path: uopts.torPath || await which('tor'), 16 | args: uopts.args || [ 17 | '--SocksPort', uopts.SocksPort || '9050' 18 | ] 19 | }, uopts) 20 | 21 | const ps = spawn(args.path, args.args); 22 | const nl = new Nightlink(ps) 23 | 24 | await nl.waitForReady(); 25 | return nl; 26 | } 27 | 28 | class Nightlink extends EventEmitter { 29 | constructor(ps) { 30 | super(); 31 | 32 | this.ps = ps; 33 | this.isReady = false; 34 | this.isClosed = false; 35 | 36 | /** 37 | * LOG HANDLING 38 | * 39 | * Every new line written to stdout by Tor is emitted as a `log` event. 40 | * The value is a hash with `level` and `msg` keys. 41 | * 42 | * Known levels: 43 | * - notice 44 | * - warn 45 | * - err 46 | */ 47 | ps.stdout 48 | .pipe(split()) 49 | .on('data', line => { 50 | const match = line.match(/\[(.+)\] (.+)/); 51 | if (!match) { 52 | return; 53 | } 54 | const level = match[1]; 55 | const msg = match[2]; 56 | this.emit('log', {level, msg}); 57 | this.emit(level, msg); 58 | }); 59 | 60 | /** 61 | * Look for ready message 62 | */ 63 | const readyListener = this.on('notice', (msg) => { 64 | if (msg.match(/100%/)) { 65 | this.isReady = true; 66 | this.emit('ready'); 67 | } 68 | }) 69 | 70 | ps.once('close', () => { 71 | this.isClosed = true; 72 | }); 73 | } 74 | 75 | async waitForReady() { 76 | if (!this.isReady) { 77 | await onceEvent(this, 'ready'); 78 | } 79 | return true; 80 | } 81 | 82 | async close() { 83 | if (!this.isClosed) { 84 | this.ps.kill() 85 | await onceEvent(this.ps, 'close') 86 | } 87 | return true; 88 | } 89 | } 90 | 91 | module.exports = {launch} -------------------------------------------------------------------------------- /src/lib/p-which.js: -------------------------------------------------------------------------------- 1 | const which = require('which'); 2 | 3 | module.exports = (app) => { 4 | return new Promise((resolve, reject) => { 5 | which(app, (err, path) => { 6 | if (err) { 7 | return reject(err); 8 | } 9 | return resolve(path) 10 | }) 11 | }) 12 | } -------------------------------------------------------------------------------- /src/test.js: -------------------------------------------------------------------------------- 1 | const launch = require('./').launch; 2 | const ProxyAgent = require('proxy-agent'); 3 | const https = require('https'); 4 | const assert = require('assert'); 5 | 6 | const run = async () => { 7 | const tor = await launch({ 8 | SocksPort: 9999 9 | }); 10 | 11 | var opts = { 12 | method: 'GET', 13 | host: 'check.torproject.org', 14 | path: '/api/ip', 15 | agent: new ProxyAgent('socks://127.0.0.1:9999') 16 | }; 17 | 18 | const onresponse = async (res) => { 19 | assert(res.statusCode === 200); 20 | res.setEncoding('utf8'); 21 | 22 | let body = ''; 23 | res.on('data', (chunk) => { 24 | body += chunk; 25 | }); 26 | res.on('end', async () => { 27 | const d = JSON.parse(body) 28 | assert(d.IsTor === true); 29 | await tor.close() 30 | }); 31 | } 32 | 33 | // the rest works just like any other normal HTTP request 34 | https.get(opts, onresponse); 35 | } 36 | 37 | run().catch(console.error) --------------------------------------------------------------------------------