Sifa professional network API (Fastify, AT Protocol, Jetstream) sifa.id/

feat(api): scaffold sifa-api with Fastify, TypeScript, health endpoint

+4365
+9
.env.example
··· 1 + NODE_ENV=development 2 + PORT=3100 3 + PUBLIC_URL=http://localhost:3100 4 + DATABASE_URL=postgresql://sifa:sifa@localhost:5432/sifa 5 + VALKEY_URL=redis://localhost:6379 6 + SIFA_DID=did:plc:2f2ahswozqy4v5lvu676375y 7 + JETSTREAM_URL=wss://jetstream1.us-east.bsky.network/subscribe 8 + OAUTH_JWKS_PATH=./keys/jwks.json 9 + GLITCHTIP_DSN=
+21
.eslintrc.cjs
··· 1 + module.exports = { 2 + root: true, 3 + parser: '@typescript-eslint/parser', 4 + parserOptions: { 5 + project: './tsconfig.json', 6 + ecmaVersion: 'latest', 7 + sourceType: 'module', 8 + }, 9 + plugins: ['@typescript-eslint'], 10 + extends: [ 11 + 'eslint:recommended', 12 + 'plugin:@typescript-eslint/recommended', 13 + 'plugin:@typescript-eslint/recommended-requiring-type-checking', 14 + ], 15 + rules: { 16 + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], 17 + '@typescript-eslint/no-explicit-any': 'error', 18 + '@typescript-eslint/strict-boolean-expressions': 'error', 19 + }, 20 + ignorePatterns: ['dist/', 'node_modules/', '*.cjs'], 21 + };
+7
.gitignore
··· 1 + node_modules/ 2 + dist/ 3 + .env 4 + keys/ 5 + *.tsbuildinfo 6 + coverage/ 7 + .DS_Store
+1
.node-version
··· 1 + 25
+40
LICENSE
··· 1 + Copyright (c) 2026 Singi Labs 2 + 3 + All rights reserved. 4 + 5 + PROPRIETARY LICENSE (Source-Available) 6 + 7 + Permission is hereby granted to view and inspect the source code of this 8 + software for informational and security-review purposes only. No other rights 9 + are granted. 10 + 11 + You may NOT: 12 + - Use, copy, modify, merge, publish, distribute, sublicense, or sell copies 13 + of this software or any portion thereof. 14 + - Use this software in production, staging, or any deployed environment. 15 + - Create derivative works based on this software. 16 + 17 + EXCEPTION -- MIT-Licensed Components: 18 + The following directories are licensed under the MIT License (see below): 19 + - src/lexicons/ 20 + - src/import/ 21 + 22 + MIT License (for excepted directories only): 23 + 24 + Permission is hereby granted, free of charge, to any person obtaining a copy 25 + of the software contained in the excepted directories listed above, to deal 26 + in those portions without restriction, including without limitation the rights 27 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 28 + copies, and to permit persons to whom the software is furnished to do so, 29 + subject to the following conditions: 30 + 31 + The above copyright notice and this permission notice shall be included in all 32 + copies or substantial portions of the excepted software. 33 + 34 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 35 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 36 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 37 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 38 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 39 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 40 + SOFTWARE.
+4133
package-lock.json
··· 1 + { 2 + "name": "sifa-api", 3 + "version": "1.0.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "sifa-api", 9 + "version": "1.0.0", 10 + "license": "ISC", 11 + "dependencies": { 12 + "@fastify/cookie": "^11.0.2", 13 + "@fastify/cors": "^11.2.0", 14 + "@fastify/helmet": "^13.0.2", 15 + "@fastify/rate-limit": "^10.3.0", 16 + "dotenv": "^17.3.1", 17 + "fastify": "^5.8.2", 18 + "pino": "^10.3.1", 19 + "pino-pretty": "^13.1.3", 20 + "zod": "^4.3.6" 21 + }, 22 + "devDependencies": { 23 + "@types/node": "^25.3.5", 24 + "@types/supertest": "^7.2.0", 25 + "@typescript-eslint/eslint-plugin": "^8.56.1", 26 + "@typescript-eslint/parser": "^8.56.1", 27 + "eslint": "^10.0.3", 28 + "supertest": "^7.2.2", 29 + "tsx": "^4.21.0", 30 + "typescript": "^5.9.3", 31 + "vitest": "^4.0.18" 32 + } 33 + }, 34 + "node_modules/@esbuild/aix-ppc64": { 35 + "version": "0.27.3", 36 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", 37 + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", 38 + "cpu": [ 39 + "ppc64" 40 + ], 41 + "dev": true, 42 + "license": "MIT", 43 + "optional": true, 44 + "os": [ 45 + "aix" 46 + ], 47 + "engines": { 48 + "node": ">=18" 49 + } 50 + }, 51 + "node_modules/@esbuild/android-arm": { 52 + "version": "0.27.3", 53 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", 54 + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", 55 + "cpu": [ 56 + "arm" 57 + ], 58 + "dev": true, 59 + "license": "MIT", 60 + "optional": true, 61 + "os": [ 62 + "android" 63 + ], 64 + "engines": { 65 + "node": ">=18" 66 + } 67 + }, 68 + "node_modules/@esbuild/android-arm64": { 69 + "version": "0.27.3", 70 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", 71 + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", 72 + "cpu": [ 73 + "arm64" 74 + ], 75 + "dev": true, 76 + "license": "MIT", 77 + "optional": true, 78 + "os": [ 79 + "android" 80 + ], 81 + "engines": { 82 + "node": ">=18" 83 + } 84 + }, 85 + "node_modules/@esbuild/android-x64": { 86 + "version": "0.27.3", 87 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", 88 + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", 89 + "cpu": [ 90 + "x64" 91 + ], 92 + "dev": true, 93 + "license": "MIT", 94 + "optional": true, 95 + "os": [ 96 + "android" 97 + ], 98 + "engines": { 99 + "node": ">=18" 100 + } 101 + }, 102 + "node_modules/@esbuild/darwin-arm64": { 103 + "version": "0.27.3", 104 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", 105 + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", 106 + "cpu": [ 107 + "arm64" 108 + ], 109 + "dev": true, 110 + "license": "MIT", 111 + "optional": true, 112 + "os": [ 113 + "darwin" 114 + ], 115 + "engines": { 116 + "node": ">=18" 117 + } 118 + }, 119 + "node_modules/@esbuild/darwin-x64": { 120 + "version": "0.27.3", 121 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", 122 + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", 123 + "cpu": [ 124 + "x64" 125 + ], 126 + "dev": true, 127 + "license": "MIT", 128 + "optional": true, 129 + "os": [ 130 + "darwin" 131 + ], 132 + "engines": { 133 + "node": ">=18" 134 + } 135 + }, 136 + "node_modules/@esbuild/freebsd-arm64": { 137 + "version": "0.27.3", 138 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", 139 + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", 140 + "cpu": [ 141 + "arm64" 142 + ], 143 + "dev": true, 144 + "license": "MIT", 145 + "optional": true, 146 + "os": [ 147 + "freebsd" 148 + ], 149 + "engines": { 150 + "node": ">=18" 151 + } 152 + }, 153 + "node_modules/@esbuild/freebsd-x64": { 154 + "version": "0.27.3", 155 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", 156 + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", 157 + "cpu": [ 158 + "x64" 159 + ], 160 + "dev": true, 161 + "license": "MIT", 162 + "optional": true, 163 + "os": [ 164 + "freebsd" 165 + ], 166 + "engines": { 167 + "node": ">=18" 168 + } 169 + }, 170 + "node_modules/@esbuild/linux-arm": { 171 + "version": "0.27.3", 172 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", 173 + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", 174 + "cpu": [ 175 + "arm" 176 + ], 177 + "dev": true, 178 + "license": "MIT", 179 + "optional": true, 180 + "os": [ 181 + "linux" 182 + ], 183 + "engines": { 184 + "node": ">=18" 185 + } 186 + }, 187 + "node_modules/@esbuild/linux-arm64": { 188 + "version": "0.27.3", 189 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", 190 + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", 191 + "cpu": [ 192 + "arm64" 193 + ], 194 + "dev": true, 195 + "license": "MIT", 196 + "optional": true, 197 + "os": [ 198 + "linux" 199 + ], 200 + "engines": { 201 + "node": ">=18" 202 + } 203 + }, 204 + "node_modules/@esbuild/linux-ia32": { 205 + "version": "0.27.3", 206 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", 207 + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", 208 + "cpu": [ 209 + "ia32" 210 + ], 211 + "dev": true, 212 + "license": "MIT", 213 + "optional": true, 214 + "os": [ 215 + "linux" 216 + ], 217 + "engines": { 218 + "node": ">=18" 219 + } 220 + }, 221 + "node_modules/@esbuild/linux-loong64": { 222 + "version": "0.27.3", 223 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", 224 + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", 225 + "cpu": [ 226 + "loong64" 227 + ], 228 + "dev": true, 229 + "license": "MIT", 230 + "optional": true, 231 + "os": [ 232 + "linux" 233 + ], 234 + "engines": { 235 + "node": ">=18" 236 + } 237 + }, 238 + "node_modules/@esbuild/linux-mips64el": { 239 + "version": "0.27.3", 240 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", 241 + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", 242 + "cpu": [ 243 + "mips64el" 244 + ], 245 + "dev": true, 246 + "license": "MIT", 247 + "optional": true, 248 + "os": [ 249 + "linux" 250 + ], 251 + "engines": { 252 + "node": ">=18" 253 + } 254 + }, 255 + "node_modules/@esbuild/linux-ppc64": { 256 + "version": "0.27.3", 257 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", 258 + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", 259 + "cpu": [ 260 + "ppc64" 261 + ], 262 + "dev": true, 263 + "license": "MIT", 264 + "optional": true, 265 + "os": [ 266 + "linux" 267 + ], 268 + "engines": { 269 + "node": ">=18" 270 + } 271 + }, 272 + "node_modules/@esbuild/linux-riscv64": { 273 + "version": "0.27.3", 274 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", 275 + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", 276 + "cpu": [ 277 + "riscv64" 278 + ], 279 + "dev": true, 280 + "license": "MIT", 281 + "optional": true, 282 + "os": [ 283 + "linux" 284 + ], 285 + "engines": { 286 + "node": ">=18" 287 + } 288 + }, 289 + "node_modules/@esbuild/linux-s390x": { 290 + "version": "0.27.3", 291 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", 292 + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", 293 + "cpu": [ 294 + "s390x" 295 + ], 296 + "dev": true, 297 + "license": "MIT", 298 + "optional": true, 299 + "os": [ 300 + "linux" 301 + ], 302 + "engines": { 303 + "node": ">=18" 304 + } 305 + }, 306 + "node_modules/@esbuild/linux-x64": { 307 + "version": "0.27.3", 308 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", 309 + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", 310 + "cpu": [ 311 + "x64" 312 + ], 313 + "dev": true, 314 + "license": "MIT", 315 + "optional": true, 316 + "os": [ 317 + "linux" 318 + ], 319 + "engines": { 320 + "node": ">=18" 321 + } 322 + }, 323 + "node_modules/@esbuild/netbsd-arm64": { 324 + "version": "0.27.3", 325 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", 326 + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", 327 + "cpu": [ 328 + "arm64" 329 + ], 330 + "dev": true, 331 + "license": "MIT", 332 + "optional": true, 333 + "os": [ 334 + "netbsd" 335 + ], 336 + "engines": { 337 + "node": ">=18" 338 + } 339 + }, 340 + "node_modules/@esbuild/netbsd-x64": { 341 + "version": "0.27.3", 342 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", 343 + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", 344 + "cpu": [ 345 + "x64" 346 + ], 347 + "dev": true, 348 + "license": "MIT", 349 + "optional": true, 350 + "os": [ 351 + "netbsd" 352 + ], 353 + "engines": { 354 + "node": ">=18" 355 + } 356 + }, 357 + "node_modules/@esbuild/openbsd-arm64": { 358 + "version": "0.27.3", 359 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", 360 + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", 361 + "cpu": [ 362 + "arm64" 363 + ], 364 + "dev": true, 365 + "license": "MIT", 366 + "optional": true, 367 + "os": [ 368 + "openbsd" 369 + ], 370 + "engines": { 371 + "node": ">=18" 372 + } 373 + }, 374 + "node_modules/@esbuild/openbsd-x64": { 375 + "version": "0.27.3", 376 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", 377 + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", 378 + "cpu": [ 379 + "x64" 380 + ], 381 + "dev": true, 382 + "license": "MIT", 383 + "optional": true, 384 + "os": [ 385 + "openbsd" 386 + ], 387 + "engines": { 388 + "node": ">=18" 389 + } 390 + }, 391 + "node_modules/@esbuild/openharmony-arm64": { 392 + "version": "0.27.3", 393 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", 394 + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", 395 + "cpu": [ 396 + "arm64" 397 + ], 398 + "dev": true, 399 + "license": "MIT", 400 + "optional": true, 401 + "os": [ 402 + "openharmony" 403 + ], 404 + "engines": { 405 + "node": ">=18" 406 + } 407 + }, 408 + "node_modules/@esbuild/sunos-x64": { 409 + "version": "0.27.3", 410 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", 411 + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", 412 + "cpu": [ 413 + "x64" 414 + ], 415 + "dev": true, 416 + "license": "MIT", 417 + "optional": true, 418 + "os": [ 419 + "sunos" 420 + ], 421 + "engines": { 422 + "node": ">=18" 423 + } 424 + }, 425 + "node_modules/@esbuild/win32-arm64": { 426 + "version": "0.27.3", 427 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", 428 + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", 429 + "cpu": [ 430 + "arm64" 431 + ], 432 + "dev": true, 433 + "license": "MIT", 434 + "optional": true, 435 + "os": [ 436 + "win32" 437 + ], 438 + "engines": { 439 + "node": ">=18" 440 + } 441 + }, 442 + "node_modules/@esbuild/win32-ia32": { 443 + "version": "0.27.3", 444 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", 445 + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", 446 + "cpu": [ 447 + "ia32" 448 + ], 449 + "dev": true, 450 + "license": "MIT", 451 + "optional": true, 452 + "os": [ 453 + "win32" 454 + ], 455 + "engines": { 456 + "node": ">=18" 457 + } 458 + }, 459 + "node_modules/@esbuild/win32-x64": { 460 + "version": "0.27.3", 461 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", 462 + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", 463 + "cpu": [ 464 + "x64" 465 + ], 466 + "dev": true, 467 + "license": "MIT", 468 + "optional": true, 469 + "os": [ 470 + "win32" 471 + ], 472 + "engines": { 473 + "node": ">=18" 474 + } 475 + }, 476 + "node_modules/@eslint-community/eslint-utils": { 477 + "version": "4.9.1", 478 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", 479 + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", 480 + "dev": true, 481 + "license": "MIT", 482 + "dependencies": { 483 + "eslint-visitor-keys": "^3.4.3" 484 + }, 485 + "engines": { 486 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 487 + }, 488 + "funding": { 489 + "url": "https://opencollective.com/eslint" 490 + }, 491 + "peerDependencies": { 492 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 493 + } 494 + }, 495 + "node_modules/@eslint-community/regexpp": { 496 + "version": "4.12.2", 497 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", 498 + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", 499 + "dev": true, 500 + "license": "MIT", 501 + "engines": { 502 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 503 + } 504 + }, 505 + "node_modules/@eslint/config-array": { 506 + "version": "0.23.3", 507 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz", 508 + "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", 509 + "dev": true, 510 + "license": "Apache-2.0", 511 + "dependencies": { 512 + "@eslint/object-schema": "^3.0.3", 513 + "debug": "^4.3.1", 514 + "minimatch": "^10.2.4" 515 + }, 516 + "engines": { 517 + "node": "^20.19.0 || ^22.13.0 || >=24" 518 + } 519 + }, 520 + "node_modules/@eslint/config-helpers": { 521 + "version": "0.5.3", 522 + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz", 523 + "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==", 524 + "dev": true, 525 + "license": "Apache-2.0", 526 + "dependencies": { 527 + "@eslint/core": "^1.1.1" 528 + }, 529 + "engines": { 530 + "node": "^20.19.0 || ^22.13.0 || >=24" 531 + } 532 + }, 533 + "node_modules/@eslint/core": { 534 + "version": "1.1.1", 535 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", 536 + "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", 537 + "dev": true, 538 + "license": "Apache-2.0", 539 + "dependencies": { 540 + "@types/json-schema": "^7.0.15" 541 + }, 542 + "engines": { 543 + "node": "^20.19.0 || ^22.13.0 || >=24" 544 + } 545 + }, 546 + "node_modules/@eslint/object-schema": { 547 + "version": "3.0.3", 548 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz", 549 + "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", 550 + "dev": true, 551 + "license": "Apache-2.0", 552 + "engines": { 553 + "node": "^20.19.0 || ^22.13.0 || >=24" 554 + } 555 + }, 556 + "node_modules/@eslint/plugin-kit": { 557 + "version": "0.6.1", 558 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", 559 + "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", 560 + "dev": true, 561 + "license": "Apache-2.0", 562 + "dependencies": { 563 + "@eslint/core": "^1.1.1", 564 + "levn": "^0.4.1" 565 + }, 566 + "engines": { 567 + "node": "^20.19.0 || ^22.13.0 || >=24" 568 + } 569 + }, 570 + "node_modules/@fastify/ajv-compiler": { 571 + "version": "4.0.5", 572 + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.5.tgz", 573 + "integrity": "sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==", 574 + "funding": [ 575 + { 576 + "type": "github", 577 + "url": "https://github.com/sponsors/fastify" 578 + }, 579 + { 580 + "type": "opencollective", 581 + "url": "https://opencollective.com/fastify" 582 + } 583 + ], 584 + "license": "MIT", 585 + "dependencies": { 586 + "ajv": "^8.12.0", 587 + "ajv-formats": "^3.0.1", 588 + "fast-uri": "^3.0.0" 589 + } 590 + }, 591 + "node_modules/@fastify/cookie": { 592 + "version": "11.0.2", 593 + "resolved": "https://registry.npmjs.org/@fastify/cookie/-/cookie-11.0.2.tgz", 594 + "integrity": "sha512-GWdwdGlgJxyvNv+QcKiGNevSspMQXncjMZ1J8IvuDQk0jvkzgWWZFNC2En3s+nHndZBGV8IbLwOI/sxCZw/mzA==", 595 + "funding": [ 596 + { 597 + "type": "github", 598 + "url": "https://github.com/sponsors/fastify" 599 + }, 600 + { 601 + "type": "opencollective", 602 + "url": "https://opencollective.com/fastify" 603 + } 604 + ], 605 + "license": "MIT", 606 + "dependencies": { 607 + "cookie": "^1.0.0", 608 + "fastify-plugin": "^5.0.0" 609 + } 610 + }, 611 + "node_modules/@fastify/cors": { 612 + "version": "11.2.0", 613 + "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-11.2.0.tgz", 614 + "integrity": "sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==", 615 + "funding": [ 616 + { 617 + "type": "github", 618 + "url": "https://github.com/sponsors/fastify" 619 + }, 620 + { 621 + "type": "opencollective", 622 + "url": "https://opencollective.com/fastify" 623 + } 624 + ], 625 + "license": "MIT", 626 + "dependencies": { 627 + "fastify-plugin": "^5.0.0", 628 + "toad-cache": "^3.7.0" 629 + } 630 + }, 631 + "node_modules/@fastify/error": { 632 + "version": "4.2.0", 633 + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.2.0.tgz", 634 + "integrity": "sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==", 635 + "funding": [ 636 + { 637 + "type": "github", 638 + "url": "https://github.com/sponsors/fastify" 639 + }, 640 + { 641 + "type": "opencollective", 642 + "url": "https://opencollective.com/fastify" 643 + } 644 + ], 645 + "license": "MIT" 646 + }, 647 + "node_modules/@fastify/fast-json-stringify-compiler": { 648 + "version": "5.0.3", 649 + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz", 650 + "integrity": "sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==", 651 + "funding": [ 652 + { 653 + "type": "github", 654 + "url": "https://github.com/sponsors/fastify" 655 + }, 656 + { 657 + "type": "opencollective", 658 + "url": "https://opencollective.com/fastify" 659 + } 660 + ], 661 + "license": "MIT", 662 + "dependencies": { 663 + "fast-json-stringify": "^6.0.0" 664 + } 665 + }, 666 + "node_modules/@fastify/forwarded": { 667 + "version": "3.0.1", 668 + "resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.0.1.tgz", 669 + "integrity": "sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==", 670 + "funding": [ 671 + { 672 + "type": "github", 673 + "url": "https://github.com/sponsors/fastify" 674 + }, 675 + { 676 + "type": "opencollective", 677 + "url": "https://opencollective.com/fastify" 678 + } 679 + ], 680 + "license": "MIT" 681 + }, 682 + "node_modules/@fastify/helmet": { 683 + "version": "13.0.2", 684 + "resolved": "https://registry.npmjs.org/@fastify/helmet/-/helmet-13.0.2.tgz", 685 + "integrity": "sha512-tO1QMkOfNeCt9l4sG/FiWErH4QMm+RjHzbMTrgew1DYOQ2vb/6M1G2iNABBrD7Xq6dUk+HLzWW8u+rmmhQHifA==", 686 + "funding": [ 687 + { 688 + "type": "github", 689 + "url": "https://github.com/sponsors/fastify" 690 + }, 691 + { 692 + "type": "opencollective", 693 + "url": "https://opencollective.com/fastify" 694 + } 695 + ], 696 + "license": "MIT", 697 + "dependencies": { 698 + "fastify-plugin": "^5.0.0", 699 + "helmet": "^8.0.0" 700 + } 701 + }, 702 + "node_modules/@fastify/merge-json-schemas": { 703 + "version": "0.2.1", 704 + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz", 705 + "integrity": "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==", 706 + "funding": [ 707 + { 708 + "type": "github", 709 + "url": "https://github.com/sponsors/fastify" 710 + }, 711 + { 712 + "type": "opencollective", 713 + "url": "https://opencollective.com/fastify" 714 + } 715 + ], 716 + "license": "MIT", 717 + "dependencies": { 718 + "dequal": "^2.0.3" 719 + } 720 + }, 721 + "node_modules/@fastify/proxy-addr": { 722 + "version": "5.1.0", 723 + "resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.0.tgz", 724 + "integrity": "sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==", 725 + "funding": [ 726 + { 727 + "type": "github", 728 + "url": "https://github.com/sponsors/fastify" 729 + }, 730 + { 731 + "type": "opencollective", 732 + "url": "https://opencollective.com/fastify" 733 + } 734 + ], 735 + "license": "MIT", 736 + "dependencies": { 737 + "@fastify/forwarded": "^3.0.0", 738 + "ipaddr.js": "^2.1.0" 739 + } 740 + }, 741 + "node_modules/@fastify/rate-limit": { 742 + "version": "10.3.0", 743 + "resolved": "https://registry.npmjs.org/@fastify/rate-limit/-/rate-limit-10.3.0.tgz", 744 + "integrity": "sha512-eIGkG9XKQs0nyynatApA3EVrojHOuq4l6fhB4eeCk4PIOeadvOJz9/4w3vGI44Go17uaXOWEcPkaD8kuKm7g6Q==", 745 + "funding": [ 746 + { 747 + "type": "github", 748 + "url": "https://github.com/sponsors/fastify" 749 + }, 750 + { 751 + "type": "opencollective", 752 + "url": "https://opencollective.com/fastify" 753 + } 754 + ], 755 + "license": "MIT", 756 + "dependencies": { 757 + "@lukeed/ms": "^2.0.2", 758 + "fastify-plugin": "^5.0.0", 759 + "toad-cache": "^3.7.0" 760 + } 761 + }, 762 + "node_modules/@humanfs/core": { 763 + "version": "0.19.1", 764 + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 765 + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 766 + "dev": true, 767 + "license": "Apache-2.0", 768 + "engines": { 769 + "node": ">=18.18.0" 770 + } 771 + }, 772 + "node_modules/@humanfs/node": { 773 + "version": "0.16.7", 774 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", 775 + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", 776 + "dev": true, 777 + "license": "Apache-2.0", 778 + "dependencies": { 779 + "@humanfs/core": "^0.19.1", 780 + "@humanwhocodes/retry": "^0.4.0" 781 + }, 782 + "engines": { 783 + "node": ">=18.18.0" 784 + } 785 + }, 786 + "node_modules/@humanwhocodes/module-importer": { 787 + "version": "1.0.1", 788 + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 789 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 790 + "dev": true, 791 + "license": "Apache-2.0", 792 + "engines": { 793 + "node": ">=12.22" 794 + }, 795 + "funding": { 796 + "type": "github", 797 + "url": "https://github.com/sponsors/nzakas" 798 + } 799 + }, 800 + "node_modules/@humanwhocodes/retry": { 801 + "version": "0.4.3", 802 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", 803 + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", 804 + "dev": true, 805 + "license": "Apache-2.0", 806 + "engines": { 807 + "node": ">=18.18" 808 + }, 809 + "funding": { 810 + "type": "github", 811 + "url": "https://github.com/sponsors/nzakas" 812 + } 813 + }, 814 + "node_modules/@jridgewell/sourcemap-codec": { 815 + "version": "1.5.5", 816 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 817 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 818 + "dev": true, 819 + "license": "MIT" 820 + }, 821 + "node_modules/@lukeed/ms": { 822 + "version": "2.0.2", 823 + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", 824 + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", 825 + "license": "MIT", 826 + "engines": { 827 + "node": ">=8" 828 + } 829 + }, 830 + "node_modules/@noble/hashes": { 831 + "version": "1.8.0", 832 + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", 833 + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", 834 + "dev": true, 835 + "license": "MIT", 836 + "engines": { 837 + "node": "^14.21.3 || >=16" 838 + }, 839 + "funding": { 840 + "url": "https://paulmillr.com/funding/" 841 + } 842 + }, 843 + "node_modules/@paralleldrive/cuid2": { 844 + "version": "2.3.1", 845 + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", 846 + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", 847 + "dev": true, 848 + "license": "MIT", 849 + "dependencies": { 850 + "@noble/hashes": "^1.1.5" 851 + } 852 + }, 853 + "node_modules/@pinojs/redact": { 854 + "version": "0.4.0", 855 + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", 856 + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", 857 + "license": "MIT" 858 + }, 859 + "node_modules/@rollup/rollup-android-arm-eabi": { 860 + "version": "4.59.0", 861 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", 862 + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", 863 + "cpu": [ 864 + "arm" 865 + ], 866 + "dev": true, 867 + "license": "MIT", 868 + "optional": true, 869 + "os": [ 870 + "android" 871 + ] 872 + }, 873 + "node_modules/@rollup/rollup-android-arm64": { 874 + "version": "4.59.0", 875 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", 876 + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", 877 + "cpu": [ 878 + "arm64" 879 + ], 880 + "dev": true, 881 + "license": "MIT", 882 + "optional": true, 883 + "os": [ 884 + "android" 885 + ] 886 + }, 887 + "node_modules/@rollup/rollup-darwin-arm64": { 888 + "version": "4.59.0", 889 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", 890 + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", 891 + "cpu": [ 892 + "arm64" 893 + ], 894 + "dev": true, 895 + "license": "MIT", 896 + "optional": true, 897 + "os": [ 898 + "darwin" 899 + ] 900 + }, 901 + "node_modules/@rollup/rollup-darwin-x64": { 902 + "version": "4.59.0", 903 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", 904 + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", 905 + "cpu": [ 906 + "x64" 907 + ], 908 + "dev": true, 909 + "license": "MIT", 910 + "optional": true, 911 + "os": [ 912 + "darwin" 913 + ] 914 + }, 915 + "node_modules/@rollup/rollup-freebsd-arm64": { 916 + "version": "4.59.0", 917 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", 918 + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", 919 + "cpu": [ 920 + "arm64" 921 + ], 922 + "dev": true, 923 + "license": "MIT", 924 + "optional": true, 925 + "os": [ 926 + "freebsd" 927 + ] 928 + }, 929 + "node_modules/@rollup/rollup-freebsd-x64": { 930 + "version": "4.59.0", 931 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", 932 + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", 933 + "cpu": [ 934 + "x64" 935 + ], 936 + "dev": true, 937 + "license": "MIT", 938 + "optional": true, 939 + "os": [ 940 + "freebsd" 941 + ] 942 + }, 943 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 944 + "version": "4.59.0", 945 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", 946 + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", 947 + "cpu": [ 948 + "arm" 949 + ], 950 + "dev": true, 951 + "libc": [ 952 + "glibc" 953 + ], 954 + "license": "MIT", 955 + "optional": true, 956 + "os": [ 957 + "linux" 958 + ] 959 + }, 960 + "node_modules/@rollup/rollup-linux-arm-musleabihf": { 961 + "version": "4.59.0", 962 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", 963 + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", 964 + "cpu": [ 965 + "arm" 966 + ], 967 + "dev": true, 968 + "libc": [ 969 + "musl" 970 + ], 971 + "license": "MIT", 972 + "optional": true, 973 + "os": [ 974 + "linux" 975 + ] 976 + }, 977 + "node_modules/@rollup/rollup-linux-arm64-gnu": { 978 + "version": "4.59.0", 979 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", 980 + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", 981 + "cpu": [ 982 + "arm64" 983 + ], 984 + "dev": true, 985 + "libc": [ 986 + "glibc" 987 + ], 988 + "license": "MIT", 989 + "optional": true, 990 + "os": [ 991 + "linux" 992 + ] 993 + }, 994 + "node_modules/@rollup/rollup-linux-arm64-musl": { 995 + "version": "4.59.0", 996 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", 997 + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", 998 + "cpu": [ 999 + "arm64" 1000 + ], 1001 + "dev": true, 1002 + "libc": [ 1003 + "musl" 1004 + ], 1005 + "license": "MIT", 1006 + "optional": true, 1007 + "os": [ 1008 + "linux" 1009 + ] 1010 + }, 1011 + "node_modules/@rollup/rollup-linux-loong64-gnu": { 1012 + "version": "4.59.0", 1013 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", 1014 + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", 1015 + "cpu": [ 1016 + "loong64" 1017 + ], 1018 + "dev": true, 1019 + "libc": [ 1020 + "glibc" 1021 + ], 1022 + "license": "MIT", 1023 + "optional": true, 1024 + "os": [ 1025 + "linux" 1026 + ] 1027 + }, 1028 + "node_modules/@rollup/rollup-linux-loong64-musl": { 1029 + "version": "4.59.0", 1030 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", 1031 + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", 1032 + "cpu": [ 1033 + "loong64" 1034 + ], 1035 + "dev": true, 1036 + "libc": [ 1037 + "musl" 1038 + ], 1039 + "license": "MIT", 1040 + "optional": true, 1041 + "os": [ 1042 + "linux" 1043 + ] 1044 + }, 1045 + "node_modules/@rollup/rollup-linux-ppc64-gnu": { 1046 + "version": "4.59.0", 1047 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", 1048 + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", 1049 + "cpu": [ 1050 + "ppc64" 1051 + ], 1052 + "dev": true, 1053 + "libc": [ 1054 + "glibc" 1055 + ], 1056 + "license": "MIT", 1057 + "optional": true, 1058 + "os": [ 1059 + "linux" 1060 + ] 1061 + }, 1062 + "node_modules/@rollup/rollup-linux-ppc64-musl": { 1063 + "version": "4.59.0", 1064 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", 1065 + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", 1066 + "cpu": [ 1067 + "ppc64" 1068 + ], 1069 + "dev": true, 1070 + "libc": [ 1071 + "musl" 1072 + ], 1073 + "license": "MIT", 1074 + "optional": true, 1075 + "os": [ 1076 + "linux" 1077 + ] 1078 + }, 1079 + "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1080 + "version": "4.59.0", 1081 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", 1082 + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", 1083 + "cpu": [ 1084 + "riscv64" 1085 + ], 1086 + "dev": true, 1087 + "libc": [ 1088 + "glibc" 1089 + ], 1090 + "license": "MIT", 1091 + "optional": true, 1092 + "os": [ 1093 + "linux" 1094 + ] 1095 + }, 1096 + "node_modules/@rollup/rollup-linux-riscv64-musl": { 1097 + "version": "4.59.0", 1098 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", 1099 + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", 1100 + "cpu": [ 1101 + "riscv64" 1102 + ], 1103 + "dev": true, 1104 + "libc": [ 1105 + "musl" 1106 + ], 1107 + "license": "MIT", 1108 + "optional": true, 1109 + "os": [ 1110 + "linux" 1111 + ] 1112 + }, 1113 + "node_modules/@rollup/rollup-linux-s390x-gnu": { 1114 + "version": "4.59.0", 1115 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", 1116 + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", 1117 + "cpu": [ 1118 + "s390x" 1119 + ], 1120 + "dev": true, 1121 + "libc": [ 1122 + "glibc" 1123 + ], 1124 + "license": "MIT", 1125 + "optional": true, 1126 + "os": [ 1127 + "linux" 1128 + ] 1129 + }, 1130 + "node_modules/@rollup/rollup-linux-x64-gnu": { 1131 + "version": "4.59.0", 1132 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", 1133 + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", 1134 + "cpu": [ 1135 + "x64" 1136 + ], 1137 + "dev": true, 1138 + "libc": [ 1139 + "glibc" 1140 + ], 1141 + "license": "MIT", 1142 + "optional": true, 1143 + "os": [ 1144 + "linux" 1145 + ] 1146 + }, 1147 + "node_modules/@rollup/rollup-linux-x64-musl": { 1148 + "version": "4.59.0", 1149 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", 1150 + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", 1151 + "cpu": [ 1152 + "x64" 1153 + ], 1154 + "dev": true, 1155 + "libc": [ 1156 + "musl" 1157 + ], 1158 + "license": "MIT", 1159 + "optional": true, 1160 + "os": [ 1161 + "linux" 1162 + ] 1163 + }, 1164 + "node_modules/@rollup/rollup-openbsd-x64": { 1165 + "version": "4.59.0", 1166 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", 1167 + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", 1168 + "cpu": [ 1169 + "x64" 1170 + ], 1171 + "dev": true, 1172 + "license": "MIT", 1173 + "optional": true, 1174 + "os": [ 1175 + "openbsd" 1176 + ] 1177 + }, 1178 + "node_modules/@rollup/rollup-openharmony-arm64": { 1179 + "version": "4.59.0", 1180 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", 1181 + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", 1182 + "cpu": [ 1183 + "arm64" 1184 + ], 1185 + "dev": true, 1186 + "license": "MIT", 1187 + "optional": true, 1188 + "os": [ 1189 + "openharmony" 1190 + ] 1191 + }, 1192 + "node_modules/@rollup/rollup-win32-arm64-msvc": { 1193 + "version": "4.59.0", 1194 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", 1195 + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", 1196 + "cpu": [ 1197 + "arm64" 1198 + ], 1199 + "dev": true, 1200 + "license": "MIT", 1201 + "optional": true, 1202 + "os": [ 1203 + "win32" 1204 + ] 1205 + }, 1206 + "node_modules/@rollup/rollup-win32-ia32-msvc": { 1207 + "version": "4.59.0", 1208 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", 1209 + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", 1210 + "cpu": [ 1211 + "ia32" 1212 + ], 1213 + "dev": true, 1214 + "license": "MIT", 1215 + "optional": true, 1216 + "os": [ 1217 + "win32" 1218 + ] 1219 + }, 1220 + "node_modules/@rollup/rollup-win32-x64-gnu": { 1221 + "version": "4.59.0", 1222 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", 1223 + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", 1224 + "cpu": [ 1225 + "x64" 1226 + ], 1227 + "dev": true, 1228 + "license": "MIT", 1229 + "optional": true, 1230 + "os": [ 1231 + "win32" 1232 + ] 1233 + }, 1234 + "node_modules/@rollup/rollup-win32-x64-msvc": { 1235 + "version": "4.59.0", 1236 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", 1237 + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", 1238 + "cpu": [ 1239 + "x64" 1240 + ], 1241 + "dev": true, 1242 + "license": "MIT", 1243 + "optional": true, 1244 + "os": [ 1245 + "win32" 1246 + ] 1247 + }, 1248 + "node_modules/@standard-schema/spec": { 1249 + "version": "1.1.0", 1250 + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", 1251 + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", 1252 + "dev": true, 1253 + "license": "MIT" 1254 + }, 1255 + "node_modules/@types/chai": { 1256 + "version": "5.2.3", 1257 + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", 1258 + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", 1259 + "dev": true, 1260 + "license": "MIT", 1261 + "dependencies": { 1262 + "@types/deep-eql": "*", 1263 + "assertion-error": "^2.0.1" 1264 + } 1265 + }, 1266 + "node_modules/@types/cookiejar": { 1267 + "version": "2.1.5", 1268 + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", 1269 + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", 1270 + "dev": true, 1271 + "license": "MIT" 1272 + }, 1273 + "node_modules/@types/deep-eql": { 1274 + "version": "4.0.2", 1275 + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", 1276 + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", 1277 + "dev": true, 1278 + "license": "MIT" 1279 + }, 1280 + "node_modules/@types/esrecurse": { 1281 + "version": "4.3.1", 1282 + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", 1283 + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", 1284 + "dev": true, 1285 + "license": "MIT" 1286 + }, 1287 + "node_modules/@types/estree": { 1288 + "version": "1.0.8", 1289 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1290 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1291 + "dev": true, 1292 + "license": "MIT" 1293 + }, 1294 + "node_modules/@types/json-schema": { 1295 + "version": "7.0.15", 1296 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1297 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1298 + "dev": true, 1299 + "license": "MIT" 1300 + }, 1301 + "node_modules/@types/methods": { 1302 + "version": "1.1.4", 1303 + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", 1304 + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", 1305 + "dev": true, 1306 + "license": "MIT" 1307 + }, 1308 + "node_modules/@types/node": { 1309 + "version": "25.3.5", 1310 + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", 1311 + "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", 1312 + "dev": true, 1313 + "license": "MIT", 1314 + "dependencies": { 1315 + "undici-types": "~7.18.0" 1316 + } 1317 + }, 1318 + "node_modules/@types/superagent": { 1319 + "version": "8.1.9", 1320 + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", 1321 + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", 1322 + "dev": true, 1323 + "license": "MIT", 1324 + "dependencies": { 1325 + "@types/cookiejar": "^2.1.5", 1326 + "@types/methods": "^1.1.4", 1327 + "@types/node": "*", 1328 + "form-data": "^4.0.0" 1329 + } 1330 + }, 1331 + "node_modules/@types/supertest": { 1332 + "version": "7.2.0", 1333 + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-7.2.0.tgz", 1334 + "integrity": "sha512-uh2Lv57xvggst6lCqNdFAmDSvoMG7M/HDtX4iUCquxQ5EGPtaPM5PL5Hmi7LCvOG8db7YaCPNJEeoI8s/WzIQw==", 1335 + "dev": true, 1336 + "license": "MIT", 1337 + "dependencies": { 1338 + "@types/methods": "^1.1.4", 1339 + "@types/superagent": "^8.1.0" 1340 + } 1341 + }, 1342 + "node_modules/@typescript-eslint/eslint-plugin": { 1343 + "version": "8.56.1", 1344 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", 1345 + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", 1346 + "dev": true, 1347 + "license": "MIT", 1348 + "dependencies": { 1349 + "@eslint-community/regexpp": "^4.12.2", 1350 + "@typescript-eslint/scope-manager": "8.56.1", 1351 + "@typescript-eslint/type-utils": "8.56.1", 1352 + "@typescript-eslint/utils": "8.56.1", 1353 + "@typescript-eslint/visitor-keys": "8.56.1", 1354 + "ignore": "^7.0.5", 1355 + "natural-compare": "^1.4.0", 1356 + "ts-api-utils": "^2.4.0" 1357 + }, 1358 + "engines": { 1359 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1360 + }, 1361 + "funding": { 1362 + "type": "opencollective", 1363 + "url": "https://opencollective.com/typescript-eslint" 1364 + }, 1365 + "peerDependencies": { 1366 + "@typescript-eslint/parser": "^8.56.1", 1367 + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", 1368 + "typescript": ">=4.8.4 <6.0.0" 1369 + } 1370 + }, 1371 + "node_modules/@typescript-eslint/parser": { 1372 + "version": "8.56.1", 1373 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", 1374 + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", 1375 + "dev": true, 1376 + "license": "MIT", 1377 + "dependencies": { 1378 + "@typescript-eslint/scope-manager": "8.56.1", 1379 + "@typescript-eslint/types": "8.56.1", 1380 + "@typescript-eslint/typescript-estree": "8.56.1", 1381 + "@typescript-eslint/visitor-keys": "8.56.1", 1382 + "debug": "^4.4.3" 1383 + }, 1384 + "engines": { 1385 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1386 + }, 1387 + "funding": { 1388 + "type": "opencollective", 1389 + "url": "https://opencollective.com/typescript-eslint" 1390 + }, 1391 + "peerDependencies": { 1392 + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", 1393 + "typescript": ">=4.8.4 <6.0.0" 1394 + } 1395 + }, 1396 + "node_modules/@typescript-eslint/project-service": { 1397 + "version": "8.56.1", 1398 + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", 1399 + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", 1400 + "dev": true, 1401 + "license": "MIT", 1402 + "dependencies": { 1403 + "@typescript-eslint/tsconfig-utils": "^8.56.1", 1404 + "@typescript-eslint/types": "^8.56.1", 1405 + "debug": "^4.4.3" 1406 + }, 1407 + "engines": { 1408 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1409 + }, 1410 + "funding": { 1411 + "type": "opencollective", 1412 + "url": "https://opencollective.com/typescript-eslint" 1413 + }, 1414 + "peerDependencies": { 1415 + "typescript": ">=4.8.4 <6.0.0" 1416 + } 1417 + }, 1418 + "node_modules/@typescript-eslint/scope-manager": { 1419 + "version": "8.56.1", 1420 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", 1421 + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", 1422 + "dev": true, 1423 + "license": "MIT", 1424 + "dependencies": { 1425 + "@typescript-eslint/types": "8.56.1", 1426 + "@typescript-eslint/visitor-keys": "8.56.1" 1427 + }, 1428 + "engines": { 1429 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1430 + }, 1431 + "funding": { 1432 + "type": "opencollective", 1433 + "url": "https://opencollective.com/typescript-eslint" 1434 + } 1435 + }, 1436 + "node_modules/@typescript-eslint/tsconfig-utils": { 1437 + "version": "8.56.1", 1438 + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", 1439 + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", 1440 + "dev": true, 1441 + "license": "MIT", 1442 + "engines": { 1443 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1444 + }, 1445 + "funding": { 1446 + "type": "opencollective", 1447 + "url": "https://opencollective.com/typescript-eslint" 1448 + }, 1449 + "peerDependencies": { 1450 + "typescript": ">=4.8.4 <6.0.0" 1451 + } 1452 + }, 1453 + "node_modules/@typescript-eslint/type-utils": { 1454 + "version": "8.56.1", 1455 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", 1456 + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", 1457 + "dev": true, 1458 + "license": "MIT", 1459 + "dependencies": { 1460 + "@typescript-eslint/types": "8.56.1", 1461 + "@typescript-eslint/typescript-estree": "8.56.1", 1462 + "@typescript-eslint/utils": "8.56.1", 1463 + "debug": "^4.4.3", 1464 + "ts-api-utils": "^2.4.0" 1465 + }, 1466 + "engines": { 1467 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1468 + }, 1469 + "funding": { 1470 + "type": "opencollective", 1471 + "url": "https://opencollective.com/typescript-eslint" 1472 + }, 1473 + "peerDependencies": { 1474 + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", 1475 + "typescript": ">=4.8.4 <6.0.0" 1476 + } 1477 + }, 1478 + "node_modules/@typescript-eslint/types": { 1479 + "version": "8.56.1", 1480 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", 1481 + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", 1482 + "dev": true, 1483 + "license": "MIT", 1484 + "engines": { 1485 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1486 + }, 1487 + "funding": { 1488 + "type": "opencollective", 1489 + "url": "https://opencollective.com/typescript-eslint" 1490 + } 1491 + }, 1492 + "node_modules/@typescript-eslint/typescript-estree": { 1493 + "version": "8.56.1", 1494 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", 1495 + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", 1496 + "dev": true, 1497 + "license": "MIT", 1498 + "dependencies": { 1499 + "@typescript-eslint/project-service": "8.56.1", 1500 + "@typescript-eslint/tsconfig-utils": "8.56.1", 1501 + "@typescript-eslint/types": "8.56.1", 1502 + "@typescript-eslint/visitor-keys": "8.56.1", 1503 + "debug": "^4.4.3", 1504 + "minimatch": "^10.2.2", 1505 + "semver": "^7.7.3", 1506 + "tinyglobby": "^0.2.15", 1507 + "ts-api-utils": "^2.4.0" 1508 + }, 1509 + "engines": { 1510 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1511 + }, 1512 + "funding": { 1513 + "type": "opencollective", 1514 + "url": "https://opencollective.com/typescript-eslint" 1515 + }, 1516 + "peerDependencies": { 1517 + "typescript": ">=4.8.4 <6.0.0" 1518 + } 1519 + }, 1520 + "node_modules/@typescript-eslint/utils": { 1521 + "version": "8.56.1", 1522 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", 1523 + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", 1524 + "dev": true, 1525 + "license": "MIT", 1526 + "dependencies": { 1527 + "@eslint-community/eslint-utils": "^4.9.1", 1528 + "@typescript-eslint/scope-manager": "8.56.1", 1529 + "@typescript-eslint/types": "8.56.1", 1530 + "@typescript-eslint/typescript-estree": "8.56.1" 1531 + }, 1532 + "engines": { 1533 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1534 + }, 1535 + "funding": { 1536 + "type": "opencollective", 1537 + "url": "https://opencollective.com/typescript-eslint" 1538 + }, 1539 + "peerDependencies": { 1540 + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", 1541 + "typescript": ">=4.8.4 <6.0.0" 1542 + } 1543 + }, 1544 + "node_modules/@typescript-eslint/visitor-keys": { 1545 + "version": "8.56.1", 1546 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", 1547 + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", 1548 + "dev": true, 1549 + "license": "MIT", 1550 + "dependencies": { 1551 + "@typescript-eslint/types": "8.56.1", 1552 + "eslint-visitor-keys": "^5.0.0" 1553 + }, 1554 + "engines": { 1555 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1556 + }, 1557 + "funding": { 1558 + "type": "opencollective", 1559 + "url": "https://opencollective.com/typescript-eslint" 1560 + } 1561 + }, 1562 + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { 1563 + "version": "5.0.1", 1564 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", 1565 + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", 1566 + "dev": true, 1567 + "license": "Apache-2.0", 1568 + "engines": { 1569 + "node": "^20.19.0 || ^22.13.0 || >=24" 1570 + }, 1571 + "funding": { 1572 + "url": "https://opencollective.com/eslint" 1573 + } 1574 + }, 1575 + "node_modules/@vitest/expect": { 1576 + "version": "4.0.18", 1577 + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", 1578 + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", 1579 + "dev": true, 1580 + "license": "MIT", 1581 + "dependencies": { 1582 + "@standard-schema/spec": "^1.0.0", 1583 + "@types/chai": "^5.2.2", 1584 + "@vitest/spy": "4.0.18", 1585 + "@vitest/utils": "4.0.18", 1586 + "chai": "^6.2.1", 1587 + "tinyrainbow": "^3.0.3" 1588 + }, 1589 + "funding": { 1590 + "url": "https://opencollective.com/vitest" 1591 + } 1592 + }, 1593 + "node_modules/@vitest/mocker": { 1594 + "version": "4.0.18", 1595 + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", 1596 + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", 1597 + "dev": true, 1598 + "license": "MIT", 1599 + "dependencies": { 1600 + "@vitest/spy": "4.0.18", 1601 + "estree-walker": "^3.0.3", 1602 + "magic-string": "^0.30.21" 1603 + }, 1604 + "funding": { 1605 + "url": "https://opencollective.com/vitest" 1606 + }, 1607 + "peerDependencies": { 1608 + "msw": "^2.4.9", 1609 + "vite": "^6.0.0 || ^7.0.0-0" 1610 + }, 1611 + "peerDependenciesMeta": { 1612 + "msw": { 1613 + "optional": true 1614 + }, 1615 + "vite": { 1616 + "optional": true 1617 + } 1618 + } 1619 + }, 1620 + "node_modules/@vitest/pretty-format": { 1621 + "version": "4.0.18", 1622 + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", 1623 + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", 1624 + "dev": true, 1625 + "license": "MIT", 1626 + "dependencies": { 1627 + "tinyrainbow": "^3.0.3" 1628 + }, 1629 + "funding": { 1630 + "url": "https://opencollective.com/vitest" 1631 + } 1632 + }, 1633 + "node_modules/@vitest/runner": { 1634 + "version": "4.0.18", 1635 + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", 1636 + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", 1637 + "dev": true, 1638 + "license": "MIT", 1639 + "dependencies": { 1640 + "@vitest/utils": "4.0.18", 1641 + "pathe": "^2.0.3" 1642 + }, 1643 + "funding": { 1644 + "url": "https://opencollective.com/vitest" 1645 + } 1646 + }, 1647 + "node_modules/@vitest/snapshot": { 1648 + "version": "4.0.18", 1649 + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", 1650 + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", 1651 + "dev": true, 1652 + "license": "MIT", 1653 + "dependencies": { 1654 + "@vitest/pretty-format": "4.0.18", 1655 + "magic-string": "^0.30.21", 1656 + "pathe": "^2.0.3" 1657 + }, 1658 + "funding": { 1659 + "url": "https://opencollective.com/vitest" 1660 + } 1661 + }, 1662 + "node_modules/@vitest/spy": { 1663 + "version": "4.0.18", 1664 + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", 1665 + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", 1666 + "dev": true, 1667 + "license": "MIT", 1668 + "funding": { 1669 + "url": "https://opencollective.com/vitest" 1670 + } 1671 + }, 1672 + "node_modules/@vitest/utils": { 1673 + "version": "4.0.18", 1674 + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", 1675 + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", 1676 + "dev": true, 1677 + "license": "MIT", 1678 + "dependencies": { 1679 + "@vitest/pretty-format": "4.0.18", 1680 + "tinyrainbow": "^3.0.3" 1681 + }, 1682 + "funding": { 1683 + "url": "https://opencollective.com/vitest" 1684 + } 1685 + }, 1686 + "node_modules/abstract-logging": { 1687 + "version": "2.0.1", 1688 + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", 1689 + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", 1690 + "license": "MIT" 1691 + }, 1692 + "node_modules/acorn": { 1693 + "version": "8.16.0", 1694 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", 1695 + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", 1696 + "dev": true, 1697 + "license": "MIT", 1698 + "bin": { 1699 + "acorn": "bin/acorn" 1700 + }, 1701 + "engines": { 1702 + "node": ">=0.4.0" 1703 + } 1704 + }, 1705 + "node_modules/acorn-jsx": { 1706 + "version": "5.3.2", 1707 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1708 + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1709 + "dev": true, 1710 + "license": "MIT", 1711 + "peerDependencies": { 1712 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1713 + } 1714 + }, 1715 + "node_modules/ajv": { 1716 + "version": "8.18.0", 1717 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", 1718 + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", 1719 + "license": "MIT", 1720 + "dependencies": { 1721 + "fast-deep-equal": "^3.1.3", 1722 + "fast-uri": "^3.0.1", 1723 + "json-schema-traverse": "^1.0.0", 1724 + "require-from-string": "^2.0.2" 1725 + }, 1726 + "funding": { 1727 + "type": "github", 1728 + "url": "https://github.com/sponsors/epoberezkin" 1729 + } 1730 + }, 1731 + "node_modules/ajv-formats": { 1732 + "version": "3.0.1", 1733 + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", 1734 + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", 1735 + "license": "MIT", 1736 + "dependencies": { 1737 + "ajv": "^8.0.0" 1738 + }, 1739 + "peerDependencies": { 1740 + "ajv": "^8.0.0" 1741 + }, 1742 + "peerDependenciesMeta": { 1743 + "ajv": { 1744 + "optional": true 1745 + } 1746 + } 1747 + }, 1748 + "node_modules/asap": { 1749 + "version": "2.0.6", 1750 + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 1751 + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", 1752 + "dev": true, 1753 + "license": "MIT" 1754 + }, 1755 + "node_modules/assertion-error": { 1756 + "version": "2.0.1", 1757 + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 1758 + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 1759 + "dev": true, 1760 + "license": "MIT", 1761 + "engines": { 1762 + "node": ">=12" 1763 + } 1764 + }, 1765 + "node_modules/asynckit": { 1766 + "version": "0.4.0", 1767 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1768 + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 1769 + "dev": true, 1770 + "license": "MIT" 1771 + }, 1772 + "node_modules/atomic-sleep": { 1773 + "version": "1.0.0", 1774 + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 1775 + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 1776 + "license": "MIT", 1777 + "engines": { 1778 + "node": ">=8.0.0" 1779 + } 1780 + }, 1781 + "node_modules/avvio": { 1782 + "version": "9.2.0", 1783 + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.2.0.tgz", 1784 + "integrity": "sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==", 1785 + "funding": [ 1786 + { 1787 + "type": "github", 1788 + "url": "https://github.com/sponsors/fastify" 1789 + }, 1790 + { 1791 + "type": "opencollective", 1792 + "url": "https://opencollective.com/fastify" 1793 + } 1794 + ], 1795 + "license": "MIT", 1796 + "dependencies": { 1797 + "@fastify/error": "^4.0.0", 1798 + "fastq": "^1.17.1" 1799 + } 1800 + }, 1801 + "node_modules/balanced-match": { 1802 + "version": "4.0.4", 1803 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", 1804 + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", 1805 + "dev": true, 1806 + "license": "MIT", 1807 + "engines": { 1808 + "node": "18 || 20 || >=22" 1809 + } 1810 + }, 1811 + "node_modules/brace-expansion": { 1812 + "version": "5.0.4", 1813 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", 1814 + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", 1815 + "dev": true, 1816 + "license": "MIT", 1817 + "dependencies": { 1818 + "balanced-match": "^4.0.2" 1819 + }, 1820 + "engines": { 1821 + "node": "18 || 20 || >=22" 1822 + } 1823 + }, 1824 + "node_modules/call-bind-apply-helpers": { 1825 + "version": "1.0.2", 1826 + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 1827 + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 1828 + "dev": true, 1829 + "license": "MIT", 1830 + "dependencies": { 1831 + "es-errors": "^1.3.0", 1832 + "function-bind": "^1.1.2" 1833 + }, 1834 + "engines": { 1835 + "node": ">= 0.4" 1836 + } 1837 + }, 1838 + "node_modules/call-bound": { 1839 + "version": "1.0.4", 1840 + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 1841 + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 1842 + "dev": true, 1843 + "license": "MIT", 1844 + "dependencies": { 1845 + "call-bind-apply-helpers": "^1.0.2", 1846 + "get-intrinsic": "^1.3.0" 1847 + }, 1848 + "engines": { 1849 + "node": ">= 0.4" 1850 + }, 1851 + "funding": { 1852 + "url": "https://github.com/sponsors/ljharb" 1853 + } 1854 + }, 1855 + "node_modules/chai": { 1856 + "version": "6.2.2", 1857 + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", 1858 + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", 1859 + "dev": true, 1860 + "license": "MIT", 1861 + "engines": { 1862 + "node": ">=18" 1863 + } 1864 + }, 1865 + "node_modules/colorette": { 1866 + "version": "2.0.20", 1867 + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 1868 + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 1869 + "license": "MIT" 1870 + }, 1871 + "node_modules/combined-stream": { 1872 + "version": "1.0.8", 1873 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1874 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1875 + "dev": true, 1876 + "license": "MIT", 1877 + "dependencies": { 1878 + "delayed-stream": "~1.0.0" 1879 + }, 1880 + "engines": { 1881 + "node": ">= 0.8" 1882 + } 1883 + }, 1884 + "node_modules/component-emitter": { 1885 + "version": "1.3.1", 1886 + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", 1887 + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", 1888 + "dev": true, 1889 + "license": "MIT", 1890 + "funding": { 1891 + "url": "https://github.com/sponsors/sindresorhus" 1892 + } 1893 + }, 1894 + "node_modules/cookie": { 1895 + "version": "1.1.1", 1896 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", 1897 + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", 1898 + "license": "MIT", 1899 + "engines": { 1900 + "node": ">=18" 1901 + }, 1902 + "funding": { 1903 + "type": "opencollective", 1904 + "url": "https://opencollective.com/express" 1905 + } 1906 + }, 1907 + "node_modules/cookie-signature": { 1908 + "version": "1.2.2", 1909 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 1910 + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 1911 + "dev": true, 1912 + "license": "MIT", 1913 + "engines": { 1914 + "node": ">=6.6.0" 1915 + } 1916 + }, 1917 + "node_modules/cookiejar": { 1918 + "version": "2.1.4", 1919 + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", 1920 + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", 1921 + "dev": true, 1922 + "license": "MIT" 1923 + }, 1924 + "node_modules/cross-spawn": { 1925 + "version": "7.0.6", 1926 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1927 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1928 + "dev": true, 1929 + "license": "MIT", 1930 + "dependencies": { 1931 + "path-key": "^3.1.0", 1932 + "shebang-command": "^2.0.0", 1933 + "which": "^2.0.1" 1934 + }, 1935 + "engines": { 1936 + "node": ">= 8" 1937 + } 1938 + }, 1939 + "node_modules/dateformat": { 1940 + "version": "4.6.3", 1941 + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", 1942 + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", 1943 + "license": "MIT", 1944 + "engines": { 1945 + "node": "*" 1946 + } 1947 + }, 1948 + "node_modules/debug": { 1949 + "version": "4.4.3", 1950 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1951 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1952 + "dev": true, 1953 + "license": "MIT", 1954 + "dependencies": { 1955 + "ms": "^2.1.3" 1956 + }, 1957 + "engines": { 1958 + "node": ">=6.0" 1959 + }, 1960 + "peerDependenciesMeta": { 1961 + "supports-color": { 1962 + "optional": true 1963 + } 1964 + } 1965 + }, 1966 + "node_modules/deep-is": { 1967 + "version": "0.1.4", 1968 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1969 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1970 + "dev": true, 1971 + "license": "MIT" 1972 + }, 1973 + "node_modules/delayed-stream": { 1974 + "version": "1.0.0", 1975 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1976 + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1977 + "dev": true, 1978 + "license": "MIT", 1979 + "engines": { 1980 + "node": ">=0.4.0" 1981 + } 1982 + }, 1983 + "node_modules/dequal": { 1984 + "version": "2.0.3", 1985 + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1986 + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1987 + "license": "MIT", 1988 + "engines": { 1989 + "node": ">=6" 1990 + } 1991 + }, 1992 + "node_modules/dezalgo": { 1993 + "version": "1.0.4", 1994 + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", 1995 + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", 1996 + "dev": true, 1997 + "license": "ISC", 1998 + "dependencies": { 1999 + "asap": "^2.0.0", 2000 + "wrappy": "1" 2001 + } 2002 + }, 2003 + "node_modules/dotenv": { 2004 + "version": "17.3.1", 2005 + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", 2006 + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", 2007 + "license": "BSD-2-Clause", 2008 + "engines": { 2009 + "node": ">=12" 2010 + }, 2011 + "funding": { 2012 + "url": "https://dotenvx.com" 2013 + } 2014 + }, 2015 + "node_modules/dunder-proto": { 2016 + "version": "1.0.1", 2017 + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 2018 + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 2019 + "dev": true, 2020 + "license": "MIT", 2021 + "dependencies": { 2022 + "call-bind-apply-helpers": "^1.0.1", 2023 + "es-errors": "^1.3.0", 2024 + "gopd": "^1.2.0" 2025 + }, 2026 + "engines": { 2027 + "node": ">= 0.4" 2028 + } 2029 + }, 2030 + "node_modules/end-of-stream": { 2031 + "version": "1.4.5", 2032 + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", 2033 + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", 2034 + "license": "MIT", 2035 + "dependencies": { 2036 + "once": "^1.4.0" 2037 + } 2038 + }, 2039 + "node_modules/es-define-property": { 2040 + "version": "1.0.1", 2041 + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 2042 + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 2043 + "dev": true, 2044 + "license": "MIT", 2045 + "engines": { 2046 + "node": ">= 0.4" 2047 + } 2048 + }, 2049 + "node_modules/es-errors": { 2050 + "version": "1.3.0", 2051 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 2052 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 2053 + "dev": true, 2054 + "license": "MIT", 2055 + "engines": { 2056 + "node": ">= 0.4" 2057 + } 2058 + }, 2059 + "node_modules/es-module-lexer": { 2060 + "version": "1.7.0", 2061 + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", 2062 + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", 2063 + "dev": true, 2064 + "license": "MIT" 2065 + }, 2066 + "node_modules/es-object-atoms": { 2067 + "version": "1.1.1", 2068 + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 2069 + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 2070 + "dev": true, 2071 + "license": "MIT", 2072 + "dependencies": { 2073 + "es-errors": "^1.3.0" 2074 + }, 2075 + "engines": { 2076 + "node": ">= 0.4" 2077 + } 2078 + }, 2079 + "node_modules/es-set-tostringtag": { 2080 + "version": "2.1.0", 2081 + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 2082 + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 2083 + "dev": true, 2084 + "license": "MIT", 2085 + "dependencies": { 2086 + "es-errors": "^1.3.0", 2087 + "get-intrinsic": "^1.2.6", 2088 + "has-tostringtag": "^1.0.2", 2089 + "hasown": "^2.0.2" 2090 + }, 2091 + "engines": { 2092 + "node": ">= 0.4" 2093 + } 2094 + }, 2095 + "node_modules/esbuild": { 2096 + "version": "0.27.3", 2097 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 2098 + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 2099 + "dev": true, 2100 + "hasInstallScript": true, 2101 + "license": "MIT", 2102 + "bin": { 2103 + "esbuild": "bin/esbuild" 2104 + }, 2105 + "engines": { 2106 + "node": ">=18" 2107 + }, 2108 + "optionalDependencies": { 2109 + "@esbuild/aix-ppc64": "0.27.3", 2110 + "@esbuild/android-arm": "0.27.3", 2111 + "@esbuild/android-arm64": "0.27.3", 2112 + "@esbuild/android-x64": "0.27.3", 2113 + "@esbuild/darwin-arm64": "0.27.3", 2114 + "@esbuild/darwin-x64": "0.27.3", 2115 + "@esbuild/freebsd-arm64": "0.27.3", 2116 + "@esbuild/freebsd-x64": "0.27.3", 2117 + "@esbuild/linux-arm": "0.27.3", 2118 + "@esbuild/linux-arm64": "0.27.3", 2119 + "@esbuild/linux-ia32": "0.27.3", 2120 + "@esbuild/linux-loong64": "0.27.3", 2121 + "@esbuild/linux-mips64el": "0.27.3", 2122 + "@esbuild/linux-ppc64": "0.27.3", 2123 + "@esbuild/linux-riscv64": "0.27.3", 2124 + "@esbuild/linux-s390x": "0.27.3", 2125 + "@esbuild/linux-x64": "0.27.3", 2126 + "@esbuild/netbsd-arm64": "0.27.3", 2127 + "@esbuild/netbsd-x64": "0.27.3", 2128 + "@esbuild/openbsd-arm64": "0.27.3", 2129 + "@esbuild/openbsd-x64": "0.27.3", 2130 + "@esbuild/openharmony-arm64": "0.27.3", 2131 + "@esbuild/sunos-x64": "0.27.3", 2132 + "@esbuild/win32-arm64": "0.27.3", 2133 + "@esbuild/win32-ia32": "0.27.3", 2134 + "@esbuild/win32-x64": "0.27.3" 2135 + } 2136 + }, 2137 + "node_modules/escape-string-regexp": { 2138 + "version": "4.0.0", 2139 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2140 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2141 + "dev": true, 2142 + "license": "MIT", 2143 + "engines": { 2144 + "node": ">=10" 2145 + }, 2146 + "funding": { 2147 + "url": "https://github.com/sponsors/sindresorhus" 2148 + } 2149 + }, 2150 + "node_modules/eslint": { 2151 + "version": "10.0.3", 2152 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.3.tgz", 2153 + "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==", 2154 + "dev": true, 2155 + "license": "MIT", 2156 + "dependencies": { 2157 + "@eslint-community/eslint-utils": "^4.8.0", 2158 + "@eslint-community/regexpp": "^4.12.2", 2159 + "@eslint/config-array": "^0.23.3", 2160 + "@eslint/config-helpers": "^0.5.2", 2161 + "@eslint/core": "^1.1.1", 2162 + "@eslint/plugin-kit": "^0.6.1", 2163 + "@humanfs/node": "^0.16.6", 2164 + "@humanwhocodes/module-importer": "^1.0.1", 2165 + "@humanwhocodes/retry": "^0.4.2", 2166 + "@types/estree": "^1.0.6", 2167 + "ajv": "^6.14.0", 2168 + "cross-spawn": "^7.0.6", 2169 + "debug": "^4.3.2", 2170 + "escape-string-regexp": "^4.0.0", 2171 + "eslint-scope": "^9.1.2", 2172 + "eslint-visitor-keys": "^5.0.1", 2173 + "espree": "^11.1.1", 2174 + "esquery": "^1.7.0", 2175 + "esutils": "^2.0.2", 2176 + "fast-deep-equal": "^3.1.3", 2177 + "file-entry-cache": "^8.0.0", 2178 + "find-up": "^5.0.0", 2179 + "glob-parent": "^6.0.2", 2180 + "ignore": "^5.2.0", 2181 + "imurmurhash": "^0.1.4", 2182 + "is-glob": "^4.0.0", 2183 + "json-stable-stringify-without-jsonify": "^1.0.1", 2184 + "minimatch": "^10.2.4", 2185 + "natural-compare": "^1.4.0", 2186 + "optionator": "^0.9.3" 2187 + }, 2188 + "bin": { 2189 + "eslint": "bin/eslint.js" 2190 + }, 2191 + "engines": { 2192 + "node": "^20.19.0 || ^22.13.0 || >=24" 2193 + }, 2194 + "funding": { 2195 + "url": "https://eslint.org/donate" 2196 + }, 2197 + "peerDependencies": { 2198 + "jiti": "*" 2199 + }, 2200 + "peerDependenciesMeta": { 2201 + "jiti": { 2202 + "optional": true 2203 + } 2204 + } 2205 + }, 2206 + "node_modules/eslint-scope": { 2207 + "version": "9.1.2", 2208 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", 2209 + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", 2210 + "dev": true, 2211 + "license": "BSD-2-Clause", 2212 + "dependencies": { 2213 + "@types/esrecurse": "^4.3.1", 2214 + "@types/estree": "^1.0.8", 2215 + "esrecurse": "^4.3.0", 2216 + "estraverse": "^5.2.0" 2217 + }, 2218 + "engines": { 2219 + "node": "^20.19.0 || ^22.13.0 || >=24" 2220 + }, 2221 + "funding": { 2222 + "url": "https://opencollective.com/eslint" 2223 + } 2224 + }, 2225 + "node_modules/eslint-visitor-keys": { 2226 + "version": "3.4.3", 2227 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 2228 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 2229 + "dev": true, 2230 + "license": "Apache-2.0", 2231 + "engines": { 2232 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2233 + }, 2234 + "funding": { 2235 + "url": "https://opencollective.com/eslint" 2236 + } 2237 + }, 2238 + "node_modules/eslint/node_modules/ajv": { 2239 + "version": "6.14.0", 2240 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", 2241 + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", 2242 + "dev": true, 2243 + "license": "MIT", 2244 + "dependencies": { 2245 + "fast-deep-equal": "^3.1.1", 2246 + "fast-json-stable-stringify": "^2.0.0", 2247 + "json-schema-traverse": "^0.4.1", 2248 + "uri-js": "^4.2.2" 2249 + }, 2250 + "funding": { 2251 + "type": "github", 2252 + "url": "https://github.com/sponsors/epoberezkin" 2253 + } 2254 + }, 2255 + "node_modules/eslint/node_modules/eslint-visitor-keys": { 2256 + "version": "5.0.1", 2257 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", 2258 + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", 2259 + "dev": true, 2260 + "license": "Apache-2.0", 2261 + "engines": { 2262 + "node": "^20.19.0 || ^22.13.0 || >=24" 2263 + }, 2264 + "funding": { 2265 + "url": "https://opencollective.com/eslint" 2266 + } 2267 + }, 2268 + "node_modules/eslint/node_modules/ignore": { 2269 + "version": "5.3.2", 2270 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 2271 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 2272 + "dev": true, 2273 + "license": "MIT", 2274 + "engines": { 2275 + "node": ">= 4" 2276 + } 2277 + }, 2278 + "node_modules/eslint/node_modules/json-schema-traverse": { 2279 + "version": "0.4.1", 2280 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2281 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2282 + "dev": true, 2283 + "license": "MIT" 2284 + }, 2285 + "node_modules/espree": { 2286 + "version": "11.2.0", 2287 + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", 2288 + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", 2289 + "dev": true, 2290 + "license": "BSD-2-Clause", 2291 + "dependencies": { 2292 + "acorn": "^8.16.0", 2293 + "acorn-jsx": "^5.3.2", 2294 + "eslint-visitor-keys": "^5.0.1" 2295 + }, 2296 + "engines": { 2297 + "node": "^20.19.0 || ^22.13.0 || >=24" 2298 + }, 2299 + "funding": { 2300 + "url": "https://opencollective.com/eslint" 2301 + } 2302 + }, 2303 + "node_modules/espree/node_modules/eslint-visitor-keys": { 2304 + "version": "5.0.1", 2305 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", 2306 + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", 2307 + "dev": true, 2308 + "license": "Apache-2.0", 2309 + "engines": { 2310 + "node": "^20.19.0 || ^22.13.0 || >=24" 2311 + }, 2312 + "funding": { 2313 + "url": "https://opencollective.com/eslint" 2314 + } 2315 + }, 2316 + "node_modules/esquery": { 2317 + "version": "1.7.0", 2318 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", 2319 + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", 2320 + "dev": true, 2321 + "license": "BSD-3-Clause", 2322 + "dependencies": { 2323 + "estraverse": "^5.1.0" 2324 + }, 2325 + "engines": { 2326 + "node": ">=0.10" 2327 + } 2328 + }, 2329 + "node_modules/esrecurse": { 2330 + "version": "4.3.0", 2331 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2332 + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2333 + "dev": true, 2334 + "license": "BSD-2-Clause", 2335 + "dependencies": { 2336 + "estraverse": "^5.2.0" 2337 + }, 2338 + "engines": { 2339 + "node": ">=4.0" 2340 + } 2341 + }, 2342 + "node_modules/estraverse": { 2343 + "version": "5.3.0", 2344 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2345 + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2346 + "dev": true, 2347 + "license": "BSD-2-Clause", 2348 + "engines": { 2349 + "node": ">=4.0" 2350 + } 2351 + }, 2352 + "node_modules/estree-walker": { 2353 + "version": "3.0.3", 2354 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 2355 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 2356 + "dev": true, 2357 + "license": "MIT", 2358 + "dependencies": { 2359 + "@types/estree": "^1.0.0" 2360 + } 2361 + }, 2362 + "node_modules/esutils": { 2363 + "version": "2.0.3", 2364 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2365 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2366 + "dev": true, 2367 + "license": "BSD-2-Clause", 2368 + "engines": { 2369 + "node": ">=0.10.0" 2370 + } 2371 + }, 2372 + "node_modules/expect-type": { 2373 + "version": "1.3.0", 2374 + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", 2375 + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", 2376 + "dev": true, 2377 + "license": "Apache-2.0", 2378 + "engines": { 2379 + "node": ">=12.0.0" 2380 + } 2381 + }, 2382 + "node_modules/fast-copy": { 2383 + "version": "4.0.2", 2384 + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz", 2385 + "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==", 2386 + "license": "MIT" 2387 + }, 2388 + "node_modules/fast-decode-uri-component": { 2389 + "version": "1.0.1", 2390 + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", 2391 + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", 2392 + "license": "MIT" 2393 + }, 2394 + "node_modules/fast-deep-equal": { 2395 + "version": "3.1.3", 2396 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2397 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2398 + "license": "MIT" 2399 + }, 2400 + "node_modules/fast-json-stable-stringify": { 2401 + "version": "2.1.0", 2402 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2403 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2404 + "dev": true, 2405 + "license": "MIT" 2406 + }, 2407 + "node_modules/fast-json-stringify": { 2408 + "version": "6.3.0", 2409 + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.3.0.tgz", 2410 + "integrity": "sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==", 2411 + "funding": [ 2412 + { 2413 + "type": "github", 2414 + "url": "https://github.com/sponsors/fastify" 2415 + }, 2416 + { 2417 + "type": "opencollective", 2418 + "url": "https://opencollective.com/fastify" 2419 + } 2420 + ], 2421 + "license": "MIT", 2422 + "dependencies": { 2423 + "@fastify/merge-json-schemas": "^0.2.0", 2424 + "ajv": "^8.12.0", 2425 + "ajv-formats": "^3.0.1", 2426 + "fast-uri": "^3.0.0", 2427 + "json-schema-ref-resolver": "^3.0.0", 2428 + "rfdc": "^1.2.0" 2429 + } 2430 + }, 2431 + "node_modules/fast-levenshtein": { 2432 + "version": "2.0.6", 2433 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2434 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2435 + "dev": true, 2436 + "license": "MIT" 2437 + }, 2438 + "node_modules/fast-querystring": { 2439 + "version": "1.1.2", 2440 + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", 2441 + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", 2442 + "license": "MIT", 2443 + "dependencies": { 2444 + "fast-decode-uri-component": "^1.0.1" 2445 + } 2446 + }, 2447 + "node_modules/fast-safe-stringify": { 2448 + "version": "2.1.1", 2449 + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 2450 + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", 2451 + "license": "MIT" 2452 + }, 2453 + "node_modules/fast-uri": { 2454 + "version": "3.1.0", 2455 + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", 2456 + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", 2457 + "funding": [ 2458 + { 2459 + "type": "github", 2460 + "url": "https://github.com/sponsors/fastify" 2461 + }, 2462 + { 2463 + "type": "opencollective", 2464 + "url": "https://opencollective.com/fastify" 2465 + } 2466 + ], 2467 + "license": "BSD-3-Clause" 2468 + }, 2469 + "node_modules/fastify": { 2470 + "version": "5.8.2", 2471 + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.8.2.tgz", 2472 + "integrity": "sha512-lZmt3navvZG915IE+f7/TIVamxIwmBd+OMB+O9WBzcpIwOo6F0LTh0sluoMFk5VkrKTvvrwIaoJPkir4Z+jtAg==", 2473 + "funding": [ 2474 + { 2475 + "type": "github", 2476 + "url": "https://github.com/sponsors/fastify" 2477 + }, 2478 + { 2479 + "type": "opencollective", 2480 + "url": "https://opencollective.com/fastify" 2481 + } 2482 + ], 2483 + "license": "MIT", 2484 + "dependencies": { 2485 + "@fastify/ajv-compiler": "^4.0.5", 2486 + "@fastify/error": "^4.0.0", 2487 + "@fastify/fast-json-stringify-compiler": "^5.0.0", 2488 + "@fastify/proxy-addr": "^5.0.0", 2489 + "abstract-logging": "^2.0.1", 2490 + "avvio": "^9.0.0", 2491 + "fast-json-stringify": "^6.0.0", 2492 + "find-my-way": "^9.0.0", 2493 + "light-my-request": "^6.0.0", 2494 + "pino": "^9.14.0 || ^10.1.0", 2495 + "process-warning": "^5.0.0", 2496 + "rfdc": "^1.3.1", 2497 + "secure-json-parse": "^4.0.0", 2498 + "semver": "^7.6.0", 2499 + "toad-cache": "^3.7.0" 2500 + } 2501 + }, 2502 + "node_modules/fastify-plugin": { 2503 + "version": "5.1.0", 2504 + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.1.0.tgz", 2505 + "integrity": "sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==", 2506 + "funding": [ 2507 + { 2508 + "type": "github", 2509 + "url": "https://github.com/sponsors/fastify" 2510 + }, 2511 + { 2512 + "type": "opencollective", 2513 + "url": "https://opencollective.com/fastify" 2514 + } 2515 + ], 2516 + "license": "MIT" 2517 + }, 2518 + "node_modules/fastq": { 2519 + "version": "1.20.1", 2520 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", 2521 + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", 2522 + "license": "ISC", 2523 + "dependencies": { 2524 + "reusify": "^1.0.4" 2525 + } 2526 + }, 2527 + "node_modules/fdir": { 2528 + "version": "6.5.0", 2529 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2530 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2531 + "dev": true, 2532 + "license": "MIT", 2533 + "engines": { 2534 + "node": ">=12.0.0" 2535 + }, 2536 + "peerDependencies": { 2537 + "picomatch": "^3 || ^4" 2538 + }, 2539 + "peerDependenciesMeta": { 2540 + "picomatch": { 2541 + "optional": true 2542 + } 2543 + } 2544 + }, 2545 + "node_modules/file-entry-cache": { 2546 + "version": "8.0.0", 2547 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2548 + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2549 + "dev": true, 2550 + "license": "MIT", 2551 + "dependencies": { 2552 + "flat-cache": "^4.0.0" 2553 + }, 2554 + "engines": { 2555 + "node": ">=16.0.0" 2556 + } 2557 + }, 2558 + "node_modules/find-my-way": { 2559 + "version": "9.5.0", 2560 + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.5.0.tgz", 2561 + "integrity": "sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==", 2562 + "license": "MIT", 2563 + "dependencies": { 2564 + "fast-deep-equal": "^3.1.3", 2565 + "fast-querystring": "^1.0.0", 2566 + "safe-regex2": "^5.0.0" 2567 + }, 2568 + "engines": { 2569 + "node": ">=20" 2570 + } 2571 + }, 2572 + "node_modules/find-up": { 2573 + "version": "5.0.0", 2574 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2575 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2576 + "dev": true, 2577 + "license": "MIT", 2578 + "dependencies": { 2579 + "locate-path": "^6.0.0", 2580 + "path-exists": "^4.0.0" 2581 + }, 2582 + "engines": { 2583 + "node": ">=10" 2584 + }, 2585 + "funding": { 2586 + "url": "https://github.com/sponsors/sindresorhus" 2587 + } 2588 + }, 2589 + "node_modules/flat-cache": { 2590 + "version": "4.0.1", 2591 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2592 + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2593 + "dev": true, 2594 + "license": "MIT", 2595 + "dependencies": { 2596 + "flatted": "^3.2.9", 2597 + "keyv": "^4.5.4" 2598 + }, 2599 + "engines": { 2600 + "node": ">=16" 2601 + } 2602 + }, 2603 + "node_modules/flatted": { 2604 + "version": "3.3.4", 2605 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.4.tgz", 2606 + "integrity": "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==", 2607 + "dev": true, 2608 + "license": "ISC" 2609 + }, 2610 + "node_modules/form-data": { 2611 + "version": "4.0.5", 2612 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", 2613 + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", 2614 + "dev": true, 2615 + "license": "MIT", 2616 + "dependencies": { 2617 + "asynckit": "^0.4.0", 2618 + "combined-stream": "^1.0.8", 2619 + "es-set-tostringtag": "^2.1.0", 2620 + "hasown": "^2.0.2", 2621 + "mime-types": "^2.1.12" 2622 + }, 2623 + "engines": { 2624 + "node": ">= 6" 2625 + } 2626 + }, 2627 + "node_modules/formidable": { 2628 + "version": "3.5.4", 2629 + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", 2630 + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", 2631 + "dev": true, 2632 + "license": "MIT", 2633 + "dependencies": { 2634 + "@paralleldrive/cuid2": "^2.2.2", 2635 + "dezalgo": "^1.0.4", 2636 + "once": "^1.4.0" 2637 + }, 2638 + "engines": { 2639 + "node": ">=14.0.0" 2640 + }, 2641 + "funding": { 2642 + "url": "https://ko-fi.com/tunnckoCore/commissions" 2643 + } 2644 + }, 2645 + "node_modules/fsevents": { 2646 + "version": "2.3.3", 2647 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2648 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2649 + "dev": true, 2650 + "hasInstallScript": true, 2651 + "license": "MIT", 2652 + "optional": true, 2653 + "os": [ 2654 + "darwin" 2655 + ], 2656 + "engines": { 2657 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2658 + } 2659 + }, 2660 + "node_modules/function-bind": { 2661 + "version": "1.1.2", 2662 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2663 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2664 + "dev": true, 2665 + "license": "MIT", 2666 + "funding": { 2667 + "url": "https://github.com/sponsors/ljharb" 2668 + } 2669 + }, 2670 + "node_modules/get-intrinsic": { 2671 + "version": "1.3.0", 2672 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 2673 + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 2674 + "dev": true, 2675 + "license": "MIT", 2676 + "dependencies": { 2677 + "call-bind-apply-helpers": "^1.0.2", 2678 + "es-define-property": "^1.0.1", 2679 + "es-errors": "^1.3.0", 2680 + "es-object-atoms": "^1.1.1", 2681 + "function-bind": "^1.1.2", 2682 + "get-proto": "^1.0.1", 2683 + "gopd": "^1.2.0", 2684 + "has-symbols": "^1.1.0", 2685 + "hasown": "^2.0.2", 2686 + "math-intrinsics": "^1.1.0" 2687 + }, 2688 + "engines": { 2689 + "node": ">= 0.4" 2690 + }, 2691 + "funding": { 2692 + "url": "https://github.com/sponsors/ljharb" 2693 + } 2694 + }, 2695 + "node_modules/get-proto": { 2696 + "version": "1.0.1", 2697 + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 2698 + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 2699 + "dev": true, 2700 + "license": "MIT", 2701 + "dependencies": { 2702 + "dunder-proto": "^1.0.1", 2703 + "es-object-atoms": "^1.0.0" 2704 + }, 2705 + "engines": { 2706 + "node": ">= 0.4" 2707 + } 2708 + }, 2709 + "node_modules/get-tsconfig": { 2710 + "version": "4.13.6", 2711 + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", 2712 + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", 2713 + "dev": true, 2714 + "license": "MIT", 2715 + "dependencies": { 2716 + "resolve-pkg-maps": "^1.0.0" 2717 + }, 2718 + "funding": { 2719 + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 2720 + } 2721 + }, 2722 + "node_modules/glob-parent": { 2723 + "version": "6.0.2", 2724 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2725 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2726 + "dev": true, 2727 + "license": "ISC", 2728 + "dependencies": { 2729 + "is-glob": "^4.0.3" 2730 + }, 2731 + "engines": { 2732 + "node": ">=10.13.0" 2733 + } 2734 + }, 2735 + "node_modules/gopd": { 2736 + "version": "1.2.0", 2737 + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 2738 + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 2739 + "dev": true, 2740 + "license": "MIT", 2741 + "engines": { 2742 + "node": ">= 0.4" 2743 + }, 2744 + "funding": { 2745 + "url": "https://github.com/sponsors/ljharb" 2746 + } 2747 + }, 2748 + "node_modules/has-symbols": { 2749 + "version": "1.1.0", 2750 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 2751 + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 2752 + "dev": true, 2753 + "license": "MIT", 2754 + "engines": { 2755 + "node": ">= 0.4" 2756 + }, 2757 + "funding": { 2758 + "url": "https://github.com/sponsors/ljharb" 2759 + } 2760 + }, 2761 + "node_modules/has-tostringtag": { 2762 + "version": "1.0.2", 2763 + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 2764 + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 2765 + "dev": true, 2766 + "license": "MIT", 2767 + "dependencies": { 2768 + "has-symbols": "^1.0.3" 2769 + }, 2770 + "engines": { 2771 + "node": ">= 0.4" 2772 + }, 2773 + "funding": { 2774 + "url": "https://github.com/sponsors/ljharb" 2775 + } 2776 + }, 2777 + "node_modules/hasown": { 2778 + "version": "2.0.2", 2779 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2780 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2781 + "dev": true, 2782 + "license": "MIT", 2783 + "dependencies": { 2784 + "function-bind": "^1.1.2" 2785 + }, 2786 + "engines": { 2787 + "node": ">= 0.4" 2788 + } 2789 + }, 2790 + "node_modules/helmet": { 2791 + "version": "8.1.0", 2792 + "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", 2793 + "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==", 2794 + "license": "MIT", 2795 + "engines": { 2796 + "node": ">=18.0.0" 2797 + } 2798 + }, 2799 + "node_modules/help-me": { 2800 + "version": "5.0.0", 2801 + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", 2802 + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", 2803 + "license": "MIT" 2804 + }, 2805 + "node_modules/ignore": { 2806 + "version": "7.0.5", 2807 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", 2808 + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", 2809 + "dev": true, 2810 + "license": "MIT", 2811 + "engines": { 2812 + "node": ">= 4" 2813 + } 2814 + }, 2815 + "node_modules/imurmurhash": { 2816 + "version": "0.1.4", 2817 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2818 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2819 + "dev": true, 2820 + "license": "MIT", 2821 + "engines": { 2822 + "node": ">=0.8.19" 2823 + } 2824 + }, 2825 + "node_modules/ipaddr.js": { 2826 + "version": "2.3.0", 2827 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", 2828 + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", 2829 + "license": "MIT", 2830 + "engines": { 2831 + "node": ">= 10" 2832 + } 2833 + }, 2834 + "node_modules/is-extglob": { 2835 + "version": "2.1.1", 2836 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2837 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2838 + "dev": true, 2839 + "license": "MIT", 2840 + "engines": { 2841 + "node": ">=0.10.0" 2842 + } 2843 + }, 2844 + "node_modules/is-glob": { 2845 + "version": "4.0.3", 2846 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2847 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2848 + "dev": true, 2849 + "license": "MIT", 2850 + "dependencies": { 2851 + "is-extglob": "^2.1.1" 2852 + }, 2853 + "engines": { 2854 + "node": ">=0.10.0" 2855 + } 2856 + }, 2857 + "node_modules/isexe": { 2858 + "version": "2.0.0", 2859 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2860 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2861 + "dev": true, 2862 + "license": "ISC" 2863 + }, 2864 + "node_modules/joycon": { 2865 + "version": "3.1.1", 2866 + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", 2867 + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", 2868 + "license": "MIT", 2869 + "engines": { 2870 + "node": ">=10" 2871 + } 2872 + }, 2873 + "node_modules/json-buffer": { 2874 + "version": "3.0.1", 2875 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2876 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2877 + "dev": true, 2878 + "license": "MIT" 2879 + }, 2880 + "node_modules/json-schema-ref-resolver": { 2881 + "version": "3.0.0", 2882 + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz", 2883 + "integrity": "sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==", 2884 + "funding": [ 2885 + { 2886 + "type": "github", 2887 + "url": "https://github.com/sponsors/fastify" 2888 + }, 2889 + { 2890 + "type": "opencollective", 2891 + "url": "https://opencollective.com/fastify" 2892 + } 2893 + ], 2894 + "license": "MIT", 2895 + "dependencies": { 2896 + "dequal": "^2.0.3" 2897 + } 2898 + }, 2899 + "node_modules/json-schema-traverse": { 2900 + "version": "1.0.0", 2901 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2902 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2903 + "license": "MIT" 2904 + }, 2905 + "node_modules/json-stable-stringify-without-jsonify": { 2906 + "version": "1.0.1", 2907 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2908 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2909 + "dev": true, 2910 + "license": "MIT" 2911 + }, 2912 + "node_modules/keyv": { 2913 + "version": "4.5.4", 2914 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2915 + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2916 + "dev": true, 2917 + "license": "MIT", 2918 + "dependencies": { 2919 + "json-buffer": "3.0.1" 2920 + } 2921 + }, 2922 + "node_modules/levn": { 2923 + "version": "0.4.1", 2924 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2925 + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2926 + "dev": true, 2927 + "license": "MIT", 2928 + "dependencies": { 2929 + "prelude-ls": "^1.2.1", 2930 + "type-check": "~0.4.0" 2931 + }, 2932 + "engines": { 2933 + "node": ">= 0.8.0" 2934 + } 2935 + }, 2936 + "node_modules/light-my-request": { 2937 + "version": "6.6.0", 2938 + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz", 2939 + "integrity": "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==", 2940 + "funding": [ 2941 + { 2942 + "type": "github", 2943 + "url": "https://github.com/sponsors/fastify" 2944 + }, 2945 + { 2946 + "type": "opencollective", 2947 + "url": "https://opencollective.com/fastify" 2948 + } 2949 + ], 2950 + "license": "BSD-3-Clause", 2951 + "dependencies": { 2952 + "cookie": "^1.0.1", 2953 + "process-warning": "^4.0.0", 2954 + "set-cookie-parser": "^2.6.0" 2955 + } 2956 + }, 2957 + "node_modules/light-my-request/node_modules/process-warning": { 2958 + "version": "4.0.1", 2959 + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", 2960 + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", 2961 + "funding": [ 2962 + { 2963 + "type": "github", 2964 + "url": "https://github.com/sponsors/fastify" 2965 + }, 2966 + { 2967 + "type": "opencollective", 2968 + "url": "https://opencollective.com/fastify" 2969 + } 2970 + ], 2971 + "license": "MIT" 2972 + }, 2973 + "node_modules/locate-path": { 2974 + "version": "6.0.0", 2975 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2976 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2977 + "dev": true, 2978 + "license": "MIT", 2979 + "dependencies": { 2980 + "p-locate": "^5.0.0" 2981 + }, 2982 + "engines": { 2983 + "node": ">=10" 2984 + }, 2985 + "funding": { 2986 + "url": "https://github.com/sponsors/sindresorhus" 2987 + } 2988 + }, 2989 + "node_modules/magic-string": { 2990 + "version": "0.30.21", 2991 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 2992 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 2993 + "dev": true, 2994 + "license": "MIT", 2995 + "dependencies": { 2996 + "@jridgewell/sourcemap-codec": "^1.5.5" 2997 + } 2998 + }, 2999 + "node_modules/math-intrinsics": { 3000 + "version": "1.1.0", 3001 + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 3002 + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 3003 + "dev": true, 3004 + "license": "MIT", 3005 + "engines": { 3006 + "node": ">= 0.4" 3007 + } 3008 + }, 3009 + "node_modules/methods": { 3010 + "version": "1.1.2", 3011 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 3012 + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 3013 + "dev": true, 3014 + "license": "MIT", 3015 + "engines": { 3016 + "node": ">= 0.6" 3017 + } 3018 + }, 3019 + "node_modules/mime": { 3020 + "version": "2.6.0", 3021 + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 3022 + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", 3023 + "dev": true, 3024 + "license": "MIT", 3025 + "bin": { 3026 + "mime": "cli.js" 3027 + }, 3028 + "engines": { 3029 + "node": ">=4.0.0" 3030 + } 3031 + }, 3032 + "node_modules/mime-db": { 3033 + "version": "1.52.0", 3034 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 3035 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 3036 + "dev": true, 3037 + "license": "MIT", 3038 + "engines": { 3039 + "node": ">= 0.6" 3040 + } 3041 + }, 3042 + "node_modules/mime-types": { 3043 + "version": "2.1.35", 3044 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 3045 + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 3046 + "dev": true, 3047 + "license": "MIT", 3048 + "dependencies": { 3049 + "mime-db": "1.52.0" 3050 + }, 3051 + "engines": { 3052 + "node": ">= 0.6" 3053 + } 3054 + }, 3055 + "node_modules/minimatch": { 3056 + "version": "10.2.4", 3057 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", 3058 + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", 3059 + "dev": true, 3060 + "license": "BlueOak-1.0.0", 3061 + "dependencies": { 3062 + "brace-expansion": "^5.0.2" 3063 + }, 3064 + "engines": { 3065 + "node": "18 || 20 || >=22" 3066 + }, 3067 + "funding": { 3068 + "url": "https://github.com/sponsors/isaacs" 3069 + } 3070 + }, 3071 + "node_modules/minimist": { 3072 + "version": "1.2.8", 3073 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 3074 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 3075 + "license": "MIT", 3076 + "funding": { 3077 + "url": "https://github.com/sponsors/ljharb" 3078 + } 3079 + }, 3080 + "node_modules/ms": { 3081 + "version": "2.1.3", 3082 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3083 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3084 + "dev": true, 3085 + "license": "MIT" 3086 + }, 3087 + "node_modules/nanoid": { 3088 + "version": "3.3.11", 3089 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 3090 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 3091 + "dev": true, 3092 + "funding": [ 3093 + { 3094 + "type": "github", 3095 + "url": "https://github.com/sponsors/ai" 3096 + } 3097 + ], 3098 + "license": "MIT", 3099 + "bin": { 3100 + "nanoid": "bin/nanoid.cjs" 3101 + }, 3102 + "engines": { 3103 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 3104 + } 3105 + }, 3106 + "node_modules/natural-compare": { 3107 + "version": "1.4.0", 3108 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3109 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3110 + "dev": true, 3111 + "license": "MIT" 3112 + }, 3113 + "node_modules/object-inspect": { 3114 + "version": "1.13.4", 3115 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 3116 + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 3117 + "dev": true, 3118 + "license": "MIT", 3119 + "engines": { 3120 + "node": ">= 0.4" 3121 + }, 3122 + "funding": { 3123 + "url": "https://github.com/sponsors/ljharb" 3124 + } 3125 + }, 3126 + "node_modules/obug": { 3127 + "version": "2.1.1", 3128 + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", 3129 + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", 3130 + "dev": true, 3131 + "funding": [ 3132 + "https://github.com/sponsors/sxzz", 3133 + "https://opencollective.com/debug" 3134 + ], 3135 + "license": "MIT" 3136 + }, 3137 + "node_modules/on-exit-leak-free": { 3138 + "version": "2.1.2", 3139 + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", 3140 + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", 3141 + "license": "MIT", 3142 + "engines": { 3143 + "node": ">=14.0.0" 3144 + } 3145 + }, 3146 + "node_modules/once": { 3147 + "version": "1.4.0", 3148 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3149 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3150 + "license": "ISC", 3151 + "dependencies": { 3152 + "wrappy": "1" 3153 + } 3154 + }, 3155 + "node_modules/optionator": { 3156 + "version": "0.9.4", 3157 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 3158 + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 3159 + "dev": true, 3160 + "license": "MIT", 3161 + "dependencies": { 3162 + "deep-is": "^0.1.3", 3163 + "fast-levenshtein": "^2.0.6", 3164 + "levn": "^0.4.1", 3165 + "prelude-ls": "^1.2.1", 3166 + "type-check": "^0.4.0", 3167 + "word-wrap": "^1.2.5" 3168 + }, 3169 + "engines": { 3170 + "node": ">= 0.8.0" 3171 + } 3172 + }, 3173 + "node_modules/p-limit": { 3174 + "version": "3.1.0", 3175 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3176 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3177 + "dev": true, 3178 + "license": "MIT", 3179 + "dependencies": { 3180 + "yocto-queue": "^0.1.0" 3181 + }, 3182 + "engines": { 3183 + "node": ">=10" 3184 + }, 3185 + "funding": { 3186 + "url": "https://github.com/sponsors/sindresorhus" 3187 + } 3188 + }, 3189 + "node_modules/p-locate": { 3190 + "version": "5.0.0", 3191 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3192 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3193 + "dev": true, 3194 + "license": "MIT", 3195 + "dependencies": { 3196 + "p-limit": "^3.0.2" 3197 + }, 3198 + "engines": { 3199 + "node": ">=10" 3200 + }, 3201 + "funding": { 3202 + "url": "https://github.com/sponsors/sindresorhus" 3203 + } 3204 + }, 3205 + "node_modules/path-exists": { 3206 + "version": "4.0.0", 3207 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3208 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3209 + "dev": true, 3210 + "license": "MIT", 3211 + "engines": { 3212 + "node": ">=8" 3213 + } 3214 + }, 3215 + "node_modules/path-key": { 3216 + "version": "3.1.1", 3217 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3218 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3219 + "dev": true, 3220 + "license": "MIT", 3221 + "engines": { 3222 + "node": ">=8" 3223 + } 3224 + }, 3225 + "node_modules/pathe": { 3226 + "version": "2.0.3", 3227 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 3228 + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 3229 + "dev": true, 3230 + "license": "MIT" 3231 + }, 3232 + "node_modules/picocolors": { 3233 + "version": "1.1.1", 3234 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 3235 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 3236 + "dev": true, 3237 + "license": "ISC" 3238 + }, 3239 + "node_modules/picomatch": { 3240 + "version": "4.0.3", 3241 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 3242 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 3243 + "dev": true, 3244 + "license": "MIT", 3245 + "engines": { 3246 + "node": ">=12" 3247 + }, 3248 + "funding": { 3249 + "url": "https://github.com/sponsors/jonschlinkert" 3250 + } 3251 + }, 3252 + "node_modules/pino": { 3253 + "version": "10.3.1", 3254 + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz", 3255 + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==", 3256 + "license": "MIT", 3257 + "dependencies": { 3258 + "@pinojs/redact": "^0.4.0", 3259 + "atomic-sleep": "^1.0.0", 3260 + "on-exit-leak-free": "^2.1.0", 3261 + "pino-abstract-transport": "^3.0.0", 3262 + "pino-std-serializers": "^7.0.0", 3263 + "process-warning": "^5.0.0", 3264 + "quick-format-unescaped": "^4.0.3", 3265 + "real-require": "^0.2.0", 3266 + "safe-stable-stringify": "^2.3.1", 3267 + "sonic-boom": "^4.0.1", 3268 + "thread-stream": "^4.0.0" 3269 + }, 3270 + "bin": { 3271 + "pino": "bin.js" 3272 + } 3273 + }, 3274 + "node_modules/pino-abstract-transport": { 3275 + "version": "3.0.0", 3276 + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", 3277 + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", 3278 + "license": "MIT", 3279 + "dependencies": { 3280 + "split2": "^4.0.0" 3281 + } 3282 + }, 3283 + "node_modules/pino-pretty": { 3284 + "version": "13.1.3", 3285 + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz", 3286 + "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==", 3287 + "license": "MIT", 3288 + "dependencies": { 3289 + "colorette": "^2.0.7", 3290 + "dateformat": "^4.6.3", 3291 + "fast-copy": "^4.0.0", 3292 + "fast-safe-stringify": "^2.1.1", 3293 + "help-me": "^5.0.0", 3294 + "joycon": "^3.1.1", 3295 + "minimist": "^1.2.6", 3296 + "on-exit-leak-free": "^2.1.0", 3297 + "pino-abstract-transport": "^3.0.0", 3298 + "pump": "^3.0.0", 3299 + "secure-json-parse": "^4.0.0", 3300 + "sonic-boom": "^4.0.1", 3301 + "strip-json-comments": "^5.0.2" 3302 + }, 3303 + "bin": { 3304 + "pino-pretty": "bin.js" 3305 + } 3306 + }, 3307 + "node_modules/pino-std-serializers": { 3308 + "version": "7.1.0", 3309 + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", 3310 + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", 3311 + "license": "MIT" 3312 + }, 3313 + "node_modules/postcss": { 3314 + "version": "8.5.8", 3315 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", 3316 + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", 3317 + "dev": true, 3318 + "funding": [ 3319 + { 3320 + "type": "opencollective", 3321 + "url": "https://opencollective.com/postcss/" 3322 + }, 3323 + { 3324 + "type": "tidelift", 3325 + "url": "https://tidelift.com/funding/github/npm/postcss" 3326 + }, 3327 + { 3328 + "type": "github", 3329 + "url": "https://github.com/sponsors/ai" 3330 + } 3331 + ], 3332 + "license": "MIT", 3333 + "dependencies": { 3334 + "nanoid": "^3.3.11", 3335 + "picocolors": "^1.1.1", 3336 + "source-map-js": "^1.2.1" 3337 + }, 3338 + "engines": { 3339 + "node": "^10 || ^12 || >=14" 3340 + } 3341 + }, 3342 + "node_modules/prelude-ls": { 3343 + "version": "1.2.1", 3344 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3345 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3346 + "dev": true, 3347 + "license": "MIT", 3348 + "engines": { 3349 + "node": ">= 0.8.0" 3350 + } 3351 + }, 3352 + "node_modules/process-warning": { 3353 + "version": "5.0.0", 3354 + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", 3355 + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", 3356 + "funding": [ 3357 + { 3358 + "type": "github", 3359 + "url": "https://github.com/sponsors/fastify" 3360 + }, 3361 + { 3362 + "type": "opencollective", 3363 + "url": "https://opencollective.com/fastify" 3364 + } 3365 + ], 3366 + "license": "MIT" 3367 + }, 3368 + "node_modules/pump": { 3369 + "version": "3.0.4", 3370 + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", 3371 + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", 3372 + "license": "MIT", 3373 + "dependencies": { 3374 + "end-of-stream": "^1.1.0", 3375 + "once": "^1.3.1" 3376 + } 3377 + }, 3378 + "node_modules/punycode": { 3379 + "version": "2.3.1", 3380 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3381 + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3382 + "dev": true, 3383 + "license": "MIT", 3384 + "engines": { 3385 + "node": ">=6" 3386 + } 3387 + }, 3388 + "node_modules/qs": { 3389 + "version": "6.15.0", 3390 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", 3391 + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", 3392 + "dev": true, 3393 + "license": "BSD-3-Clause", 3394 + "dependencies": { 3395 + "side-channel": "^1.1.0" 3396 + }, 3397 + "engines": { 3398 + "node": ">=0.6" 3399 + }, 3400 + "funding": { 3401 + "url": "https://github.com/sponsors/ljharb" 3402 + } 3403 + }, 3404 + "node_modules/quick-format-unescaped": { 3405 + "version": "4.0.4", 3406 + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 3407 + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", 3408 + "license": "MIT" 3409 + }, 3410 + "node_modules/real-require": { 3411 + "version": "0.2.0", 3412 + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", 3413 + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", 3414 + "license": "MIT", 3415 + "engines": { 3416 + "node": ">= 12.13.0" 3417 + } 3418 + }, 3419 + "node_modules/require-from-string": { 3420 + "version": "2.0.2", 3421 + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 3422 + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 3423 + "license": "MIT", 3424 + "engines": { 3425 + "node": ">=0.10.0" 3426 + } 3427 + }, 3428 + "node_modules/resolve-pkg-maps": { 3429 + "version": "1.0.0", 3430 + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 3431 + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 3432 + "dev": true, 3433 + "license": "MIT", 3434 + "funding": { 3435 + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 3436 + } 3437 + }, 3438 + "node_modules/ret": { 3439 + "version": "0.5.0", 3440 + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", 3441 + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", 3442 + "license": "MIT", 3443 + "engines": { 3444 + "node": ">=10" 3445 + } 3446 + }, 3447 + "node_modules/reusify": { 3448 + "version": "1.1.0", 3449 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 3450 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 3451 + "license": "MIT", 3452 + "engines": { 3453 + "iojs": ">=1.0.0", 3454 + "node": ">=0.10.0" 3455 + } 3456 + }, 3457 + "node_modules/rfdc": { 3458 + "version": "1.4.1", 3459 + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", 3460 + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", 3461 + "license": "MIT" 3462 + }, 3463 + "node_modules/rollup": { 3464 + "version": "4.59.0", 3465 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", 3466 + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", 3467 + "dev": true, 3468 + "license": "MIT", 3469 + "dependencies": { 3470 + "@types/estree": "1.0.8" 3471 + }, 3472 + "bin": { 3473 + "rollup": "dist/bin/rollup" 3474 + }, 3475 + "engines": { 3476 + "node": ">=18.0.0", 3477 + "npm": ">=8.0.0" 3478 + }, 3479 + "optionalDependencies": { 3480 + "@rollup/rollup-android-arm-eabi": "4.59.0", 3481 + "@rollup/rollup-android-arm64": "4.59.0", 3482 + "@rollup/rollup-darwin-arm64": "4.59.0", 3483 + "@rollup/rollup-darwin-x64": "4.59.0", 3484 + "@rollup/rollup-freebsd-arm64": "4.59.0", 3485 + "@rollup/rollup-freebsd-x64": "4.59.0", 3486 + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", 3487 + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", 3488 + "@rollup/rollup-linux-arm64-gnu": "4.59.0", 3489 + "@rollup/rollup-linux-arm64-musl": "4.59.0", 3490 + "@rollup/rollup-linux-loong64-gnu": "4.59.0", 3491 + "@rollup/rollup-linux-loong64-musl": "4.59.0", 3492 + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", 3493 + "@rollup/rollup-linux-ppc64-musl": "4.59.0", 3494 + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", 3495 + "@rollup/rollup-linux-riscv64-musl": "4.59.0", 3496 + "@rollup/rollup-linux-s390x-gnu": "4.59.0", 3497 + "@rollup/rollup-linux-x64-gnu": "4.59.0", 3498 + "@rollup/rollup-linux-x64-musl": "4.59.0", 3499 + "@rollup/rollup-openbsd-x64": "4.59.0", 3500 + "@rollup/rollup-openharmony-arm64": "4.59.0", 3501 + "@rollup/rollup-win32-arm64-msvc": "4.59.0", 3502 + "@rollup/rollup-win32-ia32-msvc": "4.59.0", 3503 + "@rollup/rollup-win32-x64-gnu": "4.59.0", 3504 + "@rollup/rollup-win32-x64-msvc": "4.59.0", 3505 + "fsevents": "~2.3.2" 3506 + } 3507 + }, 3508 + "node_modules/safe-regex2": { 3509 + "version": "5.0.0", 3510 + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.0.0.tgz", 3511 + "integrity": "sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==", 3512 + "funding": [ 3513 + { 3514 + "type": "github", 3515 + "url": "https://github.com/sponsors/fastify" 3516 + }, 3517 + { 3518 + "type": "opencollective", 3519 + "url": "https://opencollective.com/fastify" 3520 + } 3521 + ], 3522 + "license": "MIT", 3523 + "dependencies": { 3524 + "ret": "~0.5.0" 3525 + } 3526 + }, 3527 + "node_modules/safe-stable-stringify": { 3528 + "version": "2.5.0", 3529 + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", 3530 + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", 3531 + "license": "MIT", 3532 + "engines": { 3533 + "node": ">=10" 3534 + } 3535 + }, 3536 + "node_modules/secure-json-parse": { 3537 + "version": "4.1.0", 3538 + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz", 3539 + "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==", 3540 + "funding": [ 3541 + { 3542 + "type": "github", 3543 + "url": "https://github.com/sponsors/fastify" 3544 + }, 3545 + { 3546 + "type": "opencollective", 3547 + "url": "https://opencollective.com/fastify" 3548 + } 3549 + ], 3550 + "license": "BSD-3-Clause" 3551 + }, 3552 + "node_modules/semver": { 3553 + "version": "7.7.4", 3554 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", 3555 + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", 3556 + "license": "ISC", 3557 + "bin": { 3558 + "semver": "bin/semver.js" 3559 + }, 3560 + "engines": { 3561 + "node": ">=10" 3562 + } 3563 + }, 3564 + "node_modules/set-cookie-parser": { 3565 + "version": "2.7.2", 3566 + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", 3567 + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", 3568 + "license": "MIT" 3569 + }, 3570 + "node_modules/shebang-command": { 3571 + "version": "2.0.0", 3572 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3573 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3574 + "dev": true, 3575 + "license": "MIT", 3576 + "dependencies": { 3577 + "shebang-regex": "^3.0.0" 3578 + }, 3579 + "engines": { 3580 + "node": ">=8" 3581 + } 3582 + }, 3583 + "node_modules/shebang-regex": { 3584 + "version": "3.0.0", 3585 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3586 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3587 + "dev": true, 3588 + "license": "MIT", 3589 + "engines": { 3590 + "node": ">=8" 3591 + } 3592 + }, 3593 + "node_modules/side-channel": { 3594 + "version": "1.1.0", 3595 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 3596 + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 3597 + "dev": true, 3598 + "license": "MIT", 3599 + "dependencies": { 3600 + "es-errors": "^1.3.0", 3601 + "object-inspect": "^1.13.3", 3602 + "side-channel-list": "^1.0.0", 3603 + "side-channel-map": "^1.0.1", 3604 + "side-channel-weakmap": "^1.0.2" 3605 + }, 3606 + "engines": { 3607 + "node": ">= 0.4" 3608 + }, 3609 + "funding": { 3610 + "url": "https://github.com/sponsors/ljharb" 3611 + } 3612 + }, 3613 + "node_modules/side-channel-list": { 3614 + "version": "1.0.0", 3615 + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 3616 + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 3617 + "dev": true, 3618 + "license": "MIT", 3619 + "dependencies": { 3620 + "es-errors": "^1.3.0", 3621 + "object-inspect": "^1.13.3" 3622 + }, 3623 + "engines": { 3624 + "node": ">= 0.4" 3625 + }, 3626 + "funding": { 3627 + "url": "https://github.com/sponsors/ljharb" 3628 + } 3629 + }, 3630 + "node_modules/side-channel-map": { 3631 + "version": "1.0.1", 3632 + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 3633 + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 3634 + "dev": true, 3635 + "license": "MIT", 3636 + "dependencies": { 3637 + "call-bound": "^1.0.2", 3638 + "es-errors": "^1.3.0", 3639 + "get-intrinsic": "^1.2.5", 3640 + "object-inspect": "^1.13.3" 3641 + }, 3642 + "engines": { 3643 + "node": ">= 0.4" 3644 + }, 3645 + "funding": { 3646 + "url": "https://github.com/sponsors/ljharb" 3647 + } 3648 + }, 3649 + "node_modules/side-channel-weakmap": { 3650 + "version": "1.0.2", 3651 + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 3652 + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 3653 + "dev": true, 3654 + "license": "MIT", 3655 + "dependencies": { 3656 + "call-bound": "^1.0.2", 3657 + "es-errors": "^1.3.0", 3658 + "get-intrinsic": "^1.2.5", 3659 + "object-inspect": "^1.13.3", 3660 + "side-channel-map": "^1.0.1" 3661 + }, 3662 + "engines": { 3663 + "node": ">= 0.4" 3664 + }, 3665 + "funding": { 3666 + "url": "https://github.com/sponsors/ljharb" 3667 + } 3668 + }, 3669 + "node_modules/siginfo": { 3670 + "version": "2.0.0", 3671 + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3672 + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3673 + "dev": true, 3674 + "license": "ISC" 3675 + }, 3676 + "node_modules/sonic-boom": { 3677 + "version": "4.2.1", 3678 + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", 3679 + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", 3680 + "license": "MIT", 3681 + "dependencies": { 3682 + "atomic-sleep": "^1.0.0" 3683 + } 3684 + }, 3685 + "node_modules/source-map-js": { 3686 + "version": "1.2.1", 3687 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 3688 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 3689 + "dev": true, 3690 + "license": "BSD-3-Clause", 3691 + "engines": { 3692 + "node": ">=0.10.0" 3693 + } 3694 + }, 3695 + "node_modules/split2": { 3696 + "version": "4.2.0", 3697 + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 3698 + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 3699 + "license": "ISC", 3700 + "engines": { 3701 + "node": ">= 10.x" 3702 + } 3703 + }, 3704 + "node_modules/stackback": { 3705 + "version": "0.0.2", 3706 + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3707 + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3708 + "dev": true, 3709 + "license": "MIT" 3710 + }, 3711 + "node_modules/std-env": { 3712 + "version": "3.10.0", 3713 + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", 3714 + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", 3715 + "dev": true, 3716 + "license": "MIT" 3717 + }, 3718 + "node_modules/strip-json-comments": { 3719 + "version": "5.0.3", 3720 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", 3721 + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", 3722 + "license": "MIT", 3723 + "engines": { 3724 + "node": ">=14.16" 3725 + }, 3726 + "funding": { 3727 + "url": "https://github.com/sponsors/sindresorhus" 3728 + } 3729 + }, 3730 + "node_modules/superagent": { 3731 + "version": "10.3.0", 3732 + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", 3733 + "integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==", 3734 + "dev": true, 3735 + "license": "MIT", 3736 + "dependencies": { 3737 + "component-emitter": "^1.3.1", 3738 + "cookiejar": "^2.1.4", 3739 + "debug": "^4.3.7", 3740 + "fast-safe-stringify": "^2.1.1", 3741 + "form-data": "^4.0.5", 3742 + "formidable": "^3.5.4", 3743 + "methods": "^1.1.2", 3744 + "mime": "2.6.0", 3745 + "qs": "^6.14.1" 3746 + }, 3747 + "engines": { 3748 + "node": ">=14.18.0" 3749 + } 3750 + }, 3751 + "node_modules/supertest": { 3752 + "version": "7.2.2", 3753 + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz", 3754 + "integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==", 3755 + "dev": true, 3756 + "license": "MIT", 3757 + "dependencies": { 3758 + "cookie-signature": "^1.2.2", 3759 + "methods": "^1.1.2", 3760 + "superagent": "^10.3.0" 3761 + }, 3762 + "engines": { 3763 + "node": ">=14.18.0" 3764 + } 3765 + }, 3766 + "node_modules/thread-stream": { 3767 + "version": "4.0.0", 3768 + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz", 3769 + "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==", 3770 + "license": "MIT", 3771 + "dependencies": { 3772 + "real-require": "^0.2.0" 3773 + }, 3774 + "engines": { 3775 + "node": ">=20" 3776 + } 3777 + }, 3778 + "node_modules/tinybench": { 3779 + "version": "2.9.0", 3780 + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 3781 + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 3782 + "dev": true, 3783 + "license": "MIT" 3784 + }, 3785 + "node_modules/tinyexec": { 3786 + "version": "1.0.2", 3787 + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", 3788 + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", 3789 + "dev": true, 3790 + "license": "MIT", 3791 + "engines": { 3792 + "node": ">=18" 3793 + } 3794 + }, 3795 + "node_modules/tinyglobby": { 3796 + "version": "0.2.15", 3797 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 3798 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 3799 + "dev": true, 3800 + "license": "MIT", 3801 + "dependencies": { 3802 + "fdir": "^6.5.0", 3803 + "picomatch": "^4.0.3" 3804 + }, 3805 + "engines": { 3806 + "node": ">=12.0.0" 3807 + }, 3808 + "funding": { 3809 + "url": "https://github.com/sponsors/SuperchupuDev" 3810 + } 3811 + }, 3812 + "node_modules/tinyrainbow": { 3813 + "version": "3.0.3", 3814 + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", 3815 + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", 3816 + "dev": true, 3817 + "license": "MIT", 3818 + "engines": { 3819 + "node": ">=14.0.0" 3820 + } 3821 + }, 3822 + "node_modules/toad-cache": { 3823 + "version": "3.7.0", 3824 + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", 3825 + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", 3826 + "license": "MIT", 3827 + "engines": { 3828 + "node": ">=12" 3829 + } 3830 + }, 3831 + "node_modules/ts-api-utils": { 3832 + "version": "2.4.0", 3833 + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", 3834 + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", 3835 + "dev": true, 3836 + "license": "MIT", 3837 + "engines": { 3838 + "node": ">=18.12" 3839 + }, 3840 + "peerDependencies": { 3841 + "typescript": ">=4.8.4" 3842 + } 3843 + }, 3844 + "node_modules/tsx": { 3845 + "version": "4.21.0", 3846 + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", 3847 + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", 3848 + "dev": true, 3849 + "license": "MIT", 3850 + "dependencies": { 3851 + "esbuild": "~0.27.0", 3852 + "get-tsconfig": "^4.7.5" 3853 + }, 3854 + "bin": { 3855 + "tsx": "dist/cli.mjs" 3856 + }, 3857 + "engines": { 3858 + "node": ">=18.0.0" 3859 + }, 3860 + "optionalDependencies": { 3861 + "fsevents": "~2.3.3" 3862 + } 3863 + }, 3864 + "node_modules/type-check": { 3865 + "version": "0.4.0", 3866 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3867 + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3868 + "dev": true, 3869 + "license": "MIT", 3870 + "dependencies": { 3871 + "prelude-ls": "^1.2.1" 3872 + }, 3873 + "engines": { 3874 + "node": ">= 0.8.0" 3875 + } 3876 + }, 3877 + "node_modules/typescript": { 3878 + "version": "5.9.3", 3879 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 3880 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 3881 + "dev": true, 3882 + "license": "Apache-2.0", 3883 + "bin": { 3884 + "tsc": "bin/tsc", 3885 + "tsserver": "bin/tsserver" 3886 + }, 3887 + "engines": { 3888 + "node": ">=14.17" 3889 + } 3890 + }, 3891 + "node_modules/undici-types": { 3892 + "version": "7.18.2", 3893 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", 3894 + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", 3895 + "dev": true, 3896 + "license": "MIT" 3897 + }, 3898 + "node_modules/uri-js": { 3899 + "version": "4.4.1", 3900 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3901 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3902 + "dev": true, 3903 + "license": "BSD-2-Clause", 3904 + "dependencies": { 3905 + "punycode": "^2.1.0" 3906 + } 3907 + }, 3908 + "node_modules/vite": { 3909 + "version": "7.3.1", 3910 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 3911 + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 3912 + "dev": true, 3913 + "license": "MIT", 3914 + "dependencies": { 3915 + "esbuild": "^0.27.0", 3916 + "fdir": "^6.5.0", 3917 + "picomatch": "^4.0.3", 3918 + "postcss": "^8.5.6", 3919 + "rollup": "^4.43.0", 3920 + "tinyglobby": "^0.2.15" 3921 + }, 3922 + "bin": { 3923 + "vite": "bin/vite.js" 3924 + }, 3925 + "engines": { 3926 + "node": "^20.19.0 || >=22.12.0" 3927 + }, 3928 + "funding": { 3929 + "url": "https://github.com/vitejs/vite?sponsor=1" 3930 + }, 3931 + "optionalDependencies": { 3932 + "fsevents": "~2.3.3" 3933 + }, 3934 + "peerDependencies": { 3935 + "@types/node": "^20.19.0 || >=22.12.0", 3936 + "jiti": ">=1.21.0", 3937 + "less": "^4.0.0", 3938 + "lightningcss": "^1.21.0", 3939 + "sass": "^1.70.0", 3940 + "sass-embedded": "^1.70.0", 3941 + "stylus": ">=0.54.8", 3942 + "sugarss": "^5.0.0", 3943 + "terser": "^5.16.0", 3944 + "tsx": "^4.8.1", 3945 + "yaml": "^2.4.2" 3946 + }, 3947 + "peerDependenciesMeta": { 3948 + "@types/node": { 3949 + "optional": true 3950 + }, 3951 + "jiti": { 3952 + "optional": true 3953 + }, 3954 + "less": { 3955 + "optional": true 3956 + }, 3957 + "lightningcss": { 3958 + "optional": true 3959 + }, 3960 + "sass": { 3961 + "optional": true 3962 + }, 3963 + "sass-embedded": { 3964 + "optional": true 3965 + }, 3966 + "stylus": { 3967 + "optional": true 3968 + }, 3969 + "sugarss": { 3970 + "optional": true 3971 + }, 3972 + "terser": { 3973 + "optional": true 3974 + }, 3975 + "tsx": { 3976 + "optional": true 3977 + }, 3978 + "yaml": { 3979 + "optional": true 3980 + } 3981 + } 3982 + }, 3983 + "node_modules/vitest": { 3984 + "version": "4.0.18", 3985 + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", 3986 + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", 3987 + "dev": true, 3988 + "license": "MIT", 3989 + "dependencies": { 3990 + "@vitest/expect": "4.0.18", 3991 + "@vitest/mocker": "4.0.18", 3992 + "@vitest/pretty-format": "4.0.18", 3993 + "@vitest/runner": "4.0.18", 3994 + "@vitest/snapshot": "4.0.18", 3995 + "@vitest/spy": "4.0.18", 3996 + "@vitest/utils": "4.0.18", 3997 + "es-module-lexer": "^1.7.0", 3998 + "expect-type": "^1.2.2", 3999 + "magic-string": "^0.30.21", 4000 + "obug": "^2.1.1", 4001 + "pathe": "^2.0.3", 4002 + "picomatch": "^4.0.3", 4003 + "std-env": "^3.10.0", 4004 + "tinybench": "^2.9.0", 4005 + "tinyexec": "^1.0.2", 4006 + "tinyglobby": "^0.2.15", 4007 + "tinyrainbow": "^3.0.3", 4008 + "vite": "^6.0.0 || ^7.0.0", 4009 + "why-is-node-running": "^2.3.0" 4010 + }, 4011 + "bin": { 4012 + "vitest": "vitest.mjs" 4013 + }, 4014 + "engines": { 4015 + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" 4016 + }, 4017 + "funding": { 4018 + "url": "https://opencollective.com/vitest" 4019 + }, 4020 + "peerDependencies": { 4021 + "@edge-runtime/vm": "*", 4022 + "@opentelemetry/api": "^1.9.0", 4023 + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", 4024 + "@vitest/browser-playwright": "4.0.18", 4025 + "@vitest/browser-preview": "4.0.18", 4026 + "@vitest/browser-webdriverio": "4.0.18", 4027 + "@vitest/ui": "4.0.18", 4028 + "happy-dom": "*", 4029 + "jsdom": "*" 4030 + }, 4031 + "peerDependenciesMeta": { 4032 + "@edge-runtime/vm": { 4033 + "optional": true 4034 + }, 4035 + "@opentelemetry/api": { 4036 + "optional": true 4037 + }, 4038 + "@types/node": { 4039 + "optional": true 4040 + }, 4041 + "@vitest/browser-playwright": { 4042 + "optional": true 4043 + }, 4044 + "@vitest/browser-preview": { 4045 + "optional": true 4046 + }, 4047 + "@vitest/browser-webdriverio": { 4048 + "optional": true 4049 + }, 4050 + "@vitest/ui": { 4051 + "optional": true 4052 + }, 4053 + "happy-dom": { 4054 + "optional": true 4055 + }, 4056 + "jsdom": { 4057 + "optional": true 4058 + } 4059 + } 4060 + }, 4061 + "node_modules/which": { 4062 + "version": "2.0.2", 4063 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 4064 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 4065 + "dev": true, 4066 + "license": "ISC", 4067 + "dependencies": { 4068 + "isexe": "^2.0.0" 4069 + }, 4070 + "bin": { 4071 + "node-which": "bin/node-which" 4072 + }, 4073 + "engines": { 4074 + "node": ">= 8" 4075 + } 4076 + }, 4077 + "node_modules/why-is-node-running": { 4078 + "version": "2.3.0", 4079 + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 4080 + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 4081 + "dev": true, 4082 + "license": "MIT", 4083 + "dependencies": { 4084 + "siginfo": "^2.0.0", 4085 + "stackback": "0.0.2" 4086 + }, 4087 + "bin": { 4088 + "why-is-node-running": "cli.js" 4089 + }, 4090 + "engines": { 4091 + "node": ">=8" 4092 + } 4093 + }, 4094 + "node_modules/word-wrap": { 4095 + "version": "1.2.5", 4096 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 4097 + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 4098 + "dev": true, 4099 + "license": "MIT", 4100 + "engines": { 4101 + "node": ">=0.10.0" 4102 + } 4103 + }, 4104 + "node_modules/wrappy": { 4105 + "version": "1.0.2", 4106 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4107 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 4108 + "license": "ISC" 4109 + }, 4110 + "node_modules/yocto-queue": { 4111 + "version": "0.1.0", 4112 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 4113 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 4114 + "dev": true, 4115 + "license": "MIT", 4116 + "engines": { 4117 + "node": ">=10" 4118 + }, 4119 + "funding": { 4120 + "url": "https://github.com/sponsors/sindresorhus" 4121 + } 4122 + }, 4123 + "node_modules/zod": { 4124 + "version": "4.3.6", 4125 + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", 4126 + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", 4127 + "license": "MIT", 4128 + "funding": { 4129 + "url": "https://github.com/sponsors/colinhacks" 4130 + } 4131 + } 4132 + } 4133 + }
+39
package.json
··· 1 + { 2 + "name": "sifa-api", 3 + "version": "1.0.0", 4 + "description": "", 5 + "main": "index.js", 6 + "scripts": { 7 + "test": "vitest run", 8 + "dev": "tsx watch src/index.ts", 9 + "build": "tsc", 10 + "start": "node dist/index.js", 11 + "lint": "eslint src/ tests/" 12 + }, 13 + "keywords": [], 14 + "author": "", 15 + "license": "ISC", 16 + "type": "module", 17 + "dependencies": { 18 + "@fastify/cookie": "^11.0.2", 19 + "@fastify/cors": "^11.2.0", 20 + "@fastify/helmet": "^13.0.2", 21 + "@fastify/rate-limit": "^10.3.0", 22 + "dotenv": "^17.3.1", 23 + "fastify": "^5.8.2", 24 + "pino": "^10.3.1", 25 + "pino-pretty": "^13.1.3", 26 + "zod": "^4.3.6" 27 + }, 28 + "devDependencies": { 29 + "@types/node": "^25.3.5", 30 + "@types/supertest": "^7.2.0", 31 + "@typescript-eslint/eslint-plugin": "^8.56.1", 32 + "@typescript-eslint/parser": "^8.56.1", 33 + "eslint": "^10.0.3", 34 + "supertest": "^7.2.2", 35 + "tsx": "^4.21.0", 36 + "typescript": "^5.9.3", 37 + "vitest": "^4.0.18" 38 + } 39 + }
+23
src/config.ts
··· 1 + import { z } from 'zod'; 2 + 3 + const envSchema = z.object({ 4 + NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), 5 + PORT: z.coerce.number().default(3100), 6 + PUBLIC_URL: z.string().url(), 7 + DATABASE_URL: z.string(), 8 + VALKEY_URL: z.string(), 9 + SIFA_DID: z.string().startsWith('did:'), 10 + JETSTREAM_URL: z.string().url(), 11 + OAUTH_JWKS_PATH: z.string(), 12 + GLITCHTIP_DSN: z.string().optional(), 13 + }); 14 + 15 + export type Env = z.infer<typeof envSchema>; 16 + 17 + export function loadConfig(): Env { 18 + const result = envSchema.safeParse(process.env); 19 + if (!result.success) { 20 + throw new Error(`Invalid environment variables:\n${result.error.format()}`); 21 + } 22 + return result.data; 23 + }
+8
src/index.ts
··· 1 + import 'dotenv/config'; 2 + import { loadConfig } from './config.js'; 3 + import { buildServer } from './server.js'; 4 + 5 + const config = loadConfig(); 6 + const server = await buildServer(config); 7 + 8 + await server.listen({ port: config.PORT, host: '0.0.0.0' });
+23
src/server.ts
··· 1 + import Fastify from 'fastify'; 2 + import helmet from '@fastify/helmet'; 3 + import cors from '@fastify/cors'; 4 + import cookie from '@fastify/cookie'; 5 + import rateLimit from '@fastify/rate-limit'; 6 + import type { Env } from './config.js'; 7 + 8 + export async function buildServer(config: Env) { 9 + const app = Fastify({ 10 + logger: { 11 + level: config.NODE_ENV === 'test' ? 'silent' : 'info', 12 + }, 13 + }); 14 + 15 + await app.register(helmet); 16 + await app.register(cors, { origin: config.PUBLIC_URL, credentials: true }); 17 + await app.register(cookie); 18 + await app.register(rateLimit, { max: 60, timeWindow: '1 minute' }); 19 + 20 + app.get('/api/health', async () => ({ status: 'ok' })); 21 + 22 + return app; 23 + }
+30
tests/server.test.ts
··· 1 + import { describe, it, expect, beforeAll, afterAll } from 'vitest'; 2 + import { buildServer } from '../src/server.js'; 3 + import type { FastifyInstance } from 'fastify'; 4 + 5 + describe('Server', () => { 6 + let app: FastifyInstance; 7 + 8 + beforeAll(async () => { 9 + app = await buildServer({ 10 + NODE_ENV: 'test', 11 + PORT: 0, 12 + PUBLIC_URL: 'http://localhost:3100', 13 + DATABASE_URL: 'postgresql://test:test@localhost:5432/test', 14 + VALKEY_URL: 'redis://localhost:6379', 15 + SIFA_DID: 'did:plc:test', 16 + JETSTREAM_URL: 'wss://jetstream1.us-east.bsky.network/subscribe', 17 + OAUTH_JWKS_PATH: './keys/jwks.json', 18 + }); 19 + }); 20 + 21 + afterAll(async () => { 22 + await app.close(); 23 + }); 24 + 25 + it('GET /api/health returns 200', async () => { 26 + const res = await app.inject({ method: 'GET', url: '/api/health' }); 27 + expect(res.statusCode).toBe(200); 28 + expect(res.json()).toEqual({ status: 'ok' }); 29 + }); 30 + });
+22
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2024", 4 + "module": "NodeNext", 5 + "moduleResolution": "NodeNext", 6 + "strict": true, 7 + "esModuleInterop": true, 8 + "skipLibCheck": true, 9 + "forceConsistentCasingInFileNames": true, 10 + "outDir": "./dist", 11 + "rootDir": "./src", 12 + "declaration": true, 13 + "declarationMap": true, 14 + "sourceMap": true, 15 + "resolveJsonModule": true, 16 + "noUncheckedIndexedAccess": true, 17 + "noImplicitReturns": true, 18 + "noFallthroughCasesInSwitch": true 19 + }, 20 + "include": ["src/**/*"], 21 + "exclude": ["node_modules", "dist"] 22 + }
+9
vitest.config.ts
··· 1 + import { defineConfig } from 'vitest/config'; 2 + 3 + export default defineConfig({ 4 + test: { 5 + globals: false, 6 + environment: 'node', 7 + include: ['tests/**/*.test.ts'], 8 + }, 9 + });