├── .env ├── .gitattributes ├── LICENSE ├── README.md ├── package-lock.json ├── package.json └── src ├── classifier ├── classifier.js └── image.js ├── deobfuscator ├── assets │ ├── input.js │ └── output.js ├── deobfuscator.js ├── tests │ └── deobfuscator_test.js └── visitors │ ├── replaceHexadecimalInteger.js │ └── replaceStrings.js ├── index.js ├── payload ├── events.js ├── payload.js └── utils.js └── server ├── routes └── captcha.js └── server.js /.env: -------------------------------------------------------------------------------- 1 | SERVER_PORT=5000 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 brianxor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # binance-solver 2 | 3 | A solver for the binance captcha. 4 | 5 | ## Description 6 | 7 | Decided to open source this, the code is not great, this was also made a long time ago so it might not work anymore but it's still a good project to learn from. 8 | 9 | > [!NOTE] 10 | > Deobfuscator still works. 11 | 12 | ## Supported Modes 13 | 14 | - Box 15 | 16 | ## Setup 17 | 18 | 1. `git clone https://github.com/brianxor/binance-solver.git` 19 | 2. `npm install` 20 | 3. `npm run start` 21 | 22 | ## Usage 23 | 24 | Base URL: `http://127.0.0.1:5000/` 25 | 26 | > [!TIP] 27 | > You can configure the server port through .env file. 28 | 29 | ### Endpoints 30 | 31 | - `/captcha/solve` 32 | 33 | Method: `POST` 34 | 35 | #### Request Body 36 | 37 | | Parameter | Type | Description | Required | 38 | |----------------|--------|--------------------------------------------|----------| 39 | | `mode` | string | Solving Mode | Yes | 40 | | `bizId` | string | Method Id | Yes | 41 | | `captchaData` | object | Captcha Data | Yes | 42 | 43 | #### Captcha Data Object Properties Table 44 | | Parameter | Type | Description | Required | 45 | |-----------------|--------|---------------------------------------|----------| 46 | | `sig` | string | From `/getCaptcha` | Yes | 47 | | `salt` | string | From `/getCaptcha` | Yes | 48 | | `path2` | string | From `/getCaptcha` | Yes | 49 | | `ek` | string | From `/getCaptcha` | Yes | 50 | | `captchaType` | string | From `/getCaptcha` | Yes | 51 | | `tag` | string | From `/getCaptcha` | Yes | 52 | 53 | #### Request Body Example 54 | ```json 55 | { 56 | "mode": "PAYLOAD", 57 | "bizId": "login", 58 | "captchaData": { 59 | "sig": "", 60 | "salt": "", 61 | "path2": "", 62 | "ek": "", 63 | "captchaType": "BOX", 64 | "tag": "" 65 | } 66 | } 67 | ``` -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "binance-solver", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "binance-solver", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@xenova/transformers": "^2.17.2", 13 | "deobfuscator": "^2.4.5", 14 | "dotenv": "^16.4.5", 15 | "express": "^4.19.2", 16 | "morgan": "^1.10.0", 17 | "node-fetch": "^3.3.2", 18 | "redis": "^4.6.14", 19 | "sharp": "^0.33.4", 20 | "uuid": "^9.0.1" 21 | } 22 | }, 23 | "node_modules/@emnapi/runtime": { 24 | "version": "1.2.0", 25 | "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", 26 | "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", 27 | "optional": true, 28 | "dependencies": { 29 | "tslib": "^2.4.0" 30 | } 31 | }, 32 | "node_modules/@huggingface/jinja": { 33 | "version": "0.2.2", 34 | "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", 35 | "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", 36 | "engines": { 37 | "node": ">=18" 38 | } 39 | }, 40 | "node_modules/@img/sharp-darwin-arm64": { 41 | "version": "0.33.4", 42 | "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", 43 | "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", 44 | "cpu": [ 45 | "arm64" 46 | ], 47 | "optional": true, 48 | "os": [ 49 | "darwin" 50 | ], 51 | "engines": { 52 | "glibc": ">=2.26", 53 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 54 | "npm": ">=9.6.5", 55 | "pnpm": ">=7.1.0", 56 | "yarn": ">=3.2.0" 57 | }, 58 | "funding": { 59 | "url": "https://opencollective.com/libvips" 60 | }, 61 | "optionalDependencies": { 62 | "@img/sharp-libvips-darwin-arm64": "1.0.2" 63 | } 64 | }, 65 | "node_modules/@img/sharp-darwin-x64": { 66 | "version": "0.33.4", 67 | "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", 68 | "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", 69 | "cpu": [ 70 | "x64" 71 | ], 72 | "optional": true, 73 | "os": [ 74 | "darwin" 75 | ], 76 | "engines": { 77 | "glibc": ">=2.26", 78 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 79 | "npm": ">=9.6.5", 80 | "pnpm": ">=7.1.0", 81 | "yarn": ">=3.2.0" 82 | }, 83 | "funding": { 84 | "url": "https://opencollective.com/libvips" 85 | }, 86 | "optionalDependencies": { 87 | "@img/sharp-libvips-darwin-x64": "1.0.2" 88 | } 89 | }, 90 | "node_modules/@img/sharp-libvips-darwin-arm64": { 91 | "version": "1.0.2", 92 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", 93 | "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", 94 | "cpu": [ 95 | "arm64" 96 | ], 97 | "optional": true, 98 | "os": [ 99 | "darwin" 100 | ], 101 | "engines": { 102 | "macos": ">=11", 103 | "npm": ">=9.6.5", 104 | "pnpm": ">=7.1.0", 105 | "yarn": ">=3.2.0" 106 | }, 107 | "funding": { 108 | "url": "https://opencollective.com/libvips" 109 | } 110 | }, 111 | "node_modules/@img/sharp-libvips-darwin-x64": { 112 | "version": "1.0.2", 113 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", 114 | "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", 115 | "cpu": [ 116 | "x64" 117 | ], 118 | "optional": true, 119 | "os": [ 120 | "darwin" 121 | ], 122 | "engines": { 123 | "macos": ">=10.13", 124 | "npm": ">=9.6.5", 125 | "pnpm": ">=7.1.0", 126 | "yarn": ">=3.2.0" 127 | }, 128 | "funding": { 129 | "url": "https://opencollective.com/libvips" 130 | } 131 | }, 132 | "node_modules/@img/sharp-libvips-linux-arm": { 133 | "version": "1.0.2", 134 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", 135 | "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", 136 | "cpu": [ 137 | "arm" 138 | ], 139 | "optional": true, 140 | "os": [ 141 | "linux" 142 | ], 143 | "engines": { 144 | "glibc": ">=2.28", 145 | "npm": ">=9.6.5", 146 | "pnpm": ">=7.1.0", 147 | "yarn": ">=3.2.0" 148 | }, 149 | "funding": { 150 | "url": "https://opencollective.com/libvips" 151 | } 152 | }, 153 | "node_modules/@img/sharp-libvips-linux-arm64": { 154 | "version": "1.0.2", 155 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", 156 | "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", 157 | "cpu": [ 158 | "arm64" 159 | ], 160 | "optional": true, 161 | "os": [ 162 | "linux" 163 | ], 164 | "engines": { 165 | "glibc": ">=2.26", 166 | "npm": ">=9.6.5", 167 | "pnpm": ">=7.1.0", 168 | "yarn": ">=3.2.0" 169 | }, 170 | "funding": { 171 | "url": "https://opencollective.com/libvips" 172 | } 173 | }, 174 | "node_modules/@img/sharp-libvips-linux-s390x": { 175 | "version": "1.0.2", 176 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", 177 | "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", 178 | "cpu": [ 179 | "s390x" 180 | ], 181 | "optional": true, 182 | "os": [ 183 | "linux" 184 | ], 185 | "engines": { 186 | "glibc": ">=2.28", 187 | "npm": ">=9.6.5", 188 | "pnpm": ">=7.1.0", 189 | "yarn": ">=3.2.0" 190 | }, 191 | "funding": { 192 | "url": "https://opencollective.com/libvips" 193 | } 194 | }, 195 | "node_modules/@img/sharp-libvips-linux-x64": { 196 | "version": "1.0.2", 197 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", 198 | "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", 199 | "cpu": [ 200 | "x64" 201 | ], 202 | "optional": true, 203 | "os": [ 204 | "linux" 205 | ], 206 | "engines": { 207 | "glibc": ">=2.26", 208 | "npm": ">=9.6.5", 209 | "pnpm": ">=7.1.0", 210 | "yarn": ">=3.2.0" 211 | }, 212 | "funding": { 213 | "url": "https://opencollective.com/libvips" 214 | } 215 | }, 216 | "node_modules/@img/sharp-libvips-linuxmusl-arm64": { 217 | "version": "1.0.2", 218 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", 219 | "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", 220 | "cpu": [ 221 | "arm64" 222 | ], 223 | "optional": true, 224 | "os": [ 225 | "linux" 226 | ], 227 | "engines": { 228 | "musl": ">=1.2.2", 229 | "npm": ">=9.6.5", 230 | "pnpm": ">=7.1.0", 231 | "yarn": ">=3.2.0" 232 | }, 233 | "funding": { 234 | "url": "https://opencollective.com/libvips" 235 | } 236 | }, 237 | "node_modules/@img/sharp-libvips-linuxmusl-x64": { 238 | "version": "1.0.2", 239 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", 240 | "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", 241 | "cpu": [ 242 | "x64" 243 | ], 244 | "optional": true, 245 | "os": [ 246 | "linux" 247 | ], 248 | "engines": { 249 | "musl": ">=1.2.2", 250 | "npm": ">=9.6.5", 251 | "pnpm": ">=7.1.0", 252 | "yarn": ">=3.2.0" 253 | }, 254 | "funding": { 255 | "url": "https://opencollective.com/libvips" 256 | } 257 | }, 258 | "node_modules/@img/sharp-linux-arm": { 259 | "version": "0.33.4", 260 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", 261 | "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", 262 | "cpu": [ 263 | "arm" 264 | ], 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "glibc": ">=2.28", 271 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 272 | "npm": ">=9.6.5", 273 | "pnpm": ">=7.1.0", 274 | "yarn": ">=3.2.0" 275 | }, 276 | "funding": { 277 | "url": "https://opencollective.com/libvips" 278 | }, 279 | "optionalDependencies": { 280 | "@img/sharp-libvips-linux-arm": "1.0.2" 281 | } 282 | }, 283 | "node_modules/@img/sharp-linux-arm64": { 284 | "version": "0.33.4", 285 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", 286 | "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", 287 | "cpu": [ 288 | "arm64" 289 | ], 290 | "optional": true, 291 | "os": [ 292 | "linux" 293 | ], 294 | "engines": { 295 | "glibc": ">=2.26", 296 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 297 | "npm": ">=9.6.5", 298 | "pnpm": ">=7.1.0", 299 | "yarn": ">=3.2.0" 300 | }, 301 | "funding": { 302 | "url": "https://opencollective.com/libvips" 303 | }, 304 | "optionalDependencies": { 305 | "@img/sharp-libvips-linux-arm64": "1.0.2" 306 | } 307 | }, 308 | "node_modules/@img/sharp-linux-s390x": { 309 | "version": "0.33.4", 310 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", 311 | "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", 312 | "cpu": [ 313 | "s390x" 314 | ], 315 | "optional": true, 316 | "os": [ 317 | "linux" 318 | ], 319 | "engines": { 320 | "glibc": ">=2.31", 321 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 322 | "npm": ">=9.6.5", 323 | "pnpm": ">=7.1.0", 324 | "yarn": ">=3.2.0" 325 | }, 326 | "funding": { 327 | "url": "https://opencollective.com/libvips" 328 | }, 329 | "optionalDependencies": { 330 | "@img/sharp-libvips-linux-s390x": "1.0.2" 331 | } 332 | }, 333 | "node_modules/@img/sharp-linux-x64": { 334 | "version": "0.33.4", 335 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", 336 | "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", 337 | "cpu": [ 338 | "x64" 339 | ], 340 | "optional": true, 341 | "os": [ 342 | "linux" 343 | ], 344 | "engines": { 345 | "glibc": ">=2.26", 346 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 347 | "npm": ">=9.6.5", 348 | "pnpm": ">=7.1.0", 349 | "yarn": ">=3.2.0" 350 | }, 351 | "funding": { 352 | "url": "https://opencollective.com/libvips" 353 | }, 354 | "optionalDependencies": { 355 | "@img/sharp-libvips-linux-x64": "1.0.2" 356 | } 357 | }, 358 | "node_modules/@img/sharp-linuxmusl-arm64": { 359 | "version": "0.33.4", 360 | "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", 361 | "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", 362 | "cpu": [ 363 | "arm64" 364 | ], 365 | "optional": true, 366 | "os": [ 367 | "linux" 368 | ], 369 | "engines": { 370 | "musl": ">=1.2.2", 371 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 372 | "npm": ">=9.6.5", 373 | "pnpm": ">=7.1.0", 374 | "yarn": ">=3.2.0" 375 | }, 376 | "funding": { 377 | "url": "https://opencollective.com/libvips" 378 | }, 379 | "optionalDependencies": { 380 | "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" 381 | } 382 | }, 383 | "node_modules/@img/sharp-linuxmusl-x64": { 384 | "version": "0.33.4", 385 | "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", 386 | "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", 387 | "cpu": [ 388 | "x64" 389 | ], 390 | "optional": true, 391 | "os": [ 392 | "linux" 393 | ], 394 | "engines": { 395 | "musl": ">=1.2.2", 396 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 397 | "npm": ">=9.6.5", 398 | "pnpm": ">=7.1.0", 399 | "yarn": ">=3.2.0" 400 | }, 401 | "funding": { 402 | "url": "https://opencollective.com/libvips" 403 | }, 404 | "optionalDependencies": { 405 | "@img/sharp-libvips-linuxmusl-x64": "1.0.2" 406 | } 407 | }, 408 | "node_modules/@img/sharp-wasm32": { 409 | "version": "0.33.4", 410 | "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", 411 | "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", 412 | "cpu": [ 413 | "wasm32" 414 | ], 415 | "optional": true, 416 | "dependencies": { 417 | "@emnapi/runtime": "^1.1.1" 418 | }, 419 | "engines": { 420 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 421 | "npm": ">=9.6.5", 422 | "pnpm": ">=7.1.0", 423 | "yarn": ">=3.2.0" 424 | }, 425 | "funding": { 426 | "url": "https://opencollective.com/libvips" 427 | } 428 | }, 429 | "node_modules/@img/sharp-win32-ia32": { 430 | "version": "0.33.4", 431 | "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", 432 | "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", 433 | "cpu": [ 434 | "ia32" 435 | ], 436 | "optional": true, 437 | "os": [ 438 | "win32" 439 | ], 440 | "engines": { 441 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 442 | "npm": ">=9.6.5", 443 | "pnpm": ">=7.1.0", 444 | "yarn": ">=3.2.0" 445 | }, 446 | "funding": { 447 | "url": "https://opencollective.com/libvips" 448 | } 449 | }, 450 | "node_modules/@img/sharp-win32-x64": { 451 | "version": "0.33.4", 452 | "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", 453 | "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", 454 | "cpu": [ 455 | "x64" 456 | ], 457 | "optional": true, 458 | "os": [ 459 | "win32" 460 | ], 461 | "engines": { 462 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0", 463 | "npm": ">=9.6.5", 464 | "pnpm": ">=7.1.0", 465 | "yarn": ">=3.2.0" 466 | }, 467 | "funding": { 468 | "url": "https://opencollective.com/libvips" 469 | } 470 | }, 471 | "node_modules/@javascript-obfuscator/escodegen": { 472 | "version": "2.3.0", 473 | "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", 474 | "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", 475 | "dependencies": { 476 | "@javascript-obfuscator/estraverse": "^5.3.0", 477 | "esprima": "^4.0.1", 478 | "esutils": "^2.0.2", 479 | "optionator": "^0.8.1" 480 | }, 481 | "engines": { 482 | "node": ">=6.0" 483 | }, 484 | "optionalDependencies": { 485 | "source-map": "~0.6.1" 486 | } 487 | }, 488 | "node_modules/@javascript-obfuscator/estraverse": { 489 | "version": "5.4.0", 490 | "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", 491 | "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", 492 | "engines": { 493 | "node": ">=4.0" 494 | } 495 | }, 496 | "node_modules/@protobufjs/aspromise": { 497 | "version": "1.1.2", 498 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 499 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 500 | }, 501 | "node_modules/@protobufjs/base64": { 502 | "version": "1.1.2", 503 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 504 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 505 | }, 506 | "node_modules/@protobufjs/codegen": { 507 | "version": "2.0.4", 508 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 509 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 510 | }, 511 | "node_modules/@protobufjs/eventemitter": { 512 | "version": "1.1.0", 513 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 514 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 515 | }, 516 | "node_modules/@protobufjs/fetch": { 517 | "version": "1.1.0", 518 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 519 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 520 | "dependencies": { 521 | "@protobufjs/aspromise": "^1.1.1", 522 | "@protobufjs/inquire": "^1.1.0" 523 | } 524 | }, 525 | "node_modules/@protobufjs/float": { 526 | "version": "1.0.2", 527 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 528 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 529 | }, 530 | "node_modules/@protobufjs/inquire": { 531 | "version": "1.1.0", 532 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 533 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 534 | }, 535 | "node_modules/@protobufjs/path": { 536 | "version": "1.1.2", 537 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 538 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 539 | }, 540 | "node_modules/@protobufjs/pool": { 541 | "version": "1.1.0", 542 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 543 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 544 | }, 545 | "node_modules/@protobufjs/utf8": { 546 | "version": "1.1.0", 547 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 548 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 549 | }, 550 | "node_modules/@redis/bloom": { 551 | "version": "1.2.0", 552 | "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", 553 | "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", 554 | "peerDependencies": { 555 | "@redis/client": "^1.0.0" 556 | } 557 | }, 558 | "node_modules/@redis/client": { 559 | "version": "1.5.16", 560 | "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.16.tgz", 561 | "integrity": "sha512-X1a3xQ5kEMvTib5fBrHKh6Y+pXbeKXqziYuxOUo1ojQNECg4M5Etd1qqyhMap+lFUOAh8S7UYevgJHOm4A+NOg==", 562 | "dependencies": { 563 | "cluster-key-slot": "1.1.2", 564 | "generic-pool": "3.9.0", 565 | "yallist": "4.0.0" 566 | }, 567 | "engines": { 568 | "node": ">=14" 569 | } 570 | }, 571 | "node_modules/@redis/graph": { 572 | "version": "1.1.1", 573 | "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz", 574 | "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", 575 | "peerDependencies": { 576 | "@redis/client": "^1.0.0" 577 | } 578 | }, 579 | "node_modules/@redis/json": { 580 | "version": "1.0.6", 581 | "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.6.tgz", 582 | "integrity": "sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==", 583 | "peerDependencies": { 584 | "@redis/client": "^1.0.0" 585 | } 586 | }, 587 | "node_modules/@redis/search": { 588 | "version": "1.1.6", 589 | "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.6.tgz", 590 | "integrity": "sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==", 591 | "peerDependencies": { 592 | "@redis/client": "^1.0.0" 593 | } 594 | }, 595 | "node_modules/@redis/time-series": { 596 | "version": "1.0.5", 597 | "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.5.tgz", 598 | "integrity": "sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==", 599 | "peerDependencies": { 600 | "@redis/client": "^1.0.0" 601 | } 602 | }, 603 | "node_modules/@types/long": { 604 | "version": "4.0.2", 605 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", 606 | "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" 607 | }, 608 | "node_modules/@types/node": { 609 | "version": "20.13.0", 610 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.13.0.tgz", 611 | "integrity": "sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==", 612 | "dependencies": { 613 | "undici-types": "~5.26.4" 614 | } 615 | }, 616 | "node_modules/@xenova/transformers": { 617 | "version": "2.17.2", 618 | "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.2.tgz", 619 | "integrity": "sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==", 620 | "dependencies": { 621 | "@huggingface/jinja": "^0.2.2", 622 | "onnxruntime-web": "1.14.0", 623 | "sharp": "^0.32.0" 624 | }, 625 | "optionalDependencies": { 626 | "onnxruntime-node": "1.14.0" 627 | } 628 | }, 629 | "node_modules/@xenova/transformers/node_modules/sharp": { 630 | "version": "0.32.6", 631 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", 632 | "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", 633 | "hasInstallScript": true, 634 | "dependencies": { 635 | "color": "^4.2.3", 636 | "detect-libc": "^2.0.2", 637 | "node-addon-api": "^6.1.0", 638 | "prebuild-install": "^7.1.1", 639 | "semver": "^7.5.4", 640 | "simple-get": "^4.0.1", 641 | "tar-fs": "^3.0.4", 642 | "tunnel-agent": "^0.6.0" 643 | }, 644 | "engines": { 645 | "node": ">=14.15.0" 646 | }, 647 | "funding": { 648 | "url": "https://opencollective.com/libvips" 649 | } 650 | }, 651 | "node_modules/accepts": { 652 | "version": "1.3.8", 653 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 654 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 655 | "dependencies": { 656 | "mime-types": "~2.1.34", 657 | "negotiator": "0.6.3" 658 | }, 659 | "engines": { 660 | "node": ">= 0.6" 661 | } 662 | }, 663 | "node_modules/acorn": { 664 | "version": "8.7.0", 665 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 666 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 667 | "bin": { 668 | "acorn": "bin/acorn" 669 | }, 670 | "engines": { 671 | "node": ">=0.4.0" 672 | } 673 | }, 674 | "node_modules/acorn-loose": { 675 | "version": "8.3.0", 676 | "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.3.0.tgz", 677 | "integrity": "sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==", 678 | "dependencies": { 679 | "acorn": "^8.5.0" 680 | }, 681 | "engines": { 682 | "node": ">=0.4.0" 683 | } 684 | }, 685 | "node_modules/acorn-walk": { 686 | "version": "8.2.0", 687 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 688 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 689 | "engines": { 690 | "node": ">=0.4.0" 691 | } 692 | }, 693 | "node_modules/ansi-regex": { 694 | "version": "5.0.1", 695 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 696 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 697 | "engines": { 698 | "node": ">=8" 699 | } 700 | }, 701 | "node_modules/ansi-styles": { 702 | "version": "4.3.0", 703 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 704 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 705 | "dependencies": { 706 | "color-convert": "^2.0.1" 707 | }, 708 | "engines": { 709 | "node": ">=8" 710 | }, 711 | "funding": { 712 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 713 | } 714 | }, 715 | "node_modules/array-flatten": { 716 | "version": "1.1.1", 717 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 718 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 719 | }, 720 | "node_modules/b4a": { 721 | "version": "1.6.6", 722 | "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", 723 | "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" 724 | }, 725 | "node_modules/bare-events": { 726 | "version": "2.3.1", 727 | "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz", 728 | "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==", 729 | "optional": true 730 | }, 731 | "node_modules/bare-fs": { 732 | "version": "2.3.0", 733 | "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz", 734 | "integrity": "sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==", 735 | "optional": true, 736 | "dependencies": { 737 | "bare-events": "^2.0.0", 738 | "bare-path": "^2.0.0", 739 | "bare-stream": "^1.0.0" 740 | } 741 | }, 742 | "node_modules/bare-os": { 743 | "version": "2.3.0", 744 | "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz", 745 | "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==", 746 | "optional": true 747 | }, 748 | "node_modules/bare-path": { 749 | "version": "2.1.3", 750 | "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", 751 | "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", 752 | "optional": true, 753 | "dependencies": { 754 | "bare-os": "^2.1.0" 755 | } 756 | }, 757 | "node_modules/bare-stream": { 758 | "version": "1.0.0", 759 | "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz", 760 | "integrity": "sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==", 761 | "optional": true, 762 | "dependencies": { 763 | "streamx": "^2.16.1" 764 | } 765 | }, 766 | "node_modules/base64-js": { 767 | "version": "1.5.1", 768 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 769 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 770 | "funding": [ 771 | { 772 | "type": "github", 773 | "url": "https://github.com/sponsors/feross" 774 | }, 775 | { 776 | "type": "patreon", 777 | "url": "https://www.patreon.com/feross" 778 | }, 779 | { 780 | "type": "consulting", 781 | "url": "https://feross.org/support" 782 | } 783 | ] 784 | }, 785 | "node_modules/basic-auth": { 786 | "version": "2.0.1", 787 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 788 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 789 | "dependencies": { 790 | "safe-buffer": "5.1.2" 791 | }, 792 | "engines": { 793 | "node": ">= 0.8" 794 | } 795 | }, 796 | "node_modules/basic-auth/node_modules/safe-buffer": { 797 | "version": "5.1.2", 798 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 799 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 800 | }, 801 | "node_modules/bl": { 802 | "version": "4.1.0", 803 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 804 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 805 | "dependencies": { 806 | "buffer": "^5.5.0", 807 | "inherits": "^2.0.4", 808 | "readable-stream": "^3.4.0" 809 | } 810 | }, 811 | "node_modules/body-parser": { 812 | "version": "1.20.2", 813 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 814 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 815 | "dependencies": { 816 | "bytes": "3.1.2", 817 | "content-type": "~1.0.5", 818 | "debug": "2.6.9", 819 | "depd": "2.0.0", 820 | "destroy": "1.2.0", 821 | "http-errors": "2.0.0", 822 | "iconv-lite": "0.4.24", 823 | "on-finished": "2.4.1", 824 | "qs": "6.11.0", 825 | "raw-body": "2.5.2", 826 | "type-is": "~1.6.18", 827 | "unpipe": "1.0.0" 828 | }, 829 | "engines": { 830 | "node": ">= 0.8", 831 | "npm": "1.2.8000 || >= 1.4.16" 832 | } 833 | }, 834 | "node_modules/buffer": { 835 | "version": "5.7.1", 836 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 837 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 838 | "funding": [ 839 | { 840 | "type": "github", 841 | "url": "https://github.com/sponsors/feross" 842 | }, 843 | { 844 | "type": "patreon", 845 | "url": "https://www.patreon.com/feross" 846 | }, 847 | { 848 | "type": "consulting", 849 | "url": "https://feross.org/support" 850 | } 851 | ], 852 | "dependencies": { 853 | "base64-js": "^1.3.1", 854 | "ieee754": "^1.1.13" 855 | } 856 | }, 857 | "node_modules/bytes": { 858 | "version": "3.1.2", 859 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 860 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 861 | "engines": { 862 | "node": ">= 0.8" 863 | } 864 | }, 865 | "node_modules/call-bind": { 866 | "version": "1.0.7", 867 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 868 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 869 | "dependencies": { 870 | "es-define-property": "^1.0.0", 871 | "es-errors": "^1.3.0", 872 | "function-bind": "^1.1.2", 873 | "get-intrinsic": "^1.2.4", 874 | "set-function-length": "^1.2.1" 875 | }, 876 | "engines": { 877 | "node": ">= 0.4" 878 | }, 879 | "funding": { 880 | "url": "https://github.com/sponsors/ljharb" 881 | } 882 | }, 883 | "node_modules/chownr": { 884 | "version": "1.1.4", 885 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 886 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 887 | }, 888 | "node_modules/cliui": { 889 | "version": "7.0.4", 890 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 891 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 892 | "dependencies": { 893 | "string-width": "^4.2.0", 894 | "strip-ansi": "^6.0.0", 895 | "wrap-ansi": "^7.0.0" 896 | } 897 | }, 898 | "node_modules/cluster-key-slot": { 899 | "version": "1.1.2", 900 | "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", 901 | "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", 902 | "engines": { 903 | "node": ">=0.10.0" 904 | } 905 | }, 906 | "node_modules/color": { 907 | "version": "4.2.3", 908 | "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", 909 | "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 910 | "dependencies": { 911 | "color-convert": "^2.0.1", 912 | "color-string": "^1.9.0" 913 | }, 914 | "engines": { 915 | "node": ">=12.5.0" 916 | } 917 | }, 918 | "node_modules/color-convert": { 919 | "version": "2.0.1", 920 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 921 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 922 | "dependencies": { 923 | "color-name": "~1.1.4" 924 | }, 925 | "engines": { 926 | "node": ">=7.0.0" 927 | } 928 | }, 929 | "node_modules/color-name": { 930 | "version": "1.1.4", 931 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 932 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 933 | }, 934 | "node_modules/color-string": { 935 | "version": "1.9.1", 936 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 937 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 938 | "dependencies": { 939 | "color-name": "^1.0.0", 940 | "simple-swizzle": "^0.2.2" 941 | } 942 | }, 943 | "node_modules/content-disposition": { 944 | "version": "0.5.4", 945 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 946 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 947 | "dependencies": { 948 | "safe-buffer": "5.2.1" 949 | }, 950 | "engines": { 951 | "node": ">= 0.6" 952 | } 953 | }, 954 | "node_modules/content-type": { 955 | "version": "1.0.5", 956 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 957 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 958 | "engines": { 959 | "node": ">= 0.6" 960 | } 961 | }, 962 | "node_modules/cookie": { 963 | "version": "0.6.0", 964 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 965 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 966 | "engines": { 967 | "node": ">= 0.6" 968 | } 969 | }, 970 | "node_modules/cookie-signature": { 971 | "version": "1.0.6", 972 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 973 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 974 | }, 975 | "node_modules/data-uri-to-buffer": { 976 | "version": "4.0.1", 977 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 978 | "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", 979 | "engines": { 980 | "node": ">= 12" 981 | } 982 | }, 983 | "node_modules/debug": { 984 | "version": "2.6.9", 985 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 986 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 987 | "dependencies": { 988 | "ms": "2.0.0" 989 | } 990 | }, 991 | "node_modules/decompress-response": { 992 | "version": "6.0.0", 993 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 994 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 995 | "dependencies": { 996 | "mimic-response": "^3.1.0" 997 | }, 998 | "engines": { 999 | "node": ">=10" 1000 | }, 1001 | "funding": { 1002 | "url": "https://github.com/sponsors/sindresorhus" 1003 | } 1004 | }, 1005 | "node_modules/deep-extend": { 1006 | "version": "0.6.0", 1007 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1008 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1009 | "engines": { 1010 | "node": ">=4.0.0" 1011 | } 1012 | }, 1013 | "node_modules/deep-is": { 1014 | "version": "0.1.4", 1015 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1016 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" 1017 | }, 1018 | "node_modules/define-data-property": { 1019 | "version": "1.1.4", 1020 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 1021 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 1022 | "dependencies": { 1023 | "es-define-property": "^1.0.0", 1024 | "es-errors": "^1.3.0", 1025 | "gopd": "^1.0.1" 1026 | }, 1027 | "engines": { 1028 | "node": ">= 0.4" 1029 | }, 1030 | "funding": { 1031 | "url": "https://github.com/sponsors/ljharb" 1032 | } 1033 | }, 1034 | "node_modules/deobfuscator": { 1035 | "version": "2.4.5", 1036 | "resolved": "https://registry.npmjs.org/deobfuscator/-/deobfuscator-2.4.5.tgz", 1037 | "integrity": "sha512-sNr1O0dIL+aW5jp2kPTndbCQAih7MFaFMsVtUK+sV/R/8/isFq4upVYPOzN/TRtTHyJiHJAH4dxhFGawhTK2GQ==", 1038 | "dependencies": { 1039 | "@javascript-obfuscator/escodegen": "2.3.0", 1040 | "acorn": "8.7.0", 1041 | "acorn-loose": "8.3.0", 1042 | "acorn-walk": "8.2.0", 1043 | "eslint-scope": "7.1.1", 1044 | "mersenne-twister": "1.1.0", 1045 | "yargs": "17.3.1" 1046 | }, 1047 | "bin": { 1048 | "synchrony": "dist/cli.js" 1049 | } 1050 | }, 1051 | "node_modules/depd": { 1052 | "version": "2.0.0", 1053 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1054 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 1055 | "engines": { 1056 | "node": ">= 0.8" 1057 | } 1058 | }, 1059 | "node_modules/destroy": { 1060 | "version": "1.2.0", 1061 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1062 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 1063 | "engines": { 1064 | "node": ">= 0.8", 1065 | "npm": "1.2.8000 || >= 1.4.16" 1066 | } 1067 | }, 1068 | "node_modules/detect-libc": { 1069 | "version": "2.0.3", 1070 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 1071 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 1072 | "engines": { 1073 | "node": ">=8" 1074 | } 1075 | }, 1076 | "node_modules/dotenv": { 1077 | "version": "16.4.5", 1078 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", 1079 | "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", 1080 | "engines": { 1081 | "node": ">=12" 1082 | }, 1083 | "funding": { 1084 | "url": "https://dotenvx.com" 1085 | } 1086 | }, 1087 | "node_modules/ee-first": { 1088 | "version": "1.1.1", 1089 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1090 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 1091 | }, 1092 | "node_modules/emoji-regex": { 1093 | "version": "8.0.0", 1094 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1095 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1096 | }, 1097 | "node_modules/encodeurl": { 1098 | "version": "1.0.2", 1099 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1100 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 1101 | "engines": { 1102 | "node": ">= 0.8" 1103 | } 1104 | }, 1105 | "node_modules/end-of-stream": { 1106 | "version": "1.4.4", 1107 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1108 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1109 | "dependencies": { 1110 | "once": "^1.4.0" 1111 | } 1112 | }, 1113 | "node_modules/es-define-property": { 1114 | "version": "1.0.0", 1115 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 1116 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 1117 | "dependencies": { 1118 | "get-intrinsic": "^1.2.4" 1119 | }, 1120 | "engines": { 1121 | "node": ">= 0.4" 1122 | } 1123 | }, 1124 | "node_modules/es-errors": { 1125 | "version": "1.3.0", 1126 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1127 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1128 | "engines": { 1129 | "node": ">= 0.4" 1130 | } 1131 | }, 1132 | "node_modules/escalade": { 1133 | "version": "3.1.2", 1134 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 1135 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 1136 | "engines": { 1137 | "node": ">=6" 1138 | } 1139 | }, 1140 | "node_modules/escape-html": { 1141 | "version": "1.0.3", 1142 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1143 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 1144 | }, 1145 | "node_modules/eslint-scope": { 1146 | "version": "7.1.1", 1147 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 1148 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 1149 | "dependencies": { 1150 | "esrecurse": "^4.3.0", 1151 | "estraverse": "^5.2.0" 1152 | }, 1153 | "engines": { 1154 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1155 | } 1156 | }, 1157 | "node_modules/esprima": { 1158 | "version": "4.0.1", 1159 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1160 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1161 | "bin": { 1162 | "esparse": "bin/esparse.js", 1163 | "esvalidate": "bin/esvalidate.js" 1164 | }, 1165 | "engines": { 1166 | "node": ">=4" 1167 | } 1168 | }, 1169 | "node_modules/esrecurse": { 1170 | "version": "4.3.0", 1171 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1172 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1173 | "dependencies": { 1174 | "estraverse": "^5.2.0" 1175 | }, 1176 | "engines": { 1177 | "node": ">=4.0" 1178 | } 1179 | }, 1180 | "node_modules/estraverse": { 1181 | "version": "5.3.0", 1182 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1183 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1184 | "engines": { 1185 | "node": ">=4.0" 1186 | } 1187 | }, 1188 | "node_modules/esutils": { 1189 | "version": "2.0.3", 1190 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1191 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1192 | "engines": { 1193 | "node": ">=0.10.0" 1194 | } 1195 | }, 1196 | "node_modules/etag": { 1197 | "version": "1.8.1", 1198 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1199 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 1200 | "engines": { 1201 | "node": ">= 0.6" 1202 | } 1203 | }, 1204 | "node_modules/expand-template": { 1205 | "version": "2.0.3", 1206 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 1207 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 1208 | "engines": { 1209 | "node": ">=6" 1210 | } 1211 | }, 1212 | "node_modules/express": { 1213 | "version": "4.19.2", 1214 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", 1215 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", 1216 | "dependencies": { 1217 | "accepts": "~1.3.8", 1218 | "array-flatten": "1.1.1", 1219 | "body-parser": "1.20.2", 1220 | "content-disposition": "0.5.4", 1221 | "content-type": "~1.0.4", 1222 | "cookie": "0.6.0", 1223 | "cookie-signature": "1.0.6", 1224 | "debug": "2.6.9", 1225 | "depd": "2.0.0", 1226 | "encodeurl": "~1.0.2", 1227 | "escape-html": "~1.0.3", 1228 | "etag": "~1.8.1", 1229 | "finalhandler": "1.2.0", 1230 | "fresh": "0.5.2", 1231 | "http-errors": "2.0.0", 1232 | "merge-descriptors": "1.0.1", 1233 | "methods": "~1.1.2", 1234 | "on-finished": "2.4.1", 1235 | "parseurl": "~1.3.3", 1236 | "path-to-regexp": "0.1.7", 1237 | "proxy-addr": "~2.0.7", 1238 | "qs": "6.11.0", 1239 | "range-parser": "~1.2.1", 1240 | "safe-buffer": "5.2.1", 1241 | "send": "0.18.0", 1242 | "serve-static": "1.15.0", 1243 | "setprototypeof": "1.2.0", 1244 | "statuses": "2.0.1", 1245 | "type-is": "~1.6.18", 1246 | "utils-merge": "1.0.1", 1247 | "vary": "~1.1.2" 1248 | }, 1249 | "engines": { 1250 | "node": ">= 0.10.0" 1251 | } 1252 | }, 1253 | "node_modules/fast-fifo": { 1254 | "version": "1.3.2", 1255 | "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", 1256 | "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" 1257 | }, 1258 | "node_modules/fast-levenshtein": { 1259 | "version": "2.0.6", 1260 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1261 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" 1262 | }, 1263 | "node_modules/fetch-blob": { 1264 | "version": "3.2.0", 1265 | "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 1266 | "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 1267 | "funding": [ 1268 | { 1269 | "type": "github", 1270 | "url": "https://github.com/sponsors/jimmywarting" 1271 | }, 1272 | { 1273 | "type": "paypal", 1274 | "url": "https://paypal.me/jimmywarting" 1275 | } 1276 | ], 1277 | "dependencies": { 1278 | "node-domexception": "^1.0.0", 1279 | "web-streams-polyfill": "^3.0.3" 1280 | }, 1281 | "engines": { 1282 | "node": "^12.20 || >= 14.13" 1283 | } 1284 | }, 1285 | "node_modules/finalhandler": { 1286 | "version": "1.2.0", 1287 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 1288 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 1289 | "dependencies": { 1290 | "debug": "2.6.9", 1291 | "encodeurl": "~1.0.2", 1292 | "escape-html": "~1.0.3", 1293 | "on-finished": "2.4.1", 1294 | "parseurl": "~1.3.3", 1295 | "statuses": "2.0.1", 1296 | "unpipe": "~1.0.0" 1297 | }, 1298 | "engines": { 1299 | "node": ">= 0.8" 1300 | } 1301 | }, 1302 | "node_modules/flatbuffers": { 1303 | "version": "1.12.0", 1304 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", 1305 | "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" 1306 | }, 1307 | "node_modules/formdata-polyfill": { 1308 | "version": "4.0.10", 1309 | "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 1310 | "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 1311 | "dependencies": { 1312 | "fetch-blob": "^3.1.2" 1313 | }, 1314 | "engines": { 1315 | "node": ">=12.20.0" 1316 | } 1317 | }, 1318 | "node_modules/forwarded": { 1319 | "version": "0.2.0", 1320 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1321 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1322 | "engines": { 1323 | "node": ">= 0.6" 1324 | } 1325 | }, 1326 | "node_modules/fresh": { 1327 | "version": "0.5.2", 1328 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1329 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 1330 | "engines": { 1331 | "node": ">= 0.6" 1332 | } 1333 | }, 1334 | "node_modules/fs-constants": { 1335 | "version": "1.0.0", 1336 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 1337 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 1338 | }, 1339 | "node_modules/function-bind": { 1340 | "version": "1.1.2", 1341 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1342 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1343 | "funding": { 1344 | "url": "https://github.com/sponsors/ljharb" 1345 | } 1346 | }, 1347 | "node_modules/generic-pool": { 1348 | "version": "3.9.0", 1349 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", 1350 | "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", 1351 | "engines": { 1352 | "node": ">= 4" 1353 | } 1354 | }, 1355 | "node_modules/get-caller-file": { 1356 | "version": "2.0.5", 1357 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1358 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1359 | "engines": { 1360 | "node": "6.* || 8.* || >= 10.*" 1361 | } 1362 | }, 1363 | "node_modules/get-intrinsic": { 1364 | "version": "1.2.4", 1365 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 1366 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 1367 | "dependencies": { 1368 | "es-errors": "^1.3.0", 1369 | "function-bind": "^1.1.2", 1370 | "has-proto": "^1.0.1", 1371 | "has-symbols": "^1.0.3", 1372 | "hasown": "^2.0.0" 1373 | }, 1374 | "engines": { 1375 | "node": ">= 0.4" 1376 | }, 1377 | "funding": { 1378 | "url": "https://github.com/sponsors/ljharb" 1379 | } 1380 | }, 1381 | "node_modules/github-from-package": { 1382 | "version": "0.0.0", 1383 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 1384 | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" 1385 | }, 1386 | "node_modules/gopd": { 1387 | "version": "1.0.1", 1388 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1389 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1390 | "dependencies": { 1391 | "get-intrinsic": "^1.1.3" 1392 | }, 1393 | "funding": { 1394 | "url": "https://github.com/sponsors/ljharb" 1395 | } 1396 | }, 1397 | "node_modules/guid-typescript": { 1398 | "version": "1.0.9", 1399 | "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", 1400 | "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" 1401 | }, 1402 | "node_modules/has-property-descriptors": { 1403 | "version": "1.0.2", 1404 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 1405 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 1406 | "dependencies": { 1407 | "es-define-property": "^1.0.0" 1408 | }, 1409 | "funding": { 1410 | "url": "https://github.com/sponsors/ljharb" 1411 | } 1412 | }, 1413 | "node_modules/has-proto": { 1414 | "version": "1.0.3", 1415 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 1416 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 1417 | "engines": { 1418 | "node": ">= 0.4" 1419 | }, 1420 | "funding": { 1421 | "url": "https://github.com/sponsors/ljharb" 1422 | } 1423 | }, 1424 | "node_modules/has-symbols": { 1425 | "version": "1.0.3", 1426 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1427 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1428 | "engines": { 1429 | "node": ">= 0.4" 1430 | }, 1431 | "funding": { 1432 | "url": "https://github.com/sponsors/ljharb" 1433 | } 1434 | }, 1435 | "node_modules/hasown": { 1436 | "version": "2.0.2", 1437 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1438 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1439 | "dependencies": { 1440 | "function-bind": "^1.1.2" 1441 | }, 1442 | "engines": { 1443 | "node": ">= 0.4" 1444 | } 1445 | }, 1446 | "node_modules/http-errors": { 1447 | "version": "2.0.0", 1448 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1449 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1450 | "dependencies": { 1451 | "depd": "2.0.0", 1452 | "inherits": "2.0.4", 1453 | "setprototypeof": "1.2.0", 1454 | "statuses": "2.0.1", 1455 | "toidentifier": "1.0.1" 1456 | }, 1457 | "engines": { 1458 | "node": ">= 0.8" 1459 | } 1460 | }, 1461 | "node_modules/iconv-lite": { 1462 | "version": "0.4.24", 1463 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1464 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1465 | "dependencies": { 1466 | "safer-buffer": ">= 2.1.2 < 3" 1467 | }, 1468 | "engines": { 1469 | "node": ">=0.10.0" 1470 | } 1471 | }, 1472 | "node_modules/ieee754": { 1473 | "version": "1.2.1", 1474 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1475 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1476 | "funding": [ 1477 | { 1478 | "type": "github", 1479 | "url": "https://github.com/sponsors/feross" 1480 | }, 1481 | { 1482 | "type": "patreon", 1483 | "url": "https://www.patreon.com/feross" 1484 | }, 1485 | { 1486 | "type": "consulting", 1487 | "url": "https://feross.org/support" 1488 | } 1489 | ] 1490 | }, 1491 | "node_modules/inherits": { 1492 | "version": "2.0.4", 1493 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1494 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1495 | }, 1496 | "node_modules/ini": { 1497 | "version": "1.3.8", 1498 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1499 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 1500 | }, 1501 | "node_modules/ipaddr.js": { 1502 | "version": "1.9.1", 1503 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1504 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1505 | "engines": { 1506 | "node": ">= 0.10" 1507 | } 1508 | }, 1509 | "node_modules/is-arrayish": { 1510 | "version": "0.3.2", 1511 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1512 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 1513 | }, 1514 | "node_modules/is-fullwidth-code-point": { 1515 | "version": "3.0.0", 1516 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1517 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1518 | "engines": { 1519 | "node": ">=8" 1520 | } 1521 | }, 1522 | "node_modules/levn": { 1523 | "version": "0.3.0", 1524 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1525 | "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", 1526 | "dependencies": { 1527 | "prelude-ls": "~1.1.2", 1528 | "type-check": "~0.3.2" 1529 | }, 1530 | "engines": { 1531 | "node": ">= 0.8.0" 1532 | } 1533 | }, 1534 | "node_modules/long": { 1535 | "version": "4.0.0", 1536 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1537 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1538 | }, 1539 | "node_modules/media-typer": { 1540 | "version": "0.3.0", 1541 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1542 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1543 | "engines": { 1544 | "node": ">= 0.6" 1545 | } 1546 | }, 1547 | "node_modules/merge-descriptors": { 1548 | "version": "1.0.1", 1549 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1550 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1551 | }, 1552 | "node_modules/mersenne-twister": { 1553 | "version": "1.1.0", 1554 | "resolved": "https://registry.npmjs.org/mersenne-twister/-/mersenne-twister-1.1.0.tgz", 1555 | "integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==" 1556 | }, 1557 | "node_modules/methods": { 1558 | "version": "1.1.2", 1559 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1560 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1561 | "engines": { 1562 | "node": ">= 0.6" 1563 | } 1564 | }, 1565 | "node_modules/mime": { 1566 | "version": "1.6.0", 1567 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1568 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1569 | "bin": { 1570 | "mime": "cli.js" 1571 | }, 1572 | "engines": { 1573 | "node": ">=4" 1574 | } 1575 | }, 1576 | "node_modules/mime-db": { 1577 | "version": "1.52.0", 1578 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1579 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1580 | "engines": { 1581 | "node": ">= 0.6" 1582 | } 1583 | }, 1584 | "node_modules/mime-types": { 1585 | "version": "2.1.35", 1586 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1587 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1588 | "dependencies": { 1589 | "mime-db": "1.52.0" 1590 | }, 1591 | "engines": { 1592 | "node": ">= 0.6" 1593 | } 1594 | }, 1595 | "node_modules/mimic-response": { 1596 | "version": "3.1.0", 1597 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 1598 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 1599 | "engines": { 1600 | "node": ">=10" 1601 | }, 1602 | "funding": { 1603 | "url": "https://github.com/sponsors/sindresorhus" 1604 | } 1605 | }, 1606 | "node_modules/minimist": { 1607 | "version": "1.2.8", 1608 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1609 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1610 | "funding": { 1611 | "url": "https://github.com/sponsors/ljharb" 1612 | } 1613 | }, 1614 | "node_modules/mkdirp-classic": { 1615 | "version": "0.5.3", 1616 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 1617 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 1618 | }, 1619 | "node_modules/morgan": { 1620 | "version": "1.10.0", 1621 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", 1622 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", 1623 | "dependencies": { 1624 | "basic-auth": "~2.0.1", 1625 | "debug": "2.6.9", 1626 | "depd": "~2.0.0", 1627 | "on-finished": "~2.3.0", 1628 | "on-headers": "~1.0.2" 1629 | }, 1630 | "engines": { 1631 | "node": ">= 0.8.0" 1632 | } 1633 | }, 1634 | "node_modules/morgan/node_modules/on-finished": { 1635 | "version": "2.3.0", 1636 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1637 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", 1638 | "dependencies": { 1639 | "ee-first": "1.1.1" 1640 | }, 1641 | "engines": { 1642 | "node": ">= 0.8" 1643 | } 1644 | }, 1645 | "node_modules/ms": { 1646 | "version": "2.0.0", 1647 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1648 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1649 | }, 1650 | "node_modules/napi-build-utils": { 1651 | "version": "1.0.2", 1652 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 1653 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" 1654 | }, 1655 | "node_modules/negotiator": { 1656 | "version": "0.6.3", 1657 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1658 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1659 | "engines": { 1660 | "node": ">= 0.6" 1661 | } 1662 | }, 1663 | "node_modules/node-abi": { 1664 | "version": "3.63.0", 1665 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.63.0.tgz", 1666 | "integrity": "sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==", 1667 | "dependencies": { 1668 | "semver": "^7.3.5" 1669 | }, 1670 | "engines": { 1671 | "node": ">=10" 1672 | } 1673 | }, 1674 | "node_modules/node-addon-api": { 1675 | "version": "6.1.0", 1676 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", 1677 | "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" 1678 | }, 1679 | "node_modules/node-domexception": { 1680 | "version": "1.0.0", 1681 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 1682 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 1683 | "funding": [ 1684 | { 1685 | "type": "github", 1686 | "url": "https://github.com/sponsors/jimmywarting" 1687 | }, 1688 | { 1689 | "type": "github", 1690 | "url": "https://paypal.me/jimmywarting" 1691 | } 1692 | ], 1693 | "engines": { 1694 | "node": ">=10.5.0" 1695 | } 1696 | }, 1697 | "node_modules/node-fetch": { 1698 | "version": "3.3.2", 1699 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", 1700 | "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", 1701 | "dependencies": { 1702 | "data-uri-to-buffer": "^4.0.0", 1703 | "fetch-blob": "^3.1.4", 1704 | "formdata-polyfill": "^4.0.10" 1705 | }, 1706 | "engines": { 1707 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1708 | }, 1709 | "funding": { 1710 | "type": "opencollective", 1711 | "url": "https://opencollective.com/node-fetch" 1712 | } 1713 | }, 1714 | "node_modules/object-inspect": { 1715 | "version": "1.13.1", 1716 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 1717 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", 1718 | "funding": { 1719 | "url": "https://github.com/sponsors/ljharb" 1720 | } 1721 | }, 1722 | "node_modules/on-finished": { 1723 | "version": "2.4.1", 1724 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1725 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1726 | "dependencies": { 1727 | "ee-first": "1.1.1" 1728 | }, 1729 | "engines": { 1730 | "node": ">= 0.8" 1731 | } 1732 | }, 1733 | "node_modules/on-headers": { 1734 | "version": "1.0.2", 1735 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1736 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 1737 | "engines": { 1738 | "node": ">= 0.8" 1739 | } 1740 | }, 1741 | "node_modules/once": { 1742 | "version": "1.4.0", 1743 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1744 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1745 | "dependencies": { 1746 | "wrappy": "1" 1747 | } 1748 | }, 1749 | "node_modules/onnx-proto": { 1750 | "version": "4.0.4", 1751 | "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", 1752 | "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", 1753 | "dependencies": { 1754 | "protobufjs": "^6.8.8" 1755 | } 1756 | }, 1757 | "node_modules/onnxruntime-common": { 1758 | "version": "1.14.0", 1759 | "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", 1760 | "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==" 1761 | }, 1762 | "node_modules/onnxruntime-node": { 1763 | "version": "1.14.0", 1764 | "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", 1765 | "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", 1766 | "optional": true, 1767 | "os": [ 1768 | "win32", 1769 | "darwin", 1770 | "linux" 1771 | ], 1772 | "dependencies": { 1773 | "onnxruntime-common": "~1.14.0" 1774 | } 1775 | }, 1776 | "node_modules/onnxruntime-web": { 1777 | "version": "1.14.0", 1778 | "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", 1779 | "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", 1780 | "dependencies": { 1781 | "flatbuffers": "^1.12.0", 1782 | "guid-typescript": "^1.0.9", 1783 | "long": "^4.0.0", 1784 | "onnx-proto": "^4.0.4", 1785 | "onnxruntime-common": "~1.14.0", 1786 | "platform": "^1.3.6" 1787 | } 1788 | }, 1789 | "node_modules/optionator": { 1790 | "version": "0.8.3", 1791 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1792 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1793 | "dependencies": { 1794 | "deep-is": "~0.1.3", 1795 | "fast-levenshtein": "~2.0.6", 1796 | "levn": "~0.3.0", 1797 | "prelude-ls": "~1.1.2", 1798 | "type-check": "~0.3.2", 1799 | "word-wrap": "~1.2.3" 1800 | }, 1801 | "engines": { 1802 | "node": ">= 0.8.0" 1803 | } 1804 | }, 1805 | "node_modules/parseurl": { 1806 | "version": "1.3.3", 1807 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1808 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1809 | "engines": { 1810 | "node": ">= 0.8" 1811 | } 1812 | }, 1813 | "node_modules/path-to-regexp": { 1814 | "version": "0.1.7", 1815 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1816 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1817 | }, 1818 | "node_modules/platform": { 1819 | "version": "1.3.6", 1820 | "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", 1821 | "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" 1822 | }, 1823 | "node_modules/prebuild-install": { 1824 | "version": "7.1.2", 1825 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", 1826 | "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", 1827 | "dependencies": { 1828 | "detect-libc": "^2.0.0", 1829 | "expand-template": "^2.0.3", 1830 | "github-from-package": "0.0.0", 1831 | "minimist": "^1.2.3", 1832 | "mkdirp-classic": "^0.5.3", 1833 | "napi-build-utils": "^1.0.1", 1834 | "node-abi": "^3.3.0", 1835 | "pump": "^3.0.0", 1836 | "rc": "^1.2.7", 1837 | "simple-get": "^4.0.0", 1838 | "tar-fs": "^2.0.0", 1839 | "tunnel-agent": "^0.6.0" 1840 | }, 1841 | "bin": { 1842 | "prebuild-install": "bin.js" 1843 | }, 1844 | "engines": { 1845 | "node": ">=10" 1846 | } 1847 | }, 1848 | "node_modules/prebuild-install/node_modules/tar-fs": { 1849 | "version": "2.1.1", 1850 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 1851 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 1852 | "dependencies": { 1853 | "chownr": "^1.1.1", 1854 | "mkdirp-classic": "^0.5.2", 1855 | "pump": "^3.0.0", 1856 | "tar-stream": "^2.1.4" 1857 | } 1858 | }, 1859 | "node_modules/prebuild-install/node_modules/tar-stream": { 1860 | "version": "2.2.0", 1861 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1862 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1863 | "dependencies": { 1864 | "bl": "^4.0.3", 1865 | "end-of-stream": "^1.4.1", 1866 | "fs-constants": "^1.0.0", 1867 | "inherits": "^2.0.3", 1868 | "readable-stream": "^3.1.1" 1869 | }, 1870 | "engines": { 1871 | "node": ">=6" 1872 | } 1873 | }, 1874 | "node_modules/prelude-ls": { 1875 | "version": "1.1.2", 1876 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1877 | "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", 1878 | "engines": { 1879 | "node": ">= 0.8.0" 1880 | } 1881 | }, 1882 | "node_modules/protobufjs": { 1883 | "version": "6.11.4", 1884 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", 1885 | "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", 1886 | "hasInstallScript": true, 1887 | "dependencies": { 1888 | "@protobufjs/aspromise": "^1.1.2", 1889 | "@protobufjs/base64": "^1.1.2", 1890 | "@protobufjs/codegen": "^2.0.4", 1891 | "@protobufjs/eventemitter": "^1.1.0", 1892 | "@protobufjs/fetch": "^1.1.0", 1893 | "@protobufjs/float": "^1.0.2", 1894 | "@protobufjs/inquire": "^1.1.0", 1895 | "@protobufjs/path": "^1.1.2", 1896 | "@protobufjs/pool": "^1.1.0", 1897 | "@protobufjs/utf8": "^1.1.0", 1898 | "@types/long": "^4.0.1", 1899 | "@types/node": ">=13.7.0", 1900 | "long": "^4.0.0" 1901 | }, 1902 | "bin": { 1903 | "pbjs": "bin/pbjs", 1904 | "pbts": "bin/pbts" 1905 | } 1906 | }, 1907 | "node_modules/proxy-addr": { 1908 | "version": "2.0.7", 1909 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1910 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1911 | "dependencies": { 1912 | "forwarded": "0.2.0", 1913 | "ipaddr.js": "1.9.1" 1914 | }, 1915 | "engines": { 1916 | "node": ">= 0.10" 1917 | } 1918 | }, 1919 | "node_modules/pump": { 1920 | "version": "3.0.0", 1921 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1922 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1923 | "dependencies": { 1924 | "end-of-stream": "^1.1.0", 1925 | "once": "^1.3.1" 1926 | } 1927 | }, 1928 | "node_modules/qs": { 1929 | "version": "6.11.0", 1930 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1931 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1932 | "dependencies": { 1933 | "side-channel": "^1.0.4" 1934 | }, 1935 | "engines": { 1936 | "node": ">=0.6" 1937 | }, 1938 | "funding": { 1939 | "url": "https://github.com/sponsors/ljharb" 1940 | } 1941 | }, 1942 | "node_modules/queue-tick": { 1943 | "version": "1.0.1", 1944 | "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", 1945 | "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" 1946 | }, 1947 | "node_modules/range-parser": { 1948 | "version": "1.2.1", 1949 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1950 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1951 | "engines": { 1952 | "node": ">= 0.6" 1953 | } 1954 | }, 1955 | "node_modules/raw-body": { 1956 | "version": "2.5.2", 1957 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 1958 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 1959 | "dependencies": { 1960 | "bytes": "3.1.2", 1961 | "http-errors": "2.0.0", 1962 | "iconv-lite": "0.4.24", 1963 | "unpipe": "1.0.0" 1964 | }, 1965 | "engines": { 1966 | "node": ">= 0.8" 1967 | } 1968 | }, 1969 | "node_modules/rc": { 1970 | "version": "1.2.8", 1971 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1972 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1973 | "dependencies": { 1974 | "deep-extend": "^0.6.0", 1975 | "ini": "~1.3.0", 1976 | "minimist": "^1.2.0", 1977 | "strip-json-comments": "~2.0.1" 1978 | }, 1979 | "bin": { 1980 | "rc": "cli.js" 1981 | } 1982 | }, 1983 | "node_modules/readable-stream": { 1984 | "version": "3.6.2", 1985 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1986 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1987 | "dependencies": { 1988 | "inherits": "^2.0.3", 1989 | "string_decoder": "^1.1.1", 1990 | "util-deprecate": "^1.0.1" 1991 | }, 1992 | "engines": { 1993 | "node": ">= 6" 1994 | } 1995 | }, 1996 | "node_modules/redis": { 1997 | "version": "4.6.14", 1998 | "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.14.tgz", 1999 | "integrity": "sha512-GrNg/e33HtsQwNXL7kJT+iNFPSwE1IPmd7wzV3j4f2z0EYxZfZE7FVTmUysgAtqQQtg5NXF5SNLR9OdO/UHOfw==", 2000 | "workspaces": [ 2001 | "./packages/*" 2002 | ], 2003 | "dependencies": { 2004 | "@redis/bloom": "1.2.0", 2005 | "@redis/client": "1.5.16", 2006 | "@redis/graph": "1.1.1", 2007 | "@redis/json": "1.0.6", 2008 | "@redis/search": "1.1.6", 2009 | "@redis/time-series": "1.0.5" 2010 | } 2011 | }, 2012 | "node_modules/require-directory": { 2013 | "version": "2.1.1", 2014 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2015 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2016 | "engines": { 2017 | "node": ">=0.10.0" 2018 | } 2019 | }, 2020 | "node_modules/safe-buffer": { 2021 | "version": "5.2.1", 2022 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2023 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2024 | "funding": [ 2025 | { 2026 | "type": "github", 2027 | "url": "https://github.com/sponsors/feross" 2028 | }, 2029 | { 2030 | "type": "patreon", 2031 | "url": "https://www.patreon.com/feross" 2032 | }, 2033 | { 2034 | "type": "consulting", 2035 | "url": "https://feross.org/support" 2036 | } 2037 | ] 2038 | }, 2039 | "node_modules/safer-buffer": { 2040 | "version": "2.1.2", 2041 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2042 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2043 | }, 2044 | "node_modules/semver": { 2045 | "version": "7.6.2", 2046 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", 2047 | "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", 2048 | "bin": { 2049 | "semver": "bin/semver.js" 2050 | }, 2051 | "engines": { 2052 | "node": ">=10" 2053 | } 2054 | }, 2055 | "node_modules/send": { 2056 | "version": "0.18.0", 2057 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 2058 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 2059 | "dependencies": { 2060 | "debug": "2.6.9", 2061 | "depd": "2.0.0", 2062 | "destroy": "1.2.0", 2063 | "encodeurl": "~1.0.2", 2064 | "escape-html": "~1.0.3", 2065 | "etag": "~1.8.1", 2066 | "fresh": "0.5.2", 2067 | "http-errors": "2.0.0", 2068 | "mime": "1.6.0", 2069 | "ms": "2.1.3", 2070 | "on-finished": "2.4.1", 2071 | "range-parser": "~1.2.1", 2072 | "statuses": "2.0.1" 2073 | }, 2074 | "engines": { 2075 | "node": ">= 0.8.0" 2076 | } 2077 | }, 2078 | "node_modules/send/node_modules/ms": { 2079 | "version": "2.1.3", 2080 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2081 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2082 | }, 2083 | "node_modules/serve-static": { 2084 | "version": "1.15.0", 2085 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 2086 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 2087 | "dependencies": { 2088 | "encodeurl": "~1.0.2", 2089 | "escape-html": "~1.0.3", 2090 | "parseurl": "~1.3.3", 2091 | "send": "0.18.0" 2092 | }, 2093 | "engines": { 2094 | "node": ">= 0.8.0" 2095 | } 2096 | }, 2097 | "node_modules/set-function-length": { 2098 | "version": "1.2.2", 2099 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 2100 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 2101 | "dependencies": { 2102 | "define-data-property": "^1.1.4", 2103 | "es-errors": "^1.3.0", 2104 | "function-bind": "^1.1.2", 2105 | "get-intrinsic": "^1.2.4", 2106 | "gopd": "^1.0.1", 2107 | "has-property-descriptors": "^1.0.2" 2108 | }, 2109 | "engines": { 2110 | "node": ">= 0.4" 2111 | } 2112 | }, 2113 | "node_modules/setprototypeof": { 2114 | "version": "1.2.0", 2115 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 2116 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 2117 | }, 2118 | "node_modules/sharp": { 2119 | "version": "0.33.4", 2120 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", 2121 | "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", 2122 | "hasInstallScript": true, 2123 | "dependencies": { 2124 | "color": "^4.2.3", 2125 | "detect-libc": "^2.0.3", 2126 | "semver": "^7.6.0" 2127 | }, 2128 | "engines": { 2129 | "libvips": ">=8.15.2", 2130 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2131 | }, 2132 | "funding": { 2133 | "url": "https://opencollective.com/libvips" 2134 | }, 2135 | "optionalDependencies": { 2136 | "@img/sharp-darwin-arm64": "0.33.4", 2137 | "@img/sharp-darwin-x64": "0.33.4", 2138 | "@img/sharp-libvips-darwin-arm64": "1.0.2", 2139 | "@img/sharp-libvips-darwin-x64": "1.0.2", 2140 | "@img/sharp-libvips-linux-arm": "1.0.2", 2141 | "@img/sharp-libvips-linux-arm64": "1.0.2", 2142 | "@img/sharp-libvips-linux-s390x": "1.0.2", 2143 | "@img/sharp-libvips-linux-x64": "1.0.2", 2144 | "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", 2145 | "@img/sharp-libvips-linuxmusl-x64": "1.0.2", 2146 | "@img/sharp-linux-arm": "0.33.4", 2147 | "@img/sharp-linux-arm64": "0.33.4", 2148 | "@img/sharp-linux-s390x": "0.33.4", 2149 | "@img/sharp-linux-x64": "0.33.4", 2150 | "@img/sharp-linuxmusl-arm64": "0.33.4", 2151 | "@img/sharp-linuxmusl-x64": "0.33.4", 2152 | "@img/sharp-wasm32": "0.33.4", 2153 | "@img/sharp-win32-ia32": "0.33.4", 2154 | "@img/sharp-win32-x64": "0.33.4" 2155 | } 2156 | }, 2157 | "node_modules/side-channel": { 2158 | "version": "1.0.6", 2159 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 2160 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 2161 | "dependencies": { 2162 | "call-bind": "^1.0.7", 2163 | "es-errors": "^1.3.0", 2164 | "get-intrinsic": "^1.2.4", 2165 | "object-inspect": "^1.13.1" 2166 | }, 2167 | "engines": { 2168 | "node": ">= 0.4" 2169 | }, 2170 | "funding": { 2171 | "url": "https://github.com/sponsors/ljharb" 2172 | } 2173 | }, 2174 | "node_modules/simple-concat": { 2175 | "version": "1.0.1", 2176 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 2177 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 2178 | "funding": [ 2179 | { 2180 | "type": "github", 2181 | "url": "https://github.com/sponsors/feross" 2182 | }, 2183 | { 2184 | "type": "patreon", 2185 | "url": "https://www.patreon.com/feross" 2186 | }, 2187 | { 2188 | "type": "consulting", 2189 | "url": "https://feross.org/support" 2190 | } 2191 | ] 2192 | }, 2193 | "node_modules/simple-get": { 2194 | "version": "4.0.1", 2195 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", 2196 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", 2197 | "funding": [ 2198 | { 2199 | "type": "github", 2200 | "url": "https://github.com/sponsors/feross" 2201 | }, 2202 | { 2203 | "type": "patreon", 2204 | "url": "https://www.patreon.com/feross" 2205 | }, 2206 | { 2207 | "type": "consulting", 2208 | "url": "https://feross.org/support" 2209 | } 2210 | ], 2211 | "dependencies": { 2212 | "decompress-response": "^6.0.0", 2213 | "once": "^1.3.1", 2214 | "simple-concat": "^1.0.0" 2215 | } 2216 | }, 2217 | "node_modules/simple-swizzle": { 2218 | "version": "0.2.2", 2219 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 2220 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 2221 | "dependencies": { 2222 | "is-arrayish": "^0.3.1" 2223 | } 2224 | }, 2225 | "node_modules/source-map": { 2226 | "version": "0.6.1", 2227 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2228 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2229 | "optional": true, 2230 | "engines": { 2231 | "node": ">=0.10.0" 2232 | } 2233 | }, 2234 | "node_modules/statuses": { 2235 | "version": "2.0.1", 2236 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 2237 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 2238 | "engines": { 2239 | "node": ">= 0.8" 2240 | } 2241 | }, 2242 | "node_modules/streamx": { 2243 | "version": "2.18.0", 2244 | "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", 2245 | "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", 2246 | "dependencies": { 2247 | "fast-fifo": "^1.3.2", 2248 | "queue-tick": "^1.0.1", 2249 | "text-decoder": "^1.1.0" 2250 | }, 2251 | "optionalDependencies": { 2252 | "bare-events": "^2.2.0" 2253 | } 2254 | }, 2255 | "node_modules/string_decoder": { 2256 | "version": "1.3.0", 2257 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2258 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2259 | "dependencies": { 2260 | "safe-buffer": "~5.2.0" 2261 | } 2262 | }, 2263 | "node_modules/string-width": { 2264 | "version": "4.2.3", 2265 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2266 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2267 | "dependencies": { 2268 | "emoji-regex": "^8.0.0", 2269 | "is-fullwidth-code-point": "^3.0.0", 2270 | "strip-ansi": "^6.0.1" 2271 | }, 2272 | "engines": { 2273 | "node": ">=8" 2274 | } 2275 | }, 2276 | "node_modules/strip-ansi": { 2277 | "version": "6.0.1", 2278 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2279 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2280 | "dependencies": { 2281 | "ansi-regex": "^5.0.1" 2282 | }, 2283 | "engines": { 2284 | "node": ">=8" 2285 | } 2286 | }, 2287 | "node_modules/strip-json-comments": { 2288 | "version": "2.0.1", 2289 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2290 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 2291 | "engines": { 2292 | "node": ">=0.10.0" 2293 | } 2294 | }, 2295 | "node_modules/tar-fs": { 2296 | "version": "3.0.6", 2297 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", 2298 | "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", 2299 | "dependencies": { 2300 | "pump": "^3.0.0", 2301 | "tar-stream": "^3.1.5" 2302 | }, 2303 | "optionalDependencies": { 2304 | "bare-fs": "^2.1.1", 2305 | "bare-path": "^2.1.0" 2306 | } 2307 | }, 2308 | "node_modules/tar-stream": { 2309 | "version": "3.1.7", 2310 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", 2311 | "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", 2312 | "dependencies": { 2313 | "b4a": "^1.6.4", 2314 | "fast-fifo": "^1.2.0", 2315 | "streamx": "^2.15.0" 2316 | } 2317 | }, 2318 | "node_modules/text-decoder": { 2319 | "version": "1.1.0", 2320 | "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", 2321 | "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", 2322 | "dependencies": { 2323 | "b4a": "^1.6.4" 2324 | } 2325 | }, 2326 | "node_modules/toidentifier": { 2327 | "version": "1.0.1", 2328 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2329 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2330 | "engines": { 2331 | "node": ">=0.6" 2332 | } 2333 | }, 2334 | "node_modules/tslib": { 2335 | "version": "2.6.2", 2336 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 2337 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 2338 | "optional": true 2339 | }, 2340 | "node_modules/tunnel-agent": { 2341 | "version": "0.6.0", 2342 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2343 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 2344 | "dependencies": { 2345 | "safe-buffer": "^5.0.1" 2346 | }, 2347 | "engines": { 2348 | "node": "*" 2349 | } 2350 | }, 2351 | "node_modules/type-check": { 2352 | "version": "0.3.2", 2353 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2354 | "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", 2355 | "dependencies": { 2356 | "prelude-ls": "~1.1.2" 2357 | }, 2358 | "engines": { 2359 | "node": ">= 0.8.0" 2360 | } 2361 | }, 2362 | "node_modules/type-is": { 2363 | "version": "1.6.18", 2364 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2365 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2366 | "dependencies": { 2367 | "media-typer": "0.3.0", 2368 | "mime-types": "~2.1.24" 2369 | }, 2370 | "engines": { 2371 | "node": ">= 0.6" 2372 | } 2373 | }, 2374 | "node_modules/undici-types": { 2375 | "version": "5.26.5", 2376 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2377 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 2378 | }, 2379 | "node_modules/unpipe": { 2380 | "version": "1.0.0", 2381 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2382 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 2383 | "engines": { 2384 | "node": ">= 0.8" 2385 | } 2386 | }, 2387 | "node_modules/util-deprecate": { 2388 | "version": "1.0.2", 2389 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2390 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2391 | }, 2392 | "node_modules/utils-merge": { 2393 | "version": "1.0.1", 2394 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2395 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 2396 | "engines": { 2397 | "node": ">= 0.4.0" 2398 | } 2399 | }, 2400 | "node_modules/uuid": { 2401 | "version": "9.0.1", 2402 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", 2403 | "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", 2404 | "funding": [ 2405 | "https://github.com/sponsors/broofa", 2406 | "https://github.com/sponsors/ctavan" 2407 | ], 2408 | "bin": { 2409 | "uuid": "dist/bin/uuid" 2410 | } 2411 | }, 2412 | "node_modules/vary": { 2413 | "version": "1.1.2", 2414 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2415 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 2416 | "engines": { 2417 | "node": ">= 0.8" 2418 | } 2419 | }, 2420 | "node_modules/web-streams-polyfill": { 2421 | "version": "3.3.3", 2422 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", 2423 | "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", 2424 | "engines": { 2425 | "node": ">= 8" 2426 | } 2427 | }, 2428 | "node_modules/word-wrap": { 2429 | "version": "1.2.5", 2430 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 2431 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 2432 | "engines": { 2433 | "node": ">=0.10.0" 2434 | } 2435 | }, 2436 | "node_modules/wrap-ansi": { 2437 | "version": "7.0.0", 2438 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2439 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2440 | "dependencies": { 2441 | "ansi-styles": "^4.0.0", 2442 | "string-width": "^4.1.0", 2443 | "strip-ansi": "^6.0.0" 2444 | }, 2445 | "engines": { 2446 | "node": ">=10" 2447 | }, 2448 | "funding": { 2449 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2450 | } 2451 | }, 2452 | "node_modules/wrappy": { 2453 | "version": "1.0.2", 2454 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2455 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 2456 | }, 2457 | "node_modules/y18n": { 2458 | "version": "5.0.8", 2459 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2460 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2461 | "engines": { 2462 | "node": ">=10" 2463 | } 2464 | }, 2465 | "node_modules/yallist": { 2466 | "version": "4.0.0", 2467 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2468 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 2469 | }, 2470 | "node_modules/yargs": { 2471 | "version": "17.3.1", 2472 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", 2473 | "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", 2474 | "dependencies": { 2475 | "cliui": "^7.0.2", 2476 | "escalade": "^3.1.1", 2477 | "get-caller-file": "^2.0.5", 2478 | "require-directory": "^2.1.1", 2479 | "string-width": "^4.2.3", 2480 | "y18n": "^5.0.5", 2481 | "yargs-parser": "^21.0.0" 2482 | }, 2483 | "engines": { 2484 | "node": ">=12" 2485 | } 2486 | }, 2487 | "node_modules/yargs-parser": { 2488 | "version": "21.1.1", 2489 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2490 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2491 | "engines": { 2492 | "node": ">=12" 2493 | } 2494 | } 2495 | } 2496 | } 2497 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "binance-solver", 3 | "version": "1.0.0", 4 | "description": "Solver for binance image captcha", 5 | "main": "src/index.js", 6 | "type": "module", 7 | "scripts": { 8 | "start": "node src/index.js" 9 | }, 10 | "keywords": [], 11 | "author": "brianxor", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@xenova/transformers": "^2.17.2", 15 | "deobfuscator": "^2.4.5", 16 | "dotenv": "^16.4.5", 17 | "express": "^4.19.2", 18 | "morgan": "^1.10.0", 19 | "node-fetch": "^3.3.2", 20 | "redis": "^4.6.14", 21 | "sharp": "^0.33.4", 22 | "uuid": "^9.0.1" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/classifier/classifier.js: -------------------------------------------------------------------------------- 1 | import { processImage } from "./image.js"; 2 | 3 | class Classifier { 4 | constructor(task, model, labels) { 5 | this.task = task; 6 | this.model = model; 7 | this.labels = labels; 8 | } 9 | 10 | static instance = null; 11 | static captchaBaseUrl = "https://bin.bnbstatic.com" 12 | 13 | async classify(imageUrlPath, label) { 14 | let captchaSplit = imageUrlPath.split(","); 15 | 16 | let isMultipleCaptcha = false; 17 | 18 | if (captchaSplit.length === 2) { 19 | isMultipleCaptcha = true; 20 | } 21 | 22 | const instance = await this.getInstance(); 23 | const processedImage = await processImage(Classifier.captchaBaseUrl + captchaSplit[0]); 24 | const scores = await instance(processedImage, this.labels); 25 | 26 | let answers = this.findAnswers(scores, label).join("-"); 27 | 28 | if (isMultipleCaptcha) { 29 | const processedImage = await processImage(Classifier.captchaBaseUrl + captchaSplit[1]); 30 | const scores = await instance(processedImage, this.labels); 31 | const secondAnswers = this.findAnswers(scores, label).join("-"); 32 | answers += "," + secondAnswers 33 | } 34 | 35 | return answers 36 | } 37 | 38 | async getInstance(progress_callback = null) { 39 | if (Classifier.instance === null) { 40 | let { pipeline } = await import("@xenova/transformers"); 41 | Classifier.instance = await pipeline(this.task, this.model, { 42 | progress_callback, 43 | }); 44 | } 45 | 46 | return Classifier.instance; 47 | } 48 | 49 | findAnswers(scores, label) { 50 | let answers = []; 51 | 52 | scores.forEach((score, answer) => { 53 | if (score[0].label === label) { 54 | answers.push(answer); 55 | } 56 | }); 57 | 58 | return answers; 59 | } 60 | } 61 | 62 | const task = "zero-shot-image-classification"; 63 | const model = "Xenova/clip-vit-large-patch14"; 64 | 65 | const labels = [ 66 | "airplane", 67 | "bicycle", 68 | "bus", 69 | "car", 70 | "dog", 71 | "panda", 72 | "ship", 73 | "elephant", 74 | ]; 75 | 76 | export default new Classifier(task, model, labels); 77 | -------------------------------------------------------------------------------- /src/classifier/image.js: -------------------------------------------------------------------------------- 1 | import { RawImage } from "@xenova/transformers"; 2 | 3 | const processImage = async (url) => { 4 | const squareSize = 110; 5 | 6 | try { 7 | const image = await RawImage.fromURL(url); 8 | 9 | let croppedImages = []; 10 | 11 | for (let row = 0; row < 3; row++) { 12 | for (let col = 0; col < 3; col++) { 13 | const xMin = col * squareSize; 14 | const yMin = row * squareSize; 15 | const xMax = xMin + squareSize - 1; 16 | const yMax = yMin + squareSize - 1; 17 | 18 | const croppedImage = await image.crop([xMin, yMin, xMax, yMax]); 19 | 20 | croppedImages.push(croppedImage); 21 | } 22 | } 23 | 24 | return croppedImages; 25 | } catch (err) { 26 | return err; 27 | } 28 | }; 29 | export { processImage }; 30 | -------------------------------------------------------------------------------- /src/deobfuscator/assets/input.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianxor/binance-solver/4b0cf7f33c1d3b085ea74eb42225bb4e4e169d15/src/deobfuscator/assets/input.js -------------------------------------------------------------------------------- /src/deobfuscator/assets/output.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianxor/binance-solver/4b0cf7f33c1d3b085ea74eb42225bb4e4e169d15/src/deobfuscator/assets/output.js -------------------------------------------------------------------------------- /src/deobfuscator/deobfuscator.js: -------------------------------------------------------------------------------- 1 | import { Deobfuscator as globalDeobfuscator } from "deobfuscator"; 2 | import beautify from "js-beautify"; 3 | import * as parser from "@babel/parser"; 4 | import _generate from "@babel/generator"; 5 | const generate = _generate.default; 6 | 7 | import replaceHexadecimalIntegerVisitor from "./visitors/replaceHexadecimalInteger.js" 8 | import replaceStringsVisitor from "./visitors/replaceStrings.js"; 9 | 10 | class Deobfuscator { 11 | constructor(script) { 12 | this.script = script; 13 | this.visitors = [ 14 | replaceHexadecimalIntegerVisitor, 15 | replaceStringsVisitor 16 | ] 17 | } 18 | 19 | async deobfuscate() { 20 | const ast = parser.parse(this.script); 21 | 22 | // First we use our visitors 23 | 24 | this.visitors.map((visitor => visitor(ast))); 25 | 26 | let deobfuscatedCode = generate(ast, { 27 | comments: false, 28 | }).code; 29 | 30 | // Then we use a global deobfuscator for the rest 31 | 32 | let globalDeobf = new globalDeobfuscator(); 33 | 34 | deobfuscatedCode = await globalDeobf.deobfuscateSource(deobfuscatedCode, {}); 35 | 36 | deobfuscatedCode = beautify(deobfuscatedCode, { 37 | indent_size: 2, 38 | space_in_empty_paren: true, 39 | }); 40 | 41 | return deobfuscatedCode 42 | } 43 | } 44 | 45 | export default Deobfuscator; -------------------------------------------------------------------------------- /src/deobfuscator/tests/deobfuscator_test.js: -------------------------------------------------------------------------------- 1 | import Deobfuscator from "../deobfuscator.js"; 2 | import fs from "fs"; 3 | 4 | const inputPath = "../assets/input.js"; 5 | const outputPath = "../assets/output.js"; 6 | 7 | const script = fs.readFileSync(inputPath, "utf-8"); 8 | 9 | const deobfuscator = new Deobfuscator(script); 10 | 11 | const deobfuscatedCode = await deobfuscator.deobfuscate(); 12 | 13 | fs.writeFileSync(outputPath, deobfuscatedCode); -------------------------------------------------------------------------------- /src/deobfuscator/visitors/replaceHexadecimalInteger.js: -------------------------------------------------------------------------------- 1 | import _traverse from "@babel/traverse"; 2 | const traverse = _traverse.default; 3 | 4 | const replaceHexadecimalIntegerVisitor = (ast) => { 5 | traverse(ast, { 6 | NumericLiteral(path) { 7 | if (path.node.extra) { 8 | delete path.node.extra; 9 | } else { 10 | return; 11 | } 12 | } 13 | }); 14 | }; 15 | 16 | export default replaceHexadecimalIntegerVisitor; -------------------------------------------------------------------------------- /src/deobfuscator/visitors/replaceStrings.js: -------------------------------------------------------------------------------- 1 | import vm from "vm"; 2 | import * as t from "@babel/types"; 3 | import _generate from "@babel/generator"; 4 | import _traverse from "@babel/traverse"; 5 | const generate = _generate.default; 6 | const traverse = _traverse.default; 7 | 8 | const vmCtx = vm.createContext(); 9 | 10 | const findArrayElements = (ast) => { 11 | traverse(ast, { 12 | VariableDeclaration(path) { 13 | const { declarations } = path.node; 14 | 15 | if (declarations.length !== 1 || !t.isVariableDeclarator(declarations[0])) return; 16 | 17 | const id = declarations[0].id; 18 | const init = declarations[0].init; 19 | 20 | if (t.isIdentifier(id) && t.isArrayExpression(init)) { 21 | const elements = init.elements; 22 | 23 | if (elements.length === 0) return; 24 | 25 | if (elements.every((element => t.isStringLiteral(element)))) { 26 | const code = generate(path.node).code; 27 | vm.runInContext(code, vmCtx); 28 | path.remove(); 29 | path.stop(); 30 | } 31 | } 32 | } 33 | }) 34 | }; 35 | 36 | const shuffleArrayElements = (ast) => { 37 | traverse(ast, { 38 | ExpressionStatement(path) { 39 | const { expression } = path.node; 40 | 41 | if (!t.isCallExpression(expression)) return; 42 | 43 | const callee = expression.callee; 44 | const args = expression.arguments; 45 | 46 | if (t.isFunctionExpression(callee) && args.length === 2 && t.isIdentifier(args[0]) && t.isNumericLiteral(args[1])) { 47 | const code = generate(path.node).code; 48 | vm.runInContext(code, vmCtx); 49 | path.remove(); 50 | path.stop(); 51 | } 52 | } 53 | }) 54 | } 55 | 56 | const findDecodeFunction = (ast) => { 57 | traverse(ast, { 58 | VariableDeclaration(path) { 59 | const { declarations } = path.node; 60 | 61 | if (declarations.length !== 1 || !t.isVariableDeclarator(declarations[0])) return; 62 | 63 | const id = declarations[0].id; 64 | const init = declarations[0].init; 65 | 66 | if (t.isIdentifier(id) && t.isFunctionExpression(init)) { 67 | const body = init.body; 68 | 69 | if (!t.isBlockStatement(body)) return; 70 | 71 | const bodies = body.body; 72 | 73 | if (bodies.length !== 6) return; 74 | 75 | const code = generate(path.node).code; 76 | vm.runInContext(code, vmCtx); 77 | path.remove(); 78 | path.stop(); 79 | } 80 | } 81 | }) 82 | } 83 | 84 | const findDecodeCalls = (ast) => { 85 | traverse(ast, { 86 | CallExpression(path) { 87 | const callee = path.node.callee; 88 | const args = path.node.arguments; 89 | 90 | if (t.isIdentifier(callee) && t.isStringLiteral(args[0]) && t.isStringLiteral(args[1])) { 91 | const code = generate(path.node).code; 92 | const decodedValue = vm.runInContext(code, vmCtx); 93 | path.replaceWith(t.stringLiteral(decodedValue)) 94 | } 95 | } 96 | }) 97 | } 98 | 99 | const replaceStringsVisitor = (ast) => { 100 | findArrayElements(ast); 101 | shuffleArrayElements(ast); 102 | findDecodeFunction(ast); 103 | findDecodeCalls(ast); 104 | } 105 | 106 | export default replaceStringsVisitor; -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import dotenv from "dotenv"; 2 | import startServer from "./server/server.js"; 3 | 4 | dotenv.config(); 5 | 6 | const serverPort = process.env.SERVER_PORT || 3000; 7 | 8 | await startServer(serverPort); -------------------------------------------------------------------------------- /src/payload/events.js: -------------------------------------------------------------------------------- 1 | const generateEvents = (numOfEvents = 100, availWidth = 1920, availHeight = 1080) => { 2 | const events = []; 3 | let lastEventTime = null; 4 | let x = Math.floor(Math.random() * availWidth); 5 | let y = Math.floor(Math.random() * availHeight); 6 | 7 | for (let i = 0; i < numOfEvents; i++) { 8 | let dx = Math.floor(Math.random() * 20) - 10; 9 | let dy = Math.floor(Math.random() * 20) - 10; 10 | 11 | x += dx; 12 | y += dy; 13 | 14 | x = Math.max(0, Math.min(x, availWidth)); 15 | y = Math.max(0, Math.min(y, availHeight)); 16 | 17 | let currentEventTime = new Date().getTime(); 18 | 19 | let timeDiff = lastEventTime ? currentEventTime - lastEventTime : currentEventTime; 20 | 21 | lastEventTime = currentEventTime; 22 | 23 | events.push(`|mm|${x},${y}|${timeDiff}`); 24 | } 25 | 26 | return events; 27 | } 28 | 29 | export default generateEvents; -------------------------------------------------------------------------------- /src/payload/payload.js: -------------------------------------------------------------------------------- 1 | import classifier from "../classifier/classifier.js"; 2 | import * as utils from "./utils.js"; 3 | import generateEvents from "./events.js"; 4 | 5 | const buildPayload = async (bizId, captchaData) => { 6 | 7 | const { sig, salt, path2, ek, tag } = captchaData; 8 | 9 | const { width, height } = getScreenData(); 10 | 11 | const eventsCount = utils.randomIntBetween(40, 130); 12 | const eventsList = generateEvents(eventsCount, width, height); 13 | 14 | const answer = await classifier.classify(path2, tag); 15 | 16 | const payload = { 17 | ev: { 18 | wd: getWd(), 19 | im: getIm(), 20 | de: getDe(), 21 | prde: getPrde(), 22 | brla: getBrla(), 23 | pl: getPl(), 24 | wiinhe: height, 25 | wiouhe: height.toString(), 26 | }, 27 | be: { 28 | ec: { 29 | mm: eventsCount, 30 | md: 0, 31 | mu: 0, 32 | cl: 0, 33 | }, 34 | el: eventsList, 35 | }, 36 | dist: answer, 37 | }; 38 | const encodedPayload = encodeURIComponent(utils.encodePayload(JSON.stringify(payload), ek)); 39 | 40 | const s = utils.calculateAsciiSum(bizId + sig + encodedPayload + salt); 41 | 42 | return { 43 | encodedPayload, 44 | s, 45 | answer 46 | }; 47 | }; 48 | const getWd = () => { 49 | return utils.randomOddInt(); 50 | }; 51 | 52 | const getIm = () => { 53 | return utils.randomOddInt(); 54 | }; 55 | 56 | const getDe = () => { 57 | return ""; 58 | }; 59 | 60 | const getPrde = () => { 61 | let values = []; 62 | 63 | for (let i = 0; i < 4; i++) { 64 | const randomInt = utils.randomOddInt(); 65 | values.push(randomInt); 66 | } 67 | 68 | return values.join(","); 69 | }; 70 | 71 | const getBrla = () => { 72 | return utils.randomOddInt(); 73 | }; 74 | 75 | const getPl = () => { 76 | return "Win32"; 77 | }; 78 | 79 | const getScreenData = () => { 80 | return { 81 | width: 1920, 82 | height: 1080, 83 | }; 84 | }; 85 | 86 | export default buildPayload; 87 | -------------------------------------------------------------------------------- /src/payload/utils.js: -------------------------------------------------------------------------------- 1 | const encodePayload = (payload, key = 'cdababcddcba') => { 2 | const generateSubKey = (str, segmentCount, multiplier = 31) => { 3 | if (str === '') { 4 | return ''; 5 | } 6 | const characters = 'abcdhijkxy'; 7 | const segmentLength = parseInt(str.length / segmentCount); 8 | const subKeys = []; 9 | for (let i = 0; i < segmentCount; i++) { 10 | let charCodeSum = 0; 11 | const start = i * segmentLength; 12 | const end = i == segmentCount - 1 ? segmentLength + str.length % segmentCount : segmentLength; 13 | for (let j = 0; j < end; j++) { 14 | const index = start + j; 15 | if (index < str.length) { 16 | charCodeSum += str.charCodeAt(index); 17 | } 18 | } 19 | charCodeSum = charCodeSum * multiplier; 20 | subKeys.push(characters.charAt(charCodeSum % characters.length)); 21 | } 22 | return subKeys.join(''); 23 | }; 24 | 25 | const reverseKey = key.split('').reverse().join(''); 26 | const combinedKey = reverseKey + generateSubKey(reverseKey, 4); 27 | return xorEncode(payload, combinedKey); 28 | }; 29 | 30 | const xorEncode = (payload, key) => { 31 | if (!payload) { 32 | return ''; 33 | } 34 | 35 | let encodedStr = ''; 36 | 37 | for (let i = 0; i < payload.length; i++) { 38 | encodedStr += String.fromCharCode(payload.charCodeAt(i) ^ key.charCodeAt(i % key.length)); 39 | } 40 | 41 | return base64Encode(encodedStr); 42 | }; 43 | 44 | 45 | const base64Encode = (str) => { 46 | return Buffer.from(str).toString('base64'); 47 | }; 48 | 49 | const calculateAsciiSum = (inputString) => { 50 | let asciiSum = 0; 51 | 52 | for (var i = 0; i < inputString.length; i++) { 53 | asciiSum += inputString.charCodeAt(i); 54 | } 55 | 56 | return asciiSum; 57 | }; 58 | 59 | 60 | const randomOddInt = () => { 61 | return parseInt(Math.random() * 50) * 2 + 1; 62 | } 63 | 64 | const randomIntBetween = (min, max) => { 65 | return Math.floor(Math.random() * (max - min + 1)) + min; 66 | } 67 | 68 | export { 69 | encodePayload, 70 | calculateAsciiSum, 71 | randomOddInt, 72 | randomIntBetween 73 | } -------------------------------------------------------------------------------- /src/server/routes/captcha.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import buildPayload from "../../payload/payload.js"; 3 | 4 | const router = express.Router(); 5 | 6 | const supportedModes = ["PAYLOAD"]; 7 | 8 | router.post("/solve", async (req, res) => { 9 | const { mode, bizId, captchaData } = req.body; 10 | 11 | if (!mode || !bizId || !captchaData) { 12 | return res.status(500).json({ 13 | ok: false, 14 | error: "missing body fields" 15 | }) 16 | }; 17 | 18 | if (!supportedModes.includes(mode)) { 19 | return res.status(500).json({ 20 | ok: false, 21 | error: "mode not supported" 22 | }) 23 | } 24 | 25 | const { sig, salt, path2, ek, captchaType, tag } = captchaData; 26 | 27 | if (!sig || !salt || !path2 || !ek || !captchaType || !tag) { 28 | return res.status(500).json({ 29 | ok: false, 30 | error: "invalid captcha data", 31 | }); 32 | }; 33 | 34 | if (captchaType !== "BOX") { 35 | return res.status(500).json({ 36 | ok: false, 37 | error: "captcha type not supported", 38 | }); 39 | } 40 | 41 | try { 42 | const startTime = Date.now(); 43 | 44 | const payload = await buildPayload(bizId, captchaData); 45 | 46 | const endTime = (Date.now() - startTime) / 1000; 47 | 48 | res.status(200).json({ 49 | ok: true, 50 | solution: { 51 | payload: payload.encodedPayload, 52 | s: payload.s, 53 | answer: payload.answer 54 | }, 55 | solveTime: endTime, 56 | }); 57 | 58 | } catch (err) { 59 | res.status(500).json({ 60 | ok: false, 61 | error: "couldn't solve captcha", 62 | }); 63 | } 64 | }); 65 | 66 | export default router; 67 | -------------------------------------------------------------------------------- /src/server/server.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import bodyParser from "body-parser"; 3 | import morgan from "morgan"; 4 | import captchaRouter from "./routes/captcha.js"; 5 | 6 | const startServer = async (serverPort) => { 7 | const app = express(); 8 | 9 | app.use(bodyParser.json()); 10 | app.use(morgan("dev")) 11 | 12 | app.use("/captcha", captchaRouter); 13 | 14 | app.listen(serverPort, () => { 15 | console.log(`Server listening on port ${serverPort}`); 16 | }); 17 | } 18 | 19 | export default startServer; 20 | --------------------------------------------------------------------------------