├── .gitignore ├── LICENSE ├── README.md ├── examples ├── ftp-server │ ├── README.md │ ├── agent.js │ ├── package-lock.json │ └── package.json ├── http-server │ ├── README.md │ ├── agent.js │ ├── package-lock.json │ └── package.json └── irc-client │ ├── README.md │ ├── agent.js │ ├── package-lock.json │ └── package.json ├── index.js ├── lib └── adapter.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | _agent.js 2 | node_modules 3 | npm-debug.log 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Based on code from Node.js: 2 | 3 | """ 4 | Copyright Node.js contributors. All rights reserved. 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to 8 | deal in the Software without restriction, including without limitation the 9 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10 | sell copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22 | IN THE SOFTWARE. 23 | """ 24 | 25 | This license applies to parts of Node.js originating from the 26 | https://github.com/joyent/node repository: 27 | 28 | """ 29 | Copyright Joyent, Inc. and other Node contributors. All rights reserved. 30 | Permission is hereby granted, free of charge, to any person obtaining a copy 31 | of this software and associated documentation files (the "Software"), to 32 | deal in the Software without restriction, including without limitation the 33 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 34 | sell copies of the Software, and to permit persons to whom the Software is 35 | furnished to do so, subject to the following conditions: 36 | 37 | The above copyright notice and this permission notice shall be included in 38 | all copies or substantial portions of the Software. 39 | 40 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 41 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 42 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 43 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 44 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 45 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 46 | IN THE SOFTWARE. 47 | """ 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @frida/net 2 | 3 | Node.js compatible [net](https://nodejs.org/api/net.html) module for 4 | [Frida](https://frida.re). Used by [frida-compile](https://github.com/frida/frida-compile) 5 | to support off-the-shelf modules. 6 | -------------------------------------------------------------------------------- /examples/ftp-server/README.md: -------------------------------------------------------------------------------- 1 | # FTP server example 2 | 3 | Compile with: 4 | 5 | npm install 6 | 7 | Load into a running process: 8 | 9 | frida Twitter -l _agent.js 10 | 11 | Connect to it: 12 | 13 | ftp 127.0.0.1 1337 14 | -------------------------------------------------------------------------------- /examples/ftp-server/agent.js: -------------------------------------------------------------------------------- 1 | const ftpd = require('@oleavr/ftpd'); 2 | 3 | const host = '127.0.0.1'; 4 | const port = 1337; 5 | 6 | const filesystem = { 7 | readdir(...args) { 8 | let path, options, callback; 9 | 10 | if (args.length === 3) { 11 | [path, options, callback] = args; 12 | } else { 13 | [path, callback] = args; 14 | options = { 15 | encoding: 'utf8', 16 | }; 17 | } 18 | 19 | const files = Process.enumerateModules().map(m => m.name); 20 | 21 | process.nextTick(() => { 22 | callback(null, files); 23 | }); 24 | }, 25 | 26 | stat(path, callback) { 27 | const now = new Date(); 28 | const result = { 29 | dev: 1, 30 | ino: 1, 31 | mode: 16877, 32 | nlink: 1, 33 | uid: 0, 34 | gid: 0, 35 | rdev: 0, 36 | size: 1337, 37 | blksize: 4096, 38 | blocks: 8, 39 | atime: now, 40 | mtime: now, 41 | ctime: now, 42 | birthtime: now, 43 | isFile() { return false; }, 44 | isDirectory() { return true; }, 45 | isBlockDevice() { return false; }, 46 | isCharacterDevice() { return false; }, 47 | isSymbolicLink() { return false; }, 48 | isFIFO() { return false; }, 49 | isSocket() { return false; }, 50 | }; 51 | process.nextTick(() => { 52 | callback(null, result); 53 | }); 54 | }, 55 | }; 56 | 57 | const server = new ftpd.FtpServer(host, { 58 | getInitialCwd() { 59 | return '/'; 60 | }, 61 | getRoot() { 62 | return '/'; 63 | }, 64 | }); 65 | server.on('error', error => { 66 | console.log('*** ERROR: ' + error.stack); 67 | }); 68 | server.on('client:connected', connection => { 69 | let username = null; 70 | 71 | connection.on('command:user', (user, success, failure) => { 72 | if (user) { 73 | username = user; 74 | success(); 75 | } else { 76 | failure(); 77 | } 78 | }); 79 | 80 | connection.on('command:pass', (pass, success, failure) => { 81 | if (pass) { 82 | success(username, filesystem); 83 | } else { 84 | failure(); 85 | } 86 | }); 87 | }); 88 | 89 | server.debugging = 4; 90 | server.listen(port); 91 | console.log('Listening on port ' + port); 92 | -------------------------------------------------------------------------------- /examples/ftp-server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ftp-server-example", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.5.5", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", 10 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/core": { 17 | "version": "7.5.5", 18 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", 19 | "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", 20 | "dev": true, 21 | "requires": { 22 | "@babel/code-frame": "^7.5.5", 23 | "@babel/generator": "^7.5.5", 24 | "@babel/helpers": "^7.5.5", 25 | "@babel/parser": "^7.5.5", 26 | "@babel/template": "^7.4.4", 27 | "@babel/traverse": "^7.5.5", 28 | "@babel/types": "^7.5.5", 29 | "convert-source-map": "^1.1.0", 30 | "debug": "^4.1.0", 31 | "json5": "^2.1.0", 32 | "lodash": "^4.17.13", 33 | "resolve": "^1.3.2", 34 | "semver": "^5.4.1", 35 | "source-map": "^0.5.0" 36 | } 37 | }, 38 | "@babel/generator": { 39 | "version": "7.5.5", 40 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", 41 | "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", 42 | "dev": true, 43 | "requires": { 44 | "@babel/types": "^7.5.5", 45 | "jsesc": "^2.5.1", 46 | "lodash": "^4.17.13", 47 | "source-map": "^0.5.0", 48 | "trim-right": "^1.0.1" 49 | } 50 | }, 51 | "@babel/helper-annotate-as-pure": { 52 | "version": "7.0.0", 53 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", 54 | "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", 55 | "dev": true, 56 | "requires": { 57 | "@babel/types": "^7.0.0" 58 | } 59 | }, 60 | "@babel/helper-builder-binary-assignment-operator-visitor": { 61 | "version": "7.1.0", 62 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", 63 | "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", 64 | "dev": true, 65 | "requires": { 66 | "@babel/helper-explode-assignable-expression": "^7.1.0", 67 | "@babel/types": "^7.0.0" 68 | } 69 | }, 70 | "@babel/helper-call-delegate": { 71 | "version": "7.4.4", 72 | "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", 73 | "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", 74 | "dev": true, 75 | "requires": { 76 | "@babel/helper-hoist-variables": "^7.4.4", 77 | "@babel/traverse": "^7.4.4", 78 | "@babel/types": "^7.4.4" 79 | } 80 | }, 81 | "@babel/helper-define-map": { 82 | "version": "7.5.5", 83 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", 84 | "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", 85 | "dev": true, 86 | "requires": { 87 | "@babel/helper-function-name": "^7.1.0", 88 | "@babel/types": "^7.5.5", 89 | "lodash": "^4.17.13" 90 | } 91 | }, 92 | "@babel/helper-explode-assignable-expression": { 93 | "version": "7.1.0", 94 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", 95 | "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", 96 | "dev": true, 97 | "requires": { 98 | "@babel/traverse": "^7.1.0", 99 | "@babel/types": "^7.0.0" 100 | } 101 | }, 102 | "@babel/helper-function-name": { 103 | "version": "7.1.0", 104 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", 105 | "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", 106 | "dev": true, 107 | "requires": { 108 | "@babel/helper-get-function-arity": "^7.0.0", 109 | "@babel/template": "^7.1.0", 110 | "@babel/types": "^7.0.0" 111 | } 112 | }, 113 | "@babel/helper-get-function-arity": { 114 | "version": "7.0.0", 115 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", 116 | "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", 117 | "dev": true, 118 | "requires": { 119 | "@babel/types": "^7.0.0" 120 | } 121 | }, 122 | "@babel/helper-hoist-variables": { 123 | "version": "7.4.4", 124 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", 125 | "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", 126 | "dev": true, 127 | "requires": { 128 | "@babel/types": "^7.4.4" 129 | } 130 | }, 131 | "@babel/helper-member-expression-to-functions": { 132 | "version": "7.5.5", 133 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", 134 | "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", 135 | "dev": true, 136 | "requires": { 137 | "@babel/types": "^7.5.5" 138 | } 139 | }, 140 | "@babel/helper-module-imports": { 141 | "version": "7.0.0", 142 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", 143 | "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", 144 | "dev": true, 145 | "requires": { 146 | "@babel/types": "^7.0.0" 147 | } 148 | }, 149 | "@babel/helper-module-transforms": { 150 | "version": "7.5.5", 151 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", 152 | "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", 153 | "dev": true, 154 | "requires": { 155 | "@babel/helper-module-imports": "^7.0.0", 156 | "@babel/helper-simple-access": "^7.1.0", 157 | "@babel/helper-split-export-declaration": "^7.4.4", 158 | "@babel/template": "^7.4.4", 159 | "@babel/types": "^7.5.5", 160 | "lodash": "^4.17.13" 161 | } 162 | }, 163 | "@babel/helper-optimise-call-expression": { 164 | "version": "7.0.0", 165 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", 166 | "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", 167 | "dev": true, 168 | "requires": { 169 | "@babel/types": "^7.0.0" 170 | } 171 | }, 172 | "@babel/helper-plugin-utils": { 173 | "version": "7.0.0", 174 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", 175 | "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", 176 | "dev": true 177 | }, 178 | "@babel/helper-regex": { 179 | "version": "7.5.5", 180 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", 181 | "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", 182 | "dev": true, 183 | "requires": { 184 | "lodash": "^4.17.13" 185 | } 186 | }, 187 | "@babel/helper-remap-async-to-generator": { 188 | "version": "7.1.0", 189 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", 190 | "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", 191 | "dev": true, 192 | "requires": { 193 | "@babel/helper-annotate-as-pure": "^7.0.0", 194 | "@babel/helper-wrap-function": "^7.1.0", 195 | "@babel/template": "^7.1.0", 196 | "@babel/traverse": "^7.1.0", 197 | "@babel/types": "^7.0.0" 198 | } 199 | }, 200 | "@babel/helper-replace-supers": { 201 | "version": "7.5.5", 202 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", 203 | "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", 204 | "dev": true, 205 | "requires": { 206 | "@babel/helper-member-expression-to-functions": "^7.5.5", 207 | "@babel/helper-optimise-call-expression": "^7.0.0", 208 | "@babel/traverse": "^7.5.5", 209 | "@babel/types": "^7.5.5" 210 | } 211 | }, 212 | "@babel/helper-simple-access": { 213 | "version": "7.1.0", 214 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", 215 | "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", 216 | "dev": true, 217 | "requires": { 218 | "@babel/template": "^7.1.0", 219 | "@babel/types": "^7.0.0" 220 | } 221 | }, 222 | "@babel/helper-split-export-declaration": { 223 | "version": "7.4.4", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", 225 | "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", 226 | "dev": true, 227 | "requires": { 228 | "@babel/types": "^7.4.4" 229 | } 230 | }, 231 | "@babel/helper-wrap-function": { 232 | "version": "7.2.0", 233 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", 234 | "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", 235 | "dev": true, 236 | "requires": { 237 | "@babel/helper-function-name": "^7.1.0", 238 | "@babel/template": "^7.1.0", 239 | "@babel/traverse": "^7.1.0", 240 | "@babel/types": "^7.2.0" 241 | } 242 | }, 243 | "@babel/helpers": { 244 | "version": "7.5.5", 245 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", 246 | "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", 247 | "dev": true, 248 | "requires": { 249 | "@babel/template": "^7.4.4", 250 | "@babel/traverse": "^7.5.5", 251 | "@babel/types": "^7.5.5" 252 | } 253 | }, 254 | "@babel/highlight": { 255 | "version": "7.5.0", 256 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", 257 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", 258 | "dev": true, 259 | "requires": { 260 | "chalk": "^2.0.0", 261 | "esutils": "^2.0.2", 262 | "js-tokens": "^4.0.0" 263 | } 264 | }, 265 | "@babel/parser": { 266 | "version": "7.5.5", 267 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", 268 | "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", 269 | "dev": true 270 | }, 271 | "@babel/plugin-proposal-async-generator-functions": { 272 | "version": "7.2.0", 273 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", 274 | "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", 275 | "dev": true, 276 | "requires": { 277 | "@babel/helper-plugin-utils": "^7.0.0", 278 | "@babel/helper-remap-async-to-generator": "^7.1.0", 279 | "@babel/plugin-syntax-async-generators": "^7.2.0" 280 | } 281 | }, 282 | "@babel/plugin-proposal-dynamic-import": { 283 | "version": "7.5.0", 284 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", 285 | "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", 286 | "dev": true, 287 | "requires": { 288 | "@babel/helper-plugin-utils": "^7.0.0", 289 | "@babel/plugin-syntax-dynamic-import": "^7.2.0" 290 | } 291 | }, 292 | "@babel/plugin-proposal-json-strings": { 293 | "version": "7.2.0", 294 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", 295 | "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", 296 | "dev": true, 297 | "requires": { 298 | "@babel/helper-plugin-utils": "^7.0.0", 299 | "@babel/plugin-syntax-json-strings": "^7.2.0" 300 | } 301 | }, 302 | "@babel/plugin-proposal-object-rest-spread": { 303 | "version": "7.5.5", 304 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", 305 | "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", 306 | "dev": true, 307 | "requires": { 308 | "@babel/helper-plugin-utils": "^7.0.0", 309 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0" 310 | } 311 | }, 312 | "@babel/plugin-proposal-optional-catch-binding": { 313 | "version": "7.2.0", 314 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", 315 | "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", 316 | "dev": true, 317 | "requires": { 318 | "@babel/helper-plugin-utils": "^7.0.0", 319 | "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" 320 | } 321 | }, 322 | "@babel/plugin-proposal-unicode-property-regex": { 323 | "version": "7.4.4", 324 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", 325 | "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", 326 | "dev": true, 327 | "requires": { 328 | "@babel/helper-plugin-utils": "^7.0.0", 329 | "@babel/helper-regex": "^7.4.4", 330 | "regexpu-core": "^4.5.4" 331 | } 332 | }, 333 | "@babel/plugin-syntax-async-generators": { 334 | "version": "7.2.0", 335 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", 336 | "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", 337 | "dev": true, 338 | "requires": { 339 | "@babel/helper-plugin-utils": "^7.0.0" 340 | } 341 | }, 342 | "@babel/plugin-syntax-dynamic-import": { 343 | "version": "7.2.0", 344 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", 345 | "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", 346 | "dev": true, 347 | "requires": { 348 | "@babel/helper-plugin-utils": "^7.0.0" 349 | } 350 | }, 351 | "@babel/plugin-syntax-json-strings": { 352 | "version": "7.2.0", 353 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", 354 | "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", 355 | "dev": true, 356 | "requires": { 357 | "@babel/helper-plugin-utils": "^7.0.0" 358 | } 359 | }, 360 | "@babel/plugin-syntax-object-rest-spread": { 361 | "version": "7.2.0", 362 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", 363 | "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", 364 | "dev": true, 365 | "requires": { 366 | "@babel/helper-plugin-utils": "^7.0.0" 367 | } 368 | }, 369 | "@babel/plugin-syntax-optional-catch-binding": { 370 | "version": "7.2.0", 371 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", 372 | "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", 373 | "dev": true, 374 | "requires": { 375 | "@babel/helper-plugin-utils": "^7.0.0" 376 | } 377 | }, 378 | "@babel/plugin-transform-arrow-functions": { 379 | "version": "7.2.0", 380 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", 381 | "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", 382 | "dev": true, 383 | "requires": { 384 | "@babel/helper-plugin-utils": "^7.0.0" 385 | } 386 | }, 387 | "@babel/plugin-transform-async-to-generator": { 388 | "version": "7.5.0", 389 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", 390 | "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", 391 | "dev": true, 392 | "requires": { 393 | "@babel/helper-module-imports": "^7.0.0", 394 | "@babel/helper-plugin-utils": "^7.0.0", 395 | "@babel/helper-remap-async-to-generator": "^7.1.0" 396 | } 397 | }, 398 | "@babel/plugin-transform-block-scoped-functions": { 399 | "version": "7.2.0", 400 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", 401 | "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", 402 | "dev": true, 403 | "requires": { 404 | "@babel/helper-plugin-utils": "^7.0.0" 405 | } 406 | }, 407 | "@babel/plugin-transform-block-scoping": { 408 | "version": "7.5.5", 409 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", 410 | "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", 411 | "dev": true, 412 | "requires": { 413 | "@babel/helper-plugin-utils": "^7.0.0", 414 | "lodash": "^4.17.13" 415 | } 416 | }, 417 | "@babel/plugin-transform-classes": { 418 | "version": "7.5.5", 419 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", 420 | "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", 421 | "dev": true, 422 | "requires": { 423 | "@babel/helper-annotate-as-pure": "^7.0.0", 424 | "@babel/helper-define-map": "^7.5.5", 425 | "@babel/helper-function-name": "^7.1.0", 426 | "@babel/helper-optimise-call-expression": "^7.0.0", 427 | "@babel/helper-plugin-utils": "^7.0.0", 428 | "@babel/helper-replace-supers": "^7.5.5", 429 | "@babel/helper-split-export-declaration": "^7.4.4", 430 | "globals": "^11.1.0" 431 | } 432 | }, 433 | "@babel/plugin-transform-computed-properties": { 434 | "version": "7.2.0", 435 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", 436 | "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", 437 | "dev": true, 438 | "requires": { 439 | "@babel/helper-plugin-utils": "^7.0.0" 440 | } 441 | }, 442 | "@babel/plugin-transform-destructuring": { 443 | "version": "7.5.0", 444 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", 445 | "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", 446 | "dev": true, 447 | "requires": { 448 | "@babel/helper-plugin-utils": "^7.0.0" 449 | } 450 | }, 451 | "@babel/plugin-transform-dotall-regex": { 452 | "version": "7.4.4", 453 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", 454 | "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", 455 | "dev": true, 456 | "requires": { 457 | "@babel/helper-plugin-utils": "^7.0.0", 458 | "@babel/helper-regex": "^7.4.4", 459 | "regexpu-core": "^4.5.4" 460 | } 461 | }, 462 | "@babel/plugin-transform-duplicate-keys": { 463 | "version": "7.5.0", 464 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", 465 | "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", 466 | "dev": true, 467 | "requires": { 468 | "@babel/helper-plugin-utils": "^7.0.0" 469 | } 470 | }, 471 | "@babel/plugin-transform-exponentiation-operator": { 472 | "version": "7.2.0", 473 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", 474 | "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", 475 | "dev": true, 476 | "requires": { 477 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", 478 | "@babel/helper-plugin-utils": "^7.0.0" 479 | } 480 | }, 481 | "@babel/plugin-transform-for-of": { 482 | "version": "7.4.4", 483 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", 484 | "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", 485 | "dev": true, 486 | "requires": { 487 | "@babel/helper-plugin-utils": "^7.0.0" 488 | } 489 | }, 490 | "@babel/plugin-transform-function-name": { 491 | "version": "7.4.4", 492 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", 493 | "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", 494 | "dev": true, 495 | "requires": { 496 | "@babel/helper-function-name": "^7.1.0", 497 | "@babel/helper-plugin-utils": "^7.0.0" 498 | } 499 | }, 500 | "@babel/plugin-transform-literals": { 501 | "version": "7.2.0", 502 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", 503 | "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", 504 | "dev": true, 505 | "requires": { 506 | "@babel/helper-plugin-utils": "^7.0.0" 507 | } 508 | }, 509 | "@babel/plugin-transform-member-expression-literals": { 510 | "version": "7.2.0", 511 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", 512 | "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", 513 | "dev": true, 514 | "requires": { 515 | "@babel/helper-plugin-utils": "^7.0.0" 516 | } 517 | }, 518 | "@babel/plugin-transform-modules-amd": { 519 | "version": "7.5.0", 520 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", 521 | "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", 522 | "dev": true, 523 | "requires": { 524 | "@babel/helper-module-transforms": "^7.1.0", 525 | "@babel/helper-plugin-utils": "^7.0.0", 526 | "babel-plugin-dynamic-import-node": "^2.3.0" 527 | } 528 | }, 529 | "@babel/plugin-transform-modules-commonjs": { 530 | "version": "7.5.0", 531 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", 532 | "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", 533 | "dev": true, 534 | "requires": { 535 | "@babel/helper-module-transforms": "^7.4.4", 536 | "@babel/helper-plugin-utils": "^7.0.0", 537 | "@babel/helper-simple-access": "^7.1.0", 538 | "babel-plugin-dynamic-import-node": "^2.3.0" 539 | } 540 | }, 541 | "@babel/plugin-transform-modules-systemjs": { 542 | "version": "7.5.0", 543 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", 544 | "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", 545 | "dev": true, 546 | "requires": { 547 | "@babel/helper-hoist-variables": "^7.4.4", 548 | "@babel/helper-plugin-utils": "^7.0.0", 549 | "babel-plugin-dynamic-import-node": "^2.3.0" 550 | } 551 | }, 552 | "@babel/plugin-transform-modules-umd": { 553 | "version": "7.2.0", 554 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", 555 | "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", 556 | "dev": true, 557 | "requires": { 558 | "@babel/helper-module-transforms": "^7.1.0", 559 | "@babel/helper-plugin-utils": "^7.0.0" 560 | } 561 | }, 562 | "@babel/plugin-transform-named-capturing-groups-regex": { 563 | "version": "7.4.5", 564 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", 565 | "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", 566 | "dev": true, 567 | "requires": { 568 | "regexp-tree": "^0.1.6" 569 | } 570 | }, 571 | "@babel/plugin-transform-new-target": { 572 | "version": "7.4.4", 573 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", 574 | "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", 575 | "dev": true, 576 | "requires": { 577 | "@babel/helper-plugin-utils": "^7.0.0" 578 | } 579 | }, 580 | "@babel/plugin-transform-object-super": { 581 | "version": "7.5.5", 582 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", 583 | "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", 584 | "dev": true, 585 | "requires": { 586 | "@babel/helper-plugin-utils": "^7.0.0", 587 | "@babel/helper-replace-supers": "^7.5.5" 588 | } 589 | }, 590 | "@babel/plugin-transform-parameters": { 591 | "version": "7.4.4", 592 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", 593 | "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", 594 | "dev": true, 595 | "requires": { 596 | "@babel/helper-call-delegate": "^7.4.4", 597 | "@babel/helper-get-function-arity": "^7.0.0", 598 | "@babel/helper-plugin-utils": "^7.0.0" 599 | } 600 | }, 601 | "@babel/plugin-transform-property-literals": { 602 | "version": "7.2.0", 603 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", 604 | "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", 605 | "dev": true, 606 | "requires": { 607 | "@babel/helper-plugin-utils": "^7.0.0" 608 | } 609 | }, 610 | "@babel/plugin-transform-regenerator": { 611 | "version": "7.4.5", 612 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", 613 | "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", 614 | "dev": true, 615 | "requires": { 616 | "regenerator-transform": "^0.14.0" 617 | } 618 | }, 619 | "@babel/plugin-transform-reserved-words": { 620 | "version": "7.2.0", 621 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", 622 | "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", 623 | "dev": true, 624 | "requires": { 625 | "@babel/helper-plugin-utils": "^7.0.0" 626 | } 627 | }, 628 | "@babel/plugin-transform-runtime": { 629 | "version": "7.5.5", 630 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", 631 | "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", 632 | "dev": true, 633 | "requires": { 634 | "@babel/helper-module-imports": "^7.0.0", 635 | "@babel/helper-plugin-utils": "^7.0.0", 636 | "resolve": "^1.8.1", 637 | "semver": "^5.5.1" 638 | } 639 | }, 640 | "@babel/plugin-transform-shorthand-properties": { 641 | "version": "7.2.0", 642 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", 643 | "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", 644 | "dev": true, 645 | "requires": { 646 | "@babel/helper-plugin-utils": "^7.0.0" 647 | } 648 | }, 649 | "@babel/plugin-transform-spread": { 650 | "version": "7.2.2", 651 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", 652 | "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", 653 | "dev": true, 654 | "requires": { 655 | "@babel/helper-plugin-utils": "^7.0.0" 656 | } 657 | }, 658 | "@babel/plugin-transform-sticky-regex": { 659 | "version": "7.2.0", 660 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", 661 | "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", 662 | "dev": true, 663 | "requires": { 664 | "@babel/helper-plugin-utils": "^7.0.0", 665 | "@babel/helper-regex": "^7.0.0" 666 | } 667 | }, 668 | "@babel/plugin-transform-template-literals": { 669 | "version": "7.4.4", 670 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", 671 | "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", 672 | "dev": true, 673 | "requires": { 674 | "@babel/helper-annotate-as-pure": "^7.0.0", 675 | "@babel/helper-plugin-utils": "^7.0.0" 676 | } 677 | }, 678 | "@babel/plugin-transform-typeof-symbol": { 679 | "version": "7.2.0", 680 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", 681 | "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", 682 | "dev": true, 683 | "requires": { 684 | "@babel/helper-plugin-utils": "^7.0.0" 685 | } 686 | }, 687 | "@babel/plugin-transform-unicode-regex": { 688 | "version": "7.4.4", 689 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", 690 | "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", 691 | "dev": true, 692 | "requires": { 693 | "@babel/helper-plugin-utils": "^7.0.0", 694 | "@babel/helper-regex": "^7.4.4", 695 | "regexpu-core": "^4.5.4" 696 | } 697 | }, 698 | "@babel/preset-env": { 699 | "version": "7.5.5", 700 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", 701 | "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", 702 | "dev": true, 703 | "requires": { 704 | "@babel/helper-module-imports": "^7.0.0", 705 | "@babel/helper-plugin-utils": "^7.0.0", 706 | "@babel/plugin-proposal-async-generator-functions": "^7.2.0", 707 | "@babel/plugin-proposal-dynamic-import": "^7.5.0", 708 | "@babel/plugin-proposal-json-strings": "^7.2.0", 709 | "@babel/plugin-proposal-object-rest-spread": "^7.5.5", 710 | "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", 711 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", 712 | "@babel/plugin-syntax-async-generators": "^7.2.0", 713 | "@babel/plugin-syntax-dynamic-import": "^7.2.0", 714 | "@babel/plugin-syntax-json-strings": "^7.2.0", 715 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0", 716 | "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", 717 | "@babel/plugin-transform-arrow-functions": "^7.2.0", 718 | "@babel/plugin-transform-async-to-generator": "^7.5.0", 719 | "@babel/plugin-transform-block-scoped-functions": "^7.2.0", 720 | "@babel/plugin-transform-block-scoping": "^7.5.5", 721 | "@babel/plugin-transform-classes": "^7.5.5", 722 | "@babel/plugin-transform-computed-properties": "^7.2.0", 723 | "@babel/plugin-transform-destructuring": "^7.5.0", 724 | "@babel/plugin-transform-dotall-regex": "^7.4.4", 725 | "@babel/plugin-transform-duplicate-keys": "^7.5.0", 726 | "@babel/plugin-transform-exponentiation-operator": "^7.2.0", 727 | "@babel/plugin-transform-for-of": "^7.4.4", 728 | "@babel/plugin-transform-function-name": "^7.4.4", 729 | "@babel/plugin-transform-literals": "^7.2.0", 730 | "@babel/plugin-transform-member-expression-literals": "^7.2.0", 731 | "@babel/plugin-transform-modules-amd": "^7.5.0", 732 | "@babel/plugin-transform-modules-commonjs": "^7.5.0", 733 | "@babel/plugin-transform-modules-systemjs": "^7.5.0", 734 | "@babel/plugin-transform-modules-umd": "^7.2.0", 735 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", 736 | "@babel/plugin-transform-new-target": "^7.4.4", 737 | "@babel/plugin-transform-object-super": "^7.5.5", 738 | "@babel/plugin-transform-parameters": "^7.4.4", 739 | "@babel/plugin-transform-property-literals": "^7.2.0", 740 | "@babel/plugin-transform-regenerator": "^7.4.5", 741 | "@babel/plugin-transform-reserved-words": "^7.2.0", 742 | "@babel/plugin-transform-shorthand-properties": "^7.2.0", 743 | "@babel/plugin-transform-spread": "^7.2.0", 744 | "@babel/plugin-transform-sticky-regex": "^7.2.0", 745 | "@babel/plugin-transform-template-literals": "^7.4.4", 746 | "@babel/plugin-transform-typeof-symbol": "^7.2.0", 747 | "@babel/plugin-transform-unicode-regex": "^7.4.4", 748 | "@babel/types": "^7.5.5", 749 | "browserslist": "^4.6.0", 750 | "core-js-compat": "^3.1.1", 751 | "invariant": "^2.2.2", 752 | "js-levenshtein": "^1.1.3", 753 | "semver": "^5.5.0" 754 | } 755 | }, 756 | "@babel/runtime-corejs2": { 757 | "version": "7.5.5", 758 | "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.5.5.tgz", 759 | "integrity": "sha512-FYATQVR00NSNi7mUfpPDp7E8RYMXDuO8gaix7u/w3GekfUinKgX1AcTxs7SoiEmoEW9mbpjrwqWSW6zCmw5h8A==", 760 | "dev": true, 761 | "requires": { 762 | "core-js": "^2.6.5", 763 | "regenerator-runtime": "^0.13.2" 764 | } 765 | }, 766 | "@babel/template": { 767 | "version": "7.4.4", 768 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", 769 | "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", 770 | "dev": true, 771 | "requires": { 772 | "@babel/code-frame": "^7.0.0", 773 | "@babel/parser": "^7.4.4", 774 | "@babel/types": "^7.4.4" 775 | } 776 | }, 777 | "@babel/traverse": { 778 | "version": "7.5.5", 779 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", 780 | "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", 781 | "dev": true, 782 | "requires": { 783 | "@babel/code-frame": "^7.5.5", 784 | "@babel/generator": "^7.5.5", 785 | "@babel/helper-function-name": "^7.1.0", 786 | "@babel/helper-split-export-declaration": "^7.4.4", 787 | "@babel/parser": "^7.5.5", 788 | "@babel/types": "^7.5.5", 789 | "debug": "^4.1.0", 790 | "globals": "^11.1.0", 791 | "lodash": "^4.17.13" 792 | } 793 | }, 794 | "@babel/types": { 795 | "version": "7.5.5", 796 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", 797 | "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", 798 | "dev": true, 799 | "requires": { 800 | "esutils": "^2.0.2", 801 | "lodash": "^4.17.13", 802 | "to-fast-properties": "^2.0.0" 803 | } 804 | }, 805 | "@frida/uglifyify": { 806 | "version": "6.0.1", 807 | "resolved": "https://registry.npmjs.org/@frida/uglifyify/-/uglifyify-6.0.1.tgz", 808 | "integrity": "sha512-a56tMNgOzOP4oMAQaAnnydA7sh5Yv1FXOhJz4JHG68wztn1rDMuKTqvQ3akij5ZeTeGHkxKeyvoW9hjvXBG0+w==", 809 | "dev": true, 810 | "requires": { 811 | "convert-source-map": "^1.6.0", 812 | "minimatch": "^3.0.4", 813 | "terser": "^3.17.0", 814 | "through": "^2.3.8" 815 | } 816 | }, 817 | "@oleavr/ftpd": { 818 | "version": "0.2.15", 819 | "resolved": "https://registry.npmjs.org/@oleavr/ftpd/-/ftpd-0.2.15.tgz", 820 | "integrity": "sha512-yrLpwdYtfAuAxfZWgeOSf5g0R8j+Amdnb0aF+pnAefk3h2Y085zzPbzbD/UvxbDxx7QXyNDdzkPI047Mft2FUw==", 821 | "dev": true, 822 | "requires": { 823 | "dateformat": "^3.0.3", 824 | "stat-mode": "^0.3.0" 825 | } 826 | }, 827 | "JSONStream": { 828 | "version": "1.3.5", 829 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 830 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 831 | "dev": true, 832 | "requires": { 833 | "jsonparse": "^1.2.0", 834 | "through": ">=2.2.7 <3" 835 | } 836 | }, 837 | "acorn": { 838 | "version": "7.1.1", 839 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 840 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 841 | "dev": true 842 | }, 843 | "acorn-node": { 844 | "version": "1.8.2", 845 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 846 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 847 | "dev": true, 848 | "requires": { 849 | "acorn": "^7.0.0", 850 | "acorn-walk": "^7.0.0", 851 | "xtend": "^4.0.2" 852 | } 853 | }, 854 | "acorn-walk": { 855 | "version": "7.0.0", 856 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", 857 | "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==", 858 | "dev": true 859 | }, 860 | "ansi-regex": { 861 | "version": "2.1.1", 862 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 863 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 864 | "dev": true 865 | }, 866 | "ansi-styles": { 867 | "version": "3.2.1", 868 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 869 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 870 | "dev": true, 871 | "requires": { 872 | "color-convert": "^1.9.0" 873 | } 874 | }, 875 | "any-promise": { 876 | "version": "1.3.0", 877 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 878 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", 879 | "dev": true 880 | }, 881 | "anymatch": { 882 | "version": "3.0.3", 883 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", 884 | "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", 885 | "dev": true, 886 | "requires": { 887 | "normalize-path": "^3.0.0", 888 | "picomatch": "^2.0.4" 889 | } 890 | }, 891 | "asn1.js": { 892 | "version": "4.10.1", 893 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 894 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 895 | "dev": true, 896 | "requires": { 897 | "bn.js": "^4.0.0", 898 | "inherits": "^2.0.1", 899 | "minimalistic-assert": "^1.0.0" 900 | } 901 | }, 902 | "assert": { 903 | "version": "1.5.0", 904 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 905 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 906 | "dev": true, 907 | "requires": { 908 | "object-assign": "^4.1.1", 909 | "util": "0.10.3" 910 | }, 911 | "dependencies": { 912 | "inherits": { 913 | "version": "2.0.1", 914 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 915 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 916 | "dev": true 917 | }, 918 | "util": { 919 | "version": "0.10.3", 920 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 921 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 922 | "dev": true, 923 | "requires": { 924 | "inherits": "2.0.1" 925 | } 926 | } 927 | } 928 | }, 929 | "babel-code-frame": { 930 | "version": "6.26.0", 931 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 932 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 933 | "dev": true, 934 | "requires": { 935 | "chalk": "^1.1.3", 936 | "esutils": "^2.0.2", 937 | "js-tokens": "^3.0.2" 938 | }, 939 | "dependencies": { 940 | "ansi-styles": { 941 | "version": "2.2.1", 942 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 943 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 944 | "dev": true 945 | }, 946 | "chalk": { 947 | "version": "1.1.3", 948 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 949 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 950 | "dev": true, 951 | "requires": { 952 | "ansi-styles": "^2.2.1", 953 | "escape-string-regexp": "^1.0.2", 954 | "has-ansi": "^2.0.0", 955 | "strip-ansi": "^3.0.0", 956 | "supports-color": "^2.0.0" 957 | } 958 | }, 959 | "js-tokens": { 960 | "version": "3.0.2", 961 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 962 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 963 | "dev": true 964 | }, 965 | "supports-color": { 966 | "version": "2.0.0", 967 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 968 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 969 | "dev": true 970 | } 971 | } 972 | }, 973 | "babel-messages": { 974 | "version": "6.23.0", 975 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 976 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 977 | "dev": true, 978 | "requires": { 979 | "babel-runtime": "^6.22.0" 980 | } 981 | }, 982 | "babel-plugin-dynamic-import-node": { 983 | "version": "2.3.0", 984 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", 985 | "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", 986 | "dev": true, 987 | "requires": { 988 | "object.assign": "^4.1.0" 989 | } 990 | }, 991 | "babel-plugin-import-to-require": { 992 | "version": "1.0.0", 993 | "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", 994 | "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", 995 | "dev": true, 996 | "requires": { 997 | "babel-template": "^6.26.0" 998 | } 999 | }, 1000 | "babel-runtime": { 1001 | "version": "6.26.0", 1002 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 1003 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 1004 | "dev": true, 1005 | "requires": { 1006 | "core-js": "^2.4.0", 1007 | "regenerator-runtime": "^0.11.0" 1008 | }, 1009 | "dependencies": { 1010 | "regenerator-runtime": { 1011 | "version": "0.11.1", 1012 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 1013 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", 1014 | "dev": true 1015 | } 1016 | } 1017 | }, 1018 | "babel-template": { 1019 | "version": "6.26.0", 1020 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 1021 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 1022 | "dev": true, 1023 | "requires": { 1024 | "babel-runtime": "^6.26.0", 1025 | "babel-traverse": "^6.26.0", 1026 | "babel-types": "^6.26.0", 1027 | "babylon": "^6.18.0", 1028 | "lodash": "^4.17.4" 1029 | } 1030 | }, 1031 | "babel-traverse": { 1032 | "version": "6.26.0", 1033 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 1034 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 1035 | "dev": true, 1036 | "requires": { 1037 | "babel-code-frame": "^6.26.0", 1038 | "babel-messages": "^6.23.0", 1039 | "babel-runtime": "^6.26.0", 1040 | "babel-types": "^6.26.0", 1041 | "babylon": "^6.18.0", 1042 | "debug": "^2.6.8", 1043 | "globals": "^9.18.0", 1044 | "invariant": "^2.2.2", 1045 | "lodash": "^4.17.4" 1046 | }, 1047 | "dependencies": { 1048 | "debug": { 1049 | "version": "2.6.9", 1050 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1051 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1052 | "dev": true, 1053 | "requires": { 1054 | "ms": "2.0.0" 1055 | } 1056 | }, 1057 | "globals": { 1058 | "version": "9.18.0", 1059 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 1060 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 1061 | "dev": true 1062 | }, 1063 | "ms": { 1064 | "version": "2.0.0", 1065 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1066 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1067 | "dev": true 1068 | } 1069 | } 1070 | }, 1071 | "babel-types": { 1072 | "version": "6.26.0", 1073 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 1074 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 1075 | "dev": true, 1076 | "requires": { 1077 | "babel-runtime": "^6.26.0", 1078 | "esutils": "^2.0.2", 1079 | "lodash": "^4.17.4", 1080 | "to-fast-properties": "^1.0.3" 1081 | }, 1082 | "dependencies": { 1083 | "to-fast-properties": { 1084 | "version": "1.0.3", 1085 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 1086 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 1087 | "dev": true 1088 | } 1089 | } 1090 | }, 1091 | "babelify": { 1092 | "version": "10.0.0", 1093 | "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", 1094 | "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", 1095 | "dev": true 1096 | }, 1097 | "babylon": { 1098 | "version": "6.18.0", 1099 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 1100 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 1101 | "dev": true 1102 | }, 1103 | "balanced-match": { 1104 | "version": "1.0.0", 1105 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1106 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1107 | "dev": true 1108 | }, 1109 | "base64-js": { 1110 | "version": "1.3.1", 1111 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 1112 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 1113 | "dev": true 1114 | }, 1115 | "bignumber.js": { 1116 | "version": "9.0.0", 1117 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 1118 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 1119 | "dev": true 1120 | }, 1121 | "binary-extensions": { 1122 | "version": "2.0.0", 1123 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 1124 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 1125 | "dev": true 1126 | }, 1127 | "bn.js": { 1128 | "version": "4.11.8", 1129 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 1130 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 1131 | "dev": true 1132 | }, 1133 | "brace-expansion": { 1134 | "version": "1.1.11", 1135 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1136 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1137 | "dev": true, 1138 | "requires": { 1139 | "balanced-match": "^1.0.0", 1140 | "concat-map": "0.0.1" 1141 | } 1142 | }, 1143 | "braces": { 1144 | "version": "3.0.2", 1145 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1146 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1147 | "dev": true, 1148 | "requires": { 1149 | "fill-range": "^7.0.1" 1150 | } 1151 | }, 1152 | "brorand": { 1153 | "version": "1.1.0", 1154 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 1155 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 1156 | "dev": true 1157 | }, 1158 | "browser-pack": { 1159 | "version": "6.1.0", 1160 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", 1161 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", 1162 | "dev": true, 1163 | "requires": { 1164 | "JSONStream": "^1.0.3", 1165 | "combine-source-map": "~0.8.0", 1166 | "defined": "^1.0.0", 1167 | "safe-buffer": "^5.1.1", 1168 | "through2": "^2.0.0", 1169 | "umd": "^3.0.0" 1170 | }, 1171 | "dependencies": { 1172 | "through2": { 1173 | "version": "2.0.5", 1174 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1175 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1176 | "dev": true, 1177 | "requires": { 1178 | "readable-stream": "~2.3.6", 1179 | "xtend": "~4.0.1" 1180 | } 1181 | } 1182 | } 1183 | }, 1184 | "browser-resolve": { 1185 | "version": "1.11.3", 1186 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", 1187 | "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", 1188 | "dev": true, 1189 | "requires": { 1190 | "resolve": "1.1.7" 1191 | }, 1192 | "dependencies": { 1193 | "resolve": { 1194 | "version": "1.1.7", 1195 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 1196 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 1197 | "dev": true 1198 | } 1199 | } 1200 | }, 1201 | "browserify": { 1202 | "version": "16.5.0", 1203 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.0.tgz", 1204 | "integrity": "sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw==", 1205 | "dev": true, 1206 | "requires": { 1207 | "JSONStream": "^1.0.3", 1208 | "assert": "^1.4.0", 1209 | "browser-pack": "^6.0.1", 1210 | "browser-resolve": "^1.11.0", 1211 | "browserify-zlib": "~0.2.0", 1212 | "buffer": "^5.0.2", 1213 | "cached-path-relative": "^1.0.0", 1214 | "concat-stream": "^1.6.0", 1215 | "console-browserify": "^1.1.0", 1216 | "constants-browserify": "~1.0.0", 1217 | "crypto-browserify": "^3.0.0", 1218 | "defined": "^1.0.0", 1219 | "deps-sort": "^2.0.0", 1220 | "domain-browser": "^1.2.0", 1221 | "duplexer2": "~0.1.2", 1222 | "events": "^2.0.0", 1223 | "glob": "^7.1.0", 1224 | "has": "^1.0.0", 1225 | "htmlescape": "^1.1.0", 1226 | "https-browserify": "^1.0.0", 1227 | "inherits": "~2.0.1", 1228 | "insert-module-globals": "^7.0.0", 1229 | "labeled-stream-splicer": "^2.0.0", 1230 | "mkdirp": "^0.5.0", 1231 | "module-deps": "^6.0.0", 1232 | "os-browserify": "~0.3.0", 1233 | "parents": "^1.0.1", 1234 | "path-browserify": "~0.0.0", 1235 | "process": "~0.11.0", 1236 | "punycode": "^1.3.2", 1237 | "querystring-es3": "~0.2.0", 1238 | "read-only-stream": "^2.0.0", 1239 | "readable-stream": "^2.0.2", 1240 | "resolve": "^1.1.4", 1241 | "shasum": "^1.0.0", 1242 | "shell-quote": "^1.6.1", 1243 | "stream-browserify": "^2.0.0", 1244 | "stream-http": "^3.0.0", 1245 | "string_decoder": "^1.1.1", 1246 | "subarg": "^1.0.0", 1247 | "syntax-error": "^1.1.1", 1248 | "through2": "^2.0.0", 1249 | "timers-browserify": "^1.0.1", 1250 | "tty-browserify": "0.0.1", 1251 | "url": "~0.11.0", 1252 | "util": "~0.10.1", 1253 | "vm-browserify": "^1.0.0", 1254 | "xtend": "^4.0.0" 1255 | }, 1256 | "dependencies": { 1257 | "concat-stream": { 1258 | "version": "1.6.2", 1259 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 1260 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 1261 | "dev": true, 1262 | "requires": { 1263 | "buffer-from": "^1.0.0", 1264 | "inherits": "^2.0.3", 1265 | "readable-stream": "^2.2.2", 1266 | "typedarray": "^0.0.6" 1267 | } 1268 | }, 1269 | "through2": { 1270 | "version": "2.0.5", 1271 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1272 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1273 | "dev": true, 1274 | "requires": { 1275 | "readable-stream": "~2.3.6", 1276 | "xtend": "~4.0.1" 1277 | } 1278 | } 1279 | } 1280 | }, 1281 | "browserify-aes": { 1282 | "version": "1.2.0", 1283 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 1284 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 1285 | "dev": true, 1286 | "requires": { 1287 | "buffer-xor": "^1.0.3", 1288 | "cipher-base": "^1.0.0", 1289 | "create-hash": "^1.1.0", 1290 | "evp_bytestokey": "^1.0.3", 1291 | "inherits": "^2.0.1", 1292 | "safe-buffer": "^5.0.1" 1293 | } 1294 | }, 1295 | "browserify-cipher": { 1296 | "version": "1.0.1", 1297 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 1298 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 1299 | "dev": true, 1300 | "requires": { 1301 | "browserify-aes": "^1.0.4", 1302 | "browserify-des": "^1.0.0", 1303 | "evp_bytestokey": "^1.0.0" 1304 | } 1305 | }, 1306 | "browserify-des": { 1307 | "version": "1.0.2", 1308 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 1309 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 1310 | "dev": true, 1311 | "requires": { 1312 | "cipher-base": "^1.0.1", 1313 | "des.js": "^1.0.0", 1314 | "inherits": "^2.0.1", 1315 | "safe-buffer": "^5.1.2" 1316 | } 1317 | }, 1318 | "browserify-rsa": { 1319 | "version": "4.0.1", 1320 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 1321 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 1322 | "dev": true, 1323 | "requires": { 1324 | "bn.js": "^4.1.0", 1325 | "randombytes": "^2.0.1" 1326 | } 1327 | }, 1328 | "browserify-sign": { 1329 | "version": "4.0.4", 1330 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 1331 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 1332 | "dev": true, 1333 | "requires": { 1334 | "bn.js": "^4.1.1", 1335 | "browserify-rsa": "^4.0.0", 1336 | "create-hash": "^1.1.0", 1337 | "create-hmac": "^1.1.2", 1338 | "elliptic": "^6.0.0", 1339 | "inherits": "^2.0.1", 1340 | "parse-asn1": "^5.0.0" 1341 | } 1342 | }, 1343 | "browserify-zlib": { 1344 | "version": "0.2.0", 1345 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 1346 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 1347 | "dev": true, 1348 | "requires": { 1349 | "pako": "~1.0.5" 1350 | } 1351 | }, 1352 | "browserslist": { 1353 | "version": "4.16.6", 1354 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", 1355 | "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", 1356 | "dev": true, 1357 | "requires": { 1358 | "caniuse-lite": "^1.0.30001219", 1359 | "colorette": "^1.2.2", 1360 | "electron-to-chromium": "^1.3.723", 1361 | "escalade": "^3.1.1", 1362 | "node-releases": "^1.1.71" 1363 | }, 1364 | "dependencies": { 1365 | "caniuse-lite": { 1366 | "version": "1.0.30001228", 1367 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", 1368 | "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", 1369 | "dev": true 1370 | }, 1371 | "electron-to-chromium": { 1372 | "version": "1.3.738", 1373 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.738.tgz", 1374 | "integrity": "sha512-vCMf4gDOpEylPSLPLSwAEsz+R3ShP02Y3cAKMZvTqule3XcPp7tgc/0ESI7IS6ZeyBlGClE50N53fIOkcIVnpw==", 1375 | "dev": true 1376 | }, 1377 | "node-releases": { 1378 | "version": "1.1.72", 1379 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", 1380 | "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", 1381 | "dev": true 1382 | } 1383 | } 1384 | }, 1385 | "buffer": { 1386 | "version": "5.4.0", 1387 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz", 1388 | "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==", 1389 | "dev": true, 1390 | "requires": { 1391 | "base64-js": "^1.0.2", 1392 | "ieee754": "^1.1.4" 1393 | } 1394 | }, 1395 | "buffer-from": { 1396 | "version": "1.1.1", 1397 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1398 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1399 | "dev": true 1400 | }, 1401 | "buffer-xor": { 1402 | "version": "1.0.3", 1403 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 1404 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 1405 | "dev": true 1406 | }, 1407 | "builtin-status-codes": { 1408 | "version": "3.0.0", 1409 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 1410 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 1411 | "dev": true 1412 | }, 1413 | "cached-path-relative": { 1414 | "version": "1.0.2", 1415 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", 1416 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", 1417 | "dev": true 1418 | }, 1419 | "chalk": { 1420 | "version": "2.4.2", 1421 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1422 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1423 | "dev": true, 1424 | "requires": { 1425 | "ansi-styles": "^3.2.1", 1426 | "escape-string-regexp": "^1.0.5", 1427 | "supports-color": "^5.3.0" 1428 | } 1429 | }, 1430 | "chokidar": { 1431 | "version": "3.0.2", 1432 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", 1433 | "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", 1434 | "dev": true, 1435 | "requires": { 1436 | "anymatch": "^3.0.1", 1437 | "braces": "^3.0.2", 1438 | "fsevents": "^2.0.6", 1439 | "glob-parent": "^5.0.0", 1440 | "is-binary-path": "^2.1.0", 1441 | "is-glob": "^4.0.1", 1442 | "normalize-path": "^3.0.0", 1443 | "readdirp": "^3.1.1" 1444 | } 1445 | }, 1446 | "cipher-base": { 1447 | "version": "1.0.4", 1448 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 1449 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 1450 | "dev": true, 1451 | "requires": { 1452 | "inherits": "^2.0.1", 1453 | "safe-buffer": "^5.0.1" 1454 | } 1455 | }, 1456 | "color-convert": { 1457 | "version": "1.9.3", 1458 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1459 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1460 | "dev": true, 1461 | "requires": { 1462 | "color-name": "1.1.3" 1463 | } 1464 | }, 1465 | "color-name": { 1466 | "version": "1.1.3", 1467 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1468 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1469 | "dev": true 1470 | }, 1471 | "colorette": { 1472 | "version": "1.2.2", 1473 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 1474 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 1475 | "dev": true 1476 | }, 1477 | "combine-source-map": { 1478 | "version": "0.8.0", 1479 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", 1480 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 1481 | "dev": true, 1482 | "requires": { 1483 | "convert-source-map": "~1.1.0", 1484 | "inline-source-map": "~0.6.0", 1485 | "lodash.memoize": "~3.0.3", 1486 | "source-map": "~0.5.3" 1487 | }, 1488 | "dependencies": { 1489 | "convert-source-map": { 1490 | "version": "1.1.3", 1491 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 1492 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 1493 | "dev": true 1494 | } 1495 | } 1496 | }, 1497 | "commander": { 1498 | "version": "2.20.0", 1499 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 1500 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", 1501 | "dev": true 1502 | }, 1503 | "concat-map": { 1504 | "version": "0.0.1", 1505 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1506 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1507 | "dev": true 1508 | }, 1509 | "concat-stream": { 1510 | "version": "2.0.0", 1511 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 1512 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 1513 | "dev": true, 1514 | "requires": { 1515 | "buffer-from": "^1.0.0", 1516 | "inherits": "^2.0.3", 1517 | "readable-stream": "^3.0.2", 1518 | "typedarray": "^0.0.6" 1519 | }, 1520 | "dependencies": { 1521 | "readable-stream": { 1522 | "version": "3.4.0", 1523 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 1524 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 1525 | "dev": true, 1526 | "requires": { 1527 | "inherits": "^2.0.3", 1528 | "string_decoder": "^1.1.1", 1529 | "util-deprecate": "^1.0.1" 1530 | } 1531 | } 1532 | } 1533 | }, 1534 | "console-browserify": { 1535 | "version": "1.1.0", 1536 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 1537 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 1538 | "dev": true, 1539 | "requires": { 1540 | "date-now": "^0.1.4" 1541 | } 1542 | }, 1543 | "constants-browserify": { 1544 | "version": "1.0.0", 1545 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 1546 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 1547 | "dev": true 1548 | }, 1549 | "convert-source-map": { 1550 | "version": "1.6.0", 1551 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 1552 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 1553 | "dev": true, 1554 | "requires": { 1555 | "safe-buffer": "~5.1.1" 1556 | } 1557 | }, 1558 | "core-js": { 1559 | "version": "2.6.9", 1560 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", 1561 | "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", 1562 | "dev": true 1563 | }, 1564 | "core-js-compat": { 1565 | "version": "3.2.1", 1566 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", 1567 | "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", 1568 | "dev": true, 1569 | "requires": { 1570 | "browserslist": "^4.6.6", 1571 | "semver": "^6.3.0" 1572 | }, 1573 | "dependencies": { 1574 | "semver": { 1575 | "version": "6.3.0", 1576 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1577 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1578 | "dev": true 1579 | } 1580 | } 1581 | }, 1582 | "core-util-is": { 1583 | "version": "1.0.2", 1584 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1585 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1586 | "dev": true 1587 | }, 1588 | "create-ecdh": { 1589 | "version": "4.0.3", 1590 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 1591 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 1592 | "dev": true, 1593 | "requires": { 1594 | "bn.js": "^4.1.0", 1595 | "elliptic": "^6.0.0" 1596 | } 1597 | }, 1598 | "create-hash": { 1599 | "version": "1.2.0", 1600 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 1601 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 1602 | "dev": true, 1603 | "requires": { 1604 | "cipher-base": "^1.0.1", 1605 | "inherits": "^2.0.1", 1606 | "md5.js": "^1.3.4", 1607 | "ripemd160": "^2.0.1", 1608 | "sha.js": "^2.4.0" 1609 | } 1610 | }, 1611 | "create-hmac": { 1612 | "version": "1.1.7", 1613 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 1614 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 1615 | "dev": true, 1616 | "requires": { 1617 | "cipher-base": "^1.0.3", 1618 | "create-hash": "^1.1.0", 1619 | "inherits": "^2.0.1", 1620 | "ripemd160": "^2.0.0", 1621 | "safe-buffer": "^5.0.1", 1622 | "sha.js": "^2.4.8" 1623 | } 1624 | }, 1625 | "crypto-browserify": { 1626 | "version": "3.12.0", 1627 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 1628 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 1629 | "dev": true, 1630 | "requires": { 1631 | "browserify-cipher": "^1.0.0", 1632 | "browserify-sign": "^4.0.0", 1633 | "create-ecdh": "^4.0.0", 1634 | "create-hash": "^1.1.0", 1635 | "create-hmac": "^1.1.0", 1636 | "diffie-hellman": "^5.0.0", 1637 | "inherits": "^2.0.1", 1638 | "pbkdf2": "^3.0.3", 1639 | "public-encrypt": "^4.0.0", 1640 | "randombytes": "^2.0.0", 1641 | "randomfill": "^1.0.3" 1642 | } 1643 | }, 1644 | "dash-ast": { 1645 | "version": "1.0.0", 1646 | "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", 1647 | "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", 1648 | "dev": true 1649 | }, 1650 | "date-now": { 1651 | "version": "0.1.4", 1652 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 1653 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 1654 | "dev": true 1655 | }, 1656 | "dateformat": { 1657 | "version": "3.0.3", 1658 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", 1659 | "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", 1660 | "dev": true 1661 | }, 1662 | "debug": { 1663 | "version": "4.1.1", 1664 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1665 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1666 | "dev": true, 1667 | "requires": { 1668 | "ms": "^2.1.1" 1669 | } 1670 | }, 1671 | "define-properties": { 1672 | "version": "1.1.3", 1673 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1674 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1675 | "dev": true, 1676 | "requires": { 1677 | "object-keys": "^1.0.12" 1678 | } 1679 | }, 1680 | "defined": { 1681 | "version": "1.0.0", 1682 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 1683 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 1684 | "dev": true 1685 | }, 1686 | "deps-sort": { 1687 | "version": "2.0.0", 1688 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", 1689 | "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", 1690 | "dev": true, 1691 | "requires": { 1692 | "JSONStream": "^1.0.3", 1693 | "shasum": "^1.0.0", 1694 | "subarg": "^1.0.0", 1695 | "through2": "^2.0.0" 1696 | }, 1697 | "dependencies": { 1698 | "through2": { 1699 | "version": "2.0.5", 1700 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1701 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1702 | "dev": true, 1703 | "requires": { 1704 | "readable-stream": "~2.3.6", 1705 | "xtend": "~4.0.1" 1706 | } 1707 | } 1708 | } 1709 | }, 1710 | "des.js": { 1711 | "version": "1.0.0", 1712 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 1713 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 1714 | "dev": true, 1715 | "requires": { 1716 | "inherits": "^2.0.1", 1717 | "minimalistic-assert": "^1.0.0" 1718 | } 1719 | }, 1720 | "detective": { 1721 | "version": "5.2.0", 1722 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 1723 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 1724 | "dev": true, 1725 | "requires": { 1726 | "acorn-node": "^1.6.1", 1727 | "defined": "^1.0.0", 1728 | "minimist": "^1.1.1" 1729 | } 1730 | }, 1731 | "diffie-hellman": { 1732 | "version": "5.0.3", 1733 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 1734 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 1735 | "dev": true, 1736 | "requires": { 1737 | "bn.js": "^4.1.0", 1738 | "miller-rabin": "^4.0.0", 1739 | "randombytes": "^2.0.0" 1740 | } 1741 | }, 1742 | "domain-browser": { 1743 | "version": "1.2.0", 1744 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 1745 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 1746 | "dev": true 1747 | }, 1748 | "duplexer2": { 1749 | "version": "0.1.4", 1750 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 1751 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 1752 | "dev": true, 1753 | "requires": { 1754 | "readable-stream": "^2.0.2" 1755 | } 1756 | }, 1757 | "elliptic": { 1758 | "version": "6.5.4", 1759 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 1760 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 1761 | "dev": true, 1762 | "requires": { 1763 | "bn.js": "^4.11.9", 1764 | "brorand": "^1.1.0", 1765 | "hash.js": "^1.0.0", 1766 | "hmac-drbg": "^1.0.1", 1767 | "inherits": "^2.0.4", 1768 | "minimalistic-assert": "^1.0.1", 1769 | "minimalistic-crypto-utils": "^1.0.1" 1770 | }, 1771 | "dependencies": { 1772 | "bn.js": { 1773 | "version": "4.12.0", 1774 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1775 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1776 | "dev": true 1777 | } 1778 | } 1779 | }, 1780 | "error-ex": { 1781 | "version": "1.3.2", 1782 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1783 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1784 | "dev": true, 1785 | "requires": { 1786 | "is-arrayish": "^0.2.1" 1787 | } 1788 | }, 1789 | "escalade": { 1790 | "version": "3.1.1", 1791 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1792 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1793 | "dev": true 1794 | }, 1795 | "escape-string-regexp": { 1796 | "version": "1.0.5", 1797 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1798 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1799 | "dev": true 1800 | }, 1801 | "esmify": { 1802 | "version": "2.1.1", 1803 | "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", 1804 | "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", 1805 | "dev": true, 1806 | "requires": { 1807 | "@babel/core": "^7.2.2", 1808 | "@babel/plugin-syntax-async-generators": "^7.2.0", 1809 | "@babel/plugin-syntax-dynamic-import": "^7.2.0", 1810 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0", 1811 | "@babel/plugin-transform-modules-commonjs": "^7.2.0", 1812 | "babel-plugin-import-to-require": "^1.0.0", 1813 | "cached-path-relative": "^1.0.2", 1814 | "concat-stream": "^1.6.2", 1815 | "duplexer2": "^0.1.4", 1816 | "through2": "^2.0.5" 1817 | }, 1818 | "dependencies": { 1819 | "concat-stream": { 1820 | "version": "1.6.2", 1821 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 1822 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 1823 | "dev": true, 1824 | "requires": { 1825 | "buffer-from": "^1.0.0", 1826 | "inherits": "^2.0.3", 1827 | "readable-stream": "^2.2.2", 1828 | "typedarray": "^0.0.6" 1829 | } 1830 | }, 1831 | "through2": { 1832 | "version": "2.0.5", 1833 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1834 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1835 | "dev": true, 1836 | "requires": { 1837 | "readable-stream": "~2.3.6", 1838 | "xtend": "~4.0.1" 1839 | } 1840 | } 1841 | } 1842 | }, 1843 | "esutils": { 1844 | "version": "2.0.3", 1845 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1846 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1847 | "dev": true 1848 | }, 1849 | "events": { 1850 | "version": "2.1.0", 1851 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", 1852 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", 1853 | "dev": true 1854 | }, 1855 | "evp_bytestokey": { 1856 | "version": "1.0.3", 1857 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1858 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1859 | "dev": true, 1860 | "requires": { 1861 | "md5.js": "^1.3.4", 1862 | "safe-buffer": "^5.1.1" 1863 | } 1864 | }, 1865 | "fill-range": { 1866 | "version": "7.0.1", 1867 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1868 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1869 | "dev": true, 1870 | "requires": { 1871 | "to-regex-range": "^5.0.1" 1872 | } 1873 | }, 1874 | "frida-any-promise": { 1875 | "version": "1.0.2", 1876 | "resolved": "https://registry.npmjs.org/frida-any-promise/-/frida-any-promise-1.0.2.tgz", 1877 | "integrity": "sha1-kGS+jPIbo+Nxau4k6VVu3nI556k=", 1878 | "dev": true 1879 | }, 1880 | "frida-buffer": { 1881 | "version": "1.0.6", 1882 | "resolved": "https://registry.npmjs.org/frida-buffer/-/frida-buffer-1.0.6.tgz", 1883 | "integrity": "sha512-6xTEu1nvmXKgKXOXbEqcHcanJJOh/yuVQctg1otM140lH4Sw6jRuKeC6vSWgZZxxuXoArKVbqa7FN56lyW/fqA==", 1884 | "dev": true, 1885 | "requires": { 1886 | "buffer": "^5.3.0" 1887 | } 1888 | }, 1889 | "frida-compile": { 1890 | "version": "9.0.6", 1891 | "resolved": "https://registry.npmjs.org/frida-compile/-/frida-compile-9.0.6.tgz", 1892 | "integrity": "sha512-GNSHrucVek0xtlBxwsIqLHB+YX08PQXsm5debKF9ctqVpVpCwFbho6KbCJKX9AsAu9QmDFdl2SzLqbIWO1CqqQ==", 1893 | "dev": true, 1894 | "requires": { 1895 | "@babel/core": "^7.5.5", 1896 | "@babel/plugin-transform-runtime": "^7.5.5", 1897 | "@babel/preset-env": "^7.5.5", 1898 | "@babel/runtime-corejs2": "^7.5.5", 1899 | "@frida/uglifyify": "^6.0.1", 1900 | "babelify": "^10.0.0", 1901 | "bignumber.js": "^9.0.0", 1902 | "browserify": "^16.2.3", 1903 | "chalk": "^2.4.1", 1904 | "chokidar": "^3.0.0", 1905 | "commander": "^2.9.0", 1906 | "concat-stream": "^2.0.0", 1907 | "esmify": "^2.1.1", 1908 | "frida-any-promise": "^1.0.2", 1909 | "frida-buffer": "^1.0.3", 1910 | "frida-fs": "^2.0.3", 1911 | "frida-http": "^2.0.3", 1912 | "frida-net": "^2.0.2", 1913 | "frida-process": "^2.0.1", 1914 | "mkdirp": "^0.5.1", 1915 | "mold-source-map": "^0.4.0", 1916 | "node-notifier": "^5.1.2", 1917 | "through2": "^3.0.1", 1918 | "tsify": "^4.0.0", 1919 | "typescript": "^3.5.1" 1920 | } 1921 | }, 1922 | "frida-fs": { 1923 | "version": "2.0.4", 1924 | "resolved": "https://registry.npmjs.org/frida-fs/-/frida-fs-2.0.4.tgz", 1925 | "integrity": "sha512-HskkgGnzJkNDv/vSnWcLu4bTYNLdtbonN51gXlKb0XDpwojdNQd+lfzYe+PBnVtSg/PKCtrm7Ia4Elsg1cHj3w==", 1926 | "dev": true, 1927 | "requires": { 1928 | "@babel/core": "^7.1.2", 1929 | "@babel/plugin-transform-runtime": "^7.1.0", 1930 | "@babel/preset-env": "^7.1.0", 1931 | "@babel/runtime-corejs2": "^7.1.2", 1932 | "babelify": "^10.0.0" 1933 | } 1934 | }, 1935 | "frida-http": { 1936 | "version": "2.0.4", 1937 | "resolved": "https://registry.npmjs.org/frida-http/-/frida-http-2.0.4.tgz", 1938 | "integrity": "sha512-dJqzKJGmCIhu0p43lf6B/acce2lT0a5eQlB/ZPXmk8OkKMVv9jG1MaGhWxl+XbTpjMKelnDXvshLaDVgxuA38Q==", 1939 | "dev": true, 1940 | "requires": { 1941 | "@babel/core": "^7.1.2", 1942 | "@babel/plugin-transform-runtime": "^7.1.0", 1943 | "@babel/preset-env": "^7.1.0", 1944 | "@babel/runtime-corejs2": "^7.1.2", 1945 | "babelify": "^10.0.0", 1946 | "http-parser-js": "^0.4.4" 1947 | } 1948 | }, 1949 | "frida-net": { 1950 | "version": "2.0.3", 1951 | "resolved": "https://registry.npmjs.org/frida-net/-/frida-net-2.0.3.tgz", 1952 | "integrity": "sha512-SGqTyrinhaxe1hCSFSNjIDjEG/lSYL0OnlZyzK88DI/XK66KJuHGG3w8wxD2s0kWqgmCkRXgKdg5plmaqF9CBg==", 1953 | "dev": true, 1954 | "requires": { 1955 | "@babel/core": "^7.1.2", 1956 | "@babel/plugin-transform-runtime": "^7.1.0", 1957 | "@babel/preset-env": "^7.1.0", 1958 | "@babel/runtime-corejs2": "^7.1.2", 1959 | "babelify": "^10.0.0", 1960 | "ipaddr.js": "^1.2.0" 1961 | } 1962 | }, 1963 | "frida-process": { 1964 | "version": "2.0.2", 1965 | "resolved": "https://registry.npmjs.org/frida-process/-/frida-process-2.0.2.tgz", 1966 | "integrity": "sha512-D6vbrsmS8xsGcBZKpP6CDLFOGo1bheYgOG4Ts6epDMe2dQImYsAv3XKqNrK0HcR/6COjJVXPl53TPxqFBFEuvw==", 1967 | "dev": true, 1968 | "requires": { 1969 | "@babel/core": "^7.1.2", 1970 | "@babel/plugin-transform-runtime": "^7.1.0", 1971 | "@babel/preset-env": "^7.1.0", 1972 | "@babel/runtime-corejs2": "^7.1.2", 1973 | "babelify": "^10.0.0" 1974 | } 1975 | }, 1976 | "fs.realpath": { 1977 | "version": "1.0.0", 1978 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1979 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1980 | "dev": true 1981 | }, 1982 | "fsevents": { 1983 | "version": "2.0.7", 1984 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", 1985 | "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", 1986 | "dev": true, 1987 | "optional": true 1988 | }, 1989 | "function-bind": { 1990 | "version": "1.1.1", 1991 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1992 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1993 | "dev": true 1994 | }, 1995 | "get-assigned-identifiers": { 1996 | "version": "1.2.0", 1997 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", 1998 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", 1999 | "dev": true 2000 | }, 2001 | "glob": { 2002 | "version": "7.1.4", 2003 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 2004 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 2005 | "dev": true, 2006 | "requires": { 2007 | "fs.realpath": "^1.0.0", 2008 | "inflight": "^1.0.4", 2009 | "inherits": "2", 2010 | "minimatch": "^3.0.4", 2011 | "once": "^1.3.0", 2012 | "path-is-absolute": "^1.0.0" 2013 | } 2014 | }, 2015 | "glob-parent": { 2016 | "version": "5.1.2", 2017 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2018 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2019 | "dev": true, 2020 | "requires": { 2021 | "is-glob": "^4.0.1" 2022 | } 2023 | }, 2024 | "globals": { 2025 | "version": "11.12.0", 2026 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2027 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2028 | "dev": true 2029 | }, 2030 | "growly": { 2031 | "version": "1.3.0", 2032 | "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", 2033 | "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", 2034 | "dev": true 2035 | }, 2036 | "has": { 2037 | "version": "1.0.3", 2038 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2039 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2040 | "dev": true, 2041 | "requires": { 2042 | "function-bind": "^1.1.1" 2043 | } 2044 | }, 2045 | "has-ansi": { 2046 | "version": "2.0.0", 2047 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2048 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 2049 | "dev": true, 2050 | "requires": { 2051 | "ansi-regex": "^2.0.0" 2052 | } 2053 | }, 2054 | "has-flag": { 2055 | "version": "3.0.0", 2056 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2057 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2058 | "dev": true 2059 | }, 2060 | "has-symbols": { 2061 | "version": "1.0.0", 2062 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 2063 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 2064 | "dev": true 2065 | }, 2066 | "hash-base": { 2067 | "version": "3.0.4", 2068 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 2069 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 2070 | "dev": true, 2071 | "requires": { 2072 | "inherits": "^2.0.1", 2073 | "safe-buffer": "^5.0.1" 2074 | } 2075 | }, 2076 | "hash.js": { 2077 | "version": "1.1.7", 2078 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 2079 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 2080 | "dev": true, 2081 | "requires": { 2082 | "inherits": "^2.0.3", 2083 | "minimalistic-assert": "^1.0.1" 2084 | } 2085 | }, 2086 | "hmac-drbg": { 2087 | "version": "1.0.1", 2088 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 2089 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 2090 | "dev": true, 2091 | "requires": { 2092 | "hash.js": "^1.0.3", 2093 | "minimalistic-assert": "^1.0.0", 2094 | "minimalistic-crypto-utils": "^1.0.1" 2095 | } 2096 | }, 2097 | "htmlescape": { 2098 | "version": "1.1.1", 2099 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 2100 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 2101 | "dev": true 2102 | }, 2103 | "http-parser-js": { 2104 | "version": "0.4.13", 2105 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", 2106 | "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", 2107 | "dev": true 2108 | }, 2109 | "https-browserify": { 2110 | "version": "1.0.0", 2111 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 2112 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 2113 | "dev": true 2114 | }, 2115 | "ieee754": { 2116 | "version": "1.1.13", 2117 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 2118 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 2119 | "dev": true 2120 | }, 2121 | "inflight": { 2122 | "version": "1.0.6", 2123 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2124 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2125 | "dev": true, 2126 | "requires": { 2127 | "once": "^1.3.0", 2128 | "wrappy": "1" 2129 | } 2130 | }, 2131 | "inherits": { 2132 | "version": "2.0.4", 2133 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2134 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2135 | "dev": true 2136 | }, 2137 | "inline-source-map": { 2138 | "version": "0.6.2", 2139 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 2140 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 2141 | "dev": true, 2142 | "requires": { 2143 | "source-map": "~0.5.3" 2144 | } 2145 | }, 2146 | "insert-module-globals": { 2147 | "version": "7.2.0", 2148 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", 2149 | "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", 2150 | "dev": true, 2151 | "requires": { 2152 | "JSONStream": "^1.0.3", 2153 | "acorn-node": "^1.5.2", 2154 | "combine-source-map": "^0.8.0", 2155 | "concat-stream": "^1.6.1", 2156 | "is-buffer": "^1.1.0", 2157 | "path-is-absolute": "^1.0.1", 2158 | "process": "~0.11.0", 2159 | "through2": "^2.0.0", 2160 | "undeclared-identifiers": "^1.1.2", 2161 | "xtend": "^4.0.0" 2162 | }, 2163 | "dependencies": { 2164 | "concat-stream": { 2165 | "version": "1.6.2", 2166 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 2167 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 2168 | "dev": true, 2169 | "requires": { 2170 | "buffer-from": "^1.0.0", 2171 | "inherits": "^2.0.3", 2172 | "readable-stream": "^2.2.2", 2173 | "typedarray": "^0.0.6" 2174 | } 2175 | }, 2176 | "through2": { 2177 | "version": "2.0.5", 2178 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2179 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2180 | "dev": true, 2181 | "requires": { 2182 | "readable-stream": "~2.3.6", 2183 | "xtend": "~4.0.1" 2184 | } 2185 | } 2186 | } 2187 | }, 2188 | "invariant": { 2189 | "version": "2.2.4", 2190 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 2191 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 2192 | "dev": true, 2193 | "requires": { 2194 | "loose-envify": "^1.0.0" 2195 | } 2196 | }, 2197 | "ipaddr.js": { 2198 | "version": "1.9.1", 2199 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2200 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2201 | "dev": true 2202 | }, 2203 | "is-arrayish": { 2204 | "version": "0.2.1", 2205 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2206 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 2207 | "dev": true 2208 | }, 2209 | "is-binary-path": { 2210 | "version": "2.1.0", 2211 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2212 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2213 | "dev": true, 2214 | "requires": { 2215 | "binary-extensions": "^2.0.0" 2216 | } 2217 | }, 2218 | "is-buffer": { 2219 | "version": "1.1.6", 2220 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2221 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 2222 | "dev": true 2223 | }, 2224 | "is-extglob": { 2225 | "version": "2.1.1", 2226 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2227 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2228 | "dev": true 2229 | }, 2230 | "is-glob": { 2231 | "version": "4.0.1", 2232 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 2233 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 2234 | "dev": true, 2235 | "requires": { 2236 | "is-extglob": "^2.1.1" 2237 | } 2238 | }, 2239 | "is-number": { 2240 | "version": "7.0.0", 2241 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2242 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2243 | "dev": true 2244 | }, 2245 | "is-utf8": { 2246 | "version": "0.2.1", 2247 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 2248 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 2249 | "dev": true 2250 | }, 2251 | "is-wsl": { 2252 | "version": "1.1.0", 2253 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 2254 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", 2255 | "dev": true 2256 | }, 2257 | "isarray": { 2258 | "version": "1.0.0", 2259 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2260 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2261 | "dev": true 2262 | }, 2263 | "isexe": { 2264 | "version": "2.0.0", 2265 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2266 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2267 | "dev": true 2268 | }, 2269 | "js-levenshtein": { 2270 | "version": "1.1.6", 2271 | "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", 2272 | "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", 2273 | "dev": true 2274 | }, 2275 | "js-tokens": { 2276 | "version": "4.0.0", 2277 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2278 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2279 | "dev": true 2280 | }, 2281 | "jsesc": { 2282 | "version": "2.5.2", 2283 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2284 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2285 | "dev": true 2286 | }, 2287 | "json-stable-stringify": { 2288 | "version": "0.0.1", 2289 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 2290 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 2291 | "dev": true, 2292 | "requires": { 2293 | "jsonify": "~0.0.0" 2294 | } 2295 | }, 2296 | "json5": { 2297 | "version": "2.1.0", 2298 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", 2299 | "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", 2300 | "dev": true, 2301 | "requires": { 2302 | "minimist": "^1.2.0" 2303 | } 2304 | }, 2305 | "jsonify": { 2306 | "version": "0.0.0", 2307 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 2308 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 2309 | "dev": true 2310 | }, 2311 | "jsonparse": { 2312 | "version": "1.3.1", 2313 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 2314 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 2315 | "dev": true 2316 | }, 2317 | "labeled-stream-splicer": { 2318 | "version": "2.0.2", 2319 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", 2320 | "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", 2321 | "dev": true, 2322 | "requires": { 2323 | "inherits": "^2.0.1", 2324 | "stream-splicer": "^2.0.0" 2325 | } 2326 | }, 2327 | "lodash": { 2328 | "version": "4.17.21", 2329 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2330 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2331 | "dev": true 2332 | }, 2333 | "lodash.memoize": { 2334 | "version": "3.0.4", 2335 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 2336 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 2337 | "dev": true 2338 | }, 2339 | "loose-envify": { 2340 | "version": "1.4.0", 2341 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2342 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2343 | "dev": true, 2344 | "requires": { 2345 | "js-tokens": "^3.0.0 || ^4.0.0" 2346 | } 2347 | }, 2348 | "md5.js": { 2349 | "version": "1.3.5", 2350 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 2351 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 2352 | "dev": true, 2353 | "requires": { 2354 | "hash-base": "^3.0.0", 2355 | "inherits": "^2.0.1", 2356 | "safe-buffer": "^5.1.2" 2357 | } 2358 | }, 2359 | "miller-rabin": { 2360 | "version": "4.0.1", 2361 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 2362 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 2363 | "dev": true, 2364 | "requires": { 2365 | "bn.js": "^4.0.0", 2366 | "brorand": "^1.0.1" 2367 | } 2368 | }, 2369 | "minimalistic-assert": { 2370 | "version": "1.0.1", 2371 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 2372 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 2373 | "dev": true 2374 | }, 2375 | "minimalistic-crypto-utils": { 2376 | "version": "1.0.1", 2377 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 2378 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 2379 | "dev": true 2380 | }, 2381 | "minimatch": { 2382 | "version": "3.0.4", 2383 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2384 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2385 | "dev": true, 2386 | "requires": { 2387 | "brace-expansion": "^1.1.7" 2388 | } 2389 | }, 2390 | "minimist": { 2391 | "version": "1.2.0", 2392 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2393 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 2394 | "dev": true 2395 | }, 2396 | "mkdirp": { 2397 | "version": "0.5.1", 2398 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2399 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2400 | "dev": true, 2401 | "requires": { 2402 | "minimist": "0.0.8" 2403 | }, 2404 | "dependencies": { 2405 | "minimist": { 2406 | "version": "0.0.8", 2407 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2408 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2409 | "dev": true 2410 | } 2411 | } 2412 | }, 2413 | "module-deps": { 2414 | "version": "6.2.1", 2415 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz", 2416 | "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==", 2417 | "dev": true, 2418 | "requires": { 2419 | "JSONStream": "^1.0.3", 2420 | "browser-resolve": "^1.7.0", 2421 | "cached-path-relative": "^1.0.2", 2422 | "concat-stream": "~1.6.0", 2423 | "defined": "^1.0.0", 2424 | "detective": "^5.0.2", 2425 | "duplexer2": "^0.1.2", 2426 | "inherits": "^2.0.1", 2427 | "parents": "^1.0.0", 2428 | "readable-stream": "^2.0.2", 2429 | "resolve": "^1.4.0", 2430 | "stream-combiner2": "^1.1.1", 2431 | "subarg": "^1.0.0", 2432 | "through2": "^2.0.0", 2433 | "xtend": "^4.0.0" 2434 | }, 2435 | "dependencies": { 2436 | "concat-stream": { 2437 | "version": "1.6.2", 2438 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 2439 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 2440 | "dev": true, 2441 | "requires": { 2442 | "buffer-from": "^1.0.0", 2443 | "inherits": "^2.0.3", 2444 | "readable-stream": "^2.2.2", 2445 | "typedarray": "^0.0.6" 2446 | } 2447 | }, 2448 | "through2": { 2449 | "version": "2.0.5", 2450 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2451 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2452 | "dev": true, 2453 | "requires": { 2454 | "readable-stream": "~2.3.6", 2455 | "xtend": "~4.0.1" 2456 | } 2457 | } 2458 | } 2459 | }, 2460 | "mold-source-map": { 2461 | "version": "0.4.0", 2462 | "resolved": "https://registry.npmjs.org/mold-source-map/-/mold-source-map-0.4.0.tgz", 2463 | "integrity": "sha1-z2fgsxxHq5uttcnCVlGGISe7gxc=", 2464 | "dev": true, 2465 | "requires": { 2466 | "convert-source-map": "^1.1.0", 2467 | "through": "~2.2.7" 2468 | }, 2469 | "dependencies": { 2470 | "through": { 2471 | "version": "2.2.7", 2472 | "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", 2473 | "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=", 2474 | "dev": true 2475 | } 2476 | } 2477 | }, 2478 | "ms": { 2479 | "version": "2.1.2", 2480 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2481 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2482 | "dev": true 2483 | }, 2484 | "node-notifier": { 2485 | "version": "5.4.1", 2486 | "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.1.tgz", 2487 | "integrity": "sha512-p52B+onAEHKW1OF9MGO/S7k/ahGEHfhP5/tvwYzog/5XLYOd8ZuD6vdNZdUuWMONRnKPneXV43v3s6Snx1wsCQ==", 2488 | "dev": true, 2489 | "requires": { 2490 | "growly": "^1.3.0", 2491 | "is-wsl": "^1.1.0", 2492 | "semver": "^5.5.0", 2493 | "shellwords": "^0.1.1", 2494 | "which": "^1.3.0" 2495 | } 2496 | }, 2497 | "normalize-path": { 2498 | "version": "3.0.0", 2499 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2500 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2501 | "dev": true 2502 | }, 2503 | "object-assign": { 2504 | "version": "4.1.1", 2505 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2506 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2507 | "dev": true 2508 | }, 2509 | "object-keys": { 2510 | "version": "1.1.1", 2511 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2512 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2513 | "dev": true 2514 | }, 2515 | "object.assign": { 2516 | "version": "4.1.0", 2517 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 2518 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 2519 | "dev": true, 2520 | "requires": { 2521 | "define-properties": "^1.1.2", 2522 | "function-bind": "^1.1.1", 2523 | "has-symbols": "^1.0.0", 2524 | "object-keys": "^1.0.11" 2525 | } 2526 | }, 2527 | "once": { 2528 | "version": "1.4.0", 2529 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2530 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2531 | "dev": true, 2532 | "requires": { 2533 | "wrappy": "1" 2534 | } 2535 | }, 2536 | "os-browserify": { 2537 | "version": "0.3.0", 2538 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 2539 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 2540 | "dev": true 2541 | }, 2542 | "pako": { 2543 | "version": "1.0.10", 2544 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", 2545 | "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", 2546 | "dev": true 2547 | }, 2548 | "parents": { 2549 | "version": "1.0.1", 2550 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 2551 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 2552 | "dev": true, 2553 | "requires": { 2554 | "path-platform": "~0.11.15" 2555 | } 2556 | }, 2557 | "parse-asn1": { 2558 | "version": "5.1.4", 2559 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", 2560 | "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", 2561 | "dev": true, 2562 | "requires": { 2563 | "asn1.js": "^4.0.0", 2564 | "browserify-aes": "^1.0.0", 2565 | "create-hash": "^1.1.0", 2566 | "evp_bytestokey": "^1.0.0", 2567 | "pbkdf2": "^3.0.3", 2568 | "safe-buffer": "^5.1.1" 2569 | } 2570 | }, 2571 | "parse-json": { 2572 | "version": "2.2.0", 2573 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2574 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2575 | "dev": true, 2576 | "requires": { 2577 | "error-ex": "^1.2.0" 2578 | } 2579 | }, 2580 | "path-browserify": { 2581 | "version": "0.0.1", 2582 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 2583 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 2584 | "dev": true 2585 | }, 2586 | "path-is-absolute": { 2587 | "version": "1.0.1", 2588 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2589 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2590 | "dev": true 2591 | }, 2592 | "path-parse": { 2593 | "version": "1.0.7", 2594 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2595 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2596 | "dev": true 2597 | }, 2598 | "path-platform": { 2599 | "version": "0.11.15", 2600 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 2601 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 2602 | "dev": true 2603 | }, 2604 | "pbkdf2": { 2605 | "version": "3.0.17", 2606 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 2607 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 2608 | "dev": true, 2609 | "requires": { 2610 | "create-hash": "^1.1.2", 2611 | "create-hmac": "^1.1.4", 2612 | "ripemd160": "^2.0.1", 2613 | "safe-buffer": "^5.0.1", 2614 | "sha.js": "^2.4.8" 2615 | } 2616 | }, 2617 | "picomatch": { 2618 | "version": "2.0.7", 2619 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", 2620 | "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", 2621 | "dev": true 2622 | }, 2623 | "private": { 2624 | "version": "0.1.8", 2625 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 2626 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 2627 | "dev": true 2628 | }, 2629 | "process": { 2630 | "version": "0.11.10", 2631 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2632 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 2633 | "dev": true 2634 | }, 2635 | "process-nextick-args": { 2636 | "version": "2.0.1", 2637 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2638 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2639 | "dev": true 2640 | }, 2641 | "public-encrypt": { 2642 | "version": "4.0.3", 2643 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 2644 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 2645 | "dev": true, 2646 | "requires": { 2647 | "bn.js": "^4.1.0", 2648 | "browserify-rsa": "^4.0.0", 2649 | "create-hash": "^1.1.0", 2650 | "parse-asn1": "^5.0.0", 2651 | "randombytes": "^2.0.1", 2652 | "safe-buffer": "^5.1.2" 2653 | } 2654 | }, 2655 | "punycode": { 2656 | "version": "1.4.1", 2657 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2658 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2659 | "dev": true 2660 | }, 2661 | "querystring": { 2662 | "version": "0.2.0", 2663 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2664 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2665 | "dev": true 2666 | }, 2667 | "querystring-es3": { 2668 | "version": "0.2.1", 2669 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2670 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2671 | "dev": true 2672 | }, 2673 | "randombytes": { 2674 | "version": "2.1.0", 2675 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2676 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2677 | "dev": true, 2678 | "requires": { 2679 | "safe-buffer": "^5.1.0" 2680 | } 2681 | }, 2682 | "randomfill": { 2683 | "version": "1.0.4", 2684 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2685 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2686 | "dev": true, 2687 | "requires": { 2688 | "randombytes": "^2.0.5", 2689 | "safe-buffer": "^5.1.0" 2690 | } 2691 | }, 2692 | "read-only-stream": { 2693 | "version": "2.0.0", 2694 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 2695 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 2696 | "dev": true, 2697 | "requires": { 2698 | "readable-stream": "^2.0.2" 2699 | } 2700 | }, 2701 | "readable-stream": { 2702 | "version": "2.3.6", 2703 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2704 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2705 | "dev": true, 2706 | "requires": { 2707 | "core-util-is": "~1.0.0", 2708 | "inherits": "~2.0.3", 2709 | "isarray": "~1.0.0", 2710 | "process-nextick-args": "~2.0.0", 2711 | "safe-buffer": "~5.1.1", 2712 | "string_decoder": "~1.1.1", 2713 | "util-deprecate": "~1.0.1" 2714 | }, 2715 | "dependencies": { 2716 | "string_decoder": { 2717 | "version": "1.1.1", 2718 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2719 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2720 | "dev": true, 2721 | "requires": { 2722 | "safe-buffer": "~5.1.0" 2723 | } 2724 | } 2725 | } 2726 | }, 2727 | "readdirp": { 2728 | "version": "3.1.1", 2729 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.1.tgz", 2730 | "integrity": "sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ==", 2731 | "dev": true, 2732 | "requires": { 2733 | "picomatch": "^2.0.4" 2734 | } 2735 | }, 2736 | "regenerate": { 2737 | "version": "1.4.0", 2738 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 2739 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 2740 | "dev": true 2741 | }, 2742 | "regenerate-unicode-properties": { 2743 | "version": "8.1.0", 2744 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", 2745 | "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", 2746 | "dev": true, 2747 | "requires": { 2748 | "regenerate": "^1.4.0" 2749 | } 2750 | }, 2751 | "regenerator-runtime": { 2752 | "version": "0.13.3", 2753 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", 2754 | "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", 2755 | "dev": true 2756 | }, 2757 | "regenerator-transform": { 2758 | "version": "0.14.1", 2759 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", 2760 | "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", 2761 | "dev": true, 2762 | "requires": { 2763 | "private": "^0.1.6" 2764 | } 2765 | }, 2766 | "regexp-tree": { 2767 | "version": "0.1.11", 2768 | "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", 2769 | "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==", 2770 | "dev": true 2771 | }, 2772 | "regexpu-core": { 2773 | "version": "4.5.5", 2774 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", 2775 | "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", 2776 | "dev": true, 2777 | "requires": { 2778 | "regenerate": "^1.4.0", 2779 | "regenerate-unicode-properties": "^8.1.0", 2780 | "regjsgen": "^0.5.0", 2781 | "regjsparser": "^0.6.0", 2782 | "unicode-match-property-ecmascript": "^1.0.4", 2783 | "unicode-match-property-value-ecmascript": "^1.1.0" 2784 | } 2785 | }, 2786 | "regjsgen": { 2787 | "version": "0.5.0", 2788 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", 2789 | "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", 2790 | "dev": true 2791 | }, 2792 | "regjsparser": { 2793 | "version": "0.6.0", 2794 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", 2795 | "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", 2796 | "dev": true, 2797 | "requires": { 2798 | "jsesc": "~0.5.0" 2799 | }, 2800 | "dependencies": { 2801 | "jsesc": { 2802 | "version": "0.5.0", 2803 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2804 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2805 | "dev": true 2806 | } 2807 | } 2808 | }, 2809 | "resolve": { 2810 | "version": "1.12.0", 2811 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", 2812 | "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", 2813 | "dev": true, 2814 | "requires": { 2815 | "path-parse": "^1.0.6" 2816 | } 2817 | }, 2818 | "ripemd160": { 2819 | "version": "2.0.2", 2820 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 2821 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 2822 | "dev": true, 2823 | "requires": { 2824 | "hash-base": "^3.0.0", 2825 | "inherits": "^2.0.1" 2826 | } 2827 | }, 2828 | "safe-buffer": { 2829 | "version": "5.1.2", 2830 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2831 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2832 | "dev": true 2833 | }, 2834 | "semver": { 2835 | "version": "5.7.1", 2836 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2837 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2838 | "dev": true 2839 | }, 2840 | "sha.js": { 2841 | "version": "2.4.11", 2842 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2843 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2844 | "dev": true, 2845 | "requires": { 2846 | "inherits": "^2.0.1", 2847 | "safe-buffer": "^5.0.1" 2848 | } 2849 | }, 2850 | "shasum": { 2851 | "version": "1.0.2", 2852 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 2853 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 2854 | "dev": true, 2855 | "requires": { 2856 | "json-stable-stringify": "~0.0.0", 2857 | "sha.js": "~2.4.4" 2858 | } 2859 | }, 2860 | "shell-quote": { 2861 | "version": "1.7.1", 2862 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.1.tgz", 2863 | "integrity": "sha512-2kUqeAGnMAu6YrTPX4E3LfxacH9gKljzVjlkUeSqY0soGwK4KLl7TURXCem712tkhBCeeaFP9QK4dKn88s3Icg==", 2864 | "dev": true 2865 | }, 2866 | "shellwords": { 2867 | "version": "0.1.1", 2868 | "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", 2869 | "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", 2870 | "dev": true 2871 | }, 2872 | "simple-concat": { 2873 | "version": "1.0.0", 2874 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 2875 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", 2876 | "dev": true 2877 | }, 2878 | "source-map": { 2879 | "version": "0.5.7", 2880 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2881 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2882 | "dev": true 2883 | }, 2884 | "source-map-support": { 2885 | "version": "0.5.13", 2886 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", 2887 | "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", 2888 | "dev": true, 2889 | "requires": { 2890 | "buffer-from": "^1.0.0", 2891 | "source-map": "^0.6.0" 2892 | }, 2893 | "dependencies": { 2894 | "source-map": { 2895 | "version": "0.6.1", 2896 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2897 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2898 | "dev": true 2899 | } 2900 | } 2901 | }, 2902 | "stat-mode": { 2903 | "version": "0.3.0", 2904 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", 2905 | "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==", 2906 | "dev": true 2907 | }, 2908 | "stream-browserify": { 2909 | "version": "2.0.2", 2910 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 2911 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 2912 | "dev": true, 2913 | "requires": { 2914 | "inherits": "~2.0.1", 2915 | "readable-stream": "^2.0.2" 2916 | } 2917 | }, 2918 | "stream-combiner2": { 2919 | "version": "1.1.1", 2920 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 2921 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 2922 | "dev": true, 2923 | "requires": { 2924 | "duplexer2": "~0.1.0", 2925 | "readable-stream": "^2.0.2" 2926 | } 2927 | }, 2928 | "stream-http": { 2929 | "version": "3.1.0", 2930 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", 2931 | "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", 2932 | "dev": true, 2933 | "requires": { 2934 | "builtin-status-codes": "^3.0.0", 2935 | "inherits": "^2.0.1", 2936 | "readable-stream": "^3.0.6", 2937 | "xtend": "^4.0.0" 2938 | }, 2939 | "dependencies": { 2940 | "readable-stream": { 2941 | "version": "3.4.0", 2942 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 2943 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 2944 | "dev": true, 2945 | "requires": { 2946 | "inherits": "^2.0.3", 2947 | "string_decoder": "^1.1.1", 2948 | "util-deprecate": "^1.0.1" 2949 | } 2950 | } 2951 | } 2952 | }, 2953 | "stream-splicer": { 2954 | "version": "2.0.1", 2955 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", 2956 | "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", 2957 | "dev": true, 2958 | "requires": { 2959 | "inherits": "^2.0.1", 2960 | "readable-stream": "^2.0.2" 2961 | } 2962 | }, 2963 | "string_decoder": { 2964 | "version": "1.3.0", 2965 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2966 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2967 | "dev": true, 2968 | "requires": { 2969 | "safe-buffer": "~5.2.0" 2970 | }, 2971 | "dependencies": { 2972 | "safe-buffer": { 2973 | "version": "5.2.0", 2974 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 2975 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 2976 | "dev": true 2977 | } 2978 | } 2979 | }, 2980 | "strip-ansi": { 2981 | "version": "3.0.1", 2982 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2983 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2984 | "dev": true, 2985 | "requires": { 2986 | "ansi-regex": "^2.0.0" 2987 | } 2988 | }, 2989 | "strip-bom": { 2990 | "version": "2.0.0", 2991 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 2992 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 2993 | "dev": true, 2994 | "requires": { 2995 | "is-utf8": "^0.2.0" 2996 | } 2997 | }, 2998 | "strip-json-comments": { 2999 | "version": "2.0.1", 3000 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3001 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 3002 | "dev": true 3003 | }, 3004 | "subarg": { 3005 | "version": "1.0.0", 3006 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 3007 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 3008 | "dev": true, 3009 | "requires": { 3010 | "minimist": "^1.1.0" 3011 | } 3012 | }, 3013 | "supports-color": { 3014 | "version": "5.5.0", 3015 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3016 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3017 | "dev": true, 3018 | "requires": { 3019 | "has-flag": "^3.0.0" 3020 | } 3021 | }, 3022 | "syntax-error": { 3023 | "version": "1.4.0", 3024 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", 3025 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", 3026 | "dev": true, 3027 | "requires": { 3028 | "acorn-node": "^1.2.0" 3029 | } 3030 | }, 3031 | "terser": { 3032 | "version": "3.17.0", 3033 | "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", 3034 | "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", 3035 | "dev": true, 3036 | "requires": { 3037 | "commander": "^2.19.0", 3038 | "source-map": "~0.6.1", 3039 | "source-map-support": "~0.5.10" 3040 | }, 3041 | "dependencies": { 3042 | "source-map": { 3043 | "version": "0.6.1", 3044 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3045 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3046 | "dev": true 3047 | } 3048 | } 3049 | }, 3050 | "through": { 3051 | "version": "2.3.8", 3052 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3053 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3054 | "dev": true 3055 | }, 3056 | "through2": { 3057 | "version": "3.0.1", 3058 | "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", 3059 | "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", 3060 | "dev": true, 3061 | "requires": { 3062 | "readable-stream": "2 || 3" 3063 | } 3064 | }, 3065 | "timers-browserify": { 3066 | "version": "1.4.2", 3067 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 3068 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 3069 | "dev": true, 3070 | "requires": { 3071 | "process": "~0.11.0" 3072 | } 3073 | }, 3074 | "to-fast-properties": { 3075 | "version": "2.0.0", 3076 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3077 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 3078 | "dev": true 3079 | }, 3080 | "to-regex-range": { 3081 | "version": "5.0.1", 3082 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3083 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3084 | "dev": true, 3085 | "requires": { 3086 | "is-number": "^7.0.0" 3087 | } 3088 | }, 3089 | "trim-right": { 3090 | "version": "1.0.1", 3091 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 3092 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 3093 | "dev": true 3094 | }, 3095 | "tsconfig": { 3096 | "version": "5.0.3", 3097 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", 3098 | "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", 3099 | "dev": true, 3100 | "requires": { 3101 | "any-promise": "^1.3.0", 3102 | "parse-json": "^2.2.0", 3103 | "strip-bom": "^2.0.0", 3104 | "strip-json-comments": "^2.0.0" 3105 | } 3106 | }, 3107 | "tsify": { 3108 | "version": "4.0.1", 3109 | "resolved": "https://registry.npmjs.org/tsify/-/tsify-4.0.1.tgz", 3110 | "integrity": "sha512-ClznEI+pmwY5wmD0J7HCSVERwkD+l71ch3Dqyod2JuQLEsFaiNDI+vPjaGadsuVFVvmzgoI7HghrBtWsSmCDHQ==", 3111 | "dev": true, 3112 | "requires": { 3113 | "convert-source-map": "^1.1.0", 3114 | "fs.realpath": "^1.0.0", 3115 | "object-assign": "^4.1.0", 3116 | "semver": "^5.6.0", 3117 | "through2": "^2.0.0", 3118 | "tsconfig": "^5.0.3" 3119 | }, 3120 | "dependencies": { 3121 | "through2": { 3122 | "version": "2.0.5", 3123 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 3124 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 3125 | "dev": true, 3126 | "requires": { 3127 | "readable-stream": "~2.3.6", 3128 | "xtend": "~4.0.1" 3129 | } 3130 | } 3131 | } 3132 | }, 3133 | "tty-browserify": { 3134 | "version": "0.0.1", 3135 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", 3136 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", 3137 | "dev": true 3138 | }, 3139 | "typedarray": { 3140 | "version": "0.0.6", 3141 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3142 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3143 | "dev": true 3144 | }, 3145 | "typescript": { 3146 | "version": "3.5.3", 3147 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", 3148 | "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", 3149 | "dev": true 3150 | }, 3151 | "umd": { 3152 | "version": "3.0.3", 3153 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", 3154 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", 3155 | "dev": true 3156 | }, 3157 | "undeclared-identifiers": { 3158 | "version": "1.1.3", 3159 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", 3160 | "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", 3161 | "dev": true, 3162 | "requires": { 3163 | "acorn-node": "^1.3.0", 3164 | "dash-ast": "^1.0.0", 3165 | "get-assigned-identifiers": "^1.2.0", 3166 | "simple-concat": "^1.0.0", 3167 | "xtend": "^4.0.1" 3168 | } 3169 | }, 3170 | "unicode-canonical-property-names-ecmascript": { 3171 | "version": "1.0.4", 3172 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 3173 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 3174 | "dev": true 3175 | }, 3176 | "unicode-match-property-ecmascript": { 3177 | "version": "1.0.4", 3178 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 3179 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 3180 | "dev": true, 3181 | "requires": { 3182 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 3183 | "unicode-property-aliases-ecmascript": "^1.0.4" 3184 | } 3185 | }, 3186 | "unicode-match-property-value-ecmascript": { 3187 | "version": "1.1.0", 3188 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", 3189 | "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", 3190 | "dev": true 3191 | }, 3192 | "unicode-property-aliases-ecmascript": { 3193 | "version": "1.0.5", 3194 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", 3195 | "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", 3196 | "dev": true 3197 | }, 3198 | "url": { 3199 | "version": "0.11.0", 3200 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 3201 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 3202 | "dev": true, 3203 | "requires": { 3204 | "punycode": "1.3.2", 3205 | "querystring": "0.2.0" 3206 | }, 3207 | "dependencies": { 3208 | "punycode": { 3209 | "version": "1.3.2", 3210 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 3211 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 3212 | "dev": true 3213 | } 3214 | } 3215 | }, 3216 | "util": { 3217 | "version": "0.10.4", 3218 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 3219 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 3220 | "dev": true, 3221 | "requires": { 3222 | "inherits": "2.0.3" 3223 | }, 3224 | "dependencies": { 3225 | "inherits": { 3226 | "version": "2.0.3", 3227 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 3228 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 3229 | "dev": true 3230 | } 3231 | } 3232 | }, 3233 | "util-deprecate": { 3234 | "version": "1.0.2", 3235 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3236 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3237 | "dev": true 3238 | }, 3239 | "vm-browserify": { 3240 | "version": "1.1.0", 3241 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", 3242 | "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", 3243 | "dev": true 3244 | }, 3245 | "which": { 3246 | "version": "1.3.1", 3247 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 3248 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 3249 | "dev": true, 3250 | "requires": { 3251 | "isexe": "^2.0.0" 3252 | } 3253 | }, 3254 | "wrappy": { 3255 | "version": "1.0.2", 3256 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3257 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3258 | "dev": true 3259 | }, 3260 | "xtend": { 3261 | "version": "4.0.2", 3262 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 3263 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 3264 | "dev": true 3265 | } 3266 | } 3267 | } 3268 | -------------------------------------------------------------------------------- /examples/ftp-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ftp-server-example", 3 | "version": "1.0.0", 4 | "description": "Example showing how to use frida-net's server functionality", 5 | "private": true, 6 | "scripts": { 7 | "prepare": "npm run build", 8 | "build": "frida-compile agent -o _agent.js", 9 | "watch": "frida-compile agent -o _agent.js -w" 10 | }, 11 | "devDependencies": { 12 | "frida-compile": "^9.0.6", 13 | "@oleavr/ftpd": "^0.2.15" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /examples/http-server/README.md: -------------------------------------------------------------------------------- 1 | # HTTP server example 2 | 3 | Compile with: 4 | 5 | npm install 6 | 7 | Load into a running process: 8 | 9 | frida Twitter -l _agent.js 10 | 11 | Talk to it: 12 | 13 | curl http://127.0.0.1:1337/modules 14 | -------------------------------------------------------------------------------- /examples/http-server/agent.js: -------------------------------------------------------------------------------- 1 | const Koa = require('koa'); 2 | const Router = require('koa-router'); 3 | 4 | const app = new Koa(); 5 | const router = new Router(); 6 | 7 | router 8 | .get('/ranges', (ctx, next) => { 9 | ctx.body = Process.enumerateRanges({ 10 | protection: '---', 11 | coalesce: true 12 | }); 13 | }) 14 | .get('/modules', (ctx, next) => { 15 | ctx.body = Process.enumerateModules(); 16 | }) 17 | .get('/modules/:name', (ctx, next) => { 18 | try { 19 | ctx.body = Process.getModuleByName(ctx.params.name); 20 | } catch (e) { 21 | ctx.status = 404; 22 | ctx.body = e.message; 23 | } 24 | }) 25 | .get('/modules/:name/exports', (ctx, next) => { 26 | ctx.body = Module.enumerateExports(ctx.params.name); 27 | }) 28 | .get('/modules/:name/imports', (ctx, next) => { 29 | ctx.body = Module.enumerateImports(ctx.params.name); 30 | }) 31 | .get('/objc/classes', (ctx, next) => { 32 | if (ObjC.available) { 33 | ctx.body = Object.keys(ObjC.classes); 34 | } else { 35 | ctx.status = 404; 36 | ctx.body = 'Objective-C runtime not available in this process'; 37 | } 38 | }) 39 | .get('/threads', (ctx, next) => { 40 | ctx.body = Process.enumerateThreads(); 41 | }); 42 | 43 | app 44 | .use(router.routes()) 45 | .use(router.allowedMethods()) 46 | .listen(1337); 47 | -------------------------------------------------------------------------------- /examples/http-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "http-server-example", 3 | "version": "1.0.0", 4 | "description": "Example showing how to use frida-net's server functionality", 5 | "private": true, 6 | "scripts": { 7 | "prepare": "npm run build", 8 | "build": "frida-compile agent -o _agent.js", 9 | "watch": "frida-compile agent -o _agent.js -w" 10 | }, 11 | "devDependencies": { 12 | "frida-compile": "^9.0.6", 13 | "koa": "^2.7.0", 14 | "koa-router": "^7.4.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/irc-client/README.md: -------------------------------------------------------------------------------- 1 | # IRC client example 2 | 3 | Compile with: 4 | 5 | npm install 6 | 7 | Load into a running process on a virtual machine (do not run this on your host): 8 | 9 | frida Twitter -l _agent.js 10 | 11 | Join #frida on irc.freenode.net and talk to it: 12 | 13 | InsideTwitter: Process.arch 14 | oleavr: "x64" 15 | InsideTwitter: w00t 16 | oleavr: throw new ReferenceError("w00t is not defined") 17 | -------------------------------------------------------------------------------- /examples/irc-client/agent.js: -------------------------------------------------------------------------------- 1 | const irc = require('irc'); 2 | 3 | const server = 'irc.freenode.net'; 4 | const channel = '#frida'; 5 | const nick = 'Inside' + Process.enumerateModules()[0].name; 6 | 7 | const client = new irc.Client(server, nick, { 8 | channels: [channel], 9 | }); 10 | client.on('connect', _ => { 11 | client.conn.setNoDelay(true); 12 | }); 13 | client.on('error', error => { 14 | console.log('*** ERROR: ' + JSON.stringify(error, null, 2)); 15 | }); 16 | client.on('message' + channel, (from, message) => { 17 | const trigger = client.nick + ': '; 18 | if (message.indexOf(trigger) === -1) 19 | return; 20 | const code = message.substr(trigger.length); 21 | 22 | let result; 23 | try { 24 | const rawResult = (1, eval)(code); 25 | global._ = rawResult; 26 | result = JSON.stringify(rawResult); 27 | } catch (e) { 28 | result = 'throw new ' + e.name + '("' + e.message + '")'; 29 | } 30 | 31 | client.say(channel, `${from}: ${result}`); 32 | }); 33 | -------------------------------------------------------------------------------- /examples/irc-client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "irc-client-example", 3 | "version": "1.0.0", 4 | "description": "Example showing how to use frida-net's client functionality", 5 | "private": true, 6 | "scripts": { 7 | "prepare": "npm run build", 8 | "build": "frida-compile agent -o _agent.js", 9 | "watch": "frida-compile agent -o _agent.js -w" 10 | }, 11 | "devDependencies": { 12 | "frida-compile": "^9.0.6", 13 | "irc": "^0.5.2" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import { 2 | TCP, 3 | Pipe, 4 | TCPConnectWrap, 5 | PipeConnectWrap, 6 | ShutdownWrap, 7 | WriteWrap 8 | } from './lib/adapter.js'; 9 | 10 | import assert from 'assert'; 11 | import { Buffer } from 'buffer'; 12 | import EventEmitter from 'events'; 13 | import process from 'process'; 14 | import stream from 'stream'; 15 | import timers from 'timers'; 16 | import util from 'util'; 17 | 18 | const FridaSocket = global.Socket; 19 | 20 | export default { 21 | createServer, 22 | createConnection, 23 | connect: createConnection, 24 | _normalizeArgs: normalizeArgs, 25 | Socket, 26 | Stream: Socket, 27 | Server, 28 | isIP, 29 | isIPv4, 30 | isIPv6, 31 | _setSimultaneousAccepts, 32 | }; 33 | 34 | export { 35 | createServer, 36 | createConnection, 37 | createConnection as connect, 38 | normalizeArgs as _normalizeArgs, 39 | Socket, 40 | Socket as Stream, 41 | Server, 42 | isIP, 43 | isIPv4, 44 | isIPv6, 45 | _setSimultaneousAccepts, 46 | }; 47 | 48 | function noop() {} 49 | 50 | function createHandle(fd) { 51 | var type = FridaSocket.type(fd); 52 | if (type === 'unix:stream') return new Pipe(); 53 | if (type === 'tcp' || type === 'tcp6') return new TCP(); 54 | throw new TypeError('Unsupported fd type: ' + type); 55 | } 56 | 57 | 58 | function isPipeName(s) { 59 | return typeof s === 'string' && toNumber(s) === false; 60 | } 61 | 62 | function createServer(options, connectionListener) { 63 | return new Server(options, connectionListener); 64 | } 65 | 66 | 67 | // Target API: 68 | // 69 | // var s = net.connect({port: 80, host: 'google.com'}, function() { 70 | // ... 71 | // }); 72 | // 73 | // There are various forms: 74 | // 75 | // connect(options, [cb]) 76 | // connect(port, [host], [cb]) 77 | // connect(path, [cb]); 78 | // 79 | function createConnection() { 80 | var args = new Array(arguments.length); 81 | for (var i = 0; i < arguments.length; i++) 82 | args[i] = arguments[i]; 83 | args = normalizeArgs(args); 84 | var s = new Socket(args[0]); 85 | 86 | if (args[0].timeout) { 87 | s.setTimeout(args[0].timeout); 88 | } 89 | 90 | return Socket.prototype.connect.apply(s, args); 91 | } 92 | 93 | // Returns an array [options, cb], where cb can be null. 94 | // It is the same as the argument of Socket.prototype.connect(). 95 | // This is used by Server.prototype.listen() and Socket.prototype.connect(). 96 | function normalizeArgs(args) { 97 | var options = {}; 98 | 99 | if (args.length === 0) { 100 | return [options]; 101 | } else if (args[0] !== null && typeof args[0] === 'object') { 102 | // connect(options, [cb]) 103 | options = args[0]; 104 | } else if (isPipeName(args[0])) { 105 | // connect(path, [cb]); 106 | options.path = args[0]; 107 | } else { 108 | // connect(port, [host], [cb]) 109 | options.port = args[0]; 110 | if (args.length > 1 && typeof args[1] === 'string') { 111 | options.host = args[1]; 112 | } 113 | } 114 | 115 | var cb = args[args.length - 1]; 116 | if (typeof cb !== 'function') 117 | cb = null; 118 | return [options, cb]; 119 | } 120 | 121 | 122 | // called when creating new Socket, or when re-using a closed Socket 123 | function initSocketHandle(self) { 124 | self.destroyed = false; 125 | self._bytesDispatched = 0; 126 | self._sockname = null; 127 | 128 | // Handle creation may be deferred to bind() or connect() time. 129 | if (self._handle) { 130 | self._handle.owner = self; 131 | self._handle.onread = onread; 132 | 133 | // If handle doesn't support writev - neither do we 134 | if (!self._handle.writev) 135 | self._writev = null; 136 | } 137 | } 138 | 139 | 140 | const BYTES_READ = Symbol('bytesRead'); 141 | 142 | 143 | function Socket(options) { 144 | if (!(this instanceof Socket)) return new Socket(options); 145 | 146 | this.connecting = false; 147 | this._hadError = false; 148 | this._handle = null; 149 | this._parent = null; 150 | this._host = null; 151 | 152 | if (typeof options === 'number') 153 | options = { fd: options }; // Legacy interface. 154 | else if (options === undefined) 155 | options = {}; 156 | 157 | stream.Duplex.call(this, options); 158 | 159 | if (options.handle) { 160 | this._handle = options.handle; // private 161 | } else if (options.fd !== undefined) { 162 | this._handle = createHandle(options.fd); 163 | this._handle.open(options.fd); 164 | if ((options.fd == 1 || options.fd == 2) && 165 | (this._handle instanceof Pipe) && 166 | process.platform === 'win32') { 167 | // Make stdout and stderr blocking on Windows 168 | var err = this._handle.setBlocking(true); 169 | if (err) 170 | throw errnoException(err, 'setBlocking'); 171 | } 172 | this.readable = options.readable !== false; 173 | this.writable = options.writable !== false; 174 | } else { 175 | // these will be set once there is a connection 176 | this.readable = this.writable = false; 177 | } 178 | 179 | // shut down the socket when we're finished with it. 180 | this.on('finish', onSocketFinish); 181 | this.on('_socketEnd', onSocketEnd); 182 | 183 | initSocketHandle(this); 184 | 185 | this._pendingData = null; 186 | this._pendingEncoding = ''; 187 | 188 | // default to *not* allowing half open sockets 189 | this.allowHalfOpen = options && options.allowHalfOpen || false; 190 | 191 | // if we have a handle, then start the flow of data into the 192 | // buffer. if not, then this will happen when we connect 193 | if (this._handle && options.readable !== false) { 194 | if (options.pauseOnCreate) { 195 | // stop the handle from reading and pause the stream 196 | this._handle.reading = false; 197 | this._handle.readStop(); 198 | this._readableState.flowing = false; 199 | } else { 200 | this.read(0); 201 | } 202 | } 203 | 204 | // Reserve properties 205 | this.server = null; 206 | this._server = null; 207 | 208 | // Used after `.destroy()` 209 | this[BYTES_READ] = 0; 210 | } 211 | util.inherits(Socket, stream.Duplex); 212 | 213 | Socket.prototype._unrefTimer = function unrefTimer() { 214 | for (var s = this; s !== null; s = s._parent) 215 | timers._unrefActive(s); 216 | }; 217 | 218 | // the user has called .end(), and all the bytes have been 219 | // sent out to the other side. 220 | // If allowHalfOpen is false, or if the readable side has 221 | // ended already, then destroy. 222 | // If allowHalfOpen is true, then we need to do a shutdown, 223 | // so that only the writable side will be cleaned up. 224 | function onSocketFinish() { 225 | // If still connecting - defer handling 'finish' until 'connect' will happen 226 | if (this.connecting) { 227 | return this.once('connect', onSocketFinish); 228 | } 229 | 230 | if (!this.readable || this._readableState.ended) { 231 | return this.destroy(); 232 | } 233 | 234 | // otherwise, just shutdown, or destroy() if not possible 235 | if (!this._handle || !this._handle.shutdown) 236 | return this.destroy(); 237 | 238 | var req = new ShutdownWrap(); 239 | req.oncomplete = afterShutdown; 240 | req.handle = this._handle; 241 | var err = this._handle.shutdown(req); 242 | 243 | if (err) 244 | return this._destroy(errnoException(err, 'shutdown')); 245 | } 246 | 247 | 248 | function afterShutdown(error, handle, req) { 249 | var self = handle.owner; 250 | 251 | // callback may come after call to destroy. 252 | if (self.destroyed) 253 | return; 254 | 255 | if (self._readableState.ended) { 256 | self.destroy(); 257 | } else { 258 | self.once('_socketEnd', self.destroy); 259 | } 260 | } 261 | 262 | // the EOF has been received, and no more bytes are coming. 263 | // if the writable side has ended already, then clean everything 264 | // up. 265 | function onSocketEnd() { 266 | // XXX Should not have to do as much crap in this function. 267 | // ended should already be true, since this is called *after* 268 | // the EOF errno and onread has eof'ed 269 | this._readableState.ended = true; 270 | if (this._readableState.endEmitted) { 271 | this.readable = false; 272 | maybeDestroy(this); 273 | } else { 274 | this.once('end', function() { 275 | this.readable = false; 276 | maybeDestroy(this); 277 | }); 278 | this.read(0); 279 | } 280 | 281 | if (!this.allowHalfOpen) { 282 | this.write = writeAfterFIN; 283 | this.destroySoon(); 284 | } 285 | } 286 | 287 | // Provide a better error message when we call end() as a result 288 | // of the other side sending a FIN. The standard 'write after end' 289 | // is overly vague, and makes it seem like the user's code is to blame. 290 | function writeAfterFIN(chunk, encoding, cb) { 291 | if (typeof encoding === 'function') { 292 | cb = encoding; 293 | encoding = null; 294 | } 295 | 296 | var er = new Error('This socket has been ended by the other party'); 297 | er.code = 'EPIPE'; 298 | // TODO: defer error events consistently everywhere, not just the cb 299 | this.emit('error', er); 300 | if (typeof cb === 'function') { 301 | process.nextTick(cb, er); 302 | } 303 | } 304 | 305 | Socket.prototype.read = function(n) { 306 | if (n === 0) 307 | return stream.Readable.prototype.read.call(this, n); 308 | 309 | this.read = stream.Readable.prototype.read; 310 | this._consuming = true; 311 | return this.read(n); 312 | }; 313 | 314 | 315 | Socket.prototype.listen = function() { 316 | this.on('connection', arguments[0]); 317 | listen(this, null, null, null); 318 | }; 319 | 320 | 321 | Socket.prototype.setTimeout = function(msecs, callback) { 322 | if (msecs === 0) { 323 | timers.unenroll(this); 324 | if (callback) { 325 | this.removeListener('timeout', callback); 326 | } 327 | } else { 328 | timers.enroll(this, msecs); 329 | timers._unrefActive(this); 330 | if (callback) { 331 | this.once('timeout', callback); 332 | } 333 | } 334 | return this; 335 | }; 336 | 337 | 338 | Socket.prototype._onTimeout = function() { 339 | this.emit('timeout'); 340 | }; 341 | 342 | 343 | Socket.prototype.setNoDelay = function(enable) { 344 | if (!this._handle) { 345 | this.once('connect', 346 | enable ? this.setNoDelay : () => this.setNoDelay(enable)); 347 | return this; 348 | } 349 | 350 | // backwards compatibility: assume true when `enable` is omitted 351 | if (this._handle.setNoDelay) 352 | this._handle.setNoDelay(enable === undefined ? true : !!enable); 353 | 354 | return this; 355 | }; 356 | 357 | 358 | Socket.prototype.setKeepAlive = function(setting, msecs) { 359 | if (!this._handle) { 360 | this.once('connect', () => this.setKeepAlive(setting, msecs)); 361 | return this; 362 | } 363 | 364 | if (this._handle.setKeepAlive) 365 | this._handle.setKeepAlive(setting, ~~(msecs / 1000)); 366 | 367 | return this; 368 | }; 369 | 370 | 371 | Socket.prototype.address = function() { 372 | return this._getsockname(); 373 | }; 374 | 375 | 376 | Object.defineProperty(Socket.prototype, '_connecting', { 377 | get: function() { 378 | return this.connecting; 379 | } 380 | }); 381 | 382 | 383 | Object.defineProperty(Socket.prototype, 'readyState', { 384 | get: function() { 385 | if (this.connecting) { 386 | return 'opening'; 387 | } else if (this.readable && this.writable) { 388 | return 'open'; 389 | } else if (this.readable && !this.writable) { 390 | return 'readOnly'; 391 | } else if (!this.readable && this.writable) { 392 | return 'writeOnly'; 393 | } else { 394 | return 'closed'; 395 | } 396 | } 397 | }); 398 | 399 | 400 | Object.defineProperty(Socket.prototype, 'bufferSize', { 401 | get: function() { 402 | if (this._handle) { 403 | return this._handle.writeQueueSize + this._writableState.length; 404 | } 405 | } 406 | }); 407 | 408 | 409 | // Just call handle.readStart until we have enough in the buffer 410 | Socket.prototype._read = function(n) { 411 | if (this.connecting || !this._handle) { 412 | this.once('connect', () => this._read(n)); 413 | } else if (!this._handle.reading) { 414 | // not already reading, start the flow 415 | this._handle.reading = true; 416 | var err = this._handle.readStart(); 417 | if (err) 418 | this._destroy(errnoException(err, 'read')); 419 | } 420 | }; 421 | 422 | 423 | Socket.prototype.end = function(data, encoding) { 424 | stream.Duplex.prototype.end.call(this, data, encoding); 425 | this.writable = false; 426 | 427 | // just in case we're waiting for an EOF. 428 | if (this.readable && !this._readableState.endEmitted) 429 | this.read(0); 430 | else 431 | maybeDestroy(this); 432 | }; 433 | 434 | 435 | // Call whenever we set writable=false or readable=false 436 | function maybeDestroy(socket) { 437 | if (!socket.readable && 438 | !socket.writable && 439 | !socket.destroyed && 440 | !socket.connecting && 441 | !socket._writableState.length) { 442 | socket.destroy(); 443 | } 444 | } 445 | 446 | 447 | Socket.prototype.destroySoon = function() { 448 | if (this.writable) 449 | this.end(); 450 | 451 | if (this._writableState.finished) 452 | this.destroy(); 453 | else 454 | this.once('finish', this.destroy); 455 | }; 456 | 457 | 458 | Socket.prototype._destroy = function(exception, cb) { 459 | function fireErrorCallbacks(self) { 460 | if (cb) cb(exception); 461 | if (exception && !self._writableState.errorEmitted) { 462 | process.nextTick(emitErrorNT, self, exception); 463 | self._writableState.errorEmitted = true; 464 | } 465 | } 466 | 467 | if (this.destroyed) { 468 | fireErrorCallbacks(this); 469 | return; 470 | } 471 | 472 | this.connecting = false; 473 | 474 | this.readable = this.writable = false; 475 | 476 | for (var s = this; s !== null; s = s._parent) 477 | timers.unenroll(s); 478 | 479 | if (this._handle) { 480 | var isException = exception ? true : false; 481 | // `bytesRead` should be accessible after `.destroy()` 482 | this[BYTES_READ] = this._handle.bytesRead; 483 | 484 | this._handle.close(() => { 485 | this.emit('close', isException); 486 | }); 487 | this._handle.onread = noop; 488 | this._handle = null; 489 | this._sockname = null; 490 | } 491 | 492 | // we set destroyed to true before firing error callbacks in order 493 | // to make it re-entrance safe in case Socket.prototype.destroy() 494 | // is called within callbacks 495 | this.destroyed = true; 496 | fireErrorCallbacks(this); 497 | 498 | if (this._server) { 499 | this._server._connections--; 500 | if (this._server._emitCloseIfDrained) { 501 | this._server._emitCloseIfDrained(); 502 | } 503 | } 504 | }; 505 | 506 | 507 | Socket.prototype.destroy = function(exception) { 508 | this._destroy(exception); 509 | }; 510 | 511 | 512 | // This function is called whenever the handle gets a 513 | // buffer, or when there's an error reading. 514 | function onread(error, nread, buffer) { 515 | var handle = this; 516 | var self = handle.owner; 517 | assert(handle === self._handle, 'handle != self._handle'); 518 | 519 | self._unrefTimer(); 520 | 521 | if (nread > 0) { 522 | // read success. 523 | // In theory (and in practice) calling readStop right now 524 | // will prevent this from being called again until _read() gets 525 | // called again. 526 | 527 | // Optimization: emit the original buffer with end points 528 | var ret = self.push(buffer); 529 | 530 | if (handle.reading && !ret) { 531 | handle.reading = false; 532 | var err = handle.readStop(); 533 | if (err) 534 | self._destroy(errnoException(err, 'read')); 535 | } 536 | return; 537 | } 538 | 539 | if (error !== null) { 540 | return self._destroy(errnoException(error, 'read')); 541 | } 542 | 543 | if (self._readableState.length === 0) { 544 | self.readable = false; 545 | maybeDestroy(self); 546 | } 547 | 548 | // push a null to signal the end of data. 549 | self.push(null); 550 | 551 | // internal end event so that we know that the actual socket 552 | // is no longer readable, and we can start the shutdown 553 | // procedure. No need to wait for all the data to be consumed. 554 | self.emit('_socketEnd'); 555 | } 556 | 557 | 558 | Socket.prototype._getpeername = function() { 559 | if (!this._peername) { 560 | if (!this._handle || !this._handle.getpeername) { 561 | return {}; 562 | } 563 | var out = {}; 564 | var err = this._handle.getpeername(out); 565 | if (err) return {}; // FIXME(bnoordhuis) Throw? 566 | this._peername = out; 567 | } 568 | return this._peername; 569 | }; 570 | 571 | function protoGetter(name, callback) { 572 | Object.defineProperty(Socket.prototype, name, { 573 | configurable: false, 574 | enumerable: true, 575 | get: callback 576 | }); 577 | } 578 | 579 | protoGetter('bytesRead', function bytesRead() { 580 | return this._handle ? this._handle.bytesRead : this[BYTES_READ]; 581 | }); 582 | 583 | protoGetter('remoteAddress', function remoteAddress() { 584 | return this._getpeername().address; 585 | }); 586 | 587 | protoGetter('remoteFamily', function remoteFamily() { 588 | return this._getpeername().family; 589 | }); 590 | 591 | protoGetter('remotePort', function remotePort() { 592 | return this._getpeername().port; 593 | }); 594 | 595 | 596 | Socket.prototype._getsockname = function() { 597 | if (!this._handle || !this._handle.getsockname) { 598 | return {}; 599 | } 600 | if (!this._sockname) { 601 | var out = {}; 602 | var err = this._handle.getsockname(out); 603 | if (err) return {}; // FIXME(bnoordhuis) Throw? 604 | this._sockname = out; 605 | } 606 | return this._sockname; 607 | }; 608 | 609 | 610 | protoGetter('localAddress', function localAddress() { 611 | return this._getsockname().address; 612 | }); 613 | 614 | 615 | protoGetter('localPort', function localPort() { 616 | return this._getsockname().port; 617 | }); 618 | 619 | 620 | Socket.prototype.write = function(chunk, encoding, cb) { 621 | if (typeof chunk !== 'string' && !(chunk instanceof Buffer)) { 622 | throw new TypeError( 623 | 'Invalid data, chunk must be a string or buffer, not ' + typeof chunk); 624 | } 625 | return stream.Duplex.prototype.write.apply(this, arguments); 626 | }; 627 | 628 | 629 | Socket.prototype._writeGeneric = function(writev, data, encoding, cb) { 630 | // If we are still connecting, then buffer this for later. 631 | // The Writable logic will buffer up any more writes while 632 | // waiting for this one to be done. 633 | if (this.connecting) { 634 | this._pendingData = data; 635 | this._pendingEncoding = encoding; 636 | this.once('connect', function() { 637 | this._writeGeneric(writev, data, encoding, cb); 638 | }); 639 | return; 640 | } 641 | this._pendingData = null; 642 | this._pendingEncoding = ''; 643 | 644 | this._unrefTimer(); 645 | 646 | if (!this._handle) { 647 | this._destroy(new Error('This socket is closed'), cb); 648 | return false; 649 | } 650 | 651 | var req = new WriteWrap(); 652 | req.handle = this._handle; 653 | req.oncomplete = afterWrite; 654 | req.cb = cb; 655 | var err; 656 | 657 | if (writev) { 658 | var chunks = new Array(data.length << 1); 659 | for (var i = 0; i < data.length; i++) { 660 | var entry = data[i]; 661 | chunks[i * 2] = entry.chunk; 662 | chunks[i * 2 + 1] = entry.encoding; 663 | } 664 | err = this._handle.writev(req, chunks); 665 | 666 | // Retain chunks 667 | if (!err) req._chunks = chunks; 668 | } else { 669 | var enc; 670 | if (data instanceof Buffer) { 671 | enc = 'buffer'; 672 | } else { 673 | enc = encoding; 674 | } 675 | err = createWriteReq(req, this._handle, data, enc); 676 | } 677 | 678 | if (err) 679 | return this._destroy(errnoException(err, 'write', req.error), cb); 680 | 681 | this._bytesDispatched += req.bytes; 682 | }; 683 | 684 | 685 | Socket.prototype._writev = function(chunks, cb) { 686 | this._writeGeneric(true, chunks, '', cb); 687 | }; 688 | 689 | 690 | Socket.prototype._write = function(data, encoding, cb) { 691 | this._writeGeneric(false, data, encoding, cb); 692 | }; 693 | 694 | function createWriteReq(req, handle, data, encoding) { 695 | switch (encoding) { 696 | case 'latin1': 697 | case 'binary': 698 | return handle.writeLatin1String(req, data); 699 | 700 | case 'buffer': 701 | return handle.writeBuffer(req, data); 702 | 703 | case 'utf8': 704 | case 'utf-8': 705 | return handle.writeUtf8String(req, data); 706 | 707 | case 'ascii': 708 | return handle.writeAsciiString(req, data); 709 | 710 | case 'ucs2': 711 | case 'ucs-2': 712 | case 'utf16le': 713 | case 'utf-16le': 714 | return handle.writeUcs2String(req, data); 715 | 716 | default: 717 | return handle.writeBuffer(req, Buffer.from(data, encoding)); 718 | } 719 | } 720 | 721 | 722 | protoGetter('bytesWritten', function bytesWritten() { 723 | var bytes = this._bytesDispatched; 724 | const state = this._writableState; 725 | const data = this._pendingData; 726 | const encoding = this._pendingEncoding; 727 | 728 | if (!state) 729 | return undefined; 730 | 731 | state.getBuffer().forEach(function(el) { 732 | if (el.chunk instanceof Buffer) 733 | bytes += el.chunk.length; 734 | else 735 | bytes += Buffer.byteLength(el.chunk, el.encoding); 736 | }); 737 | 738 | if (data) { 739 | if (data instanceof Buffer) 740 | bytes += data.length; 741 | else 742 | bytes += Buffer.byteLength(data, encoding); 743 | } 744 | 745 | return bytes; 746 | }); 747 | 748 | 749 | function afterWrite(error, handle, req) { 750 | var self = handle.owner; 751 | 752 | // callback may come after call to destroy. 753 | if (self.destroyed) { 754 | return; 755 | } 756 | 757 | if (error !== null) { 758 | var ex = errnoException(error, 'write', req.error); 759 | self._destroy(ex, req.cb); 760 | return; 761 | } 762 | 763 | self._unrefTimer(); 764 | 765 | if (req.cb) 766 | req.cb.call(self); 767 | } 768 | 769 | 770 | function connect(self, address, port, addressType, localAddress, localPort) { 771 | // TODO return promise from Socket.prototype.connect which 772 | // wraps _connectReq. 773 | 774 | assert.ok(self.connecting); 775 | 776 | var err; 777 | 778 | if (localAddress || localPort) { 779 | throw new Error('Local address/port is not yet supported'); 780 | } 781 | 782 | if (addressType === 6 || addressType === 4) { 783 | const req = new TCPConnectWrap(); 784 | req.oncomplete = afterConnect; 785 | req.address = address; 786 | req.port = port; 787 | req.localAddress = localAddress; 788 | req.localPort = localPort; 789 | 790 | err = self._handle.connect(req, address, port); 791 | } else { 792 | const req = new PipeConnectWrap(); 793 | req.address = address; 794 | req.oncomplete = afterConnect; 795 | err = self._handle.connect(req, address, afterConnect); 796 | } 797 | 798 | if (err) { 799 | var sockname = self._getsockname(); 800 | var details; 801 | 802 | if (sockname) { 803 | details = sockname.address + ':' + sockname.port; 804 | } 805 | 806 | const ex = exceptionWithHostPort(err, 'connect', address, port, details); 807 | self._destroy(ex); 808 | } 809 | } 810 | 811 | 812 | Socket.prototype.connect = function(options, cb) { 813 | if (this.write !== Socket.prototype.write) 814 | this.write = Socket.prototype.write; 815 | 816 | if (options === null || typeof options !== 'object') { 817 | // Old API: 818 | // connect(port, [host], [cb]) 819 | // connect(path, [cb]); 820 | var args = new Array(arguments.length); 821 | for (var i = 0; i < arguments.length; i++) 822 | args[i] = arguments[i]; 823 | args = normalizeArgs(args); 824 | return Socket.prototype.connect.apply(this, args); 825 | } 826 | 827 | if (this.destroyed) { 828 | this._readableState.reading = false; 829 | this._readableState.ended = false; 830 | this._readableState.endEmitted = false; 831 | this._writableState.ended = false; 832 | this._writableState.ending = false; 833 | this._writableState.finished = false; 834 | this._writableState.errorEmitted = false; 835 | this.destroyed = false; 836 | this._handle = null; 837 | this._peername = null; 838 | this._sockname = null; 839 | } 840 | 841 | var pipe = !!options.path; 842 | 843 | if (!this._handle) { 844 | this._handle = pipe ? new Pipe() : new TCP(); 845 | initSocketHandle(this); 846 | } 847 | 848 | if (typeof cb === 'function') { 849 | this.once('connect', cb); 850 | } 851 | 852 | this._unrefTimer(); 853 | 854 | this.connecting = true; 855 | this.writable = true; 856 | 857 | if (pipe) { 858 | connect(this, options.path); 859 | } else { 860 | lookupAndConnect(this, options); 861 | } 862 | return this; 863 | }; 864 | 865 | 866 | function lookupAndConnect(self, options) { 867 | var host = options.host || 'localhost'; 868 | var port = options.port; 869 | var localAddress = options.localAddress; 870 | var localPort = options.localPort; 871 | 872 | if (localAddress && !isIP(localAddress)) 873 | throw new TypeError('"localAddress" option must be a valid IP: ' + 874 | localAddress); 875 | 876 | if (localPort && typeof localPort !== 'number') 877 | throw new TypeError('"localPort" option should be a number: ' + localPort); 878 | 879 | if (typeof port !== 'undefined') { 880 | if (typeof port !== 'number' && typeof port !== 'string') 881 | throw new TypeError('"port" option should be a number or string: ' + 882 | port); 883 | if (!isLegalPort(port)) 884 | throw new RangeError('"port" option should be >= 0 and < 65536: ' + port); 885 | } 886 | port |= 0; 887 | 888 | if (options.lookup) 889 | throw new TypeError('"lookup" option is not yet supported'); 890 | 891 | var addressType = isIP(host); 892 | if (addressType === 0) 893 | addressType = 4; 894 | 895 | process.nextTick(function() { 896 | if (self.connecting) 897 | connect(self, host, port, addressType, localAddress, localPort); 898 | }); 899 | } 900 | 901 | 902 | Socket.prototype.ref = function() { 903 | if (!this._handle) { 904 | this.once('connect', this.ref); 905 | return this; 906 | } 907 | 908 | this._handle.ref(); 909 | 910 | return this; 911 | }; 912 | 913 | 914 | Socket.prototype.unref = function() { 915 | if (!this._handle) { 916 | this.once('connect', this.unref); 917 | return this; 918 | } 919 | 920 | this._handle.unref(); 921 | 922 | return this; 923 | }; 924 | 925 | 926 | function afterConnect(error, handle, req, readable, writable) { 927 | var self = handle.owner; 928 | 929 | // callback may come after call to destroy 930 | if (self.destroyed) { 931 | return; 932 | } 933 | 934 | // Update handle if it was wrapped 935 | // TODO(indutny): assert that the handle is actually an ancestor of old one 936 | handle = self._handle; 937 | 938 | assert.ok(self.connecting); 939 | self.connecting = false; 940 | self._sockname = null; 941 | 942 | if (error === null) { 943 | self.readable = readable; 944 | self.writable = writable; 945 | self._unrefTimer(); 946 | 947 | self.emit('connect'); 948 | 949 | // start the first read, or get an immediate EOF. 950 | // this doesn't actually consume any bytes, because len=0. 951 | if (readable && !self.isPaused()) 952 | self.read(0); 953 | 954 | } else { 955 | self.connecting = false; 956 | var details; 957 | if (req.localAddress && req.localPort) { 958 | details = req.localAddress + ':' + req.localPort; 959 | } 960 | var ex = exceptionWithHostPort(error, 961 | 'connect', 962 | req.address, 963 | req.port, 964 | details); 965 | if (details) { 966 | ex.localAddress = req.localAddress; 967 | ex.localPort = req.localPort; 968 | } 969 | self._destroy(ex); 970 | } 971 | } 972 | 973 | 974 | function Server(options, connectionListener) { 975 | if (!(this instanceof Server)) 976 | return new Server(options, connectionListener); 977 | 978 | EventEmitter.call(this); 979 | 980 | if (typeof options === 'function') { 981 | connectionListener = options; 982 | options = {}; 983 | this.on('connection', connectionListener); 984 | } else if (options == null || typeof options === 'object') { 985 | options = options || {}; 986 | 987 | if (typeof connectionListener === 'function') { 988 | this.on('connection', connectionListener); 989 | } 990 | } else { 991 | throw new TypeError('options must be an object'); 992 | } 993 | 994 | this._connections = 0; 995 | 996 | Object.defineProperty(this, 'connections', { 997 | get: () => { 998 | 999 | if (this._usingSlaves) { 1000 | return null; 1001 | } 1002 | return this._connections; 1003 | }, 1004 | set: (val) => { 1005 | return (this._connections = val); 1006 | }, 1007 | configurable: true, enumerable: false 1008 | }); 1009 | 1010 | this._handle = null; 1011 | this._usingSlaves = false; 1012 | this._slaves = []; 1013 | this._unref = false; 1014 | 1015 | this.allowHalfOpen = options.allowHalfOpen || false; 1016 | this.pauseOnConnect = !!options.pauseOnConnect; 1017 | } 1018 | util.inherits(Server, EventEmitter); 1019 | 1020 | 1021 | function toNumber(x) { return (x = Number(x)) >= 0 ? x : false; } 1022 | 1023 | Server.prototype._listen2 = function(address, port, addressType, backlog, fd) { 1024 | // If there is not yet a handle, we need to create one and bind. 1025 | // In the case of a server sent via IPC, we don't need to do this. 1026 | if (!this._handle) { 1027 | let handle; 1028 | if (typeof fd === 'number' && fd >= 0) { 1029 | try { 1030 | handle = createHandle(fd); 1031 | } catch (e) { 1032 | // Not a fd we can listen on. This will trigger an error. 1033 | const error = exceptionWithHostPort(e, 'listen', address, port); 1034 | process.nextTick(emitErrorNT, this, error); 1035 | return; 1036 | } 1037 | handle.open(fd); 1038 | handle.readable = true; 1039 | handle.writable = true; 1040 | assert(!address && !port); 1041 | } else if (port === -1 && addressType === -1) { 1042 | handle = new Pipe(); 1043 | } else { 1044 | handle = new TCP(); 1045 | } 1046 | this._handle = handle; 1047 | } 1048 | 1049 | this._handle.onconnection = onconnection; 1050 | this._handle.owner = this; 1051 | 1052 | // Use a backlog of 512 entries. We pass 511 to the listen() call because 1053 | // the kernel does: backlogsize = roundup_pow_of_two(backlogsize + 1); 1054 | // which will thus give us a backlog of 512 entries. 1055 | this._handle.listen(address, port, backlog || 511, err => { 1056 | if (err) { 1057 | var ex = exceptionWithHostPort(err, 'listen', address, port); 1058 | this._handle.close(); 1059 | this._handle = null; 1060 | process.nextTick(emitErrorNT, this, ex); 1061 | return; 1062 | } 1063 | 1064 | // generate connection key, this should be unique to the connection 1065 | this._connectionKey = addressType + ':' + address + ':' + port; 1066 | 1067 | // unref the handle if the server was unref'ed prior to listening 1068 | if (this._unref) 1069 | this.unref(); 1070 | 1071 | process.nextTick(emitListeningNT, this); 1072 | }); 1073 | }; 1074 | 1075 | 1076 | function emitErrorNT(self, err) { 1077 | self.emit('error', err); 1078 | } 1079 | 1080 | 1081 | function emitListeningNT(self) { 1082 | // ensure handle hasn't closed 1083 | if (self._handle) 1084 | self.emit('listening'); 1085 | } 1086 | 1087 | 1088 | function listen(self, address, port, addressType, backlog, fd, exclusive) { 1089 | self._listen2(address, port, addressType, backlog, fd); 1090 | } 1091 | 1092 | 1093 | Server.prototype.listen = function() { 1094 | var args = new Array(arguments.length); 1095 | for (var i = 0; i < arguments.length; i++) 1096 | args[i] = arguments[i]; 1097 | var [options, cb] = normalizeArgs(args); 1098 | 1099 | if (typeof cb === 'function') { 1100 | this.once('listening', cb); 1101 | } 1102 | 1103 | if (args.length === 0 || typeof args[0] === 'function') { 1104 | // Bind to a random port. 1105 | options.port = 0; 1106 | } 1107 | 1108 | // The third optional argument is the backlog size. 1109 | // When the ip is omitted it can be the second argument. 1110 | var backlog = toNumber(args.length > 1 && args[1]) || 1111 | toNumber(args.length > 2 && args[2]); 1112 | 1113 | options = options._handle || options.handle || options; 1114 | 1115 | if (options instanceof TCP) { 1116 | this._handle = options; 1117 | listen(this, null, -1, -1, backlog); 1118 | } else if (typeof options.fd === 'number' && options.fd >= 0) { 1119 | listen(this, null, null, null, backlog, options.fd); 1120 | } else { 1121 | backlog = options.backlog || backlog; 1122 | 1123 | if (typeof options.port === 'number' || typeof options.port === 'string' || 1124 | (typeof options.port === 'undefined' && 'port' in options)) { 1125 | // Undefined is interpreted as zero (random port) for consistency 1126 | // with net.connect(). 1127 | assertPort(options.port); 1128 | listen(this, options.host ?? null, options.port ?? 0, 4, backlog, 1129 | undefined, options.exclusive); 1130 | } else if (options.path && isPipeName(options.path)) { 1131 | // UNIX socket or Windows pipe. 1132 | const pipeName = this._pipeName = options.path; 1133 | listen(this, pipeName, -1, -1, backlog, undefined, options.exclusive); 1134 | } else { 1135 | throw new Error('Invalid listen argument: ' + options); 1136 | } 1137 | } 1138 | 1139 | return this; 1140 | }; 1141 | 1142 | Object.defineProperty(Server.prototype, 'listening', { 1143 | get: function() { 1144 | return !!(this._handle && this._connectionKey); 1145 | }, 1146 | configurable: true, 1147 | enumerable: true 1148 | }); 1149 | 1150 | Server.prototype.address = function() { 1151 | if (this._handle && this._handle.getsockname) { 1152 | var out = {}; 1153 | this._handle.getsockname(out); 1154 | // TODO(bnoordhuis) Check err and throw? 1155 | return out; 1156 | } else if (this._pipeName) { 1157 | return this._pipeName; 1158 | } else { 1159 | return null; 1160 | } 1161 | }; 1162 | 1163 | function onconnection(err, clientHandle) { 1164 | var handle = this; 1165 | var self = handle.owner; 1166 | 1167 | if (err) { 1168 | self.emit('error', errnoException(err, 'accept')); 1169 | return; 1170 | } 1171 | 1172 | if (self.maxConnections && self._connections >= self.maxConnections) { 1173 | clientHandle.close(); 1174 | return; 1175 | } 1176 | 1177 | var socket = new Socket({ 1178 | handle: clientHandle, 1179 | allowHalfOpen: self.allowHalfOpen, 1180 | pauseOnCreate: self.pauseOnConnect 1181 | }); 1182 | socket.readable = socket.writable = true; 1183 | 1184 | 1185 | self._connections++; 1186 | socket.server = self; 1187 | socket._server = self; 1188 | 1189 | self.emit('connection', socket); 1190 | } 1191 | 1192 | 1193 | Server.prototype.getConnections = function(cb) { 1194 | function end(err, connections) { 1195 | process.nextTick(cb, err, connections); 1196 | } 1197 | 1198 | if (!this._usingSlaves) { 1199 | return end(null, this._connections); 1200 | } 1201 | 1202 | // Poll slaves 1203 | var left = this._slaves.length; 1204 | var total = this._connections; 1205 | 1206 | function oncount(err, count) { 1207 | if (err) { 1208 | left = -1; 1209 | return end(err); 1210 | } 1211 | 1212 | total += count; 1213 | if (--left === 0) return end(null, total); 1214 | } 1215 | 1216 | this._slaves.forEach(function(slave) { 1217 | slave.getConnections(oncount); 1218 | }); 1219 | }; 1220 | 1221 | 1222 | Server.prototype.close = function(cb) { 1223 | function onSlaveClose() { 1224 | if (--left !== 0) return; 1225 | 1226 | self._connections = 0; 1227 | self._emitCloseIfDrained(); 1228 | } 1229 | 1230 | if (typeof cb === 'function') { 1231 | if (!this._handle) { 1232 | this.once('close', function() { 1233 | cb(new Error('Not running')); 1234 | }); 1235 | } else { 1236 | this.once('close', cb); 1237 | } 1238 | } 1239 | 1240 | if (this._handle) { 1241 | this._handle.close(); 1242 | this._handle = null; 1243 | } 1244 | 1245 | if (this._usingSlaves) { 1246 | var self = this; 1247 | var left = this._slaves.length; 1248 | 1249 | // Increment connections to be sure that, even if all sockets will be closed 1250 | // during polling of slaves, `close` event will be emitted only once. 1251 | this._connections++; 1252 | 1253 | // Poll slaves 1254 | this._slaves.forEach(function(slave) { 1255 | slave.close(onSlaveClose); 1256 | }); 1257 | } else { 1258 | this._emitCloseIfDrained(); 1259 | } 1260 | 1261 | return this; 1262 | }; 1263 | 1264 | Server.prototype._emitCloseIfDrained = function() { 1265 | if (this._handle || this._connections) { 1266 | return; 1267 | } 1268 | 1269 | process.nextTick(emitCloseNT, this); 1270 | }; 1271 | 1272 | 1273 | function emitCloseNT(self) { 1274 | self.emit('close'); 1275 | } 1276 | 1277 | 1278 | Server.prototype.listenFD = function(fd, type) { 1279 | return this.listen({ fd: fd }); 1280 | }; 1281 | 1282 | Server.prototype._setupSlave = function(socketList) { 1283 | this._usingSlaves = true; 1284 | this._slaves.push(socketList); 1285 | }; 1286 | 1287 | Server.prototype.ref = function() { 1288 | this._unref = false; 1289 | 1290 | if (this._handle) 1291 | this._handle.ref(); 1292 | 1293 | return this; 1294 | }; 1295 | 1296 | Server.prototype.unref = function() { 1297 | this._unref = true; 1298 | 1299 | if (this._handle) 1300 | this._handle.unref(); 1301 | 1302 | return this; 1303 | }; 1304 | 1305 | 1306 | // IPv4 Segment 1307 | const v4Seg = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'; 1308 | const v4Str = `(${v4Seg}[.]){3}${v4Seg}`; 1309 | const IPv4Reg = new RegExp(`^${v4Str}$`); 1310 | 1311 | // IPv6 Segment 1312 | const v6Seg = '(?:[0-9a-fA-F]{1,4})'; 1313 | const IPv6Reg = new RegExp('^(' + 1314 | `(?:${v6Seg}:){7}(?:${v6Seg}|:)|` + 1315 | `(?:${v6Seg}:){6}(?:${v4Str}|:${v6Seg}|:)|` + 1316 | `(?:${v6Seg}:){5}(?::${v4Str}|(:${v6Seg}){1,2}|:)|` + 1317 | `(?:${v6Seg}:){4}(?:(:${v6Seg}){0,1}:${v4Str}|(:${v6Seg}){1,3}|:)|` + 1318 | `(?:${v6Seg}:){3}(?:(:${v6Seg}){0,2}:${v4Str}|(:${v6Seg}){1,4}|:)|` + 1319 | `(?:${v6Seg}:){2}(?:(:${v6Seg}){0,3}:${v4Str}|(:${v6Seg}){1,5}|:)|` + 1320 | `(?:${v6Seg}:){1}(?:(:${v6Seg}){0,4}:${v4Str}|(:${v6Seg}){1,6}|:)|` + 1321 | `(?::((?::${v6Seg}){0,5}:${v4Str}|(?::${v6Seg}){1,7}|:))` + 1322 | ')(%[0-9a-zA-Z-.:]{1,})?$'); 1323 | 1324 | function isIPv4(s) { 1325 | return IPv4Reg.test(s); 1326 | } 1327 | 1328 | function isIPv6(s) { 1329 | return IPv6Reg.test(s); 1330 | } 1331 | 1332 | function isIP(s) { 1333 | if (isIPv4(s)) return 4; 1334 | if (isIPv6(s)) return 6; 1335 | return 0; 1336 | } 1337 | 1338 | 1339 | function _setSimultaneousAccepts(handle) {} 1340 | 1341 | 1342 | // Check that the port number is not NaN when coerced to a number, 1343 | // is an integer and that it falls within the legal range of port numbers. 1344 | function isLegalPort(port) { 1345 | if ((typeof port !== 'number' && typeof port !== 'string') || 1346 | (typeof port === 'string' && port.trim().length === 0)) 1347 | return false; 1348 | return +port === (+port >>> 0) && port <= 0xFFFF; 1349 | } 1350 | 1351 | 1352 | function assertPort(port) { 1353 | if (typeof port !== 'undefined' && !isLegalPort(port)) 1354 | throw new RangeError('"port" argument must be >= 0 and < 65536'); 1355 | } 1356 | 1357 | 1358 | function errnoException(err, syscall, original) { 1359 | var errname = err.message; 1360 | var message = syscall + ' ' + errname; 1361 | if (original) 1362 | message += ' ' + original; 1363 | var e = new Error(message); 1364 | e.code = errname; 1365 | e.errno = errname; 1366 | e.syscall = syscall; 1367 | return e; 1368 | } 1369 | 1370 | 1371 | function exceptionWithHostPort(err, 1372 | syscall, 1373 | address, 1374 | port, 1375 | additional) { 1376 | var details; 1377 | if (port && port > 0) { 1378 | details = address + ':' + port; 1379 | } else { 1380 | details = address; 1381 | } 1382 | 1383 | if (additional) { 1384 | details += ' - Local (' + additional + ')'; 1385 | } 1386 | var ex = errnoException(err, syscall, details); 1387 | ex.address = address; 1388 | if (port) { 1389 | ex.port = port; 1390 | } 1391 | return ex; 1392 | } 1393 | -------------------------------------------------------------------------------- /lib/adapter.js: -------------------------------------------------------------------------------- 1 | import { Buffer } from 'buffer'; 2 | import process from 'process'; 3 | 4 | class StreamHandle { 5 | constructor() { 6 | this.owner = null; 7 | this.onconnection = null; 8 | this.onread = null; 9 | this.closed = false; 10 | this.reading = false; 11 | 12 | this._listener = null; 13 | this._connection = null; 14 | this._reading = false; 15 | this._queuedRead = null; 16 | } 17 | 18 | close(callback) { 19 | if (this.closed) { 20 | onSuccess(); 21 | return; 22 | } 23 | this.closed = true; 24 | 25 | const resource = this._listener || this._connection; 26 | if (resource === null) { 27 | onSuccess(); 28 | return; 29 | } 30 | 31 | resource.close().then(onSuccess, onSuccess); 32 | 33 | function onSuccess() { 34 | if (callback) 35 | process.nextTick(callback); 36 | } 37 | } 38 | 39 | listen(address, port, backlog, callback) { 40 | let options; 41 | if (port === -1) { 42 | options = { 43 | path: address, 44 | backlog: backlog 45 | }; 46 | } else { 47 | options = { 48 | host: address, 49 | port: port, 50 | backlog: backlog 51 | }; 52 | } 53 | 54 | Socket.listen(options) 55 | .then(listener => { 56 | if (this.closed) { 57 | listener.close().then(noop, noop); 58 | callback(new Error('Handle is closed')); 59 | return; 60 | } 61 | 62 | this._listener = listener; 63 | this._acceptNext(); 64 | 65 | callback(null); 66 | }) 67 | .catch(error => { 68 | callback(error); 69 | }); 70 | } 71 | 72 | _acceptNext() { 73 | this._listener.accept() 74 | .then(connection => { 75 | this.onconnection(null, this._create(connection)); 76 | 77 | process.nextTick(() => { 78 | if (!this.closed) { 79 | this._acceptNext(); 80 | } 81 | }); 82 | }) 83 | .catch(error => { 84 | if (this.closed) { 85 | return; 86 | } 87 | 88 | this.onconnection(error, null); 89 | }); 90 | } 91 | 92 | getsockname(result) { 93 | if (this._listener !== null) { 94 | result.port = this._listener.port; 95 | // TODO 96 | result.family = 'IPv4'; 97 | result.address = '0.0.0.0'; 98 | } 99 | 100 | if (this._connection !== null) { 101 | // TODO 102 | result.port = 1234; 103 | result.family = 'IPv4'; 104 | result.address = '127.0.0.1'; 105 | } 106 | } 107 | 108 | connect(req, address, port) { 109 | Socket.connect({ 110 | host: address, 111 | port: port, 112 | }) 113 | .then(connection => { 114 | if (this.closed) { 115 | connection.close().then(noop, noop); 116 | req.oncomplete(new Error('Handle is closed'), this, req, false, false); 117 | return; 118 | } 119 | 120 | this._connection = connection; 121 | 122 | req.oncomplete(null, this, req, true, true); 123 | }) 124 | .catch(error => { 125 | req.oncomplete(error, this, req, false, false); 126 | }); 127 | } 128 | 129 | readStart() { 130 | const read = this._queuedRead; 131 | if (read !== null) { 132 | const [error, data] = read; 133 | if (error !== null) { 134 | return error; 135 | } 136 | 137 | this._queuedRead = null; 138 | process.nextTick(() => { 139 | this.onread(null, data.length, data); 140 | }); 141 | } 142 | 143 | this._reading = true; 144 | this._readNext(); 145 | } 146 | 147 | _readNext() { 148 | this._connection.input.read(512) 149 | .then(rawData => { 150 | const data = Buffer.from(rawData); 151 | if (this._reading) { 152 | this.onread(null, data.length, data); 153 | 154 | const isEof = data.length === 0; 155 | if (!isEof) { 156 | process.nextTick(() => { 157 | if (this._reading) { 158 | this._readNext(); 159 | } 160 | }); 161 | } 162 | } else { 163 | this._queuedRead = [null, data]; 164 | } 165 | }) 166 | .catch(error => { 167 | if (this._reading) { 168 | this.onread(error, -1, null); 169 | } else { 170 | this._queuedRead = [error, null]; 171 | } 172 | }); 173 | } 174 | 175 | readStop() { 176 | this._reading = false; 177 | } 178 | 179 | writeBuffer(req, data) { 180 | req.bytes = data.length; 181 | 182 | this._connection.output.writeAll(data.buffer) 183 | .then(connection => { 184 | req.oncomplete(null, this, req); 185 | }) 186 | .catch(error => { 187 | req.oncomplete(error, this, req); 188 | }); 189 | } 190 | } 191 | 192 | export class TCP extends StreamHandle { 193 | _create(connection) { 194 | const handle = new TCP(); 195 | handle._connection = connection; 196 | return handle; 197 | } 198 | } 199 | 200 | export class Pipe extends StreamHandle { 201 | constructor() { 202 | super(); 203 | 204 | throw new Error('Pipe not yet implemented'); 205 | } 206 | 207 | _create(connection) { 208 | const handle = new Pipe(); 209 | handle._connection = connection; 210 | return handle; 211 | } 212 | } 213 | 214 | export class TCPConnectWrap { 215 | constructor() { 216 | this.address = ''; 217 | this.port = 0; 218 | this.localAddress = null; 219 | this.localPort = null; 220 | this.oncomplete = null; 221 | } 222 | } 223 | 224 | export class PipeConnectWrap { 225 | constructor() { 226 | this.address = ''; 227 | this.oncomplete = null; 228 | } 229 | } 230 | 231 | export class ShutdownWrap { 232 | constructor() { 233 | this.handle = null; 234 | this.oncomplete = null; 235 | } 236 | } 237 | 238 | export class WriteWrap { 239 | constructor() { 240 | this.handle = null; 241 | this.oncomplete = null; 242 | this.bytes = 0; 243 | this.error = null; 244 | } 245 | } 246 | 247 | function noop() {} 248 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@frida/net", 3 | "version": "4.0.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@frida/net", 9 | "version": "4.0.2", 10 | "license": "MIT" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@frida/net", 3 | "description": "Node.js's net module for Frida", 4 | "version": "4.0.2", 5 | "publishConfig": { 6 | "access": "public" 7 | }, 8 | "authors": [ 9 | "Frida Developers" 10 | ], 11 | "keywords": [ 12 | "frida" 13 | ], 14 | "homepage": "https://frida.re", 15 | "main": "index.js", 16 | "files": [ 17 | "/index.js", 18 | "/lib/adapter.js" 19 | ], 20 | "type": "module", 21 | "license": "MIT", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/frida/gumjs-net.git" 25 | }, 26 | "bugs": { 27 | "url": "https://github.com/frida/gumjs-net/issues" 28 | } 29 | } 30 | --------------------------------------------------------------------------------