blonk is a radar for your web, where you follow vibes for cool blips on the radar

delete the typescript app, it served its purpose

+6
.env.test
··· 1 + NODE_ENV=test 2 + DATABASE_PATH=:memory: 3 + PORT=0 4 + ATPROTO_API_KEY=test-api-key 5 + BLUESKY_USERNAME=test.user 6 + BLUESKY_PASSWORD=test-password
-30
client/.gitignore
··· 1 - # Logs 2 - logs 3 - *.log 4 - npm-debug.log* 5 - yarn-debug.log* 6 - yarn-error.log* 7 - pnpm-debug.log* 8 - lerna-debug.log* 9 - 10 - node_modules 11 - dist 12 - dist-ssr 13 - *.local 14 - 15 - # Compiled JS files (we use TypeScript) 16 - src/**/*.js 17 - src/**/*.js.map 18 - *.js 19 - !vite.config.js 20 - 21 - # Editor directories and files 22 - .vscode/* 23 - !.vscode/extensions.json 24 - .idea 25 - .DS_Store 26 - *.suo 27 - *.ntvs* 28 - *.njsproj 29 - *.sln 30 - *.sw?
-54
client/README.md
··· 1 - # React + TypeScript + Vite 2 - 3 - This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. 4 - 5 - Currently, two official plugins are available: 6 - 7 - - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh 8 - - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh 9 - 10 - ## Expanding the ESLint configuration 11 - 12 - If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: 13 - 14 - ```js 15 - export default tseslint.config({ 16 - extends: [ 17 - // Remove ...tseslint.configs.recommended and replace with this 18 - ...tseslint.configs.recommendedTypeChecked, 19 - // Alternatively, use this for stricter rules 20 - ...tseslint.configs.strictTypeChecked, 21 - // Optionally, add this for stylistic rules 22 - ...tseslint.configs.stylisticTypeChecked, 23 - ], 24 - languageOptions: { 25 - // other options... 26 - parserOptions: { 27 - project: ['./tsconfig.node.json', './tsconfig.app.json'], 28 - tsconfigRootDir: import.meta.dirname, 29 - }, 30 - }, 31 - }) 32 - ``` 33 - 34 - You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: 35 - 36 - ```js 37 - // eslint.config.js 38 - import reactX from 'eslint-plugin-react-x' 39 - import reactDom from 'eslint-plugin-react-dom' 40 - 41 - export default tseslint.config({ 42 - plugins: { 43 - // Add the react-x and react-dom plugins 44 - 'react-x': reactX, 45 - 'react-dom': reactDom, 46 - }, 47 - rules: { 48 - // other rules... 49 - // Enable its recommended typescript rules 50 - ...reactX.configs['recommended-typescript'].rules, 51 - ...reactDom.configs.recommended.rules, 52 - }, 53 - }) 54 - ```
-28
client/eslint.config.js
··· 1 - import js from '@eslint/js' 2 - import globals from 'globals' 3 - import reactHooks from 'eslint-plugin-react-hooks' 4 - import reactRefresh from 'eslint-plugin-react-refresh' 5 - import tseslint from 'typescript-eslint' 6 - 7 - export default tseslint.config( 8 - { ignores: ['dist'] }, 9 - { 10 - extends: [js.configs.recommended, ...tseslint.configs.recommended], 11 - files: ['**/*.{ts,tsx}'], 12 - languageOptions: { 13 - ecmaVersion: 2020, 14 - globals: globals.browser, 15 - }, 16 - plugins: { 17 - 'react-hooks': reactHooks, 18 - 'react-refresh': reactRefresh, 19 - }, 20 - rules: { 21 - ...reactHooks.configs.recommended.rules, 22 - 'react-refresh/only-export-components': [ 23 - 'warn', 24 - { allowConstantExport: true }, 25 - ], 26 - }, 27 - }, 28 - )
-13
client/index.html
··· 1 - <!doctype html> 2 - <html lang="en"> 3 - <head> 4 - <meta charset="UTF-8" /> 5 - <link rel="icon" type="image/svg+xml" href="/vite.svg" /> 6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 - <title>blonk - vibe radar</title> 8 - </head> 9 - <body> 10 - <div id="root"></div> 11 - <script type="module" src="/src/main.tsx"></script> 12 - </body> 13 - </html>
-3771
client/package-lock.json
··· 1 - { 2 - "name": "client", 3 - "version": "0.0.0", 4 - "lockfileVersion": 3, 5 - "requires": true, 6 - "packages": { 7 - "": { 8 - "name": "client", 9 - "version": "0.0.0", 10 - "dependencies": { 11 - "@tanstack/react-query": "^5.80.10", 12 - "@tanstack/react-query-devtools": "^5.80.10", 13 - "axios": "^1.10.0", 14 - "react": "^19.1.0", 15 - "react-dom": "^19.1.0", 16 - "react-router-dom": "^7.6.2" 17 - }, 18 - "devDependencies": { 19 - "@eslint/js": "^9.25.0", 20 - "@types/react": "^19.1.2", 21 - "@types/react-dom": "^19.1.2", 22 - "@vitejs/plugin-react": "^4.4.1", 23 - "eslint": "^9.25.0", 24 - "eslint-plugin-react-hooks": "^5.2.0", 25 - "eslint-plugin-react-refresh": "^0.4.19", 26 - "globals": "^16.0.0", 27 - "typescript": "~5.8.3", 28 - "typescript-eslint": "^8.30.1", 29 - "vite": "^6.3.5" 30 - } 31 - }, 32 - "node_modules/@ampproject/remapping": { 33 - "version": "2.3.0", 34 - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 35 - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 36 - "dev": true, 37 - "license": "Apache-2.0", 38 - "dependencies": { 39 - "@jridgewell/gen-mapping": "^0.3.5", 40 - "@jridgewell/trace-mapping": "^0.3.24" 41 - }, 42 - "engines": { 43 - "node": ">=6.0.0" 44 - } 45 - }, 46 - "node_modules/@babel/code-frame": { 47 - "version": "7.27.1", 48 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", 49 - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 50 - "dev": true, 51 - "license": "MIT", 52 - "dependencies": { 53 - "@babel/helper-validator-identifier": "^7.27.1", 54 - "js-tokens": "^4.0.0", 55 - "picocolors": "^1.1.1" 56 - }, 57 - "engines": { 58 - "node": ">=6.9.0" 59 - } 60 - }, 61 - "node_modules/@babel/compat-data": { 62 - "version": "7.27.5", 63 - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", 64 - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", 65 - "dev": true, 66 - "license": "MIT", 67 - "engines": { 68 - "node": ">=6.9.0" 69 - } 70 - }, 71 - "node_modules/@babel/core": { 72 - "version": "7.27.4", 73 - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", 74 - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", 75 - "dev": true, 76 - "license": "MIT", 77 - "dependencies": { 78 - "@ampproject/remapping": "^2.2.0", 79 - "@babel/code-frame": "^7.27.1", 80 - "@babel/generator": "^7.27.3", 81 - "@babel/helper-compilation-targets": "^7.27.2", 82 - "@babel/helper-module-transforms": "^7.27.3", 83 - "@babel/helpers": "^7.27.4", 84 - "@babel/parser": "^7.27.4", 85 - "@babel/template": "^7.27.2", 86 - "@babel/traverse": "^7.27.4", 87 - "@babel/types": "^7.27.3", 88 - "convert-source-map": "^2.0.0", 89 - "debug": "^4.1.0", 90 - "gensync": "^1.0.0-beta.2", 91 - "json5": "^2.2.3", 92 - "semver": "^6.3.1" 93 - }, 94 - "engines": { 95 - "node": ">=6.9.0" 96 - }, 97 - "funding": { 98 - "type": "opencollective", 99 - "url": "https://opencollective.com/babel" 100 - } 101 - }, 102 - "node_modules/@babel/generator": { 103 - "version": "7.27.5", 104 - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", 105 - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", 106 - "dev": true, 107 - "license": "MIT", 108 - "dependencies": { 109 - "@babel/parser": "^7.27.5", 110 - "@babel/types": "^7.27.3", 111 - "@jridgewell/gen-mapping": "^0.3.5", 112 - "@jridgewell/trace-mapping": "^0.3.25", 113 - "jsesc": "^3.0.2" 114 - }, 115 - "engines": { 116 - "node": ">=6.9.0" 117 - } 118 - }, 119 - "node_modules/@babel/helper-compilation-targets": { 120 - "version": "7.27.2", 121 - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", 122 - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", 123 - "dev": true, 124 - "license": "MIT", 125 - "dependencies": { 126 - "@babel/compat-data": "^7.27.2", 127 - "@babel/helper-validator-option": "^7.27.1", 128 - "browserslist": "^4.24.0", 129 - "lru-cache": "^5.1.1", 130 - "semver": "^6.3.1" 131 - }, 132 - "engines": { 133 - "node": ">=6.9.0" 134 - } 135 - }, 136 - "node_modules/@babel/helper-module-imports": { 137 - "version": "7.27.1", 138 - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", 139 - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 140 - "dev": true, 141 - "license": "MIT", 142 - "dependencies": { 143 - "@babel/traverse": "^7.27.1", 144 - "@babel/types": "^7.27.1" 145 - }, 146 - "engines": { 147 - "node": ">=6.9.0" 148 - } 149 - }, 150 - "node_modules/@babel/helper-module-transforms": { 151 - "version": "7.27.3", 152 - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", 153 - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", 154 - "dev": true, 155 - "license": "MIT", 156 - "dependencies": { 157 - "@babel/helper-module-imports": "^7.27.1", 158 - "@babel/helper-validator-identifier": "^7.27.1", 159 - "@babel/traverse": "^7.27.3" 160 - }, 161 - "engines": { 162 - "node": ">=6.9.0" 163 - }, 164 - "peerDependencies": { 165 - "@babel/core": "^7.0.0" 166 - } 167 - }, 168 - "node_modules/@babel/helper-plugin-utils": { 169 - "version": "7.27.1", 170 - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", 171 - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", 172 - "dev": true, 173 - "license": "MIT", 174 - "engines": { 175 - "node": ">=6.9.0" 176 - } 177 - }, 178 - "node_modules/@babel/helper-string-parser": { 179 - "version": "7.27.1", 180 - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 181 - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 182 - "dev": true, 183 - "license": "MIT", 184 - "engines": { 185 - "node": ">=6.9.0" 186 - } 187 - }, 188 - "node_modules/@babel/helper-validator-identifier": { 189 - "version": "7.27.1", 190 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", 191 - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", 192 - "dev": true, 193 - "license": "MIT", 194 - "engines": { 195 - "node": ">=6.9.0" 196 - } 197 - }, 198 - "node_modules/@babel/helper-validator-option": { 199 - "version": "7.27.1", 200 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", 201 - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", 202 - "dev": true, 203 - "license": "MIT", 204 - "engines": { 205 - "node": ">=6.9.0" 206 - } 207 - }, 208 - "node_modules/@babel/helpers": { 209 - "version": "7.27.6", 210 - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", 211 - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", 212 - "dev": true, 213 - "license": "MIT", 214 - "dependencies": { 215 - "@babel/template": "^7.27.2", 216 - "@babel/types": "^7.27.6" 217 - }, 218 - "engines": { 219 - "node": ">=6.9.0" 220 - } 221 - }, 222 - "node_modules/@babel/parser": { 223 - "version": "7.27.5", 224 - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", 225 - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", 226 - "dev": true, 227 - "license": "MIT", 228 - "dependencies": { 229 - "@babel/types": "^7.27.3" 230 - }, 231 - "bin": { 232 - "parser": "bin/babel-parser.js" 233 - }, 234 - "engines": { 235 - "node": ">=6.0.0" 236 - } 237 - }, 238 - "node_modules/@babel/plugin-transform-react-jsx-self": { 239 - "version": "7.27.1", 240 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", 241 - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", 242 - "dev": true, 243 - "license": "MIT", 244 - "dependencies": { 245 - "@babel/helper-plugin-utils": "^7.27.1" 246 - }, 247 - "engines": { 248 - "node": ">=6.9.0" 249 - }, 250 - "peerDependencies": { 251 - "@babel/core": "^7.0.0-0" 252 - } 253 - }, 254 - "node_modules/@babel/plugin-transform-react-jsx-source": { 255 - "version": "7.27.1", 256 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", 257 - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", 258 - "dev": true, 259 - "license": "MIT", 260 - "dependencies": { 261 - "@babel/helper-plugin-utils": "^7.27.1" 262 - }, 263 - "engines": { 264 - "node": ">=6.9.0" 265 - }, 266 - "peerDependencies": { 267 - "@babel/core": "^7.0.0-0" 268 - } 269 - }, 270 - "node_modules/@babel/template": { 271 - "version": "7.27.2", 272 - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", 273 - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 274 - "dev": true, 275 - "license": "MIT", 276 - "dependencies": { 277 - "@babel/code-frame": "^7.27.1", 278 - "@babel/parser": "^7.27.2", 279 - "@babel/types": "^7.27.1" 280 - }, 281 - "engines": { 282 - "node": ">=6.9.0" 283 - } 284 - }, 285 - "node_modules/@babel/traverse": { 286 - "version": "7.27.4", 287 - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", 288 - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", 289 - "dev": true, 290 - "license": "MIT", 291 - "dependencies": { 292 - "@babel/code-frame": "^7.27.1", 293 - "@babel/generator": "^7.27.3", 294 - "@babel/parser": "^7.27.4", 295 - "@babel/template": "^7.27.2", 296 - "@babel/types": "^7.27.3", 297 - "debug": "^4.3.1", 298 - "globals": "^11.1.0" 299 - }, 300 - "engines": { 301 - "node": ">=6.9.0" 302 - } 303 - }, 304 - "node_modules/@babel/traverse/node_modules/globals": { 305 - "version": "11.12.0", 306 - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 307 - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 308 - "dev": true, 309 - "license": "MIT", 310 - "engines": { 311 - "node": ">=4" 312 - } 313 - }, 314 - "node_modules/@babel/types": { 315 - "version": "7.27.6", 316 - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", 317 - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", 318 - "dev": true, 319 - "license": "MIT", 320 - "dependencies": { 321 - "@babel/helper-string-parser": "^7.27.1", 322 - "@babel/helper-validator-identifier": "^7.27.1" 323 - }, 324 - "engines": { 325 - "node": ">=6.9.0" 326 - } 327 - }, 328 - "node_modules/@esbuild/aix-ppc64": { 329 - "version": "0.25.5", 330 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", 331 - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", 332 - "cpu": [ 333 - "ppc64" 334 - ], 335 - "dev": true, 336 - "license": "MIT", 337 - "optional": true, 338 - "os": [ 339 - "aix" 340 - ], 341 - "engines": { 342 - "node": ">=18" 343 - } 344 - }, 345 - "node_modules/@esbuild/android-arm": { 346 - "version": "0.25.5", 347 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", 348 - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", 349 - "cpu": [ 350 - "arm" 351 - ], 352 - "dev": true, 353 - "license": "MIT", 354 - "optional": true, 355 - "os": [ 356 - "android" 357 - ], 358 - "engines": { 359 - "node": ">=18" 360 - } 361 - }, 362 - "node_modules/@esbuild/android-arm64": { 363 - "version": "0.25.5", 364 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", 365 - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", 366 - "cpu": [ 367 - "arm64" 368 - ], 369 - "dev": true, 370 - "license": "MIT", 371 - "optional": true, 372 - "os": [ 373 - "android" 374 - ], 375 - "engines": { 376 - "node": ">=18" 377 - } 378 - }, 379 - "node_modules/@esbuild/android-x64": { 380 - "version": "0.25.5", 381 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", 382 - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", 383 - "cpu": [ 384 - "x64" 385 - ], 386 - "dev": true, 387 - "license": "MIT", 388 - "optional": true, 389 - "os": [ 390 - "android" 391 - ], 392 - "engines": { 393 - "node": ">=18" 394 - } 395 - }, 396 - "node_modules/@esbuild/darwin-arm64": { 397 - "version": "0.25.5", 398 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", 399 - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", 400 - "cpu": [ 401 - "arm64" 402 - ], 403 - "dev": true, 404 - "license": "MIT", 405 - "optional": true, 406 - "os": [ 407 - "darwin" 408 - ], 409 - "engines": { 410 - "node": ">=18" 411 - } 412 - }, 413 - "node_modules/@esbuild/darwin-x64": { 414 - "version": "0.25.5", 415 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", 416 - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", 417 - "cpu": [ 418 - "x64" 419 - ], 420 - "dev": true, 421 - "license": "MIT", 422 - "optional": true, 423 - "os": [ 424 - "darwin" 425 - ], 426 - "engines": { 427 - "node": ">=18" 428 - } 429 - }, 430 - "node_modules/@esbuild/freebsd-arm64": { 431 - "version": "0.25.5", 432 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", 433 - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", 434 - "cpu": [ 435 - "arm64" 436 - ], 437 - "dev": true, 438 - "license": "MIT", 439 - "optional": true, 440 - "os": [ 441 - "freebsd" 442 - ], 443 - "engines": { 444 - "node": ">=18" 445 - } 446 - }, 447 - "node_modules/@esbuild/freebsd-x64": { 448 - "version": "0.25.5", 449 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", 450 - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", 451 - "cpu": [ 452 - "x64" 453 - ], 454 - "dev": true, 455 - "license": "MIT", 456 - "optional": true, 457 - "os": [ 458 - "freebsd" 459 - ], 460 - "engines": { 461 - "node": ">=18" 462 - } 463 - }, 464 - "node_modules/@esbuild/linux-arm": { 465 - "version": "0.25.5", 466 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", 467 - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", 468 - "cpu": [ 469 - "arm" 470 - ], 471 - "dev": true, 472 - "license": "MIT", 473 - "optional": true, 474 - "os": [ 475 - "linux" 476 - ], 477 - "engines": { 478 - "node": ">=18" 479 - } 480 - }, 481 - "node_modules/@esbuild/linux-arm64": { 482 - "version": "0.25.5", 483 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", 484 - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", 485 - "cpu": [ 486 - "arm64" 487 - ], 488 - "dev": true, 489 - "license": "MIT", 490 - "optional": true, 491 - "os": [ 492 - "linux" 493 - ], 494 - "engines": { 495 - "node": ">=18" 496 - } 497 - }, 498 - "node_modules/@esbuild/linux-ia32": { 499 - "version": "0.25.5", 500 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", 501 - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", 502 - "cpu": [ 503 - "ia32" 504 - ], 505 - "dev": true, 506 - "license": "MIT", 507 - "optional": true, 508 - "os": [ 509 - "linux" 510 - ], 511 - "engines": { 512 - "node": ">=18" 513 - } 514 - }, 515 - "node_modules/@esbuild/linux-loong64": { 516 - "version": "0.25.5", 517 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", 518 - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", 519 - "cpu": [ 520 - "loong64" 521 - ], 522 - "dev": true, 523 - "license": "MIT", 524 - "optional": true, 525 - "os": [ 526 - "linux" 527 - ], 528 - "engines": { 529 - "node": ">=18" 530 - } 531 - }, 532 - "node_modules/@esbuild/linux-mips64el": { 533 - "version": "0.25.5", 534 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", 535 - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", 536 - "cpu": [ 537 - "mips64el" 538 - ], 539 - "dev": true, 540 - "license": "MIT", 541 - "optional": true, 542 - "os": [ 543 - "linux" 544 - ], 545 - "engines": { 546 - "node": ">=18" 547 - } 548 - }, 549 - "node_modules/@esbuild/linux-ppc64": { 550 - "version": "0.25.5", 551 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", 552 - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", 553 - "cpu": [ 554 - "ppc64" 555 - ], 556 - "dev": true, 557 - "license": "MIT", 558 - "optional": true, 559 - "os": [ 560 - "linux" 561 - ], 562 - "engines": { 563 - "node": ">=18" 564 - } 565 - }, 566 - "node_modules/@esbuild/linux-riscv64": { 567 - "version": "0.25.5", 568 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", 569 - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", 570 - "cpu": [ 571 - "riscv64" 572 - ], 573 - "dev": true, 574 - "license": "MIT", 575 - "optional": true, 576 - "os": [ 577 - "linux" 578 - ], 579 - "engines": { 580 - "node": ">=18" 581 - } 582 - }, 583 - "node_modules/@esbuild/linux-s390x": { 584 - "version": "0.25.5", 585 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", 586 - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", 587 - "cpu": [ 588 - "s390x" 589 - ], 590 - "dev": true, 591 - "license": "MIT", 592 - "optional": true, 593 - "os": [ 594 - "linux" 595 - ], 596 - "engines": { 597 - "node": ">=18" 598 - } 599 - }, 600 - "node_modules/@esbuild/linux-x64": { 601 - "version": "0.25.5", 602 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", 603 - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", 604 - "cpu": [ 605 - "x64" 606 - ], 607 - "dev": true, 608 - "license": "MIT", 609 - "optional": true, 610 - "os": [ 611 - "linux" 612 - ], 613 - "engines": { 614 - "node": ">=18" 615 - } 616 - }, 617 - "node_modules/@esbuild/netbsd-arm64": { 618 - "version": "0.25.5", 619 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", 620 - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", 621 - "cpu": [ 622 - "arm64" 623 - ], 624 - "dev": true, 625 - "license": "MIT", 626 - "optional": true, 627 - "os": [ 628 - "netbsd" 629 - ], 630 - "engines": { 631 - "node": ">=18" 632 - } 633 - }, 634 - "node_modules/@esbuild/netbsd-x64": { 635 - "version": "0.25.5", 636 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", 637 - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", 638 - "cpu": [ 639 - "x64" 640 - ], 641 - "dev": true, 642 - "license": "MIT", 643 - "optional": true, 644 - "os": [ 645 - "netbsd" 646 - ], 647 - "engines": { 648 - "node": ">=18" 649 - } 650 - }, 651 - "node_modules/@esbuild/openbsd-arm64": { 652 - "version": "0.25.5", 653 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", 654 - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", 655 - "cpu": [ 656 - "arm64" 657 - ], 658 - "dev": true, 659 - "license": "MIT", 660 - "optional": true, 661 - "os": [ 662 - "openbsd" 663 - ], 664 - "engines": { 665 - "node": ">=18" 666 - } 667 - }, 668 - "node_modules/@esbuild/openbsd-x64": { 669 - "version": "0.25.5", 670 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", 671 - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", 672 - "cpu": [ 673 - "x64" 674 - ], 675 - "dev": true, 676 - "license": "MIT", 677 - "optional": true, 678 - "os": [ 679 - "openbsd" 680 - ], 681 - "engines": { 682 - "node": ">=18" 683 - } 684 - }, 685 - "node_modules/@esbuild/sunos-x64": { 686 - "version": "0.25.5", 687 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", 688 - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", 689 - "cpu": [ 690 - "x64" 691 - ], 692 - "dev": true, 693 - "license": "MIT", 694 - "optional": true, 695 - "os": [ 696 - "sunos" 697 - ], 698 - "engines": { 699 - "node": ">=18" 700 - } 701 - }, 702 - "node_modules/@esbuild/win32-arm64": { 703 - "version": "0.25.5", 704 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", 705 - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", 706 - "cpu": [ 707 - "arm64" 708 - ], 709 - "dev": true, 710 - "license": "MIT", 711 - "optional": true, 712 - "os": [ 713 - "win32" 714 - ], 715 - "engines": { 716 - "node": ">=18" 717 - } 718 - }, 719 - "node_modules/@esbuild/win32-ia32": { 720 - "version": "0.25.5", 721 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", 722 - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", 723 - "cpu": [ 724 - "ia32" 725 - ], 726 - "dev": true, 727 - "license": "MIT", 728 - "optional": true, 729 - "os": [ 730 - "win32" 731 - ], 732 - "engines": { 733 - "node": ">=18" 734 - } 735 - }, 736 - "node_modules/@esbuild/win32-x64": { 737 - "version": "0.25.5", 738 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", 739 - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", 740 - "cpu": [ 741 - "x64" 742 - ], 743 - "dev": true, 744 - "license": "MIT", 745 - "optional": true, 746 - "os": [ 747 - "win32" 748 - ], 749 - "engines": { 750 - "node": ">=18" 751 - } 752 - }, 753 - "node_modules/@eslint-community/eslint-utils": { 754 - "version": "4.7.0", 755 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", 756 - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", 757 - "dev": true, 758 - "license": "MIT", 759 - "dependencies": { 760 - "eslint-visitor-keys": "^3.4.3" 761 - }, 762 - "engines": { 763 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 764 - }, 765 - "funding": { 766 - "url": "https://opencollective.com/eslint" 767 - }, 768 - "peerDependencies": { 769 - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 770 - } 771 - }, 772 - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 773 - "version": "3.4.3", 774 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 775 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 776 - "dev": true, 777 - "license": "Apache-2.0", 778 - "engines": { 779 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 780 - }, 781 - "funding": { 782 - "url": "https://opencollective.com/eslint" 783 - } 784 - }, 785 - "node_modules/@eslint-community/regexpp": { 786 - "version": "4.12.1", 787 - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 788 - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 789 - "dev": true, 790 - "license": "MIT", 791 - "engines": { 792 - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 793 - } 794 - }, 795 - "node_modules/@eslint/config-array": { 796 - "version": "0.20.1", 797 - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", 798 - "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", 799 - "dev": true, 800 - "license": "Apache-2.0", 801 - "dependencies": { 802 - "@eslint/object-schema": "^2.1.6", 803 - "debug": "^4.3.1", 804 - "minimatch": "^3.1.2" 805 - }, 806 - "engines": { 807 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 808 - } 809 - }, 810 - "node_modules/@eslint/config-helpers": { 811 - "version": "0.2.3", 812 - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", 813 - "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", 814 - "dev": true, 815 - "license": "Apache-2.0", 816 - "engines": { 817 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 818 - } 819 - }, 820 - "node_modules/@eslint/core": { 821 - "version": "0.14.0", 822 - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", 823 - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", 824 - "dev": true, 825 - "license": "Apache-2.0", 826 - "dependencies": { 827 - "@types/json-schema": "^7.0.15" 828 - }, 829 - "engines": { 830 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 831 - } 832 - }, 833 - "node_modules/@eslint/eslintrc": { 834 - "version": "3.3.1", 835 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", 836 - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", 837 - "dev": true, 838 - "license": "MIT", 839 - "dependencies": { 840 - "ajv": "^6.12.4", 841 - "debug": "^4.3.2", 842 - "espree": "^10.0.1", 843 - "globals": "^14.0.0", 844 - "ignore": "^5.2.0", 845 - "import-fresh": "^3.2.1", 846 - "js-yaml": "^4.1.0", 847 - "minimatch": "^3.1.2", 848 - "strip-json-comments": "^3.1.1" 849 - }, 850 - "engines": { 851 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 852 - }, 853 - "funding": { 854 - "url": "https://opencollective.com/eslint" 855 - } 856 - }, 857 - "node_modules/@eslint/eslintrc/node_modules/globals": { 858 - "version": "14.0.0", 859 - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 860 - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 861 - "dev": true, 862 - "license": "MIT", 863 - "engines": { 864 - "node": ">=18" 865 - }, 866 - "funding": { 867 - "url": "https://github.com/sponsors/sindresorhus" 868 - } 869 - }, 870 - "node_modules/@eslint/js": { 871 - "version": "9.29.0", 872 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", 873 - "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", 874 - "dev": true, 875 - "license": "MIT", 876 - "engines": { 877 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 878 - }, 879 - "funding": { 880 - "url": "https://eslint.org/donate" 881 - } 882 - }, 883 - "node_modules/@eslint/object-schema": { 884 - "version": "2.1.6", 885 - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 886 - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 887 - "dev": true, 888 - "license": "Apache-2.0", 889 - "engines": { 890 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 891 - } 892 - }, 893 - "node_modules/@eslint/plugin-kit": { 894 - "version": "0.3.2", 895 - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", 896 - "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", 897 - "dev": true, 898 - "license": "Apache-2.0", 899 - "dependencies": { 900 - "@eslint/core": "^0.15.0", 901 - "levn": "^0.4.1" 902 - }, 903 - "engines": { 904 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 905 - } 906 - }, 907 - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { 908 - "version": "0.15.0", 909 - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", 910 - "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", 911 - "dev": true, 912 - "license": "Apache-2.0", 913 - "dependencies": { 914 - "@types/json-schema": "^7.0.15" 915 - }, 916 - "engines": { 917 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 918 - } 919 - }, 920 - "node_modules/@humanfs/core": { 921 - "version": "0.19.1", 922 - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 923 - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 924 - "dev": true, 925 - "license": "Apache-2.0", 926 - "engines": { 927 - "node": ">=18.18.0" 928 - } 929 - }, 930 - "node_modules/@humanfs/node": { 931 - "version": "0.16.6", 932 - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", 933 - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", 934 - "dev": true, 935 - "license": "Apache-2.0", 936 - "dependencies": { 937 - "@humanfs/core": "^0.19.1", 938 - "@humanwhocodes/retry": "^0.3.0" 939 - }, 940 - "engines": { 941 - "node": ">=18.18.0" 942 - } 943 - }, 944 - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { 945 - "version": "0.3.1", 946 - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 947 - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 948 - "dev": true, 949 - "license": "Apache-2.0", 950 - "engines": { 951 - "node": ">=18.18" 952 - }, 953 - "funding": { 954 - "type": "github", 955 - "url": "https://github.com/sponsors/nzakas" 956 - } 957 - }, 958 - "node_modules/@humanwhocodes/module-importer": { 959 - "version": "1.0.1", 960 - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 961 - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 962 - "dev": true, 963 - "license": "Apache-2.0", 964 - "engines": { 965 - "node": ">=12.22" 966 - }, 967 - "funding": { 968 - "type": "github", 969 - "url": "https://github.com/sponsors/nzakas" 970 - } 971 - }, 972 - "node_modules/@humanwhocodes/retry": { 973 - "version": "0.4.3", 974 - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", 975 - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", 976 - "dev": true, 977 - "license": "Apache-2.0", 978 - "engines": { 979 - "node": ">=18.18" 980 - }, 981 - "funding": { 982 - "type": "github", 983 - "url": "https://github.com/sponsors/nzakas" 984 - } 985 - }, 986 - "node_modules/@jridgewell/gen-mapping": { 987 - "version": "0.3.8", 988 - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 989 - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 990 - "dev": true, 991 - "license": "MIT", 992 - "dependencies": { 993 - "@jridgewell/set-array": "^1.2.1", 994 - "@jridgewell/sourcemap-codec": "^1.4.10", 995 - "@jridgewell/trace-mapping": "^0.3.24" 996 - }, 997 - "engines": { 998 - "node": ">=6.0.0" 999 - } 1000 - }, 1001 - "node_modules/@jridgewell/resolve-uri": { 1002 - "version": "3.1.2", 1003 - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1004 - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1005 - "dev": true, 1006 - "license": "MIT", 1007 - "engines": { 1008 - "node": ">=6.0.0" 1009 - } 1010 - }, 1011 - "node_modules/@jridgewell/set-array": { 1012 - "version": "1.2.1", 1013 - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 1014 - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 1015 - "dev": true, 1016 - "license": "MIT", 1017 - "engines": { 1018 - "node": ">=6.0.0" 1019 - } 1020 - }, 1021 - "node_modules/@jridgewell/sourcemap-codec": { 1022 - "version": "1.5.0", 1023 - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 1024 - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 1025 - "dev": true, 1026 - "license": "MIT" 1027 - }, 1028 - "node_modules/@jridgewell/trace-mapping": { 1029 - "version": "0.3.25", 1030 - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 1031 - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 1032 - "dev": true, 1033 - "license": "MIT", 1034 - "dependencies": { 1035 - "@jridgewell/resolve-uri": "^3.1.0", 1036 - "@jridgewell/sourcemap-codec": "^1.4.14" 1037 - } 1038 - }, 1039 - "node_modules/@nodelib/fs.scandir": { 1040 - "version": "2.1.5", 1041 - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1042 - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1043 - "dev": true, 1044 - "license": "MIT", 1045 - "dependencies": { 1046 - "@nodelib/fs.stat": "2.0.5", 1047 - "run-parallel": "^1.1.9" 1048 - }, 1049 - "engines": { 1050 - "node": ">= 8" 1051 - } 1052 - }, 1053 - "node_modules/@nodelib/fs.stat": { 1054 - "version": "2.0.5", 1055 - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1056 - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1057 - "dev": true, 1058 - "license": "MIT", 1059 - "engines": { 1060 - "node": ">= 8" 1061 - } 1062 - }, 1063 - "node_modules/@nodelib/fs.walk": { 1064 - "version": "1.2.8", 1065 - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1066 - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1067 - "dev": true, 1068 - "license": "MIT", 1069 - "dependencies": { 1070 - "@nodelib/fs.scandir": "2.1.5", 1071 - "fastq": "^1.6.0" 1072 - }, 1073 - "engines": { 1074 - "node": ">= 8" 1075 - } 1076 - }, 1077 - "node_modules/@rolldown/pluginutils": { 1078 - "version": "1.0.0-beta.11", 1079 - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz", 1080 - "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==", 1081 - "dev": true, 1082 - "license": "MIT" 1083 - }, 1084 - "node_modules/@rollup/rollup-android-arm-eabi": { 1085 - "version": "4.44.0", 1086 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", 1087 - "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", 1088 - "cpu": [ 1089 - "arm" 1090 - ], 1091 - "dev": true, 1092 - "license": "MIT", 1093 - "optional": true, 1094 - "os": [ 1095 - "android" 1096 - ] 1097 - }, 1098 - "node_modules/@rollup/rollup-android-arm64": { 1099 - "version": "4.44.0", 1100 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", 1101 - "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", 1102 - "cpu": [ 1103 - "arm64" 1104 - ], 1105 - "dev": true, 1106 - "license": "MIT", 1107 - "optional": true, 1108 - "os": [ 1109 - "android" 1110 - ] 1111 - }, 1112 - "node_modules/@rollup/rollup-darwin-arm64": { 1113 - "version": "4.44.0", 1114 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", 1115 - "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", 1116 - "cpu": [ 1117 - "arm64" 1118 - ], 1119 - "dev": true, 1120 - "license": "MIT", 1121 - "optional": true, 1122 - "os": [ 1123 - "darwin" 1124 - ] 1125 - }, 1126 - "node_modules/@rollup/rollup-darwin-x64": { 1127 - "version": "4.44.0", 1128 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", 1129 - "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", 1130 - "cpu": [ 1131 - "x64" 1132 - ], 1133 - "dev": true, 1134 - "license": "MIT", 1135 - "optional": true, 1136 - "os": [ 1137 - "darwin" 1138 - ] 1139 - }, 1140 - "node_modules/@rollup/rollup-freebsd-arm64": { 1141 - "version": "4.44.0", 1142 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", 1143 - "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", 1144 - "cpu": [ 1145 - "arm64" 1146 - ], 1147 - "dev": true, 1148 - "license": "MIT", 1149 - "optional": true, 1150 - "os": [ 1151 - "freebsd" 1152 - ] 1153 - }, 1154 - "node_modules/@rollup/rollup-freebsd-x64": { 1155 - "version": "4.44.0", 1156 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", 1157 - "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", 1158 - "cpu": [ 1159 - "x64" 1160 - ], 1161 - "dev": true, 1162 - "license": "MIT", 1163 - "optional": true, 1164 - "os": [ 1165 - "freebsd" 1166 - ] 1167 - }, 1168 - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 1169 - "version": "4.44.0", 1170 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", 1171 - "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", 1172 - "cpu": [ 1173 - "arm" 1174 - ], 1175 - "dev": true, 1176 - "license": "MIT", 1177 - "optional": true, 1178 - "os": [ 1179 - "linux" 1180 - ] 1181 - }, 1182 - "node_modules/@rollup/rollup-linux-arm-musleabihf": { 1183 - "version": "4.44.0", 1184 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", 1185 - "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", 1186 - "cpu": [ 1187 - "arm" 1188 - ], 1189 - "dev": true, 1190 - "license": "MIT", 1191 - "optional": true, 1192 - "os": [ 1193 - "linux" 1194 - ] 1195 - }, 1196 - "node_modules/@rollup/rollup-linux-arm64-gnu": { 1197 - "version": "4.44.0", 1198 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", 1199 - "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", 1200 - "cpu": [ 1201 - "arm64" 1202 - ], 1203 - "dev": true, 1204 - "license": "MIT", 1205 - "optional": true, 1206 - "os": [ 1207 - "linux" 1208 - ] 1209 - }, 1210 - "node_modules/@rollup/rollup-linux-arm64-musl": { 1211 - "version": "4.44.0", 1212 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", 1213 - "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", 1214 - "cpu": [ 1215 - "arm64" 1216 - ], 1217 - "dev": true, 1218 - "license": "MIT", 1219 - "optional": true, 1220 - "os": [ 1221 - "linux" 1222 - ] 1223 - }, 1224 - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 1225 - "version": "4.44.0", 1226 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", 1227 - "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", 1228 - "cpu": [ 1229 - "loong64" 1230 - ], 1231 - "dev": true, 1232 - "license": "MIT", 1233 - "optional": true, 1234 - "os": [ 1235 - "linux" 1236 - ] 1237 - }, 1238 - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 1239 - "version": "4.44.0", 1240 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", 1241 - "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", 1242 - "cpu": [ 1243 - "ppc64" 1244 - ], 1245 - "dev": true, 1246 - "license": "MIT", 1247 - "optional": true, 1248 - "os": [ 1249 - "linux" 1250 - ] 1251 - }, 1252 - "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1253 - "version": "4.44.0", 1254 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", 1255 - "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", 1256 - "cpu": [ 1257 - "riscv64" 1258 - ], 1259 - "dev": true, 1260 - "license": "MIT", 1261 - "optional": true, 1262 - "os": [ 1263 - "linux" 1264 - ] 1265 - }, 1266 - "node_modules/@rollup/rollup-linux-riscv64-musl": { 1267 - "version": "4.44.0", 1268 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", 1269 - "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", 1270 - "cpu": [ 1271 - "riscv64" 1272 - ], 1273 - "dev": true, 1274 - "license": "MIT", 1275 - "optional": true, 1276 - "os": [ 1277 - "linux" 1278 - ] 1279 - }, 1280 - "node_modules/@rollup/rollup-linux-s390x-gnu": { 1281 - "version": "4.44.0", 1282 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", 1283 - "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", 1284 - "cpu": [ 1285 - "s390x" 1286 - ], 1287 - "dev": true, 1288 - "license": "MIT", 1289 - "optional": true, 1290 - "os": [ 1291 - "linux" 1292 - ] 1293 - }, 1294 - "node_modules/@rollup/rollup-linux-x64-gnu": { 1295 - "version": "4.44.0", 1296 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", 1297 - "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", 1298 - "cpu": [ 1299 - "x64" 1300 - ], 1301 - "dev": true, 1302 - "license": "MIT", 1303 - "optional": true, 1304 - "os": [ 1305 - "linux" 1306 - ] 1307 - }, 1308 - "node_modules/@rollup/rollup-linux-x64-musl": { 1309 - "version": "4.44.0", 1310 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", 1311 - "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", 1312 - "cpu": [ 1313 - "x64" 1314 - ], 1315 - "dev": true, 1316 - "license": "MIT", 1317 - "optional": true, 1318 - "os": [ 1319 - "linux" 1320 - ] 1321 - }, 1322 - "node_modules/@rollup/rollup-win32-arm64-msvc": { 1323 - "version": "4.44.0", 1324 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", 1325 - "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", 1326 - "cpu": [ 1327 - "arm64" 1328 - ], 1329 - "dev": true, 1330 - "license": "MIT", 1331 - "optional": true, 1332 - "os": [ 1333 - "win32" 1334 - ] 1335 - }, 1336 - "node_modules/@rollup/rollup-win32-ia32-msvc": { 1337 - "version": "4.44.0", 1338 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", 1339 - "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", 1340 - "cpu": [ 1341 - "ia32" 1342 - ], 1343 - "dev": true, 1344 - "license": "MIT", 1345 - "optional": true, 1346 - "os": [ 1347 - "win32" 1348 - ] 1349 - }, 1350 - "node_modules/@rollup/rollup-win32-x64-msvc": { 1351 - "version": "4.44.0", 1352 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", 1353 - "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", 1354 - "cpu": [ 1355 - "x64" 1356 - ], 1357 - "dev": true, 1358 - "license": "MIT", 1359 - "optional": true, 1360 - "os": [ 1361 - "win32" 1362 - ] 1363 - }, 1364 - "node_modules/@tanstack/query-core": { 1365 - "version": "5.80.10", 1366 - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.10.tgz", 1367 - "integrity": "sha512-mUNQOtzxkjL6jLbyChZoSBP6A5gQDVRUiPvW+/zw/9ftOAz+H754zCj3D8PwnzPKyHzGkQ9JbH48ukhym9LK1Q==", 1368 - "license": "MIT", 1369 - "funding": { 1370 - "type": "github", 1371 - "url": "https://github.com/sponsors/tannerlinsley" 1372 - } 1373 - }, 1374 - "node_modules/@tanstack/query-devtools": { 1375 - "version": "5.80.0", 1376 - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.80.0.tgz", 1377 - "integrity": "sha512-D6gH4asyjaoXrCOt5vG5Og/YSj0D/TxwNQgtLJIgWbhbWCC/emu2E92EFoVHh4ppVWg1qT2gKHvKyQBEFZhCuA==", 1378 - "license": "MIT", 1379 - "funding": { 1380 - "type": "github", 1381 - "url": "https://github.com/sponsors/tannerlinsley" 1382 - } 1383 - }, 1384 - "node_modules/@tanstack/react-query": { 1385 - "version": "5.80.10", 1386 - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.10.tgz", 1387 - "integrity": "sha512-6zM098J8sLy9oU60XAdzUlAH4wVzoMVsWUWiiE/Iz4fd67PplxeyL4sw/MPcVJJVhbwGGXCsHn9GrQt2mlAzig==", 1388 - "license": "MIT", 1389 - "dependencies": { 1390 - "@tanstack/query-core": "5.80.10" 1391 - }, 1392 - "funding": { 1393 - "type": "github", 1394 - "url": "https://github.com/sponsors/tannerlinsley" 1395 - }, 1396 - "peerDependencies": { 1397 - "react": "^18 || ^19" 1398 - } 1399 - }, 1400 - "node_modules/@tanstack/react-query-devtools": { 1401 - "version": "5.80.10", 1402 - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.10.tgz", 1403 - "integrity": "sha512-6JL63fSc7kxyGOLV2w466SxhMn/m7LZk/ximQciy6OpVt+n2A8Mq3S0QwhIzfm4WEwLK/F3OELfzRToQburnYA==", 1404 - "license": "MIT", 1405 - "dependencies": { 1406 - "@tanstack/query-devtools": "5.80.0" 1407 - }, 1408 - "funding": { 1409 - "type": "github", 1410 - "url": "https://github.com/sponsors/tannerlinsley" 1411 - }, 1412 - "peerDependencies": { 1413 - "@tanstack/react-query": "^5.80.10", 1414 - "react": "^18 || ^19" 1415 - } 1416 - }, 1417 - "node_modules/@types/babel__core": { 1418 - "version": "7.20.5", 1419 - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 1420 - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1421 - "dev": true, 1422 - "license": "MIT", 1423 - "dependencies": { 1424 - "@babel/parser": "^7.20.7", 1425 - "@babel/types": "^7.20.7", 1426 - "@types/babel__generator": "*", 1427 - "@types/babel__template": "*", 1428 - "@types/babel__traverse": "*" 1429 - } 1430 - }, 1431 - "node_modules/@types/babel__generator": { 1432 - "version": "7.27.0", 1433 - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", 1434 - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", 1435 - "dev": true, 1436 - "license": "MIT", 1437 - "dependencies": { 1438 - "@babel/types": "^7.0.0" 1439 - } 1440 - }, 1441 - "node_modules/@types/babel__template": { 1442 - "version": "7.4.4", 1443 - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 1444 - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1445 - "dev": true, 1446 - "license": "MIT", 1447 - "dependencies": { 1448 - "@babel/parser": "^7.1.0", 1449 - "@babel/types": "^7.0.0" 1450 - } 1451 - }, 1452 - "node_modules/@types/babel__traverse": { 1453 - "version": "7.20.7", 1454 - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", 1455 - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", 1456 - "dev": true, 1457 - "license": "MIT", 1458 - "dependencies": { 1459 - "@babel/types": "^7.20.7" 1460 - } 1461 - }, 1462 - "node_modules/@types/estree": { 1463 - "version": "1.0.8", 1464 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1465 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1466 - "dev": true, 1467 - "license": "MIT" 1468 - }, 1469 - "node_modules/@types/json-schema": { 1470 - "version": "7.0.15", 1471 - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1472 - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1473 - "dev": true, 1474 - "license": "MIT" 1475 - }, 1476 - "node_modules/@types/react": { 1477 - "version": "19.1.8", 1478 - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", 1479 - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", 1480 - "dev": true, 1481 - "license": "MIT", 1482 - "dependencies": { 1483 - "csstype": "^3.0.2" 1484 - } 1485 - }, 1486 - "node_modules/@types/react-dom": { 1487 - "version": "19.1.6", 1488 - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", 1489 - "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", 1490 - "dev": true, 1491 - "license": "MIT", 1492 - "peerDependencies": { 1493 - "@types/react": "^19.0.0" 1494 - } 1495 - }, 1496 - "node_modules/@typescript-eslint/eslint-plugin": { 1497 - "version": "8.34.1", 1498 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", 1499 - "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", 1500 - "dev": true, 1501 - "license": "MIT", 1502 - "dependencies": { 1503 - "@eslint-community/regexpp": "^4.10.0", 1504 - "@typescript-eslint/scope-manager": "8.34.1", 1505 - "@typescript-eslint/type-utils": "8.34.1", 1506 - "@typescript-eslint/utils": "8.34.1", 1507 - "@typescript-eslint/visitor-keys": "8.34.1", 1508 - "graphemer": "^1.4.0", 1509 - "ignore": "^7.0.0", 1510 - "natural-compare": "^1.4.0", 1511 - "ts-api-utils": "^2.1.0" 1512 - }, 1513 - "engines": { 1514 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1515 - }, 1516 - "funding": { 1517 - "type": "opencollective", 1518 - "url": "https://opencollective.com/typescript-eslint" 1519 - }, 1520 - "peerDependencies": { 1521 - "@typescript-eslint/parser": "^8.34.1", 1522 - "eslint": "^8.57.0 || ^9.0.0", 1523 - "typescript": ">=4.8.4 <5.9.0" 1524 - } 1525 - }, 1526 - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 1527 - "version": "7.0.5", 1528 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", 1529 - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", 1530 - "dev": true, 1531 - "license": "MIT", 1532 - "engines": { 1533 - "node": ">= 4" 1534 - } 1535 - }, 1536 - "node_modules/@typescript-eslint/parser": { 1537 - "version": "8.34.1", 1538 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", 1539 - "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", 1540 - "dev": true, 1541 - "license": "MIT", 1542 - "dependencies": { 1543 - "@typescript-eslint/scope-manager": "8.34.1", 1544 - "@typescript-eslint/types": "8.34.1", 1545 - "@typescript-eslint/typescript-estree": "8.34.1", 1546 - "@typescript-eslint/visitor-keys": "8.34.1", 1547 - "debug": "^4.3.4" 1548 - }, 1549 - "engines": { 1550 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1551 - }, 1552 - "funding": { 1553 - "type": "opencollective", 1554 - "url": "https://opencollective.com/typescript-eslint" 1555 - }, 1556 - "peerDependencies": { 1557 - "eslint": "^8.57.0 || ^9.0.0", 1558 - "typescript": ">=4.8.4 <5.9.0" 1559 - } 1560 - }, 1561 - "node_modules/@typescript-eslint/project-service": { 1562 - "version": "8.34.1", 1563 - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", 1564 - "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", 1565 - "dev": true, 1566 - "license": "MIT", 1567 - "dependencies": { 1568 - "@typescript-eslint/tsconfig-utils": "^8.34.1", 1569 - "@typescript-eslint/types": "^8.34.1", 1570 - "debug": "^4.3.4" 1571 - }, 1572 - "engines": { 1573 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1574 - }, 1575 - "funding": { 1576 - "type": "opencollective", 1577 - "url": "https://opencollective.com/typescript-eslint" 1578 - }, 1579 - "peerDependencies": { 1580 - "typescript": ">=4.8.4 <5.9.0" 1581 - } 1582 - }, 1583 - "node_modules/@typescript-eslint/scope-manager": { 1584 - "version": "8.34.1", 1585 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", 1586 - "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", 1587 - "dev": true, 1588 - "license": "MIT", 1589 - "dependencies": { 1590 - "@typescript-eslint/types": "8.34.1", 1591 - "@typescript-eslint/visitor-keys": "8.34.1" 1592 - }, 1593 - "engines": { 1594 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1595 - }, 1596 - "funding": { 1597 - "type": "opencollective", 1598 - "url": "https://opencollective.com/typescript-eslint" 1599 - } 1600 - }, 1601 - "node_modules/@typescript-eslint/tsconfig-utils": { 1602 - "version": "8.34.1", 1603 - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", 1604 - "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", 1605 - "dev": true, 1606 - "license": "MIT", 1607 - "engines": { 1608 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1609 - }, 1610 - "funding": { 1611 - "type": "opencollective", 1612 - "url": "https://opencollective.com/typescript-eslint" 1613 - }, 1614 - "peerDependencies": { 1615 - "typescript": ">=4.8.4 <5.9.0" 1616 - } 1617 - }, 1618 - "node_modules/@typescript-eslint/type-utils": { 1619 - "version": "8.34.1", 1620 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", 1621 - "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", 1622 - "dev": true, 1623 - "license": "MIT", 1624 - "dependencies": { 1625 - "@typescript-eslint/typescript-estree": "8.34.1", 1626 - "@typescript-eslint/utils": "8.34.1", 1627 - "debug": "^4.3.4", 1628 - "ts-api-utils": "^2.1.0" 1629 - }, 1630 - "engines": { 1631 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1632 - }, 1633 - "funding": { 1634 - "type": "opencollective", 1635 - "url": "https://opencollective.com/typescript-eslint" 1636 - }, 1637 - "peerDependencies": { 1638 - "eslint": "^8.57.0 || ^9.0.0", 1639 - "typescript": ">=4.8.4 <5.9.0" 1640 - } 1641 - }, 1642 - "node_modules/@typescript-eslint/types": { 1643 - "version": "8.34.1", 1644 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", 1645 - "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", 1646 - "dev": true, 1647 - "license": "MIT", 1648 - "engines": { 1649 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1650 - }, 1651 - "funding": { 1652 - "type": "opencollective", 1653 - "url": "https://opencollective.com/typescript-eslint" 1654 - } 1655 - }, 1656 - "node_modules/@typescript-eslint/typescript-estree": { 1657 - "version": "8.34.1", 1658 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", 1659 - "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", 1660 - "dev": true, 1661 - "license": "MIT", 1662 - "dependencies": { 1663 - "@typescript-eslint/project-service": "8.34.1", 1664 - "@typescript-eslint/tsconfig-utils": "8.34.1", 1665 - "@typescript-eslint/types": "8.34.1", 1666 - "@typescript-eslint/visitor-keys": "8.34.1", 1667 - "debug": "^4.3.4", 1668 - "fast-glob": "^3.3.2", 1669 - "is-glob": "^4.0.3", 1670 - "minimatch": "^9.0.4", 1671 - "semver": "^7.6.0", 1672 - "ts-api-utils": "^2.1.0" 1673 - }, 1674 - "engines": { 1675 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1676 - }, 1677 - "funding": { 1678 - "type": "opencollective", 1679 - "url": "https://opencollective.com/typescript-eslint" 1680 - }, 1681 - "peerDependencies": { 1682 - "typescript": ">=4.8.4 <5.9.0" 1683 - } 1684 - }, 1685 - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 1686 - "version": "2.0.2", 1687 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 1688 - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 1689 - "dev": true, 1690 - "license": "MIT", 1691 - "dependencies": { 1692 - "balanced-match": "^1.0.0" 1693 - } 1694 - }, 1695 - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 1696 - "version": "9.0.5", 1697 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1698 - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1699 - "dev": true, 1700 - "license": "ISC", 1701 - "dependencies": { 1702 - "brace-expansion": "^2.0.1" 1703 - }, 1704 - "engines": { 1705 - "node": ">=16 || 14 >=14.17" 1706 - }, 1707 - "funding": { 1708 - "url": "https://github.com/sponsors/isaacs" 1709 - } 1710 - }, 1711 - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 1712 - "version": "7.7.2", 1713 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", 1714 - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", 1715 - "dev": true, 1716 - "license": "ISC", 1717 - "bin": { 1718 - "semver": "bin/semver.js" 1719 - }, 1720 - "engines": { 1721 - "node": ">=10" 1722 - } 1723 - }, 1724 - "node_modules/@typescript-eslint/utils": { 1725 - "version": "8.34.1", 1726 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", 1727 - "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", 1728 - "dev": true, 1729 - "license": "MIT", 1730 - "dependencies": { 1731 - "@eslint-community/eslint-utils": "^4.7.0", 1732 - "@typescript-eslint/scope-manager": "8.34.1", 1733 - "@typescript-eslint/types": "8.34.1", 1734 - "@typescript-eslint/typescript-estree": "8.34.1" 1735 - }, 1736 - "engines": { 1737 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1738 - }, 1739 - "funding": { 1740 - "type": "opencollective", 1741 - "url": "https://opencollective.com/typescript-eslint" 1742 - }, 1743 - "peerDependencies": { 1744 - "eslint": "^8.57.0 || ^9.0.0", 1745 - "typescript": ">=4.8.4 <5.9.0" 1746 - } 1747 - }, 1748 - "node_modules/@typescript-eslint/visitor-keys": { 1749 - "version": "8.34.1", 1750 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", 1751 - "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", 1752 - "dev": true, 1753 - "license": "MIT", 1754 - "dependencies": { 1755 - "@typescript-eslint/types": "8.34.1", 1756 - "eslint-visitor-keys": "^4.2.1" 1757 - }, 1758 - "engines": { 1759 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1760 - }, 1761 - "funding": { 1762 - "type": "opencollective", 1763 - "url": "https://opencollective.com/typescript-eslint" 1764 - } 1765 - }, 1766 - "node_modules/@vitejs/plugin-react": { 1767 - "version": "4.5.2", 1768 - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.2.tgz", 1769 - "integrity": "sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==", 1770 - "dev": true, 1771 - "license": "MIT", 1772 - "dependencies": { 1773 - "@babel/core": "^7.27.4", 1774 - "@babel/plugin-transform-react-jsx-self": "^7.27.1", 1775 - "@babel/plugin-transform-react-jsx-source": "^7.27.1", 1776 - "@rolldown/pluginutils": "1.0.0-beta.11", 1777 - "@types/babel__core": "^7.20.5", 1778 - "react-refresh": "^0.17.0" 1779 - }, 1780 - "engines": { 1781 - "node": "^14.18.0 || >=16.0.0" 1782 - }, 1783 - "peerDependencies": { 1784 - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" 1785 - } 1786 - }, 1787 - "node_modules/acorn": { 1788 - "version": "8.15.0", 1789 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 1790 - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 1791 - "dev": true, 1792 - "license": "MIT", 1793 - "bin": { 1794 - "acorn": "bin/acorn" 1795 - }, 1796 - "engines": { 1797 - "node": ">=0.4.0" 1798 - } 1799 - }, 1800 - "node_modules/acorn-jsx": { 1801 - "version": "5.3.2", 1802 - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1803 - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1804 - "dev": true, 1805 - "license": "MIT", 1806 - "peerDependencies": { 1807 - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1808 - } 1809 - }, 1810 - "node_modules/ajv": { 1811 - "version": "6.12.6", 1812 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1813 - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1814 - "dev": true, 1815 - "license": "MIT", 1816 - "dependencies": { 1817 - "fast-deep-equal": "^3.1.1", 1818 - "fast-json-stable-stringify": "^2.0.0", 1819 - "json-schema-traverse": "^0.4.1", 1820 - "uri-js": "^4.2.2" 1821 - }, 1822 - "funding": { 1823 - "type": "github", 1824 - "url": "https://github.com/sponsors/epoberezkin" 1825 - } 1826 - }, 1827 - "node_modules/ansi-styles": { 1828 - "version": "4.3.0", 1829 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1830 - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1831 - "dev": true, 1832 - "license": "MIT", 1833 - "dependencies": { 1834 - "color-convert": "^2.0.1" 1835 - }, 1836 - "engines": { 1837 - "node": ">=8" 1838 - }, 1839 - "funding": { 1840 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1841 - } 1842 - }, 1843 - "node_modules/argparse": { 1844 - "version": "2.0.1", 1845 - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1846 - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1847 - "dev": true, 1848 - "license": "Python-2.0" 1849 - }, 1850 - "node_modules/asynckit": { 1851 - "version": "0.4.0", 1852 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1853 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 1854 - "license": "MIT" 1855 - }, 1856 - "node_modules/axios": { 1857 - "version": "1.10.0", 1858 - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", 1859 - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", 1860 - "license": "MIT", 1861 - "dependencies": { 1862 - "follow-redirects": "^1.15.6", 1863 - "form-data": "^4.0.0", 1864 - "proxy-from-env": "^1.1.0" 1865 - } 1866 - }, 1867 - "node_modules/balanced-match": { 1868 - "version": "1.0.2", 1869 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1870 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1871 - "dev": true, 1872 - "license": "MIT" 1873 - }, 1874 - "node_modules/brace-expansion": { 1875 - "version": "1.1.12", 1876 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 1877 - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 1878 - "dev": true, 1879 - "license": "MIT", 1880 - "dependencies": { 1881 - "balanced-match": "^1.0.0", 1882 - "concat-map": "0.0.1" 1883 - } 1884 - }, 1885 - "node_modules/braces": { 1886 - "version": "3.0.3", 1887 - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1888 - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1889 - "dev": true, 1890 - "license": "MIT", 1891 - "dependencies": { 1892 - "fill-range": "^7.1.1" 1893 - }, 1894 - "engines": { 1895 - "node": ">=8" 1896 - } 1897 - }, 1898 - "node_modules/browserslist": { 1899 - "version": "4.25.0", 1900 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", 1901 - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", 1902 - "dev": true, 1903 - "funding": [ 1904 - { 1905 - "type": "opencollective", 1906 - "url": "https://opencollective.com/browserslist" 1907 - }, 1908 - { 1909 - "type": "tidelift", 1910 - "url": "https://tidelift.com/funding/github/npm/browserslist" 1911 - }, 1912 - { 1913 - "type": "github", 1914 - "url": "https://github.com/sponsors/ai" 1915 - } 1916 - ], 1917 - "license": "MIT", 1918 - "dependencies": { 1919 - "caniuse-lite": "^1.0.30001718", 1920 - "electron-to-chromium": "^1.5.160", 1921 - "node-releases": "^2.0.19", 1922 - "update-browserslist-db": "^1.1.3" 1923 - }, 1924 - "bin": { 1925 - "browserslist": "cli.js" 1926 - }, 1927 - "engines": { 1928 - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1929 - } 1930 - }, 1931 - "node_modules/call-bind-apply-helpers": { 1932 - "version": "1.0.2", 1933 - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 1934 - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 1935 - "license": "MIT", 1936 - "dependencies": { 1937 - "es-errors": "^1.3.0", 1938 - "function-bind": "^1.1.2" 1939 - }, 1940 - "engines": { 1941 - "node": ">= 0.4" 1942 - } 1943 - }, 1944 - "node_modules/callsites": { 1945 - "version": "3.1.0", 1946 - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1947 - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1948 - "dev": true, 1949 - "license": "MIT", 1950 - "engines": { 1951 - "node": ">=6" 1952 - } 1953 - }, 1954 - "node_modules/caniuse-lite": { 1955 - "version": "1.0.30001723", 1956 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", 1957 - "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", 1958 - "dev": true, 1959 - "funding": [ 1960 - { 1961 - "type": "opencollective", 1962 - "url": "https://opencollective.com/browserslist" 1963 - }, 1964 - { 1965 - "type": "tidelift", 1966 - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1967 - }, 1968 - { 1969 - "type": "github", 1970 - "url": "https://github.com/sponsors/ai" 1971 - } 1972 - ], 1973 - "license": "CC-BY-4.0" 1974 - }, 1975 - "node_modules/chalk": { 1976 - "version": "4.1.2", 1977 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1978 - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1979 - "dev": true, 1980 - "license": "MIT", 1981 - "dependencies": { 1982 - "ansi-styles": "^4.1.0", 1983 - "supports-color": "^7.1.0" 1984 - }, 1985 - "engines": { 1986 - "node": ">=10" 1987 - }, 1988 - "funding": { 1989 - "url": "https://github.com/chalk/chalk?sponsor=1" 1990 - } 1991 - }, 1992 - "node_modules/color-convert": { 1993 - "version": "2.0.1", 1994 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1995 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1996 - "dev": true, 1997 - "license": "MIT", 1998 - "dependencies": { 1999 - "color-name": "~1.1.4" 2000 - }, 2001 - "engines": { 2002 - "node": ">=7.0.0" 2003 - } 2004 - }, 2005 - "node_modules/color-name": { 2006 - "version": "1.1.4", 2007 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2008 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2009 - "dev": true, 2010 - "license": "MIT" 2011 - }, 2012 - "node_modules/combined-stream": { 2013 - "version": "1.0.8", 2014 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 2015 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 2016 - "license": "MIT", 2017 - "dependencies": { 2018 - "delayed-stream": "~1.0.0" 2019 - }, 2020 - "engines": { 2021 - "node": ">= 0.8" 2022 - } 2023 - }, 2024 - "node_modules/concat-map": { 2025 - "version": "0.0.1", 2026 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2027 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2028 - "dev": true, 2029 - "license": "MIT" 2030 - }, 2031 - "node_modules/convert-source-map": { 2032 - "version": "2.0.0", 2033 - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 2034 - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 2035 - "dev": true, 2036 - "license": "MIT" 2037 - }, 2038 - "node_modules/cookie": { 2039 - "version": "1.0.2", 2040 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", 2041 - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", 2042 - "license": "MIT", 2043 - "engines": { 2044 - "node": ">=18" 2045 - } 2046 - }, 2047 - "node_modules/cross-spawn": { 2048 - "version": "7.0.6", 2049 - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 2050 - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 2051 - "dev": true, 2052 - "license": "MIT", 2053 - "dependencies": { 2054 - "path-key": "^3.1.0", 2055 - "shebang-command": "^2.0.0", 2056 - "which": "^2.0.1" 2057 - }, 2058 - "engines": { 2059 - "node": ">= 8" 2060 - } 2061 - }, 2062 - "node_modules/csstype": { 2063 - "version": "3.1.3", 2064 - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 2065 - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 2066 - "dev": true, 2067 - "license": "MIT" 2068 - }, 2069 - "node_modules/debug": { 2070 - "version": "4.4.1", 2071 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 2072 - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 2073 - "dev": true, 2074 - "license": "MIT", 2075 - "dependencies": { 2076 - "ms": "^2.1.3" 2077 - }, 2078 - "engines": { 2079 - "node": ">=6.0" 2080 - }, 2081 - "peerDependenciesMeta": { 2082 - "supports-color": { 2083 - "optional": true 2084 - } 2085 - } 2086 - }, 2087 - "node_modules/deep-is": { 2088 - "version": "0.1.4", 2089 - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2090 - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2091 - "dev": true, 2092 - "license": "MIT" 2093 - }, 2094 - "node_modules/delayed-stream": { 2095 - "version": "1.0.0", 2096 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 2097 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 2098 - "license": "MIT", 2099 - "engines": { 2100 - "node": ">=0.4.0" 2101 - } 2102 - }, 2103 - "node_modules/dunder-proto": { 2104 - "version": "1.0.1", 2105 - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 2106 - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 2107 - "license": "MIT", 2108 - "dependencies": { 2109 - "call-bind-apply-helpers": "^1.0.1", 2110 - "es-errors": "^1.3.0", 2111 - "gopd": "^1.2.0" 2112 - }, 2113 - "engines": { 2114 - "node": ">= 0.4" 2115 - } 2116 - }, 2117 - "node_modules/electron-to-chromium": { 2118 - "version": "1.5.170", 2119 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.170.tgz", 2120 - "integrity": "sha512-GP+M7aeluQo9uAyiTCxgIj/j+PrWhMlY7LFVj8prlsPljd0Fdg9AprlfUi+OCSFWy9Y5/2D/Jrj9HS8Z4rpKWA==", 2121 - "dev": true, 2122 - "license": "ISC" 2123 - }, 2124 - "node_modules/es-define-property": { 2125 - "version": "1.0.1", 2126 - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 2127 - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 2128 - "license": "MIT", 2129 - "engines": { 2130 - "node": ">= 0.4" 2131 - } 2132 - }, 2133 - "node_modules/es-errors": { 2134 - "version": "1.3.0", 2135 - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 2136 - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 2137 - "license": "MIT", 2138 - "engines": { 2139 - "node": ">= 0.4" 2140 - } 2141 - }, 2142 - "node_modules/es-object-atoms": { 2143 - "version": "1.1.1", 2144 - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 2145 - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 2146 - "license": "MIT", 2147 - "dependencies": { 2148 - "es-errors": "^1.3.0" 2149 - }, 2150 - "engines": { 2151 - "node": ">= 0.4" 2152 - } 2153 - }, 2154 - "node_modules/es-set-tostringtag": { 2155 - "version": "2.1.0", 2156 - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 2157 - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 2158 - "license": "MIT", 2159 - "dependencies": { 2160 - "es-errors": "^1.3.0", 2161 - "get-intrinsic": "^1.2.6", 2162 - "has-tostringtag": "^1.0.2", 2163 - "hasown": "^2.0.2" 2164 - }, 2165 - "engines": { 2166 - "node": ">= 0.4" 2167 - } 2168 - }, 2169 - "node_modules/esbuild": { 2170 - "version": "0.25.5", 2171 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", 2172 - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", 2173 - "dev": true, 2174 - "hasInstallScript": true, 2175 - "license": "MIT", 2176 - "bin": { 2177 - "esbuild": "bin/esbuild" 2178 - }, 2179 - "engines": { 2180 - "node": ">=18" 2181 - }, 2182 - "optionalDependencies": { 2183 - "@esbuild/aix-ppc64": "0.25.5", 2184 - "@esbuild/android-arm": "0.25.5", 2185 - "@esbuild/android-arm64": "0.25.5", 2186 - "@esbuild/android-x64": "0.25.5", 2187 - "@esbuild/darwin-arm64": "0.25.5", 2188 - "@esbuild/darwin-x64": "0.25.5", 2189 - "@esbuild/freebsd-arm64": "0.25.5", 2190 - "@esbuild/freebsd-x64": "0.25.5", 2191 - "@esbuild/linux-arm": "0.25.5", 2192 - "@esbuild/linux-arm64": "0.25.5", 2193 - "@esbuild/linux-ia32": "0.25.5", 2194 - "@esbuild/linux-loong64": "0.25.5", 2195 - "@esbuild/linux-mips64el": "0.25.5", 2196 - "@esbuild/linux-ppc64": "0.25.5", 2197 - "@esbuild/linux-riscv64": "0.25.5", 2198 - "@esbuild/linux-s390x": "0.25.5", 2199 - "@esbuild/linux-x64": "0.25.5", 2200 - "@esbuild/netbsd-arm64": "0.25.5", 2201 - "@esbuild/netbsd-x64": "0.25.5", 2202 - "@esbuild/openbsd-arm64": "0.25.5", 2203 - "@esbuild/openbsd-x64": "0.25.5", 2204 - "@esbuild/sunos-x64": "0.25.5", 2205 - "@esbuild/win32-arm64": "0.25.5", 2206 - "@esbuild/win32-ia32": "0.25.5", 2207 - "@esbuild/win32-x64": "0.25.5" 2208 - } 2209 - }, 2210 - "node_modules/escalade": { 2211 - "version": "3.2.0", 2212 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 2213 - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 2214 - "dev": true, 2215 - "license": "MIT", 2216 - "engines": { 2217 - "node": ">=6" 2218 - } 2219 - }, 2220 - "node_modules/escape-string-regexp": { 2221 - "version": "4.0.0", 2222 - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2223 - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2224 - "dev": true, 2225 - "license": "MIT", 2226 - "engines": { 2227 - "node": ">=10" 2228 - }, 2229 - "funding": { 2230 - "url": "https://github.com/sponsors/sindresorhus" 2231 - } 2232 - }, 2233 - "node_modules/eslint": { 2234 - "version": "9.29.0", 2235 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", 2236 - "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", 2237 - "dev": true, 2238 - "license": "MIT", 2239 - "dependencies": { 2240 - "@eslint-community/eslint-utils": "^4.2.0", 2241 - "@eslint-community/regexpp": "^4.12.1", 2242 - "@eslint/config-array": "^0.20.1", 2243 - "@eslint/config-helpers": "^0.2.1", 2244 - "@eslint/core": "^0.14.0", 2245 - "@eslint/eslintrc": "^3.3.1", 2246 - "@eslint/js": "9.29.0", 2247 - "@eslint/plugin-kit": "^0.3.1", 2248 - "@humanfs/node": "^0.16.6", 2249 - "@humanwhocodes/module-importer": "^1.0.1", 2250 - "@humanwhocodes/retry": "^0.4.2", 2251 - "@types/estree": "^1.0.6", 2252 - "@types/json-schema": "^7.0.15", 2253 - "ajv": "^6.12.4", 2254 - "chalk": "^4.0.0", 2255 - "cross-spawn": "^7.0.6", 2256 - "debug": "^4.3.2", 2257 - "escape-string-regexp": "^4.0.0", 2258 - "eslint-scope": "^8.4.0", 2259 - "eslint-visitor-keys": "^4.2.1", 2260 - "espree": "^10.4.0", 2261 - "esquery": "^1.5.0", 2262 - "esutils": "^2.0.2", 2263 - "fast-deep-equal": "^3.1.3", 2264 - "file-entry-cache": "^8.0.0", 2265 - "find-up": "^5.0.0", 2266 - "glob-parent": "^6.0.2", 2267 - "ignore": "^5.2.0", 2268 - "imurmurhash": "^0.1.4", 2269 - "is-glob": "^4.0.0", 2270 - "json-stable-stringify-without-jsonify": "^1.0.1", 2271 - "lodash.merge": "^4.6.2", 2272 - "minimatch": "^3.1.2", 2273 - "natural-compare": "^1.4.0", 2274 - "optionator": "^0.9.3" 2275 - }, 2276 - "bin": { 2277 - "eslint": "bin/eslint.js" 2278 - }, 2279 - "engines": { 2280 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2281 - }, 2282 - "funding": { 2283 - "url": "https://eslint.org/donate" 2284 - }, 2285 - "peerDependencies": { 2286 - "jiti": "*" 2287 - }, 2288 - "peerDependenciesMeta": { 2289 - "jiti": { 2290 - "optional": true 2291 - } 2292 - } 2293 - }, 2294 - "node_modules/eslint-plugin-react-hooks": { 2295 - "version": "5.2.0", 2296 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", 2297 - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", 2298 - "dev": true, 2299 - "license": "MIT", 2300 - "engines": { 2301 - "node": ">=10" 2302 - }, 2303 - "peerDependencies": { 2304 - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 2305 - } 2306 - }, 2307 - "node_modules/eslint-plugin-react-refresh": { 2308 - "version": "0.4.20", 2309 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", 2310 - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", 2311 - "dev": true, 2312 - "license": "MIT", 2313 - "peerDependencies": { 2314 - "eslint": ">=8.40" 2315 - } 2316 - }, 2317 - "node_modules/eslint-scope": { 2318 - "version": "8.4.0", 2319 - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", 2320 - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", 2321 - "dev": true, 2322 - "license": "BSD-2-Clause", 2323 - "dependencies": { 2324 - "esrecurse": "^4.3.0", 2325 - "estraverse": "^5.2.0" 2326 - }, 2327 - "engines": { 2328 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2329 - }, 2330 - "funding": { 2331 - "url": "https://opencollective.com/eslint" 2332 - } 2333 - }, 2334 - "node_modules/eslint-visitor-keys": { 2335 - "version": "4.2.1", 2336 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", 2337 - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", 2338 - "dev": true, 2339 - "license": "Apache-2.0", 2340 - "engines": { 2341 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2342 - }, 2343 - "funding": { 2344 - "url": "https://opencollective.com/eslint" 2345 - } 2346 - }, 2347 - "node_modules/espree": { 2348 - "version": "10.4.0", 2349 - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", 2350 - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", 2351 - "dev": true, 2352 - "license": "BSD-2-Clause", 2353 - "dependencies": { 2354 - "acorn": "^8.15.0", 2355 - "acorn-jsx": "^5.3.2", 2356 - "eslint-visitor-keys": "^4.2.1" 2357 - }, 2358 - "engines": { 2359 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2360 - }, 2361 - "funding": { 2362 - "url": "https://opencollective.com/eslint" 2363 - } 2364 - }, 2365 - "node_modules/esquery": { 2366 - "version": "1.6.0", 2367 - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2368 - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 2369 - "dev": true, 2370 - "license": "BSD-3-Clause", 2371 - "dependencies": { 2372 - "estraverse": "^5.1.0" 2373 - }, 2374 - "engines": { 2375 - "node": ">=0.10" 2376 - } 2377 - }, 2378 - "node_modules/esrecurse": { 2379 - "version": "4.3.0", 2380 - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2381 - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2382 - "dev": true, 2383 - "license": "BSD-2-Clause", 2384 - "dependencies": { 2385 - "estraverse": "^5.2.0" 2386 - }, 2387 - "engines": { 2388 - "node": ">=4.0" 2389 - } 2390 - }, 2391 - "node_modules/estraverse": { 2392 - "version": "5.3.0", 2393 - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2394 - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2395 - "dev": true, 2396 - "license": "BSD-2-Clause", 2397 - "engines": { 2398 - "node": ">=4.0" 2399 - } 2400 - }, 2401 - "node_modules/esutils": { 2402 - "version": "2.0.3", 2403 - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2404 - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2405 - "dev": true, 2406 - "license": "BSD-2-Clause", 2407 - "engines": { 2408 - "node": ">=0.10.0" 2409 - } 2410 - }, 2411 - "node_modules/fast-deep-equal": { 2412 - "version": "3.1.3", 2413 - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2414 - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2415 - "dev": true, 2416 - "license": "MIT" 2417 - }, 2418 - "node_modules/fast-glob": { 2419 - "version": "3.3.3", 2420 - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 2421 - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 2422 - "dev": true, 2423 - "license": "MIT", 2424 - "dependencies": { 2425 - "@nodelib/fs.stat": "^2.0.2", 2426 - "@nodelib/fs.walk": "^1.2.3", 2427 - "glob-parent": "^5.1.2", 2428 - "merge2": "^1.3.0", 2429 - "micromatch": "^4.0.8" 2430 - }, 2431 - "engines": { 2432 - "node": ">=8.6.0" 2433 - } 2434 - }, 2435 - "node_modules/fast-glob/node_modules/glob-parent": { 2436 - "version": "5.1.2", 2437 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2438 - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2439 - "dev": true, 2440 - "license": "ISC", 2441 - "dependencies": { 2442 - "is-glob": "^4.0.1" 2443 - }, 2444 - "engines": { 2445 - "node": ">= 6" 2446 - } 2447 - }, 2448 - "node_modules/fast-json-stable-stringify": { 2449 - "version": "2.1.0", 2450 - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2451 - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2452 - "dev": true, 2453 - "license": "MIT" 2454 - }, 2455 - "node_modules/fast-levenshtein": { 2456 - "version": "2.0.6", 2457 - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2458 - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2459 - "dev": true, 2460 - "license": "MIT" 2461 - }, 2462 - "node_modules/fastq": { 2463 - "version": "1.19.1", 2464 - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 2465 - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 2466 - "dev": true, 2467 - "license": "ISC", 2468 - "dependencies": { 2469 - "reusify": "^1.0.4" 2470 - } 2471 - }, 2472 - "node_modules/file-entry-cache": { 2473 - "version": "8.0.0", 2474 - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2475 - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2476 - "dev": true, 2477 - "license": "MIT", 2478 - "dependencies": { 2479 - "flat-cache": "^4.0.0" 2480 - }, 2481 - "engines": { 2482 - "node": ">=16.0.0" 2483 - } 2484 - }, 2485 - "node_modules/fill-range": { 2486 - "version": "7.1.1", 2487 - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2488 - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2489 - "dev": true, 2490 - "license": "MIT", 2491 - "dependencies": { 2492 - "to-regex-range": "^5.0.1" 2493 - }, 2494 - "engines": { 2495 - "node": ">=8" 2496 - } 2497 - }, 2498 - "node_modules/find-up": { 2499 - "version": "5.0.0", 2500 - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2501 - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2502 - "dev": true, 2503 - "license": "MIT", 2504 - "dependencies": { 2505 - "locate-path": "^6.0.0", 2506 - "path-exists": "^4.0.0" 2507 - }, 2508 - "engines": { 2509 - "node": ">=10" 2510 - }, 2511 - "funding": { 2512 - "url": "https://github.com/sponsors/sindresorhus" 2513 - } 2514 - }, 2515 - "node_modules/flat-cache": { 2516 - "version": "4.0.1", 2517 - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2518 - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2519 - "dev": true, 2520 - "license": "MIT", 2521 - "dependencies": { 2522 - "flatted": "^3.2.9", 2523 - "keyv": "^4.5.4" 2524 - }, 2525 - "engines": { 2526 - "node": ">=16" 2527 - } 2528 - }, 2529 - "node_modules/flatted": { 2530 - "version": "3.3.3", 2531 - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 2532 - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 2533 - "dev": true, 2534 - "license": "ISC" 2535 - }, 2536 - "node_modules/follow-redirects": { 2537 - "version": "1.15.9", 2538 - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", 2539 - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", 2540 - "funding": [ 2541 - { 2542 - "type": "individual", 2543 - "url": "https://github.com/sponsors/RubenVerborgh" 2544 - } 2545 - ], 2546 - "license": "MIT", 2547 - "engines": { 2548 - "node": ">=4.0" 2549 - }, 2550 - "peerDependenciesMeta": { 2551 - "debug": { 2552 - "optional": true 2553 - } 2554 - } 2555 - }, 2556 - "node_modules/form-data": { 2557 - "version": "4.0.3", 2558 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", 2559 - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", 2560 - "license": "MIT", 2561 - "dependencies": { 2562 - "asynckit": "^0.4.0", 2563 - "combined-stream": "^1.0.8", 2564 - "es-set-tostringtag": "^2.1.0", 2565 - "hasown": "^2.0.2", 2566 - "mime-types": "^2.1.12" 2567 - }, 2568 - "engines": { 2569 - "node": ">= 6" 2570 - } 2571 - }, 2572 - "node_modules/fsevents": { 2573 - "version": "2.3.3", 2574 - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2575 - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2576 - "dev": true, 2577 - "hasInstallScript": true, 2578 - "license": "MIT", 2579 - "optional": true, 2580 - "os": [ 2581 - "darwin" 2582 - ], 2583 - "engines": { 2584 - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2585 - } 2586 - }, 2587 - "node_modules/function-bind": { 2588 - "version": "1.1.2", 2589 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2590 - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2591 - "license": "MIT", 2592 - "funding": { 2593 - "url": "https://github.com/sponsors/ljharb" 2594 - } 2595 - }, 2596 - "node_modules/gensync": { 2597 - "version": "1.0.0-beta.2", 2598 - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 2599 - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 2600 - "dev": true, 2601 - "license": "MIT", 2602 - "engines": { 2603 - "node": ">=6.9.0" 2604 - } 2605 - }, 2606 - "node_modules/get-intrinsic": { 2607 - "version": "1.3.0", 2608 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 2609 - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 2610 - "license": "MIT", 2611 - "dependencies": { 2612 - "call-bind-apply-helpers": "^1.0.2", 2613 - "es-define-property": "^1.0.1", 2614 - "es-errors": "^1.3.0", 2615 - "es-object-atoms": "^1.1.1", 2616 - "function-bind": "^1.1.2", 2617 - "get-proto": "^1.0.1", 2618 - "gopd": "^1.2.0", 2619 - "has-symbols": "^1.1.0", 2620 - "hasown": "^2.0.2", 2621 - "math-intrinsics": "^1.1.0" 2622 - }, 2623 - "engines": { 2624 - "node": ">= 0.4" 2625 - }, 2626 - "funding": { 2627 - "url": "https://github.com/sponsors/ljharb" 2628 - } 2629 - }, 2630 - "node_modules/get-proto": { 2631 - "version": "1.0.1", 2632 - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 2633 - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 2634 - "license": "MIT", 2635 - "dependencies": { 2636 - "dunder-proto": "^1.0.1", 2637 - "es-object-atoms": "^1.0.0" 2638 - }, 2639 - "engines": { 2640 - "node": ">= 0.4" 2641 - } 2642 - }, 2643 - "node_modules/glob-parent": { 2644 - "version": "6.0.2", 2645 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2646 - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2647 - "dev": true, 2648 - "license": "ISC", 2649 - "dependencies": { 2650 - "is-glob": "^4.0.3" 2651 - }, 2652 - "engines": { 2653 - "node": ">=10.13.0" 2654 - } 2655 - }, 2656 - "node_modules/globals": { 2657 - "version": "16.2.0", 2658 - "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", 2659 - "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", 2660 - "dev": true, 2661 - "license": "MIT", 2662 - "engines": { 2663 - "node": ">=18" 2664 - }, 2665 - "funding": { 2666 - "url": "https://github.com/sponsors/sindresorhus" 2667 - } 2668 - }, 2669 - "node_modules/gopd": { 2670 - "version": "1.2.0", 2671 - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 2672 - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 2673 - "license": "MIT", 2674 - "engines": { 2675 - "node": ">= 0.4" 2676 - }, 2677 - "funding": { 2678 - "url": "https://github.com/sponsors/ljharb" 2679 - } 2680 - }, 2681 - "node_modules/graphemer": { 2682 - "version": "1.4.0", 2683 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2684 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2685 - "dev": true, 2686 - "license": "MIT" 2687 - }, 2688 - "node_modules/has-flag": { 2689 - "version": "4.0.0", 2690 - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2691 - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2692 - "dev": true, 2693 - "license": "MIT", 2694 - "engines": { 2695 - "node": ">=8" 2696 - } 2697 - }, 2698 - "node_modules/has-symbols": { 2699 - "version": "1.1.0", 2700 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 2701 - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 2702 - "license": "MIT", 2703 - "engines": { 2704 - "node": ">= 0.4" 2705 - }, 2706 - "funding": { 2707 - "url": "https://github.com/sponsors/ljharb" 2708 - } 2709 - }, 2710 - "node_modules/has-tostringtag": { 2711 - "version": "1.0.2", 2712 - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 2713 - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 2714 - "license": "MIT", 2715 - "dependencies": { 2716 - "has-symbols": "^1.0.3" 2717 - }, 2718 - "engines": { 2719 - "node": ">= 0.4" 2720 - }, 2721 - "funding": { 2722 - "url": "https://github.com/sponsors/ljharb" 2723 - } 2724 - }, 2725 - "node_modules/hasown": { 2726 - "version": "2.0.2", 2727 - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2728 - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2729 - "license": "MIT", 2730 - "dependencies": { 2731 - "function-bind": "^1.1.2" 2732 - }, 2733 - "engines": { 2734 - "node": ">= 0.4" 2735 - } 2736 - }, 2737 - "node_modules/ignore": { 2738 - "version": "5.3.2", 2739 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 2740 - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 2741 - "dev": true, 2742 - "license": "MIT", 2743 - "engines": { 2744 - "node": ">= 4" 2745 - } 2746 - }, 2747 - "node_modules/import-fresh": { 2748 - "version": "3.3.1", 2749 - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 2750 - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 2751 - "dev": true, 2752 - "license": "MIT", 2753 - "dependencies": { 2754 - "parent-module": "^1.0.0", 2755 - "resolve-from": "^4.0.0" 2756 - }, 2757 - "engines": { 2758 - "node": ">=6" 2759 - }, 2760 - "funding": { 2761 - "url": "https://github.com/sponsors/sindresorhus" 2762 - } 2763 - }, 2764 - "node_modules/imurmurhash": { 2765 - "version": "0.1.4", 2766 - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2767 - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2768 - "dev": true, 2769 - "license": "MIT", 2770 - "engines": { 2771 - "node": ">=0.8.19" 2772 - } 2773 - }, 2774 - "node_modules/is-extglob": { 2775 - "version": "2.1.1", 2776 - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2777 - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2778 - "dev": true, 2779 - "license": "MIT", 2780 - "engines": { 2781 - "node": ">=0.10.0" 2782 - } 2783 - }, 2784 - "node_modules/is-glob": { 2785 - "version": "4.0.3", 2786 - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2787 - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2788 - "dev": true, 2789 - "license": "MIT", 2790 - "dependencies": { 2791 - "is-extglob": "^2.1.1" 2792 - }, 2793 - "engines": { 2794 - "node": ">=0.10.0" 2795 - } 2796 - }, 2797 - "node_modules/is-number": { 2798 - "version": "7.0.0", 2799 - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2800 - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2801 - "dev": true, 2802 - "license": "MIT", 2803 - "engines": { 2804 - "node": ">=0.12.0" 2805 - } 2806 - }, 2807 - "node_modules/isexe": { 2808 - "version": "2.0.0", 2809 - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2810 - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2811 - "dev": true, 2812 - "license": "ISC" 2813 - }, 2814 - "node_modules/js-tokens": { 2815 - "version": "4.0.0", 2816 - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2817 - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2818 - "dev": true, 2819 - "license": "MIT" 2820 - }, 2821 - "node_modules/js-yaml": { 2822 - "version": "4.1.0", 2823 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2824 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2825 - "dev": true, 2826 - "license": "MIT", 2827 - "dependencies": { 2828 - "argparse": "^2.0.1" 2829 - }, 2830 - "bin": { 2831 - "js-yaml": "bin/js-yaml.js" 2832 - } 2833 - }, 2834 - "node_modules/jsesc": { 2835 - "version": "3.1.0", 2836 - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 2837 - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 2838 - "dev": true, 2839 - "license": "MIT", 2840 - "bin": { 2841 - "jsesc": "bin/jsesc" 2842 - }, 2843 - "engines": { 2844 - "node": ">=6" 2845 - } 2846 - }, 2847 - "node_modules/json-buffer": { 2848 - "version": "3.0.1", 2849 - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2850 - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2851 - "dev": true, 2852 - "license": "MIT" 2853 - }, 2854 - "node_modules/json-schema-traverse": { 2855 - "version": "0.4.1", 2856 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2857 - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2858 - "dev": true, 2859 - "license": "MIT" 2860 - }, 2861 - "node_modules/json-stable-stringify-without-jsonify": { 2862 - "version": "1.0.1", 2863 - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2864 - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2865 - "dev": true, 2866 - "license": "MIT" 2867 - }, 2868 - "node_modules/json5": { 2869 - "version": "2.2.3", 2870 - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2871 - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2872 - "dev": true, 2873 - "license": "MIT", 2874 - "bin": { 2875 - "json5": "lib/cli.js" 2876 - }, 2877 - "engines": { 2878 - "node": ">=6" 2879 - } 2880 - }, 2881 - "node_modules/keyv": { 2882 - "version": "4.5.4", 2883 - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2884 - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2885 - "dev": true, 2886 - "license": "MIT", 2887 - "dependencies": { 2888 - "json-buffer": "3.0.1" 2889 - } 2890 - }, 2891 - "node_modules/levn": { 2892 - "version": "0.4.1", 2893 - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2894 - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2895 - "dev": true, 2896 - "license": "MIT", 2897 - "dependencies": { 2898 - "prelude-ls": "^1.2.1", 2899 - "type-check": "~0.4.0" 2900 - }, 2901 - "engines": { 2902 - "node": ">= 0.8.0" 2903 - } 2904 - }, 2905 - "node_modules/locate-path": { 2906 - "version": "6.0.0", 2907 - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2908 - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2909 - "dev": true, 2910 - "license": "MIT", 2911 - "dependencies": { 2912 - "p-locate": "^5.0.0" 2913 - }, 2914 - "engines": { 2915 - "node": ">=10" 2916 - }, 2917 - "funding": { 2918 - "url": "https://github.com/sponsors/sindresorhus" 2919 - } 2920 - }, 2921 - "node_modules/lodash.merge": { 2922 - "version": "4.6.2", 2923 - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2924 - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2925 - "dev": true, 2926 - "license": "MIT" 2927 - }, 2928 - "node_modules/lru-cache": { 2929 - "version": "5.1.1", 2930 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2931 - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2932 - "dev": true, 2933 - "license": "ISC", 2934 - "dependencies": { 2935 - "yallist": "^3.0.2" 2936 - } 2937 - }, 2938 - "node_modules/math-intrinsics": { 2939 - "version": "1.1.0", 2940 - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 2941 - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 2942 - "license": "MIT", 2943 - "engines": { 2944 - "node": ">= 0.4" 2945 - } 2946 - }, 2947 - "node_modules/merge2": { 2948 - "version": "1.4.1", 2949 - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2950 - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2951 - "dev": true, 2952 - "license": "MIT", 2953 - "engines": { 2954 - "node": ">= 8" 2955 - } 2956 - }, 2957 - "node_modules/micromatch": { 2958 - "version": "4.0.8", 2959 - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2960 - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2961 - "dev": true, 2962 - "license": "MIT", 2963 - "dependencies": { 2964 - "braces": "^3.0.3", 2965 - "picomatch": "^2.3.1" 2966 - }, 2967 - "engines": { 2968 - "node": ">=8.6" 2969 - } 2970 - }, 2971 - "node_modules/mime-db": { 2972 - "version": "1.52.0", 2973 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2974 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2975 - "license": "MIT", 2976 - "engines": { 2977 - "node": ">= 0.6" 2978 - } 2979 - }, 2980 - "node_modules/mime-types": { 2981 - "version": "2.1.35", 2982 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2983 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2984 - "license": "MIT", 2985 - "dependencies": { 2986 - "mime-db": "1.52.0" 2987 - }, 2988 - "engines": { 2989 - "node": ">= 0.6" 2990 - } 2991 - }, 2992 - "node_modules/minimatch": { 2993 - "version": "3.1.2", 2994 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2995 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2996 - "dev": true, 2997 - "license": "ISC", 2998 - "dependencies": { 2999 - "brace-expansion": "^1.1.7" 3000 - }, 3001 - "engines": { 3002 - "node": "*" 3003 - } 3004 - }, 3005 - "node_modules/ms": { 3006 - "version": "2.1.3", 3007 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3008 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3009 - "dev": true, 3010 - "license": "MIT" 3011 - }, 3012 - "node_modules/nanoid": { 3013 - "version": "3.3.11", 3014 - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 3015 - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 3016 - "dev": true, 3017 - "funding": [ 3018 - { 3019 - "type": "github", 3020 - "url": "https://github.com/sponsors/ai" 3021 - } 3022 - ], 3023 - "license": "MIT", 3024 - "bin": { 3025 - "nanoid": "bin/nanoid.cjs" 3026 - }, 3027 - "engines": { 3028 - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 3029 - } 3030 - }, 3031 - "node_modules/natural-compare": { 3032 - "version": "1.4.0", 3033 - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3034 - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3035 - "dev": true, 3036 - "license": "MIT" 3037 - }, 3038 - "node_modules/node-releases": { 3039 - "version": "2.0.19", 3040 - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 3041 - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 3042 - "dev": true, 3043 - "license": "MIT" 3044 - }, 3045 - "node_modules/optionator": { 3046 - "version": "0.9.4", 3047 - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 3048 - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 3049 - "dev": true, 3050 - "license": "MIT", 3051 - "dependencies": { 3052 - "deep-is": "^0.1.3", 3053 - "fast-levenshtein": "^2.0.6", 3054 - "levn": "^0.4.1", 3055 - "prelude-ls": "^1.2.1", 3056 - "type-check": "^0.4.0", 3057 - "word-wrap": "^1.2.5" 3058 - }, 3059 - "engines": { 3060 - "node": ">= 0.8.0" 3061 - } 3062 - }, 3063 - "node_modules/p-limit": { 3064 - "version": "3.1.0", 3065 - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3066 - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3067 - "dev": true, 3068 - "license": "MIT", 3069 - "dependencies": { 3070 - "yocto-queue": "^0.1.0" 3071 - }, 3072 - "engines": { 3073 - "node": ">=10" 3074 - }, 3075 - "funding": { 3076 - "url": "https://github.com/sponsors/sindresorhus" 3077 - } 3078 - }, 3079 - "node_modules/p-locate": { 3080 - "version": "5.0.0", 3081 - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3082 - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3083 - "dev": true, 3084 - "license": "MIT", 3085 - "dependencies": { 3086 - "p-limit": "^3.0.2" 3087 - }, 3088 - "engines": { 3089 - "node": ">=10" 3090 - }, 3091 - "funding": { 3092 - "url": "https://github.com/sponsors/sindresorhus" 3093 - } 3094 - }, 3095 - "node_modules/parent-module": { 3096 - "version": "1.0.1", 3097 - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3098 - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3099 - "dev": true, 3100 - "license": "MIT", 3101 - "dependencies": { 3102 - "callsites": "^3.0.0" 3103 - }, 3104 - "engines": { 3105 - "node": ">=6" 3106 - } 3107 - }, 3108 - "node_modules/path-exists": { 3109 - "version": "4.0.0", 3110 - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3111 - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3112 - "dev": true, 3113 - "license": "MIT", 3114 - "engines": { 3115 - "node": ">=8" 3116 - } 3117 - }, 3118 - "node_modules/path-key": { 3119 - "version": "3.1.1", 3120 - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3121 - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3122 - "dev": true, 3123 - "license": "MIT", 3124 - "engines": { 3125 - "node": ">=8" 3126 - } 3127 - }, 3128 - "node_modules/picocolors": { 3129 - "version": "1.1.1", 3130 - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 3131 - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 3132 - "dev": true, 3133 - "license": "ISC" 3134 - }, 3135 - "node_modules/picomatch": { 3136 - "version": "2.3.1", 3137 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3138 - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3139 - "dev": true, 3140 - "license": "MIT", 3141 - "engines": { 3142 - "node": ">=8.6" 3143 - }, 3144 - "funding": { 3145 - "url": "https://github.com/sponsors/jonschlinkert" 3146 - } 3147 - }, 3148 - "node_modules/postcss": { 3149 - "version": "8.5.6", 3150 - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 3151 - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 3152 - "dev": true, 3153 - "funding": [ 3154 - { 3155 - "type": "opencollective", 3156 - "url": "https://opencollective.com/postcss/" 3157 - }, 3158 - { 3159 - "type": "tidelift", 3160 - "url": "https://tidelift.com/funding/github/npm/postcss" 3161 - }, 3162 - { 3163 - "type": "github", 3164 - "url": "https://github.com/sponsors/ai" 3165 - } 3166 - ], 3167 - "license": "MIT", 3168 - "dependencies": { 3169 - "nanoid": "^3.3.11", 3170 - "picocolors": "^1.1.1", 3171 - "source-map-js": "^1.2.1" 3172 - }, 3173 - "engines": { 3174 - "node": "^10 || ^12 || >=14" 3175 - } 3176 - }, 3177 - "node_modules/prelude-ls": { 3178 - "version": "1.2.1", 3179 - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3180 - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3181 - "dev": true, 3182 - "license": "MIT", 3183 - "engines": { 3184 - "node": ">= 0.8.0" 3185 - } 3186 - }, 3187 - "node_modules/proxy-from-env": { 3188 - "version": "1.1.0", 3189 - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 3190 - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 3191 - "license": "MIT" 3192 - }, 3193 - "node_modules/punycode": { 3194 - "version": "2.3.1", 3195 - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3196 - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3197 - "dev": true, 3198 - "license": "MIT", 3199 - "engines": { 3200 - "node": ">=6" 3201 - } 3202 - }, 3203 - "node_modules/queue-microtask": { 3204 - "version": "1.2.3", 3205 - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3206 - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3207 - "dev": true, 3208 - "funding": [ 3209 - { 3210 - "type": "github", 3211 - "url": "https://github.com/sponsors/feross" 3212 - }, 3213 - { 3214 - "type": "patreon", 3215 - "url": "https://www.patreon.com/feross" 3216 - }, 3217 - { 3218 - "type": "consulting", 3219 - "url": "https://feross.org/support" 3220 - } 3221 - ], 3222 - "license": "MIT" 3223 - }, 3224 - "node_modules/react": { 3225 - "version": "19.1.0", 3226 - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 3227 - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 3228 - "license": "MIT", 3229 - "engines": { 3230 - "node": ">=0.10.0" 3231 - } 3232 - }, 3233 - "node_modules/react-dom": { 3234 - "version": "19.1.0", 3235 - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", 3236 - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", 3237 - "license": "MIT", 3238 - "dependencies": { 3239 - "scheduler": "^0.26.0" 3240 - }, 3241 - "peerDependencies": { 3242 - "react": "^19.1.0" 3243 - } 3244 - }, 3245 - "node_modules/react-refresh": { 3246 - "version": "0.17.0", 3247 - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", 3248 - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", 3249 - "dev": true, 3250 - "license": "MIT", 3251 - "engines": { 3252 - "node": ">=0.10.0" 3253 - } 3254 - }, 3255 - "node_modules/react-router": { 3256 - "version": "7.6.2", 3257 - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.2.tgz", 3258 - "integrity": "sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==", 3259 - "license": "MIT", 3260 - "dependencies": { 3261 - "cookie": "^1.0.1", 3262 - "set-cookie-parser": "^2.6.0" 3263 - }, 3264 - "engines": { 3265 - "node": ">=20.0.0" 3266 - }, 3267 - "peerDependencies": { 3268 - "react": ">=18", 3269 - "react-dom": ">=18" 3270 - }, 3271 - "peerDependenciesMeta": { 3272 - "react-dom": { 3273 - "optional": true 3274 - } 3275 - } 3276 - }, 3277 - "node_modules/react-router-dom": { 3278 - "version": "7.6.2", 3279 - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.2.tgz", 3280 - "integrity": "sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==", 3281 - "license": "MIT", 3282 - "dependencies": { 3283 - "react-router": "7.6.2" 3284 - }, 3285 - "engines": { 3286 - "node": ">=20.0.0" 3287 - }, 3288 - "peerDependencies": { 3289 - "react": ">=18", 3290 - "react-dom": ">=18" 3291 - } 3292 - }, 3293 - "node_modules/resolve-from": { 3294 - "version": "4.0.0", 3295 - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3296 - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3297 - "dev": true, 3298 - "license": "MIT", 3299 - "engines": { 3300 - "node": ">=4" 3301 - } 3302 - }, 3303 - "node_modules/reusify": { 3304 - "version": "1.1.0", 3305 - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 3306 - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 3307 - "dev": true, 3308 - "license": "MIT", 3309 - "engines": { 3310 - "iojs": ">=1.0.0", 3311 - "node": ">=0.10.0" 3312 - } 3313 - }, 3314 - "node_modules/rollup": { 3315 - "version": "4.44.0", 3316 - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", 3317 - "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==", 3318 - "dev": true, 3319 - "license": "MIT", 3320 - "dependencies": { 3321 - "@types/estree": "1.0.8" 3322 - }, 3323 - "bin": { 3324 - "rollup": "dist/bin/rollup" 3325 - }, 3326 - "engines": { 3327 - "node": ">=18.0.0", 3328 - "npm": ">=8.0.0" 3329 - }, 3330 - "optionalDependencies": { 3331 - "@rollup/rollup-android-arm-eabi": "4.44.0", 3332 - "@rollup/rollup-android-arm64": "4.44.0", 3333 - "@rollup/rollup-darwin-arm64": "4.44.0", 3334 - "@rollup/rollup-darwin-x64": "4.44.0", 3335 - "@rollup/rollup-freebsd-arm64": "4.44.0", 3336 - "@rollup/rollup-freebsd-x64": "4.44.0", 3337 - "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", 3338 - "@rollup/rollup-linux-arm-musleabihf": "4.44.0", 3339 - "@rollup/rollup-linux-arm64-gnu": "4.44.0", 3340 - "@rollup/rollup-linux-arm64-musl": "4.44.0", 3341 - "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", 3342 - "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", 3343 - "@rollup/rollup-linux-riscv64-gnu": "4.44.0", 3344 - "@rollup/rollup-linux-riscv64-musl": "4.44.0", 3345 - "@rollup/rollup-linux-s390x-gnu": "4.44.0", 3346 - "@rollup/rollup-linux-x64-gnu": "4.44.0", 3347 - "@rollup/rollup-linux-x64-musl": "4.44.0", 3348 - "@rollup/rollup-win32-arm64-msvc": "4.44.0", 3349 - "@rollup/rollup-win32-ia32-msvc": "4.44.0", 3350 - "@rollup/rollup-win32-x64-msvc": "4.44.0", 3351 - "fsevents": "~2.3.2" 3352 - } 3353 - }, 3354 - "node_modules/run-parallel": { 3355 - "version": "1.2.0", 3356 - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3357 - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3358 - "dev": true, 3359 - "funding": [ 3360 - { 3361 - "type": "github", 3362 - "url": "https://github.com/sponsors/feross" 3363 - }, 3364 - { 3365 - "type": "patreon", 3366 - "url": "https://www.patreon.com/feross" 3367 - }, 3368 - { 3369 - "type": "consulting", 3370 - "url": "https://feross.org/support" 3371 - } 3372 - ], 3373 - "license": "MIT", 3374 - "dependencies": { 3375 - "queue-microtask": "^1.2.2" 3376 - } 3377 - }, 3378 - "node_modules/scheduler": { 3379 - "version": "0.26.0", 3380 - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", 3381 - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", 3382 - "license": "MIT" 3383 - }, 3384 - "node_modules/semver": { 3385 - "version": "6.3.1", 3386 - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3387 - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3388 - "dev": true, 3389 - "license": "ISC", 3390 - "bin": { 3391 - "semver": "bin/semver.js" 3392 - } 3393 - }, 3394 - "node_modules/set-cookie-parser": { 3395 - "version": "2.7.1", 3396 - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", 3397 - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", 3398 - "license": "MIT" 3399 - }, 3400 - "node_modules/shebang-command": { 3401 - "version": "2.0.0", 3402 - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3403 - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3404 - "dev": true, 3405 - "license": "MIT", 3406 - "dependencies": { 3407 - "shebang-regex": "^3.0.0" 3408 - }, 3409 - "engines": { 3410 - "node": ">=8" 3411 - } 3412 - }, 3413 - "node_modules/shebang-regex": { 3414 - "version": "3.0.0", 3415 - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3416 - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3417 - "dev": true, 3418 - "license": "MIT", 3419 - "engines": { 3420 - "node": ">=8" 3421 - } 3422 - }, 3423 - "node_modules/source-map-js": { 3424 - "version": "1.2.1", 3425 - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 3426 - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 3427 - "dev": true, 3428 - "license": "BSD-3-Clause", 3429 - "engines": { 3430 - "node": ">=0.10.0" 3431 - } 3432 - }, 3433 - "node_modules/strip-json-comments": { 3434 - "version": "3.1.1", 3435 - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3436 - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3437 - "dev": true, 3438 - "license": "MIT", 3439 - "engines": { 3440 - "node": ">=8" 3441 - }, 3442 - "funding": { 3443 - "url": "https://github.com/sponsors/sindresorhus" 3444 - } 3445 - }, 3446 - "node_modules/supports-color": { 3447 - "version": "7.2.0", 3448 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3449 - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3450 - "dev": true, 3451 - "license": "MIT", 3452 - "dependencies": { 3453 - "has-flag": "^4.0.0" 3454 - }, 3455 - "engines": { 3456 - "node": ">=8" 3457 - } 3458 - }, 3459 - "node_modules/tinyglobby": { 3460 - "version": "0.2.14", 3461 - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", 3462 - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", 3463 - "dev": true, 3464 - "license": "MIT", 3465 - "dependencies": { 3466 - "fdir": "^6.4.4", 3467 - "picomatch": "^4.0.2" 3468 - }, 3469 - "engines": { 3470 - "node": ">=12.0.0" 3471 - }, 3472 - "funding": { 3473 - "url": "https://github.com/sponsors/SuperchupuDev" 3474 - } 3475 - }, 3476 - "node_modules/tinyglobby/node_modules/fdir": { 3477 - "version": "6.4.6", 3478 - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", 3479 - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", 3480 - "dev": true, 3481 - "license": "MIT", 3482 - "peerDependencies": { 3483 - "picomatch": "^3 || ^4" 3484 - }, 3485 - "peerDependenciesMeta": { 3486 - "picomatch": { 3487 - "optional": true 3488 - } 3489 - } 3490 - }, 3491 - "node_modules/tinyglobby/node_modules/picomatch": { 3492 - "version": "4.0.2", 3493 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 3494 - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 3495 - "dev": true, 3496 - "license": "MIT", 3497 - "engines": { 3498 - "node": ">=12" 3499 - }, 3500 - "funding": { 3501 - "url": "https://github.com/sponsors/jonschlinkert" 3502 - } 3503 - }, 3504 - "node_modules/to-regex-range": { 3505 - "version": "5.0.1", 3506 - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3507 - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3508 - "dev": true, 3509 - "license": "MIT", 3510 - "dependencies": { 3511 - "is-number": "^7.0.0" 3512 - }, 3513 - "engines": { 3514 - "node": ">=8.0" 3515 - } 3516 - }, 3517 - "node_modules/ts-api-utils": { 3518 - "version": "2.1.0", 3519 - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 3520 - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", 3521 - "dev": true, 3522 - "license": "MIT", 3523 - "engines": { 3524 - "node": ">=18.12" 3525 - }, 3526 - "peerDependencies": { 3527 - "typescript": ">=4.8.4" 3528 - } 3529 - }, 3530 - "node_modules/type-check": { 3531 - "version": "0.4.0", 3532 - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3533 - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3534 - "dev": true, 3535 - "license": "MIT", 3536 - "dependencies": { 3537 - "prelude-ls": "^1.2.1" 3538 - }, 3539 - "engines": { 3540 - "node": ">= 0.8.0" 3541 - } 3542 - }, 3543 - "node_modules/typescript": { 3544 - "version": "5.8.3", 3545 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 3546 - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 3547 - "dev": true, 3548 - "license": "Apache-2.0", 3549 - "bin": { 3550 - "tsc": "bin/tsc", 3551 - "tsserver": "bin/tsserver" 3552 - }, 3553 - "engines": { 3554 - "node": ">=14.17" 3555 - } 3556 - }, 3557 - "node_modules/typescript-eslint": { 3558 - "version": "8.34.1", 3559 - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz", 3560 - "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==", 3561 - "dev": true, 3562 - "license": "MIT", 3563 - "dependencies": { 3564 - "@typescript-eslint/eslint-plugin": "8.34.1", 3565 - "@typescript-eslint/parser": "8.34.1", 3566 - "@typescript-eslint/utils": "8.34.1" 3567 - }, 3568 - "engines": { 3569 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 3570 - }, 3571 - "funding": { 3572 - "type": "opencollective", 3573 - "url": "https://opencollective.com/typescript-eslint" 3574 - }, 3575 - "peerDependencies": { 3576 - "eslint": "^8.57.0 || ^9.0.0", 3577 - "typescript": ">=4.8.4 <5.9.0" 3578 - } 3579 - }, 3580 - "node_modules/update-browserslist-db": { 3581 - "version": "1.1.3", 3582 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", 3583 - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 3584 - "dev": true, 3585 - "funding": [ 3586 - { 3587 - "type": "opencollective", 3588 - "url": "https://opencollective.com/browserslist" 3589 - }, 3590 - { 3591 - "type": "tidelift", 3592 - "url": "https://tidelift.com/funding/github/npm/browserslist" 3593 - }, 3594 - { 3595 - "type": "github", 3596 - "url": "https://github.com/sponsors/ai" 3597 - } 3598 - ], 3599 - "license": "MIT", 3600 - "dependencies": { 3601 - "escalade": "^3.2.0", 3602 - "picocolors": "^1.1.1" 3603 - }, 3604 - "bin": { 3605 - "update-browserslist-db": "cli.js" 3606 - }, 3607 - "peerDependencies": { 3608 - "browserslist": ">= 4.21.0" 3609 - } 3610 - }, 3611 - "node_modules/uri-js": { 3612 - "version": "4.4.1", 3613 - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3614 - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3615 - "dev": true, 3616 - "license": "BSD-2-Clause", 3617 - "dependencies": { 3618 - "punycode": "^2.1.0" 3619 - } 3620 - }, 3621 - "node_modules/vite": { 3622 - "version": "6.3.5", 3623 - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", 3624 - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", 3625 - "dev": true, 3626 - "license": "MIT", 3627 - "dependencies": { 3628 - "esbuild": "^0.25.0", 3629 - "fdir": "^6.4.4", 3630 - "picomatch": "^4.0.2", 3631 - "postcss": "^8.5.3", 3632 - "rollup": "^4.34.9", 3633 - "tinyglobby": "^0.2.13" 3634 - }, 3635 - "bin": { 3636 - "vite": "bin/vite.js" 3637 - }, 3638 - "engines": { 3639 - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 3640 - }, 3641 - "funding": { 3642 - "url": "https://github.com/vitejs/vite?sponsor=1" 3643 - }, 3644 - "optionalDependencies": { 3645 - "fsevents": "~2.3.3" 3646 - }, 3647 - "peerDependencies": { 3648 - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 3649 - "jiti": ">=1.21.0", 3650 - "less": "*", 3651 - "lightningcss": "^1.21.0", 3652 - "sass": "*", 3653 - "sass-embedded": "*", 3654 - "stylus": "*", 3655 - "sugarss": "*", 3656 - "terser": "^5.16.0", 3657 - "tsx": "^4.8.1", 3658 - "yaml": "^2.4.2" 3659 - }, 3660 - "peerDependenciesMeta": { 3661 - "@types/node": { 3662 - "optional": true 3663 - }, 3664 - "jiti": { 3665 - "optional": true 3666 - }, 3667 - "less": { 3668 - "optional": true 3669 - }, 3670 - "lightningcss": { 3671 - "optional": true 3672 - }, 3673 - "sass": { 3674 - "optional": true 3675 - }, 3676 - "sass-embedded": { 3677 - "optional": true 3678 - }, 3679 - "stylus": { 3680 - "optional": true 3681 - }, 3682 - "sugarss": { 3683 - "optional": true 3684 - }, 3685 - "terser": { 3686 - "optional": true 3687 - }, 3688 - "tsx": { 3689 - "optional": true 3690 - }, 3691 - "yaml": { 3692 - "optional": true 3693 - } 3694 - } 3695 - }, 3696 - "node_modules/vite/node_modules/fdir": { 3697 - "version": "6.4.6", 3698 - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", 3699 - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", 3700 - "dev": true, 3701 - "license": "MIT", 3702 - "peerDependencies": { 3703 - "picomatch": "^3 || ^4" 3704 - }, 3705 - "peerDependenciesMeta": { 3706 - "picomatch": { 3707 - "optional": true 3708 - } 3709 - } 3710 - }, 3711 - "node_modules/vite/node_modules/picomatch": { 3712 - "version": "4.0.2", 3713 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 3714 - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 3715 - "dev": true, 3716 - "license": "MIT", 3717 - "engines": { 3718 - "node": ">=12" 3719 - }, 3720 - "funding": { 3721 - "url": "https://github.com/sponsors/jonschlinkert" 3722 - } 3723 - }, 3724 - "node_modules/which": { 3725 - "version": "2.0.2", 3726 - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3727 - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3728 - "dev": true, 3729 - "license": "ISC", 3730 - "dependencies": { 3731 - "isexe": "^2.0.0" 3732 - }, 3733 - "bin": { 3734 - "node-which": "bin/node-which" 3735 - }, 3736 - "engines": { 3737 - "node": ">= 8" 3738 - } 3739 - }, 3740 - "node_modules/word-wrap": { 3741 - "version": "1.2.5", 3742 - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 3743 - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 3744 - "dev": true, 3745 - "license": "MIT", 3746 - "engines": { 3747 - "node": ">=0.10.0" 3748 - } 3749 - }, 3750 - "node_modules/yallist": { 3751 - "version": "3.1.1", 3752 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3753 - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3754 - "dev": true, 3755 - "license": "ISC" 3756 - }, 3757 - "node_modules/yocto-queue": { 3758 - "version": "0.1.0", 3759 - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3760 - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3761 - "dev": true, 3762 - "license": "MIT", 3763 - "engines": { 3764 - "node": ">=10" 3765 - }, 3766 - "funding": { 3767 - "url": "https://github.com/sponsors/sindresorhus" 3768 - } 3769 - } 3770 - } 3771 - }
-33
client/package.json
··· 1 - { 2 - "name": "client", 3 - "private": true, 4 - "version": "0.0.0", 5 - "type": "module", 6 - "scripts": { 7 - "dev": "vite", 8 - "build": "vite build", 9 - "lint": "eslint .", 10 - "preview": "vite preview" 11 - }, 12 - "dependencies": { 13 - "@tanstack/react-query": "^5.80.10", 14 - "@tanstack/react-query-devtools": "^5.80.10", 15 - "axios": "^1.10.0", 16 - "react": "^19.1.0", 17 - "react-dom": "^19.1.0", 18 - "react-router-dom": "^7.6.2" 19 - }, 20 - "devDependencies": { 21 - "@eslint/js": "^9.25.0", 22 - "@types/react": "^19.1.2", 23 - "@types/react-dom": "^19.1.2", 24 - "@vitejs/plugin-react": "^4.4.1", 25 - "eslint": "^9.25.0", 26 - "eslint-plugin-react-hooks": "^5.2.0", 27 - "eslint-plugin-react-refresh": "^0.4.19", 28 - "globals": "^16.0.0", 29 - "typescript": "~5.8.3", 30 - "typescript-eslint": "^8.30.1", 31 - "vite": "^6.3.5" 32 - } 33 - }
-1
client/public/vite.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
-42
client/src/App.tsx
··· 1 - import { Routes, Route, Link } from 'react-router-dom' 2 - import { Home } from './pages/Home' 3 - import { Submit } from './pages/Submit' 4 - import { Tag } from './pages/Tag' 5 - import { Vibes } from './pages/Vibes' 6 - import { Vibe } from './pages/Vibe' 7 - import { Emerging } from './pages/Emerging' 8 - 9 - function App() { 10 - return ( 11 - <div className="app"> 12 - <header> 13 - <div className="container"> 14 - <h1> 15 - <Link to="/"> 16 - <span className="radar-icon">📡</span>blonk 17 - </Link> 18 - </h1> 19 - <nav> 20 - <Link to="/">radar</Link> 21 - <Link to="/vibes">vibes</Link> 22 - <Link to="/emerging">emerging</Link> 23 - <Link to="/submit">transmit</Link> 24 - </nav> 25 - </div> 26 - </header> 27 - 28 - <div className="container"> 29 - <Routes> 30 - <Route path="/" element={<Home />} /> 31 - <Route path="/submit" element={<Submit />} /> 32 - <Route path="/tag/:tag" element={<Tag />} /> 33 - <Route path="/vibes" element={<Vibes />} /> 34 - <Route path="/vibe/:vibeUri" element={<Vibe />} /> 35 - <Route path="/emerging" element={<Emerging />} /> 36 - </Routes> 37 - </div> 38 - </div> 39 - ) 40 - } 41 - 42 - export default App
-58
client/src/api/blips.ts
··· 1 - import axios from 'axios' 2 - 3 - const API_BASE = '/api' 4 - 5 - export interface Vibe { 6 - uri: string 7 - cid: string 8 - creatorDid: string 9 - name: string 10 - mood: string 11 - emoji?: string 12 - color?: string 13 - memberCount: number 14 - createdAt: string 15 - } 16 - 17 - export interface Blip { 18 - uri: string 19 - cid: string 20 - authorDid: string 21 - authorHandle?: string 22 - authorDisplayName?: string 23 - title: string 24 - body?: string 25 - url?: string 26 - tags?: string[] 27 - vibeUri?: string 28 - vibeName?: string 29 - createdAt: string 30 - grooves: number 31 - } 32 - 33 - export const blipsApi = { 34 - getBlips: async (): Promise<Blip[]> => { 35 - const { data } = await axios.get(`${API_BASE}/blips`) 36 - return data.blips 37 - }, 38 - 39 - getBlipsByTag: async (tag: string): Promise<Blip[]> => { 40 - const { data } = await axios.get(`${API_BASE}/blips/tag/${tag}`) 41 - return data.blips 42 - }, 43 - 44 - createBlip: async (blip: { 45 - title: string 46 - body?: string 47 - url?: string 48 - tags: string[] 49 - vibe?: { 50 - uri: string 51 - cid: string 52 - name?: string 53 - } 54 - }) => { 55 - const { data } = await axios.post(`${API_BASE}/blips`, blip) 56 - return data 57 - }, 58 - }
-44
client/src/api/vibes.ts
··· 1 - import axios from 'axios' 2 - import type { Vibe, Blip } from './blips' 3 - 4 - const API_BASE = '/api' 5 - 6 - export interface EmergingVibe { 7 - vibeName: string 8 - mentionCount: number 9 - firstMentioned: string 10 - lastMentioned: string 11 - progress: number 12 - } 13 - 14 - export const vibesApi = { 15 - getVibes: async (): Promise<Vibe[]> => { 16 - const { data } = await axios.get(`${API_BASE}/vibes`) 17 - return data.vibes 18 - }, 19 - 20 - getEmergingVibes: async (): Promise<EmergingVibe[]> => { 21 - const { data } = await axios.get(`${API_BASE}/vibes/emerging`) 22 - return data.emergingVibes 23 - }, 24 - 25 - getVibeBlips: async (vibeUri: string): Promise<Blip[]> => { 26 - const { data } = await axios.get(`${API_BASE}/vibes/${encodeURIComponent(vibeUri)}/blips`) 27 - return data.blips 28 - }, 29 - 30 - createVibe: async (vibe: { 31 - name: string 32 - mood: string 33 - emoji?: string 34 - color?: string 35 - }) => { 36 - const { data } = await axios.post(`${API_BASE}/vibes`, vibe) 37 - return data 38 - }, 39 - 40 - joinVibe: async (vibeUri: string, cid: string) => { 41 - const { data } = await axios.post(`${API_BASE}/vibes/${encodeURIComponent(vibeUri)}/join`, { cid }) 42 - return data 43 - }, 44 - }
-1
client/src/assets/react.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
-74
client/src/components/BlipList.tsx
··· 1 - import { Link } from 'react-router-dom' 2 - import type { Blip } from '../api/blips' 3 - import { formatDistance } from '../utils/date' 4 - 5 - interface BlipListProps { 6 - blips: Blip[] 7 - } 8 - 9 - export function BlipList({ blips }: BlipListProps) { 10 - if (blips.length === 0) { 11 - return ( 12 - <div className="empty-state"> 13 - <p>No blips detected on the radar yet.</p> 14 - <p> 15 - <Link to="/submit">Transmit the first blip</Link> 16 - </p> 17 - </div> 18 - ) 19 - } 20 - 21 - return ( 22 - <div className="blip-list"> 23 - {blips.map((blip) => ( 24 - <div key={blip.uri} className="blip-item"> 25 - <div className="blip-grooves">{blip.grooves}</div> 26 - <div className="blip-content"> 27 - {blip.url ? ( 28 - <a 29 - href={blip.url} 30 - className="blip-title" 31 - target="_blank" 32 - rel="noopener noreferrer" 33 - > 34 - {blip.title} 35 - </a> 36 - ) : ( 37 - <span className="blip-title">{blip.title}</span> 38 - )} 39 - 40 - {blip.body && ( 41 - <div className="blip-body"> 42 - {blip.body.length > 200 43 - ? `${blip.body.substring(0, 200)}...` 44 - : blip.body} 45 - </div> 46 - )} 47 - 48 - <div className="blip-meta"> 49 - <span> 50 - {blip.authorHandle ? `@${blip.authorHandle}` : 'anonymous'} · {formatDistance(blip.createdAt)} 51 - </span> 52 - {blip.vibeName && ( 53 - <span className="blip-vibe"> 54 - · <Link to={`/vibe/${encodeURIComponent(blip.vibeUri!)}`} className="vibe-link"> 55 - {blip.vibeName} 56 - </Link> 57 - </span> 58 - )} 59 - {blip.tags && blip.tags.length > 0 && ( 60 - <span className="blip-tags"> 61 - {blip.tags.map((tag) => ( 62 - <Link key={tag} to={`/tag/${tag}`} className="tag"> 63 - {tag} 64 - </Link> 65 - ))} 66 - </span> 67 - )} 68 - </div> 69 - </div> 70 - </div> 71 - ))} 72 - </div> 73 - ) 74 - }
-28
client/src/hooks/useBlips.ts
··· 1 - import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' 2 - import { blipsApi } from '../api/blips' 3 - 4 - export const useBlips = () => { 5 - return useQuery({ 6 - queryKey: ['blips'], 7 - queryFn: blipsApi.getBlips, 8 - }) 9 - } 10 - 11 - export const useBlipsByTag = (tag: string) => { 12 - return useQuery({ 13 - queryKey: ['blips', 'tag', tag], 14 - queryFn: () => blipsApi.getBlipsByTag(tag), 15 - enabled: !!tag, 16 - }) 17 - } 18 - 19 - export const useCreateBlip = () => { 20 - const queryClient = useQueryClient() 21 - 22 - return useMutation({ 23 - mutationFn: blipsApi.createBlip, 24 - onSuccess: () => { 25 - queryClient.invalidateQueries({ queryKey: ['blips'] }) 26 - }, 27 - }) 28 - }
-48
client/src/hooks/useVibes.ts
··· 1 - import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' 2 - import { vibesApi } from '../api/vibes' 3 - 4 - export const useVibes = () => { 5 - return useQuery({ 6 - queryKey: ['vibes'], 7 - queryFn: vibesApi.getVibes, 8 - }) 9 - } 10 - 11 - export const useEmergingVibes = () => { 12 - return useQuery({ 13 - queryKey: ['vibes', 'emerging'], 14 - queryFn: vibesApi.getEmergingVibes, 15 - refetchInterval: 10000, // Refresh every 10 seconds to see progress 16 - }) 17 - } 18 - 19 - export const useVibeBlips = (vibeUri: string) => { 20 - return useQuery({ 21 - queryKey: ['vibes', vibeUri, 'blips'], 22 - queryFn: () => vibesApi.getVibeBlips(vibeUri), 23 - enabled: !!vibeUri, 24 - }) 25 - } 26 - 27 - export const useCreateVibe = () => { 28 - const queryClient = useQueryClient() 29 - 30 - return useMutation({ 31 - mutationFn: vibesApi.createVibe, 32 - onSuccess: () => { 33 - queryClient.invalidateQueries({ queryKey: ['vibes'] }) 34 - }, 35 - }) 36 - } 37 - 38 - export const useJoinVibe = () => { 39 - const queryClient = useQueryClient() 40 - 41 - return useMutation({ 42 - mutationFn: ({ vibeUri, cid }: { vibeUri: string; cid: string }) => 43 - vibesApi.joinVibe(vibeUri, cid), 44 - onSuccess: () => { 45 - queryClient.invalidateQueries({ queryKey: ['vibes'] }) 46 - }, 47 - }) 48 - }
-415
client/src/index.css
··· 1 - :root { 2 - --blonk-blue: #3366cc; 3 - --blonk-light-blue: #6699ff; 4 - --blonk-gray: #666666; 5 - --blonk-light-gray: #cccccc; 6 - --blonk-bg: #f8f8f8; 7 - --blonk-white: #ffffff; 8 - } 9 - 10 - * { 11 - margin: 0; 12 - padding: 0; 13 - box-sizing: border-box; 14 - } 15 - 16 - body { 17 - font-family: Verdana, Arial, sans-serif; 18 - font-size: 11px; 19 - line-height: 1.4; 20 - color: #333; 21 - background-color: var(--blonk-bg); 22 - margin: 0; 23 - } 24 - 25 - .app { 26 - min-height: 100vh; 27 - display: flex; 28 - flex-direction: column; 29 - } 30 - 31 - .container { 32 - max-width: 800px; 33 - margin: 0 auto; 34 - padding: 20px; 35 - width: 100%; 36 - } 37 - 38 - header { 39 - background-color: var(--blonk-blue); 40 - color: var(--blonk-white); 41 - padding: 10px 0; 42 - margin-bottom: 20px; 43 - } 44 - 45 - header .container { 46 - display: flex; 47 - justify-content: space-between; 48 - align-items: center; 49 - padding: 0 20px; 50 - } 51 - 52 - header h1 { 53 - font-size: 24px; 54 - font-weight: normal; 55 - letter-spacing: -1px; 56 - } 57 - 58 - header h1 a { 59 - color: var(--blonk-white); 60 - text-decoration: none; 61 - } 62 - 63 - header nav a { 64 - color: var(--blonk-white); 65 - text-decoration: none; 66 - margin-left: 15px; 67 - font-size: 12px; 68 - } 69 - 70 - header nav a:hover { 71 - text-decoration: underline; 72 - } 73 - 74 - .blip-list { 75 - background-color: var(--blonk-white); 76 - border: 1px solid var(--blonk-light-gray); 77 - } 78 - 79 - .blip-item { 80 - padding: 8px 10px; 81 - border-bottom: 1px solid #f0f0f0; 82 - display: flex; 83 - align-items: start; 84 - gap: 10px; 85 - } 86 - 87 - .blip-item:last-child { 88 - border-bottom: none; 89 - } 90 - 91 - .blip-grooves { 92 - color: var(--blonk-gray); 93 - font-size: 10px; 94 - min-width: 30px; 95 - text-align: right; 96 - padding-top: 2px; 97 - } 98 - 99 - .blip-content { 100 - flex: 1; 101 - } 102 - 103 - .blip-title { 104 - color: var(--blonk-blue); 105 - text-decoration: none; 106 - font-size: 12px; 107 - font-weight: normal; 108 - } 109 - 110 - .blip-title:hover { 111 - text-decoration: underline; 112 - } 113 - 114 - .blip-body { 115 - color: #666; 116 - font-size: 10px; 117 - margin-top: 2px; 118 - } 119 - 120 - .blip-meta { 121 - color: var(--blonk-gray); 122 - font-size: 10px; 123 - margin-top: 2px; 124 - } 125 - 126 - .blip-tags { 127 - display: inline; 128 - margin-left: 5px; 129 - } 130 - 131 - .tag { 132 - color: var(--blonk-gray); 133 - text-decoration: none; 134 - margin-right: 5px; 135 - font-size: 10px; 136 - } 137 - 138 - .tag:hover { 139 - color: var(--blonk-blue); 140 - text-decoration: underline; 141 - } 142 - 143 - .submit-form { 144 - background-color: var(--blonk-white); 145 - border: 1px solid var(--blonk-light-gray); 146 - padding: 20px; 147 - margin-top: 20px; 148 - } 149 - 150 - .form-group { 151 - margin-bottom: 15px; 152 - } 153 - 154 - .form-group label { 155 - display: block; 156 - color: var(--blonk-gray); 157 - margin-bottom: 3px; 158 - font-size: 11px; 159 - } 160 - 161 - .form-group input[type="text"], 162 - .form-group input[type="url"], 163 - .form-group textarea { 164 - width: 100%; 165 - padding: 4px 6px; 166 - border: 1px solid var(--blonk-light-gray); 167 - font-family: Verdana, Arial, sans-serif; 168 - font-size: 11px; 169 - } 170 - 171 - .form-group textarea { 172 - height: 60px; 173 - resize: vertical; 174 - } 175 - 176 - .form-note { 177 - color: var(--blonk-gray); 178 - font-size: 10px; 179 - margin-top: 2px; 180 - } 181 - 182 - .submit-button { 183 - background-color: var(--blonk-blue); 184 - color: var(--blonk-white); 185 - border: none; 186 - padding: 5px 15px; 187 - font-size: 11px; 188 - cursor: pointer; 189 - border-radius: 0; 190 - } 191 - 192 - .submit-button:hover { 193 - background-color: var(--blonk-light-blue); 194 - } 195 - 196 - .submit-button:disabled { 197 - opacity: 0.6; 198 - cursor: not-allowed; 199 - } 200 - 201 - .vibe-select { 202 - width: 100%; 203 - padding: 4px 6px; 204 - border: 1px solid var(--blonk-light-gray); 205 - font-family: Verdana, Arial, sans-serif; 206 - font-size: 11px; 207 - background-color: var(--blonk-white); 208 - } 209 - 210 - .blip-vibe { 211 - color: var(--blonk-gray); 212 - font-size: 10px; 213 - } 214 - 215 - .vibe-link { 216 - color: var(--blonk-blue); 217 - text-decoration: none; 218 - font-style: italic; 219 - } 220 - 221 - .vibe-link:hover { 222 - text-decoration: underline; 223 - } 224 - 225 - .page-title { 226 - font-size: 16px; 227 - color: var(--blonk-gray); 228 - margin-bottom: 15px; 229 - font-weight: normal; 230 - display: flex; 231 - justify-content: space-between; 232 - align-items: center; 233 - } 234 - 235 - .back-link { 236 - font-size: 11px; 237 - color: var(--blonk-blue); 238 - text-decoration: none; 239 - } 240 - 241 - .back-link:hover { 242 - text-decoration: underline; 243 - } 244 - 245 - .empty-state { 246 - text-align: center; 247 - padding: 40px; 248 - color: var(--blonk-gray); 249 - background-color: var(--blonk-white); 250 - border: 1px solid var(--blonk-light-gray); 251 - } 252 - 253 - .loading { 254 - text-align: center; 255 - padding: 40px; 256 - color: var(--blonk-gray); 257 - } 258 - 259 - .error { 260 - text-align: center; 261 - padding: 40px; 262 - color: #cc3333; 263 - } 264 - 265 - .error-message { 266 - color: #cc3333; 267 - margin-bottom: 10px; 268 - font-size: 11px; 269 - } 270 - 271 - .radar-icon { 272 - display: inline-block; 273 - animation: pulse 2s infinite; 274 - margin-right: 5px; 275 - } 276 - 277 - @keyframes pulse { 278 - 0% { opacity: 1; } 279 - 50% { opacity: 0.5; } 280 - 100% { opacity: 1; } 281 - } 282 - 283 - .vibes-grid { 284 - display: grid; 285 - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); 286 - gap: 15px; 287 - margin-top: 20px; 288 - } 289 - 290 - .vibe-card { 291 - background-color: var(--blonk-white); 292 - border: 2px solid; 293 - padding: 20px; 294 - text-align: center; 295 - text-decoration: none; 296 - color: inherit; 297 - transition: transform 0.2s; 298 - } 299 - 300 - .vibe-card:hover { 301 - transform: translateY(-2px); 302 - } 303 - 304 - .vibe-emoji { 305 - font-size: 32px; 306 - margin-bottom: 10px; 307 - } 308 - 309 - .vibe-name { 310 - font-size: 14px; 311 - color: var(--blonk-blue); 312 - margin-bottom: 5px; 313 - } 314 - 315 - .vibe-mood { 316 - font-size: 10px; 317 - color: var(--blonk-gray); 318 - line-height: 1.3; 319 - margin-bottom: 10px; 320 - } 321 - 322 - .vibe-stats { 323 - font-size: 10px; 324 - color: var(--blonk-gray); 325 - } 326 - 327 - .vibe-info { 328 - margin-top: 30px; 329 - padding: 20px; 330 - background-color: var(--blonk-white); 331 - border: 1px solid var(--blonk-light-gray); 332 - } 333 - 334 - .vibe-info h3 { 335 - font-size: 14px; 336 - color: var(--blonk-gray); 337 - margin-bottom: 10px; 338 - font-weight: normal; 339 - } 340 - 341 - .vibe-info p { 342 - font-size: 11px; 343 - color: var(--blonk-gray); 344 - margin-bottom: 5px; 345 - } 346 - 347 - .vibe-info code { 348 - background-color: var(--blonk-bg); 349 - padding: 2px 4px; 350 - font-family: monospace; 351 - font-size: 10px; 352 - } 353 - 354 - .emerging-info { 355 - background-color: var(--blonk-white); 356 - border: 1px solid var(--blonk-light-gray); 357 - padding: 15px; 358 - margin-bottom: 20px; 359 - font-size: 11px; 360 - color: var(--blonk-gray); 361 - } 362 - 363 - .emerging-list { 364 - background-color: var(--blonk-white); 365 - border: 1px solid var(--blonk-light-gray); 366 - } 367 - 368 - .emerging-item { 369 - padding: 15px; 370 - border-bottom: 1px solid #f0f0f0; 371 - } 372 - 373 - .emerging-item:last-child { 374 - border-bottom: none; 375 - } 376 - 377 - .emerging-header { 378 - display: flex; 379 - justify-content: space-between; 380 - align-items: center; 381 - margin-bottom: 10px; 382 - } 383 - 384 - .emerging-name { 385 - font-size: 14px; 386 - color: var(--blonk-blue); 387 - font-weight: normal; 388 - margin: 0; 389 - } 390 - 391 - .emerging-meta { 392 - font-size: 12px; 393 - color: var(--blonk-gray); 394 - font-weight: bold; 395 - } 396 - 397 - .progress-bar { 398 - width: 100%; 399 - height: 8px; 400 - background-color: var(--blonk-bg); 401 - border-radius: 4px; 402 - overflow: hidden; 403 - margin-bottom: 8px; 404 - } 405 - 406 - .progress-fill { 407 - height: 100%; 408 - background-color: var(--blonk-blue); 409 - transition: width 0.3s ease; 410 - } 411 - 412 - .emerging-details { 413 - font-size: 10px; 414 - color: var(--blonk-gray); 415 - }
-27
client/src/main.tsx
··· 1 - import { StrictMode } from 'react' 2 - import { createRoot } from 'react-dom/client' 3 - import { QueryClient, QueryClientProvider } from '@tanstack/react-query' 4 - import { ReactQueryDevtools } from '@tanstack/react-query-devtools' 5 - import { BrowserRouter } from 'react-router-dom' 6 - import App from './App.tsx' 7 - import './index.css' 8 - 9 - const queryClient = new QueryClient({ 10 - defaultOptions: { 11 - queries: { 12 - staleTime: 1000 * 60 * 5, // 5 minutes 13 - retry: 1, 14 - }, 15 - }, 16 - }) 17 - 18 - createRoot(document.getElementById('root')!).render( 19 - <StrictMode> 20 - <QueryClientProvider client={queryClient}> 21 - <BrowserRouter> 22 - <App /> 23 - </BrowserRouter> 24 - <ReactQueryDevtools initialIsOpen={false} /> 25 - </QueryClientProvider> 26 - </StrictMode>, 27 - )
-64
client/src/pages/Emerging.tsx
··· 1 - import { Link } from 'react-router-dom' 2 - import { useEmergingVibes } from '../hooks/useVibes' 3 - import { formatDistance } from '../utils/date' 4 - 5 - export function Emerging() { 6 - const { data: emergingVibes, isLoading, error } = useEmergingVibes() 7 - 8 - if (isLoading) { 9 - return <div className="loading">Scanning for emerging vibes...</div> 10 - } 11 - 12 - if (error) { 13 - return <div className="error">Failed to detect emerging vibes</div> 14 - } 15 - 16 - return ( 17 - <> 18 - <h2 className="page-title"> 19 - emerging vibes 20 - <Link to="/vibes" className="back-link">← established vibes</Link> 21 - </h2> 22 - 23 - <div className="emerging-info"> 24 - <p>These vibes are gaining momentum. A vibe materializes when it reaches 5 unique users OR 10 total mentions!</p> 25 - </div> 26 - 27 - {emergingVibes && emergingVibes.length > 0 ? ( 28 - <div className="emerging-list"> 29 - {emergingVibes.map(vibe => ( 30 - <div key={vibe.vibeName} className="emerging-item"> 31 - <div className="emerging-header"> 32 - <h3 className="emerging-name"> 33 - #vibe-{vibe.vibeName} 34 - </h3> 35 - <div className="emerging-meta"> 36 - {vibe.mentionCount}/5 unique ({vibe.totalMentionCount}/10 total) 37 - </div> 38 - </div> 39 - 40 - <div className="progress-bar"> 41 - <div 42 - className="progress-fill" 43 - style={{ width: `${vibe.progress}%` }} 44 - /> 45 - </div> 46 - 47 - <div className="emerging-details"> 48 - <span>First detected {formatDistance(vibe.firstMentioned)} ago</span> 49 - {vibe.lastMentioned !== vibe.firstMentioned && ( 50 - <span> · Last seen {formatDistance(vibe.lastMentioned)} ago</span> 51 - )} 52 - </div> 53 - </div> 54 - ))} 55 - </div> 56 - ) : ( 57 - <div className="empty-state"> 58 - <p>No emerging vibes detected yet.</p> 59 - <p>Start using <code>#vibe-something_new</code> in your blips!</p> 60 - </div> 61 - )} 62 - </> 63 - ) 64 - }
-21
client/src/pages/Home.tsx
··· 1 - import { useBlips } from '../hooks/useBlips' 2 - import { BlipList } from '../components/BlipList' 3 - 4 - export function Home() { 5 - const { data: blips, isLoading, error } = useBlips() 6 - 7 - if (isLoading) { 8 - return <div className="loading">Scanning radar...</div> 9 - } 10 - 11 - if (error) { 12 - return <div className="error">Failed to connect to radar</div> 13 - } 14 - 15 - return ( 16 - <> 17 - <h2 className="page-title">recent blips on the radar</h2> 18 - <BlipList blips={blips || []} /> 19 - </> 20 - ) 21 - }
-134
client/src/pages/Submit.tsx
··· 1 - import { useState } from 'react' 2 - import { useNavigate } from 'react-router-dom' 3 - import { useCreateBlip } from '../hooks/useBlips' 4 - import { useVibes } from '../hooks/useVibes' 5 - 6 - export function Submit() { 7 - const navigate = useNavigate() 8 - const createBlip = useCreateBlip() 9 - const { data: vibes } = useVibes() 10 - const [formData, setFormData] = useState({ 11 - title: '', 12 - url: '', 13 - body: '', 14 - tags: '', 15 - vibeUri: '', 16 - }) 17 - 18 - const handleSubmit = async (e: React.FormEvent) => { 19 - e.preventDefault() 20 - 21 - const tagArray = formData.tags 22 - .split(' ') 23 - .filter(tag => tag.length > 0) 24 - .map(tag => tag.toLowerCase()) 25 - 26 - const selectedVibe = vibes?.find(v => v.uri === formData.vibeUri) 27 - 28 - try { 29 - await createBlip.mutateAsync({ 30 - title: formData.title, 31 - url: formData.url || undefined, 32 - body: formData.body || undefined, 33 - tags: tagArray, 34 - vibe: selectedVibe ? { 35 - uri: selectedVibe.uri, 36 - cid: selectedVibe.cid, 37 - name: selectedVibe.name, 38 - } : undefined, 39 - }) 40 - navigate('/') 41 - } catch (error) { 42 - console.error('Failed to create blip:', error) 43 - } 44 - } 45 - 46 - return ( 47 - <> 48 - <h2 className="page-title">transmit a new blip</h2> 49 - 50 - <form onSubmit={handleSubmit} className="submit-form"> 51 - <div className="form-group"> 52 - <label htmlFor="title">signal</label> 53 - <input 54 - type="text" 55 - id="title" 56 - name="title" 57 - required 58 - placeholder="What's on the radar?" 59 - value={formData.title} 60 - onChange={(e) => setFormData({ ...formData, title: e.target.value })} 61 - /> 62 - </div> 63 - 64 - <div className="form-group"> 65 - <label htmlFor="url">frequency (optional)</label> 66 - <input 67 - type="url" 68 - id="url" 69 - name="url" 70 - placeholder="https://..." 71 - value={formData.url} 72 - onChange={(e) => setFormData({ ...formData, url: e.target.value })} 73 - /> 74 - <div className="form-note">link to external content</div> 75 - </div> 76 - 77 - <div className="form-group"> 78 - <label htmlFor="body">transmission details (optional)</label> 79 - <textarea 80 - id="body" 81 - name="body" 82 - placeholder="Additional context or thoughts..." 83 - value={formData.body} 84 - onChange={(e) => setFormData({ ...formData, body: e.target.value })} 85 - /> 86 - </div> 87 - 88 - <div className="form-group"> 89 - <label htmlFor="vibe">vibe</label> 90 - <select 91 - id="vibe" 92 - name="vibe" 93 - value={formData.vibeUri} 94 - onChange={(e) => setFormData({ ...formData, vibeUri: e.target.value })} 95 - className="vibe-select" 96 - > 97 - <option value="">-- choose a vibe --</option> 98 - {vibes?.map(vibe => ( 99 - <option key={vibe.uri} value={vibe.uri}> 100 - {vibe.emoji} {vibe.name} - {vibe.mood} 101 - </option> 102 - ))} 103 - </select> 104 - <div className="form-note">select the mood for your blip</div> 105 - </div> 106 - 107 - <div className="form-group"> 108 - <label htmlFor="tags">tags</label> 109 - <input 110 - type="text" 111 - id="tags" 112 - name="tags" 113 - placeholder="space separated tags" 114 - value={formData.tags} 115 - onChange={(e) => setFormData({ ...formData, tags: e.target.value })} 116 - /> 117 - <div className="form-note">e.g., programming atproto bluesky</div> 118 - </div> 119 - 120 - {createBlip.isError && ( 121 - <div className="error-message">Failed to transmit blip</div> 122 - )} 123 - 124 - <button 125 - type="submit" 126 - className="submit-button" 127 - disabled={createBlip.isPending} 128 - > 129 - {createBlip.isPending ? 'transmitting...' : 'transmit blip'} 130 - </button> 131 - </form> 132 - </> 133 - ) 134 - }
-26
client/src/pages/Tag.tsx
··· 1 - import { useParams, Link } from 'react-router-dom' 2 - import { useBlipsByTag } from '../hooks/useBlips' 3 - import { BlipList } from '../components/BlipList' 4 - 5 - export function Tag() { 6 - const { tag } = useParams<{ tag: string }>() 7 - const { data: blips, isLoading, error } = useBlipsByTag(tag || '') 8 - 9 - if (isLoading) { 10 - return <div className="loading">Scanning radar for tag...</div> 11 - } 12 - 13 - if (error) { 14 - return <div className="error">Failed to connect to radar</div> 15 - } 16 - 17 - return ( 18 - <> 19 - <h2 className="page-title"> 20 - blips tagged: {tag} 21 - <Link to="/" className="back-link">← all blips</Link> 22 - </h2> 23 - <BlipList blips={blips || []} /> 24 - </> 25 - ) 26 - }
-30
client/src/pages/Vibe.tsx
··· 1 - import { useParams, Link } from 'react-router-dom' 2 - import { useVibeBlips } from '../hooks/useVibes' 3 - import { BlipList } from '../components/BlipList' 4 - 5 - export function Vibe() { 6 - const { vibeUri } = useParams<{ vibeUri: string }>() 7 - const decodedUri = decodeURIComponent(vibeUri || '') 8 - const { data: blips, isLoading, error } = useVibeBlips(decodedUri) 9 - 10 - if (isLoading) { 11 - return <div className="loading">Tuning into vibe frequency...</div> 12 - } 13 - 14 - if (error) { 15 - return <div className="error">Failed to connect to vibe</div> 16 - } 17 - 18 - // Get vibe name from the first blip (hacky but works for now) 19 - const vibeName = blips?.[0]?.vibeName || 'unknown vibe' 20 - 21 - return ( 22 - <> 23 - <h2 className="page-title"> 24 - vibe: {vibeName} 25 - <Link to="/vibes" className="back-link">← all vibes</Link> 26 - </h2> 27 - <BlipList blips={blips || []} /> 28 - </> 29 - ) 30 - }
-53
client/src/pages/Vibes.tsx
··· 1 - import { Link } from 'react-router-dom' 2 - import { useVibes } from '../hooks/useVibes' 3 - 4 - export function Vibes() { 5 - const { data: vibes, isLoading, error } = useVibes() 6 - 7 - if (isLoading) { 8 - return <div className="loading">Tuning into vibes...</div> 9 - } 10 - 11 - if (error) { 12 - return <div className="error">Failed to connect to vibe frequencies</div> 13 - } 14 - 15 - return ( 16 - <> 17 - <h2 className="page-title"> 18 - vibe frequencies 19 - <Link to="/emerging" className="back-link">→ emerging vibes</Link> 20 - </h2> 21 - 22 - <div className="vibes-grid"> 23 - {vibes?.map(vibe => ( 24 - <Link 25 - key={vibe.uri} 26 - to={`/vibe/${encodeURIComponent(vibe.uri)}`} 27 - className="vibe-card" 28 - style={{ borderColor: vibe.color || 'var(--blonk-light-gray)' }} 29 - > 30 - <div className="vibe-emoji">{vibe.emoji || '📡'}</div> 31 - <div className="vibe-name">{vibe.name}</div> 32 - <div className="vibe-mood">{vibe.mood}</div> 33 - <div className="vibe-stats">{vibe.memberCount} members</div> 34 - </Link> 35 - ))} 36 - </div> 37 - 38 - {(!vibes || vibes.length === 0) && ( 39 - <div className="empty-state"> 40 - <p>No vibes discovered yet.</p> 41 - <p>To create a vibe, use <code>#vibe-YOUR_VIBE</code> in your blips!</p> 42 - <p className="form-note">When 5 different people use the same vibe hashtag, it becomes real.</p> 43 - </div> 44 - )} 45 - 46 - <div className="vibe-info"> 47 - <h3>How vibes are born:</h3> 48 - <p>Include <code>#vibe-something_cool</code> in your blips. When 5 unique users mention the same vibe, it materializes!</p> 49 - <p className="form-note">Vibe names must use underscores instead of spaces (e.g., <code>#vibe-late_night_coding</code>)</p> 50 - </div> 51 - </> 52 - ) 53 - }
-12
client/src/utils/date.ts
··· 1 - export function formatDistance(dateString: string): string { 2 - const date = new Date(dateString) 3 - const now = new Date() 4 - const seconds = Math.floor((now.getTime() - date.getTime()) / 1000) 5 - 6 - if (seconds < 60) return 'just now' 7 - if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago` 8 - if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago` 9 - if (seconds < 604800) return `${Math.floor(seconds / 86400)}d ago` 10 - 11 - return date.toLocaleDateString() 12 - }
-1
client/src/vite-env.d.ts
··· 1 - /// <reference types="vite/client" />
-28
client/tsconfig.app.json
··· 1 - { 2 - "compilerOptions": { 3 - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 - "target": "ES2020", 5 - "useDefineForClassFields": true, 6 - "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 - "module": "ESNext", 8 - "skipLibCheck": true, 9 - 10 - /* Bundler mode */ 11 - "moduleResolution": "bundler", 12 - "allowImportingTsExtensions": true, 13 - "verbatimModuleSyntax": true, 14 - "moduleDetection": "force", 15 - "noEmit": true, 16 - "emitDeclarationOnly": false, 17 - "jsx": "react-jsx", 18 - 19 - /* Linting */ 20 - "strict": true, 21 - "noUnusedLocals": true, 22 - "noUnusedParameters": true, 23 - "erasableSyntaxOnly": true, 24 - "noFallthroughCasesInSwitch": true, 25 - "noUncheckedSideEffectImports": true 26 - }, 27 - "include": ["src"] 28 - }
-7
client/tsconfig.json
··· 1 - { 2 - "files": [], 3 - "references": [ 4 - { "path": "./tsconfig.app.json" }, 5 - { "path": "./tsconfig.node.json" } 6 - ] 7 - }
-25
client/tsconfig.node.json
··· 1 - { 2 - "compilerOptions": { 3 - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 - "target": "ES2022", 5 - "lib": ["ES2023"], 6 - "module": "ESNext", 7 - "skipLibCheck": true, 8 - 9 - /* Bundler mode */ 10 - "moduleResolution": "bundler", 11 - "allowImportingTsExtensions": true, 12 - "verbatimModuleSyntax": true, 13 - "moduleDetection": "force", 14 - "noEmit": true, 15 - 16 - /* Linting */ 17 - "strict": true, 18 - "noUnusedLocals": true, 19 - "noUnusedParameters": true, 20 - "erasableSyntaxOnly": true, 21 - "noFallthroughCasesInSwitch": true, 22 - "noUncheckedSideEffectImports": true 23 - }, 24 - "include": ["vite.config.ts"] 25 - }
-16
client/vite.config.ts
··· 1 - import { defineConfig } from 'vite' 2 - import react from '@vitejs/plugin-react' 3 - 4 - // https://vite.dev/config/ 5 - export default defineConfig({ 6 - plugins: [react()], 7 - server: { 8 - port: 5173, 9 - proxy: { 10 - '/api': { 11 - target: 'http://localhost:3001', 12 - changeOrigin: true, 13 - }, 14 - }, 15 - }, 16 - })
-7855
package-lock.json
··· 1 - { 2 - "name": "blonk", 3 - "version": "1.0.0", 4 - "lockfileVersion": 3, 5 - "requires": true, 6 - "packages": { 7 - "": { 8 - "name": "blonk", 9 - "version": "1.0.0", 10 - "license": "ISC", 11 - "dependencies": { 12 - "@atproto/api": "^0.15.16", 13 - "@atproto/lexicon": "^0.4.11", 14 - "@atproto/repo": "^0.8.2", 15 - "@atproto/sync": "^0.1.26", 16 - "@ipld/car": "^5.4.2", 17 - "@skyware/firehose": "^0.5.1", 18 - "@types/better-sqlite3": "^7.6.13", 19 - "@types/cors": "^2.8.19", 20 - "@types/express": "^5.0.3", 21 - "@types/express-session": "^1.18.2", 22 - "@types/node": "^24.0.3", 23 - "@types/ws": "^8.18.1", 24 - "better-sqlite3": "^11.10.0", 25 - "cbor-x": "^1.6.0", 26 - "cors": "^2.8.5", 27 - "dotenv": "^16.5.0", 28 - "ejs": "^3.1.10", 29 - "express": "^5.1.0", 30 - "express-ejs-layouts": "^2.5.1", 31 - "express-session": "^1.18.1", 32 - "multiformats": "^13.3.7", 33 - "tsx": "^4.20.3", 34 - "typescript": "^5.8.3", 35 - "ws": "^8.18.2" 36 - }, 37 - "devDependencies": { 38 - "@types/jest": "^30.0.0", 39 - "@types/supertest": "^6.0.3", 40 - "concurrently": "^9.1.2", 41 - "jest": "^30.0.2", 42 - "supertest": "^7.1.1", 43 - "ts-jest": "^29.4.0" 44 - } 45 - }, 46 - "node_modules/@ampproject/remapping": { 47 - "version": "2.3.0", 48 - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 49 - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 50 - "dev": true, 51 - "license": "Apache-2.0", 52 - "dependencies": { 53 - "@jridgewell/gen-mapping": "^0.3.5", 54 - "@jridgewell/trace-mapping": "^0.3.24" 55 - }, 56 - "engines": { 57 - "node": ">=6.0.0" 58 - } 59 - }, 60 - "node_modules/@atcute/car": { 61 - "version": "3.1.1", 62 - "resolved": "https://registry.npmjs.org/@atcute/car/-/car-3.1.1.tgz", 63 - "integrity": "sha512-yhez/LqIl0zHubG6z/G/gqWYHmg7wJ5L4jNkbXj5FvZ4eOvmzsw8+ojbdq6wfMU4p5NhP0pUJNLkTZHbYSPmLg==", 64 - "license": "MIT", 65 - "dependencies": { 66 - "@atcute/cbor": "^2.2.4", 67 - "@atcute/cid": "^2.2.3", 68 - "@atcute/uint8array": "^1.0.2", 69 - "@atcute/varint": "^1.0.2", 70 - "yocto-queue": "^1.2.1" 71 - } 72 - }, 73 - "node_modules/@atcute/cbor": { 74 - "version": "2.2.4", 75 - "resolved": "https://registry.npmjs.org/@atcute/cbor/-/cbor-2.2.4.tgz", 76 - "integrity": "sha512-8Y/OTM8zs5VInOCjfx4f9Idiiz7ygM/FkfWv/HW3/ZUsXczn1xk7GzTBbm4P5crn4C5luwDGpO7FwClMOERrow==", 77 - "license": "MIT", 78 - "dependencies": { 79 - "@atcute/cid": "^2.2.3", 80 - "@atcute/multibase": "^1.1.4", 81 - "@atcute/uint8array": "^1.0.2" 82 - } 83 - }, 84 - "node_modules/@atcute/cid": { 85 - "version": "2.2.3", 86 - "resolved": "https://registry.npmjs.org/@atcute/cid/-/cid-2.2.3.tgz", 87 - "integrity": "sha512-WEzNSL1EuCVtCQDFYEBIm4dEP6PcMEwi8IYUVIWvT77eO5EjY58F63z5T4qMABxSBM0+L4kqMxypdL1Fzf6LZw==", 88 - "license": "MIT", 89 - "dependencies": { 90 - "@atcute/multibase": "^1.1.4", 91 - "@atcute/uint8array": "^1.0.2" 92 - } 93 - }, 94 - "node_modules/@atcute/multibase": { 95 - "version": "1.1.4", 96 - "resolved": "https://registry.npmjs.org/@atcute/multibase/-/multibase-1.1.4.tgz", 97 - "integrity": "sha512-NUf5AeeSOmuZHGU+4GAaMtISJoG+ZHtW/vUVA4lK/YDt/7LODAW0Fd0NNIIUPVUoW0xJS6zSEIWvwLLuxmEHhA==", 98 - "license": "MIT", 99 - "dependencies": { 100 - "@atcute/uint8array": "^1.0.2" 101 - } 102 - }, 103 - "node_modules/@atcute/uint8array": { 104 - "version": "1.0.3", 105 - "resolved": "https://registry.npmjs.org/@atcute/uint8array/-/uint8array-1.0.3.tgz", 106 - "integrity": "sha512-M/K+ihiVW8Pl2PFLzaC4E3l4JaZ1IH05Q0AbPWUC4cVHnd/gZ/1kAF5ngdtGvJeDMirHZ2VAy7OmAsPwR/2nlA==", 107 - "license": "MIT" 108 - }, 109 - "node_modules/@atcute/varint": { 110 - "version": "1.0.2", 111 - "resolved": "https://registry.npmjs.org/@atcute/varint/-/varint-1.0.2.tgz", 112 - "integrity": "sha512-0O31hePzzr4O3NGWHUKKOyta6CGSL+AtN8iir8grGxu9jXyI7DBARlw6PbgKA6uTAvsXdpmRmF8MX+p0TsLnNg==", 113 - "license": "MIT" 114 - }, 115 - "node_modules/@atproto/api": { 116 - "version": "0.15.16", 117 - "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.15.16.tgz", 118 - "integrity": "sha512-ZNBrzBg2l0lHreKik1lJn8lrhAktwlY8NUPBU/hO9dwjAnDHQTiSzNFZt65dp9djmqZ75sX/VJ+heNuaJBvnhQ==", 119 - "license": "MIT", 120 - "dependencies": { 121 - "@atproto/common-web": "^0.4.2", 122 - "@atproto/lexicon": "^0.4.11", 123 - "@atproto/syntax": "^0.4.0", 124 - "@atproto/xrpc": "^0.7.0", 125 - "await-lock": "^2.2.2", 126 - "multiformats": "^9.9.0", 127 - "tlds": "^1.234.0", 128 - "zod": "^3.23.8" 129 - } 130 - }, 131 - "node_modules/@atproto/api/node_modules/multiformats": { 132 - "version": "9.9.0", 133 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 134 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 135 - "license": "(Apache-2.0 AND MIT)" 136 - }, 137 - "node_modules/@atproto/common": { 138 - "version": "0.4.11", 139 - "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.4.11.tgz", 140 - "integrity": "sha512-Knv0viYXNMfCdIE7jLUiWJKnnMfEwg+vz2epJQi8WOjqtqCFb3W/3Jn72ZiuovIfpdm13MaOiny6w2NErUQC6g==", 141 - "license": "MIT", 142 - "dependencies": { 143 - "@atproto/common-web": "^0.4.2", 144 - "@ipld/dag-cbor": "^7.0.3", 145 - "cbor-x": "^1.5.1", 146 - "iso-datestring-validator": "^2.2.2", 147 - "multiformats": "^9.9.0", 148 - "pino": "^8.21.0" 149 - }, 150 - "engines": { 151 - "node": ">=18.7.0" 152 - } 153 - }, 154 - "node_modules/@atproto/common-web": { 155 - "version": "0.4.2", 156 - "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.2.tgz", 157 - "integrity": "sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==", 158 - "license": "MIT", 159 - "dependencies": { 160 - "graphemer": "^1.4.0", 161 - "multiformats": "^9.9.0", 162 - "uint8arrays": "3.0.0", 163 - "zod": "^3.23.8" 164 - } 165 - }, 166 - "node_modules/@atproto/common-web/node_modules/multiformats": { 167 - "version": "9.9.0", 168 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 169 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 170 - "license": "(Apache-2.0 AND MIT)" 171 - }, 172 - "node_modules/@atproto/common/node_modules/multiformats": { 173 - "version": "9.9.0", 174 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 175 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 176 - "license": "(Apache-2.0 AND MIT)" 177 - }, 178 - "node_modules/@atproto/crypto": { 179 - "version": "0.4.4", 180 - "resolved": "https://registry.npmjs.org/@atproto/crypto/-/crypto-0.4.4.tgz", 181 - "integrity": "sha512-Yq9+crJ7WQl7sxStVpHgie5Z51R05etaK9DLWYG/7bR5T4bhdcIgF6IfklLShtZwLYdVVj+K15s0BqW9a8PSDA==", 182 - "license": "MIT", 183 - "dependencies": { 184 - "@noble/curves": "^1.7.0", 185 - "@noble/hashes": "^1.6.1", 186 - "uint8arrays": "3.0.0" 187 - }, 188 - "engines": { 189 - "node": ">=18.7.0" 190 - } 191 - }, 192 - "node_modules/@atproto/identity": { 193 - "version": "0.4.8", 194 - "resolved": "https://registry.npmjs.org/@atproto/identity/-/identity-0.4.8.tgz", 195 - "integrity": "sha512-Z0sLnJ87SeNdAifT+rqpgE1Rc3layMMW25gfWNo4u40RGuRODbdfAZlTwBSU2r+Vk45hU+iE+xeQspfednCEnA==", 196 - "license": "MIT", 197 - "dependencies": { 198 - "@atproto/common-web": "^0.4.2", 199 - "@atproto/crypto": "^0.4.4" 200 - }, 201 - "engines": { 202 - "node": ">=18.7.0" 203 - } 204 - }, 205 - "node_modules/@atproto/lexicon": { 206 - "version": "0.4.11", 207 - "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.11.tgz", 208 - "integrity": "sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==", 209 - "license": "MIT", 210 - "dependencies": { 211 - "@atproto/common-web": "^0.4.2", 212 - "@atproto/syntax": "^0.4.0", 213 - "iso-datestring-validator": "^2.2.2", 214 - "multiformats": "^9.9.0", 215 - "zod": "^3.23.8" 216 - } 217 - }, 218 - "node_modules/@atproto/lexicon/node_modules/multiformats": { 219 - "version": "9.9.0", 220 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 221 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 222 - "license": "(Apache-2.0 AND MIT)" 223 - }, 224 - "node_modules/@atproto/repo": { 225 - "version": "0.8.2", 226 - "resolved": "https://registry.npmjs.org/@atproto/repo/-/repo-0.8.2.tgz", 227 - "integrity": "sha512-lP0g5Uw3TUC2Tc7te8YKCpRoIhBYI+Uvn11fupGEaMcMjgLdYtB0Kc0AiqWXF42KqlBG9dAEoJITi2GRzDNHUg==", 228 - "license": "MIT", 229 - "dependencies": { 230 - "@atproto/common": "^0.4.11", 231 - "@atproto/common-web": "^0.4.2", 232 - "@atproto/crypto": "^0.4.4", 233 - "@atproto/lexicon": "^0.4.11", 234 - "@ipld/dag-cbor": "^7.0.0", 235 - "multiformats": "^9.9.0", 236 - "uint8arrays": "3.0.0", 237 - "varint": "^6.0.0", 238 - "zod": "^3.23.8" 239 - }, 240 - "engines": { 241 - "node": ">=18.7.0" 242 - } 243 - }, 244 - "node_modules/@atproto/repo/node_modules/multiformats": { 245 - "version": "9.9.0", 246 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 247 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 248 - "license": "(Apache-2.0 AND MIT)" 249 - }, 250 - "node_modules/@atproto/sync": { 251 - "version": "0.1.26", 252 - "resolved": "https://registry.npmjs.org/@atproto/sync/-/sync-0.1.26.tgz", 253 - "integrity": "sha512-bpUIajtPrE3RgFW8mIfrI4EM/LJ4JjQhI5fsqc78zCHZawuflpllf1aH70roDWWiskMWoiLWnVRxdYXdeEgbXA==", 254 - "license": "MIT", 255 - "dependencies": { 256 - "@atproto/common": "^0.4.11", 257 - "@atproto/identity": "^0.4.8", 258 - "@atproto/lexicon": "^0.4.11", 259 - "@atproto/repo": "^0.8.2", 260 - "@atproto/syntax": "^0.4.0", 261 - "@atproto/xrpc-server": "^0.8.0", 262 - "multiformats": "^9.9.0", 263 - "p-queue": "^6.6.2", 264 - "ws": "^8.12.0" 265 - }, 266 - "engines": { 267 - "node": ">=18.7.0" 268 - } 269 - }, 270 - "node_modules/@atproto/sync/node_modules/multiformats": { 271 - "version": "9.9.0", 272 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 273 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 274 - "license": "(Apache-2.0 AND MIT)" 275 - }, 276 - "node_modules/@atproto/syntax": { 277 - "version": "0.4.0", 278 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.0.tgz", 279 - "integrity": "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==", 280 - "license": "MIT" 281 - }, 282 - "node_modules/@atproto/xrpc": { 283 - "version": "0.7.0", 284 - "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.0.tgz", 285 - "integrity": "sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==", 286 - "license": "MIT", 287 - "dependencies": { 288 - "@atproto/lexicon": "^0.4.11", 289 - "zod": "^3.23.8" 290 - } 291 - }, 292 - "node_modules/@atproto/xrpc-server": { 293 - "version": "0.8.0", 294 - "resolved": "https://registry.npmjs.org/@atproto/xrpc-server/-/xrpc-server-0.8.0.tgz", 295 - "integrity": "sha512-jDAEVHVhM4IvC0y491gXBuD4b1D9/XrM3HaEronRneAdNZ0qE0nsiJNqiHfQ6r4BvFdHnABM9KyHV9EQTvmxfg==", 296 - "license": "MIT", 297 - "dependencies": { 298 - "@atproto/common": "^0.4.11", 299 - "@atproto/crypto": "^0.4.4", 300 - "@atproto/lexicon": "^0.4.11", 301 - "@atproto/xrpc": "^0.7.0", 302 - "cbor-x": "^1.5.1", 303 - "express": "^4.17.2", 304 - "http-errors": "^2.0.0", 305 - "mime-types": "^2.1.35", 306 - "rate-limiter-flexible": "^2.4.1", 307 - "uint8arrays": "3.0.0", 308 - "ws": "^8.12.0", 309 - "zod": "^3.23.8" 310 - }, 311 - "engines": { 312 - "node": ">=18.7.0" 313 - } 314 - }, 315 - "node_modules/@atproto/xrpc-server/node_modules/accepts": { 316 - "version": "1.3.8", 317 - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 318 - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 319 - "license": "MIT", 320 - "dependencies": { 321 - "mime-types": "~2.1.34", 322 - "negotiator": "0.6.3" 323 - }, 324 - "engines": { 325 - "node": ">= 0.6" 326 - } 327 - }, 328 - "node_modules/@atproto/xrpc-server/node_modules/body-parser": { 329 - "version": "1.20.3", 330 - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", 331 - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", 332 - "license": "MIT", 333 - "dependencies": { 334 - "bytes": "3.1.2", 335 - "content-type": "~1.0.5", 336 - "debug": "2.6.9", 337 - "depd": "2.0.0", 338 - "destroy": "1.2.0", 339 - "http-errors": "2.0.0", 340 - "iconv-lite": "0.4.24", 341 - "on-finished": "2.4.1", 342 - "qs": "6.13.0", 343 - "raw-body": "2.5.2", 344 - "type-is": "~1.6.18", 345 - "unpipe": "1.0.0" 346 - }, 347 - "engines": { 348 - "node": ">= 0.8", 349 - "npm": "1.2.8000 || >= 1.4.16" 350 - } 351 - }, 352 - "node_modules/@atproto/xrpc-server/node_modules/content-disposition": { 353 - "version": "0.5.4", 354 - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 355 - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 356 - "license": "MIT", 357 - "dependencies": { 358 - "safe-buffer": "5.2.1" 359 - }, 360 - "engines": { 361 - "node": ">= 0.6" 362 - } 363 - }, 364 - "node_modules/@atproto/xrpc-server/node_modules/cookie": { 365 - "version": "0.7.1", 366 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", 367 - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", 368 - "license": "MIT", 369 - "engines": { 370 - "node": ">= 0.6" 371 - } 372 - }, 373 - "node_modules/@atproto/xrpc-server/node_modules/cookie-signature": { 374 - "version": "1.0.6", 375 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 376 - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", 377 - "license": "MIT" 378 - }, 379 - "node_modules/@atproto/xrpc-server/node_modules/debug": { 380 - "version": "2.6.9", 381 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 382 - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 383 - "license": "MIT", 384 - "dependencies": { 385 - "ms": "2.0.0" 386 - } 387 - }, 388 - "node_modules/@atproto/xrpc-server/node_modules/debug/node_modules/ms": { 389 - "version": "2.0.0", 390 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 391 - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 392 - "license": "MIT" 393 - }, 394 - "node_modules/@atproto/xrpc-server/node_modules/express": { 395 - "version": "4.21.2", 396 - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", 397 - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", 398 - "license": "MIT", 399 - "dependencies": { 400 - "accepts": "~1.3.8", 401 - "array-flatten": "1.1.1", 402 - "body-parser": "1.20.3", 403 - "content-disposition": "0.5.4", 404 - "content-type": "~1.0.4", 405 - "cookie": "0.7.1", 406 - "cookie-signature": "1.0.6", 407 - "debug": "2.6.9", 408 - "depd": "2.0.0", 409 - "encodeurl": "~2.0.0", 410 - "escape-html": "~1.0.3", 411 - "etag": "~1.8.1", 412 - "finalhandler": "1.3.1", 413 - "fresh": "0.5.2", 414 - "http-errors": "2.0.0", 415 - "merge-descriptors": "1.0.3", 416 - "methods": "~1.1.2", 417 - "on-finished": "2.4.1", 418 - "parseurl": "~1.3.3", 419 - "path-to-regexp": "0.1.12", 420 - "proxy-addr": "~2.0.7", 421 - "qs": "6.13.0", 422 - "range-parser": "~1.2.1", 423 - "safe-buffer": "5.2.1", 424 - "send": "0.19.0", 425 - "serve-static": "1.16.2", 426 - "setprototypeof": "1.2.0", 427 - "statuses": "2.0.1", 428 - "type-is": "~1.6.18", 429 - "utils-merge": "1.0.1", 430 - "vary": "~1.1.2" 431 - }, 432 - "engines": { 433 - "node": ">= 0.10.0" 434 - }, 435 - "funding": { 436 - "type": "opencollective", 437 - "url": "https://opencollective.com/express" 438 - } 439 - }, 440 - "node_modules/@atproto/xrpc-server/node_modules/finalhandler": { 441 - "version": "1.3.1", 442 - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", 443 - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", 444 - "license": "MIT", 445 - "dependencies": { 446 - "debug": "2.6.9", 447 - "encodeurl": "~2.0.0", 448 - "escape-html": "~1.0.3", 449 - "on-finished": "2.4.1", 450 - "parseurl": "~1.3.3", 451 - "statuses": "2.0.1", 452 - "unpipe": "~1.0.0" 453 - }, 454 - "engines": { 455 - "node": ">= 0.8" 456 - } 457 - }, 458 - "node_modules/@atproto/xrpc-server/node_modules/fresh": { 459 - "version": "0.5.2", 460 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 461 - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 462 - "license": "MIT", 463 - "engines": { 464 - "node": ">= 0.6" 465 - } 466 - }, 467 - "node_modules/@atproto/xrpc-server/node_modules/iconv-lite": { 468 - "version": "0.4.24", 469 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 470 - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 471 - "license": "MIT", 472 - "dependencies": { 473 - "safer-buffer": ">= 2.1.2 < 3" 474 - }, 475 - "engines": { 476 - "node": ">=0.10.0" 477 - } 478 - }, 479 - "node_modules/@atproto/xrpc-server/node_modules/media-typer": { 480 - "version": "0.3.0", 481 - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 482 - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 483 - "license": "MIT", 484 - "engines": { 485 - "node": ">= 0.6" 486 - } 487 - }, 488 - "node_modules/@atproto/xrpc-server/node_modules/merge-descriptors": { 489 - "version": "1.0.3", 490 - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", 491 - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", 492 - "license": "MIT", 493 - "funding": { 494 - "url": "https://github.com/sponsors/sindresorhus" 495 - } 496 - }, 497 - "node_modules/@atproto/xrpc-server/node_modules/mime-db": { 498 - "version": "1.52.0", 499 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 500 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 501 - "license": "MIT", 502 - "engines": { 503 - "node": ">= 0.6" 504 - } 505 - }, 506 - "node_modules/@atproto/xrpc-server/node_modules/mime-types": { 507 - "version": "2.1.35", 508 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 509 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 510 - "license": "MIT", 511 - "dependencies": { 512 - "mime-db": "1.52.0" 513 - }, 514 - "engines": { 515 - "node": ">= 0.6" 516 - } 517 - }, 518 - "node_modules/@atproto/xrpc-server/node_modules/negotiator": { 519 - "version": "0.6.3", 520 - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 521 - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 522 - "license": "MIT", 523 - "engines": { 524 - "node": ">= 0.6" 525 - } 526 - }, 527 - "node_modules/@atproto/xrpc-server/node_modules/path-to-regexp": { 528 - "version": "0.1.12", 529 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", 530 - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", 531 - "license": "MIT" 532 - }, 533 - "node_modules/@atproto/xrpc-server/node_modules/qs": { 534 - "version": "6.13.0", 535 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 536 - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 537 - "license": "BSD-3-Clause", 538 - "dependencies": { 539 - "side-channel": "^1.0.6" 540 - }, 541 - "engines": { 542 - "node": ">=0.6" 543 - }, 544 - "funding": { 545 - "url": "https://github.com/sponsors/ljharb" 546 - } 547 - }, 548 - "node_modules/@atproto/xrpc-server/node_modules/raw-body": { 549 - "version": "2.5.2", 550 - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 551 - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 552 - "license": "MIT", 553 - "dependencies": { 554 - "bytes": "3.1.2", 555 - "http-errors": "2.0.0", 556 - "iconv-lite": "0.4.24", 557 - "unpipe": "1.0.0" 558 - }, 559 - "engines": { 560 - "node": ">= 0.8" 561 - } 562 - }, 563 - "node_modules/@atproto/xrpc-server/node_modules/send": { 564 - "version": "0.19.0", 565 - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", 566 - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", 567 - "license": "MIT", 568 - "dependencies": { 569 - "debug": "2.6.9", 570 - "depd": "2.0.0", 571 - "destroy": "1.2.0", 572 - "encodeurl": "~1.0.2", 573 - "escape-html": "~1.0.3", 574 - "etag": "~1.8.1", 575 - "fresh": "0.5.2", 576 - "http-errors": "2.0.0", 577 - "mime": "1.6.0", 578 - "ms": "2.1.3", 579 - "on-finished": "2.4.1", 580 - "range-parser": "~1.2.1", 581 - "statuses": "2.0.1" 582 - }, 583 - "engines": { 584 - "node": ">= 0.8.0" 585 - } 586 - }, 587 - "node_modules/@atproto/xrpc-server/node_modules/send/node_modules/encodeurl": { 588 - "version": "1.0.2", 589 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 590 - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 591 - "license": "MIT", 592 - "engines": { 593 - "node": ">= 0.8" 594 - } 595 - }, 596 - "node_modules/@atproto/xrpc-server/node_modules/serve-static": { 597 - "version": "1.16.2", 598 - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", 599 - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", 600 - "license": "MIT", 601 - "dependencies": { 602 - "encodeurl": "~2.0.0", 603 - "escape-html": "~1.0.3", 604 - "parseurl": "~1.3.3", 605 - "send": "0.19.0" 606 - }, 607 - "engines": { 608 - "node": ">= 0.8.0" 609 - } 610 - }, 611 - "node_modules/@atproto/xrpc-server/node_modules/statuses": { 612 - "version": "2.0.1", 613 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 614 - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 615 - "license": "MIT", 616 - "engines": { 617 - "node": ">= 0.8" 618 - } 619 - }, 620 - "node_modules/@atproto/xrpc-server/node_modules/type-is": { 621 - "version": "1.6.18", 622 - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 623 - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 624 - "license": "MIT", 625 - "dependencies": { 626 - "media-typer": "0.3.0", 627 - "mime-types": "~2.1.24" 628 - }, 629 - "engines": { 630 - "node": ">= 0.6" 631 - } 632 - }, 633 - "node_modules/@babel/code-frame": { 634 - "version": "7.27.1", 635 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", 636 - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 637 - "dev": true, 638 - "license": "MIT", 639 - "dependencies": { 640 - "@babel/helper-validator-identifier": "^7.27.1", 641 - "js-tokens": "^4.0.0", 642 - "picocolors": "^1.1.1" 643 - }, 644 - "engines": { 645 - "node": ">=6.9.0" 646 - } 647 - }, 648 - "node_modules/@babel/compat-data": { 649 - "version": "7.27.5", 650 - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", 651 - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", 652 - "dev": true, 653 - "license": "MIT", 654 - "engines": { 655 - "node": ">=6.9.0" 656 - } 657 - }, 658 - "node_modules/@babel/core": { 659 - "version": "7.27.4", 660 - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", 661 - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", 662 - "dev": true, 663 - "license": "MIT", 664 - "dependencies": { 665 - "@ampproject/remapping": "^2.2.0", 666 - "@babel/code-frame": "^7.27.1", 667 - "@babel/generator": "^7.27.3", 668 - "@babel/helper-compilation-targets": "^7.27.2", 669 - "@babel/helper-module-transforms": "^7.27.3", 670 - "@babel/helpers": "^7.27.4", 671 - "@babel/parser": "^7.27.4", 672 - "@babel/template": "^7.27.2", 673 - "@babel/traverse": "^7.27.4", 674 - "@babel/types": "^7.27.3", 675 - "convert-source-map": "^2.0.0", 676 - "debug": "^4.1.0", 677 - "gensync": "^1.0.0-beta.2", 678 - "json5": "^2.2.3", 679 - "semver": "^6.3.1" 680 - }, 681 - "engines": { 682 - "node": ">=6.9.0" 683 - }, 684 - "funding": { 685 - "type": "opencollective", 686 - "url": "https://opencollective.com/babel" 687 - } 688 - }, 689 - "node_modules/@babel/core/node_modules/semver": { 690 - "version": "6.3.1", 691 - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 692 - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 693 - "dev": true, 694 - "license": "ISC", 695 - "bin": { 696 - "semver": "bin/semver.js" 697 - } 698 - }, 699 - "node_modules/@babel/generator": { 700 - "version": "7.27.5", 701 - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", 702 - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", 703 - "dev": true, 704 - "license": "MIT", 705 - "dependencies": { 706 - "@babel/parser": "^7.27.5", 707 - "@babel/types": "^7.27.3", 708 - "@jridgewell/gen-mapping": "^0.3.5", 709 - "@jridgewell/trace-mapping": "^0.3.25", 710 - "jsesc": "^3.0.2" 711 - }, 712 - "engines": { 713 - "node": ">=6.9.0" 714 - } 715 - }, 716 - "node_modules/@babel/helper-compilation-targets": { 717 - "version": "7.27.2", 718 - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", 719 - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", 720 - "dev": true, 721 - "license": "MIT", 722 - "dependencies": { 723 - "@babel/compat-data": "^7.27.2", 724 - "@babel/helper-validator-option": "^7.27.1", 725 - "browserslist": "^4.24.0", 726 - "lru-cache": "^5.1.1", 727 - "semver": "^6.3.1" 728 - }, 729 - "engines": { 730 - "node": ">=6.9.0" 731 - } 732 - }, 733 - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { 734 - "version": "6.3.1", 735 - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 736 - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 737 - "dev": true, 738 - "license": "ISC", 739 - "bin": { 740 - "semver": "bin/semver.js" 741 - } 742 - }, 743 - "node_modules/@babel/helper-module-imports": { 744 - "version": "7.27.1", 745 - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", 746 - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 747 - "dev": true, 748 - "license": "MIT", 749 - "dependencies": { 750 - "@babel/traverse": "^7.27.1", 751 - "@babel/types": "^7.27.1" 752 - }, 753 - "engines": { 754 - "node": ">=6.9.0" 755 - } 756 - }, 757 - "node_modules/@babel/helper-module-transforms": { 758 - "version": "7.27.3", 759 - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", 760 - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", 761 - "dev": true, 762 - "license": "MIT", 763 - "dependencies": { 764 - "@babel/helper-module-imports": "^7.27.1", 765 - "@babel/helper-validator-identifier": "^7.27.1", 766 - "@babel/traverse": "^7.27.3" 767 - }, 768 - "engines": { 769 - "node": ">=6.9.0" 770 - }, 771 - "peerDependencies": { 772 - "@babel/core": "^7.0.0" 773 - } 774 - }, 775 - "node_modules/@babel/helper-plugin-utils": { 776 - "version": "7.27.1", 777 - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", 778 - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", 779 - "dev": true, 780 - "license": "MIT", 781 - "engines": { 782 - "node": ">=6.9.0" 783 - } 784 - }, 785 - "node_modules/@babel/helper-string-parser": { 786 - "version": "7.27.1", 787 - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 788 - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 789 - "dev": true, 790 - "license": "MIT", 791 - "engines": { 792 - "node": ">=6.9.0" 793 - } 794 - }, 795 - "node_modules/@babel/helper-validator-identifier": { 796 - "version": "7.27.1", 797 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", 798 - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", 799 - "dev": true, 800 - "license": "MIT", 801 - "engines": { 802 - "node": ">=6.9.0" 803 - } 804 - }, 805 - "node_modules/@babel/helper-validator-option": { 806 - "version": "7.27.1", 807 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", 808 - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", 809 - "dev": true, 810 - "license": "MIT", 811 - "engines": { 812 - "node": ">=6.9.0" 813 - } 814 - }, 815 - "node_modules/@babel/helpers": { 816 - "version": "7.27.6", 817 - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", 818 - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", 819 - "dev": true, 820 - "license": "MIT", 821 - "dependencies": { 822 - "@babel/template": "^7.27.2", 823 - "@babel/types": "^7.27.6" 824 - }, 825 - "engines": { 826 - "node": ">=6.9.0" 827 - } 828 - }, 829 - "node_modules/@babel/parser": { 830 - "version": "7.27.5", 831 - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", 832 - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", 833 - "dev": true, 834 - "license": "MIT", 835 - "dependencies": { 836 - "@babel/types": "^7.27.3" 837 - }, 838 - "bin": { 839 - "parser": "bin/babel-parser.js" 840 - }, 841 - "engines": { 842 - "node": ">=6.0.0" 843 - } 844 - }, 845 - "node_modules/@babel/plugin-syntax-async-generators": { 846 - "version": "7.8.4", 847 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 848 - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 849 - "dev": true, 850 - "license": "MIT", 851 - "dependencies": { 852 - "@babel/helper-plugin-utils": "^7.8.0" 853 - }, 854 - "peerDependencies": { 855 - "@babel/core": "^7.0.0-0" 856 - } 857 - }, 858 - "node_modules/@babel/plugin-syntax-bigint": { 859 - "version": "7.8.3", 860 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", 861 - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", 862 - "dev": true, 863 - "license": "MIT", 864 - "dependencies": { 865 - "@babel/helper-plugin-utils": "^7.8.0" 866 - }, 867 - "peerDependencies": { 868 - "@babel/core": "^7.0.0-0" 869 - } 870 - }, 871 - "node_modules/@babel/plugin-syntax-class-properties": { 872 - "version": "7.12.13", 873 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", 874 - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", 875 - "dev": true, 876 - "license": "MIT", 877 - "dependencies": { 878 - "@babel/helper-plugin-utils": "^7.12.13" 879 - }, 880 - "peerDependencies": { 881 - "@babel/core": "^7.0.0-0" 882 - } 883 - }, 884 - "node_modules/@babel/plugin-syntax-class-static-block": { 885 - "version": "7.14.5", 886 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", 887 - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", 888 - "dev": true, 889 - "license": "MIT", 890 - "dependencies": { 891 - "@babel/helper-plugin-utils": "^7.14.5" 892 - }, 893 - "engines": { 894 - "node": ">=6.9.0" 895 - }, 896 - "peerDependencies": { 897 - "@babel/core": "^7.0.0-0" 898 - } 899 - }, 900 - "node_modules/@babel/plugin-syntax-import-attributes": { 901 - "version": "7.27.1", 902 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", 903 - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", 904 - "dev": true, 905 - "license": "MIT", 906 - "dependencies": { 907 - "@babel/helper-plugin-utils": "^7.27.1" 908 - }, 909 - "engines": { 910 - "node": ">=6.9.0" 911 - }, 912 - "peerDependencies": { 913 - "@babel/core": "^7.0.0-0" 914 - } 915 - }, 916 - "node_modules/@babel/plugin-syntax-import-meta": { 917 - "version": "7.10.4", 918 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", 919 - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", 920 - "dev": true, 921 - "license": "MIT", 922 - "dependencies": { 923 - "@babel/helper-plugin-utils": "^7.10.4" 924 - }, 925 - "peerDependencies": { 926 - "@babel/core": "^7.0.0-0" 927 - } 928 - }, 929 - "node_modules/@babel/plugin-syntax-json-strings": { 930 - "version": "7.8.3", 931 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 932 - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 933 - "dev": true, 934 - "license": "MIT", 935 - "dependencies": { 936 - "@babel/helper-plugin-utils": "^7.8.0" 937 - }, 938 - "peerDependencies": { 939 - "@babel/core": "^7.0.0-0" 940 - } 941 - }, 942 - "node_modules/@babel/plugin-syntax-jsx": { 943 - "version": "7.27.1", 944 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", 945 - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", 946 - "dev": true, 947 - "license": "MIT", 948 - "dependencies": { 949 - "@babel/helper-plugin-utils": "^7.27.1" 950 - }, 951 - "engines": { 952 - "node": ">=6.9.0" 953 - }, 954 - "peerDependencies": { 955 - "@babel/core": "^7.0.0-0" 956 - } 957 - }, 958 - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { 959 - "version": "7.10.4", 960 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 961 - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 962 - "dev": true, 963 - "license": "MIT", 964 - "dependencies": { 965 - "@babel/helper-plugin-utils": "^7.10.4" 966 - }, 967 - "peerDependencies": { 968 - "@babel/core": "^7.0.0-0" 969 - } 970 - }, 971 - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { 972 - "version": "7.8.3", 973 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 974 - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 975 - "dev": true, 976 - "license": "MIT", 977 - "dependencies": { 978 - "@babel/helper-plugin-utils": "^7.8.0" 979 - }, 980 - "peerDependencies": { 981 - "@babel/core": "^7.0.0-0" 982 - } 983 - }, 984 - "node_modules/@babel/plugin-syntax-numeric-separator": { 985 - "version": "7.10.4", 986 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 987 - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 988 - "dev": true, 989 - "license": "MIT", 990 - "dependencies": { 991 - "@babel/helper-plugin-utils": "^7.10.4" 992 - }, 993 - "peerDependencies": { 994 - "@babel/core": "^7.0.0-0" 995 - } 996 - }, 997 - "node_modules/@babel/plugin-syntax-object-rest-spread": { 998 - "version": "7.8.3", 999 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 1000 - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 1001 - "dev": true, 1002 - "license": "MIT", 1003 - "dependencies": { 1004 - "@babel/helper-plugin-utils": "^7.8.0" 1005 - }, 1006 - "peerDependencies": { 1007 - "@babel/core": "^7.0.0-0" 1008 - } 1009 - }, 1010 - "node_modules/@babel/plugin-syntax-optional-catch-binding": { 1011 - "version": "7.8.3", 1012 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 1013 - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 1014 - "dev": true, 1015 - "license": "MIT", 1016 - "dependencies": { 1017 - "@babel/helper-plugin-utils": "^7.8.0" 1018 - }, 1019 - "peerDependencies": { 1020 - "@babel/core": "^7.0.0-0" 1021 - } 1022 - }, 1023 - "node_modules/@babel/plugin-syntax-optional-chaining": { 1024 - "version": "7.8.3", 1025 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 1026 - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 1027 - "dev": true, 1028 - "license": "MIT", 1029 - "dependencies": { 1030 - "@babel/helper-plugin-utils": "^7.8.0" 1031 - }, 1032 - "peerDependencies": { 1033 - "@babel/core": "^7.0.0-0" 1034 - } 1035 - }, 1036 - "node_modules/@babel/plugin-syntax-private-property-in-object": { 1037 - "version": "7.14.5", 1038 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", 1039 - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", 1040 - "dev": true, 1041 - "license": "MIT", 1042 - "dependencies": { 1043 - "@babel/helper-plugin-utils": "^7.14.5" 1044 - }, 1045 - "engines": { 1046 - "node": ">=6.9.0" 1047 - }, 1048 - "peerDependencies": { 1049 - "@babel/core": "^7.0.0-0" 1050 - } 1051 - }, 1052 - "node_modules/@babel/plugin-syntax-top-level-await": { 1053 - "version": "7.14.5", 1054 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", 1055 - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", 1056 - "dev": true, 1057 - "license": "MIT", 1058 - "dependencies": { 1059 - "@babel/helper-plugin-utils": "^7.14.5" 1060 - }, 1061 - "engines": { 1062 - "node": ">=6.9.0" 1063 - }, 1064 - "peerDependencies": { 1065 - "@babel/core": "^7.0.0-0" 1066 - } 1067 - }, 1068 - "node_modules/@babel/plugin-syntax-typescript": { 1069 - "version": "7.27.1", 1070 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", 1071 - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", 1072 - "dev": true, 1073 - "license": "MIT", 1074 - "dependencies": { 1075 - "@babel/helper-plugin-utils": "^7.27.1" 1076 - }, 1077 - "engines": { 1078 - "node": ">=6.9.0" 1079 - }, 1080 - "peerDependencies": { 1081 - "@babel/core": "^7.0.0-0" 1082 - } 1083 - }, 1084 - "node_modules/@babel/template": { 1085 - "version": "7.27.2", 1086 - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", 1087 - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 1088 - "dev": true, 1089 - "license": "MIT", 1090 - "dependencies": { 1091 - "@babel/code-frame": "^7.27.1", 1092 - "@babel/parser": "^7.27.2", 1093 - "@babel/types": "^7.27.1" 1094 - }, 1095 - "engines": { 1096 - "node": ">=6.9.0" 1097 - } 1098 - }, 1099 - "node_modules/@babel/traverse": { 1100 - "version": "7.27.4", 1101 - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", 1102 - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", 1103 - "dev": true, 1104 - "license": "MIT", 1105 - "dependencies": { 1106 - "@babel/code-frame": "^7.27.1", 1107 - "@babel/generator": "^7.27.3", 1108 - "@babel/parser": "^7.27.4", 1109 - "@babel/template": "^7.27.2", 1110 - "@babel/types": "^7.27.3", 1111 - "debug": "^4.3.1", 1112 - "globals": "^11.1.0" 1113 - }, 1114 - "engines": { 1115 - "node": ">=6.9.0" 1116 - } 1117 - }, 1118 - "node_modules/@babel/types": { 1119 - "version": "7.27.6", 1120 - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", 1121 - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", 1122 - "dev": true, 1123 - "license": "MIT", 1124 - "dependencies": { 1125 - "@babel/helper-string-parser": "^7.27.1", 1126 - "@babel/helper-validator-identifier": "^7.27.1" 1127 - }, 1128 - "engines": { 1129 - "node": ">=6.9.0" 1130 - } 1131 - }, 1132 - "node_modules/@bcoe/v8-coverage": { 1133 - "version": "0.2.3", 1134 - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 1135 - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 1136 - "dev": true, 1137 - "license": "MIT" 1138 - }, 1139 - "node_modules/@cbor-extract/cbor-extract-darwin-arm64": { 1140 - "version": "2.2.0", 1141 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz", 1142 - "integrity": "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==", 1143 - "cpu": [ 1144 - "arm64" 1145 - ], 1146 - "license": "MIT", 1147 - "optional": true, 1148 - "os": [ 1149 - "darwin" 1150 - ] 1151 - }, 1152 - "node_modules/@cbor-extract/cbor-extract-darwin-x64": { 1153 - "version": "2.2.0", 1154 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz", 1155 - "integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==", 1156 - "cpu": [ 1157 - "x64" 1158 - ], 1159 - "license": "MIT", 1160 - "optional": true, 1161 - "os": [ 1162 - "darwin" 1163 - ] 1164 - }, 1165 - "node_modules/@cbor-extract/cbor-extract-linux-arm": { 1166 - "version": "2.2.0", 1167 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz", 1168 - "integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==", 1169 - "cpu": [ 1170 - "arm" 1171 - ], 1172 - "license": "MIT", 1173 - "optional": true, 1174 - "os": [ 1175 - "linux" 1176 - ] 1177 - }, 1178 - "node_modules/@cbor-extract/cbor-extract-linux-arm64": { 1179 - "version": "2.2.0", 1180 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz", 1181 - "integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==", 1182 - "cpu": [ 1183 - "arm64" 1184 - ], 1185 - "license": "MIT", 1186 - "optional": true, 1187 - "os": [ 1188 - "linux" 1189 - ] 1190 - }, 1191 - "node_modules/@cbor-extract/cbor-extract-linux-x64": { 1192 - "version": "2.2.0", 1193 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz", 1194 - "integrity": "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==", 1195 - "cpu": [ 1196 - "x64" 1197 - ], 1198 - "license": "MIT", 1199 - "optional": true, 1200 - "os": [ 1201 - "linux" 1202 - ] 1203 - }, 1204 - "node_modules/@cbor-extract/cbor-extract-win32-x64": { 1205 - "version": "2.2.0", 1206 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz", 1207 - "integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==", 1208 - "cpu": [ 1209 - "x64" 1210 - ], 1211 - "license": "MIT", 1212 - "optional": true, 1213 - "os": [ 1214 - "win32" 1215 - ] 1216 - }, 1217 - "node_modules/@emnapi/core": { 1218 - "version": "1.4.3", 1219 - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", 1220 - "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", 1221 - "dev": true, 1222 - "license": "MIT", 1223 - "optional": true, 1224 - "dependencies": { 1225 - "@emnapi/wasi-threads": "1.0.2", 1226 - "tslib": "^2.4.0" 1227 - } 1228 - }, 1229 - "node_modules/@emnapi/runtime": { 1230 - "version": "1.4.3", 1231 - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", 1232 - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", 1233 - "dev": true, 1234 - "license": "MIT", 1235 - "optional": true, 1236 - "dependencies": { 1237 - "tslib": "^2.4.0" 1238 - } 1239 - }, 1240 - "node_modules/@emnapi/wasi-threads": { 1241 - "version": "1.0.2", 1242 - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", 1243 - "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", 1244 - "dev": true, 1245 - "license": "MIT", 1246 - "optional": true, 1247 - "dependencies": { 1248 - "tslib": "^2.4.0" 1249 - } 1250 - }, 1251 - "node_modules/@esbuild/aix-ppc64": { 1252 - "version": "0.25.5", 1253 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", 1254 - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", 1255 - "cpu": [ 1256 - "ppc64" 1257 - ], 1258 - "license": "MIT", 1259 - "optional": true, 1260 - "os": [ 1261 - "aix" 1262 - ], 1263 - "engines": { 1264 - "node": ">=18" 1265 - } 1266 - }, 1267 - "node_modules/@esbuild/android-arm": { 1268 - "version": "0.25.5", 1269 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", 1270 - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", 1271 - "cpu": [ 1272 - "arm" 1273 - ], 1274 - "license": "MIT", 1275 - "optional": true, 1276 - "os": [ 1277 - "android" 1278 - ], 1279 - "engines": { 1280 - "node": ">=18" 1281 - } 1282 - }, 1283 - "node_modules/@esbuild/android-arm64": { 1284 - "version": "0.25.5", 1285 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", 1286 - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", 1287 - "cpu": [ 1288 - "arm64" 1289 - ], 1290 - "license": "MIT", 1291 - "optional": true, 1292 - "os": [ 1293 - "android" 1294 - ], 1295 - "engines": { 1296 - "node": ">=18" 1297 - } 1298 - }, 1299 - "node_modules/@esbuild/android-x64": { 1300 - "version": "0.25.5", 1301 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", 1302 - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", 1303 - "cpu": [ 1304 - "x64" 1305 - ], 1306 - "license": "MIT", 1307 - "optional": true, 1308 - "os": [ 1309 - "android" 1310 - ], 1311 - "engines": { 1312 - "node": ">=18" 1313 - } 1314 - }, 1315 - "node_modules/@esbuild/darwin-arm64": { 1316 - "version": "0.25.5", 1317 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", 1318 - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", 1319 - "cpu": [ 1320 - "arm64" 1321 - ], 1322 - "license": "MIT", 1323 - "optional": true, 1324 - "os": [ 1325 - "darwin" 1326 - ], 1327 - "engines": { 1328 - "node": ">=18" 1329 - } 1330 - }, 1331 - "node_modules/@esbuild/darwin-x64": { 1332 - "version": "0.25.5", 1333 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", 1334 - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", 1335 - "cpu": [ 1336 - "x64" 1337 - ], 1338 - "license": "MIT", 1339 - "optional": true, 1340 - "os": [ 1341 - "darwin" 1342 - ], 1343 - "engines": { 1344 - "node": ">=18" 1345 - } 1346 - }, 1347 - "node_modules/@esbuild/freebsd-arm64": { 1348 - "version": "0.25.5", 1349 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", 1350 - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", 1351 - "cpu": [ 1352 - "arm64" 1353 - ], 1354 - "license": "MIT", 1355 - "optional": true, 1356 - "os": [ 1357 - "freebsd" 1358 - ], 1359 - "engines": { 1360 - "node": ">=18" 1361 - } 1362 - }, 1363 - "node_modules/@esbuild/freebsd-x64": { 1364 - "version": "0.25.5", 1365 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", 1366 - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", 1367 - "cpu": [ 1368 - "x64" 1369 - ], 1370 - "license": "MIT", 1371 - "optional": true, 1372 - "os": [ 1373 - "freebsd" 1374 - ], 1375 - "engines": { 1376 - "node": ">=18" 1377 - } 1378 - }, 1379 - "node_modules/@esbuild/linux-arm": { 1380 - "version": "0.25.5", 1381 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", 1382 - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", 1383 - "cpu": [ 1384 - "arm" 1385 - ], 1386 - "license": "MIT", 1387 - "optional": true, 1388 - "os": [ 1389 - "linux" 1390 - ], 1391 - "engines": { 1392 - "node": ">=18" 1393 - } 1394 - }, 1395 - "node_modules/@esbuild/linux-arm64": { 1396 - "version": "0.25.5", 1397 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", 1398 - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", 1399 - "cpu": [ 1400 - "arm64" 1401 - ], 1402 - "license": "MIT", 1403 - "optional": true, 1404 - "os": [ 1405 - "linux" 1406 - ], 1407 - "engines": { 1408 - "node": ">=18" 1409 - } 1410 - }, 1411 - "node_modules/@esbuild/linux-ia32": { 1412 - "version": "0.25.5", 1413 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", 1414 - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", 1415 - "cpu": [ 1416 - "ia32" 1417 - ], 1418 - "license": "MIT", 1419 - "optional": true, 1420 - "os": [ 1421 - "linux" 1422 - ], 1423 - "engines": { 1424 - "node": ">=18" 1425 - } 1426 - }, 1427 - "node_modules/@esbuild/linux-loong64": { 1428 - "version": "0.25.5", 1429 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", 1430 - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", 1431 - "cpu": [ 1432 - "loong64" 1433 - ], 1434 - "license": "MIT", 1435 - "optional": true, 1436 - "os": [ 1437 - "linux" 1438 - ], 1439 - "engines": { 1440 - "node": ">=18" 1441 - } 1442 - }, 1443 - "node_modules/@esbuild/linux-mips64el": { 1444 - "version": "0.25.5", 1445 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", 1446 - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", 1447 - "cpu": [ 1448 - "mips64el" 1449 - ], 1450 - "license": "MIT", 1451 - "optional": true, 1452 - "os": [ 1453 - "linux" 1454 - ], 1455 - "engines": { 1456 - "node": ">=18" 1457 - } 1458 - }, 1459 - "node_modules/@esbuild/linux-ppc64": { 1460 - "version": "0.25.5", 1461 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", 1462 - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", 1463 - "cpu": [ 1464 - "ppc64" 1465 - ], 1466 - "license": "MIT", 1467 - "optional": true, 1468 - "os": [ 1469 - "linux" 1470 - ], 1471 - "engines": { 1472 - "node": ">=18" 1473 - } 1474 - }, 1475 - "node_modules/@esbuild/linux-riscv64": { 1476 - "version": "0.25.5", 1477 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", 1478 - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", 1479 - "cpu": [ 1480 - "riscv64" 1481 - ], 1482 - "license": "MIT", 1483 - "optional": true, 1484 - "os": [ 1485 - "linux" 1486 - ], 1487 - "engines": { 1488 - "node": ">=18" 1489 - } 1490 - }, 1491 - "node_modules/@esbuild/linux-s390x": { 1492 - "version": "0.25.5", 1493 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", 1494 - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", 1495 - "cpu": [ 1496 - "s390x" 1497 - ], 1498 - "license": "MIT", 1499 - "optional": true, 1500 - "os": [ 1501 - "linux" 1502 - ], 1503 - "engines": { 1504 - "node": ">=18" 1505 - } 1506 - }, 1507 - "node_modules/@esbuild/linux-x64": { 1508 - "version": "0.25.5", 1509 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", 1510 - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", 1511 - "cpu": [ 1512 - "x64" 1513 - ], 1514 - "license": "MIT", 1515 - "optional": true, 1516 - "os": [ 1517 - "linux" 1518 - ], 1519 - "engines": { 1520 - "node": ">=18" 1521 - } 1522 - }, 1523 - "node_modules/@esbuild/netbsd-arm64": { 1524 - "version": "0.25.5", 1525 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", 1526 - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", 1527 - "cpu": [ 1528 - "arm64" 1529 - ], 1530 - "license": "MIT", 1531 - "optional": true, 1532 - "os": [ 1533 - "netbsd" 1534 - ], 1535 - "engines": { 1536 - "node": ">=18" 1537 - } 1538 - }, 1539 - "node_modules/@esbuild/netbsd-x64": { 1540 - "version": "0.25.5", 1541 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", 1542 - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", 1543 - "cpu": [ 1544 - "x64" 1545 - ], 1546 - "license": "MIT", 1547 - "optional": true, 1548 - "os": [ 1549 - "netbsd" 1550 - ], 1551 - "engines": { 1552 - "node": ">=18" 1553 - } 1554 - }, 1555 - "node_modules/@esbuild/openbsd-arm64": { 1556 - "version": "0.25.5", 1557 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", 1558 - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", 1559 - "cpu": [ 1560 - "arm64" 1561 - ], 1562 - "license": "MIT", 1563 - "optional": true, 1564 - "os": [ 1565 - "openbsd" 1566 - ], 1567 - "engines": { 1568 - "node": ">=18" 1569 - } 1570 - }, 1571 - "node_modules/@esbuild/openbsd-x64": { 1572 - "version": "0.25.5", 1573 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", 1574 - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", 1575 - "cpu": [ 1576 - "x64" 1577 - ], 1578 - "license": "MIT", 1579 - "optional": true, 1580 - "os": [ 1581 - "openbsd" 1582 - ], 1583 - "engines": { 1584 - "node": ">=18" 1585 - } 1586 - }, 1587 - "node_modules/@esbuild/sunos-x64": { 1588 - "version": "0.25.5", 1589 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", 1590 - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", 1591 - "cpu": [ 1592 - "x64" 1593 - ], 1594 - "license": "MIT", 1595 - "optional": true, 1596 - "os": [ 1597 - "sunos" 1598 - ], 1599 - "engines": { 1600 - "node": ">=18" 1601 - } 1602 - }, 1603 - "node_modules/@esbuild/win32-arm64": { 1604 - "version": "0.25.5", 1605 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", 1606 - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", 1607 - "cpu": [ 1608 - "arm64" 1609 - ], 1610 - "license": "MIT", 1611 - "optional": true, 1612 - "os": [ 1613 - "win32" 1614 - ], 1615 - "engines": { 1616 - "node": ">=18" 1617 - } 1618 - }, 1619 - "node_modules/@esbuild/win32-ia32": { 1620 - "version": "0.25.5", 1621 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", 1622 - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", 1623 - "cpu": [ 1624 - "ia32" 1625 - ], 1626 - "license": "MIT", 1627 - "optional": true, 1628 - "os": [ 1629 - "win32" 1630 - ], 1631 - "engines": { 1632 - "node": ">=18" 1633 - } 1634 - }, 1635 - "node_modules/@esbuild/win32-x64": { 1636 - "version": "0.25.5", 1637 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", 1638 - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", 1639 - "cpu": [ 1640 - "x64" 1641 - ], 1642 - "license": "MIT", 1643 - "optional": true, 1644 - "os": [ 1645 - "win32" 1646 - ], 1647 - "engines": { 1648 - "node": ">=18" 1649 - } 1650 - }, 1651 - "node_modules/@ipld/car": { 1652 - "version": "5.4.2", 1653 - "resolved": "https://registry.npmjs.org/@ipld/car/-/car-5.4.2.tgz", 1654 - "integrity": "sha512-gfyrJvePyXnh2Fbj8mPg4JYvEZ3izhk8C9WgAle7xIYbrJNSXmNQ6BxAls8Gof97vvGbCROdxbTWRmHJtTCbcg==", 1655 - "license": "Apache-2.0 OR MIT", 1656 - "dependencies": { 1657 - "@ipld/dag-cbor": "^9.0.7", 1658 - "cborg": "^4.0.5", 1659 - "multiformats": "^13.0.0", 1660 - "varint": "^6.0.0" 1661 - }, 1662 - "engines": { 1663 - "node": ">=16.0.0", 1664 - "npm": ">=7.0.0" 1665 - } 1666 - }, 1667 - "node_modules/@ipld/car/node_modules/@ipld/dag-cbor": { 1668 - "version": "9.2.4", 1669 - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.4.tgz", 1670 - "integrity": "sha512-GbDWYl2fdJgkYtIJN0HY9oO0o50d1nB4EQb7uYWKUd2ztxCjxiEW3PjwGG0nqUpN1G4Cug6LX8NzbA7fKT+zfA==", 1671 - "license": "Apache-2.0 OR MIT", 1672 - "dependencies": { 1673 - "cborg": "^4.0.0", 1674 - "multiformats": "^13.1.0" 1675 - }, 1676 - "engines": { 1677 - "node": ">=16.0.0", 1678 - "npm": ">=7.0.0" 1679 - } 1680 - }, 1681 - "node_modules/@ipld/dag-cbor": { 1682 - "version": "7.0.3", 1683 - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", 1684 - "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", 1685 - "license": "(Apache-2.0 AND MIT)", 1686 - "dependencies": { 1687 - "cborg": "^1.6.0", 1688 - "multiformats": "^9.5.4" 1689 - } 1690 - }, 1691 - "node_modules/@ipld/dag-cbor/node_modules/cborg": { 1692 - "version": "1.10.2", 1693 - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", 1694 - "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", 1695 - "license": "Apache-2.0", 1696 - "bin": { 1697 - "cborg": "cli.js" 1698 - } 1699 - }, 1700 - "node_modules/@ipld/dag-cbor/node_modules/multiformats": { 1701 - "version": "9.9.0", 1702 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 1703 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 1704 - "license": "(Apache-2.0 AND MIT)" 1705 - }, 1706 - "node_modules/@isaacs/cliui": { 1707 - "version": "8.0.2", 1708 - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 1709 - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 1710 - "dev": true, 1711 - "license": "ISC", 1712 - "dependencies": { 1713 - "string-width": "^5.1.2", 1714 - "string-width-cjs": "npm:string-width@^4.2.0", 1715 - "strip-ansi": "^7.0.1", 1716 - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 1717 - "wrap-ansi": "^8.1.0", 1718 - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 1719 - }, 1720 - "engines": { 1721 - "node": ">=12" 1722 - } 1723 - }, 1724 - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 1725 - "version": "6.1.0", 1726 - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1727 - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1728 - "dev": true, 1729 - "license": "MIT", 1730 - "engines": { 1731 - "node": ">=12" 1732 - }, 1733 - "funding": { 1734 - "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1735 - } 1736 - }, 1737 - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { 1738 - "version": "6.2.1", 1739 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1740 - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1741 - "dev": true, 1742 - "license": "MIT", 1743 - "engines": { 1744 - "node": ">=12" 1745 - }, 1746 - "funding": { 1747 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1748 - } 1749 - }, 1750 - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { 1751 - "version": "9.2.2", 1752 - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1753 - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1754 - "dev": true, 1755 - "license": "MIT" 1756 - }, 1757 - "node_modules/@isaacs/cliui/node_modules/string-width": { 1758 - "version": "5.1.2", 1759 - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1760 - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1761 - "dev": true, 1762 - "license": "MIT", 1763 - "dependencies": { 1764 - "eastasianwidth": "^0.2.0", 1765 - "emoji-regex": "^9.2.2", 1766 - "strip-ansi": "^7.0.1" 1767 - }, 1768 - "engines": { 1769 - "node": ">=12" 1770 - }, 1771 - "funding": { 1772 - "url": "https://github.com/sponsors/sindresorhus" 1773 - } 1774 - }, 1775 - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 1776 - "version": "7.1.0", 1777 - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1778 - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1779 - "dev": true, 1780 - "license": "MIT", 1781 - "dependencies": { 1782 - "ansi-regex": "^6.0.1" 1783 - }, 1784 - "engines": { 1785 - "node": ">=12" 1786 - }, 1787 - "funding": { 1788 - "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1789 - } 1790 - }, 1791 - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { 1792 - "version": "8.1.0", 1793 - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1794 - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1795 - "dev": true, 1796 - "license": "MIT", 1797 - "dependencies": { 1798 - "ansi-styles": "^6.1.0", 1799 - "string-width": "^5.0.1", 1800 - "strip-ansi": "^7.0.1" 1801 - }, 1802 - "engines": { 1803 - "node": ">=12" 1804 - }, 1805 - "funding": { 1806 - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1807 - } 1808 - }, 1809 - "node_modules/@istanbuljs/load-nyc-config": { 1810 - "version": "1.1.0", 1811 - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", 1812 - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", 1813 - "dev": true, 1814 - "license": "ISC", 1815 - "dependencies": { 1816 - "camelcase": "^5.3.1", 1817 - "find-up": "^4.1.0", 1818 - "get-package-type": "^0.1.0", 1819 - "js-yaml": "^3.13.1", 1820 - "resolve-from": "^5.0.0" 1821 - }, 1822 - "engines": { 1823 - "node": ">=8" 1824 - } 1825 - }, 1826 - "node_modules/@istanbuljs/schema": { 1827 - "version": "0.1.3", 1828 - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 1829 - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 1830 - "dev": true, 1831 - "license": "MIT", 1832 - "engines": { 1833 - "node": ">=8" 1834 - } 1835 - }, 1836 - "node_modules/@jest/console": { 1837 - "version": "30.0.2", 1838 - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.2.tgz", 1839 - "integrity": "sha512-krGElPU0FipAqpVZ/BRZOy0MZh/ARdJ0Nj+PiH1ykFY1+VpBlYNLjdjVA5CFKxnKR6PFqFutO4Z7cdK9BlGiDA==", 1840 - "dev": true, 1841 - "license": "MIT", 1842 - "dependencies": { 1843 - "@jest/types": "30.0.1", 1844 - "@types/node": "*", 1845 - "chalk": "^4.1.2", 1846 - "jest-message-util": "30.0.2", 1847 - "jest-util": "30.0.2", 1848 - "slash": "^3.0.0" 1849 - }, 1850 - "engines": { 1851 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1852 - } 1853 - }, 1854 - "node_modules/@jest/core": { 1855 - "version": "30.0.2", 1856 - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.2.tgz", 1857 - "integrity": "sha512-mUMFdDtYWu7la63NxlyNIhgnzynszxunXWrtryR7bV24jV9hmi7XCZTzZHaLJjcBU66MeUAPZ81HjwASVpYhYQ==", 1858 - "dev": true, 1859 - "license": "MIT", 1860 - "dependencies": { 1861 - "@jest/console": "30.0.2", 1862 - "@jest/pattern": "30.0.1", 1863 - "@jest/reporters": "30.0.2", 1864 - "@jest/test-result": "30.0.2", 1865 - "@jest/transform": "30.0.2", 1866 - "@jest/types": "30.0.1", 1867 - "@types/node": "*", 1868 - "ansi-escapes": "^4.3.2", 1869 - "chalk": "^4.1.2", 1870 - "ci-info": "^4.2.0", 1871 - "exit-x": "^0.2.2", 1872 - "graceful-fs": "^4.2.11", 1873 - "jest-changed-files": "30.0.2", 1874 - "jest-config": "30.0.2", 1875 - "jest-haste-map": "30.0.2", 1876 - "jest-message-util": "30.0.2", 1877 - "jest-regex-util": "30.0.1", 1878 - "jest-resolve": "30.0.2", 1879 - "jest-resolve-dependencies": "30.0.2", 1880 - "jest-runner": "30.0.2", 1881 - "jest-runtime": "30.0.2", 1882 - "jest-snapshot": "30.0.2", 1883 - "jest-util": "30.0.2", 1884 - "jest-validate": "30.0.2", 1885 - "jest-watcher": "30.0.2", 1886 - "micromatch": "^4.0.8", 1887 - "pretty-format": "30.0.2", 1888 - "slash": "^3.0.0" 1889 - }, 1890 - "engines": { 1891 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1892 - }, 1893 - "peerDependencies": { 1894 - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 1895 - }, 1896 - "peerDependenciesMeta": { 1897 - "node-notifier": { 1898 - "optional": true 1899 - } 1900 - } 1901 - }, 1902 - "node_modules/@jest/diff-sequences": { 1903 - "version": "30.0.1", 1904 - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", 1905 - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", 1906 - "dev": true, 1907 - "license": "MIT", 1908 - "engines": { 1909 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1910 - } 1911 - }, 1912 - "node_modules/@jest/environment": { 1913 - "version": "30.0.2", 1914 - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.2.tgz", 1915 - "integrity": "sha512-hRLhZRJNxBiOhxIKSq2UkrlhMt3/zVFQOAi5lvS8T9I03+kxsbflwHJEF+eXEYXCrRGRhHwECT7CDk6DyngsRA==", 1916 - "dev": true, 1917 - "license": "MIT", 1918 - "dependencies": { 1919 - "@jest/fake-timers": "30.0.2", 1920 - "@jest/types": "30.0.1", 1921 - "@types/node": "*", 1922 - "jest-mock": "30.0.2" 1923 - }, 1924 - "engines": { 1925 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1926 - } 1927 - }, 1928 - "node_modules/@jest/expect": { 1929 - "version": "30.0.2", 1930 - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.2.tgz", 1931 - "integrity": "sha512-blWRFPjv2cVfh42nLG6L3xIEbw+bnuiZYZDl/BZlsNG/i3wKV6FpPZ2EPHguk7t5QpLaouIu+7JmYO4uBR6AOg==", 1932 - "dev": true, 1933 - "license": "MIT", 1934 - "dependencies": { 1935 - "expect": "30.0.2", 1936 - "jest-snapshot": "30.0.2" 1937 - }, 1938 - "engines": { 1939 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1940 - } 1941 - }, 1942 - "node_modules/@jest/expect-utils": { 1943 - "version": "30.0.2", 1944 - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.2.tgz", 1945 - "integrity": "sha512-FHF2YdtFBUQOo0/qdgt+6UdBFcNPF/TkVzcc+4vvf8uaBzUlONytGBeeudufIHHW1khRfM1sBbRT1VCK7n/0dQ==", 1946 - "dev": true, 1947 - "license": "MIT", 1948 - "dependencies": { 1949 - "@jest/get-type": "30.0.1" 1950 - }, 1951 - "engines": { 1952 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1953 - } 1954 - }, 1955 - "node_modules/@jest/fake-timers": { 1956 - "version": "30.0.2", 1957 - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.2.tgz", 1958 - "integrity": "sha512-jfx0Xg7l0gmphTY9UKm5RtH12BlLYj/2Plj6wXjVW5Era4FZKfXeIvwC67WX+4q8UCFxYS20IgnMcFBcEU0DtA==", 1959 - "dev": true, 1960 - "license": "MIT", 1961 - "dependencies": { 1962 - "@jest/types": "30.0.1", 1963 - "@sinonjs/fake-timers": "^13.0.0", 1964 - "@types/node": "*", 1965 - "jest-message-util": "30.0.2", 1966 - "jest-mock": "30.0.2", 1967 - "jest-util": "30.0.2" 1968 - }, 1969 - "engines": { 1970 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1971 - } 1972 - }, 1973 - "node_modules/@jest/get-type": { 1974 - "version": "30.0.1", 1975 - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", 1976 - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", 1977 - "dev": true, 1978 - "license": "MIT", 1979 - "engines": { 1980 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1981 - } 1982 - }, 1983 - "node_modules/@jest/globals": { 1984 - "version": "30.0.2", 1985 - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.2.tgz", 1986 - "integrity": "sha512-DwTtus9jjbG7b6jUdkcVdptf0wtD1v153A+PVwWB/zFwXhqu6hhtSd+uq88jofMhmYPtkmPmVGUBRNCZEKXn+w==", 1987 - "dev": true, 1988 - "license": "MIT", 1989 - "dependencies": { 1990 - "@jest/environment": "30.0.2", 1991 - "@jest/expect": "30.0.2", 1992 - "@jest/types": "30.0.1", 1993 - "jest-mock": "30.0.2" 1994 - }, 1995 - "engines": { 1996 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 1997 - } 1998 - }, 1999 - "node_modules/@jest/pattern": { 2000 - "version": "30.0.1", 2001 - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", 2002 - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", 2003 - "dev": true, 2004 - "license": "MIT", 2005 - "dependencies": { 2006 - "@types/node": "*", 2007 - "jest-regex-util": "30.0.1" 2008 - }, 2009 - "engines": { 2010 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2011 - } 2012 - }, 2013 - "node_modules/@jest/reporters": { 2014 - "version": "30.0.2", 2015 - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.2.tgz", 2016 - "integrity": "sha512-l4QzS/oKf57F8WtPZK+vvF4Io6ukplc6XgNFu4Hd/QxaLEO9f+8dSFzUua62Oe0HKlCUjKHpltKErAgDiMJKsA==", 2017 - "dev": true, 2018 - "license": "MIT", 2019 - "dependencies": { 2020 - "@bcoe/v8-coverage": "^0.2.3", 2021 - "@jest/console": "30.0.2", 2022 - "@jest/test-result": "30.0.2", 2023 - "@jest/transform": "30.0.2", 2024 - "@jest/types": "30.0.1", 2025 - "@jridgewell/trace-mapping": "^0.3.25", 2026 - "@types/node": "*", 2027 - "chalk": "^4.1.2", 2028 - "collect-v8-coverage": "^1.0.2", 2029 - "exit-x": "^0.2.2", 2030 - "glob": "^10.3.10", 2031 - "graceful-fs": "^4.2.11", 2032 - "istanbul-lib-coverage": "^3.0.0", 2033 - "istanbul-lib-instrument": "^6.0.0", 2034 - "istanbul-lib-report": "^3.0.0", 2035 - "istanbul-lib-source-maps": "^5.0.0", 2036 - "istanbul-reports": "^3.1.3", 2037 - "jest-message-util": "30.0.2", 2038 - "jest-util": "30.0.2", 2039 - "jest-worker": "30.0.2", 2040 - "slash": "^3.0.0", 2041 - "string-length": "^4.0.2", 2042 - "v8-to-istanbul": "^9.0.1" 2043 - }, 2044 - "engines": { 2045 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2046 - }, 2047 - "peerDependencies": { 2048 - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 2049 - }, 2050 - "peerDependenciesMeta": { 2051 - "node-notifier": { 2052 - "optional": true 2053 - } 2054 - } 2055 - }, 2056 - "node_modules/@jest/schemas": { 2057 - "version": "30.0.1", 2058 - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", 2059 - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", 2060 - "dev": true, 2061 - "license": "MIT", 2062 - "dependencies": { 2063 - "@sinclair/typebox": "^0.34.0" 2064 - }, 2065 - "engines": { 2066 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2067 - } 2068 - }, 2069 - "node_modules/@jest/snapshot-utils": { 2070 - "version": "30.0.1", 2071 - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.1.tgz", 2072 - "integrity": "sha512-6Dpv7vdtoRiISEFwYF8/c7LIvqXD7xDXtLPNzC2xqAfBznKip0MQM+rkseKwUPUpv2PJ7KW/YsnwWXrIL2xF+A==", 2073 - "dev": true, 2074 - "license": "MIT", 2075 - "dependencies": { 2076 - "@jest/types": "30.0.1", 2077 - "chalk": "^4.1.2", 2078 - "graceful-fs": "^4.2.11", 2079 - "natural-compare": "^1.4.0" 2080 - }, 2081 - "engines": { 2082 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2083 - } 2084 - }, 2085 - "node_modules/@jest/source-map": { 2086 - "version": "30.0.1", 2087 - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", 2088 - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", 2089 - "dev": true, 2090 - "license": "MIT", 2091 - "dependencies": { 2092 - "@jridgewell/trace-mapping": "^0.3.25", 2093 - "callsites": "^3.1.0", 2094 - "graceful-fs": "^4.2.11" 2095 - }, 2096 - "engines": { 2097 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2098 - } 2099 - }, 2100 - "node_modules/@jest/test-result": { 2101 - "version": "30.0.2", 2102 - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.2.tgz", 2103 - "integrity": "sha512-KKMuBKkkZYP/GfHMhI+cH2/P3+taMZS3qnqqiPC1UXZTJskkCS+YU/ILCtw5anw1+YsTulDHFpDo70mmCedW8w==", 2104 - "dev": true, 2105 - "license": "MIT", 2106 - "dependencies": { 2107 - "@jest/console": "30.0.2", 2108 - "@jest/types": "30.0.1", 2109 - "@types/istanbul-lib-coverage": "^2.0.6", 2110 - "collect-v8-coverage": "^1.0.2" 2111 - }, 2112 - "engines": { 2113 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2114 - } 2115 - }, 2116 - "node_modules/@jest/test-sequencer": { 2117 - "version": "30.0.2", 2118 - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.2.tgz", 2119 - "integrity": "sha512-fbyU5HPka0rkalZ3MXVvq0hwZY8dx3Y6SCqR64zRmh+xXlDeFl0IdL4l9e7vp4gxEXTYHbwLFA1D+WW5CucaSw==", 2120 - "dev": true, 2121 - "license": "MIT", 2122 - "dependencies": { 2123 - "@jest/test-result": "30.0.2", 2124 - "graceful-fs": "^4.2.11", 2125 - "jest-haste-map": "30.0.2", 2126 - "slash": "^3.0.0" 2127 - }, 2128 - "engines": { 2129 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2130 - } 2131 - }, 2132 - "node_modules/@jest/transform": { 2133 - "version": "30.0.2", 2134 - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.2.tgz", 2135 - "integrity": "sha512-kJIuhLMTxRF7sc0gPzPtCDib/V9KwW3I2U25b+lYCYMVqHHSrcZopS8J8H+znx9yixuFv+Iozl8raLt/4MoxrA==", 2136 - "dev": true, 2137 - "license": "MIT", 2138 - "dependencies": { 2139 - "@babel/core": "^7.27.4", 2140 - "@jest/types": "30.0.1", 2141 - "@jridgewell/trace-mapping": "^0.3.25", 2142 - "babel-plugin-istanbul": "^7.0.0", 2143 - "chalk": "^4.1.2", 2144 - "convert-source-map": "^2.0.0", 2145 - "fast-json-stable-stringify": "^2.1.0", 2146 - "graceful-fs": "^4.2.11", 2147 - "jest-haste-map": "30.0.2", 2148 - "jest-regex-util": "30.0.1", 2149 - "jest-util": "30.0.2", 2150 - "micromatch": "^4.0.8", 2151 - "pirates": "^4.0.7", 2152 - "slash": "^3.0.0", 2153 - "write-file-atomic": "^5.0.1" 2154 - }, 2155 - "engines": { 2156 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2157 - } 2158 - }, 2159 - "node_modules/@jest/types": { 2160 - "version": "30.0.1", 2161 - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", 2162 - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", 2163 - "dev": true, 2164 - "license": "MIT", 2165 - "dependencies": { 2166 - "@jest/pattern": "30.0.1", 2167 - "@jest/schemas": "30.0.1", 2168 - "@types/istanbul-lib-coverage": "^2.0.6", 2169 - "@types/istanbul-reports": "^3.0.4", 2170 - "@types/node": "*", 2171 - "@types/yargs": "^17.0.33", 2172 - "chalk": "^4.1.2" 2173 - }, 2174 - "engines": { 2175 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 2176 - } 2177 - }, 2178 - "node_modules/@jridgewell/gen-mapping": { 2179 - "version": "0.3.8", 2180 - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 2181 - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 2182 - "dev": true, 2183 - "license": "MIT", 2184 - "dependencies": { 2185 - "@jridgewell/set-array": "^1.2.1", 2186 - "@jridgewell/sourcemap-codec": "^1.4.10", 2187 - "@jridgewell/trace-mapping": "^0.3.24" 2188 - }, 2189 - "engines": { 2190 - "node": ">=6.0.0" 2191 - } 2192 - }, 2193 - "node_modules/@jridgewell/resolve-uri": { 2194 - "version": "3.1.2", 2195 - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 2196 - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 2197 - "dev": true, 2198 - "license": "MIT", 2199 - "engines": { 2200 - "node": ">=6.0.0" 2201 - } 2202 - }, 2203 - "node_modules/@jridgewell/set-array": { 2204 - "version": "1.2.1", 2205 - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 2206 - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 2207 - "dev": true, 2208 - "license": "MIT", 2209 - "engines": { 2210 - "node": ">=6.0.0" 2211 - } 2212 - }, 2213 - "node_modules/@jridgewell/sourcemap-codec": { 2214 - "version": "1.5.0", 2215 - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 2216 - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 2217 - "dev": true, 2218 - "license": "MIT" 2219 - }, 2220 - "node_modules/@jridgewell/trace-mapping": { 2221 - "version": "0.3.25", 2222 - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 2223 - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 2224 - "dev": true, 2225 - "license": "MIT", 2226 - "dependencies": { 2227 - "@jridgewell/resolve-uri": "^3.1.0", 2228 - "@jridgewell/sourcemap-codec": "^1.4.14" 2229 - } 2230 - }, 2231 - "node_modules/@napi-rs/wasm-runtime": { 2232 - "version": "0.2.11", 2233 - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", 2234 - "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", 2235 - "dev": true, 2236 - "license": "MIT", 2237 - "optional": true, 2238 - "dependencies": { 2239 - "@emnapi/core": "^1.4.3", 2240 - "@emnapi/runtime": "^1.4.3", 2241 - "@tybys/wasm-util": "^0.9.0" 2242 - } 2243 - }, 2244 - "node_modules/@noble/curves": { 2245 - "version": "1.9.2", 2246 - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz", 2247 - "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", 2248 - "license": "MIT", 2249 - "dependencies": { 2250 - "@noble/hashes": "1.8.0" 2251 - }, 2252 - "engines": { 2253 - "node": "^14.21.3 || >=16" 2254 - }, 2255 - "funding": { 2256 - "url": "https://paulmillr.com/funding/" 2257 - } 2258 - }, 2259 - "node_modules/@noble/hashes": { 2260 - "version": "1.8.0", 2261 - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", 2262 - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", 2263 - "license": "MIT", 2264 - "engines": { 2265 - "node": "^14.21.3 || >=16" 2266 - }, 2267 - "funding": { 2268 - "url": "https://paulmillr.com/funding/" 2269 - } 2270 - }, 2271 - "node_modules/@paralleldrive/cuid2": { 2272 - "version": "2.2.2", 2273 - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", 2274 - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", 2275 - "dev": true, 2276 - "license": "MIT", 2277 - "dependencies": { 2278 - "@noble/hashes": "^1.1.5" 2279 - } 2280 - }, 2281 - "node_modules/@pkgjs/parseargs": { 2282 - "version": "0.11.0", 2283 - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 2284 - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 2285 - "dev": true, 2286 - "license": "MIT", 2287 - "optional": true, 2288 - "engines": { 2289 - "node": ">=14" 2290 - } 2291 - }, 2292 - "node_modules/@pkgr/core": { 2293 - "version": "0.2.7", 2294 - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", 2295 - "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", 2296 - "dev": true, 2297 - "license": "MIT", 2298 - "engines": { 2299 - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 2300 - }, 2301 - "funding": { 2302 - "url": "https://opencollective.com/pkgr" 2303 - } 2304 - }, 2305 - "node_modules/@sinclair/typebox": { 2306 - "version": "0.34.35", 2307 - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.35.tgz", 2308 - "integrity": "sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==", 2309 - "dev": true, 2310 - "license": "MIT" 2311 - }, 2312 - "node_modules/@sinonjs/commons": { 2313 - "version": "3.0.1", 2314 - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", 2315 - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", 2316 - "dev": true, 2317 - "license": "BSD-3-Clause", 2318 - "dependencies": { 2319 - "type-detect": "4.0.8" 2320 - } 2321 - }, 2322 - "node_modules/@sinonjs/fake-timers": { 2323 - "version": "13.0.5", 2324 - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", 2325 - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", 2326 - "dev": true, 2327 - "license": "BSD-3-Clause", 2328 - "dependencies": { 2329 - "@sinonjs/commons": "^3.0.1" 2330 - } 2331 - }, 2332 - "node_modules/@skyware/firehose": { 2333 - "version": "0.5.1", 2334 - "resolved": "https://registry.npmjs.org/@skyware/firehose/-/firehose-0.5.1.tgz", 2335 - "integrity": "sha512-7fcTQtXCbD2t5ls/tvMeYuI8dHTiUuZvrMdD1Mq+ZyMPpjcQdv2OsmflTrldt5XY+kOgoaThImi7QEo07B3o2Q==", 2336 - "license": "MPL-2.0", 2337 - "dependencies": { 2338 - "@atcute/car": "^3.0.3", 2339 - "@atcute/cbor": "^2.2.2", 2340 - "nanoevents": "^9.1.0" 2341 - } 2342 - }, 2343 - "node_modules/@tybys/wasm-util": { 2344 - "version": "0.9.0", 2345 - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", 2346 - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", 2347 - "dev": true, 2348 - "license": "MIT", 2349 - "optional": true, 2350 - "dependencies": { 2351 - "tslib": "^2.4.0" 2352 - } 2353 - }, 2354 - "node_modules/@types/babel__core": { 2355 - "version": "7.20.5", 2356 - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 2357 - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 2358 - "dev": true, 2359 - "license": "MIT", 2360 - "dependencies": { 2361 - "@babel/parser": "^7.20.7", 2362 - "@babel/types": "^7.20.7", 2363 - "@types/babel__generator": "*", 2364 - "@types/babel__template": "*", 2365 - "@types/babel__traverse": "*" 2366 - } 2367 - }, 2368 - "node_modules/@types/babel__generator": { 2369 - "version": "7.27.0", 2370 - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", 2371 - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", 2372 - "dev": true, 2373 - "license": "MIT", 2374 - "dependencies": { 2375 - "@babel/types": "^7.0.0" 2376 - } 2377 - }, 2378 - "node_modules/@types/babel__template": { 2379 - "version": "7.4.4", 2380 - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 2381 - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 2382 - "dev": true, 2383 - "license": "MIT", 2384 - "dependencies": { 2385 - "@babel/parser": "^7.1.0", 2386 - "@babel/types": "^7.0.0" 2387 - } 2388 - }, 2389 - "node_modules/@types/babel__traverse": { 2390 - "version": "7.20.7", 2391 - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", 2392 - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", 2393 - "dev": true, 2394 - "license": "MIT", 2395 - "dependencies": { 2396 - "@babel/types": "^7.20.7" 2397 - } 2398 - }, 2399 - "node_modules/@types/better-sqlite3": { 2400 - "version": "7.6.13", 2401 - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", 2402 - "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", 2403 - "license": "MIT", 2404 - "dependencies": { 2405 - "@types/node": "*" 2406 - } 2407 - }, 2408 - "node_modules/@types/body-parser": { 2409 - "version": "1.19.6", 2410 - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", 2411 - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", 2412 - "license": "MIT", 2413 - "dependencies": { 2414 - "@types/connect": "*", 2415 - "@types/node": "*" 2416 - } 2417 - }, 2418 - "node_modules/@types/connect": { 2419 - "version": "3.4.38", 2420 - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", 2421 - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", 2422 - "license": "MIT", 2423 - "dependencies": { 2424 - "@types/node": "*" 2425 - } 2426 - }, 2427 - "node_modules/@types/cookiejar": { 2428 - "version": "2.1.5", 2429 - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", 2430 - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", 2431 - "dev": true, 2432 - "license": "MIT" 2433 - }, 2434 - "node_modules/@types/cors": { 2435 - "version": "2.8.19", 2436 - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", 2437 - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", 2438 - "license": "MIT", 2439 - "dependencies": { 2440 - "@types/node": "*" 2441 - } 2442 - }, 2443 - "node_modules/@types/express": { 2444 - "version": "5.0.3", 2445 - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", 2446 - "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", 2447 - "license": "MIT", 2448 - "dependencies": { 2449 - "@types/body-parser": "*", 2450 - "@types/express-serve-static-core": "^5.0.0", 2451 - "@types/serve-static": "*" 2452 - } 2453 - }, 2454 - "node_modules/@types/express-serve-static-core": { 2455 - "version": "5.0.6", 2456 - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", 2457 - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", 2458 - "license": "MIT", 2459 - "dependencies": { 2460 - "@types/node": "*", 2461 - "@types/qs": "*", 2462 - "@types/range-parser": "*", 2463 - "@types/send": "*" 2464 - } 2465 - }, 2466 - "node_modules/@types/express-session": { 2467 - "version": "1.18.2", 2468 - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.18.2.tgz", 2469 - "integrity": "sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==", 2470 - "license": "MIT", 2471 - "dependencies": { 2472 - "@types/express": "*" 2473 - } 2474 - }, 2475 - "node_modules/@types/http-errors": { 2476 - "version": "2.0.5", 2477 - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", 2478 - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", 2479 - "license": "MIT" 2480 - }, 2481 - "node_modules/@types/istanbul-lib-coverage": { 2482 - "version": "2.0.6", 2483 - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", 2484 - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", 2485 - "dev": true, 2486 - "license": "MIT" 2487 - }, 2488 - "node_modules/@types/istanbul-lib-report": { 2489 - "version": "3.0.3", 2490 - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", 2491 - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", 2492 - "dev": true, 2493 - "license": "MIT", 2494 - "dependencies": { 2495 - "@types/istanbul-lib-coverage": "*" 2496 - } 2497 - }, 2498 - "node_modules/@types/istanbul-reports": { 2499 - "version": "3.0.4", 2500 - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", 2501 - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", 2502 - "dev": true, 2503 - "license": "MIT", 2504 - "dependencies": { 2505 - "@types/istanbul-lib-report": "*" 2506 - } 2507 - }, 2508 - "node_modules/@types/jest": { 2509 - "version": "30.0.0", 2510 - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", 2511 - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", 2512 - "dev": true, 2513 - "license": "MIT", 2514 - "dependencies": { 2515 - "expect": "^30.0.0", 2516 - "pretty-format": "^30.0.0" 2517 - } 2518 - }, 2519 - "node_modules/@types/methods": { 2520 - "version": "1.1.4", 2521 - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", 2522 - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", 2523 - "dev": true, 2524 - "license": "MIT" 2525 - }, 2526 - "node_modules/@types/mime": { 2527 - "version": "1.3.5", 2528 - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", 2529 - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", 2530 - "license": "MIT" 2531 - }, 2532 - "node_modules/@types/node": { 2533 - "version": "24.0.3", 2534 - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", 2535 - "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", 2536 - "license": "MIT", 2537 - "dependencies": { 2538 - "undici-types": "~7.8.0" 2539 - } 2540 - }, 2541 - "node_modules/@types/qs": { 2542 - "version": "6.14.0", 2543 - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", 2544 - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", 2545 - "license": "MIT" 2546 - }, 2547 - "node_modules/@types/range-parser": { 2548 - "version": "1.2.7", 2549 - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", 2550 - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", 2551 - "license": "MIT" 2552 - }, 2553 - "node_modules/@types/send": { 2554 - "version": "0.17.5", 2555 - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", 2556 - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", 2557 - "license": "MIT", 2558 - "dependencies": { 2559 - "@types/mime": "^1", 2560 - "@types/node": "*" 2561 - } 2562 - }, 2563 - "node_modules/@types/serve-static": { 2564 - "version": "1.15.8", 2565 - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", 2566 - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", 2567 - "license": "MIT", 2568 - "dependencies": { 2569 - "@types/http-errors": "*", 2570 - "@types/node": "*", 2571 - "@types/send": "*" 2572 - } 2573 - }, 2574 - "node_modules/@types/stack-utils": { 2575 - "version": "2.0.3", 2576 - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", 2577 - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", 2578 - "dev": true, 2579 - "license": "MIT" 2580 - }, 2581 - "node_modules/@types/superagent": { 2582 - "version": "8.1.9", 2583 - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", 2584 - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", 2585 - "dev": true, 2586 - "license": "MIT", 2587 - "dependencies": { 2588 - "@types/cookiejar": "^2.1.5", 2589 - "@types/methods": "^1.1.4", 2590 - "@types/node": "*", 2591 - "form-data": "^4.0.0" 2592 - } 2593 - }, 2594 - "node_modules/@types/supertest": { 2595 - "version": "6.0.3", 2596 - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", 2597 - "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", 2598 - "dev": true, 2599 - "license": "MIT", 2600 - "dependencies": { 2601 - "@types/methods": "^1.1.4", 2602 - "@types/superagent": "^8.1.0" 2603 - } 2604 - }, 2605 - "node_modules/@types/ws": { 2606 - "version": "8.18.1", 2607 - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", 2608 - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", 2609 - "license": "MIT", 2610 - "dependencies": { 2611 - "@types/node": "*" 2612 - } 2613 - }, 2614 - "node_modules/@types/yargs": { 2615 - "version": "17.0.33", 2616 - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", 2617 - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", 2618 - "dev": true, 2619 - "license": "MIT", 2620 - "dependencies": { 2621 - "@types/yargs-parser": "*" 2622 - } 2623 - }, 2624 - "node_modules/@types/yargs-parser": { 2625 - "version": "21.0.3", 2626 - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", 2627 - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", 2628 - "dev": true, 2629 - "license": "MIT" 2630 - }, 2631 - "node_modules/@ungap/structured-clone": { 2632 - "version": "1.3.0", 2633 - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", 2634 - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", 2635 - "dev": true, 2636 - "license": "ISC" 2637 - }, 2638 - "node_modules/@unrs/resolver-binding-android-arm-eabi": { 2639 - "version": "1.9.0", 2640 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz", 2641 - "integrity": "sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==", 2642 - "cpu": [ 2643 - "arm" 2644 - ], 2645 - "dev": true, 2646 - "license": "MIT", 2647 - "optional": true, 2648 - "os": [ 2649 - "android" 2650 - ] 2651 - }, 2652 - "node_modules/@unrs/resolver-binding-android-arm64": { 2653 - "version": "1.9.0", 2654 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz", 2655 - "integrity": "sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==", 2656 - "cpu": [ 2657 - "arm64" 2658 - ], 2659 - "dev": true, 2660 - "license": "MIT", 2661 - "optional": true, 2662 - "os": [ 2663 - "android" 2664 - ] 2665 - }, 2666 - "node_modules/@unrs/resolver-binding-darwin-arm64": { 2667 - "version": "1.9.0", 2668 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz", 2669 - "integrity": "sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==", 2670 - "cpu": [ 2671 - "arm64" 2672 - ], 2673 - "dev": true, 2674 - "license": "MIT", 2675 - "optional": true, 2676 - "os": [ 2677 - "darwin" 2678 - ] 2679 - }, 2680 - "node_modules/@unrs/resolver-binding-darwin-x64": { 2681 - "version": "1.9.0", 2682 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz", 2683 - "integrity": "sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==", 2684 - "cpu": [ 2685 - "x64" 2686 - ], 2687 - "dev": true, 2688 - "license": "MIT", 2689 - "optional": true, 2690 - "os": [ 2691 - "darwin" 2692 - ] 2693 - }, 2694 - "node_modules/@unrs/resolver-binding-freebsd-x64": { 2695 - "version": "1.9.0", 2696 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz", 2697 - "integrity": "sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==", 2698 - "cpu": [ 2699 - "x64" 2700 - ], 2701 - "dev": true, 2702 - "license": "MIT", 2703 - "optional": true, 2704 - "os": [ 2705 - "freebsd" 2706 - ] 2707 - }, 2708 - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { 2709 - "version": "1.9.0", 2710 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz", 2711 - "integrity": "sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==", 2712 - "cpu": [ 2713 - "arm" 2714 - ], 2715 - "dev": true, 2716 - "license": "MIT", 2717 - "optional": true, 2718 - "os": [ 2719 - "linux" 2720 - ] 2721 - }, 2722 - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { 2723 - "version": "1.9.0", 2724 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz", 2725 - "integrity": "sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==", 2726 - "cpu": [ 2727 - "arm" 2728 - ], 2729 - "dev": true, 2730 - "license": "MIT", 2731 - "optional": true, 2732 - "os": [ 2733 - "linux" 2734 - ] 2735 - }, 2736 - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { 2737 - "version": "1.9.0", 2738 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz", 2739 - "integrity": "sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==", 2740 - "cpu": [ 2741 - "arm64" 2742 - ], 2743 - "dev": true, 2744 - "license": "MIT", 2745 - "optional": true, 2746 - "os": [ 2747 - "linux" 2748 - ] 2749 - }, 2750 - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { 2751 - "version": "1.9.0", 2752 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz", 2753 - "integrity": "sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==", 2754 - "cpu": [ 2755 - "arm64" 2756 - ], 2757 - "dev": true, 2758 - "license": "MIT", 2759 - "optional": true, 2760 - "os": [ 2761 - "linux" 2762 - ] 2763 - }, 2764 - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { 2765 - "version": "1.9.0", 2766 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz", 2767 - "integrity": "sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==", 2768 - "cpu": [ 2769 - "ppc64" 2770 - ], 2771 - "dev": true, 2772 - "license": "MIT", 2773 - "optional": true, 2774 - "os": [ 2775 - "linux" 2776 - ] 2777 - }, 2778 - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { 2779 - "version": "1.9.0", 2780 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz", 2781 - "integrity": "sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==", 2782 - "cpu": [ 2783 - "riscv64" 2784 - ], 2785 - "dev": true, 2786 - "license": "MIT", 2787 - "optional": true, 2788 - "os": [ 2789 - "linux" 2790 - ] 2791 - }, 2792 - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { 2793 - "version": "1.9.0", 2794 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz", 2795 - "integrity": "sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==", 2796 - "cpu": [ 2797 - "riscv64" 2798 - ], 2799 - "dev": true, 2800 - "license": "MIT", 2801 - "optional": true, 2802 - "os": [ 2803 - "linux" 2804 - ] 2805 - }, 2806 - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { 2807 - "version": "1.9.0", 2808 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz", 2809 - "integrity": "sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==", 2810 - "cpu": [ 2811 - "s390x" 2812 - ], 2813 - "dev": true, 2814 - "license": "MIT", 2815 - "optional": true, 2816 - "os": [ 2817 - "linux" 2818 - ] 2819 - }, 2820 - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { 2821 - "version": "1.9.0", 2822 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz", 2823 - "integrity": "sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==", 2824 - "cpu": [ 2825 - "x64" 2826 - ], 2827 - "dev": true, 2828 - "license": "MIT", 2829 - "optional": true, 2830 - "os": [ 2831 - "linux" 2832 - ] 2833 - }, 2834 - "node_modules/@unrs/resolver-binding-linux-x64-musl": { 2835 - "version": "1.9.0", 2836 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz", 2837 - "integrity": "sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==", 2838 - "cpu": [ 2839 - "x64" 2840 - ], 2841 - "dev": true, 2842 - "license": "MIT", 2843 - "optional": true, 2844 - "os": [ 2845 - "linux" 2846 - ] 2847 - }, 2848 - "node_modules/@unrs/resolver-binding-wasm32-wasi": { 2849 - "version": "1.9.0", 2850 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz", 2851 - "integrity": "sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==", 2852 - "cpu": [ 2853 - "wasm32" 2854 - ], 2855 - "dev": true, 2856 - "license": "MIT", 2857 - "optional": true, 2858 - "dependencies": { 2859 - "@napi-rs/wasm-runtime": "^0.2.11" 2860 - }, 2861 - "engines": { 2862 - "node": ">=14.0.0" 2863 - } 2864 - }, 2865 - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { 2866 - "version": "1.9.0", 2867 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz", 2868 - "integrity": "sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==", 2869 - "cpu": [ 2870 - "arm64" 2871 - ], 2872 - "dev": true, 2873 - "license": "MIT", 2874 - "optional": true, 2875 - "os": [ 2876 - "win32" 2877 - ] 2878 - }, 2879 - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { 2880 - "version": "1.9.0", 2881 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz", 2882 - "integrity": "sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==", 2883 - "cpu": [ 2884 - "ia32" 2885 - ], 2886 - "dev": true, 2887 - "license": "MIT", 2888 - "optional": true, 2889 - "os": [ 2890 - "win32" 2891 - ] 2892 - }, 2893 - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { 2894 - "version": "1.9.0", 2895 - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz", 2896 - "integrity": "sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==", 2897 - "cpu": [ 2898 - "x64" 2899 - ], 2900 - "dev": true, 2901 - "license": "MIT", 2902 - "optional": true, 2903 - "os": [ 2904 - "win32" 2905 - ] 2906 - }, 2907 - "node_modules/abort-controller": { 2908 - "version": "3.0.0", 2909 - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 2910 - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 2911 - "license": "MIT", 2912 - "dependencies": { 2913 - "event-target-shim": "^5.0.0" 2914 - }, 2915 - "engines": { 2916 - "node": ">=6.5" 2917 - } 2918 - }, 2919 - "node_modules/accepts": { 2920 - "version": "2.0.0", 2921 - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", 2922 - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 2923 - "license": "MIT", 2924 - "dependencies": { 2925 - "mime-types": "^3.0.0", 2926 - "negotiator": "^1.0.0" 2927 - }, 2928 - "engines": { 2929 - "node": ">= 0.6" 2930 - } 2931 - }, 2932 - "node_modules/ansi-escapes": { 2933 - "version": "4.3.2", 2934 - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 2935 - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 2936 - "dev": true, 2937 - "license": "MIT", 2938 - "dependencies": { 2939 - "type-fest": "^0.21.3" 2940 - }, 2941 - "engines": { 2942 - "node": ">=8" 2943 - }, 2944 - "funding": { 2945 - "url": "https://github.com/sponsors/sindresorhus" 2946 - } 2947 - }, 2948 - "node_modules/ansi-regex": { 2949 - "version": "5.0.1", 2950 - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2951 - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2952 - "dev": true, 2953 - "license": "MIT", 2954 - "engines": { 2955 - "node": ">=8" 2956 - } 2957 - }, 2958 - "node_modules/ansi-styles": { 2959 - "version": "4.3.0", 2960 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2961 - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2962 - "license": "MIT", 2963 - "dependencies": { 2964 - "color-convert": "^2.0.1" 2965 - }, 2966 - "engines": { 2967 - "node": ">=8" 2968 - }, 2969 - "funding": { 2970 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2971 - } 2972 - }, 2973 - "node_modules/anymatch": { 2974 - "version": "3.1.3", 2975 - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 2976 - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 2977 - "dev": true, 2978 - "license": "ISC", 2979 - "dependencies": { 2980 - "normalize-path": "^3.0.0", 2981 - "picomatch": "^2.0.4" 2982 - }, 2983 - "engines": { 2984 - "node": ">= 8" 2985 - } 2986 - }, 2987 - "node_modules/argparse": { 2988 - "version": "1.0.10", 2989 - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 2990 - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 2991 - "dev": true, 2992 - "license": "MIT", 2993 - "dependencies": { 2994 - "sprintf-js": "~1.0.2" 2995 - } 2996 - }, 2997 - "node_modules/array-flatten": { 2998 - "version": "1.1.1", 2999 - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 3000 - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", 3001 - "license": "MIT" 3002 - }, 3003 - "node_modules/asap": { 3004 - "version": "2.0.6", 3005 - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 3006 - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", 3007 - "dev": true, 3008 - "license": "MIT" 3009 - }, 3010 - "node_modules/async": { 3011 - "version": "3.2.6", 3012 - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", 3013 - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", 3014 - "license": "MIT" 3015 - }, 3016 - "node_modules/asynckit": { 3017 - "version": "0.4.0", 3018 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 3019 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 3020 - "dev": true, 3021 - "license": "MIT" 3022 - }, 3023 - "node_modules/atomic-sleep": { 3024 - "version": "1.0.0", 3025 - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 3026 - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 3027 - "license": "MIT", 3028 - "engines": { 3029 - "node": ">=8.0.0" 3030 - } 3031 - }, 3032 - "node_modules/await-lock": { 3033 - "version": "2.2.2", 3034 - "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz", 3035 - "integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==", 3036 - "license": "MIT" 3037 - }, 3038 - "node_modules/babel-jest": { 3039 - "version": "30.0.2", 3040 - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.2.tgz", 3041 - "integrity": "sha512-A5kqR1/EUTidM2YC2YMEUDP2+19ppgOwK0IAd9Swc3q2KqFb5f9PtRUXVeZcngu0z5mDMyZ9zH2huJZSOMLiTQ==", 3042 - "dev": true, 3043 - "license": "MIT", 3044 - "dependencies": { 3045 - "@jest/transform": "30.0.2", 3046 - "@types/babel__core": "^7.20.5", 3047 - "babel-plugin-istanbul": "^7.0.0", 3048 - "babel-preset-jest": "30.0.1", 3049 - "chalk": "^4.1.2", 3050 - "graceful-fs": "^4.2.11", 3051 - "slash": "^3.0.0" 3052 - }, 3053 - "engines": { 3054 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 3055 - }, 3056 - "peerDependencies": { 3057 - "@babel/core": "^7.11.0" 3058 - } 3059 - }, 3060 - "node_modules/babel-plugin-istanbul": { 3061 - "version": "7.0.0", 3062 - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", 3063 - "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", 3064 - "dev": true, 3065 - "license": "BSD-3-Clause", 3066 - "dependencies": { 3067 - "@babel/helper-plugin-utils": "^7.0.0", 3068 - "@istanbuljs/load-nyc-config": "^1.0.0", 3069 - "@istanbuljs/schema": "^0.1.3", 3070 - "istanbul-lib-instrument": "^6.0.2", 3071 - "test-exclude": "^6.0.0" 3072 - }, 3073 - "engines": { 3074 - "node": ">=12" 3075 - } 3076 - }, 3077 - "node_modules/babel-plugin-jest-hoist": { 3078 - "version": "30.0.1", 3079 - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", 3080 - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", 3081 - "dev": true, 3082 - "license": "MIT", 3083 - "dependencies": { 3084 - "@babel/template": "^7.27.2", 3085 - "@babel/types": "^7.27.3", 3086 - "@types/babel__core": "^7.20.5" 3087 - }, 3088 - "engines": { 3089 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 3090 - } 3091 - }, 3092 - "node_modules/babel-preset-current-node-syntax": { 3093 - "version": "1.1.0", 3094 - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", 3095 - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", 3096 - "dev": true, 3097 - "license": "MIT", 3098 - "dependencies": { 3099 - "@babel/plugin-syntax-async-generators": "^7.8.4", 3100 - "@babel/plugin-syntax-bigint": "^7.8.3", 3101 - "@babel/plugin-syntax-class-properties": "^7.12.13", 3102 - "@babel/plugin-syntax-class-static-block": "^7.14.5", 3103 - "@babel/plugin-syntax-import-attributes": "^7.24.7", 3104 - "@babel/plugin-syntax-import-meta": "^7.10.4", 3105 - "@babel/plugin-syntax-json-strings": "^7.8.3", 3106 - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", 3107 - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", 3108 - "@babel/plugin-syntax-numeric-separator": "^7.10.4", 3109 - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", 3110 - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", 3111 - "@babel/plugin-syntax-optional-chaining": "^7.8.3", 3112 - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", 3113 - "@babel/plugin-syntax-top-level-await": "^7.14.5" 3114 - }, 3115 - "peerDependencies": { 3116 - "@babel/core": "^7.0.0" 3117 - } 3118 - }, 3119 - "node_modules/babel-preset-jest": { 3120 - "version": "30.0.1", 3121 - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", 3122 - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", 3123 - "dev": true, 3124 - "license": "MIT", 3125 - "dependencies": { 3126 - "babel-plugin-jest-hoist": "30.0.1", 3127 - "babel-preset-current-node-syntax": "^1.1.0" 3128 - }, 3129 - "engines": { 3130 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 3131 - }, 3132 - "peerDependencies": { 3133 - "@babel/core": "^7.11.0" 3134 - } 3135 - }, 3136 - "node_modules/balanced-match": { 3137 - "version": "1.0.2", 3138 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 3139 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 3140 - "license": "MIT" 3141 - }, 3142 - "node_modules/base64-js": { 3143 - "version": "1.5.1", 3144 - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 3145 - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 3146 - "funding": [ 3147 - { 3148 - "type": "github", 3149 - "url": "https://github.com/sponsors/feross" 3150 - }, 3151 - { 3152 - "type": "patreon", 3153 - "url": "https://www.patreon.com/feross" 3154 - }, 3155 - { 3156 - "type": "consulting", 3157 - "url": "https://feross.org/support" 3158 - } 3159 - ], 3160 - "license": "MIT" 3161 - }, 3162 - "node_modules/better-sqlite3": { 3163 - "version": "11.10.0", 3164 - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", 3165 - "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", 3166 - "hasInstallScript": true, 3167 - "license": "MIT", 3168 - "dependencies": { 3169 - "bindings": "^1.5.0", 3170 - "prebuild-install": "^7.1.1" 3171 - } 3172 - }, 3173 - "node_modules/bindings": { 3174 - "version": "1.5.0", 3175 - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 3176 - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 3177 - "license": "MIT", 3178 - "dependencies": { 3179 - "file-uri-to-path": "1.0.0" 3180 - } 3181 - }, 3182 - "node_modules/bl": { 3183 - "version": "4.1.0", 3184 - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 3185 - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 3186 - "license": "MIT", 3187 - "dependencies": { 3188 - "buffer": "^5.5.0", 3189 - "inherits": "^2.0.4", 3190 - "readable-stream": "^3.4.0" 3191 - } 3192 - }, 3193 - "node_modules/body-parser": { 3194 - "version": "2.2.0", 3195 - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", 3196 - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", 3197 - "license": "MIT", 3198 - "dependencies": { 3199 - "bytes": "^3.1.2", 3200 - "content-type": "^1.0.5", 3201 - "debug": "^4.4.0", 3202 - "http-errors": "^2.0.0", 3203 - "iconv-lite": "^0.6.3", 3204 - "on-finished": "^2.4.1", 3205 - "qs": "^6.14.0", 3206 - "raw-body": "^3.0.0", 3207 - "type-is": "^2.0.0" 3208 - }, 3209 - "engines": { 3210 - "node": ">=18" 3211 - } 3212 - }, 3213 - "node_modules/brace-expansion": { 3214 - "version": "1.1.12", 3215 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 3216 - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 3217 - "license": "MIT", 3218 - "dependencies": { 3219 - "balanced-match": "^1.0.0", 3220 - "concat-map": "0.0.1" 3221 - } 3222 - }, 3223 - "node_modules/braces": { 3224 - "version": "3.0.3", 3225 - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 3226 - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 3227 - "dev": true, 3228 - "license": "MIT", 3229 - "dependencies": { 3230 - "fill-range": "^7.1.1" 3231 - }, 3232 - "engines": { 3233 - "node": ">=8" 3234 - } 3235 - }, 3236 - "node_modules/browserslist": { 3237 - "version": "4.25.0", 3238 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", 3239 - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", 3240 - "dev": true, 3241 - "funding": [ 3242 - { 3243 - "type": "opencollective", 3244 - "url": "https://opencollective.com/browserslist" 3245 - }, 3246 - { 3247 - "type": "tidelift", 3248 - "url": "https://tidelift.com/funding/github/npm/browserslist" 3249 - }, 3250 - { 3251 - "type": "github", 3252 - "url": "https://github.com/sponsors/ai" 3253 - } 3254 - ], 3255 - "license": "MIT", 3256 - "dependencies": { 3257 - "caniuse-lite": "^1.0.30001718", 3258 - "electron-to-chromium": "^1.5.160", 3259 - "node-releases": "^2.0.19", 3260 - "update-browserslist-db": "^1.1.3" 3261 - }, 3262 - "bin": { 3263 - "browserslist": "cli.js" 3264 - }, 3265 - "engines": { 3266 - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 3267 - } 3268 - }, 3269 - "node_modules/bs-logger": { 3270 - "version": "0.2.6", 3271 - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", 3272 - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", 3273 - "dev": true, 3274 - "license": "MIT", 3275 - "dependencies": { 3276 - "fast-json-stable-stringify": "2.x" 3277 - }, 3278 - "engines": { 3279 - "node": ">= 6" 3280 - } 3281 - }, 3282 - "node_modules/bser": { 3283 - "version": "2.1.1", 3284 - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", 3285 - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", 3286 - "dev": true, 3287 - "license": "Apache-2.0", 3288 - "dependencies": { 3289 - "node-int64": "^0.4.0" 3290 - } 3291 - }, 3292 - "node_modules/buffer": { 3293 - "version": "5.7.1", 3294 - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 3295 - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 3296 - "funding": [ 3297 - { 3298 - "type": "github", 3299 - "url": "https://github.com/sponsors/feross" 3300 - }, 3301 - { 3302 - "type": "patreon", 3303 - "url": "https://www.patreon.com/feross" 3304 - }, 3305 - { 3306 - "type": "consulting", 3307 - "url": "https://feross.org/support" 3308 - } 3309 - ], 3310 - "license": "MIT", 3311 - "dependencies": { 3312 - "base64-js": "^1.3.1", 3313 - "ieee754": "^1.1.13" 3314 - } 3315 - }, 3316 - "node_modules/buffer-from": { 3317 - "version": "1.1.2", 3318 - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 3319 - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 3320 - "dev": true, 3321 - "license": "MIT" 3322 - }, 3323 - "node_modules/bytes": { 3324 - "version": "3.1.2", 3325 - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 3326 - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 3327 - "license": "MIT", 3328 - "engines": { 3329 - "node": ">= 0.8" 3330 - } 3331 - }, 3332 - "node_modules/call-bind-apply-helpers": { 3333 - "version": "1.0.2", 3334 - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 3335 - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 3336 - "license": "MIT", 3337 - "dependencies": { 3338 - "es-errors": "^1.3.0", 3339 - "function-bind": "^1.1.2" 3340 - }, 3341 - "engines": { 3342 - "node": ">= 0.4" 3343 - } 3344 - }, 3345 - "node_modules/call-bound": { 3346 - "version": "1.0.4", 3347 - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 3348 - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 3349 - "license": "MIT", 3350 - "dependencies": { 3351 - "call-bind-apply-helpers": "^1.0.2", 3352 - "get-intrinsic": "^1.3.0" 3353 - }, 3354 - "engines": { 3355 - "node": ">= 0.4" 3356 - }, 3357 - "funding": { 3358 - "url": "https://github.com/sponsors/ljharb" 3359 - } 3360 - }, 3361 - "node_modules/callsites": { 3362 - "version": "3.1.0", 3363 - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 3364 - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 3365 - "dev": true, 3366 - "license": "MIT", 3367 - "engines": { 3368 - "node": ">=6" 3369 - } 3370 - }, 3371 - "node_modules/camelcase": { 3372 - "version": "5.3.1", 3373 - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 3374 - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 3375 - "dev": true, 3376 - "license": "MIT", 3377 - "engines": { 3378 - "node": ">=6" 3379 - } 3380 - }, 3381 - "node_modules/caniuse-lite": { 3382 - "version": "1.0.30001723", 3383 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", 3384 - "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", 3385 - "dev": true, 3386 - "funding": [ 3387 - { 3388 - "type": "opencollective", 3389 - "url": "https://opencollective.com/browserslist" 3390 - }, 3391 - { 3392 - "type": "tidelift", 3393 - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 3394 - }, 3395 - { 3396 - "type": "github", 3397 - "url": "https://github.com/sponsors/ai" 3398 - } 3399 - ], 3400 - "license": "CC-BY-4.0" 3401 - }, 3402 - "node_modules/cbor-extract": { 3403 - "version": "2.2.0", 3404 - "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz", 3405 - "integrity": "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==", 3406 - "hasInstallScript": true, 3407 - "license": "MIT", 3408 - "optional": true, 3409 - "dependencies": { 3410 - "node-gyp-build-optional-packages": "5.1.1" 3411 - }, 3412 - "bin": { 3413 - "download-cbor-prebuilds": "bin/download-prebuilds.js" 3414 - }, 3415 - "optionalDependencies": { 3416 - "@cbor-extract/cbor-extract-darwin-arm64": "2.2.0", 3417 - "@cbor-extract/cbor-extract-darwin-x64": "2.2.0", 3418 - "@cbor-extract/cbor-extract-linux-arm": "2.2.0", 3419 - "@cbor-extract/cbor-extract-linux-arm64": "2.2.0", 3420 - "@cbor-extract/cbor-extract-linux-x64": "2.2.0", 3421 - "@cbor-extract/cbor-extract-win32-x64": "2.2.0" 3422 - } 3423 - }, 3424 - "node_modules/cbor-x": { 3425 - "version": "1.6.0", 3426 - "resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.6.0.tgz", 3427 - "integrity": "sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==", 3428 - "license": "MIT", 3429 - "optionalDependencies": { 3430 - "cbor-extract": "^2.2.0" 3431 - } 3432 - }, 3433 - "node_modules/cborg": { 3434 - "version": "4.2.12", 3435 - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.2.12.tgz", 3436 - "integrity": "sha512-z126yLoavS75cdTuiKu61RC3Y3trqtDAgQRa5Q0dpHn1RmqhIedptWXKnk0lQ5yo/GmcV9myvIkzFgZ8GnqSog==", 3437 - "license": "Apache-2.0", 3438 - "bin": { 3439 - "cborg": "lib/bin.js" 3440 - } 3441 - }, 3442 - "node_modules/chalk": { 3443 - "version": "4.1.2", 3444 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 3445 - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 3446 - "license": "MIT", 3447 - "dependencies": { 3448 - "ansi-styles": "^4.1.0", 3449 - "supports-color": "^7.1.0" 3450 - }, 3451 - "engines": { 3452 - "node": ">=10" 3453 - }, 3454 - "funding": { 3455 - "url": "https://github.com/chalk/chalk?sponsor=1" 3456 - } 3457 - }, 3458 - "node_modules/char-regex": { 3459 - "version": "1.0.2", 3460 - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", 3461 - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", 3462 - "dev": true, 3463 - "license": "MIT", 3464 - "engines": { 3465 - "node": ">=10" 3466 - } 3467 - }, 3468 - "node_modules/chownr": { 3469 - "version": "1.1.4", 3470 - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 3471 - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 3472 - "license": "ISC" 3473 - }, 3474 - "node_modules/ci-info": { 3475 - "version": "4.2.0", 3476 - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", 3477 - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", 3478 - "dev": true, 3479 - "funding": [ 3480 - { 3481 - "type": "github", 3482 - "url": "https://github.com/sponsors/sibiraj-s" 3483 - } 3484 - ], 3485 - "license": "MIT", 3486 - "engines": { 3487 - "node": ">=8" 3488 - } 3489 - }, 3490 - "node_modules/cjs-module-lexer": { 3491 - "version": "2.1.0", 3492 - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", 3493 - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", 3494 - "dev": true, 3495 - "license": "MIT" 3496 - }, 3497 - "node_modules/cliui": { 3498 - "version": "8.0.1", 3499 - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 3500 - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 3501 - "dev": true, 3502 - "license": "ISC", 3503 - "dependencies": { 3504 - "string-width": "^4.2.0", 3505 - "strip-ansi": "^6.0.1", 3506 - "wrap-ansi": "^7.0.0" 3507 - }, 3508 - "engines": { 3509 - "node": ">=12" 3510 - } 3511 - }, 3512 - "node_modules/co": { 3513 - "version": "4.6.0", 3514 - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 3515 - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", 3516 - "dev": true, 3517 - "license": "MIT", 3518 - "engines": { 3519 - "iojs": ">= 1.0.0", 3520 - "node": ">= 0.12.0" 3521 - } 3522 - }, 3523 - "node_modules/collect-v8-coverage": { 3524 - "version": "1.0.2", 3525 - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", 3526 - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", 3527 - "dev": true, 3528 - "license": "MIT" 3529 - }, 3530 - "node_modules/color-convert": { 3531 - "version": "2.0.1", 3532 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3533 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3534 - "license": "MIT", 3535 - "dependencies": { 3536 - "color-name": "~1.1.4" 3537 - }, 3538 - "engines": { 3539 - "node": ">=7.0.0" 3540 - } 3541 - }, 3542 - "node_modules/color-name": { 3543 - "version": "1.1.4", 3544 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3545 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3546 - "license": "MIT" 3547 - }, 3548 - "node_modules/combined-stream": { 3549 - "version": "1.0.8", 3550 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 3551 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 3552 - "dev": true, 3553 - "license": "MIT", 3554 - "dependencies": { 3555 - "delayed-stream": "~1.0.0" 3556 - }, 3557 - "engines": { 3558 - "node": ">= 0.8" 3559 - } 3560 - }, 3561 - "node_modules/component-emitter": { 3562 - "version": "1.3.1", 3563 - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", 3564 - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", 3565 - "dev": true, 3566 - "license": "MIT", 3567 - "funding": { 3568 - "url": "https://github.com/sponsors/sindresorhus" 3569 - } 3570 - }, 3571 - "node_modules/concat-map": { 3572 - "version": "0.0.1", 3573 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 3574 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 3575 - "license": "MIT" 3576 - }, 3577 - "node_modules/concurrently": { 3578 - "version": "9.1.2", 3579 - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz", 3580 - "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==", 3581 - "dev": true, 3582 - "license": "MIT", 3583 - "dependencies": { 3584 - "chalk": "^4.1.2", 3585 - "lodash": "^4.17.21", 3586 - "rxjs": "^7.8.1", 3587 - "shell-quote": "^1.8.1", 3588 - "supports-color": "^8.1.1", 3589 - "tree-kill": "^1.2.2", 3590 - "yargs": "^17.7.2" 3591 - }, 3592 - "bin": { 3593 - "conc": "dist/bin/concurrently.js", 3594 - "concurrently": "dist/bin/concurrently.js" 3595 - }, 3596 - "engines": { 3597 - "node": ">=18" 3598 - }, 3599 - "funding": { 3600 - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" 3601 - } 3602 - }, 3603 - "node_modules/concurrently/node_modules/supports-color": { 3604 - "version": "8.1.1", 3605 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 3606 - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 3607 - "dev": true, 3608 - "license": "MIT", 3609 - "dependencies": { 3610 - "has-flag": "^4.0.0" 3611 - }, 3612 - "engines": { 3613 - "node": ">=10" 3614 - }, 3615 - "funding": { 3616 - "url": "https://github.com/chalk/supports-color?sponsor=1" 3617 - } 3618 - }, 3619 - "node_modules/content-disposition": { 3620 - "version": "1.0.0", 3621 - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", 3622 - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", 3623 - "license": "MIT", 3624 - "dependencies": { 3625 - "safe-buffer": "5.2.1" 3626 - }, 3627 - "engines": { 3628 - "node": ">= 0.6" 3629 - } 3630 - }, 3631 - "node_modules/content-type": { 3632 - "version": "1.0.5", 3633 - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 3634 - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 3635 - "license": "MIT", 3636 - "engines": { 3637 - "node": ">= 0.6" 3638 - } 3639 - }, 3640 - "node_modules/convert-source-map": { 3641 - "version": "2.0.0", 3642 - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 3643 - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 3644 - "dev": true, 3645 - "license": "MIT" 3646 - }, 3647 - "node_modules/cookie": { 3648 - "version": "0.7.2", 3649 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", 3650 - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", 3651 - "license": "MIT", 3652 - "engines": { 3653 - "node": ">= 0.6" 3654 - } 3655 - }, 3656 - "node_modules/cookie-signature": { 3657 - "version": "1.2.2", 3658 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 3659 - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 3660 - "license": "MIT", 3661 - "engines": { 3662 - "node": ">=6.6.0" 3663 - } 3664 - }, 3665 - "node_modules/cookiejar": { 3666 - "version": "2.1.4", 3667 - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", 3668 - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", 3669 - "dev": true, 3670 - "license": "MIT" 3671 - }, 3672 - "node_modules/cors": { 3673 - "version": "2.8.5", 3674 - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 3675 - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 3676 - "license": "MIT", 3677 - "dependencies": { 3678 - "object-assign": "^4", 3679 - "vary": "^1" 3680 - }, 3681 - "engines": { 3682 - "node": ">= 0.10" 3683 - } 3684 - }, 3685 - "node_modules/cross-spawn": { 3686 - "version": "7.0.6", 3687 - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 3688 - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 3689 - "dev": true, 3690 - "license": "MIT", 3691 - "dependencies": { 3692 - "path-key": "^3.1.0", 3693 - "shebang-command": "^2.0.0", 3694 - "which": "^2.0.1" 3695 - }, 3696 - "engines": { 3697 - "node": ">= 8" 3698 - } 3699 - }, 3700 - "node_modules/debug": { 3701 - "version": "4.4.1", 3702 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 3703 - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 3704 - "license": "MIT", 3705 - "dependencies": { 3706 - "ms": "^2.1.3" 3707 - }, 3708 - "engines": { 3709 - "node": ">=6.0" 3710 - }, 3711 - "peerDependenciesMeta": { 3712 - "supports-color": { 3713 - "optional": true 3714 - } 3715 - } 3716 - }, 3717 - "node_modules/decompress-response": { 3718 - "version": "6.0.0", 3719 - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 3720 - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 3721 - "license": "MIT", 3722 - "dependencies": { 3723 - "mimic-response": "^3.1.0" 3724 - }, 3725 - "engines": { 3726 - "node": ">=10" 3727 - }, 3728 - "funding": { 3729 - "url": "https://github.com/sponsors/sindresorhus" 3730 - } 3731 - }, 3732 - "node_modules/dedent": { 3733 - "version": "1.6.0", 3734 - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", 3735 - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", 3736 - "dev": true, 3737 - "license": "MIT", 3738 - "peerDependencies": { 3739 - "babel-plugin-macros": "^3.1.0" 3740 - }, 3741 - "peerDependenciesMeta": { 3742 - "babel-plugin-macros": { 3743 - "optional": true 3744 - } 3745 - } 3746 - }, 3747 - "node_modules/deep-extend": { 3748 - "version": "0.6.0", 3749 - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 3750 - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 3751 - "license": "MIT", 3752 - "engines": { 3753 - "node": ">=4.0.0" 3754 - } 3755 - }, 3756 - "node_modules/deepmerge": { 3757 - "version": "4.3.1", 3758 - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 3759 - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 3760 - "dev": true, 3761 - "license": "MIT", 3762 - "engines": { 3763 - "node": ">=0.10.0" 3764 - } 3765 - }, 3766 - "node_modules/delayed-stream": { 3767 - "version": "1.0.0", 3768 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 3769 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 3770 - "dev": true, 3771 - "license": "MIT", 3772 - "engines": { 3773 - "node": ">=0.4.0" 3774 - } 3775 - }, 3776 - "node_modules/depd": { 3777 - "version": "2.0.0", 3778 - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 3779 - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 3780 - "license": "MIT", 3781 - "engines": { 3782 - "node": ">= 0.8" 3783 - } 3784 - }, 3785 - "node_modules/destroy": { 3786 - "version": "1.2.0", 3787 - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 3788 - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 3789 - "license": "MIT", 3790 - "engines": { 3791 - "node": ">= 0.8", 3792 - "npm": "1.2.8000 || >= 1.4.16" 3793 - } 3794 - }, 3795 - "node_modules/detect-libc": { 3796 - "version": "2.0.4", 3797 - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", 3798 - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", 3799 - "license": "Apache-2.0", 3800 - "engines": { 3801 - "node": ">=8" 3802 - } 3803 - }, 3804 - "node_modules/detect-newline": { 3805 - "version": "3.1.0", 3806 - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", 3807 - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", 3808 - "dev": true, 3809 - "license": "MIT", 3810 - "engines": { 3811 - "node": ">=8" 3812 - } 3813 - }, 3814 - "node_modules/dezalgo": { 3815 - "version": "1.0.4", 3816 - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", 3817 - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", 3818 - "dev": true, 3819 - "license": "ISC", 3820 - "dependencies": { 3821 - "asap": "^2.0.0", 3822 - "wrappy": "1" 3823 - } 3824 - }, 3825 - "node_modules/dotenv": { 3826 - "version": "16.5.0", 3827 - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", 3828 - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", 3829 - "license": "BSD-2-Clause", 3830 - "engines": { 3831 - "node": ">=12" 3832 - }, 3833 - "funding": { 3834 - "url": "https://dotenvx.com" 3835 - } 3836 - }, 3837 - "node_modules/dunder-proto": { 3838 - "version": "1.0.1", 3839 - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 3840 - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 3841 - "license": "MIT", 3842 - "dependencies": { 3843 - "call-bind-apply-helpers": "^1.0.1", 3844 - "es-errors": "^1.3.0", 3845 - "gopd": "^1.2.0" 3846 - }, 3847 - "engines": { 3848 - "node": ">= 0.4" 3849 - } 3850 - }, 3851 - "node_modules/eastasianwidth": { 3852 - "version": "0.2.0", 3853 - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 3854 - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 3855 - "dev": true, 3856 - "license": "MIT" 3857 - }, 3858 - "node_modules/ee-first": { 3859 - "version": "1.1.1", 3860 - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 3861 - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 3862 - "license": "MIT" 3863 - }, 3864 - "node_modules/ejs": { 3865 - "version": "3.1.10", 3866 - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", 3867 - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", 3868 - "license": "Apache-2.0", 3869 - "dependencies": { 3870 - "jake": "^10.8.5" 3871 - }, 3872 - "bin": { 3873 - "ejs": "bin/cli.js" 3874 - }, 3875 - "engines": { 3876 - "node": ">=0.10.0" 3877 - } 3878 - }, 3879 - "node_modules/electron-to-chromium": { 3880 - "version": "1.5.171", 3881 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz", 3882 - "integrity": "sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==", 3883 - "dev": true, 3884 - "license": "ISC" 3885 - }, 3886 - "node_modules/emittery": { 3887 - "version": "0.13.1", 3888 - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", 3889 - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", 3890 - "dev": true, 3891 - "license": "MIT", 3892 - "engines": { 3893 - "node": ">=12" 3894 - }, 3895 - "funding": { 3896 - "url": "https://github.com/sindresorhus/emittery?sponsor=1" 3897 - } 3898 - }, 3899 - "node_modules/emoji-regex": { 3900 - "version": "8.0.0", 3901 - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3902 - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3903 - "dev": true, 3904 - "license": "MIT" 3905 - }, 3906 - "node_modules/encodeurl": { 3907 - "version": "2.0.0", 3908 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 3909 - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 3910 - "license": "MIT", 3911 - "engines": { 3912 - "node": ">= 0.8" 3913 - } 3914 - }, 3915 - "node_modules/end-of-stream": { 3916 - "version": "1.4.5", 3917 - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", 3918 - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", 3919 - "license": "MIT", 3920 - "dependencies": { 3921 - "once": "^1.4.0" 3922 - } 3923 - }, 3924 - "node_modules/error-ex": { 3925 - "version": "1.3.2", 3926 - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 3927 - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 3928 - "dev": true, 3929 - "license": "MIT", 3930 - "dependencies": { 3931 - "is-arrayish": "^0.2.1" 3932 - } 3933 - }, 3934 - "node_modules/es-define-property": { 3935 - "version": "1.0.1", 3936 - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 3937 - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 3938 - "license": "MIT", 3939 - "engines": { 3940 - "node": ">= 0.4" 3941 - } 3942 - }, 3943 - "node_modules/es-errors": { 3944 - "version": "1.3.0", 3945 - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 3946 - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 3947 - "license": "MIT", 3948 - "engines": { 3949 - "node": ">= 0.4" 3950 - } 3951 - }, 3952 - "node_modules/es-object-atoms": { 3953 - "version": "1.1.1", 3954 - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 3955 - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 3956 - "license": "MIT", 3957 - "dependencies": { 3958 - "es-errors": "^1.3.0" 3959 - }, 3960 - "engines": { 3961 - "node": ">= 0.4" 3962 - } 3963 - }, 3964 - "node_modules/es-set-tostringtag": { 3965 - "version": "2.1.0", 3966 - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 3967 - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 3968 - "dev": true, 3969 - "license": "MIT", 3970 - "dependencies": { 3971 - "es-errors": "^1.3.0", 3972 - "get-intrinsic": "^1.2.6", 3973 - "has-tostringtag": "^1.0.2", 3974 - "hasown": "^2.0.2" 3975 - }, 3976 - "engines": { 3977 - "node": ">= 0.4" 3978 - } 3979 - }, 3980 - "node_modules/esbuild": { 3981 - "version": "0.25.5", 3982 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", 3983 - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", 3984 - "hasInstallScript": true, 3985 - "license": "MIT", 3986 - "bin": { 3987 - "esbuild": "bin/esbuild" 3988 - }, 3989 - "engines": { 3990 - "node": ">=18" 3991 - }, 3992 - "optionalDependencies": { 3993 - "@esbuild/aix-ppc64": "0.25.5", 3994 - "@esbuild/android-arm": "0.25.5", 3995 - "@esbuild/android-arm64": "0.25.5", 3996 - "@esbuild/android-x64": "0.25.5", 3997 - "@esbuild/darwin-arm64": "0.25.5", 3998 - "@esbuild/darwin-x64": "0.25.5", 3999 - "@esbuild/freebsd-arm64": "0.25.5", 4000 - "@esbuild/freebsd-x64": "0.25.5", 4001 - "@esbuild/linux-arm": "0.25.5", 4002 - "@esbuild/linux-arm64": "0.25.5", 4003 - "@esbuild/linux-ia32": "0.25.5", 4004 - "@esbuild/linux-loong64": "0.25.5", 4005 - "@esbuild/linux-mips64el": "0.25.5", 4006 - "@esbuild/linux-ppc64": "0.25.5", 4007 - "@esbuild/linux-riscv64": "0.25.5", 4008 - "@esbuild/linux-s390x": "0.25.5", 4009 - "@esbuild/linux-x64": "0.25.5", 4010 - "@esbuild/netbsd-arm64": "0.25.5", 4011 - "@esbuild/netbsd-x64": "0.25.5", 4012 - "@esbuild/openbsd-arm64": "0.25.5", 4013 - "@esbuild/openbsd-x64": "0.25.5", 4014 - "@esbuild/sunos-x64": "0.25.5", 4015 - "@esbuild/win32-arm64": "0.25.5", 4016 - "@esbuild/win32-ia32": "0.25.5", 4017 - "@esbuild/win32-x64": "0.25.5" 4018 - } 4019 - }, 4020 - "node_modules/escalade": { 4021 - "version": "3.2.0", 4022 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 4023 - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 4024 - "dev": true, 4025 - "license": "MIT", 4026 - "engines": { 4027 - "node": ">=6" 4028 - } 4029 - }, 4030 - "node_modules/escape-html": { 4031 - "version": "1.0.3", 4032 - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 4033 - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 4034 - "license": "MIT" 4035 - }, 4036 - "node_modules/escape-string-regexp": { 4037 - "version": "2.0.0", 4038 - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 4039 - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 4040 - "dev": true, 4041 - "license": "MIT", 4042 - "engines": { 4043 - "node": ">=8" 4044 - } 4045 - }, 4046 - "node_modules/esprima": { 4047 - "version": "4.0.1", 4048 - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 4049 - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 4050 - "dev": true, 4051 - "license": "BSD-2-Clause", 4052 - "bin": { 4053 - "esparse": "bin/esparse.js", 4054 - "esvalidate": "bin/esvalidate.js" 4055 - }, 4056 - "engines": { 4057 - "node": ">=4" 4058 - } 4059 - }, 4060 - "node_modules/etag": { 4061 - "version": "1.8.1", 4062 - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 4063 - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 4064 - "license": "MIT", 4065 - "engines": { 4066 - "node": ">= 0.6" 4067 - } 4068 - }, 4069 - "node_modules/event-target-shim": { 4070 - "version": "5.0.1", 4071 - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 4072 - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 4073 - "license": "MIT", 4074 - "engines": { 4075 - "node": ">=6" 4076 - } 4077 - }, 4078 - "node_modules/eventemitter3": { 4079 - "version": "4.0.7", 4080 - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 4081 - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", 4082 - "license": "MIT" 4083 - }, 4084 - "node_modules/events": { 4085 - "version": "3.3.0", 4086 - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 4087 - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 4088 - "license": "MIT", 4089 - "engines": { 4090 - "node": ">=0.8.x" 4091 - } 4092 - }, 4093 - "node_modules/execa": { 4094 - "version": "5.1.1", 4095 - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 4096 - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 4097 - "dev": true, 4098 - "license": "MIT", 4099 - "dependencies": { 4100 - "cross-spawn": "^7.0.3", 4101 - "get-stream": "^6.0.0", 4102 - "human-signals": "^2.1.0", 4103 - "is-stream": "^2.0.0", 4104 - "merge-stream": "^2.0.0", 4105 - "npm-run-path": "^4.0.1", 4106 - "onetime": "^5.1.2", 4107 - "signal-exit": "^3.0.3", 4108 - "strip-final-newline": "^2.0.0" 4109 - }, 4110 - "engines": { 4111 - "node": ">=10" 4112 - }, 4113 - "funding": { 4114 - "url": "https://github.com/sindresorhus/execa?sponsor=1" 4115 - } 4116 - }, 4117 - "node_modules/execa/node_modules/signal-exit": { 4118 - "version": "3.0.7", 4119 - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 4120 - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 4121 - "dev": true, 4122 - "license": "ISC" 4123 - }, 4124 - "node_modules/exit-x": { 4125 - "version": "0.2.2", 4126 - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", 4127 - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", 4128 - "dev": true, 4129 - "license": "MIT", 4130 - "engines": { 4131 - "node": ">= 0.8.0" 4132 - } 4133 - }, 4134 - "node_modules/expand-template": { 4135 - "version": "2.0.3", 4136 - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 4137 - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 4138 - "license": "(MIT OR WTFPL)", 4139 - "engines": { 4140 - "node": ">=6" 4141 - } 4142 - }, 4143 - "node_modules/expect": { 4144 - "version": "30.0.2", 4145 - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.2.tgz", 4146 - "integrity": "sha512-YN9Mgv2mtTWXVmifQq3QT+ixCL/uLuLJw+fdp8MOjKqu8K3XQh3o5aulMM1tn+O2DdrWNxLZTeJsCY/VofUA0A==", 4147 - "dev": true, 4148 - "license": "MIT", 4149 - "dependencies": { 4150 - "@jest/expect-utils": "30.0.2", 4151 - "@jest/get-type": "30.0.1", 4152 - "jest-matcher-utils": "30.0.2", 4153 - "jest-message-util": "30.0.2", 4154 - "jest-mock": "30.0.2", 4155 - "jest-util": "30.0.2" 4156 - }, 4157 - "engines": { 4158 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 4159 - } 4160 - }, 4161 - "node_modules/express": { 4162 - "version": "5.1.0", 4163 - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", 4164 - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", 4165 - "license": "MIT", 4166 - "dependencies": { 4167 - "accepts": "^2.0.0", 4168 - "body-parser": "^2.2.0", 4169 - "content-disposition": "^1.0.0", 4170 - "content-type": "^1.0.5", 4171 - "cookie": "^0.7.1", 4172 - "cookie-signature": "^1.2.1", 4173 - "debug": "^4.4.0", 4174 - "encodeurl": "^2.0.0", 4175 - "escape-html": "^1.0.3", 4176 - "etag": "^1.8.1", 4177 - "finalhandler": "^2.1.0", 4178 - "fresh": "^2.0.0", 4179 - "http-errors": "^2.0.0", 4180 - "merge-descriptors": "^2.0.0", 4181 - "mime-types": "^3.0.0", 4182 - "on-finished": "^2.4.1", 4183 - "once": "^1.4.0", 4184 - "parseurl": "^1.3.3", 4185 - "proxy-addr": "^2.0.7", 4186 - "qs": "^6.14.0", 4187 - "range-parser": "^1.2.1", 4188 - "router": "^2.2.0", 4189 - "send": "^1.1.0", 4190 - "serve-static": "^2.2.0", 4191 - "statuses": "^2.0.1", 4192 - "type-is": "^2.0.1", 4193 - "vary": "^1.1.2" 4194 - }, 4195 - "engines": { 4196 - "node": ">= 18" 4197 - }, 4198 - "funding": { 4199 - "type": "opencollective", 4200 - "url": "https://opencollective.com/express" 4201 - } 4202 - }, 4203 - "node_modules/express-ejs-layouts": { 4204 - "version": "2.5.1", 4205 - "resolved": "https://registry.npmjs.org/express-ejs-layouts/-/express-ejs-layouts-2.5.1.tgz", 4206 - "integrity": "sha512-IXROv9n3xKga7FowT06n1Qn927JR8ZWDn5Dc9CJQoiiaaDqbhW5PDmWShzbpAa2wjWT1vJqaIM1S6vJwwX11gA==" 4207 - }, 4208 - "node_modules/express-session": { 4209 - "version": "1.18.1", 4210 - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", 4211 - "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==", 4212 - "license": "MIT", 4213 - "dependencies": { 4214 - "cookie": "0.7.2", 4215 - "cookie-signature": "1.0.7", 4216 - "debug": "2.6.9", 4217 - "depd": "~2.0.0", 4218 - "on-headers": "~1.0.2", 4219 - "parseurl": "~1.3.3", 4220 - "safe-buffer": "5.2.1", 4221 - "uid-safe": "~2.1.5" 4222 - }, 4223 - "engines": { 4224 - "node": ">= 0.8.0" 4225 - } 4226 - }, 4227 - "node_modules/express-session/node_modules/cookie-signature": { 4228 - "version": "1.0.7", 4229 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", 4230 - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", 4231 - "license": "MIT" 4232 - }, 4233 - "node_modules/express-session/node_modules/debug": { 4234 - "version": "2.6.9", 4235 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 4236 - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 4237 - "license": "MIT", 4238 - "dependencies": { 4239 - "ms": "2.0.0" 4240 - } 4241 - }, 4242 - "node_modules/express-session/node_modules/ms": { 4243 - "version": "2.0.0", 4244 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 4245 - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 4246 - "license": "MIT" 4247 - }, 4248 - "node_modules/fast-json-stable-stringify": { 4249 - "version": "2.1.0", 4250 - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 4251 - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 4252 - "dev": true, 4253 - "license": "MIT" 4254 - }, 4255 - "node_modules/fast-redact": { 4256 - "version": "3.5.0", 4257 - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", 4258 - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", 4259 - "license": "MIT", 4260 - "engines": { 4261 - "node": ">=6" 4262 - } 4263 - }, 4264 - "node_modules/fast-safe-stringify": { 4265 - "version": "2.1.1", 4266 - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 4267 - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", 4268 - "dev": true, 4269 - "license": "MIT" 4270 - }, 4271 - "node_modules/fb-watchman": { 4272 - "version": "2.0.2", 4273 - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", 4274 - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", 4275 - "dev": true, 4276 - "license": "Apache-2.0", 4277 - "dependencies": { 4278 - "bser": "2.1.1" 4279 - } 4280 - }, 4281 - "node_modules/file-uri-to-path": { 4282 - "version": "1.0.0", 4283 - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 4284 - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", 4285 - "license": "MIT" 4286 - }, 4287 - "node_modules/filelist": { 4288 - "version": "1.0.4", 4289 - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 4290 - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 4291 - "license": "Apache-2.0", 4292 - "dependencies": { 4293 - "minimatch": "^5.0.1" 4294 - } 4295 - }, 4296 - "node_modules/filelist/node_modules/brace-expansion": { 4297 - "version": "2.0.2", 4298 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 4299 - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 4300 - "license": "MIT", 4301 - "dependencies": { 4302 - "balanced-match": "^1.0.0" 4303 - } 4304 - }, 4305 - "node_modules/filelist/node_modules/minimatch": { 4306 - "version": "5.1.6", 4307 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 4308 - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 4309 - "license": "ISC", 4310 - "dependencies": { 4311 - "brace-expansion": "^2.0.1" 4312 - }, 4313 - "engines": { 4314 - "node": ">=10" 4315 - } 4316 - }, 4317 - "node_modules/fill-range": { 4318 - "version": "7.1.1", 4319 - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 4320 - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 4321 - "dev": true, 4322 - "license": "MIT", 4323 - "dependencies": { 4324 - "to-regex-range": "^5.0.1" 4325 - }, 4326 - "engines": { 4327 - "node": ">=8" 4328 - } 4329 - }, 4330 - "node_modules/finalhandler": { 4331 - "version": "2.1.0", 4332 - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", 4333 - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", 4334 - "license": "MIT", 4335 - "dependencies": { 4336 - "debug": "^4.4.0", 4337 - "encodeurl": "^2.0.0", 4338 - "escape-html": "^1.0.3", 4339 - "on-finished": "^2.4.1", 4340 - "parseurl": "^1.3.3", 4341 - "statuses": "^2.0.1" 4342 - }, 4343 - "engines": { 4344 - "node": ">= 0.8" 4345 - } 4346 - }, 4347 - "node_modules/find-up": { 4348 - "version": "4.1.0", 4349 - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 4350 - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 4351 - "dev": true, 4352 - "license": "MIT", 4353 - "dependencies": { 4354 - "locate-path": "^5.0.0", 4355 - "path-exists": "^4.0.0" 4356 - }, 4357 - "engines": { 4358 - "node": ">=8" 4359 - } 4360 - }, 4361 - "node_modules/foreground-child": { 4362 - "version": "3.3.1", 4363 - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", 4364 - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", 4365 - "dev": true, 4366 - "license": "ISC", 4367 - "dependencies": { 4368 - "cross-spawn": "^7.0.6", 4369 - "signal-exit": "^4.0.1" 4370 - }, 4371 - "engines": { 4372 - "node": ">=14" 4373 - }, 4374 - "funding": { 4375 - "url": "https://github.com/sponsors/isaacs" 4376 - } 4377 - }, 4378 - "node_modules/form-data": { 4379 - "version": "4.0.3", 4380 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", 4381 - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", 4382 - "dev": true, 4383 - "license": "MIT", 4384 - "dependencies": { 4385 - "asynckit": "^0.4.0", 4386 - "combined-stream": "^1.0.8", 4387 - "es-set-tostringtag": "^2.1.0", 4388 - "hasown": "^2.0.2", 4389 - "mime-types": "^2.1.12" 4390 - }, 4391 - "engines": { 4392 - "node": ">= 6" 4393 - } 4394 - }, 4395 - "node_modules/form-data/node_modules/mime-db": { 4396 - "version": "1.52.0", 4397 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 4398 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 4399 - "dev": true, 4400 - "license": "MIT", 4401 - "engines": { 4402 - "node": ">= 0.6" 4403 - } 4404 - }, 4405 - "node_modules/form-data/node_modules/mime-types": { 4406 - "version": "2.1.35", 4407 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 4408 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 4409 - "dev": true, 4410 - "license": "MIT", 4411 - "dependencies": { 4412 - "mime-db": "1.52.0" 4413 - }, 4414 - "engines": { 4415 - "node": ">= 0.6" 4416 - } 4417 - }, 4418 - "node_modules/formidable": { 4419 - "version": "3.5.4", 4420 - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", 4421 - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", 4422 - "dev": true, 4423 - "license": "MIT", 4424 - "dependencies": { 4425 - "@paralleldrive/cuid2": "^2.2.2", 4426 - "dezalgo": "^1.0.4", 4427 - "once": "^1.4.0" 4428 - }, 4429 - "engines": { 4430 - "node": ">=14.0.0" 4431 - }, 4432 - "funding": { 4433 - "url": "https://ko-fi.com/tunnckoCore/commissions" 4434 - } 4435 - }, 4436 - "node_modules/forwarded": { 4437 - "version": "0.2.0", 4438 - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 4439 - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 4440 - "license": "MIT", 4441 - "engines": { 4442 - "node": ">= 0.6" 4443 - } 4444 - }, 4445 - "node_modules/fresh": { 4446 - "version": "2.0.0", 4447 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 4448 - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 4449 - "license": "MIT", 4450 - "engines": { 4451 - "node": ">= 0.8" 4452 - } 4453 - }, 4454 - "node_modules/fs-constants": { 4455 - "version": "1.0.0", 4456 - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 4457 - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 4458 - "license": "MIT" 4459 - }, 4460 - "node_modules/fs.realpath": { 4461 - "version": "1.0.0", 4462 - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 4463 - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 4464 - "dev": true, 4465 - "license": "ISC" 4466 - }, 4467 - "node_modules/fsevents": { 4468 - "version": "2.3.3", 4469 - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 4470 - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 4471 - "hasInstallScript": true, 4472 - "license": "MIT", 4473 - "optional": true, 4474 - "os": [ 4475 - "darwin" 4476 - ], 4477 - "engines": { 4478 - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 4479 - } 4480 - }, 4481 - "node_modules/function-bind": { 4482 - "version": "1.1.2", 4483 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 4484 - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 4485 - "license": "MIT", 4486 - "funding": { 4487 - "url": "https://github.com/sponsors/ljharb" 4488 - } 4489 - }, 4490 - "node_modules/gensync": { 4491 - "version": "1.0.0-beta.2", 4492 - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 4493 - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 4494 - "dev": true, 4495 - "license": "MIT", 4496 - "engines": { 4497 - "node": ">=6.9.0" 4498 - } 4499 - }, 4500 - "node_modules/get-caller-file": { 4501 - "version": "2.0.5", 4502 - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 4503 - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 4504 - "dev": true, 4505 - "license": "ISC", 4506 - "engines": { 4507 - "node": "6.* || 8.* || >= 10.*" 4508 - } 4509 - }, 4510 - "node_modules/get-intrinsic": { 4511 - "version": "1.3.0", 4512 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 4513 - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 4514 - "license": "MIT", 4515 - "dependencies": { 4516 - "call-bind-apply-helpers": "^1.0.2", 4517 - "es-define-property": "^1.0.1", 4518 - "es-errors": "^1.3.0", 4519 - "es-object-atoms": "^1.1.1", 4520 - "function-bind": "^1.1.2", 4521 - "get-proto": "^1.0.1", 4522 - "gopd": "^1.2.0", 4523 - "has-symbols": "^1.1.0", 4524 - "hasown": "^2.0.2", 4525 - "math-intrinsics": "^1.1.0" 4526 - }, 4527 - "engines": { 4528 - "node": ">= 0.4" 4529 - }, 4530 - "funding": { 4531 - "url": "https://github.com/sponsors/ljharb" 4532 - } 4533 - }, 4534 - "node_modules/get-package-type": { 4535 - "version": "0.1.0", 4536 - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", 4537 - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", 4538 - "dev": true, 4539 - "license": "MIT", 4540 - "engines": { 4541 - "node": ">=8.0.0" 4542 - } 4543 - }, 4544 - "node_modules/get-proto": { 4545 - "version": "1.0.1", 4546 - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 4547 - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 4548 - "license": "MIT", 4549 - "dependencies": { 4550 - "dunder-proto": "^1.0.1", 4551 - "es-object-atoms": "^1.0.0" 4552 - }, 4553 - "engines": { 4554 - "node": ">= 0.4" 4555 - } 4556 - }, 4557 - "node_modules/get-stream": { 4558 - "version": "6.0.1", 4559 - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 4560 - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 4561 - "dev": true, 4562 - "license": "MIT", 4563 - "engines": { 4564 - "node": ">=10" 4565 - }, 4566 - "funding": { 4567 - "url": "https://github.com/sponsors/sindresorhus" 4568 - } 4569 - }, 4570 - "node_modules/get-tsconfig": { 4571 - "version": "4.10.1", 4572 - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", 4573 - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", 4574 - "license": "MIT", 4575 - "dependencies": { 4576 - "resolve-pkg-maps": "^1.0.0" 4577 - }, 4578 - "funding": { 4579 - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 4580 - } 4581 - }, 4582 - "node_modules/github-from-package": { 4583 - "version": "0.0.0", 4584 - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 4585 - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", 4586 - "license": "MIT" 4587 - }, 4588 - "node_modules/glob": { 4589 - "version": "10.4.5", 4590 - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 4591 - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 4592 - "dev": true, 4593 - "license": "ISC", 4594 - "dependencies": { 4595 - "foreground-child": "^3.1.0", 4596 - "jackspeak": "^3.1.2", 4597 - "minimatch": "^9.0.4", 4598 - "minipass": "^7.1.2", 4599 - "package-json-from-dist": "^1.0.0", 4600 - "path-scurry": "^1.11.1" 4601 - }, 4602 - "bin": { 4603 - "glob": "dist/esm/bin.mjs" 4604 - }, 4605 - "funding": { 4606 - "url": "https://github.com/sponsors/isaacs" 4607 - } 4608 - }, 4609 - "node_modules/glob/node_modules/brace-expansion": { 4610 - "version": "2.0.2", 4611 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 4612 - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 4613 - "dev": true, 4614 - "license": "MIT", 4615 - "dependencies": { 4616 - "balanced-match": "^1.0.0" 4617 - } 4618 - }, 4619 - "node_modules/glob/node_modules/minimatch": { 4620 - "version": "9.0.5", 4621 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 4622 - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 4623 - "dev": true, 4624 - "license": "ISC", 4625 - "dependencies": { 4626 - "brace-expansion": "^2.0.1" 4627 - }, 4628 - "engines": { 4629 - "node": ">=16 || 14 >=14.17" 4630 - }, 4631 - "funding": { 4632 - "url": "https://github.com/sponsors/isaacs" 4633 - } 4634 - }, 4635 - "node_modules/globals": { 4636 - "version": "11.12.0", 4637 - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 4638 - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 4639 - "dev": true, 4640 - "license": "MIT", 4641 - "engines": { 4642 - "node": ">=4" 4643 - } 4644 - }, 4645 - "node_modules/gopd": { 4646 - "version": "1.2.0", 4647 - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 4648 - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 4649 - "license": "MIT", 4650 - "engines": { 4651 - "node": ">= 0.4" 4652 - }, 4653 - "funding": { 4654 - "url": "https://github.com/sponsors/ljharb" 4655 - } 4656 - }, 4657 - "node_modules/graceful-fs": { 4658 - "version": "4.2.11", 4659 - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 4660 - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 4661 - "dev": true, 4662 - "license": "ISC" 4663 - }, 4664 - "node_modules/graphemer": { 4665 - "version": "1.4.0", 4666 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 4667 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 4668 - "license": "MIT" 4669 - }, 4670 - "node_modules/has-flag": { 4671 - "version": "4.0.0", 4672 - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 4673 - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 4674 - "license": "MIT", 4675 - "engines": { 4676 - "node": ">=8" 4677 - } 4678 - }, 4679 - "node_modules/has-symbols": { 4680 - "version": "1.1.0", 4681 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 4682 - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 4683 - "license": "MIT", 4684 - "engines": { 4685 - "node": ">= 0.4" 4686 - }, 4687 - "funding": { 4688 - "url": "https://github.com/sponsors/ljharb" 4689 - } 4690 - }, 4691 - "node_modules/has-tostringtag": { 4692 - "version": "1.0.2", 4693 - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 4694 - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 4695 - "dev": true, 4696 - "license": "MIT", 4697 - "dependencies": { 4698 - "has-symbols": "^1.0.3" 4699 - }, 4700 - "engines": { 4701 - "node": ">= 0.4" 4702 - }, 4703 - "funding": { 4704 - "url": "https://github.com/sponsors/ljharb" 4705 - } 4706 - }, 4707 - "node_modules/hasown": { 4708 - "version": "2.0.2", 4709 - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 4710 - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 4711 - "license": "MIT", 4712 - "dependencies": { 4713 - "function-bind": "^1.1.2" 4714 - }, 4715 - "engines": { 4716 - "node": ">= 0.4" 4717 - } 4718 - }, 4719 - "node_modules/html-escaper": { 4720 - "version": "2.0.2", 4721 - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 4722 - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 4723 - "dev": true, 4724 - "license": "MIT" 4725 - }, 4726 - "node_modules/http-errors": { 4727 - "version": "2.0.0", 4728 - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 4729 - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 4730 - "license": "MIT", 4731 - "dependencies": { 4732 - "depd": "2.0.0", 4733 - "inherits": "2.0.4", 4734 - "setprototypeof": "1.2.0", 4735 - "statuses": "2.0.1", 4736 - "toidentifier": "1.0.1" 4737 - }, 4738 - "engines": { 4739 - "node": ">= 0.8" 4740 - } 4741 - }, 4742 - "node_modules/http-errors/node_modules/statuses": { 4743 - "version": "2.0.1", 4744 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 4745 - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 4746 - "license": "MIT", 4747 - "engines": { 4748 - "node": ">= 0.8" 4749 - } 4750 - }, 4751 - "node_modules/human-signals": { 4752 - "version": "2.1.0", 4753 - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 4754 - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 4755 - "dev": true, 4756 - "license": "Apache-2.0", 4757 - "engines": { 4758 - "node": ">=10.17.0" 4759 - } 4760 - }, 4761 - "node_modules/iconv-lite": { 4762 - "version": "0.6.3", 4763 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 4764 - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 4765 - "license": "MIT", 4766 - "dependencies": { 4767 - "safer-buffer": ">= 2.1.2 < 3.0.0" 4768 - }, 4769 - "engines": { 4770 - "node": ">=0.10.0" 4771 - } 4772 - }, 4773 - "node_modules/ieee754": { 4774 - "version": "1.2.1", 4775 - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 4776 - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 4777 - "funding": [ 4778 - { 4779 - "type": "github", 4780 - "url": "https://github.com/sponsors/feross" 4781 - }, 4782 - { 4783 - "type": "patreon", 4784 - "url": "https://www.patreon.com/feross" 4785 - }, 4786 - { 4787 - "type": "consulting", 4788 - "url": "https://feross.org/support" 4789 - } 4790 - ], 4791 - "license": "BSD-3-Clause" 4792 - }, 4793 - "node_modules/import-local": { 4794 - "version": "3.2.0", 4795 - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", 4796 - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", 4797 - "dev": true, 4798 - "license": "MIT", 4799 - "dependencies": { 4800 - "pkg-dir": "^4.2.0", 4801 - "resolve-cwd": "^3.0.0" 4802 - }, 4803 - "bin": { 4804 - "import-local-fixture": "fixtures/cli.js" 4805 - }, 4806 - "engines": { 4807 - "node": ">=8" 4808 - }, 4809 - "funding": { 4810 - "url": "https://github.com/sponsors/sindresorhus" 4811 - } 4812 - }, 4813 - "node_modules/imurmurhash": { 4814 - "version": "0.1.4", 4815 - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 4816 - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 4817 - "dev": true, 4818 - "license": "MIT", 4819 - "engines": { 4820 - "node": ">=0.8.19" 4821 - } 4822 - }, 4823 - "node_modules/inflight": { 4824 - "version": "1.0.6", 4825 - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 4826 - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 4827 - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 4828 - "dev": true, 4829 - "license": "ISC", 4830 - "dependencies": { 4831 - "once": "^1.3.0", 4832 - "wrappy": "1" 4833 - } 4834 - }, 4835 - "node_modules/inherits": { 4836 - "version": "2.0.4", 4837 - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 4838 - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 4839 - "license": "ISC" 4840 - }, 4841 - "node_modules/ini": { 4842 - "version": "1.3.8", 4843 - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 4844 - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 4845 - "license": "ISC" 4846 - }, 4847 - "node_modules/ipaddr.js": { 4848 - "version": "1.9.1", 4849 - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 4850 - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 4851 - "license": "MIT", 4852 - "engines": { 4853 - "node": ">= 0.10" 4854 - } 4855 - }, 4856 - "node_modules/is-arrayish": { 4857 - "version": "0.2.1", 4858 - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 4859 - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 4860 - "dev": true, 4861 - "license": "MIT" 4862 - }, 4863 - "node_modules/is-fullwidth-code-point": { 4864 - "version": "3.0.0", 4865 - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 4866 - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 4867 - "dev": true, 4868 - "license": "MIT", 4869 - "engines": { 4870 - "node": ">=8" 4871 - } 4872 - }, 4873 - "node_modules/is-generator-fn": { 4874 - "version": "2.1.0", 4875 - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", 4876 - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", 4877 - "dev": true, 4878 - "license": "MIT", 4879 - "engines": { 4880 - "node": ">=6" 4881 - } 4882 - }, 4883 - "node_modules/is-number": { 4884 - "version": "7.0.0", 4885 - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 4886 - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 4887 - "dev": true, 4888 - "license": "MIT", 4889 - "engines": { 4890 - "node": ">=0.12.0" 4891 - } 4892 - }, 4893 - "node_modules/is-promise": { 4894 - "version": "4.0.0", 4895 - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 4896 - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 4897 - "license": "MIT" 4898 - }, 4899 - "node_modules/is-stream": { 4900 - "version": "2.0.1", 4901 - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 4902 - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 4903 - "dev": true, 4904 - "license": "MIT", 4905 - "engines": { 4906 - "node": ">=8" 4907 - }, 4908 - "funding": { 4909 - "url": "https://github.com/sponsors/sindresorhus" 4910 - } 4911 - }, 4912 - "node_modules/isexe": { 4913 - "version": "2.0.0", 4914 - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 4915 - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 4916 - "dev": true, 4917 - "license": "ISC" 4918 - }, 4919 - "node_modules/iso-datestring-validator": { 4920 - "version": "2.2.2", 4921 - "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 4922 - "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 4923 - "license": "MIT" 4924 - }, 4925 - "node_modules/istanbul-lib-coverage": { 4926 - "version": "3.2.2", 4927 - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", 4928 - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", 4929 - "dev": true, 4930 - "license": "BSD-3-Clause", 4931 - "engines": { 4932 - "node": ">=8" 4933 - } 4934 - }, 4935 - "node_modules/istanbul-lib-instrument": { 4936 - "version": "6.0.3", 4937 - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", 4938 - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", 4939 - "dev": true, 4940 - "license": "BSD-3-Clause", 4941 - "dependencies": { 4942 - "@babel/core": "^7.23.9", 4943 - "@babel/parser": "^7.23.9", 4944 - "@istanbuljs/schema": "^0.1.3", 4945 - "istanbul-lib-coverage": "^3.2.0", 4946 - "semver": "^7.5.4" 4947 - }, 4948 - "engines": { 4949 - "node": ">=10" 4950 - } 4951 - }, 4952 - "node_modules/istanbul-lib-report": { 4953 - "version": "3.0.1", 4954 - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 4955 - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 4956 - "dev": true, 4957 - "license": "BSD-3-Clause", 4958 - "dependencies": { 4959 - "istanbul-lib-coverage": "^3.0.0", 4960 - "make-dir": "^4.0.0", 4961 - "supports-color": "^7.1.0" 4962 - }, 4963 - "engines": { 4964 - "node": ">=10" 4965 - } 4966 - }, 4967 - "node_modules/istanbul-lib-source-maps": { 4968 - "version": "5.0.6", 4969 - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", 4970 - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", 4971 - "dev": true, 4972 - "license": "BSD-3-Clause", 4973 - "dependencies": { 4974 - "@jridgewell/trace-mapping": "^0.3.23", 4975 - "debug": "^4.1.1", 4976 - "istanbul-lib-coverage": "^3.0.0" 4977 - }, 4978 - "engines": { 4979 - "node": ">=10" 4980 - } 4981 - }, 4982 - "node_modules/istanbul-reports": { 4983 - "version": "3.1.7", 4984 - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", 4985 - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", 4986 - "dev": true, 4987 - "license": "BSD-3-Clause", 4988 - "dependencies": { 4989 - "html-escaper": "^2.0.0", 4990 - "istanbul-lib-report": "^3.0.0" 4991 - }, 4992 - "engines": { 4993 - "node": ">=8" 4994 - } 4995 - }, 4996 - "node_modules/jackspeak": { 4997 - "version": "3.4.3", 4998 - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 4999 - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 5000 - "dev": true, 5001 - "license": "BlueOak-1.0.0", 5002 - "dependencies": { 5003 - "@isaacs/cliui": "^8.0.2" 5004 - }, 5005 - "funding": { 5006 - "url": "https://github.com/sponsors/isaacs" 5007 - }, 5008 - "optionalDependencies": { 5009 - "@pkgjs/parseargs": "^0.11.0" 5010 - } 5011 - }, 5012 - "node_modules/jake": { 5013 - "version": "10.9.2", 5014 - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", 5015 - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", 5016 - "license": "Apache-2.0", 5017 - "dependencies": { 5018 - "async": "^3.2.3", 5019 - "chalk": "^4.0.2", 5020 - "filelist": "^1.0.4", 5021 - "minimatch": "^3.1.2" 5022 - }, 5023 - "bin": { 5024 - "jake": "bin/cli.js" 5025 - }, 5026 - "engines": { 5027 - "node": ">=10" 5028 - } 5029 - }, 5030 - "node_modules/jest": { 5031 - "version": "30.0.2", 5032 - "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.2.tgz", 5033 - "integrity": "sha512-HlSEiHRcmTuGwNyeawLTEzpQUMFn+f741FfoNg7RXG2h0WLJKozVCpcQLT0GW17H6kNCqRwGf+Ii/I1YVNvEGQ==", 5034 - "dev": true, 5035 - "license": "MIT", 5036 - "dependencies": { 5037 - "@jest/core": "30.0.2", 5038 - "@jest/types": "30.0.1", 5039 - "import-local": "^3.2.0", 5040 - "jest-cli": "30.0.2" 5041 - }, 5042 - "bin": { 5043 - "jest": "bin/jest.js" 5044 - }, 5045 - "engines": { 5046 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5047 - }, 5048 - "peerDependencies": { 5049 - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 5050 - }, 5051 - "peerDependenciesMeta": { 5052 - "node-notifier": { 5053 - "optional": true 5054 - } 5055 - } 5056 - }, 5057 - "node_modules/jest-changed-files": { 5058 - "version": "30.0.2", 5059 - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.2.tgz", 5060 - "integrity": "sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==", 5061 - "dev": true, 5062 - "license": "MIT", 5063 - "dependencies": { 5064 - "execa": "^5.1.1", 5065 - "jest-util": "30.0.2", 5066 - "p-limit": "^3.1.0" 5067 - }, 5068 - "engines": { 5069 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5070 - } 5071 - }, 5072 - "node_modules/jest-circus": { 5073 - "version": "30.0.2", 5074 - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.2.tgz", 5075 - "integrity": "sha512-NRozwx4DaFHcCUtwdEd/0jBLL1imyMrCbla3vF//wdsB2g6jIicMbjx9VhqE/BYU4dwsOQld+06ODX0oZ9xOLg==", 5076 - "dev": true, 5077 - "license": "MIT", 5078 - "dependencies": { 5079 - "@jest/environment": "30.0.2", 5080 - "@jest/expect": "30.0.2", 5081 - "@jest/test-result": "30.0.2", 5082 - "@jest/types": "30.0.1", 5083 - "@types/node": "*", 5084 - "chalk": "^4.1.2", 5085 - "co": "^4.6.0", 5086 - "dedent": "^1.6.0", 5087 - "is-generator-fn": "^2.1.0", 5088 - "jest-each": "30.0.2", 5089 - "jest-matcher-utils": "30.0.2", 5090 - "jest-message-util": "30.0.2", 5091 - "jest-runtime": "30.0.2", 5092 - "jest-snapshot": "30.0.2", 5093 - "jest-util": "30.0.2", 5094 - "p-limit": "^3.1.0", 5095 - "pretty-format": "30.0.2", 5096 - "pure-rand": "^7.0.0", 5097 - "slash": "^3.0.0", 5098 - "stack-utils": "^2.0.6" 5099 - }, 5100 - "engines": { 5101 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5102 - } 5103 - }, 5104 - "node_modules/jest-cli": { 5105 - "version": "30.0.2", 5106 - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.2.tgz", 5107 - "integrity": "sha512-yQ6Qz747oUbMYLNAqOlEby+hwXx7WEJtCl0iolBRpJhr2uvkBgiVMrvuKirBc8utwQBnkETFlDUkYifbRpmBrQ==", 5108 - "dev": true, 5109 - "license": "MIT", 5110 - "dependencies": { 5111 - "@jest/core": "30.0.2", 5112 - "@jest/test-result": "30.0.2", 5113 - "@jest/types": "30.0.1", 5114 - "chalk": "^4.1.2", 5115 - "exit-x": "^0.2.2", 5116 - "import-local": "^3.2.0", 5117 - "jest-config": "30.0.2", 5118 - "jest-util": "30.0.2", 5119 - "jest-validate": "30.0.2", 5120 - "yargs": "^17.7.2" 5121 - }, 5122 - "bin": { 5123 - "jest": "bin/jest.js" 5124 - }, 5125 - "engines": { 5126 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5127 - }, 5128 - "peerDependencies": { 5129 - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 5130 - }, 5131 - "peerDependenciesMeta": { 5132 - "node-notifier": { 5133 - "optional": true 5134 - } 5135 - } 5136 - }, 5137 - "node_modules/jest-config": { 5138 - "version": "30.0.2", 5139 - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.2.tgz", 5140 - "integrity": "sha512-vo0fVq+uzDcXETFVnCUyr5HaUCM8ES6DEuS9AFpma34BVXMRRNlsqDyiW5RDHaEFoeFlJHoI4Xjh/WSYIAL58g==", 5141 - "dev": true, 5142 - "license": "MIT", 5143 - "dependencies": { 5144 - "@babel/core": "^7.27.4", 5145 - "@jest/get-type": "30.0.1", 5146 - "@jest/pattern": "30.0.1", 5147 - "@jest/test-sequencer": "30.0.2", 5148 - "@jest/types": "30.0.1", 5149 - "babel-jest": "30.0.2", 5150 - "chalk": "^4.1.2", 5151 - "ci-info": "^4.2.0", 5152 - "deepmerge": "^4.3.1", 5153 - "glob": "^10.3.10", 5154 - "graceful-fs": "^4.2.11", 5155 - "jest-circus": "30.0.2", 5156 - "jest-docblock": "30.0.1", 5157 - "jest-environment-node": "30.0.2", 5158 - "jest-regex-util": "30.0.1", 5159 - "jest-resolve": "30.0.2", 5160 - "jest-runner": "30.0.2", 5161 - "jest-util": "30.0.2", 5162 - "jest-validate": "30.0.2", 5163 - "micromatch": "^4.0.8", 5164 - "parse-json": "^5.2.0", 5165 - "pretty-format": "30.0.2", 5166 - "slash": "^3.0.0", 5167 - "strip-json-comments": "^3.1.1" 5168 - }, 5169 - "engines": { 5170 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5171 - }, 5172 - "peerDependencies": { 5173 - "@types/node": "*", 5174 - "esbuild-register": ">=3.4.0", 5175 - "ts-node": ">=9.0.0" 5176 - }, 5177 - "peerDependenciesMeta": { 5178 - "@types/node": { 5179 - "optional": true 5180 - }, 5181 - "esbuild-register": { 5182 - "optional": true 5183 - }, 5184 - "ts-node": { 5185 - "optional": true 5186 - } 5187 - } 5188 - }, 5189 - "node_modules/jest-config/node_modules/strip-json-comments": { 5190 - "version": "3.1.1", 5191 - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 5192 - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 5193 - "dev": true, 5194 - "license": "MIT", 5195 - "engines": { 5196 - "node": ">=8" 5197 - }, 5198 - "funding": { 5199 - "url": "https://github.com/sponsors/sindresorhus" 5200 - } 5201 - }, 5202 - "node_modules/jest-diff": { 5203 - "version": "30.0.2", 5204 - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.2.tgz", 5205 - "integrity": "sha512-2UjrNvDJDn/oHFpPrUTVmvYYDNeNtw2DlY3er8bI6vJJb9Fb35ycp/jFLd5RdV59tJ8ekVXX3o/nwPcscgXZJQ==", 5206 - "dev": true, 5207 - "license": "MIT", 5208 - "dependencies": { 5209 - "@jest/diff-sequences": "30.0.1", 5210 - "@jest/get-type": "30.0.1", 5211 - "chalk": "^4.1.2", 5212 - "pretty-format": "30.0.2" 5213 - }, 5214 - "engines": { 5215 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5216 - } 5217 - }, 5218 - "node_modules/jest-docblock": { 5219 - "version": "30.0.1", 5220 - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", 5221 - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", 5222 - "dev": true, 5223 - "license": "MIT", 5224 - "dependencies": { 5225 - "detect-newline": "^3.1.0" 5226 - }, 5227 - "engines": { 5228 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5229 - } 5230 - }, 5231 - "node_modules/jest-each": { 5232 - "version": "30.0.2", 5233 - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.2.tgz", 5234 - "integrity": "sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==", 5235 - "dev": true, 5236 - "license": "MIT", 5237 - "dependencies": { 5238 - "@jest/get-type": "30.0.1", 5239 - "@jest/types": "30.0.1", 5240 - "chalk": "^4.1.2", 5241 - "jest-util": "30.0.2", 5242 - "pretty-format": "30.0.2" 5243 - }, 5244 - "engines": { 5245 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5246 - } 5247 - }, 5248 - "node_modules/jest-environment-node": { 5249 - "version": "30.0.2", 5250 - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.2.tgz", 5251 - "integrity": "sha512-XsGtZ0H+a70RsxAQkKuIh0D3ZlASXdZdhpOSBq9WRPq6lhe0IoQHGW0w9ZUaPiZQ/CpkIdprvlfV1QcXcvIQLQ==", 5252 - "dev": true, 5253 - "license": "MIT", 5254 - "dependencies": { 5255 - "@jest/environment": "30.0.2", 5256 - "@jest/fake-timers": "30.0.2", 5257 - "@jest/types": "30.0.1", 5258 - "@types/node": "*", 5259 - "jest-mock": "30.0.2", 5260 - "jest-util": "30.0.2", 5261 - "jest-validate": "30.0.2" 5262 - }, 5263 - "engines": { 5264 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5265 - } 5266 - }, 5267 - "node_modules/jest-haste-map": { 5268 - "version": "30.0.2", 5269 - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.2.tgz", 5270 - "integrity": "sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==", 5271 - "dev": true, 5272 - "license": "MIT", 5273 - "dependencies": { 5274 - "@jest/types": "30.0.1", 5275 - "@types/node": "*", 5276 - "anymatch": "^3.1.3", 5277 - "fb-watchman": "^2.0.2", 5278 - "graceful-fs": "^4.2.11", 5279 - "jest-regex-util": "30.0.1", 5280 - "jest-util": "30.0.2", 5281 - "jest-worker": "30.0.2", 5282 - "micromatch": "^4.0.8", 5283 - "walker": "^1.0.8" 5284 - }, 5285 - "engines": { 5286 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5287 - }, 5288 - "optionalDependencies": { 5289 - "fsevents": "^2.3.3" 5290 - } 5291 - }, 5292 - "node_modules/jest-leak-detector": { 5293 - "version": "30.0.2", 5294 - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.2.tgz", 5295 - "integrity": "sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==", 5296 - "dev": true, 5297 - "license": "MIT", 5298 - "dependencies": { 5299 - "@jest/get-type": "30.0.1", 5300 - "pretty-format": "30.0.2" 5301 - }, 5302 - "engines": { 5303 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5304 - } 5305 - }, 5306 - "node_modules/jest-matcher-utils": { 5307 - "version": "30.0.2", 5308 - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.2.tgz", 5309 - "integrity": "sha512-1FKwgJYECR8IT93KMKmjKHSLyru0DqguThov/aWpFccC0wbiXGOxYEu7SScderBD7ruDOpl7lc5NG6w3oxKfaA==", 5310 - "dev": true, 5311 - "license": "MIT", 5312 - "dependencies": { 5313 - "@jest/get-type": "30.0.1", 5314 - "chalk": "^4.1.2", 5315 - "jest-diff": "30.0.2", 5316 - "pretty-format": "30.0.2" 5317 - }, 5318 - "engines": { 5319 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5320 - } 5321 - }, 5322 - "node_modules/jest-message-util": { 5323 - "version": "30.0.2", 5324 - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", 5325 - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", 5326 - "dev": true, 5327 - "license": "MIT", 5328 - "dependencies": { 5329 - "@babel/code-frame": "^7.27.1", 5330 - "@jest/types": "30.0.1", 5331 - "@types/stack-utils": "^2.0.3", 5332 - "chalk": "^4.1.2", 5333 - "graceful-fs": "^4.2.11", 5334 - "micromatch": "^4.0.8", 5335 - "pretty-format": "30.0.2", 5336 - "slash": "^3.0.0", 5337 - "stack-utils": "^2.0.6" 5338 - }, 5339 - "engines": { 5340 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5341 - } 5342 - }, 5343 - "node_modules/jest-mock": { 5344 - "version": "30.0.2", 5345 - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz", 5346 - "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==", 5347 - "dev": true, 5348 - "license": "MIT", 5349 - "dependencies": { 5350 - "@jest/types": "30.0.1", 5351 - "@types/node": "*", 5352 - "jest-util": "30.0.2" 5353 - }, 5354 - "engines": { 5355 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5356 - } 5357 - }, 5358 - "node_modules/jest-pnp-resolver": { 5359 - "version": "1.2.3", 5360 - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", 5361 - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", 5362 - "dev": true, 5363 - "license": "MIT", 5364 - "engines": { 5365 - "node": ">=6" 5366 - }, 5367 - "peerDependencies": { 5368 - "jest-resolve": "*" 5369 - }, 5370 - "peerDependenciesMeta": { 5371 - "jest-resolve": { 5372 - "optional": true 5373 - } 5374 - } 5375 - }, 5376 - "node_modules/jest-regex-util": { 5377 - "version": "30.0.1", 5378 - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", 5379 - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", 5380 - "dev": true, 5381 - "license": "MIT", 5382 - "engines": { 5383 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5384 - } 5385 - }, 5386 - "node_modules/jest-resolve": { 5387 - "version": "30.0.2", 5388 - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.2.tgz", 5389 - "integrity": "sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==", 5390 - "dev": true, 5391 - "license": "MIT", 5392 - "dependencies": { 5393 - "chalk": "^4.1.2", 5394 - "graceful-fs": "^4.2.11", 5395 - "jest-haste-map": "30.0.2", 5396 - "jest-pnp-resolver": "^1.2.3", 5397 - "jest-util": "30.0.2", 5398 - "jest-validate": "30.0.2", 5399 - "slash": "^3.0.0", 5400 - "unrs-resolver": "^1.7.11" 5401 - }, 5402 - "engines": { 5403 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5404 - } 5405 - }, 5406 - "node_modules/jest-resolve-dependencies": { 5407 - "version": "30.0.2", 5408 - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.2.tgz", 5409 - "integrity": "sha512-Lp1iIXpsF5fGM4vyP8xHiIy2H5L5yO67/nXoYJzH4kz+fQmO+ZMKxzYLyWxYy4EeCLeNQ6a9OozL+uHZV2iuEA==", 5410 - "dev": true, 5411 - "license": "MIT", 5412 - "dependencies": { 5413 - "jest-regex-util": "30.0.1", 5414 - "jest-snapshot": "30.0.2" 5415 - }, 5416 - "engines": { 5417 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5418 - } 5419 - }, 5420 - "node_modules/jest-runner": { 5421 - "version": "30.0.2", 5422 - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.2.tgz", 5423 - "integrity": "sha512-6H+CIFiDLVt1Ix6jLzASXz3IoIiDukpEIxL9FHtDQ2BD/k5eFtDF5e5N9uItzRE3V1kp7VoSRyrGBytXKra4xA==", 5424 - "dev": true, 5425 - "license": "MIT", 5426 - "dependencies": { 5427 - "@jest/console": "30.0.2", 5428 - "@jest/environment": "30.0.2", 5429 - "@jest/test-result": "30.0.2", 5430 - "@jest/transform": "30.0.2", 5431 - "@jest/types": "30.0.1", 5432 - "@types/node": "*", 5433 - "chalk": "^4.1.2", 5434 - "emittery": "^0.13.1", 5435 - "exit-x": "^0.2.2", 5436 - "graceful-fs": "^4.2.11", 5437 - "jest-docblock": "30.0.1", 5438 - "jest-environment-node": "30.0.2", 5439 - "jest-haste-map": "30.0.2", 5440 - "jest-leak-detector": "30.0.2", 5441 - "jest-message-util": "30.0.2", 5442 - "jest-resolve": "30.0.2", 5443 - "jest-runtime": "30.0.2", 5444 - "jest-util": "30.0.2", 5445 - "jest-watcher": "30.0.2", 5446 - "jest-worker": "30.0.2", 5447 - "p-limit": "^3.1.0", 5448 - "source-map-support": "0.5.13" 5449 - }, 5450 - "engines": { 5451 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5452 - } 5453 - }, 5454 - "node_modules/jest-runtime": { 5455 - "version": "30.0.2", 5456 - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.2.tgz", 5457 - "integrity": "sha512-H1a51/soNOeAjoggu6PZKTH7DFt8JEGN4mesTSwyqD2jU9PXD04Bp6DKbt2YVtQvh2JcvH2vjbkEerCZ3lRn7A==", 5458 - "dev": true, 5459 - "license": "MIT", 5460 - "dependencies": { 5461 - "@jest/environment": "30.0.2", 5462 - "@jest/fake-timers": "30.0.2", 5463 - "@jest/globals": "30.0.2", 5464 - "@jest/source-map": "30.0.1", 5465 - "@jest/test-result": "30.0.2", 5466 - "@jest/transform": "30.0.2", 5467 - "@jest/types": "30.0.1", 5468 - "@types/node": "*", 5469 - "chalk": "^4.1.2", 5470 - "cjs-module-lexer": "^2.1.0", 5471 - "collect-v8-coverage": "^1.0.2", 5472 - "glob": "^10.3.10", 5473 - "graceful-fs": "^4.2.11", 5474 - "jest-haste-map": "30.0.2", 5475 - "jest-message-util": "30.0.2", 5476 - "jest-mock": "30.0.2", 5477 - "jest-regex-util": "30.0.1", 5478 - "jest-resolve": "30.0.2", 5479 - "jest-snapshot": "30.0.2", 5480 - "jest-util": "30.0.2", 5481 - "slash": "^3.0.0", 5482 - "strip-bom": "^4.0.0" 5483 - }, 5484 - "engines": { 5485 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5486 - } 5487 - }, 5488 - "node_modules/jest-snapshot": { 5489 - "version": "30.0.2", 5490 - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.2.tgz", 5491 - "integrity": "sha512-KeoHikoKGln3OlN7NS7raJ244nIVr2K46fBTNdfuxqYv2/g4TVyWDSO4fmk08YBJQMjs3HNfG1rlLfL/KA+nUw==", 5492 - "dev": true, 5493 - "license": "MIT", 5494 - "dependencies": { 5495 - "@babel/core": "^7.27.4", 5496 - "@babel/generator": "^7.27.5", 5497 - "@babel/plugin-syntax-jsx": "^7.27.1", 5498 - "@babel/plugin-syntax-typescript": "^7.27.1", 5499 - "@babel/types": "^7.27.3", 5500 - "@jest/expect-utils": "30.0.2", 5501 - "@jest/get-type": "30.0.1", 5502 - "@jest/snapshot-utils": "30.0.1", 5503 - "@jest/transform": "30.0.2", 5504 - "@jest/types": "30.0.1", 5505 - "babel-preset-current-node-syntax": "^1.1.0", 5506 - "chalk": "^4.1.2", 5507 - "expect": "30.0.2", 5508 - "graceful-fs": "^4.2.11", 5509 - "jest-diff": "30.0.2", 5510 - "jest-matcher-utils": "30.0.2", 5511 - "jest-message-util": "30.0.2", 5512 - "jest-util": "30.0.2", 5513 - "pretty-format": "30.0.2", 5514 - "semver": "^7.7.2", 5515 - "synckit": "^0.11.8" 5516 - }, 5517 - "engines": { 5518 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5519 - } 5520 - }, 5521 - "node_modules/jest-util": { 5522 - "version": "30.0.2", 5523 - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", 5524 - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", 5525 - "dev": true, 5526 - "license": "MIT", 5527 - "dependencies": { 5528 - "@jest/types": "30.0.1", 5529 - "@types/node": "*", 5530 - "chalk": "^4.1.2", 5531 - "ci-info": "^4.2.0", 5532 - "graceful-fs": "^4.2.11", 5533 - "picomatch": "^4.0.2" 5534 - }, 5535 - "engines": { 5536 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5537 - } 5538 - }, 5539 - "node_modules/jest-util/node_modules/picomatch": { 5540 - "version": "4.0.2", 5541 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 5542 - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 5543 - "dev": true, 5544 - "license": "MIT", 5545 - "engines": { 5546 - "node": ">=12" 5547 - }, 5548 - "funding": { 5549 - "url": "https://github.com/sponsors/jonschlinkert" 5550 - } 5551 - }, 5552 - "node_modules/jest-validate": { 5553 - "version": "30.0.2", 5554 - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.2.tgz", 5555 - "integrity": "sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==", 5556 - "dev": true, 5557 - "license": "MIT", 5558 - "dependencies": { 5559 - "@jest/get-type": "30.0.1", 5560 - "@jest/types": "30.0.1", 5561 - "camelcase": "^6.3.0", 5562 - "chalk": "^4.1.2", 5563 - "leven": "^3.1.0", 5564 - "pretty-format": "30.0.2" 5565 - }, 5566 - "engines": { 5567 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5568 - } 5569 - }, 5570 - "node_modules/jest-validate/node_modules/camelcase": { 5571 - "version": "6.3.0", 5572 - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 5573 - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 5574 - "dev": true, 5575 - "license": "MIT", 5576 - "engines": { 5577 - "node": ">=10" 5578 - }, 5579 - "funding": { 5580 - "url": "https://github.com/sponsors/sindresorhus" 5581 - } 5582 - }, 5583 - "node_modules/jest-watcher": { 5584 - "version": "30.0.2", 5585 - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.2.tgz", 5586 - "integrity": "sha512-vYO5+E7jJuF+XmONr6CrbXdlYrgvZqtkn6pdkgjt/dU64UAdc0v1cAVaAeWtAfUUMScxNmnUjKPUMdCpNVASwg==", 5587 - "dev": true, 5588 - "license": "MIT", 5589 - "dependencies": { 5590 - "@jest/test-result": "30.0.2", 5591 - "@jest/types": "30.0.1", 5592 - "@types/node": "*", 5593 - "ansi-escapes": "^4.3.2", 5594 - "chalk": "^4.1.2", 5595 - "emittery": "^0.13.1", 5596 - "jest-util": "30.0.2", 5597 - "string-length": "^4.0.2" 5598 - }, 5599 - "engines": { 5600 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5601 - } 5602 - }, 5603 - "node_modules/jest-worker": { 5604 - "version": "30.0.2", 5605 - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.2.tgz", 5606 - "integrity": "sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==", 5607 - "dev": true, 5608 - "license": "MIT", 5609 - "dependencies": { 5610 - "@types/node": "*", 5611 - "@ungap/structured-clone": "^1.3.0", 5612 - "jest-util": "30.0.2", 5613 - "merge-stream": "^2.0.0", 5614 - "supports-color": "^8.1.1" 5615 - }, 5616 - "engines": { 5617 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 5618 - } 5619 - }, 5620 - "node_modules/jest-worker/node_modules/supports-color": { 5621 - "version": "8.1.1", 5622 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 5623 - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 5624 - "dev": true, 5625 - "license": "MIT", 5626 - "dependencies": { 5627 - "has-flag": "^4.0.0" 5628 - }, 5629 - "engines": { 5630 - "node": ">=10" 5631 - }, 5632 - "funding": { 5633 - "url": "https://github.com/chalk/supports-color?sponsor=1" 5634 - } 5635 - }, 5636 - "node_modules/js-tokens": { 5637 - "version": "4.0.0", 5638 - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 5639 - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 5640 - "dev": true, 5641 - "license": "MIT" 5642 - }, 5643 - "node_modules/js-yaml": { 5644 - "version": "3.14.1", 5645 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 5646 - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 5647 - "dev": true, 5648 - "license": "MIT", 5649 - "dependencies": { 5650 - "argparse": "^1.0.7", 5651 - "esprima": "^4.0.0" 5652 - }, 5653 - "bin": { 5654 - "js-yaml": "bin/js-yaml.js" 5655 - } 5656 - }, 5657 - "node_modules/jsesc": { 5658 - "version": "3.1.0", 5659 - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 5660 - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 5661 - "dev": true, 5662 - "license": "MIT", 5663 - "bin": { 5664 - "jsesc": "bin/jsesc" 5665 - }, 5666 - "engines": { 5667 - "node": ">=6" 5668 - } 5669 - }, 5670 - "node_modules/json-parse-even-better-errors": { 5671 - "version": "2.3.1", 5672 - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 5673 - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 5674 - "dev": true, 5675 - "license": "MIT" 5676 - }, 5677 - "node_modules/json5": { 5678 - "version": "2.2.3", 5679 - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 5680 - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 5681 - "dev": true, 5682 - "license": "MIT", 5683 - "bin": { 5684 - "json5": "lib/cli.js" 5685 - }, 5686 - "engines": { 5687 - "node": ">=6" 5688 - } 5689 - }, 5690 - "node_modules/leven": { 5691 - "version": "3.1.0", 5692 - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 5693 - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 5694 - "dev": true, 5695 - "license": "MIT", 5696 - "engines": { 5697 - "node": ">=6" 5698 - } 5699 - }, 5700 - "node_modules/lines-and-columns": { 5701 - "version": "1.2.4", 5702 - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 5703 - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 5704 - "dev": true, 5705 - "license": "MIT" 5706 - }, 5707 - "node_modules/locate-path": { 5708 - "version": "5.0.0", 5709 - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 5710 - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 5711 - "dev": true, 5712 - "license": "MIT", 5713 - "dependencies": { 5714 - "p-locate": "^4.1.0" 5715 - }, 5716 - "engines": { 5717 - "node": ">=8" 5718 - } 5719 - }, 5720 - "node_modules/lodash": { 5721 - "version": "4.17.21", 5722 - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 5723 - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 5724 - "dev": true, 5725 - "license": "MIT" 5726 - }, 5727 - "node_modules/lodash.memoize": { 5728 - "version": "4.1.2", 5729 - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", 5730 - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", 5731 - "dev": true, 5732 - "license": "MIT" 5733 - }, 5734 - "node_modules/lru-cache": { 5735 - "version": "5.1.1", 5736 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 5737 - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 5738 - "dev": true, 5739 - "license": "ISC", 5740 - "dependencies": { 5741 - "yallist": "^3.0.2" 5742 - } 5743 - }, 5744 - "node_modules/make-dir": { 5745 - "version": "4.0.0", 5746 - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 5747 - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 5748 - "dev": true, 5749 - "license": "MIT", 5750 - "dependencies": { 5751 - "semver": "^7.5.3" 5752 - }, 5753 - "engines": { 5754 - "node": ">=10" 5755 - }, 5756 - "funding": { 5757 - "url": "https://github.com/sponsors/sindresorhus" 5758 - } 5759 - }, 5760 - "node_modules/make-error": { 5761 - "version": "1.3.6", 5762 - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 5763 - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 5764 - "dev": true, 5765 - "license": "ISC" 5766 - }, 5767 - "node_modules/makeerror": { 5768 - "version": "1.0.12", 5769 - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", 5770 - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", 5771 - "dev": true, 5772 - "license": "BSD-3-Clause", 5773 - "dependencies": { 5774 - "tmpl": "1.0.5" 5775 - } 5776 - }, 5777 - "node_modules/math-intrinsics": { 5778 - "version": "1.1.0", 5779 - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 5780 - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 5781 - "license": "MIT", 5782 - "engines": { 5783 - "node": ">= 0.4" 5784 - } 5785 - }, 5786 - "node_modules/media-typer": { 5787 - "version": "1.1.0", 5788 - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 5789 - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 5790 - "license": "MIT", 5791 - "engines": { 5792 - "node": ">= 0.8" 5793 - } 5794 - }, 5795 - "node_modules/merge-descriptors": { 5796 - "version": "2.0.0", 5797 - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", 5798 - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", 5799 - "license": "MIT", 5800 - "engines": { 5801 - "node": ">=18" 5802 - }, 5803 - "funding": { 5804 - "url": "https://github.com/sponsors/sindresorhus" 5805 - } 5806 - }, 5807 - "node_modules/merge-stream": { 5808 - "version": "2.0.0", 5809 - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 5810 - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 5811 - "dev": true, 5812 - "license": "MIT" 5813 - }, 5814 - "node_modules/methods": { 5815 - "version": "1.1.2", 5816 - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 5817 - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 5818 - "license": "MIT", 5819 - "engines": { 5820 - "node": ">= 0.6" 5821 - } 5822 - }, 5823 - "node_modules/micromatch": { 5824 - "version": "4.0.8", 5825 - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 5826 - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 5827 - "dev": true, 5828 - "license": "MIT", 5829 - "dependencies": { 5830 - "braces": "^3.0.3", 5831 - "picomatch": "^2.3.1" 5832 - }, 5833 - "engines": { 5834 - "node": ">=8.6" 5835 - } 5836 - }, 5837 - "node_modules/mime": { 5838 - "version": "1.6.0", 5839 - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 5840 - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 5841 - "license": "MIT", 5842 - "bin": { 5843 - "mime": "cli.js" 5844 - }, 5845 - "engines": { 5846 - "node": ">=4" 5847 - } 5848 - }, 5849 - "node_modules/mime-db": { 5850 - "version": "1.54.0", 5851 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 5852 - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 5853 - "license": "MIT", 5854 - "engines": { 5855 - "node": ">= 0.6" 5856 - } 5857 - }, 5858 - "node_modules/mime-types": { 5859 - "version": "3.0.1", 5860 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", 5861 - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", 5862 - "license": "MIT", 5863 - "dependencies": { 5864 - "mime-db": "^1.54.0" 5865 - }, 5866 - "engines": { 5867 - "node": ">= 0.6" 5868 - } 5869 - }, 5870 - "node_modules/mimic-fn": { 5871 - "version": "2.1.0", 5872 - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 5873 - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 5874 - "dev": true, 5875 - "license": "MIT", 5876 - "engines": { 5877 - "node": ">=6" 5878 - } 5879 - }, 5880 - "node_modules/mimic-response": { 5881 - "version": "3.1.0", 5882 - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 5883 - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 5884 - "license": "MIT", 5885 - "engines": { 5886 - "node": ">=10" 5887 - }, 5888 - "funding": { 5889 - "url": "https://github.com/sponsors/sindresorhus" 5890 - } 5891 - }, 5892 - "node_modules/minimatch": { 5893 - "version": "3.1.2", 5894 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 5895 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 5896 - "license": "ISC", 5897 - "dependencies": { 5898 - "brace-expansion": "^1.1.7" 5899 - }, 5900 - "engines": { 5901 - "node": "*" 5902 - } 5903 - }, 5904 - "node_modules/minimist": { 5905 - "version": "1.2.8", 5906 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 5907 - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 5908 - "license": "MIT", 5909 - "funding": { 5910 - "url": "https://github.com/sponsors/ljharb" 5911 - } 5912 - }, 5913 - "node_modules/minipass": { 5914 - "version": "7.1.2", 5915 - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 5916 - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 5917 - "dev": true, 5918 - "license": "ISC", 5919 - "engines": { 5920 - "node": ">=16 || 14 >=14.17" 5921 - } 5922 - }, 5923 - "node_modules/mkdirp-classic": { 5924 - "version": "0.5.3", 5925 - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 5926 - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", 5927 - "license": "MIT" 5928 - }, 5929 - "node_modules/ms": { 5930 - "version": "2.1.3", 5931 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 5932 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 5933 - "license": "MIT" 5934 - }, 5935 - "node_modules/multiformats": { 5936 - "version": "13.3.7", 5937 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz", 5938 - "integrity": "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==", 5939 - "license": "Apache-2.0 OR MIT" 5940 - }, 5941 - "node_modules/nanoevents": { 5942 - "version": "9.1.0", 5943 - "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-9.1.0.tgz", 5944 - "integrity": "sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==", 5945 - "license": "MIT", 5946 - "engines": { 5947 - "node": "^18.0.0 || >=20.0.0" 5948 - } 5949 - }, 5950 - "node_modules/napi-build-utils": { 5951 - "version": "2.0.0", 5952 - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", 5953 - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", 5954 - "license": "MIT" 5955 - }, 5956 - "node_modules/napi-postinstall": { 5957 - "version": "0.2.4", 5958 - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", 5959 - "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==", 5960 - "dev": true, 5961 - "license": "MIT", 5962 - "bin": { 5963 - "napi-postinstall": "lib/cli.js" 5964 - }, 5965 - "engines": { 5966 - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 5967 - }, 5968 - "funding": { 5969 - "url": "https://opencollective.com/napi-postinstall" 5970 - } 5971 - }, 5972 - "node_modules/natural-compare": { 5973 - "version": "1.4.0", 5974 - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 5975 - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 5976 - "dev": true, 5977 - "license": "MIT" 5978 - }, 5979 - "node_modules/negotiator": { 5980 - "version": "1.0.0", 5981 - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", 5982 - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", 5983 - "license": "MIT", 5984 - "engines": { 5985 - "node": ">= 0.6" 5986 - } 5987 - }, 5988 - "node_modules/node-abi": { 5989 - "version": "3.75.0", 5990 - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", 5991 - "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", 5992 - "license": "MIT", 5993 - "dependencies": { 5994 - "semver": "^7.3.5" 5995 - }, 5996 - "engines": { 5997 - "node": ">=10" 5998 - } 5999 - }, 6000 - "node_modules/node-gyp-build-optional-packages": { 6001 - "version": "5.1.1", 6002 - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz", 6003 - "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==", 6004 - "license": "MIT", 6005 - "optional": true, 6006 - "dependencies": { 6007 - "detect-libc": "^2.0.1" 6008 - }, 6009 - "bin": { 6010 - "node-gyp-build-optional-packages": "bin.js", 6011 - "node-gyp-build-optional-packages-optional": "optional.js", 6012 - "node-gyp-build-optional-packages-test": "build-test.js" 6013 - } 6014 - }, 6015 - "node_modules/node-int64": { 6016 - "version": "0.4.0", 6017 - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", 6018 - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", 6019 - "dev": true, 6020 - "license": "MIT" 6021 - }, 6022 - "node_modules/node-releases": { 6023 - "version": "2.0.19", 6024 - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 6025 - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 6026 - "dev": true, 6027 - "license": "MIT" 6028 - }, 6029 - "node_modules/normalize-path": { 6030 - "version": "3.0.0", 6031 - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 6032 - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 6033 - "dev": true, 6034 - "license": "MIT", 6035 - "engines": { 6036 - "node": ">=0.10.0" 6037 - } 6038 - }, 6039 - "node_modules/npm-run-path": { 6040 - "version": "4.0.1", 6041 - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 6042 - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 6043 - "dev": true, 6044 - "license": "MIT", 6045 - "dependencies": { 6046 - "path-key": "^3.0.0" 6047 - }, 6048 - "engines": { 6049 - "node": ">=8" 6050 - } 6051 - }, 6052 - "node_modules/object-assign": { 6053 - "version": "4.1.1", 6054 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 6055 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 6056 - "license": "MIT", 6057 - "engines": { 6058 - "node": ">=0.10.0" 6059 - } 6060 - }, 6061 - "node_modules/object-inspect": { 6062 - "version": "1.13.4", 6063 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 6064 - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 6065 - "license": "MIT", 6066 - "engines": { 6067 - "node": ">= 0.4" 6068 - }, 6069 - "funding": { 6070 - "url": "https://github.com/sponsors/ljharb" 6071 - } 6072 - }, 6073 - "node_modules/on-exit-leak-free": { 6074 - "version": "2.1.2", 6075 - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", 6076 - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", 6077 - "license": "MIT", 6078 - "engines": { 6079 - "node": ">=14.0.0" 6080 - } 6081 - }, 6082 - "node_modules/on-finished": { 6083 - "version": "2.4.1", 6084 - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 6085 - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 6086 - "license": "MIT", 6087 - "dependencies": { 6088 - "ee-first": "1.1.1" 6089 - }, 6090 - "engines": { 6091 - "node": ">= 0.8" 6092 - } 6093 - }, 6094 - "node_modules/on-headers": { 6095 - "version": "1.0.2", 6096 - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 6097 - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 6098 - "license": "MIT", 6099 - "engines": { 6100 - "node": ">= 0.8" 6101 - } 6102 - }, 6103 - "node_modules/once": { 6104 - "version": "1.4.0", 6105 - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 6106 - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 6107 - "license": "ISC", 6108 - "dependencies": { 6109 - "wrappy": "1" 6110 - } 6111 - }, 6112 - "node_modules/onetime": { 6113 - "version": "5.1.2", 6114 - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 6115 - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 6116 - "dev": true, 6117 - "license": "MIT", 6118 - "dependencies": { 6119 - "mimic-fn": "^2.1.0" 6120 - }, 6121 - "engines": { 6122 - "node": ">=6" 6123 - }, 6124 - "funding": { 6125 - "url": "https://github.com/sponsors/sindresorhus" 6126 - } 6127 - }, 6128 - "node_modules/p-finally": { 6129 - "version": "1.0.0", 6130 - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 6131 - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", 6132 - "license": "MIT", 6133 - "engines": { 6134 - "node": ">=4" 6135 - } 6136 - }, 6137 - "node_modules/p-limit": { 6138 - "version": "3.1.0", 6139 - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 6140 - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 6141 - "dev": true, 6142 - "license": "MIT", 6143 - "dependencies": { 6144 - "yocto-queue": "^0.1.0" 6145 - }, 6146 - "engines": { 6147 - "node": ">=10" 6148 - }, 6149 - "funding": { 6150 - "url": "https://github.com/sponsors/sindresorhus" 6151 - } 6152 - }, 6153 - "node_modules/p-limit/node_modules/yocto-queue": { 6154 - "version": "0.1.0", 6155 - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 6156 - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 6157 - "dev": true, 6158 - "license": "MIT", 6159 - "engines": { 6160 - "node": ">=10" 6161 - }, 6162 - "funding": { 6163 - "url": "https://github.com/sponsors/sindresorhus" 6164 - } 6165 - }, 6166 - "node_modules/p-locate": { 6167 - "version": "4.1.0", 6168 - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 6169 - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 6170 - "dev": true, 6171 - "license": "MIT", 6172 - "dependencies": { 6173 - "p-limit": "^2.2.0" 6174 - }, 6175 - "engines": { 6176 - "node": ">=8" 6177 - } 6178 - }, 6179 - "node_modules/p-locate/node_modules/p-limit": { 6180 - "version": "2.3.0", 6181 - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 6182 - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 6183 - "dev": true, 6184 - "license": "MIT", 6185 - "dependencies": { 6186 - "p-try": "^2.0.0" 6187 - }, 6188 - "engines": { 6189 - "node": ">=6" 6190 - }, 6191 - "funding": { 6192 - "url": "https://github.com/sponsors/sindresorhus" 6193 - } 6194 - }, 6195 - "node_modules/p-queue": { 6196 - "version": "6.6.2", 6197 - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", 6198 - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", 6199 - "license": "MIT", 6200 - "dependencies": { 6201 - "eventemitter3": "^4.0.4", 6202 - "p-timeout": "^3.2.0" 6203 - }, 6204 - "engines": { 6205 - "node": ">=8" 6206 - }, 6207 - "funding": { 6208 - "url": "https://github.com/sponsors/sindresorhus" 6209 - } 6210 - }, 6211 - "node_modules/p-timeout": { 6212 - "version": "3.2.0", 6213 - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", 6214 - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", 6215 - "license": "MIT", 6216 - "dependencies": { 6217 - "p-finally": "^1.0.0" 6218 - }, 6219 - "engines": { 6220 - "node": ">=8" 6221 - } 6222 - }, 6223 - "node_modules/p-try": { 6224 - "version": "2.2.0", 6225 - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 6226 - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 6227 - "dev": true, 6228 - "license": "MIT", 6229 - "engines": { 6230 - "node": ">=6" 6231 - } 6232 - }, 6233 - "node_modules/package-json-from-dist": { 6234 - "version": "1.0.1", 6235 - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 6236 - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 6237 - "dev": true, 6238 - "license": "BlueOak-1.0.0" 6239 - }, 6240 - "node_modules/parse-json": { 6241 - "version": "5.2.0", 6242 - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 6243 - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 6244 - "dev": true, 6245 - "license": "MIT", 6246 - "dependencies": { 6247 - "@babel/code-frame": "^7.0.0", 6248 - "error-ex": "^1.3.1", 6249 - "json-parse-even-better-errors": "^2.3.0", 6250 - "lines-and-columns": "^1.1.6" 6251 - }, 6252 - "engines": { 6253 - "node": ">=8" 6254 - }, 6255 - "funding": { 6256 - "url": "https://github.com/sponsors/sindresorhus" 6257 - } 6258 - }, 6259 - "node_modules/parseurl": { 6260 - "version": "1.3.3", 6261 - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 6262 - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 6263 - "license": "MIT", 6264 - "engines": { 6265 - "node": ">= 0.8" 6266 - } 6267 - }, 6268 - "node_modules/path-exists": { 6269 - "version": "4.0.0", 6270 - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 6271 - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 6272 - "dev": true, 6273 - "license": "MIT", 6274 - "engines": { 6275 - "node": ">=8" 6276 - } 6277 - }, 6278 - "node_modules/path-is-absolute": { 6279 - "version": "1.0.1", 6280 - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 6281 - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 6282 - "dev": true, 6283 - "license": "MIT", 6284 - "engines": { 6285 - "node": ">=0.10.0" 6286 - } 6287 - }, 6288 - "node_modules/path-key": { 6289 - "version": "3.1.1", 6290 - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 6291 - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 6292 - "dev": true, 6293 - "license": "MIT", 6294 - "engines": { 6295 - "node": ">=8" 6296 - } 6297 - }, 6298 - "node_modules/path-scurry": { 6299 - "version": "1.11.1", 6300 - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 6301 - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 6302 - "dev": true, 6303 - "license": "BlueOak-1.0.0", 6304 - "dependencies": { 6305 - "lru-cache": "^10.2.0", 6306 - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 6307 - }, 6308 - "engines": { 6309 - "node": ">=16 || 14 >=14.18" 6310 - }, 6311 - "funding": { 6312 - "url": "https://github.com/sponsors/isaacs" 6313 - } 6314 - }, 6315 - "node_modules/path-scurry/node_modules/lru-cache": { 6316 - "version": "10.4.3", 6317 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 6318 - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 6319 - "dev": true, 6320 - "license": "ISC" 6321 - }, 6322 - "node_modules/path-to-regexp": { 6323 - "version": "8.2.0", 6324 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", 6325 - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", 6326 - "license": "MIT", 6327 - "engines": { 6328 - "node": ">=16" 6329 - } 6330 - }, 6331 - "node_modules/picocolors": { 6332 - "version": "1.1.1", 6333 - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 6334 - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 6335 - "dev": true, 6336 - "license": "ISC" 6337 - }, 6338 - "node_modules/picomatch": { 6339 - "version": "2.3.1", 6340 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 6341 - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 6342 - "dev": true, 6343 - "license": "MIT", 6344 - "engines": { 6345 - "node": ">=8.6" 6346 - }, 6347 - "funding": { 6348 - "url": "https://github.com/sponsors/jonschlinkert" 6349 - } 6350 - }, 6351 - "node_modules/pino": { 6352 - "version": "8.21.0", 6353 - "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", 6354 - "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", 6355 - "license": "MIT", 6356 - "dependencies": { 6357 - "atomic-sleep": "^1.0.0", 6358 - "fast-redact": "^3.1.1", 6359 - "on-exit-leak-free": "^2.1.0", 6360 - "pino-abstract-transport": "^1.2.0", 6361 - "pino-std-serializers": "^6.0.0", 6362 - "process-warning": "^3.0.0", 6363 - "quick-format-unescaped": "^4.0.3", 6364 - "real-require": "^0.2.0", 6365 - "safe-stable-stringify": "^2.3.1", 6366 - "sonic-boom": "^3.7.0", 6367 - "thread-stream": "^2.6.0" 6368 - }, 6369 - "bin": { 6370 - "pino": "bin.js" 6371 - } 6372 - }, 6373 - "node_modules/pino-abstract-transport": { 6374 - "version": "1.2.0", 6375 - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", 6376 - "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", 6377 - "license": "MIT", 6378 - "dependencies": { 6379 - "readable-stream": "^4.0.0", 6380 - "split2": "^4.0.0" 6381 - } 6382 - }, 6383 - "node_modules/pino-abstract-transport/node_modules/buffer": { 6384 - "version": "6.0.3", 6385 - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 6386 - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 6387 - "funding": [ 6388 - { 6389 - "type": "github", 6390 - "url": "https://github.com/sponsors/feross" 6391 - }, 6392 - { 6393 - "type": "patreon", 6394 - "url": "https://www.patreon.com/feross" 6395 - }, 6396 - { 6397 - "type": "consulting", 6398 - "url": "https://feross.org/support" 6399 - } 6400 - ], 6401 - "license": "MIT", 6402 - "dependencies": { 6403 - "base64-js": "^1.3.1", 6404 - "ieee754": "^1.2.1" 6405 - } 6406 - }, 6407 - "node_modules/pino-abstract-transport/node_modules/readable-stream": { 6408 - "version": "4.7.0", 6409 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", 6410 - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", 6411 - "license": "MIT", 6412 - "dependencies": { 6413 - "abort-controller": "^3.0.0", 6414 - "buffer": "^6.0.3", 6415 - "events": "^3.3.0", 6416 - "process": "^0.11.10", 6417 - "string_decoder": "^1.3.0" 6418 - }, 6419 - "engines": { 6420 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 6421 - } 6422 - }, 6423 - "node_modules/pino-std-serializers": { 6424 - "version": "6.2.2", 6425 - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", 6426 - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", 6427 - "license": "MIT" 6428 - }, 6429 - "node_modules/pirates": { 6430 - "version": "4.0.7", 6431 - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", 6432 - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", 6433 - "dev": true, 6434 - "license": "MIT", 6435 - "engines": { 6436 - "node": ">= 6" 6437 - } 6438 - }, 6439 - "node_modules/pkg-dir": { 6440 - "version": "4.2.0", 6441 - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 6442 - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 6443 - "dev": true, 6444 - "license": "MIT", 6445 - "dependencies": { 6446 - "find-up": "^4.0.0" 6447 - }, 6448 - "engines": { 6449 - "node": ">=8" 6450 - } 6451 - }, 6452 - "node_modules/prebuild-install": { 6453 - "version": "7.1.3", 6454 - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", 6455 - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", 6456 - "license": "MIT", 6457 - "dependencies": { 6458 - "detect-libc": "^2.0.0", 6459 - "expand-template": "^2.0.3", 6460 - "github-from-package": "0.0.0", 6461 - "minimist": "^1.2.3", 6462 - "mkdirp-classic": "^0.5.3", 6463 - "napi-build-utils": "^2.0.0", 6464 - "node-abi": "^3.3.0", 6465 - "pump": "^3.0.0", 6466 - "rc": "^1.2.7", 6467 - "simple-get": "^4.0.0", 6468 - "tar-fs": "^2.0.0", 6469 - "tunnel-agent": "^0.6.0" 6470 - }, 6471 - "bin": { 6472 - "prebuild-install": "bin.js" 6473 - }, 6474 - "engines": { 6475 - "node": ">=10" 6476 - } 6477 - }, 6478 - "node_modules/pretty-format": { 6479 - "version": "30.0.2", 6480 - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", 6481 - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", 6482 - "dev": true, 6483 - "license": "MIT", 6484 - "dependencies": { 6485 - "@jest/schemas": "30.0.1", 6486 - "ansi-styles": "^5.2.0", 6487 - "react-is": "^18.3.1" 6488 - }, 6489 - "engines": { 6490 - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 6491 - } 6492 - }, 6493 - "node_modules/pretty-format/node_modules/ansi-styles": { 6494 - "version": "5.2.0", 6495 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 6496 - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 6497 - "dev": true, 6498 - "license": "MIT", 6499 - "engines": { 6500 - "node": ">=10" 6501 - }, 6502 - "funding": { 6503 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 6504 - } 6505 - }, 6506 - "node_modules/process": { 6507 - "version": "0.11.10", 6508 - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 6509 - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 6510 - "license": "MIT", 6511 - "engines": { 6512 - "node": ">= 0.6.0" 6513 - } 6514 - }, 6515 - "node_modules/process-warning": { 6516 - "version": "3.0.0", 6517 - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", 6518 - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", 6519 - "license": "MIT" 6520 - }, 6521 - "node_modules/proxy-addr": { 6522 - "version": "2.0.7", 6523 - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 6524 - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 6525 - "license": "MIT", 6526 - "dependencies": { 6527 - "forwarded": "0.2.0", 6528 - "ipaddr.js": "1.9.1" 6529 - }, 6530 - "engines": { 6531 - "node": ">= 0.10" 6532 - } 6533 - }, 6534 - "node_modules/pump": { 6535 - "version": "3.0.3", 6536 - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", 6537 - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", 6538 - "license": "MIT", 6539 - "dependencies": { 6540 - "end-of-stream": "^1.1.0", 6541 - "once": "^1.3.1" 6542 - } 6543 - }, 6544 - "node_modules/pure-rand": { 6545 - "version": "7.0.1", 6546 - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", 6547 - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", 6548 - "dev": true, 6549 - "funding": [ 6550 - { 6551 - "type": "individual", 6552 - "url": "https://github.com/sponsors/dubzzz" 6553 - }, 6554 - { 6555 - "type": "opencollective", 6556 - "url": "https://opencollective.com/fast-check" 6557 - } 6558 - ], 6559 - "license": "MIT" 6560 - }, 6561 - "node_modules/qs": { 6562 - "version": "6.14.0", 6563 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", 6564 - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 6565 - "license": "BSD-3-Clause", 6566 - "dependencies": { 6567 - "side-channel": "^1.1.0" 6568 - }, 6569 - "engines": { 6570 - "node": ">=0.6" 6571 - }, 6572 - "funding": { 6573 - "url": "https://github.com/sponsors/ljharb" 6574 - } 6575 - }, 6576 - "node_modules/quick-format-unescaped": { 6577 - "version": "4.0.4", 6578 - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 6579 - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", 6580 - "license": "MIT" 6581 - }, 6582 - "node_modules/random-bytes": { 6583 - "version": "1.0.0", 6584 - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", 6585 - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", 6586 - "license": "MIT", 6587 - "engines": { 6588 - "node": ">= 0.8" 6589 - } 6590 - }, 6591 - "node_modules/range-parser": { 6592 - "version": "1.2.1", 6593 - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 6594 - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 6595 - "license": "MIT", 6596 - "engines": { 6597 - "node": ">= 0.6" 6598 - } 6599 - }, 6600 - "node_modules/rate-limiter-flexible": { 6601 - "version": "2.4.2", 6602 - "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.4.2.tgz", 6603 - "integrity": "sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw==", 6604 - "license": "ISC" 6605 - }, 6606 - "node_modules/raw-body": { 6607 - "version": "3.0.0", 6608 - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", 6609 - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", 6610 - "license": "MIT", 6611 - "dependencies": { 6612 - "bytes": "3.1.2", 6613 - "http-errors": "2.0.0", 6614 - "iconv-lite": "0.6.3", 6615 - "unpipe": "1.0.0" 6616 - }, 6617 - "engines": { 6618 - "node": ">= 0.8" 6619 - } 6620 - }, 6621 - "node_modules/rc": { 6622 - "version": "1.2.8", 6623 - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 6624 - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 6625 - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", 6626 - "dependencies": { 6627 - "deep-extend": "^0.6.0", 6628 - "ini": "~1.3.0", 6629 - "minimist": "^1.2.0", 6630 - "strip-json-comments": "~2.0.1" 6631 - }, 6632 - "bin": { 6633 - "rc": "cli.js" 6634 - } 6635 - }, 6636 - "node_modules/react-is": { 6637 - "version": "18.3.1", 6638 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", 6639 - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", 6640 - "dev": true, 6641 - "license": "MIT" 6642 - }, 6643 - "node_modules/readable-stream": { 6644 - "version": "3.6.2", 6645 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 6646 - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 6647 - "license": "MIT", 6648 - "dependencies": { 6649 - "inherits": "^2.0.3", 6650 - "string_decoder": "^1.1.1", 6651 - "util-deprecate": "^1.0.1" 6652 - }, 6653 - "engines": { 6654 - "node": ">= 6" 6655 - } 6656 - }, 6657 - "node_modules/real-require": { 6658 - "version": "0.2.0", 6659 - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", 6660 - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", 6661 - "license": "MIT", 6662 - "engines": { 6663 - "node": ">= 12.13.0" 6664 - } 6665 - }, 6666 - "node_modules/require-directory": { 6667 - "version": "2.1.1", 6668 - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 6669 - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 6670 - "dev": true, 6671 - "license": "MIT", 6672 - "engines": { 6673 - "node": ">=0.10.0" 6674 - } 6675 - }, 6676 - "node_modules/resolve-cwd": { 6677 - "version": "3.0.0", 6678 - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 6679 - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 6680 - "dev": true, 6681 - "license": "MIT", 6682 - "dependencies": { 6683 - "resolve-from": "^5.0.0" 6684 - }, 6685 - "engines": { 6686 - "node": ">=8" 6687 - } 6688 - }, 6689 - "node_modules/resolve-from": { 6690 - "version": "5.0.0", 6691 - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 6692 - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 6693 - "dev": true, 6694 - "license": "MIT", 6695 - "engines": { 6696 - "node": ">=8" 6697 - } 6698 - }, 6699 - "node_modules/resolve-pkg-maps": { 6700 - "version": "1.0.0", 6701 - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 6702 - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 6703 - "license": "MIT", 6704 - "funding": { 6705 - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 6706 - } 6707 - }, 6708 - "node_modules/router": { 6709 - "version": "2.2.0", 6710 - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", 6711 - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", 6712 - "license": "MIT", 6713 - "dependencies": { 6714 - "debug": "^4.4.0", 6715 - "depd": "^2.0.0", 6716 - "is-promise": "^4.0.0", 6717 - "parseurl": "^1.3.3", 6718 - "path-to-regexp": "^8.0.0" 6719 - }, 6720 - "engines": { 6721 - "node": ">= 18" 6722 - } 6723 - }, 6724 - "node_modules/rxjs": { 6725 - "version": "7.8.2", 6726 - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", 6727 - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", 6728 - "dev": true, 6729 - "license": "Apache-2.0", 6730 - "dependencies": { 6731 - "tslib": "^2.1.0" 6732 - } 6733 - }, 6734 - "node_modules/safe-buffer": { 6735 - "version": "5.2.1", 6736 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 6737 - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 6738 - "funding": [ 6739 - { 6740 - "type": "github", 6741 - "url": "https://github.com/sponsors/feross" 6742 - }, 6743 - { 6744 - "type": "patreon", 6745 - "url": "https://www.patreon.com/feross" 6746 - }, 6747 - { 6748 - "type": "consulting", 6749 - "url": "https://feross.org/support" 6750 - } 6751 - ], 6752 - "license": "MIT" 6753 - }, 6754 - "node_modules/safe-stable-stringify": { 6755 - "version": "2.5.0", 6756 - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", 6757 - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", 6758 - "license": "MIT", 6759 - "engines": { 6760 - "node": ">=10" 6761 - } 6762 - }, 6763 - "node_modules/safer-buffer": { 6764 - "version": "2.1.2", 6765 - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 6766 - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 6767 - "license": "MIT" 6768 - }, 6769 - "node_modules/semver": { 6770 - "version": "7.7.2", 6771 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", 6772 - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", 6773 - "license": "ISC", 6774 - "bin": { 6775 - "semver": "bin/semver.js" 6776 - }, 6777 - "engines": { 6778 - "node": ">=10" 6779 - } 6780 - }, 6781 - "node_modules/send": { 6782 - "version": "1.2.0", 6783 - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", 6784 - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", 6785 - "license": "MIT", 6786 - "dependencies": { 6787 - "debug": "^4.3.5", 6788 - "encodeurl": "^2.0.0", 6789 - "escape-html": "^1.0.3", 6790 - "etag": "^1.8.1", 6791 - "fresh": "^2.0.0", 6792 - "http-errors": "^2.0.0", 6793 - "mime-types": "^3.0.1", 6794 - "ms": "^2.1.3", 6795 - "on-finished": "^2.4.1", 6796 - "range-parser": "^1.2.1", 6797 - "statuses": "^2.0.1" 6798 - }, 6799 - "engines": { 6800 - "node": ">= 18" 6801 - } 6802 - }, 6803 - "node_modules/serve-static": { 6804 - "version": "2.2.0", 6805 - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", 6806 - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", 6807 - "license": "MIT", 6808 - "dependencies": { 6809 - "encodeurl": "^2.0.0", 6810 - "escape-html": "^1.0.3", 6811 - "parseurl": "^1.3.3", 6812 - "send": "^1.2.0" 6813 - }, 6814 - "engines": { 6815 - "node": ">= 18" 6816 - } 6817 - }, 6818 - "node_modules/setprototypeof": { 6819 - "version": "1.2.0", 6820 - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 6821 - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 6822 - "license": "ISC" 6823 - }, 6824 - "node_modules/shebang-command": { 6825 - "version": "2.0.0", 6826 - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 6827 - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 6828 - "dev": true, 6829 - "license": "MIT", 6830 - "dependencies": { 6831 - "shebang-regex": "^3.0.0" 6832 - }, 6833 - "engines": { 6834 - "node": ">=8" 6835 - } 6836 - }, 6837 - "node_modules/shebang-regex": { 6838 - "version": "3.0.0", 6839 - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 6840 - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 6841 - "dev": true, 6842 - "license": "MIT", 6843 - "engines": { 6844 - "node": ">=8" 6845 - } 6846 - }, 6847 - "node_modules/shell-quote": { 6848 - "version": "1.8.3", 6849 - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", 6850 - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", 6851 - "dev": true, 6852 - "license": "MIT", 6853 - "engines": { 6854 - "node": ">= 0.4" 6855 - }, 6856 - "funding": { 6857 - "url": "https://github.com/sponsors/ljharb" 6858 - } 6859 - }, 6860 - "node_modules/side-channel": { 6861 - "version": "1.1.0", 6862 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 6863 - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 6864 - "license": "MIT", 6865 - "dependencies": { 6866 - "es-errors": "^1.3.0", 6867 - "object-inspect": "^1.13.3", 6868 - "side-channel-list": "^1.0.0", 6869 - "side-channel-map": "^1.0.1", 6870 - "side-channel-weakmap": "^1.0.2" 6871 - }, 6872 - "engines": { 6873 - "node": ">= 0.4" 6874 - }, 6875 - "funding": { 6876 - "url": "https://github.com/sponsors/ljharb" 6877 - } 6878 - }, 6879 - "node_modules/side-channel-list": { 6880 - "version": "1.0.0", 6881 - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 6882 - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 6883 - "license": "MIT", 6884 - "dependencies": { 6885 - "es-errors": "^1.3.0", 6886 - "object-inspect": "^1.13.3" 6887 - }, 6888 - "engines": { 6889 - "node": ">= 0.4" 6890 - }, 6891 - "funding": { 6892 - "url": "https://github.com/sponsors/ljharb" 6893 - } 6894 - }, 6895 - "node_modules/side-channel-map": { 6896 - "version": "1.0.1", 6897 - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 6898 - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 6899 - "license": "MIT", 6900 - "dependencies": { 6901 - "call-bound": "^1.0.2", 6902 - "es-errors": "^1.3.0", 6903 - "get-intrinsic": "^1.2.5", 6904 - "object-inspect": "^1.13.3" 6905 - }, 6906 - "engines": { 6907 - "node": ">= 0.4" 6908 - }, 6909 - "funding": { 6910 - "url": "https://github.com/sponsors/ljharb" 6911 - } 6912 - }, 6913 - "node_modules/side-channel-weakmap": { 6914 - "version": "1.0.2", 6915 - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 6916 - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 6917 - "license": "MIT", 6918 - "dependencies": { 6919 - "call-bound": "^1.0.2", 6920 - "es-errors": "^1.3.0", 6921 - "get-intrinsic": "^1.2.5", 6922 - "object-inspect": "^1.13.3", 6923 - "side-channel-map": "^1.0.1" 6924 - }, 6925 - "engines": { 6926 - "node": ">= 0.4" 6927 - }, 6928 - "funding": { 6929 - "url": "https://github.com/sponsors/ljharb" 6930 - } 6931 - }, 6932 - "node_modules/signal-exit": { 6933 - "version": "4.1.0", 6934 - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 6935 - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 6936 - "dev": true, 6937 - "license": "ISC", 6938 - "engines": { 6939 - "node": ">=14" 6940 - }, 6941 - "funding": { 6942 - "url": "https://github.com/sponsors/isaacs" 6943 - } 6944 - }, 6945 - "node_modules/simple-concat": { 6946 - "version": "1.0.1", 6947 - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 6948 - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 6949 - "funding": [ 6950 - { 6951 - "type": "github", 6952 - "url": "https://github.com/sponsors/feross" 6953 - }, 6954 - { 6955 - "type": "patreon", 6956 - "url": "https://www.patreon.com/feross" 6957 - }, 6958 - { 6959 - "type": "consulting", 6960 - "url": "https://feross.org/support" 6961 - } 6962 - ], 6963 - "license": "MIT" 6964 - }, 6965 - "node_modules/simple-get": { 6966 - "version": "4.0.1", 6967 - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", 6968 - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", 6969 - "funding": [ 6970 - { 6971 - "type": "github", 6972 - "url": "https://github.com/sponsors/feross" 6973 - }, 6974 - { 6975 - "type": "patreon", 6976 - "url": "https://www.patreon.com/feross" 6977 - }, 6978 - { 6979 - "type": "consulting", 6980 - "url": "https://feross.org/support" 6981 - } 6982 - ], 6983 - "license": "MIT", 6984 - "dependencies": { 6985 - "decompress-response": "^6.0.0", 6986 - "once": "^1.3.1", 6987 - "simple-concat": "^1.0.0" 6988 - } 6989 - }, 6990 - "node_modules/slash": { 6991 - "version": "3.0.0", 6992 - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 6993 - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 6994 - "dev": true, 6995 - "license": "MIT", 6996 - "engines": { 6997 - "node": ">=8" 6998 - } 6999 - }, 7000 - "node_modules/sonic-boom": { 7001 - "version": "3.8.1", 7002 - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", 7003 - "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", 7004 - "license": "MIT", 7005 - "dependencies": { 7006 - "atomic-sleep": "^1.0.0" 7007 - } 7008 - }, 7009 - "node_modules/source-map": { 7010 - "version": "0.6.1", 7011 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 7012 - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 7013 - "dev": true, 7014 - "license": "BSD-3-Clause", 7015 - "engines": { 7016 - "node": ">=0.10.0" 7017 - } 7018 - }, 7019 - "node_modules/source-map-support": { 7020 - "version": "0.5.13", 7021 - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", 7022 - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", 7023 - "dev": true, 7024 - "license": "MIT", 7025 - "dependencies": { 7026 - "buffer-from": "^1.0.0", 7027 - "source-map": "^0.6.0" 7028 - } 7029 - }, 7030 - "node_modules/split2": { 7031 - "version": "4.2.0", 7032 - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 7033 - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 7034 - "license": "ISC", 7035 - "engines": { 7036 - "node": ">= 10.x" 7037 - } 7038 - }, 7039 - "node_modules/sprintf-js": { 7040 - "version": "1.0.3", 7041 - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 7042 - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 7043 - "dev": true, 7044 - "license": "BSD-3-Clause" 7045 - }, 7046 - "node_modules/stack-utils": { 7047 - "version": "2.0.6", 7048 - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", 7049 - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", 7050 - "dev": true, 7051 - "license": "MIT", 7052 - "dependencies": { 7053 - "escape-string-regexp": "^2.0.0" 7054 - }, 7055 - "engines": { 7056 - "node": ">=10" 7057 - } 7058 - }, 7059 - "node_modules/statuses": { 7060 - "version": "2.0.2", 7061 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", 7062 - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", 7063 - "license": "MIT", 7064 - "engines": { 7065 - "node": ">= 0.8" 7066 - } 7067 - }, 7068 - "node_modules/string_decoder": { 7069 - "version": "1.3.0", 7070 - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 7071 - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 7072 - "license": "MIT", 7073 - "dependencies": { 7074 - "safe-buffer": "~5.2.0" 7075 - } 7076 - }, 7077 - "node_modules/string-length": { 7078 - "version": "4.0.2", 7079 - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", 7080 - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", 7081 - "dev": true, 7082 - "license": "MIT", 7083 - "dependencies": { 7084 - "char-regex": "^1.0.2", 7085 - "strip-ansi": "^6.0.0" 7086 - }, 7087 - "engines": { 7088 - "node": ">=10" 7089 - } 7090 - }, 7091 - "node_modules/string-width": { 7092 - "version": "4.2.3", 7093 - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 7094 - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 7095 - "dev": true, 7096 - "license": "MIT", 7097 - "dependencies": { 7098 - "emoji-regex": "^8.0.0", 7099 - "is-fullwidth-code-point": "^3.0.0", 7100 - "strip-ansi": "^6.0.1" 7101 - }, 7102 - "engines": { 7103 - "node": ">=8" 7104 - } 7105 - }, 7106 - "node_modules/string-width-cjs": { 7107 - "name": "string-width", 7108 - "version": "4.2.3", 7109 - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 7110 - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 7111 - "dev": true, 7112 - "license": "MIT", 7113 - "dependencies": { 7114 - "emoji-regex": "^8.0.0", 7115 - "is-fullwidth-code-point": "^3.0.0", 7116 - "strip-ansi": "^6.0.1" 7117 - }, 7118 - "engines": { 7119 - "node": ">=8" 7120 - } 7121 - }, 7122 - "node_modules/strip-ansi": { 7123 - "version": "6.0.1", 7124 - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 7125 - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 7126 - "dev": true, 7127 - "license": "MIT", 7128 - "dependencies": { 7129 - "ansi-regex": "^5.0.1" 7130 - }, 7131 - "engines": { 7132 - "node": ">=8" 7133 - } 7134 - }, 7135 - "node_modules/strip-ansi-cjs": { 7136 - "name": "strip-ansi", 7137 - "version": "6.0.1", 7138 - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 7139 - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 7140 - "dev": true, 7141 - "license": "MIT", 7142 - "dependencies": { 7143 - "ansi-regex": "^5.0.1" 7144 - }, 7145 - "engines": { 7146 - "node": ">=8" 7147 - } 7148 - }, 7149 - "node_modules/strip-bom": { 7150 - "version": "4.0.0", 7151 - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 7152 - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 7153 - "dev": true, 7154 - "license": "MIT", 7155 - "engines": { 7156 - "node": ">=8" 7157 - } 7158 - }, 7159 - "node_modules/strip-final-newline": { 7160 - "version": "2.0.0", 7161 - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 7162 - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 7163 - "dev": true, 7164 - "license": "MIT", 7165 - "engines": { 7166 - "node": ">=6" 7167 - } 7168 - }, 7169 - "node_modules/strip-json-comments": { 7170 - "version": "2.0.1", 7171 - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 7172 - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 7173 - "license": "MIT", 7174 - "engines": { 7175 - "node": ">=0.10.0" 7176 - } 7177 - }, 7178 - "node_modules/superagent": { 7179 - "version": "10.2.1", 7180 - "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.1.tgz", 7181 - "integrity": "sha512-O+PCv11lgTNJUzy49teNAWLjBZfc+A1enOwTpLlH6/rsvKcTwcdTT8m9azGkVqM7HBl5jpyZ7KTPhHweokBcdg==", 7182 - "dev": true, 7183 - "license": "MIT", 7184 - "dependencies": { 7185 - "component-emitter": "^1.3.0", 7186 - "cookiejar": "^2.1.4", 7187 - "debug": "^4.3.4", 7188 - "fast-safe-stringify": "^2.1.1", 7189 - "form-data": "^4.0.0", 7190 - "formidable": "^3.5.4", 7191 - "methods": "^1.1.2", 7192 - "mime": "2.6.0", 7193 - "qs": "^6.11.0" 7194 - }, 7195 - "engines": { 7196 - "node": ">=14.18.0" 7197 - } 7198 - }, 7199 - "node_modules/superagent/node_modules/mime": { 7200 - "version": "2.6.0", 7201 - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 7202 - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", 7203 - "dev": true, 7204 - "license": "MIT", 7205 - "bin": { 7206 - "mime": "cli.js" 7207 - }, 7208 - "engines": { 7209 - "node": ">=4.0.0" 7210 - } 7211 - }, 7212 - "node_modules/supertest": { 7213 - "version": "7.1.1", 7214 - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.1.tgz", 7215 - "integrity": "sha512-aI59HBTlG9e2wTjxGJV+DygfNLgnWbGdZxiA/sgrnNNikIW8lbDvCtF6RnhZoJ82nU7qv7ZLjrvWqCEm52fAmw==", 7216 - "dev": true, 7217 - "license": "MIT", 7218 - "dependencies": { 7219 - "methods": "^1.1.2", 7220 - "superagent": "^10.2.1" 7221 - }, 7222 - "engines": { 7223 - "node": ">=14.18.0" 7224 - } 7225 - }, 7226 - "node_modules/supports-color": { 7227 - "version": "7.2.0", 7228 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 7229 - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 7230 - "license": "MIT", 7231 - "dependencies": { 7232 - "has-flag": "^4.0.0" 7233 - }, 7234 - "engines": { 7235 - "node": ">=8" 7236 - } 7237 - }, 7238 - "node_modules/synckit": { 7239 - "version": "0.11.8", 7240 - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", 7241 - "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", 7242 - "dev": true, 7243 - "license": "MIT", 7244 - "dependencies": { 7245 - "@pkgr/core": "^0.2.4" 7246 - }, 7247 - "engines": { 7248 - "node": "^14.18.0 || >=16.0.0" 7249 - }, 7250 - "funding": { 7251 - "url": "https://opencollective.com/synckit" 7252 - } 7253 - }, 7254 - "node_modules/tar-fs": { 7255 - "version": "2.1.3", 7256 - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", 7257 - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", 7258 - "license": "MIT", 7259 - "dependencies": { 7260 - "chownr": "^1.1.1", 7261 - "mkdirp-classic": "^0.5.2", 7262 - "pump": "^3.0.0", 7263 - "tar-stream": "^2.1.4" 7264 - } 7265 - }, 7266 - "node_modules/tar-stream": { 7267 - "version": "2.2.0", 7268 - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 7269 - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 7270 - "license": "MIT", 7271 - "dependencies": { 7272 - "bl": "^4.0.3", 7273 - "end-of-stream": "^1.4.1", 7274 - "fs-constants": "^1.0.0", 7275 - "inherits": "^2.0.3", 7276 - "readable-stream": "^3.1.1" 7277 - }, 7278 - "engines": { 7279 - "node": ">=6" 7280 - } 7281 - }, 7282 - "node_modules/test-exclude": { 7283 - "version": "6.0.0", 7284 - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 7285 - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 7286 - "dev": true, 7287 - "license": "ISC", 7288 - "dependencies": { 7289 - "@istanbuljs/schema": "^0.1.2", 7290 - "glob": "^7.1.4", 7291 - "minimatch": "^3.0.4" 7292 - }, 7293 - "engines": { 7294 - "node": ">=8" 7295 - } 7296 - }, 7297 - "node_modules/test-exclude/node_modules/glob": { 7298 - "version": "7.2.3", 7299 - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 7300 - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 7301 - "deprecated": "Glob versions prior to v9 are no longer supported", 7302 - "dev": true, 7303 - "license": "ISC", 7304 - "dependencies": { 7305 - "fs.realpath": "^1.0.0", 7306 - "inflight": "^1.0.4", 7307 - "inherits": "2", 7308 - "minimatch": "^3.1.1", 7309 - "once": "^1.3.0", 7310 - "path-is-absolute": "^1.0.0" 7311 - }, 7312 - "engines": { 7313 - "node": "*" 7314 - }, 7315 - "funding": { 7316 - "url": "https://github.com/sponsors/isaacs" 7317 - } 7318 - }, 7319 - "node_modules/thread-stream": { 7320 - "version": "2.7.0", 7321 - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", 7322 - "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", 7323 - "license": "MIT", 7324 - "dependencies": { 7325 - "real-require": "^0.2.0" 7326 - } 7327 - }, 7328 - "node_modules/tlds": { 7329 - "version": "1.259.0", 7330 - "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.259.0.tgz", 7331 - "integrity": "sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==", 7332 - "license": "MIT", 7333 - "bin": { 7334 - "tlds": "bin.js" 7335 - } 7336 - }, 7337 - "node_modules/tmpl": { 7338 - "version": "1.0.5", 7339 - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", 7340 - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", 7341 - "dev": true, 7342 - "license": "BSD-3-Clause" 7343 - }, 7344 - "node_modules/to-regex-range": { 7345 - "version": "5.0.1", 7346 - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 7347 - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 7348 - "dev": true, 7349 - "license": "MIT", 7350 - "dependencies": { 7351 - "is-number": "^7.0.0" 7352 - }, 7353 - "engines": { 7354 - "node": ">=8.0" 7355 - } 7356 - }, 7357 - "node_modules/toidentifier": { 7358 - "version": "1.0.1", 7359 - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 7360 - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 7361 - "license": "MIT", 7362 - "engines": { 7363 - "node": ">=0.6" 7364 - } 7365 - }, 7366 - "node_modules/tree-kill": { 7367 - "version": "1.2.2", 7368 - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 7369 - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 7370 - "dev": true, 7371 - "license": "MIT", 7372 - "bin": { 7373 - "tree-kill": "cli.js" 7374 - } 7375 - }, 7376 - "node_modules/ts-jest": { 7377 - "version": "29.4.0", 7378 - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", 7379 - "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", 7380 - "dev": true, 7381 - "license": "MIT", 7382 - "dependencies": { 7383 - "bs-logger": "^0.2.6", 7384 - "ejs": "^3.1.10", 7385 - "fast-json-stable-stringify": "^2.1.0", 7386 - "json5": "^2.2.3", 7387 - "lodash.memoize": "^4.1.2", 7388 - "make-error": "^1.3.6", 7389 - "semver": "^7.7.2", 7390 - "type-fest": "^4.41.0", 7391 - "yargs-parser": "^21.1.1" 7392 - }, 7393 - "bin": { 7394 - "ts-jest": "cli.js" 7395 - }, 7396 - "engines": { 7397 - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" 7398 - }, 7399 - "peerDependencies": { 7400 - "@babel/core": ">=7.0.0-beta.0 <8", 7401 - "@jest/transform": "^29.0.0 || ^30.0.0", 7402 - "@jest/types": "^29.0.0 || ^30.0.0", 7403 - "babel-jest": "^29.0.0 || ^30.0.0", 7404 - "jest": "^29.0.0 || ^30.0.0", 7405 - "jest-util": "^29.0.0 || ^30.0.0", 7406 - "typescript": ">=4.3 <6" 7407 - }, 7408 - "peerDependenciesMeta": { 7409 - "@babel/core": { 7410 - "optional": true 7411 - }, 7412 - "@jest/transform": { 7413 - "optional": true 7414 - }, 7415 - "@jest/types": { 7416 - "optional": true 7417 - }, 7418 - "babel-jest": { 7419 - "optional": true 7420 - }, 7421 - "esbuild": { 7422 - "optional": true 7423 - }, 7424 - "jest-util": { 7425 - "optional": true 7426 - } 7427 - } 7428 - }, 7429 - "node_modules/ts-jest/node_modules/type-fest": { 7430 - "version": "4.41.0", 7431 - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", 7432 - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", 7433 - "dev": true, 7434 - "license": "(MIT OR CC0-1.0)", 7435 - "engines": { 7436 - "node": ">=16" 7437 - }, 7438 - "funding": { 7439 - "url": "https://github.com/sponsors/sindresorhus" 7440 - } 7441 - }, 7442 - "node_modules/tslib": { 7443 - "version": "2.8.1", 7444 - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 7445 - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 7446 - "dev": true, 7447 - "license": "0BSD" 7448 - }, 7449 - "node_modules/tsx": { 7450 - "version": "4.20.3", 7451 - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", 7452 - "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", 7453 - "license": "MIT", 7454 - "dependencies": { 7455 - "esbuild": "~0.25.0", 7456 - "get-tsconfig": "^4.7.5" 7457 - }, 7458 - "bin": { 7459 - "tsx": "dist/cli.mjs" 7460 - }, 7461 - "engines": { 7462 - "node": ">=18.0.0" 7463 - }, 7464 - "optionalDependencies": { 7465 - "fsevents": "~2.3.3" 7466 - } 7467 - }, 7468 - "node_modules/tunnel-agent": { 7469 - "version": "0.6.0", 7470 - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 7471 - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 7472 - "license": "Apache-2.0", 7473 - "dependencies": { 7474 - "safe-buffer": "^5.0.1" 7475 - }, 7476 - "engines": { 7477 - "node": "*" 7478 - } 7479 - }, 7480 - "node_modules/type-detect": { 7481 - "version": "4.0.8", 7482 - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 7483 - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 7484 - "dev": true, 7485 - "license": "MIT", 7486 - "engines": { 7487 - "node": ">=4" 7488 - } 7489 - }, 7490 - "node_modules/type-fest": { 7491 - "version": "0.21.3", 7492 - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 7493 - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 7494 - "dev": true, 7495 - "license": "(MIT OR CC0-1.0)", 7496 - "engines": { 7497 - "node": ">=10" 7498 - }, 7499 - "funding": { 7500 - "url": "https://github.com/sponsors/sindresorhus" 7501 - } 7502 - }, 7503 - "node_modules/type-is": { 7504 - "version": "2.0.1", 7505 - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", 7506 - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", 7507 - "license": "MIT", 7508 - "dependencies": { 7509 - "content-type": "^1.0.5", 7510 - "media-typer": "^1.1.0", 7511 - "mime-types": "^3.0.0" 7512 - }, 7513 - "engines": { 7514 - "node": ">= 0.6" 7515 - } 7516 - }, 7517 - "node_modules/typescript": { 7518 - "version": "5.8.3", 7519 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 7520 - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 7521 - "license": "Apache-2.0", 7522 - "bin": { 7523 - "tsc": "bin/tsc", 7524 - "tsserver": "bin/tsserver" 7525 - }, 7526 - "engines": { 7527 - "node": ">=14.17" 7528 - } 7529 - }, 7530 - "node_modules/uid-safe": { 7531 - "version": "2.1.5", 7532 - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", 7533 - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", 7534 - "license": "MIT", 7535 - "dependencies": { 7536 - "random-bytes": "~1.0.0" 7537 - }, 7538 - "engines": { 7539 - "node": ">= 0.8" 7540 - } 7541 - }, 7542 - "node_modules/uint8arrays": { 7543 - "version": "3.0.0", 7544 - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", 7545 - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 7546 - "license": "MIT", 7547 - "dependencies": { 7548 - "multiformats": "^9.4.2" 7549 - } 7550 - }, 7551 - "node_modules/uint8arrays/node_modules/multiformats": { 7552 - "version": "9.9.0", 7553 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 7554 - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 7555 - "license": "(Apache-2.0 AND MIT)" 7556 - }, 7557 - "node_modules/undici-types": { 7558 - "version": "7.8.0", 7559 - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", 7560 - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", 7561 - "license": "MIT" 7562 - }, 7563 - "node_modules/unpipe": { 7564 - "version": "1.0.0", 7565 - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 7566 - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 7567 - "license": "MIT", 7568 - "engines": { 7569 - "node": ">= 0.8" 7570 - } 7571 - }, 7572 - "node_modules/unrs-resolver": { 7573 - "version": "1.9.0", 7574 - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.0.tgz", 7575 - "integrity": "sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==", 7576 - "dev": true, 7577 - "hasInstallScript": true, 7578 - "license": "MIT", 7579 - "dependencies": { 7580 - "napi-postinstall": "^0.2.2" 7581 - }, 7582 - "funding": { 7583 - "url": "https://opencollective.com/unrs-resolver" 7584 - }, 7585 - "optionalDependencies": { 7586 - "@unrs/resolver-binding-android-arm-eabi": "1.9.0", 7587 - "@unrs/resolver-binding-android-arm64": "1.9.0", 7588 - "@unrs/resolver-binding-darwin-arm64": "1.9.0", 7589 - "@unrs/resolver-binding-darwin-x64": "1.9.0", 7590 - "@unrs/resolver-binding-freebsd-x64": "1.9.0", 7591 - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.0", 7592 - "@unrs/resolver-binding-linux-arm-musleabihf": "1.9.0", 7593 - "@unrs/resolver-binding-linux-arm64-gnu": "1.9.0", 7594 - "@unrs/resolver-binding-linux-arm64-musl": "1.9.0", 7595 - "@unrs/resolver-binding-linux-ppc64-gnu": "1.9.0", 7596 - "@unrs/resolver-binding-linux-riscv64-gnu": "1.9.0", 7597 - "@unrs/resolver-binding-linux-riscv64-musl": "1.9.0", 7598 - "@unrs/resolver-binding-linux-s390x-gnu": "1.9.0", 7599 - "@unrs/resolver-binding-linux-x64-gnu": "1.9.0", 7600 - "@unrs/resolver-binding-linux-x64-musl": "1.9.0", 7601 - "@unrs/resolver-binding-wasm32-wasi": "1.9.0", 7602 - "@unrs/resolver-binding-win32-arm64-msvc": "1.9.0", 7603 - "@unrs/resolver-binding-win32-ia32-msvc": "1.9.0", 7604 - "@unrs/resolver-binding-win32-x64-msvc": "1.9.0" 7605 - } 7606 - }, 7607 - "node_modules/update-browserslist-db": { 7608 - "version": "1.1.3", 7609 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", 7610 - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 7611 - "dev": true, 7612 - "funding": [ 7613 - { 7614 - "type": "opencollective", 7615 - "url": "https://opencollective.com/browserslist" 7616 - }, 7617 - { 7618 - "type": "tidelift", 7619 - "url": "https://tidelift.com/funding/github/npm/browserslist" 7620 - }, 7621 - { 7622 - "type": "github", 7623 - "url": "https://github.com/sponsors/ai" 7624 - } 7625 - ], 7626 - "license": "MIT", 7627 - "dependencies": { 7628 - "escalade": "^3.2.0", 7629 - "picocolors": "^1.1.1" 7630 - }, 7631 - "bin": { 7632 - "update-browserslist-db": "cli.js" 7633 - }, 7634 - "peerDependencies": { 7635 - "browserslist": ">= 4.21.0" 7636 - } 7637 - }, 7638 - "node_modules/util-deprecate": { 7639 - "version": "1.0.2", 7640 - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 7641 - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 7642 - "license": "MIT" 7643 - }, 7644 - "node_modules/utils-merge": { 7645 - "version": "1.0.1", 7646 - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 7647 - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 7648 - "license": "MIT", 7649 - "engines": { 7650 - "node": ">= 0.4.0" 7651 - } 7652 - }, 7653 - "node_modules/v8-to-istanbul": { 7654 - "version": "9.3.0", 7655 - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", 7656 - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", 7657 - "dev": true, 7658 - "license": "ISC", 7659 - "dependencies": { 7660 - "@jridgewell/trace-mapping": "^0.3.12", 7661 - "@types/istanbul-lib-coverage": "^2.0.1", 7662 - "convert-source-map": "^2.0.0" 7663 - }, 7664 - "engines": { 7665 - "node": ">=10.12.0" 7666 - } 7667 - }, 7668 - "node_modules/varint": { 7669 - "version": "6.0.0", 7670 - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", 7671 - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", 7672 - "license": "MIT" 7673 - }, 7674 - "node_modules/vary": { 7675 - "version": "1.1.2", 7676 - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 7677 - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 7678 - "license": "MIT", 7679 - "engines": { 7680 - "node": ">= 0.8" 7681 - } 7682 - }, 7683 - "node_modules/walker": { 7684 - "version": "1.0.8", 7685 - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", 7686 - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", 7687 - "dev": true, 7688 - "license": "Apache-2.0", 7689 - "dependencies": { 7690 - "makeerror": "1.0.12" 7691 - } 7692 - }, 7693 - "node_modules/which": { 7694 - "version": "2.0.2", 7695 - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 7696 - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 7697 - "dev": true, 7698 - "license": "ISC", 7699 - "dependencies": { 7700 - "isexe": "^2.0.0" 7701 - }, 7702 - "bin": { 7703 - "node-which": "bin/node-which" 7704 - }, 7705 - "engines": { 7706 - "node": ">= 8" 7707 - } 7708 - }, 7709 - "node_modules/wrap-ansi": { 7710 - "version": "7.0.0", 7711 - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 7712 - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 7713 - "dev": true, 7714 - "license": "MIT", 7715 - "dependencies": { 7716 - "ansi-styles": "^4.0.0", 7717 - "string-width": "^4.1.0", 7718 - "strip-ansi": "^6.0.0" 7719 - }, 7720 - "engines": { 7721 - "node": ">=10" 7722 - }, 7723 - "funding": { 7724 - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 7725 - } 7726 - }, 7727 - "node_modules/wrap-ansi-cjs": { 7728 - "name": "wrap-ansi", 7729 - "version": "7.0.0", 7730 - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 7731 - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 7732 - "dev": true, 7733 - "license": "MIT", 7734 - "dependencies": { 7735 - "ansi-styles": "^4.0.0", 7736 - "string-width": "^4.1.0", 7737 - "strip-ansi": "^6.0.0" 7738 - }, 7739 - "engines": { 7740 - "node": ">=10" 7741 - }, 7742 - "funding": { 7743 - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 7744 - } 7745 - }, 7746 - "node_modules/wrappy": { 7747 - "version": "1.0.2", 7748 - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 7749 - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 7750 - "license": "ISC" 7751 - }, 7752 - "node_modules/write-file-atomic": { 7753 - "version": "5.0.1", 7754 - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 7755 - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 7756 - "dev": true, 7757 - "license": "ISC", 7758 - "dependencies": { 7759 - "imurmurhash": "^0.1.4", 7760 - "signal-exit": "^4.0.1" 7761 - }, 7762 - "engines": { 7763 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 7764 - } 7765 - }, 7766 - "node_modules/ws": { 7767 - "version": "8.18.2", 7768 - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", 7769 - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", 7770 - "license": "MIT", 7771 - "engines": { 7772 - "node": ">=10.0.0" 7773 - }, 7774 - "peerDependencies": { 7775 - "bufferutil": "^4.0.1", 7776 - "utf-8-validate": ">=5.0.2" 7777 - }, 7778 - "peerDependenciesMeta": { 7779 - "bufferutil": { 7780 - "optional": true 7781 - }, 7782 - "utf-8-validate": { 7783 - "optional": true 7784 - } 7785 - } 7786 - }, 7787 - "node_modules/y18n": { 7788 - "version": "5.0.8", 7789 - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 7790 - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 7791 - "dev": true, 7792 - "license": "ISC", 7793 - "engines": { 7794 - "node": ">=10" 7795 - } 7796 - }, 7797 - "node_modules/yallist": { 7798 - "version": "3.1.1", 7799 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 7800 - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 7801 - "dev": true, 7802 - "license": "ISC" 7803 - }, 7804 - "node_modules/yargs": { 7805 - "version": "17.7.2", 7806 - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 7807 - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 7808 - "dev": true, 7809 - "license": "MIT", 7810 - "dependencies": { 7811 - "cliui": "^8.0.1", 7812 - "escalade": "^3.1.1", 7813 - "get-caller-file": "^2.0.5", 7814 - "require-directory": "^2.1.1", 7815 - "string-width": "^4.2.3", 7816 - "y18n": "^5.0.5", 7817 - "yargs-parser": "^21.1.1" 7818 - }, 7819 - "engines": { 7820 - "node": ">=12" 7821 - } 7822 - }, 7823 - "node_modules/yargs-parser": { 7824 - "version": "21.1.1", 7825 - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 7826 - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 7827 - "dev": true, 7828 - "license": "ISC", 7829 - "engines": { 7830 - "node": ">=12" 7831 - } 7832 - }, 7833 - "node_modules/yocto-queue": { 7834 - "version": "1.2.1", 7835 - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", 7836 - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", 7837 - "license": "MIT", 7838 - "engines": { 7839 - "node": ">=12.20" 7840 - }, 7841 - "funding": { 7842 - "url": "https://github.com/sponsors/sindresorhus" 7843 - } 7844 - }, 7845 - "node_modules/zod": { 7846 - "version": "3.25.67", 7847 - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", 7848 - "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", 7849 - "license": "MIT", 7850 - "funding": { 7851 - "url": "https://github.com/sponsors/colinhacks" 7852 - } 7853 - } 7854 - } 7855 - }
-56
package.json
··· 1 - { 2 - "name": "blonk", 3 - "version": "1.0.0", 4 - "main": "index.js", 5 - "scripts": { 6 - "dev": "concurrently \"npm run server\" \"npm run client\"", 7 - "server": "tsx watch src/server.ts", 8 - "client": "cd client && npm run dev", 9 - "seed-vibes": "tsx src/seed-vibes.ts", 10 - "build": "tsc", 11 - "start": "node dist/index.js", 12 - "test": "jest", 13 - "test:watch": "jest --watch", 14 - "test:coverage": "jest --coverage", 15 - "test:unit": "jest tests/unit", 16 - "test:integration": "jest tests/integration" 17 - }, 18 - "keywords": [], 19 - "author": "", 20 - "license": "ISC", 21 - "description": "", 22 - "dependencies": { 23 - "@atproto/api": "^0.15.16", 24 - "@atproto/lexicon": "^0.4.11", 25 - "@atproto/repo": "^0.8.2", 26 - "@atproto/sync": "^0.1.26", 27 - "@ipld/car": "^5.4.2", 28 - "@skyware/firehose": "^0.5.1", 29 - "@types/better-sqlite3": "^7.6.13", 30 - "@types/cors": "^2.8.19", 31 - "@types/express": "^5.0.3", 32 - "@types/express-session": "^1.18.2", 33 - "@types/node": "^24.0.3", 34 - "@types/ws": "^8.18.1", 35 - "better-sqlite3": "^11.10.0", 36 - "cbor-x": "^1.6.0", 37 - "cors": "^2.8.5", 38 - "dotenv": "^16.5.0", 39 - "ejs": "^3.1.10", 40 - "express": "^5.1.0", 41 - "express-ejs-layouts": "^2.5.1", 42 - "express-session": "^1.18.1", 43 - "multiformats": "^13.3.7", 44 - "tsx": "^4.20.3", 45 - "typescript": "^5.8.3", 46 - "ws": "^8.18.2" 47 - }, 48 - "devDependencies": { 49 - "@types/jest": "^30.0.0", 50 - "@types/supertest": "^6.0.3", 51 - "concurrently": "^9.1.2", 52 - "jest": "^30.0.2", 53 - "supertest": "^7.1.1", 54 - "ts-jest": "^29.4.0" 55 - } 56 - }
-74
src/agent.js
··· 1 - "use strict"; 2 - var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 - if (k2 === undefined) k2 = k; 4 - var desc = Object.getOwnPropertyDescriptor(m, k); 5 - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 - desc = { enumerable: true, get: function() { return m[k]; } }; 7 - } 8 - Object.defineProperty(o, k2, desc); 9 - }) : (function(o, m, k, k2) { 10 - if (k2 === undefined) k2 = k; 11 - o[k2] = m[k]; 12 - })); 13 - var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 - Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 - }) : function(o, v) { 16 - o["default"] = v; 17 - }); 18 - var __importStar = (this && this.__importStar) || (function () { 19 - var ownKeys = function(o) { 20 - ownKeys = Object.getOwnPropertyNames || function (o) { 21 - var ar = []; 22 - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; 23 - return ar; 24 - }; 25 - return ownKeys(o); 26 - }; 27 - return function (mod) { 28 - if (mod && mod.__esModule) return mod; 29 - var result = {}; 30 - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); 31 - __setModuleDefault(result, mod); 32 - return result; 33 - }; 34 - })(); 35 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 36 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 37 - return new (P || (P = Promise))(function (resolve, reject) { 38 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 39 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 40 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 41 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 42 - }); 43 - }; 44 - Object.defineProperty(exports, "__esModule", { value: true }); 45 - exports.BlonkAgent = void 0; 46 - const api_1 = require("@atproto/api"); 47 - const dotenv = __importStar(require("dotenv")); 48 - dotenv.config(); 49 - class BlonkAgent { 50 - constructor() { 51 - this.agent = new api_1.BskyAgent({ 52 - service: process.env.ATP_SERVICE || 'https://bsky.social', 53 - }); 54 - } 55 - login() { 56 - return __awaiter(this, void 0, void 0, function* () { 57 - const identifier = process.env.ATP_IDENTIFIER; 58 - const password = process.env.ATP_PASSWORD; 59 - if (!identifier || !password) { 60 - throw new Error('Missing ATP_IDENTIFIER or ATP_PASSWORD in environment variables'); 61 - } 62 - yield this.agent.login({ 63 - identifier, 64 - password, 65 - }); 66 - console.log('Successfully authenticated with AT Protocol'); 67 - return this.agent; 68 - }); 69 - } 70 - getAgent() { 71 - return this.agent; 72 - } 73 - } 74 - exports.BlonkAgent = BlonkAgent;
-35
src/agent.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import * as dotenv from 'dotenv'; 3 - 4 - dotenv.config(); 5 - 6 - export class BlonkAgent { 7 - private agent: BskyAgent; 8 - 9 - constructor() { 10 - this.agent = new BskyAgent({ 11 - service: process.env.ATP_SERVICE || 'https://bsky.social', 12 - }); 13 - } 14 - 15 - async login() { 16 - const identifier = process.env.ATP_IDENTIFIER; 17 - const password = process.env.ATP_PASSWORD; 18 - 19 - if (!identifier || !password) { 20 - throw new Error('Missing ATP_IDENTIFIER or ATP_PASSWORD in environment variables'); 21 - } 22 - 23 - await this.agent.login({ 24 - identifier, 25 - password, 26 - }); 27 - 28 - console.log('Successfully authenticated with AT Protocol'); 29 - return this.agent; 30 - } 31 - 32 - getAgent() { 33 - return this.agent; 34 - } 35 - }
-62
src/blips.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.BlipManager = void 0; 13 - const schemas_1 = require("./schemas"); 14 - class BlipManager { 15 - constructor(agent) { 16 - this.agent = agent; 17 - } 18 - createBlip(title, body, url, tags, vibe) { 19 - return __awaiter(this, void 0, void 0, function* () { 20 - var _a; 21 - const blip = { 22 - title, 23 - body, 24 - url, 25 - tags, 26 - vibe, 27 - createdAt: new Date().toISOString(), 28 - fluffs: 0, 29 - }; 30 - const response = yield this.agent.com.atproto.repo.createRecord({ 31 - repo: (_a = this.agent.session) === null || _a === void 0 ? void 0 : _a.did, 32 - collection: schemas_1.BLIP_NSID, 33 - record: blip, 34 - }); 35 - console.log(`Created blip: ${title}`); 36 - return response.data.uri; 37 - }); 38 - } 39 - getBlips() { 40 - return __awaiter(this, arguments, void 0, function* (limit = 50) { 41 - var _a; 42 - const response = yield this.agent.com.atproto.repo.listRecords({ 43 - repo: (_a = this.agent.session) === null || _a === void 0 ? void 0 : _a.did, 44 - collection: schemas_1.BLIP_NSID, 45 - limit, 46 - }); 47 - return response.data.records.map(record => (Object.assign({ uri: record.uri, cid: record.cid }, record.value))); 48 - }); 49 - } 50 - getBlip(uri) { 51 - return __awaiter(this, void 0, void 0, function* () { 52 - const [repo, collection, rkey] = uri.replace('at://', '').split('/'); 53 - const response = yield this.agent.com.atproto.repo.getRecord({ 54 - repo, 55 - collection, 56 - rkey, 57 - }); 58 - return Object.assign({ uri, cid: response.data.cid }, response.data.value); 59 - }); 60 - } 61 - } 62 - exports.BlipManager = BlipManager;
-63
src/blips.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { BlonkBlip, BLIP_NSID } from './schemas'; 3 - 4 - export class BlipManager { 5 - constructor(private agent: BskyAgent) {} 6 - 7 - async createBlip( 8 - title: string, 9 - body?: string, 10 - url?: string, 11 - tags?: string[], 12 - vibe?: { uri: string; cid: string; name?: string } 13 - ): Promise<string> { 14 - const blip: BlonkBlip = { 15 - title, 16 - body, 17 - url, 18 - tags, 19 - vibe, 20 - createdAt: new Date().toISOString(), 21 - grooves: 0, 22 - }; 23 - 24 - const response = await this.agent.com.atproto.repo.createRecord({ 25 - repo: this.agent.session?.did!, 26 - collection: BLIP_NSID, 27 - record: blip, 28 - }); 29 - 30 - console.log(`Created blip: ${title}`); 31 - return response.data.uri; 32 - } 33 - 34 - async getBlips(limit: number = 50) { 35 - const response = await this.agent.com.atproto.repo.listRecords({ 36 - repo: this.agent.session?.did!, 37 - collection: BLIP_NSID, 38 - limit, 39 - }); 40 - 41 - return response.data.records.map(record => ({ 42 - uri: record.uri, 43 - cid: record.cid, 44 - ...record.value as BlonkBlip, 45 - })); 46 - } 47 - 48 - async getBlip(uri: string) { 49 - const [repo, collection, rkey] = uri.replace('at://', '').split('/'); 50 - 51 - const response = await this.agent.com.atproto.repo.getRecord({ 52 - repo, 53 - collection, 54 - rkey, 55 - }); 56 - 57 - return { 58 - uri, 59 - cid: response.data.cid, 60 - ...response.data.value as BlonkBlip, 61 - }; 62 - } 63 - }
-75
src/bluesky-monitor.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.BlueskyFirehoseMonitor = void 0; 13 - const sync_1 = require("@atproto/sync"); 14 - const vibe_monitor_1 = require("./vibe-monitor"); 15 - class BlueskyFirehoseMonitor { 16 - constructor(agent) { 17 - this.subscription = null; 18 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 19 - } 20 - start() { 21 - return __awaiter(this, void 0, void 0, function* () { 22 - console.log('🔥 Starting Bluesky Firehose monitoring for #vibe-* hashtags...'); 23 - this.subscription = new sync_1.Subscription({ 24 - service: 'wss://bsky.social', 25 - method: 'com.atproto.sync.subscribeRepos', 26 - getState: () => ({}), 27 - validate: (value) => value, 28 - }); 29 - this.subscription.on('message', (msg) => { 30 - if (msg.commit) { 31 - this.processCommit(msg.commit); 32 - } 33 - }); 34 - this.subscription.on('error', (error) => { 35 - console.error('Bluesky Firehose error:', error); 36 - }); 37 - yield this.subscription.start(); 38 - console.log('📡 Connected to Bluesky Firehose'); 39 - }); 40 - } 41 - processCommit(commit) { 42 - return __awaiter(this, void 0, void 0, function* () { 43 - var _a; 44 - try { 45 - // Check each operation in the commit 46 - for (const op of commit.ops || []) { 47 - if (op.action === 'create' && ((_a = op.path) === null || _a === void 0 ? void 0 : _a.includes('app.bsky.feed.post'))) { 48 - // This is a new post 49 - const record = op.record; 50 - if (record && record.text) { 51 - const text = record.text; 52 - // Check for #vibe-* hashtags 53 - if (text.includes('#vibe-')) { 54 - const authorDid = commit.repo; 55 - console.log(`🎯 Detected #vibe-* in Bluesky post from ${authorDid}: "${text.substring(0, 100)}..."`); 56 - // Process the vibe mention 57 - yield this.vibeMonitor.checkPost(text, authorDid, `at://${authorDid}/${op.path}`); 58 - } 59 - } 60 - } 61 - } 62 - } 63 - catch (error) { 64 - // Ignore errors for individual commits 65 - } 66 - }); 67 - } 68 - stop() { 69 - if (this.subscription) { 70 - this.subscription.stop(); 71 - this.subscription = null; 72 - } 73 - } 74 - } 75 - exports.BlueskyFirehoseMonitor = BlueskyFirehoseMonitor;
-71
src/bluesky-monitor.ts
··· 1 - import { Subscription } from '@atproto/sync'; 2 - import { VibeMonitor } from './vibe-monitor'; 3 - import { BskyAgent } from '@atproto/api'; 4 - import { ids, lexicons } from '@atproto/api'; 5 - 6 - export class BlueskyFirehoseMonitor { 7 - private subscription: Subscription | null = null; 8 - private vibeMonitor: VibeMonitor; 9 - 10 - constructor(agent: BskyAgent) { 11 - this.vibeMonitor = new VibeMonitor(agent); 12 - } 13 - 14 - async start() { 15 - console.log('🔥 Starting Bluesky Firehose monitoring for #vibe-* hashtags...'); 16 - 17 - this.subscription = new Subscription({ 18 - service: 'wss://bsky.social', 19 - method: 'com.atproto.sync.subscribeRepos', 20 - getState: () => ({}), 21 - validate: (value) => value, 22 - }); 23 - 24 - this.subscription.on('message', (msg: any) => { 25 - if (msg.commit) { 26 - this.processCommit(msg.commit); 27 - } 28 - }); 29 - 30 - this.subscription.on('error', (error) => { 31 - console.error('Bluesky Firehose error:', error); 32 - }); 33 - 34 - await this.subscription.start(); 35 - console.log('📡 Connected to Bluesky Firehose'); 36 - } 37 - 38 - private async processCommit(commit: any) { 39 - try { 40 - // Check each operation in the commit 41 - for (const op of commit.ops || []) { 42 - if (op.action === 'create' && op.path?.includes('app.bsky.feed.post')) { 43 - // This is a new post 44 - const record = op.record; 45 - 46 - if (record && record.text) { 47 - const text = record.text; 48 - 49 - // Check for #vibe-* hashtags 50 - if (text.includes('#vibe-')) { 51 - const authorDid = commit.repo; 52 - console.log(`🎯 Detected #vibe-* in Bluesky post from ${authorDid}: "${text.substring(0, 100)}..."`); 53 - 54 - // Process the vibe mention 55 - await this.vibeMonitor.checkPost(text, authorDid, `at://${authorDid}/${op.path}`); 56 - } 57 - } 58 - } 59 - } 60 - } catch (error) { 61 - // Ignore errors for individual commits 62 - } 63 - } 64 - 65 - stop() { 66 - if (this.subscription) { 67 - this.subscription.stop(); 68 - this.subscription = null; 69 - } 70 - } 71 - }
-285
src/database.js
··· 1 - "use strict"; 2 - var __importDefault = (this && this.__importDefault) || function (mod) { 3 - return (mod && mod.__esModule) ? mod : { "default": mod }; 4 - }; 5 - Object.defineProperty(exports, "__esModule", { value: true }); 6 - exports.vibeMentionDb = exports.vibeDb = exports.blipDb = void 0; 7 - const better_sqlite3_1 = __importDefault(require("better-sqlite3")); 8 - const path_1 = __importDefault(require("path")); 9 - const db = new better_sqlite3_1.default(path_1.default.join(__dirname, '../blonk.db')); 10 - // Drop old fluffs index if it exists 11 - db.exec(`DROP INDEX IF EXISTS idx_blips_fluffs;`); 12 - // Initialize database schema 13 - db.exec(` 14 - CREATE TABLE IF NOT EXISTS blips ( 15 - uri TEXT PRIMARY KEY, 16 - cid TEXT NOT NULL, 17 - author_did TEXT NOT NULL, 18 - author_handle TEXT, 19 - author_display_name TEXT, 20 - title TEXT NOT NULL, 21 - body TEXT, 22 - url TEXT, 23 - tags TEXT, 24 - vibe_uri TEXT, 25 - vibe_name TEXT, 26 - grooves INTEGER DEFAULT 0, 27 - created_at TEXT NOT NULL, 28 - indexed_at TEXT DEFAULT CURRENT_TIMESTAMP 29 - ); 30 - 31 - CREATE INDEX IF NOT EXISTS idx_blips_created_at ON blips(created_at DESC); 32 - CREATE INDEX IF NOT EXISTS idx_blips_author ON blips(author_did); 33 - CREATE INDEX IF NOT EXISTS idx_blips_grooves ON blips(grooves DESC); 34 - CREATE INDEX IF NOT EXISTS idx_blips_vibe ON blips(vibe_uri); 35 - 36 - CREATE TABLE IF NOT EXISTS vibes ( 37 - uri TEXT PRIMARY KEY, 38 - cid TEXT NOT NULL, 39 - creator_did TEXT NOT NULL, 40 - name TEXT NOT NULL, 41 - mood TEXT NOT NULL, 42 - emoji TEXT, 43 - color TEXT, 44 - member_count INTEGER DEFAULT 0, 45 - created_at TEXT NOT NULL, 46 - indexed_at TEXT DEFAULT CURRENT_TIMESTAMP 47 - ); 48 - 49 - CREATE INDEX IF NOT EXISTS idx_vibes_name ON vibes(name); 50 - CREATE INDEX IF NOT EXISTS idx_vibes_member_count ON vibes(member_count DESC); 51 - 52 - CREATE TABLE IF NOT EXISTS vibe_members ( 53 - vibe_uri TEXT NOT NULL, 54 - member_did TEXT NOT NULL, 55 - joined_at TEXT NOT NULL, 56 - PRIMARY KEY (vibe_uri, member_did) 57 - ); 58 - 59 - CREATE TABLE IF NOT EXISTS vibe_mentions ( 60 - vibe_name TEXT NOT NULL, 61 - mentioned_by_did TEXT NOT NULL, 62 - mentioned_at TEXT NOT NULL, 63 - post_uri TEXT, 64 - PRIMARY KEY (vibe_name, mentioned_by_did, mentioned_at) 65 - ); 66 - 67 - CREATE INDEX IF NOT EXISTS idx_vibe_mentions_name ON vibe_mentions(vibe_name); 68 - CREATE UNIQUE INDEX IF NOT EXISTS idx_vibes_unique_name ON vibes(LOWER(name)); 69 - 70 - CREATE TABLE IF NOT EXISTS grooves ( 71 - id INTEGER PRIMARY KEY AUTOINCREMENT, 72 - blip_uri TEXT NOT NULL, 73 - user_did TEXT NOT NULL, 74 - groove_type TEXT NOT NULL CHECK (groove_type IN ('looks_good', 'shit_rips')), 75 - created_at TEXT NOT NULL, 76 - UNIQUE(blip_uri, user_did) 77 - ); 78 - 79 - CREATE INDEX IF NOT EXISTS idx_grooves_blip ON grooves(blip_uri); 80 - CREATE INDEX IF NOT EXISTS idx_grooves_user ON grooves(user_did); 81 - `); 82 - exports.blipDb = { 83 - insertBlip: (blip) => { 84 - const stmt = db.prepare(` 85 - INSERT OR REPLACE INTO blips 86 - (uri, cid, author_did, author_handle, author_display_name, title, body, url, tags, vibe_uri, vibe_name, grooves, created_at) 87 - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 88 - `); 89 - stmt.run(blip.uri, blip.cid, blip.authorDid, blip.authorHandle, blip.authorDisplayName, blip.title, blip.body, blip.url, JSON.stringify(blip.tags || []), blip.vibeUri, blip.vibeName, blip.grooves, blip.createdAt); 90 - }, 91 - getBlips: (limit = 50, offset = 0) => { 92 - const stmt = db.prepare(` 93 - SELECT * FROM blips 94 - ORDER BY created_at DESC 95 - LIMIT ? OFFSET ? 96 - `); 97 - const rows = stmt.all(limit, offset); 98 - return rows.map(row => ({ 99 - uri: row.uri, 100 - cid: row.cid, 101 - authorDid: row.author_did, 102 - authorHandle: row.author_handle, 103 - authorDisplayName: row.author_display_name, 104 - title: row.title, 105 - body: row.body, 106 - url: row.url, 107 - tags: JSON.parse(row.tags || '[]'), 108 - vibeUri: row.vibe_uri, 109 - vibeName: row.vibe_name, 110 - grooves: row.grooves, 111 - createdAt: row.created_at, 112 - indexedAt: row.indexed_at, 113 - })); 114 - }, 115 - getBlipsByTag: (tag, limit = 50) => { 116 - const stmt = db.prepare(` 117 - SELECT * FROM blips 118 - WHERE tags LIKE ? 119 - ORDER BY created_at DESC 120 - LIMIT ? 121 - `); 122 - const rows = stmt.all(`%"${tag}"%`, limit); 123 - return rows.map(row => ({ 124 - uri: row.uri, 125 - cid: row.cid, 126 - authorDid: row.author_did, 127 - authorHandle: row.author_handle, 128 - authorDisplayName: row.author_display_name, 129 - title: row.title, 130 - body: row.body, 131 - url: row.url, 132 - tags: JSON.parse(row.tags || '[]'), 133 - vibeUri: row.vibe_uri, 134 - vibeName: row.vibe_name, 135 - grooves: row.grooves, 136 - createdAt: row.created_at, 137 - indexedAt: row.indexed_at, 138 - })); 139 - }, 140 - getBlipsByVibe: (vibeUri, limit = 50) => { 141 - const stmt = db.prepare(` 142 - SELECT * FROM blips 143 - WHERE vibe_uri = ? 144 - ORDER BY created_at DESC 145 - LIMIT ? 146 - `); 147 - const rows = stmt.all(vibeUri, limit); 148 - return rows.map(row => ({ 149 - uri: row.uri, 150 - cid: row.cid, 151 - authorDid: row.author_did, 152 - authorHandle: row.author_handle, 153 - authorDisplayName: row.author_display_name, 154 - title: row.title, 155 - body: row.body, 156 - url: row.url, 157 - tags: JSON.parse(row.tags || '[]'), 158 - vibeUri: row.vibe_uri, 159 - vibeName: row.vibe_name, 160 - grooves: row.grooves, 161 - createdAt: row.created_at, 162 - indexedAt: row.indexed_at, 163 - })); 164 - }, 165 - }; 166 - exports.vibeDb = { 167 - insertVibe: (vibe) => { 168 - const stmt = db.prepare(` 169 - INSERT OR REPLACE INTO vibes 170 - (uri, cid, creator_did, name, mood, emoji, color, member_count, created_at) 171 - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) 172 - `); 173 - stmt.run(vibe.uri, vibe.cid, vibe.creatorDid, vibe.name, vibe.mood, vibe.emoji, vibe.color, vibe.memberCount, vibe.createdAt); 174 - }, 175 - getVibes: (limit = 50) => { 176 - const stmt = db.prepare(` 177 - SELECT * FROM vibes 178 - ORDER BY member_count DESC, created_at DESC 179 - LIMIT ? 180 - `); 181 - const rows = stmt.all(limit); 182 - return rows.map(row => ({ 183 - uri: row.uri, 184 - cid: row.cid, 185 - creatorDid: row.creator_did, 186 - name: row.name, 187 - mood: row.mood, 188 - emoji: row.emoji, 189 - color: row.color, 190 - memberCount: row.member_count, 191 - createdAt: row.created_at, 192 - indexedAt: row.indexed_at, 193 - })); 194 - }, 195 - addMember: (vibeUri, memberDid) => { 196 - const stmt = db.prepare(` 197 - INSERT OR IGNORE INTO vibe_members 198 - (vibe_uri, member_did, joined_at) 199 - VALUES (?, ?, ?) 200 - `); 201 - stmt.run(vibeUri, memberDid, new Date().toISOString()); 202 - // Update member count 203 - const updateStmt = db.prepare(` 204 - UPDATE vibes 205 - SET member_count = (SELECT COUNT(*) FROM vibe_members WHERE vibe_uri = ?) 206 - WHERE uri = ? 207 - `); 208 - updateStmt.run(vibeUri, vibeUri); 209 - }, 210 - }; 211 - exports.vibeMentionDb = { 212 - trackMention: (vibeName, mentionedByDid, postUri) => { 213 - const stmt = db.prepare(` 214 - INSERT OR IGNORE INTO vibe_mentions 215 - (vibe_name, mentioned_by_did, mentioned_at, post_uri) 216 - VALUES (?, ?, ?, ?) 217 - `); 218 - stmt.run(vibeName, mentionedByDid, new Date().toISOString(), postUri); 219 - }, 220 - getMentionCount: (vibeName) => { 221 - const stmt = db.prepare(` 222 - SELECT COUNT(DISTINCT mentioned_by_did) as count 223 - FROM vibe_mentions 224 - WHERE vibe_name = ? 225 - `); 226 - const result = stmt.get(vibeName); 227 - return (result === null || result === void 0 ? void 0 : result.count) || 0; 228 - }, 229 - getTotalMentionCount: (vibeName) => { 230 - const stmt = db.prepare(` 231 - SELECT COUNT(*) as count 232 - FROM vibe_mentions 233 - WHERE vibe_name = ? 234 - `); 235 - const result = stmt.get(vibeName); 236 - return (result === null || result === void 0 ? void 0 : result.count) || 0; 237 - }, 238 - getEmergingVibes: () => { 239 - const stmt = db.prepare(` 240 - SELECT 241 - vm.vibe_name, 242 - COUNT(DISTINCT vm.mentioned_by_did) as mention_count, 243 - COUNT(*) as total_mention_count, 244 - MIN(vm.mentioned_at) as first_mentioned, 245 - MAX(vm.mentioned_at) as last_mentioned 246 - FROM vibe_mentions vm 247 - LEFT JOIN vibes v ON LOWER(vm.vibe_name) = LOWER(v.name) 248 - WHERE v.uri IS NULL 249 - GROUP BY vm.vibe_name 250 - ORDER BY mention_count DESC, last_mentioned DESC 251 - `); 252 - return stmt.all().map(row => ({ 253 - vibeName: row.vibe_name, 254 - mentionCount: row.mention_count, 255 - totalMentionCount: row.total_mention_count, 256 - firstMentioned: row.first_mentioned, 257 - lastMentioned: row.last_mentioned, 258 - progress: Math.max((row.mention_count / 5) * 100, // 5 unique mentions 259 - (row.total_mention_count / 10) * 100 // OR 10 total mentions 260 - ), 261 - })); 262 - }, 263 - getVibeByName: (name) => { 264 - const stmt = db.prepare(` 265 - SELECT * FROM vibes 266 - WHERE LOWER(name) = LOWER(?) 267 - `); 268 - const row = stmt.get(name); 269 - if (!row) 270 - return null; 271 - return { 272 - uri: row.uri, 273 - cid: row.cid, 274 - creatorDid: row.creator_did, 275 - name: row.name, 276 - mood: row.mood, 277 - emoji: row.emoji, 278 - color: row.color, 279 - memberCount: row.member_count, 280 - createdAt: row.created_at, 281 - indexedAt: row.indexed_at, 282 - }; 283 - }, 284 - }; 285 - exports.default = db;
-364
src/database.ts
··· 1 - import Database from 'better-sqlite3'; 2 - import path from 'path'; 3 - 4 - const db = new Database(path.join(__dirname, '../blonk.db')); 5 - 6 - // Drop old fluffs index if it exists 7 - db.exec(`DROP INDEX IF EXISTS idx_blips_fluffs;`); 8 - 9 - // Initialize database schema 10 - db.exec(` 11 - CREATE TABLE IF NOT EXISTS blips ( 12 - uri TEXT PRIMARY KEY, 13 - cid TEXT NOT NULL, 14 - author_did TEXT NOT NULL, 15 - author_handle TEXT, 16 - author_display_name TEXT, 17 - title TEXT NOT NULL, 18 - body TEXT, 19 - url TEXT, 20 - tags TEXT, 21 - vibe_uri TEXT, 22 - vibe_name TEXT, 23 - grooves INTEGER DEFAULT 0, 24 - created_at TEXT NOT NULL, 25 - indexed_at TEXT DEFAULT CURRENT_TIMESTAMP 26 - ); 27 - 28 - CREATE INDEX IF NOT EXISTS idx_blips_created_at ON blips(created_at DESC); 29 - CREATE INDEX IF NOT EXISTS idx_blips_author ON blips(author_did); 30 - CREATE INDEX IF NOT EXISTS idx_blips_grooves ON blips(grooves DESC); 31 - CREATE INDEX IF NOT EXISTS idx_blips_vibe ON blips(vibe_uri); 32 - 33 - CREATE TABLE IF NOT EXISTS vibes ( 34 - uri TEXT PRIMARY KEY, 35 - cid TEXT NOT NULL, 36 - creator_did TEXT NOT NULL, 37 - name TEXT NOT NULL, 38 - mood TEXT NOT NULL, 39 - emoji TEXT, 40 - color TEXT, 41 - member_count INTEGER DEFAULT 0, 42 - created_at TEXT NOT NULL, 43 - indexed_at TEXT DEFAULT CURRENT_TIMESTAMP 44 - ); 45 - 46 - CREATE INDEX IF NOT EXISTS idx_vibes_name ON vibes(name); 47 - CREATE INDEX IF NOT EXISTS idx_vibes_member_count ON vibes(member_count DESC); 48 - 49 - CREATE TABLE IF NOT EXISTS vibe_members ( 50 - vibe_uri TEXT NOT NULL, 51 - member_did TEXT NOT NULL, 52 - joined_at TEXT NOT NULL, 53 - PRIMARY KEY (vibe_uri, member_did) 54 - ); 55 - 56 - CREATE TABLE IF NOT EXISTS vibe_mentions ( 57 - vibe_name TEXT NOT NULL, 58 - mentioned_by_did TEXT NOT NULL, 59 - mentioned_at TEXT NOT NULL, 60 - post_uri TEXT NOT NULL, 61 - PRIMARY KEY (vibe_name, post_uri) 62 - ); 63 - 64 - CREATE INDEX IF NOT EXISTS idx_vibe_mentions_name ON vibe_mentions(vibe_name); 65 - CREATE INDEX IF NOT EXISTS idx_vibe_mentions_author ON vibe_mentions(mentioned_by_did); 66 - CREATE UNIQUE INDEX IF NOT EXISTS idx_vibes_unique_name ON vibes(LOWER(name)); 67 - 68 - CREATE TABLE IF NOT EXISTS grooves ( 69 - id INTEGER PRIMARY KEY AUTOINCREMENT, 70 - blip_uri TEXT NOT NULL, 71 - user_did TEXT NOT NULL, 72 - groove_type TEXT NOT NULL CHECK (groove_type IN ('looks_good', 'shit_rips')), 73 - created_at TEXT NOT NULL, 74 - UNIQUE(blip_uri, user_did) 75 - ); 76 - 77 - CREATE INDEX IF NOT EXISTS idx_grooves_blip ON grooves(blip_uri); 78 - CREATE INDEX IF NOT EXISTS idx_grooves_user ON grooves(user_did); 79 - `); 80 - 81 - export interface StoredBlip { 82 - uri: string; 83 - cid: string; 84 - authorDid: string; 85 - authorHandle?: string; 86 - authorDisplayName?: string; 87 - title: string; 88 - body?: string; 89 - url?: string; 90 - tags: string[]; 91 - vibeUri?: string; 92 - vibeName?: string; 93 - grooves: number; 94 - createdAt: string; 95 - indexedAt: string; 96 - } 97 - 98 - export interface StoredVibe { 99 - uri: string; 100 - cid: string; 101 - creatorDid: string; 102 - name: string; 103 - mood: string; 104 - emoji?: string; 105 - color?: string; 106 - memberCount: number; 107 - createdAt: string; 108 - indexedAt: string; 109 - } 110 - 111 - export const blipDb = { 112 - insertBlip: (blip: Omit<StoredBlip, 'indexedAt'>) => { 113 - const stmt = db.prepare(` 114 - INSERT OR REPLACE INTO blips 115 - (uri, cid, author_did, author_handle, author_display_name, title, body, url, tags, vibe_uri, vibe_name, grooves, created_at) 116 - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 117 - `); 118 - 119 - stmt.run( 120 - blip.uri, 121 - blip.cid, 122 - blip.authorDid, 123 - blip.authorHandle, 124 - blip.authorDisplayName, 125 - blip.title, 126 - blip.body, 127 - blip.url, 128 - JSON.stringify(blip.tags || []), 129 - blip.vibeUri, 130 - blip.vibeName, 131 - blip.grooves, 132 - blip.createdAt 133 - ); 134 - }, 135 - 136 - getBlips: (limit = 50, offset = 0): StoredBlip[] => { 137 - const stmt = db.prepare(` 138 - SELECT * FROM blips 139 - ORDER BY created_at DESC 140 - LIMIT ? OFFSET ? 141 - `); 142 - 143 - const rows = stmt.all(limit, offset); 144 - return rows.map(row => ({ 145 - uri: row.uri, 146 - cid: row.cid, 147 - authorDid: row.author_did, 148 - authorHandle: row.author_handle, 149 - authorDisplayName: row.author_display_name, 150 - title: row.title, 151 - body: row.body, 152 - url: row.url, 153 - tags: JSON.parse(row.tags || '[]'), 154 - vibeUri: row.vibe_uri, 155 - vibeName: row.vibe_name, 156 - grooves: row.grooves, 157 - createdAt: row.created_at, 158 - indexedAt: row.indexed_at, 159 - })); 160 - }, 161 - 162 - getBlipsByTag: (tag: string, limit = 50): StoredBlip[] => { 163 - const stmt = db.prepare(` 164 - SELECT * FROM blips 165 - WHERE tags LIKE ? 166 - ORDER BY created_at DESC 167 - LIMIT ? 168 - `); 169 - 170 - const rows = stmt.all(`%"${tag}"%`, limit); 171 - return rows.map(row => ({ 172 - uri: row.uri, 173 - cid: row.cid, 174 - authorDid: row.author_did, 175 - authorHandle: row.author_handle, 176 - authorDisplayName: row.author_display_name, 177 - title: row.title, 178 - body: row.body, 179 - url: row.url, 180 - tags: JSON.parse(row.tags || '[]'), 181 - vibeUri: row.vibe_uri, 182 - vibeName: row.vibe_name, 183 - grooves: row.grooves, 184 - createdAt: row.created_at, 185 - indexedAt: row.indexed_at, 186 - })); 187 - }, 188 - 189 - getBlipsByVibe: (vibeUri: string, limit = 50): StoredBlip[] => { 190 - const stmt = db.prepare(` 191 - SELECT * FROM blips 192 - WHERE vibe_uri = ? 193 - ORDER BY created_at DESC 194 - LIMIT ? 195 - `); 196 - 197 - const rows = stmt.all(vibeUri, limit); 198 - return rows.map(row => ({ 199 - uri: row.uri, 200 - cid: row.cid, 201 - authorDid: row.author_did, 202 - authorHandle: row.author_handle, 203 - authorDisplayName: row.author_display_name, 204 - title: row.title, 205 - body: row.body, 206 - url: row.url, 207 - tags: JSON.parse(row.tags || '[]'), 208 - vibeUri: row.vibe_uri, 209 - vibeName: row.vibe_name, 210 - grooves: row.grooves, 211 - createdAt: row.created_at, 212 - indexedAt: row.indexed_at, 213 - })); 214 - }, 215 - }; 216 - 217 - export const vibeDb = { 218 - insertVibe: (vibe: Omit<StoredVibe, 'indexedAt'>) => { 219 - const stmt = db.prepare(` 220 - INSERT OR REPLACE INTO vibes 221 - (uri, cid, creator_did, name, mood, emoji, color, member_count, created_at) 222 - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) 223 - `); 224 - 225 - stmt.run( 226 - vibe.uri, 227 - vibe.cid, 228 - vibe.creatorDid, 229 - vibe.name, 230 - vibe.mood, 231 - vibe.emoji, 232 - vibe.color, 233 - vibe.memberCount, 234 - vibe.createdAt 235 - ); 236 - }, 237 - 238 - getVibes: (limit = 50): StoredVibe[] => { 239 - const stmt = db.prepare(` 240 - SELECT * FROM vibes 241 - ORDER BY member_count DESC, created_at DESC 242 - LIMIT ? 243 - `); 244 - 245 - const rows = stmt.all(limit); 246 - return rows.map(row => ({ 247 - uri: row.uri, 248 - cid: row.cid, 249 - creatorDid: row.creator_did, 250 - name: row.name, 251 - mood: row.mood, 252 - emoji: row.emoji, 253 - color: row.color, 254 - memberCount: row.member_count, 255 - createdAt: row.created_at, 256 - indexedAt: row.indexed_at, 257 - })); 258 - }, 259 - 260 - addMember: (vibeUri: string, memberDid: string) => { 261 - const stmt = db.prepare(` 262 - INSERT OR IGNORE INTO vibe_members 263 - (vibe_uri, member_did, joined_at) 264 - VALUES (?, ?, ?) 265 - `); 266 - 267 - stmt.run(vibeUri, memberDid, new Date().toISOString()); 268 - 269 - // Update member count 270 - const updateStmt = db.prepare(` 271 - UPDATE vibes 272 - SET member_count = (SELECT COUNT(*) FROM vibe_members WHERE vibe_uri = ?) 273 - WHERE uri = ? 274 - `); 275 - updateStmt.run(vibeUri, vibeUri); 276 - }, 277 - }; 278 - 279 - export const vibeMentionDb = { 280 - trackMention: (vibeName: string, mentionedByDid: string, postUri: string) => { 281 - const stmt = db.prepare(` 282 - INSERT OR IGNORE INTO vibe_mentions 283 - (vibe_name, mentioned_by_did, mentioned_at, post_uri) 284 - VALUES (?, ?, ?, ?) 285 - `); 286 - 287 - stmt.run(vibeName, mentionedByDid, new Date().toISOString(), postUri); 288 - }, 289 - 290 - getMentionCount: (vibeName: string): number => { 291 - const stmt = db.prepare(` 292 - SELECT COUNT(DISTINCT mentioned_by_did) as count 293 - FROM vibe_mentions 294 - WHERE vibe_name = ? 295 - `); 296 - 297 - const result = stmt.get(vibeName) as { count: number }; 298 - return result?.count || 0; 299 - }, 300 - 301 - getTotalMentionCount: (vibeName: string): number => { 302 - const stmt = db.prepare(` 303 - SELECT COUNT(*) as count 304 - FROM vibe_mentions 305 - WHERE vibe_name = ? 306 - `); 307 - 308 - const result = stmt.get(vibeName) as { count: number }; 309 - return result?.count || 0; 310 - }, 311 - 312 - getEmergingVibes: () => { 313 - const stmt = db.prepare(` 314 - SELECT 315 - vm.vibe_name, 316 - COUNT(DISTINCT vm.mentioned_by_did) as mention_count, 317 - COUNT(*) as total_mention_count, 318 - MIN(vm.mentioned_at) as first_mentioned, 319 - MAX(vm.mentioned_at) as last_mentioned 320 - FROM vibe_mentions vm 321 - LEFT JOIN vibes v ON LOWER(vm.vibe_name) = LOWER(v.name) 322 - WHERE v.uri IS NULL 323 - GROUP BY vm.vibe_name 324 - ORDER BY mention_count DESC, last_mentioned DESC 325 - `); 326 - 327 - return stmt.all().map(row => ({ 328 - vibeName: row.vibe_name, 329 - mentionCount: row.mention_count, 330 - totalMentionCount: row.total_mention_count, 331 - firstMentioned: row.first_mentioned, 332 - lastMentioned: row.last_mentioned, 333 - progress: Math.max( 334 - (row.mention_count / 5) * 100, // 5 unique mentions 335 - (row.total_mention_count / 10) * 100 // OR 10 total mentions 336 - ), 337 - })); 338 - }, 339 - 340 - getVibeByName: (name: string): StoredVibe | null => { 341 - const stmt = db.prepare(` 342 - SELECT * FROM vibes 343 - WHERE LOWER(name) = LOWER(?) 344 - `); 345 - 346 - const row = stmt.get(name); 347 - if (!row) return null; 348 - 349 - return { 350 - uri: row.uri, 351 - cid: row.cid, 352 - creatorDid: row.creator_did, 353 - name: row.name, 354 - mood: row.mood, 355 - emoji: row.emoji, 356 - color: row.color, 357 - memberCount: row.member_count, 358 - createdAt: row.created_at, 359 - indexedAt: row.indexed_at, 360 - }; 361 - }, 362 - }; 363 - 364 - export default db;
-84
src/debug-firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.DebugFirehose = void 0; 13 - const ws_1 = require("ws"); 14 - class DebugFirehose { 15 - constructor() { 16 - this.ws = null; 17 - } 18 - start() { 19 - return __awaiter(this, void 0, void 0, function* () { 20 - console.log('🔍 DEBUG: Starting firehose connection test...'); 21 - const urls = [ 22 - 'wss://bsky.social/xrpc/com.atproto.sync.subscribeRepos', 23 - 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos', 24 - ]; 25 - for (const url of urls) { 26 - console.log(`\n🔗 Trying: ${url}`); 27 - yield this.testConnection(url); 28 - } 29 - }); 30 - } 31 - testConnection(url) { 32 - return __awaiter(this, void 0, void 0, function* () { 33 - return new Promise((resolve) => { 34 - const ws = new ws_1.WebSocket(url); 35 - let messageCount = 0; 36 - const timeout = setTimeout(() => { 37 - console.log('⏱️ Timeout after 10 seconds'); 38 - ws.close(); 39 - resolve(); 40 - }, 10000); 41 - ws.on('open', () => { 42 - console.log('✅ Connected successfully!'); 43 - }); 44 - ws.on('message', (data) => { 45 - messageCount++; 46 - console.log(`📦 Message #${messageCount}: ${data.length} bytes`); 47 - // Log first few bytes to see message type 48 - const preview = data.slice(0, 100); 49 - console.log(` Preview: ${preview.toString('hex').substring(0, 50)}...`); 50 - if (messageCount >= 5) { 51 - console.log('✅ Successfully receiving messages'); 52 - clearTimeout(timeout); 53 - ws.close(); 54 - resolve(); 55 - } 56 - }); 57 - ws.on('error', (error) => { 58 - console.log(`❌ Error: ${error.message}`); 59 - console.log(` Code: ${error.code}`); 60 - if (error.stack) { 61 - console.log(` Stack: ${error.stack.split('\n')[0]}`); 62 - } 63 - clearTimeout(timeout); 64 - resolve(); 65 - }); 66 - ws.on('close', (code, reason) => { 67 - console.log(`🔌 Closed: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 68 - clearTimeout(timeout); 69 - resolve(); 70 - }); 71 - }); 72 - }); 73 - } 74 - stop() { 75 - if (this.ws) { 76 - this.ws.close(); 77 - this.ws = null; 78 - } 79 - } 80 - } 81 - exports.DebugFirehose = DebugFirehose; 82 - // Run the test 83 - const debugFirehose = new DebugFirehose(); 84 - debugFirehose.start();
-78
src/debug-firehose.ts
··· 1 - import { WebSocket } from 'ws'; 2 - 3 - export class DebugFirehose { 4 - private ws: WebSocket | null = null; 5 - 6 - async start() { 7 - console.log('🔍 DEBUG: Starting firehose connection test...'); 8 - 9 - const urls = [ 10 - 'wss://bsky.social/xrpc/com.atproto.sync.subscribeRepos', 11 - 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos', 12 - ]; 13 - 14 - for (const url of urls) { 15 - console.log(`\n🔗 Trying: ${url}`); 16 - await this.testConnection(url); 17 - } 18 - } 19 - 20 - private async testConnection(url: string): Promise<void> { 21 - return new Promise((resolve) => { 22 - const ws = new WebSocket(url); 23 - let messageCount = 0; 24 - const timeout = setTimeout(() => { 25 - console.log('⏱️ Timeout after 10 seconds'); 26 - ws.close(); 27 - resolve(); 28 - }, 10000); 29 - 30 - ws.on('open', () => { 31 - console.log('✅ Connected successfully!'); 32 - }); 33 - 34 - ws.on('message', (data: Buffer) => { 35 - messageCount++; 36 - console.log(`📦 Message #${messageCount}: ${data.length} bytes`); 37 - 38 - // Log first few bytes to see message type 39 - const preview = data.slice(0, 100); 40 - console.log(` Preview: ${preview.toString('hex').substring(0, 50)}...`); 41 - 42 - if (messageCount >= 5) { 43 - console.log('✅ Successfully receiving messages'); 44 - clearTimeout(timeout); 45 - ws.close(); 46 - resolve(); 47 - } 48 - }); 49 - 50 - ws.on('error', (error: any) => { 51 - console.log(`❌ Error: ${error.message}`); 52 - console.log(` Code: ${error.code}`); 53 - if (error.stack) { 54 - console.log(` Stack: ${error.stack.split('\n')[0]}`); 55 - } 56 - clearTimeout(timeout); 57 - resolve(); 58 - }); 59 - 60 - ws.on('close', (code, reason) => { 61 - console.log(`🔌 Closed: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 62 - clearTimeout(timeout); 63 - resolve(); 64 - }); 65 - }); 66 - } 67 - 68 - stop() { 69 - if (this.ws) { 70 - this.ws.close(); 71 - this.ws = null; 72 - } 73 - } 74 - } 75 - 76 - // Run the test 77 - const debugFirehose = new DebugFirehose(); 78 - debugFirehose.start();
-157
src/firehose-fixed.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.FixedFirehoseMonitor = void 0; 13 - const ws_1 = require("ws"); 14 - const cbor_x_1 = require("cbor-x"); 15 - const repo_1 = require("@atproto/repo"); 16 - const vibe_monitor_1 = require("./vibe-monitor"); 17 - class FixedFirehoseMonitor { 18 - constructor(agent) { 19 - this.ws = null; 20 - this.reconnectTimeout = null; 21 - this.statsInterval = null; 22 - this.messageCount = 0; 23 - this.vibeDetectionCount = 0; 24 - this.errorCount = 0; 25 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 26 - } 27 - start() { 28 - return __awaiter(this, void 0, void 0, function* () { 29 - console.log('🔥 Starting fixed Bluesky Firehose monitoring for #vibe-* hashtags...'); 30 - const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos'; 31 - console.log(`🔗 Connecting to: ${firehoseUrl}`); 32 - this.ws = new ws_1.WebSocket(firehoseUrl); 33 - this.ws.on('open', () => { 34 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 35 - this.messageCount = 0; 36 - this.vibeDetectionCount = 0; 37 - this.errorCount = 0; 38 - // Log stats every 30 seconds 39 - this.statsInterval = setInterval(() => { 40 - console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`); 41 - }, 30000); 42 - }); 43 - this.ws.on('message', (data) => __awaiter(this, void 0, void 0, function* () { 44 - this.messageCount++; 45 - try { 46 - // AT Protocol uses framed messages 47 - // First decode the frame header 48 - const [header, remainder] = this.decodeVarint(data); 49 - // Then decode the actual message 50 - const messageBytes = data.slice(data.length - remainder); 51 - const message = (0, cbor_x_1.decode)(messageBytes); 52 - // Handle commit messages 53 - if (message && message.$type === 'com.atproto.sync.subscribeRepos#commit') { 54 - yield this.handleCommit(message); 55 - } 56 - } 57 - catch (error) { 58 - // Only log every 100th error to avoid spam 59 - if (this.errorCount % 100 === 0) { 60 - console.error('Error processing message:', error); 61 - } 62 - this.errorCount++; 63 - } 64 - })); 65 - this.ws.on('error', (error) => { 66 - console.error('❌ Firehose WebSocket error:', error.message); 67 - }); 68 - this.ws.on('close', (code, reason) => { 69 - console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 70 - console.log(' Reconnecting in 5 seconds...'); 71 - if (this.statsInterval) { 72 - clearInterval(this.statsInterval); 73 - this.statsInterval = null; 74 - } 75 - this.reconnectTimeout = setTimeout(() => this.start(), 5000); 76 - }); 77 - }); 78 - } 79 - decodeVarint(buf) { 80 - let value = 0; 81 - let shift = 0; 82 - let byte; 83 - let i = 0; 84 - do { 85 - byte = buf[i++]; 86 - value |= (byte & 0x7f) << shift; 87 - shift += 7; 88 - } while (byte & 0x80); 89 - return [value, buf.length - i]; 90 - } 91 - handleCommit(commit) { 92 - return __awaiter(this, void 0, void 0, function* () { 93 - var _a; 94 - try { 95 - if (!commit.blocks) 96 - return; 97 - // Parse the CAR file from blocks 98 - const car = yield (0, repo_1.readCar)(commit.blocks); 99 - // Process each operation 100 - for (const op of commit.ops || []) { 101 - // We only care about post creates 102 - if (op.action === 'create' && ((_a = op.path) === null || _a === void 0 ? void 0 : _a.includes('app.bsky.feed.post'))) { 103 - try { 104 - // Get the record bytes from the CAR file 105 - const recordBytes = car.blocks.get(op.cid); 106 - if (!recordBytes) 107 - continue; 108 - // Convert CBOR to record 109 - const record = (0, repo_1.cborToLexRecord)(recordBytes); 110 - // Check for #vibe- hashtags 111 - if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 112 - this.vibeDetectionCount++; 113 - const authorDid = commit.repo; 114 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 115 - console.log(` Author DID: ${authorDid}`); 116 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 117 - console.log(` Path: ${op.path}`); 118 - // Process the vibe mention 119 - const postUri = `at://${authorDid}/${op.path}`; 120 - yield this.vibeMonitor.checkPost(record.text, authorDid, postUri); 121 - } 122 - } 123 - catch (e) { 124 - // Record-specific error 125 - if (this.errorCount % 100 === 0) { 126 - console.error('Error processing record:', e); 127 - } 128 - this.errorCount++; 129 - } 130 - } 131 - } 132 - } 133 - catch (error) { 134 - // CAR parsing error 135 - if (this.errorCount % 100 === 0) { 136 - console.error('Error handling commit:', error); 137 - } 138 - this.errorCount++; 139 - } 140 - }); 141 - } 142 - stop() { 143 - if (this.reconnectTimeout) { 144 - clearTimeout(this.reconnectTimeout); 145 - this.reconnectTimeout = null; 146 - } 147 - if (this.statsInterval) { 148 - clearInterval(this.statsInterval); 149 - this.statsInterval = null; 150 - } 151 - if (this.ws) { 152 - this.ws.close(); 153 - this.ws = null; 154 - } 155 - } 156 - } 157 - exports.FixedFirehoseMonitor = FixedFirehoseMonitor;
-162
src/firehose-fixed.ts
··· 1 - import { WebSocket } from 'ws'; 2 - import { decode } from 'cbor-x'; 3 - import { readCar, cborToLexRecord } from '@atproto/repo'; 4 - import { VibeMonitor } from './vibe-monitor'; 5 - import { BskyAgent } from '@atproto/api'; 6 - 7 - export class FixedFirehoseMonitor { 8 - private ws: WebSocket | null = null; 9 - private vibeMonitor: VibeMonitor; 10 - private reconnectTimeout: NodeJS.Timeout | null = null; 11 - private statsInterval: NodeJS.Timeout | null = null; 12 - private messageCount = 0; 13 - private vibeDetectionCount = 0; 14 - private errorCount = 0; 15 - 16 - constructor(agent: BskyAgent) { 17 - this.vibeMonitor = new VibeMonitor(agent); 18 - } 19 - 20 - async start() { 21 - console.log('🔥 Starting fixed Bluesky Firehose monitoring for #vibe-* hashtags...'); 22 - 23 - const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos'; 24 - console.log(`🔗 Connecting to: ${firehoseUrl}`); 25 - 26 - this.ws = new WebSocket(firehoseUrl); 27 - 28 - this.ws.on('open', () => { 29 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 30 - this.messageCount = 0; 31 - this.vibeDetectionCount = 0; 32 - this.errorCount = 0; 33 - 34 - // Log stats every 30 seconds 35 - this.statsInterval = setInterval(() => { 36 - console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`); 37 - }, 30000); 38 - }); 39 - 40 - this.ws.on('message', async (data: Buffer) => { 41 - this.messageCount++; 42 - 43 - try { 44 - // AT Protocol uses framed messages 45 - // First decode the frame header 46 - const [header, remainder] = this.decodeVarint(data); 47 - 48 - // Then decode the actual message 49 - const messageBytes = data.slice(data.length - remainder); 50 - const message = decode(messageBytes); 51 - 52 - // Handle commit messages 53 - if (message && message.$type === 'com.atproto.sync.subscribeRepos#commit') { 54 - await this.handleCommit(message); 55 - } 56 - } catch (error) { 57 - // Only log every 100th error to avoid spam 58 - if (this.errorCount % 100 === 0) { 59 - console.error('Error processing message:', error); 60 - } 61 - this.errorCount++; 62 - } 63 - }); 64 - 65 - this.ws.on('error', (error: any) => { 66 - console.error('❌ Firehose WebSocket error:', error.message); 67 - }); 68 - 69 - this.ws.on('close', (code, reason) => { 70 - console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 71 - console.log(' Reconnecting in 5 seconds...'); 72 - 73 - if (this.statsInterval) { 74 - clearInterval(this.statsInterval); 75 - this.statsInterval = null; 76 - } 77 - 78 - this.reconnectTimeout = setTimeout(() => this.start(), 5000); 79 - }); 80 - } 81 - 82 - private decodeVarint(buf: Buffer): [number, number] { 83 - let value = 0; 84 - let shift = 0; 85 - let byte: number; 86 - let i = 0; 87 - 88 - do { 89 - byte = buf[i++]; 90 - value |= (byte & 0x7f) << shift; 91 - shift += 7; 92 - } while (byte & 0x80); 93 - 94 - return [value, buf.length - i]; 95 - } 96 - 97 - private async handleCommit(commit: any) { 98 - try { 99 - if (!commit.blocks) return; 100 - 101 - // Parse the CAR file from blocks 102 - const car = await readCar(commit.blocks); 103 - 104 - // Process each operation 105 - for (const op of commit.ops || []) { 106 - // We only care about post creates 107 - if (op.action === 'create' && op.path?.includes('app.bsky.feed.post')) { 108 - try { 109 - // Get the record bytes from the CAR file 110 - const recordBytes = car.blocks.get(op.cid); 111 - if (!recordBytes) continue; 112 - 113 - // Convert CBOR to record 114 - const record = cborToLexRecord(recordBytes); 115 - 116 - // Check for #vibe- hashtags 117 - if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 118 - this.vibeDetectionCount++; 119 - const authorDid = commit.repo; 120 - 121 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 122 - console.log(` Author DID: ${authorDid}`); 123 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 124 - console.log(` Path: ${op.path}`); 125 - 126 - // Process the vibe mention 127 - const postUri = `at://${authorDid}/${op.path}`; 128 - await this.vibeMonitor.checkPost(record.text, authorDid, postUri); 129 - } 130 - } catch (e) { 131 - // Record-specific error 132 - if (this.errorCount % 100 === 0) { 133 - console.error('Error processing record:', e); 134 - } 135 - this.errorCount++; 136 - } 137 - } 138 - } 139 - } catch (error) { 140 - // CAR parsing error 141 - if (this.errorCount % 100 === 0) { 142 - console.error('Error handling commit:', error); 143 - } 144 - this.errorCount++; 145 - } 146 - } 147 - 148 - stop() { 149 - if (this.reconnectTimeout) { 150 - clearTimeout(this.reconnectTimeout); 151 - this.reconnectTimeout = null; 152 - } 153 - if (this.statsInterval) { 154 - clearInterval(this.statsInterval); 155 - this.statsInterval = null; 156 - } 157 - if (this.ws) { 158 - this.ws.close(); 159 - this.ws = null; 160 - } 161 - } 162 - }
-72
src/firehose-with-atproto-sync.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.ATProtoFirehoseMonitor = void 0; 13 - const sync_1 = require("@atproto/sync"); 14 - const vibe_monitor_1 = require("./vibe-monitor"); 15 - class ATProtoFirehoseMonitor { 16 - constructor(agent) { 17 - this.messageCount = 0; 18 - this.vibeDetectionCount = 0; 19 - this.statsInterval = null; 20 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 21 - this.firehose = new sync_1.Firehose({ 22 - filterCollections: ['app.bsky.feed.post'], 23 - handleEvent: (evt) => __awaiter(this, void 0, void 0, function* () { 24 - this.messageCount++; 25 - if (evt.event === 'create') { 26 - const ops = (0, sync_1.getOpsByType)(evt); 27 - for (const op of ops.posts.creates) { 28 - try { 29 - const record = op.record; 30 - // Check for #vibe- hashtags 31 - if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 32 - this.vibeDetectionCount++; 33 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 34 - console.log(` Author DID: ${op.author}`); 35 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 36 - console.log(` URI: ${op.uri}`); 37 - // Process the vibe mention 38 - yield this.vibeMonitor.checkPost(record.text, op.author, op.uri); 39 - } 40 - } 41 - catch (e) { 42 - console.error('Error processing post:', e); 43 - } 44 - } 45 - } 46 - }), 47 - onError: (error) => { 48 - console.error('Firehose error:', error); 49 - } 50 - }); 51 - } 52 - start() { 53 - return __awaiter(this, void 0, void 0, function* () { 54 - console.log('🔥 Starting AT Protocol Sync Firehose monitoring for #vibe-* hashtags...'); 55 - // Start stats logging 56 - this.statsInterval = setInterval(() => { 57 - console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections`); 58 - }, 30000); 59 - // Start the firehose 60 - yield this.firehose.start(); 61 - console.log('📡 Connected to AT Protocol Firehose - monitoring all posts for #vibe-*'); 62 - }); 63 - } 64 - stop() { 65 - if (this.statsInterval) { 66 - clearInterval(this.statsInterval); 67 - this.statsInterval = null; 68 - } 69 - this.firehose.stop(); 70 - } 71 - } 72 - exports.ATProtoFirehoseMonitor = ATProtoFirehoseMonitor;
-71
src/firehose-with-atproto-sync.ts
··· 1 - import { Firehose, getOpsByType } from '@atproto/sync'; 2 - import { VibeMonitor } from './vibe-monitor'; 3 - import { BskyAgent } from '@atproto/api'; 4 - 5 - export class ATProtoFirehoseMonitor { 6 - private firehose: Firehose; 7 - private vibeMonitor: VibeMonitor; 8 - private messageCount = 0; 9 - private vibeDetectionCount = 0; 10 - private statsInterval: NodeJS.Timeout | null = null; 11 - 12 - constructor(agent: BskyAgent) { 13 - this.vibeMonitor = new VibeMonitor(agent); 14 - 15 - this.firehose = new Firehose({ 16 - filterCollections: ['app.bsky.feed.post'], 17 - handleEvent: async (evt) => { 18 - this.messageCount++; 19 - 20 - if (evt.event === 'create') { 21 - const ops = getOpsByType(evt); 22 - 23 - for (const op of ops.posts.creates) { 24 - try { 25 - const record = op.record; 26 - 27 - // Check for #vibe- hashtags 28 - if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 29 - this.vibeDetectionCount++; 30 - 31 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 32 - console.log(` Author DID: ${op.author}`); 33 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 34 - console.log(` URI: ${op.uri}`); 35 - 36 - // Process the vibe mention 37 - await this.vibeMonitor.checkPost(record.text, op.author, op.uri); 38 - } 39 - } catch (e) { 40 - console.error('Error processing post:', e); 41 - } 42 - } 43 - } 44 - }, 45 - onError: (error) => { 46 - console.error('Firehose error:', error); 47 - } 48 - }); 49 - } 50 - 51 - async start() { 52 - console.log('🔥 Starting AT Protocol Sync Firehose monitoring for #vibe-* hashtags...'); 53 - 54 - // Start stats logging 55 - this.statsInterval = setInterval(() => { 56 - console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections`); 57 - }, 30000); 58 - 59 - // Start the firehose 60 - await this.firehose.start(); 61 - console.log('📡 Connected to AT Protocol Firehose - monitoring all posts for #vibe-*'); 62 - } 63 - 64 - stop() { 65 - if (this.statsInterval) { 66 - clearInterval(this.statsInterval); 67 - this.statsInterval = null; 68 - } 69 - this.firehose.stop(); 70 - } 71 - }
-103
src/firehose-with-skyware.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.SkywareFirehoseMonitor = void 0; 13 - const firehose_1 = require("@skyware/firehose"); 14 - const ws_1 = require("ws"); 15 - const vibe_monitor_1 = require("./vibe-monitor"); 16 - class SkywareFirehoseMonitor { 17 - constructor(agent) { 18 - this.messageCount = 0; 19 - this.vibeDetectionCount = 0; 20 - this.errorCount = 0; 21 - this.statsInterval = null; 22 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 23 - this.firehose = new firehose_1.Firehose({ 24 - ws: ws_1.WebSocket, 25 - relay: 'wss://bsky.network' 26 - }); 27 - } 28 - start() { 29 - return __awaiter(this, void 0, void 0, function* () { 30 - console.log('🔥 Starting Skyware Firehose monitoring for #vibe-* hashtags...'); 31 - // Set up event handlers 32 - this.firehose.on('open', () => { 33 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 34 - this.messageCount = 0; 35 - this.vibeDetectionCount = 0; 36 - this.errorCount = 0; 37 - // Log stats every 30 seconds 38 - this.statsInterval = setInterval(() => { 39 - console.log(`📊 Firehose stats: ${this.messageCount} messages, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`); 40 - }, 30000); 41 - }); 42 - this.firehose.on('commit', (commit) => __awaiter(this, void 0, void 0, function* () { 43 - this.messageCount++; 44 - try { 45 - // Process operations in the commit 46 - for (const op of commit.ops || []) { 47 - // We only care about post creates 48 - if (op.action === 'create' && op.path.includes('app.bsky.feed.post')) { 49 - const record = op.record; 50 - // Check for #vibe- hashtags 51 - if ((record === null || record === void 0 ? void 0 : record.text) && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 52 - this.vibeDetectionCount++; 53 - const authorDid = commit.repo; 54 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 55 - console.log(` Author DID: ${authorDid}`); 56 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 57 - console.log(` Path: ${op.path}`); 58 - // Process the vibe mention 59 - const postUri = `at://${authorDid}/${op.path}`; 60 - yield this.vibeMonitor.checkPost(record.text, authorDid, postUri); 61 - } 62 - } 63 - } 64 - } 65 - catch (error) { 66 - // Only log every 100th error to avoid spam 67 - if (this.errorCount % 100 === 0) { 68 - console.error('Error processing commit:', error); 69 - } 70 - this.errorCount++; 71 - } 72 - })); 73 - this.firehose.on('error', ({ error }) => { 74 - // Only log every 100th error to avoid spam 75 - if (this.errorCount % 100 === 0) { 76 - console.error('Firehose error:', error); 77 - } 78 - this.errorCount++; 79 - }); 80 - this.firehose.on('websocketError', ({ error }) => { 81 - console.error('❌ WebSocket error:', error); 82 - }); 83 - this.firehose.on('close', (cursor) => { 84 - console.log(`🔌 Firehose disconnected at cursor: ${cursor}`); 85 - console.log(' The firehose will auto-reconnect...'); 86 - if (this.statsInterval) { 87 - clearInterval(this.statsInterval); 88 - this.statsInterval = null; 89 - } 90 - }); 91 - // Start the firehose 92 - this.firehose.start(); 93 - }); 94 - } 95 - stop() { 96 - if (this.statsInterval) { 97 - clearInterval(this.statsInterval); 98 - this.statsInterval = null; 99 - } 100 - this.firehose.close(); 101 - } 102 - } 103 - exports.SkywareFirehoseMonitor = SkywareFirehoseMonitor;
-106
src/firehose-with-skyware.ts
··· 1 - import { Firehose } from '@skyware/firehose'; 2 - import { WebSocket } from 'ws'; 3 - import { VibeMonitor } from './vibe-monitor'; 4 - import { BskyAgent } from '@atproto/api'; 5 - 6 - export class SkywareFirehoseMonitor { 7 - private firehose: Firehose; 8 - private vibeMonitor: VibeMonitor; 9 - private messageCount = 0; 10 - private vibeDetectionCount = 0; 11 - private errorCount = 0; 12 - private statsInterval: NodeJS.Timeout | null = null; 13 - 14 - constructor(agent: BskyAgent) { 15 - this.vibeMonitor = new VibeMonitor(agent); 16 - this.firehose = new Firehose({ 17 - ws: WebSocket as any, 18 - relay: 'wss://bsky.network' 19 - }); 20 - } 21 - 22 - async start() { 23 - console.log('🔥 Starting Skyware Firehose monitoring for #vibe-* hashtags...'); 24 - 25 - // Set up event handlers 26 - this.firehose.on('open', () => { 27 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 28 - this.messageCount = 0; 29 - this.vibeDetectionCount = 0; 30 - this.errorCount = 0; 31 - 32 - // Log stats every 30 seconds 33 - this.statsInterval = setInterval(() => { 34 - console.log(`📊 Firehose stats: ${this.messageCount} messages, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`); 35 - }, 30000); 36 - }); 37 - 38 - this.firehose.on('commit', async (commit: any) => { 39 - this.messageCount++; 40 - 41 - try { 42 - // Process operations in the commit 43 - for (const op of commit.ops || []) { 44 - // We only care about post creates 45 - if (op.action === 'create' && op.path.includes('app.bsky.feed.post')) { 46 - const record = op.record; 47 - 48 - // Check for #vibe- hashtags 49 - if (record?.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 50 - this.vibeDetectionCount++; 51 - const authorDid = commit.repo; 52 - 53 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 54 - console.log(` Author DID: ${authorDid}`); 55 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 56 - console.log(` Path: ${op.path}`); 57 - 58 - // Process the vibe mention 59 - const postUri = `at://${authorDid}/${op.path}`; 60 - await this.vibeMonitor.checkPost(record.text, authorDid, postUri); 61 - } 62 - } 63 - } 64 - } catch (error) { 65 - // Only log every 100th error to avoid spam 66 - if (this.errorCount % 100 === 0) { 67 - console.error('Error processing commit:', error); 68 - } 69 - this.errorCount++; 70 - } 71 - }); 72 - 73 - this.firehose.on('error', ({ error }) => { 74 - // Only log every 100th error to avoid spam 75 - if (this.errorCount % 100 === 0) { 76 - console.error('Firehose error:', error); 77 - } 78 - this.errorCount++; 79 - }); 80 - 81 - this.firehose.on('websocketError', ({ error }) => { 82 - console.error('❌ WebSocket error:', error); 83 - }); 84 - 85 - this.firehose.on('close', (cursor) => { 86 - console.log(`🔌 Firehose disconnected at cursor: ${cursor}`); 87 - console.log(' The firehose will auto-reconnect...'); 88 - 89 - if (this.statsInterval) { 90 - clearInterval(this.statsInterval); 91 - this.statsInterval = null; 92 - } 93 - }); 94 - 95 - // Start the firehose 96 - this.firehose.start(); 97 - } 98 - 99 - stop() { 100 - if (this.statsInterval) { 101 - clearInterval(this.statsInterval); 102 - this.statsInterval = null; 103 - } 104 - this.firehose.close(); 105 - } 106 - }
-147
src/firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.BlipAggregator = exports.FirehoseSubscriber = void 0; 13 - const ws_1 = require("ws"); 14 - const database_1 = require("./database"); 15 - const schemas_1 = require("./schemas"); 16 - const vibe_monitor_1 = require("./vibe-monitor"); 17 - class FirehoseSubscriber { 18 - constructor(agent) { 19 - this.ws = null; 20 - this.agent = agent; 21 - } 22 - start() { 23 - return __awaiter(this, void 0, void 0, function* () { 24 - console.log('🔥 Starting Firehose subscription...'); 25 - // Connect to the AT Protocol firehose 26 - this.ws = new ws_1.WebSocket('wss://bsky.social/xrpc/com.atproto.sync.subscribeRepos'); 27 - this.ws.on('open', () => { 28 - console.log('📡 Connected to Firehose'); 29 - }); 30 - this.ws.on('message', (data) => __awaiter(this, void 0, void 0, function* () { 31 - try { 32 - // The firehose sends CAR files, but for now we'll use a simpler approach 33 - // In production, you'd parse the CAR files properly 34 - // For now, let's poll known users instead 35 - } 36 - catch (error) { 37 - console.error('Error processing firehose message:', error); 38 - } 39 - })); 40 - this.ws.on('error', (error) => { 41 - console.error('Firehose error:', error); 42 - }); 43 - this.ws.on('close', () => { 44 - console.log('Firehose connection closed, reconnecting...'); 45 - setTimeout(() => this.start(), 5000); 46 - }); 47 - }); 48 - } 49 - stop() { 50 - if (this.ws) { 51 - this.ws.close(); 52 - this.ws = null; 53 - } 54 - } 55 - } 56 - exports.FirehoseSubscriber = FirehoseSubscriber; 57 - // Simpler approach for now: poll known users 58 - class BlipAggregator { 59 - constructor(agent) { 60 - var _a; 61 - this.knownUsers = new Set(); 62 - this.agent = agent; 63 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 64 - // Add your own DID to start 65 - if ((_a = agent.session) === null || _a === void 0 ? void 0 : _a.did) { 66 - this.knownUsers.add(agent.session.did); 67 - } 68 - } 69 - aggregateBlips() { 70 - return __awaiter(this, void 0, void 0, function* () { 71 - var _a, _b; 72 - console.log('🔍 Aggregating blips and vibes from known users...'); 73 - for (const did of this.knownUsers) { 74 - try { 75 - // Get user profile 76 - const profile = yield this.agent.getProfile({ actor: did }); 77 - // List their vibes 78 - const vibeResponse = yield this.agent.com.atproto.repo.listRecords({ 79 - repo: did, 80 - collection: schemas_1.VIBE_NSID, 81 - limit: 100, 82 - }); 83 - for (const record of vibeResponse.data.records) { 84 - const vibe = record.value; 85 - database_1.vibeDb.insertVibe({ 86 - uri: record.uri, 87 - cid: record.cid, 88 - creatorDid: did, 89 - name: vibe.name, 90 - mood: vibe.mood, 91 - emoji: vibe.emoji, 92 - color: vibe.color, 93 - memberCount: vibe.memberCount || 0, 94 - createdAt: vibe.createdAt, 95 - }); 96 - } 97 - console.log(`✅ Indexed ${vibeResponse.data.records.length} vibes from @${profile.data.handle}`); 98 - // List their blips 99 - const response = yield this.agent.com.atproto.repo.listRecords({ 100 - repo: did, 101 - collection: schemas_1.BLIP_NSID, 102 - limit: 100, 103 - }); 104 - for (const record of response.data.records) { 105 - const blip = record.value; 106 - // Check for vibe hashtags in blip content 107 - const textToCheck = `${blip.title || ''} ${blip.body || ''}`; 108 - yield this.vibeMonitor.checkPost(textToCheck, did, record.uri); 109 - database_1.blipDb.insertBlip({ 110 - uri: record.uri, 111 - cid: record.cid, 112 - authorDid: did, 113 - authorHandle: profile.data.handle, 114 - authorDisplayName: profile.data.displayName, 115 - title: blip.title, 116 - body: blip.body, 117 - url: blip.url, 118 - tags: blip.tags || [], 119 - vibeUri: (_a = blip.vibe) === null || _a === void 0 ? void 0 : _a.uri, 120 - vibeName: (_b = blip.vibe) === null || _b === void 0 ? void 0 : _b.name, 121 - grooves: blip.grooves || 0, 122 - createdAt: blip.createdAt, 123 - }); 124 - } 125 - console.log(`✅ Indexed ${response.data.records.length} blips from @${profile.data.handle}`); 126 - } 127 - catch (error) { 128 - console.error(`Failed to aggregate blips from ${did}:`, error); 129 - } 130 - } 131 - }); 132 - } 133 - addUser(did) { 134 - this.knownUsers.add(did); 135 - } 136 - startPolling() { 137 - return __awaiter(this, arguments, void 0, function* (intervalMs = 60000) { 138 - // Initial aggregation 139 - yield this.aggregateBlips(); 140 - // Poll periodically 141 - setInterval(() => { 142 - this.aggregateBlips(); 143 - }, intervalMs); 144 - }); 145 - } 146 - } 147 - exports.BlipAggregator = BlipAggregator;
-152
src/firehose.ts
··· 1 - import { WebSocket } from 'ws'; 2 - import { blipDb, vibeDb } from './database'; 3 - import { BLIP_NSID, VIBE_NSID } from './schemas'; 4 - import { BskyAgent } from '@atproto/api'; 5 - import { VibeMonitor } from './vibe-monitor'; 6 - 7 - export class FirehoseSubscriber { 8 - private ws: WebSocket | null = null; 9 - private agent: BskyAgent; 10 - 11 - constructor(agent: BskyAgent) { 12 - this.agent = agent; 13 - } 14 - 15 - async start() { 16 - console.log('🔥 Starting Firehose subscription...'); 17 - 18 - // Connect to the AT Protocol firehose 19 - this.ws = new WebSocket('wss://bsky.social/xrpc/com.atproto.sync.subscribeRepos'); 20 - 21 - this.ws.on('open', () => { 22 - console.log('📡 Connected to Firehose'); 23 - }); 24 - 25 - this.ws.on('message', async (data: Buffer) => { 26 - try { 27 - // The firehose sends CAR files, but for now we'll use a simpler approach 28 - // In production, you'd parse the CAR files properly 29 - // For now, let's poll known users instead 30 - } catch (error) { 31 - console.error('Error processing firehose message:', error); 32 - } 33 - }); 34 - 35 - this.ws.on('error', (error) => { 36 - console.error('Firehose error:', error); 37 - }); 38 - 39 - this.ws.on('close', () => { 40 - console.log('Firehose connection closed, reconnecting...'); 41 - setTimeout(() => this.start(), 5000); 42 - }); 43 - } 44 - 45 - stop() { 46 - if (this.ws) { 47 - this.ws.close(); 48 - this.ws = null; 49 - } 50 - } 51 - } 52 - 53 - // Simpler approach for now: poll known users 54 - export class BlipAggregator { 55 - private agent: BskyAgent; 56 - private knownUsers: Set<string> = new Set(); 57 - private vibeMonitor: VibeMonitor; 58 - 59 - constructor(agent: BskyAgent) { 60 - this.agent = agent; 61 - this.vibeMonitor = new VibeMonitor(agent); 62 - // Add your own DID to start 63 - if (agent.session?.did) { 64 - this.knownUsers.add(agent.session.did); 65 - } 66 - } 67 - 68 - async aggregateBlips() { 69 - console.log('🔍 Aggregating blips and vibes from known users...'); 70 - 71 - for (const did of this.knownUsers) { 72 - try { 73 - // Get user profile 74 - const profile = await this.agent.getProfile({ actor: did }); 75 - 76 - // List their vibes 77 - const vibeResponse = await this.agent.com.atproto.repo.listRecords({ 78 - repo: did, 79 - collection: VIBE_NSID, 80 - limit: 100, 81 - }); 82 - 83 - for (const record of vibeResponse.data.records) { 84 - const vibe = record.value as any; 85 - 86 - vibeDb.insertVibe({ 87 - uri: record.uri, 88 - cid: record.cid, 89 - creatorDid: did, 90 - name: vibe.name, 91 - mood: vibe.mood, 92 - emoji: vibe.emoji, 93 - color: vibe.color, 94 - memberCount: vibe.memberCount || 0, 95 - createdAt: vibe.createdAt, 96 - }); 97 - } 98 - 99 - console.log(`✅ Indexed ${vibeResponse.data.records.length} vibes from @${profile.data.handle}`); 100 - 101 - // List their blips 102 - const response = await this.agent.com.atproto.repo.listRecords({ 103 - repo: did, 104 - collection: BLIP_NSID, 105 - limit: 100, 106 - }); 107 - 108 - for (const record of response.data.records) { 109 - const blip = record.value as any; 110 - 111 - // Check for vibe hashtags in blip content 112 - const textToCheck = `${blip.title || ''} ${blip.body || ''}`; 113 - await this.vibeMonitor.checkPost(textToCheck, did, record.uri); 114 - 115 - blipDb.insertBlip({ 116 - uri: record.uri, 117 - cid: record.cid, 118 - authorDid: did, 119 - authorHandle: profile.data.handle, 120 - authorDisplayName: profile.data.displayName, 121 - title: blip.title, 122 - body: blip.body, 123 - url: blip.url, 124 - tags: blip.tags || [], 125 - vibeUri: blip.vibe?.uri, 126 - vibeName: blip.vibe?.name, 127 - grooves: blip.grooves || 0, 128 - createdAt: blip.createdAt, 129 - }); 130 - } 131 - 132 - console.log(`✅ Indexed ${response.data.records.length} blips from @${profile.data.handle}`); 133 - } catch (error) { 134 - console.error(`Failed to aggregate blips from ${did}:`, error); 135 - } 136 - } 137 - } 138 - 139 - addUser(did: string) { 140 - this.knownUsers.add(did); 141 - } 142 - 143 - async startPolling(intervalMs = 60000) { 144 - // Initial aggregation 145 - await this.aggregateBlips(); 146 - 147 - // Poll periodically 148 - setInterval(() => { 149 - this.aggregateBlips(); 150 - }, intervalMs); 151 - } 152 - }
-45
src/index.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - const agent_1 = require("./agent"); 13 - const blips_1 = require("./blips"); 14 - function main() { 15 - return __awaiter(this, void 0, void 0, function* () { 16 - try { 17 - const blonkAgent = new agent_1.BlonkAgent(); 18 - yield blonkAgent.login(); 19 - const agent = blonkAgent.getAgent(); 20 - const blipManager = new blips_1.BlipManager(agent); 21 - console.log('\n📡 Blonk - Vibe Radar'); 22 - console.log('=====================\n'); 23 - console.log('Transmitting a test blip...'); 24 - const blipUri = yield blipManager.createBlip('Welcome to the Blonk Vibe Radar!', 'This is the first blip on Blonk, where vibes are tracked on the radar.', 'https://atproto.com', ['welcome', 'atproto', 'blonk']); 25 - console.log(`Blip transmitted with URI: ${blipUri}\n`); 26 - console.log('Scanning radar for recent blips...'); 27 - const blips = yield blipManager.getBlips(10); 28 - console.log(`\n📡 ${blips.length} blips on the radar:`); 29 - blips.forEach((blip, index) => { 30 - console.log(`\n${index + 1}. ${blip.title}`); 31 - if (blip.body) 32 - console.log(` ${blip.body.substring(0, 100)}...`); 33 - if (blip.url) 34 - console.log(` 🔗 ${blip.url}`); 35 - console.log(` 📅 ${new Date(blip.createdAt).toLocaleString()}`); 36 - console.log(` ✨ ${blip.fluffs} fluffs`); 37 - }); 38 - } 39 - catch (error) { 40 - console.error('Error:', error); 41 - process.exit(1); 42 - } 43 - }); 44 - } 45 - main();
-42
src/index.ts
··· 1 - import { BlonkAgent } from './agent'; 2 - import { BlipManager } from './blips'; 3 - 4 - async function main() { 5 - try { 6 - const blonkAgent = new BlonkAgent(); 7 - await blonkAgent.login(); 8 - 9 - const agent = blonkAgent.getAgent(); 10 - const blipManager = new BlipManager(agent); 11 - 12 - console.log('\n📡 Blonk - Vibe Radar'); 13 - console.log('=====================\n'); 14 - 15 - console.log('Transmitting a test blip...'); 16 - const blipUri = await blipManager.createBlip( 17 - 'Welcome to the Blonk Vibe Radar!', 18 - 'This is the first blip on Blonk, where vibes are tracked on the radar.', 19 - 'https://atproto.com', 20 - ['welcome', 'atproto', 'blonk'] 21 - ); 22 - console.log(`Blip transmitted with URI: ${blipUri}\n`); 23 - 24 - console.log('Scanning radar for recent blips...'); 25 - const blips = await blipManager.getBlips(10); 26 - 27 - console.log(`\n📡 ${blips.length} blips on the radar:`); 28 - blips.forEach((blip, index) => { 29 - console.log(`\n${index + 1}. ${blip.title}`); 30 - if (blip.body) console.log(` ${blip.body.substring(0, 100)}...`); 31 - if (blip.url) console.log(` 🔗 ${blip.url}`); 32 - console.log(` 📅 ${new Date(blip.createdAt).toLocaleString()}`); 33 - console.log(` ✨ ${blip.grooves} grooves`); 34 - }); 35 - 36 - } catch (error) { 37 - console.error('Error:', error); 38 - process.exit(1); 39 - } 40 - } 41 - 42 - main();
-28
src/post-test-vibe.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - const agent_1 = require("./agent"); 13 - function postTestVibe() { 14 - return __awaiter(this, void 0, void 0, function* () { 15 - const agent = new agent_1.BlonkAgent(); 16 - yield agent.login(); 17 - const bskyAgent = agent.getAgent(); 18 - const testVibeName = `blonk_test_${Date.now()}`; 19 - console.log(`Posting test vibe: #vibe-${testVibeName}`); 20 - const result = yield bskyAgent.post({ 21 - text: `Testing Blonk vibe detection! #vibe-${testVibeName}`, 22 - createdAt: new Date().toISOString(), 23 - }); 24 - console.log('Posted:', result.uri); 25 - console.log(`Now search for: #vibe-${testVibeName}`); 26 - }); 27 - } 28 - postTestVibe().catch(console.error);
-23
src/post-test-vibe.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { BlonkAgent } from './agent'; 3 - 4 - async function postTestVibe() { 5 - const agent = new BlonkAgent(); 6 - await agent.login(); 7 - 8 - const bskyAgent = agent.getAgent(); 9 - 10 - const testVibeName = `blonk_test_${Date.now()}`; 11 - 12 - console.log(`Posting test vibe: #vibe-${testVibeName}`); 13 - 14 - const result = await bskyAgent.post({ 15 - text: `Testing Blonk vibe detection! #vibe-${testVibeName}`, 16 - createdAt: new Date().toISOString(), 17 - }); 18 - 19 - console.log('Posted:', result.uri); 20 - console.log(`Now search for: #vibe-${testVibeName}`); 21 - } 22 - 23 - postTestVibe().catch(console.error);
-8
src/schemas.js
··· 1 - "use strict"; 2 - Object.defineProperty(exports, "__esModule", { value: true }); 3 - exports.VIBE_MEMBER_NSID = exports.VIBE_NSID = exports.COMMENT_NSID = exports.GROOVE_NSID = exports.BLIP_NSID = void 0; 4 - exports.BLIP_NSID = 'com.blonk.blip'; 5 - exports.GROOVE_NSID = 'com.blonk.groove'; 6 - exports.COMMENT_NSID = 'com.blonk.comment'; 7 - exports.VIBE_NSID = 'com.blonk.vibe'; 8 - exports.VIBE_MEMBER_NSID = 'com.blonk.vibeMember';
-58
src/schemas.ts
··· 1 - export const BLIP_NSID = 'com.blonk.blip'; 2 - export const GROOVE_NSID = 'com.blonk.groove'; 3 - export const COMMENT_NSID = 'com.blonk.comment'; 4 - export const VIBE_NSID = 'com.blonk.vibe'; 5 - export const VIBE_MEMBER_NSID = 'com.blonk.vibeMember'; 6 - 7 - export interface BlonkVibe { 8 - name: string; 9 - mood: string; 10 - emoji?: string; 11 - color?: string; 12 - createdAt: string; 13 - memberCount: number; 14 - } 15 - 16 - export interface BlonkVibeMember { 17 - vibe: { 18 - uri: string; 19 - cid: string; 20 - }; 21 - createdAt: string; 22 - } 23 - 24 - export interface BlonkBlip { 25 - title: string; 26 - body?: string; 27 - url?: string; 28 - tags?: string[]; 29 - vibe?: { 30 - uri: string; 31 - cid: string; 32 - name?: string; // denormalized for display 33 - }; 34 - createdAt: string; 35 - grooves: number; 36 - } 37 - 38 - export interface BlonkGroove { 39 - subject: { 40 - uri: string; 41 - cid: string; 42 - }; 43 - grooveType: 'looks_good' | 'shit_rips'; 44 - createdAt: string; 45 - } 46 - 47 - export interface BlonkComment { 48 - blip: { 49 - uri: string; 50 - cid: string; 51 - }; 52 - parent?: { 53 - uri: string; 54 - cid: string; 55 - }; 56 - text: string; 57 - createdAt: string; 58 - }
-70
src/search-monitor.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.SearchMonitor = void 0; 13 - const vibe_monitor_1 = require("./vibe-monitor"); 14 - class SearchMonitor { 15 - constructor(agent) { 16 - this.searchInterval = null; 17 - this.agent = agent; 18 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 19 - } 20 - start() { 21 - return __awaiter(this, void 0, void 0, function* () { 22 - console.log('🔍 Starting periodic search for #vibe-* mentions...'); 23 - // Initial search 24 - yield this.searchForVibeMentions(); 25 - // Search every 2 minutes 26 - this.searchInterval = setInterval(() => { 27 - this.searchForVibeMentions(); 28 - }, 2 * 60 * 1000); 29 - }); 30 - } 31 - searchForVibeMentions() { 32 - return __awaiter(this, void 0, void 0, function* () { 33 - try { 34 - console.log('🔎 Searching Bluesky for #vibe-* mentions...'); 35 - // Search for posts containing #vibe- 36 - const searchResponse = yield this.agent.app.bsky.feed.searchPosts({ 37 - q: 'vibe-', 38 - limit: 100, 39 - }); 40 - console.log(`Search returned ${searchResponse.data.posts.length} posts`); 41 - let newMentions = 0; 42 - for (const post of searchResponse.data.posts) { 43 - const text = post.record.text; 44 - const authorDid = post.author.did; 45 - if (text && text.includes('#vibe-')) { 46 - console.log(`Found #vibe-* mention by @${post.author.handle}: "${text.substring(0, 100)}..."`); 47 - yield this.vibeMonitor.checkPost(text, authorDid, post.uri); 48 - newMentions++; 49 - } 50 - } 51 - if (newMentions > 0) { 52 - console.log(`✅ Processed ${newMentions} new #vibe-* mentions`); 53 - } 54 - else { 55 - console.log('No new #vibe-* mentions found in this search'); 56 - } 57 - } 58 - catch (error) { 59 - console.error('Error searching for vibe mentions:', error); 60 - } 61 - }); 62 - } 63 - stop() { 64 - if (this.searchInterval) { 65 - clearInterval(this.searchInterval); 66 - this.searchInterval = null; 67 - } 68 - } 69 - } 70 - exports.SearchMonitor = SearchMonitor;
-75
src/search-monitor.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { VibeMonitor } from './vibe-monitor'; 3 - 4 - export class SearchMonitor { 5 - private agent: BskyAgent; 6 - private vibeMonitor: VibeMonitor; 7 - private searchInterval: NodeJS.Timer | null = null; 8 - 9 - constructor(agent: BskyAgent) { 10 - this.agent = agent; 11 - this.vibeMonitor = new VibeMonitor(agent); 12 - } 13 - 14 - async start() { 15 - console.log('🔍 Starting periodic search for #vibe-* mentions...'); 16 - 17 - // Initial search 18 - await this.searchForVibeMentions(); 19 - 20 - // Search every 2 minutes 21 - this.searchInterval = setInterval(() => { 22 - this.searchForVibeMentions(); 23 - }, 2 * 60 * 1000); 24 - } 25 - 26 - async searchForVibeMentions() { 27 - try { 28 - console.log('🔎 Searching Bluesky for #vibe-* mentions...'); 29 - 30 - // Search for posts containing #vibe- 31 - const searchResponse = await this.agent.app.bsky.feed.searchPosts({ 32 - q: 'vibe-', 33 - limit: 100, 34 - }); 35 - 36 - console.log(`Search returned ${searchResponse.data.posts.length} posts`); 37 - 38 - let newMentions = 0; 39 - let debugCount = 0; 40 - 41 - for (const post of searchResponse.data.posts) { 42 - const record = post.record as any; 43 - const text = record?.text; 44 - const authorDid = post.author.did; 45 - 46 - // Debug first few posts 47 - if (debugCount < 3 && text && text.includes('vibe-')) { 48 - console.log(`Debug: Post text contains 'vibe-': "${text.substring(0, 150)}"`); 49 - debugCount++; 50 - } 51 - 52 - if (text && text.includes('#vibe-')) { 53 - console.log(`Found #vibe-* mention by @${post.author.handle}: "${text.substring(0, 100)}..."`); 54 - await this.vibeMonitor.checkPost(text, authorDid, post.uri); 55 - newMentions++; 56 - } 57 - } 58 - 59 - if (newMentions > 0) { 60 - console.log(`✅ Processed ${newMentions} new #vibe-* mentions`); 61 - } else { 62 - console.log('No new #vibe-* mentions found in this search'); 63 - } 64 - } catch (error) { 65 - console.error('Error searching for vibe mentions:', error); 66 - } 67 - } 68 - 69 - stop() { 70 - if (this.searchInterval) { 71 - clearInterval(this.searchInterval); 72 - this.searchInterval = null; 73 - } 74 - } 75 - }
-115
src/seed-vibes.js
··· 1 - "use strict"; 2 - var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 - if (k2 === undefined) k2 = k; 4 - var desc = Object.getOwnPropertyDescriptor(m, k); 5 - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 - desc = { enumerable: true, get: function() { return m[k]; } }; 7 - } 8 - Object.defineProperty(o, k2, desc); 9 - }) : (function(o, m, k, k2) { 10 - if (k2 === undefined) k2 = k; 11 - o[k2] = m[k]; 12 - })); 13 - var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 - Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 - }) : function(o, v) { 16 - o["default"] = v; 17 - }); 18 - var __importStar = (this && this.__importStar) || (function () { 19 - var ownKeys = function(o) { 20 - ownKeys = Object.getOwnPropertyNames || function (o) { 21 - var ar = []; 22 - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; 23 - return ar; 24 - }; 25 - return ownKeys(o); 26 - }; 27 - return function (mod) { 28 - if (mod && mod.__esModule) return mod; 29 - var result = {}; 30 - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); 31 - __setModuleDefault(result, mod); 32 - return result; 33 - }; 34 - })(); 35 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 36 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 37 - return new (P || (P = Promise))(function (resolve, reject) { 38 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 39 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 40 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 41 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 42 - }); 43 - }; 44 - Object.defineProperty(exports, "__esModule", { value: true }); 45 - const agent_1 = require("./agent"); 46 - const vibes_1 = require("./vibes"); 47 - const dotenv = __importStar(require("dotenv")); 48 - dotenv.config(); 49 - const sampleVibes = [ 50 - { 51 - name: "sunset_sunglasses_struts", 52 - mood: "confident, golden hour energy, main character walking down the street", 53 - emoji: "😎", 54 - color: "#FF6B6B" 55 - }, 56 - { 57 - name: "doinkin_right", 58 - mood: "playful chaos, doing things correctly but in a silly way", 59 - emoji: "🤪", 60 - color: "#4ECDC4" 61 - }, 62 - { 63 - name: "dork_nerd_linkage", 64 - mood: "excitedly sharing obscure knowledge, Wikipedia rabbit holes at 3am", 65 - emoji: "🤓", 66 - color: "#95E1D3" 67 - }, 68 - { 69 - name: "cozy_corner_contemplation", 70 - mood: "rainy day thoughts, tea and blankets, gentle introspection", 71 - emoji: "☕", 72 - color: "#C7CEEA" 73 - }, 74 - { 75 - name: "midnight_snack_attack", 76 - mood: "impulsive 2am decisions, standing in front of the fridge energy", 77 - emoji: "🌙", 78 - color: "#2C3E50" 79 - }, 80 - { 81 - name: "sparkle_hustle_flow", 82 - mood: "getting things done but make it glamorous, productive but cute", 83 - emoji: "✨", 84 - color: "#FF6B9D" 85 - } 86 - ]; 87 - function seedVibes() { 88 - return __awaiter(this, void 0, void 0, function* () { 89 - try { 90 - const blonkAgent = new agent_1.BlonkAgent(); 91 - yield blonkAgent.login(); 92 - const agent = blonkAgent.getAgent(); 93 - const vibeManager = new vibes_1.VibeManager(agent); 94 - console.log('🌈 Creating sample vibes...\n'); 95 - for (const vibe of sampleVibes) { 96 - try { 97 - const uri = yield vibeManager.createVibe(vibe.name, vibe.mood, vibe.emoji, vibe.color); 98 - console.log(`✅ Created vibe: ${vibe.emoji} ${vibe.name}`); 99 - console.log(` Mood: ${vibe.mood}`); 100 - console.log(` URI: ${uri}\n`); 101 - } 102 - catch (error) { 103 - console.error(`❌ Failed to create vibe "${vibe.name}":`, error); 104 - } 105 - } 106 - console.log('🎉 Vibe seeding complete!'); 107 - console.log('Run the web server to see and join these vibes.'); 108 - } 109 - catch (error) { 110 - console.error('Error:', error); 111 - process.exit(1); 112 - } 113 - }); 114 - } 115 - seedVibes();
-81
src/seed-vibes.ts
··· 1 - import { BlonkAgent } from './agent'; 2 - import { VibeManager } from './vibes'; 3 - import * as dotenv from 'dotenv'; 4 - 5 - dotenv.config(); 6 - 7 - const sampleVibes = [ 8 - { 9 - name: "sunset_sunglasses_struts", 10 - mood: "confident, golden hour energy, main character walking down the street", 11 - emoji: "😎", 12 - color: "#FF6B6B" 13 - }, 14 - { 15 - name: "doinkin_right", 16 - mood: "playful chaos, doing things correctly but in a silly way", 17 - emoji: "🤪", 18 - color: "#4ECDC4" 19 - }, 20 - { 21 - name: "dork_nerd_linkage", 22 - mood: "excitedly sharing obscure knowledge, Wikipedia rabbit holes at 3am", 23 - emoji: "🤓", 24 - color: "#95E1D3" 25 - }, 26 - { 27 - name: "cozy_corner_contemplation", 28 - mood: "rainy day thoughts, tea and blankets, gentle introspection", 29 - emoji: "☕", 30 - color: "#C7CEEA" 31 - }, 32 - { 33 - name: "midnight_snack_attack", 34 - mood: "impulsive 2am decisions, standing in front of the fridge energy", 35 - emoji: "🌙", 36 - color: "#2C3E50" 37 - }, 38 - { 39 - name: "sparkle_hustle_flow", 40 - mood: "getting things done but make it glamorous, productive but cute", 41 - emoji: "✨", 42 - color: "#FF6B9D" 43 - } 44 - ]; 45 - 46 - async function seedVibes() { 47 - try { 48 - const blonkAgent = new BlonkAgent(); 49 - await blonkAgent.login(); 50 - 51 - const agent = blonkAgent.getAgent(); 52 - const vibeManager = new VibeManager(agent); 53 - 54 - console.log('🌈 Creating sample vibes...\n'); 55 - 56 - for (const vibe of sampleVibes) { 57 - try { 58 - const uri = await vibeManager.createVibe( 59 - vibe.name, 60 - vibe.mood, 61 - vibe.emoji, 62 - vibe.color 63 - ); 64 - console.log(`✅ Created vibe: ${vibe.emoji} ${vibe.name}`); 65 - console.log(` Mood: ${vibe.mood}`); 66 - console.log(` URI: ${uri}\n`); 67 - } catch (error) { 68 - console.error(`❌ Failed to create vibe "${vibe.name}":`, error); 69 - } 70 - } 71 - 72 - console.log('🎉 Vibe seeding complete!'); 73 - console.log('Run the web server to see and join these vibes.'); 74 - 75 - } catch (error) { 76 - console.error('Error:', error); 77 - process.exit(1); 78 - } 79 - } 80 - 81 - seedVibes();
-204
src/server.js
··· 1 - "use strict"; 2 - var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 - if (k2 === undefined) k2 = k; 4 - var desc = Object.getOwnPropertyDescriptor(m, k); 5 - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 - desc = { enumerable: true, get: function() { return m[k]; } }; 7 - } 8 - Object.defineProperty(o, k2, desc); 9 - }) : (function(o, m, k, k2) { 10 - if (k2 === undefined) k2 = k; 11 - o[k2] = m[k]; 12 - })); 13 - var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 - Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 - }) : function(o, v) { 16 - o["default"] = v; 17 - }); 18 - var __importStar = (this && this.__importStar) || (function () { 19 - var ownKeys = function(o) { 20 - ownKeys = Object.getOwnPropertyNames || function (o) { 21 - var ar = []; 22 - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; 23 - return ar; 24 - }; 25 - return ownKeys(o); 26 - }; 27 - return function (mod) { 28 - if (mod && mod.__esModule) return mod; 29 - var result = {}; 30 - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); 31 - __setModuleDefault(result, mod); 32 - return result; 33 - }; 34 - })(); 35 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 36 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 37 - return new (P || (P = Promise))(function (resolve, reject) { 38 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 39 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 40 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 41 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 42 - }); 43 - }; 44 - var __importDefault = (this && this.__importDefault) || function (mod) { 45 - return (mod && mod.__esModule) ? mod : { "default": mod }; 46 - }; 47 - Object.defineProperty(exports, "__esModule", { value: true }); 48 - const express_1 = __importDefault(require("express")); 49 - const cors_1 = __importDefault(require("cors")); 50 - const agent_1 = require("./agent"); 51 - const blips_1 = require("./blips"); 52 - const vibes_1 = require("./vibes"); 53 - const firehose_1 = require("./firehose"); 54 - const search_monitor_1 = require("./search-monitor"); 55 - const database_1 = require("./database"); 56 - const dotenv = __importStar(require("dotenv")); 57 - dotenv.config(); 58 - const app = (0, express_1.default)(); 59 - const PORT = process.env.PORT || 3001; 60 - app.use((0, cors_1.default)()); 61 - app.use(express_1.default.json()); 62 - let agent; 63 - let blipManager; 64 - let vibeManager; 65 - let aggregator; 66 - let searchMonitor; 67 - function initializeAgent() { 68 - return __awaiter(this, void 0, void 0, function* () { 69 - agent = new agent_1.BlonkAgent(); 70 - yield agent.login(); 71 - blipManager = new blips_1.BlipManager(agent.getAgent()); 72 - vibeManager = new vibes_1.VibeManager(agent.getAgent()); 73 - // Start aggregating blips from all users 74 - aggregator = new firehose_1.BlipAggregator(agent.getAgent()); 75 - aggregator.startPolling(30000); // Poll every 30 seconds 76 - // Start searching for #vibe-* hashtags on Bluesky 77 - searchMonitor = new search_monitor_1.SearchMonitor(agent.getAgent()); 78 - yield searchMonitor.start(); 79 - console.log('✅ Connected to AT Protocol'); 80 - console.log('📡 Starting blip aggregation...'); 81 - console.log('🔍 Searching Bluesky for #vibe-* hashtags every 2 minutes...'); 82 - }); 83 - } 84 - app.get('/api/blips', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 85 - try { 86 - // Get aggregated blips from all users 87 - const blips = database_1.blipDb.getBlips(50); 88 - res.json({ blips }); 89 - } 90 - catch (error) { 91 - console.error('Error fetching blips:', error); 92 - res.status(500).json({ error: 'Failed to fetch blips' }); 93 - } 94 - })); 95 - app.post('/api/blips', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 96 - try { 97 - const { title, url, body, tags, vibe } = req.body; 98 - const tagArray = tags || []; 99 - const uri = yield blipManager.createBlip(title, body, url, tagArray, vibe); 100 - res.json({ success: true, uri }); 101 - } 102 - catch (error) { 103 - console.error('Error creating blip:', error); 104 - res.status(500).json({ error: 'Failed to create blip' }); 105 - } 106 - })); 107 - // Get all vibes 108 - app.get('/api/vibes', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 109 - try { 110 - const vibes = database_1.vibeDb.getVibes(50); 111 - res.json({ vibes }); 112 - } 113 - catch (error) { 114 - console.error('Error fetching vibes:', error); 115 - res.status(500).json({ error: 'Failed to fetch vibes' }); 116 - } 117 - })); 118 - // Get emerging vibes 119 - app.get('/api/vibes/emerging', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 120 - try { 121 - const emergingVibes = database_1.vibeMentionDb.getEmergingVibes(); 122 - res.json({ emergingVibes }); 123 - } 124 - catch (error) { 125 - console.error('Error fetching emerging vibes:', error); 126 - res.status(500).json({ error: 'Failed to fetch emerging vibes' }); 127 - } 128 - })); 129 - // Get blips for a specific vibe 130 - app.get('/api/vibes/:vibeUri/blips', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 131 - try { 132 - const blips = database_1.blipDb.getBlipsByVibe(req.params.vibeUri); 133 - res.json({ blips }); 134 - } 135 - catch (error) { 136 - console.error('Error fetching vibe blips:', error); 137 - res.status(500).json({ error: 'Failed to fetch vibe blips' }); 138 - } 139 - })); 140 - // Vibe creation is now disabled - vibes are created through viral hashtags 141 - app.post('/api/vibes', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 142 - res.status(403).json({ 143 - error: 'Manual vibe creation is disabled. Vibes are created when #vibe-YOUR_VIBE reaches 5 unique mentions.' 144 - }); 145 - })); 146 - // Join a vibe 147 - app.post('/api/vibes/:vibeUri/join', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 148 - var _a; 149 - try { 150 - const { cid } = req.body; 151 - yield vibeManager.joinVibe(req.params.vibeUri, cid); 152 - database_1.vibeDb.addMember(req.params.vibeUri, (_a = agent.getAgent().session) === null || _a === void 0 ? void 0 : _a.did); 153 - res.json({ success: true }); 154 - } 155 - catch (error) { 156 - console.error('Error joining vibe:', error); 157 - res.status(500).json({ error: 'Failed to join vibe' }); 158 - } 159 - })); 160 - // Manual search trigger 161 - app.post('/api/vibes/search', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 162 - try { 163 - console.log('Manual vibe search triggered...'); 164 - yield searchMonitor.searchForVibeMentions(); 165 - res.json({ success: true, message: 'Search completed' }); 166 - } 167 - catch (error) { 168 - console.error('Error searching for vibes:', error); 169 - res.status(500).json({ error: 'Failed to search for vibes' }); 170 - } 171 - })); 172 - app.get('/api/blips/tag/:tag', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 173 - try { 174 - const taggedBlips = database_1.blipDb.getBlipsByTag(req.params.tag); 175 - res.json({ blips: taggedBlips, tag: req.params.tag }); 176 - } 177 - catch (error) { 178 - console.error('Error fetching tagged blips:', error); 179 - res.status(500).json({ error: 'Failed to fetch tagged blips' }); 180 - } 181 - })); 182 - // Add endpoint to follow new users 183 - app.post('/api/follow', (req, res) => __awaiter(void 0, void 0, void 0, function* () { 184 - try { 185 - const { did } = req.body; 186 - if (!did) { 187 - return res.status(400).json({ error: 'DID required' }); 188 - } 189 - aggregator.addUser(did); 190 - res.json({ success: true, message: `Now following ${did}` }); 191 - } 192 - catch (error) { 193 - console.error('Error following user:', error); 194 - res.status(500).json({ error: 'Failed to follow user' }); 195 - } 196 - })); 197 - initializeAgent().then(() => { 198 - app.listen(PORT, () => { 199 - console.log(`🚀 Blonk API server running at http://localhost:${PORT}`); 200 - }); 201 - }).catch(error => { 202 - console.error('Failed to initialize:', error); 203 - process.exit(1); 204 - });
-372
src/server.test.ts
··· 1 - import { BlonkAgent } from './agent'; 2 - import { BlipManager } from './blips'; 3 - import { VibeManager } from './vibes'; 4 - import { BlipAggregator } from './firehose'; 5 - import { SearchMonitor } from './search-monitor'; 6 - import { blipDb, vibeDb, vibeMentionDb } from './database'; 7 - 8 - // Mock all dependencies 9 - jest.mock('./agent'); 10 - jest.mock('./blips'); 11 - jest.mock('./vibes'); 12 - jest.mock('./firehose'); 13 - jest.mock('./search-monitor'); 14 - jest.mock('./database'); 15 - jest.mock('dotenv', () => ({ 16 - config: jest.fn() 17 - })); 18 - 19 - describe('Blonk Server Unit Tests', () => { 20 - let mockAgent: jest.Mocked<BlonkAgent>; 21 - let mockBlipManager: jest.Mocked<BlipManager>; 22 - let mockVibeManager: jest.Mocked<VibeManager>; 23 - let mockAggregator: jest.Mocked<BlipAggregator>; 24 - let mockSearchMonitor: jest.Mocked<SearchMonitor>; 25 - let mockBlipDb: any; 26 - let mockVibeDb: any; 27 - let mockVibeMentionDb: any; 28 - 29 - beforeEach(() => { 30 - // Clear all mocks 31 - jest.clearAllMocks(); 32 - 33 - // Set up mock instances 34 - mockAgent = { 35 - login: jest.fn().mockResolvedValue(undefined), 36 - getAgent: jest.fn().mockReturnValue({ 37 - session: { did: 'did:plc:test123' }, 38 - com: { 39 - atproto: { 40 - repo: { 41 - createRecord: jest.fn() 42 - } 43 - } 44 - } 45 - }) 46 - } as any; 47 - 48 - mockBlipManager = { 49 - createBlip: jest.fn().mockResolvedValue('at://did:plc:test/app.bsky.feed.post/abc123') 50 - } as any; 51 - 52 - mockVibeManager = { 53 - joinVibe: jest.fn().mockResolvedValue(undefined), 54 - createVibe: jest.fn().mockResolvedValue('at://did:plc:test/vibe/xyz789') 55 - } as any; 56 - 57 - mockAggregator = { 58 - startPolling: jest.fn(), 59 - addUser: jest.fn() 60 - } as any; 61 - 62 - mockSearchMonitor = { 63 - start: jest.fn().mockResolvedValue(undefined), 64 - searchForVibeMentions: jest.fn().mockResolvedValue(undefined) 65 - } as any; 66 - 67 - // Set up database mocks 68 - mockBlipDb = { 69 - getBlips: jest.fn().mockReturnValue([]), 70 - getBlipsByVibe: jest.fn().mockReturnValue([]), 71 - getBlipsByTag: jest.fn().mockReturnValue([]), 72 - addBlip: jest.fn() 73 - }; 74 - 75 - mockVibeDb = { 76 - getVibes: jest.fn().mockReturnValue([]), 77 - addMember: jest.fn(), 78 - getVibe: jest.fn() 79 - }; 80 - 81 - mockVibeMentionDb = { 82 - getEmergingVibes: jest.fn().mockReturnValue([]), 83 - getVibeByName: jest.fn(), 84 - recordMention: jest.fn() 85 - }; 86 - 87 - // Set up mocked constructors 88 - (BlonkAgent as jest.MockedClass<typeof BlonkAgent>).mockImplementation(() => mockAgent); 89 - (BlipManager as jest.MockedClass<typeof BlipManager>).mockImplementation(() => mockBlipManager); 90 - (VibeManager as jest.MockedClass<typeof VibeManager>).mockImplementation(() => mockVibeManager); 91 - (BlipAggregator as jest.MockedClass<typeof BlipAggregator>).mockImplementation(() => mockAggregator); 92 - (SearchMonitor as jest.MockedClass<typeof SearchMonitor>).mockImplementation(() => mockSearchMonitor); 93 - 94 - // Replace database exports with mocks 95 - (blipDb as any) = mockBlipDb; 96 - (vibeDb as any) = mockVibeDb; 97 - (vibeMentionDb as any) = mockVibeMentionDb; 98 - }); 99 - 100 - describe('Component Initialization', () => { 101 - it('should create BlonkAgent instance', () => { 102 - const agent = new BlonkAgent(); 103 - expect(BlonkAgent).toHaveBeenCalled(); 104 - expect(agent).toBe(mockAgent); 105 - }); 106 - 107 - it('should login to BlonkAgent', async () => { 108 - const agent = new BlonkAgent(); 109 - await agent.login(); 110 - expect(mockAgent.login).toHaveBeenCalled(); 111 - }); 112 - 113 - it('should create BlipManager with agent instance', () => { 114 - const agentInstance = mockAgent.getAgent(); 115 - const manager = new BlipManager(agentInstance); 116 - expect(BlipManager).toHaveBeenCalledWith(agentInstance); 117 - expect(manager).toBe(mockBlipManager); 118 - }); 119 - 120 - it('should create VibeManager with agent instance', () => { 121 - const agentInstance = mockAgent.getAgent(); 122 - const manager = new VibeManager(agentInstance); 123 - expect(VibeManager).toHaveBeenCalledWith(agentInstance); 124 - expect(manager).toBe(mockVibeManager); 125 - }); 126 - 127 - it('should create BlipAggregator with agent instance', () => { 128 - const agentInstance = mockAgent.getAgent(); 129 - const aggregator = new BlipAggregator(agentInstance); 130 - expect(BlipAggregator).toHaveBeenCalledWith(agentInstance); 131 - expect(aggregator).toBe(mockAggregator); 132 - }); 133 - 134 - it('should start polling on BlipAggregator', () => { 135 - const aggregator = new BlipAggregator(mockAgent.getAgent()); 136 - aggregator.startPolling(30000); 137 - expect(mockAggregator.startPolling).toHaveBeenCalledWith(30000); 138 - }); 139 - 140 - it('should create SearchMonitor with agent instance', () => { 141 - const agentInstance = mockAgent.getAgent(); 142 - const monitor = new SearchMonitor(agentInstance); 143 - expect(SearchMonitor).toHaveBeenCalledWith(agentInstance); 144 - expect(monitor).toBe(mockSearchMonitor); 145 - }); 146 - 147 - it('should start SearchMonitor', async () => { 148 - const monitor = new SearchMonitor(mockAgent.getAgent()); 149 - await monitor.start(); 150 - expect(mockSearchMonitor.start).toHaveBeenCalled(); 151 - }); 152 - }); 153 - 154 - describe('BlipManager Operations', () => { 155 - it('should create blip with all parameters', async () => { 156 - const title = 'Test Title'; 157 - const body = 'Test Body'; 158 - const url = 'https://example.com'; 159 - const tags = ['tag1', 'tag2']; 160 - const vibe = { uri: 'at://vibe/uri', cid: 'vibecid123', name: 'Test Vibe' }; 161 - 162 - const uri = await mockBlipManager.createBlip(title, body, url, tags, vibe); 163 - 164 - expect(uri).toBe('at://did:plc:test/app.bsky.feed.post/abc123'); 165 - expect(mockBlipManager.createBlip).toHaveBeenCalledWith(title, body, url, tags, vibe); 166 - }); 167 - 168 - it('should handle blip creation errors', async () => { 169 - mockBlipManager.createBlip.mockRejectedValue(new Error('Creation failed')); 170 - 171 - await expect( 172 - mockBlipManager.createBlip('Title', 'Body', 'url', [], undefined) 173 - ).rejects.toThrow('Creation failed'); 174 - }); 175 - }); 176 - 177 - describe('VibeManager Operations', () => { 178 - it('should join vibe successfully', async () => { 179 - const vibeUri = 'at://vibe/uri'; 180 - const cid = 'cid123'; 181 - 182 - await mockVibeManager.joinVibe(vibeUri, cid); 183 - 184 - expect(mockVibeManager.joinVibe).toHaveBeenCalledWith(vibeUri, cid); 185 - }); 186 - 187 - it('should handle join vibe errors', async () => { 188 - mockVibeManager.joinVibe.mockRejectedValue(new Error('Join failed')); 189 - 190 - await expect( 191 - mockVibeManager.joinVibe('at://vibe/uri', 'cid123') 192 - ).rejects.toThrow('Join failed'); 193 - }); 194 - 195 - it('should create vibe successfully', async () => { 196 - const name = 'test_vibe'; 197 - const mood = 'chill'; 198 - const emoji = '🎵'; 199 - const color = '#FF0000'; 200 - 201 - const uri = await mockVibeManager.createVibe(name, mood, emoji, color); 202 - 203 - expect(uri).toBe('at://did:plc:test/vibe/xyz789'); 204 - expect(mockVibeManager.createVibe).toHaveBeenCalledWith(name, mood, emoji, color); 205 - }); 206 - }); 207 - 208 - describe('Database Operations', () => { 209 - describe('BlipDb', () => { 210 - it('should get blips with limit', () => { 211 - const mockBlips = [ 212 - { id: '1', title: 'Blip 1' }, 213 - { id: '2', title: 'Blip 2' } 214 - ]; 215 - mockBlipDb.getBlips.mockReturnValue(mockBlips); 216 - 217 - const result = mockBlipDb.getBlips(50); 218 - 219 - expect(result).toEqual(mockBlips); 220 - expect(mockBlipDb.getBlips).toHaveBeenCalledWith(50); 221 - }); 222 - 223 - it('should get blips by vibe', () => { 224 - const vibeUri = 'at://vibe/uri'; 225 - const mockBlips = [{ id: '1', title: 'Vibe Blip' }]; 226 - mockBlipDb.getBlipsByVibe.mockReturnValue(mockBlips); 227 - 228 - const result = mockBlipDb.getBlipsByVibe(vibeUri); 229 - 230 - expect(result).toEqual(mockBlips); 231 - expect(mockBlipDb.getBlipsByVibe).toHaveBeenCalledWith(vibeUri); 232 - }); 233 - 234 - it('should get blips by tag', () => { 235 - const tag = 'test-tag'; 236 - const mockBlips = [{ id: '1', title: 'Tagged Blip' }]; 237 - mockBlipDb.getBlipsByTag.mockReturnValue(mockBlips); 238 - 239 - const result = mockBlipDb.getBlipsByTag(tag); 240 - 241 - expect(result).toEqual(mockBlips); 242 - expect(mockBlipDb.getBlipsByTag).toHaveBeenCalledWith(tag); 243 - }); 244 - }); 245 - 246 - describe('VibeDb', () => { 247 - it('should get vibes with limit', () => { 248 - const mockVibes = [ 249 - { uri: 'at://vibe1', name: 'Vibe 1' }, 250 - { uri: 'at://vibe2', name: 'Vibe 2' } 251 - ]; 252 - mockVibeDb.getVibes.mockReturnValue(mockVibes); 253 - 254 - const result = mockVibeDb.getVibes(50); 255 - 256 - expect(result).toEqual(mockVibes); 257 - expect(mockVibeDb.getVibes).toHaveBeenCalledWith(50); 258 - }); 259 - 260 - it('should add member to vibe', () => { 261 - const vibeUri = 'at://vibe/uri'; 262 - const memberDid = 'did:plc:member'; 263 - 264 - mockVibeDb.addMember(vibeUri, memberDid); 265 - 266 - expect(mockVibeDb.addMember).toHaveBeenCalledWith(vibeUri, memberDid); 267 - }); 268 - }); 269 - 270 - describe('VibeMentionDb', () => { 271 - it('should get emerging vibes', () => { 272 - const mockEmergingVibes = [ 273 - { hashtag: '#vibe-test', count: 7, uniqueAuthors: 5 }, 274 - { hashtag: '#vibe-demo', count: 5, uniqueAuthors: 5 } 275 - ]; 276 - mockVibeMentionDb.getEmergingVibes.mockReturnValue(mockEmergingVibes); 277 - 278 - const result = mockVibeMentionDb.getEmergingVibes(); 279 - 280 - expect(result).toEqual(mockEmergingVibes); 281 - expect(mockVibeMentionDb.getEmergingVibes).toHaveBeenCalled(); 282 - }); 283 - }); 284 - }); 285 - 286 - describe('BlipAggregator Operations', () => { 287 - it('should add user to aggregation', () => { 288 - const did = 'did:plc:newuser'; 289 - 290 - mockAggregator.addUser(did); 291 - 292 - expect(mockAggregator.addUser).toHaveBeenCalledWith(did); 293 - }); 294 - }); 295 - 296 - describe('SearchMonitor Operations', () => { 297 - it('should search for vibe mentions', async () => { 298 - await mockSearchMonitor.searchForVibeMentions(); 299 - 300 - expect(mockSearchMonitor.searchForVibeMentions).toHaveBeenCalled(); 301 - }); 302 - 303 - it('should handle search errors', async () => { 304 - mockSearchMonitor.searchForVibeMentions.mockRejectedValue(new Error('Search failed')); 305 - 306 - await expect( 307 - mockSearchMonitor.searchForVibeMentions() 308 - ).rejects.toThrow('Search failed'); 309 - }); 310 - }); 311 - 312 - describe('Error Scenarios', () => { 313 - it('should handle database errors gracefully', () => { 314 - mockBlipDb.getBlips.mockImplementation(() => { 315 - throw new Error('Database connection failed'); 316 - }); 317 - 318 - expect(() => mockBlipDb.getBlips(50)).toThrow('Database connection failed'); 319 - }); 320 - 321 - it('should handle missing agent session', () => { 322 - mockAgent.getAgent.mockReturnValue({ 323 - session: null 324 - } as any); 325 - 326 - const agentInstance = mockAgent.getAgent(); 327 - expect(agentInstance.session).toBeNull(); 328 - }); 329 - }); 330 - 331 - describe('Integration Flow', () => { 332 - it('should complete full blip creation flow', async () => { 333 - // Initialize agent 334 - const agent = new BlonkAgent(); 335 - await agent.login(); 336 - 337 - // Create manager 338 - const blipManager = new BlipManager(agent.getAgent()); 339 - 340 - // Create blip 341 - const uri = await blipManager.createBlip( 342 - 'Integration Test', 343 - 'Testing full flow', 344 - 'https://test.com', 345 - ['integration', 'test'], 346 - undefined 347 - ); 348 - 349 - expect(uri).toBe('at://did:plc:test/app.bsky.feed.post/abc123'); 350 - expect(mockAgent.login).toHaveBeenCalled(); 351 - expect(mockBlipManager.createBlip).toHaveBeenCalled(); 352 - }); 353 - 354 - it('should complete full vibe join flow', async () => { 355 - // Initialize agent 356 - const agent = new BlonkAgent(); 357 - await agent.login(); 358 - 359 - // Create manager 360 - const vibeManager = new VibeManager(agent.getAgent()); 361 - 362 - // Join vibe 363 - await vibeManager.joinVibe('at://vibe/uri', 'cid123'); 364 - 365 - // Add member to database 366 - mockVibeDb.addMember('at://vibe/uri', 'did:plc:test123'); 367 - 368 - expect(mockVibeManager.joinVibe).toHaveBeenCalledWith('at://vibe/uri', 'cid123'); 369 - expect(mockVibeDb.addMember).toHaveBeenCalledWith('at://vibe/uri', 'did:plc:test123'); 370 - }); 371 - }); 372 - });
-167
src/server.ts
··· 1 - import express from 'express'; 2 - import cors from 'cors'; 3 - import { BlonkAgent } from './agent'; 4 - import { BlipManager } from './blips'; 5 - import { VibeManager } from './vibes'; 6 - import { BlipAggregator } from './firehose'; 7 - import { SearchMonitor } from './search-monitor'; 8 - import { blipDb, vibeDb, vibeMentionDb } from './database'; 9 - import * as dotenv from 'dotenv'; 10 - 11 - dotenv.config(); 12 - 13 - const app = express(); 14 - const PORT = process.env.PORT || 3001; 15 - 16 - app.use(cors()); 17 - app.use(express.json()); 18 - 19 - let agent: BlonkAgent; 20 - let blipManager: BlipManager; 21 - let vibeManager: VibeManager; 22 - let aggregator: BlipAggregator; 23 - let searchMonitor: SearchMonitor; 24 - 25 - async function initializeAgent() { 26 - agent = new BlonkAgent(); 27 - await agent.login(); 28 - blipManager = new BlipManager(agent.getAgent()); 29 - vibeManager = new VibeManager(agent.getAgent()); 30 - 31 - // Start aggregating blips from all users 32 - aggregator = new BlipAggregator(agent.getAgent()); 33 - aggregator.startPolling(30000); // Poll every 30 seconds 34 - 35 - // Start searching for #vibe-* hashtags on Bluesky 36 - searchMonitor = new SearchMonitor(agent.getAgent()); 37 - await searchMonitor.start(); 38 - 39 - console.log('✅ Connected to AT Protocol'); 40 - console.log('📡 Starting blip aggregation...'); 41 - console.log('🔍 Searching Bluesky for #vibe-* hashtags every 2 minutes...'); 42 - } 43 - 44 - app.get('/api/blips', async (req, res) => { 45 - try { 46 - // Get aggregated blips from all users 47 - const blips = blipDb.getBlips(50); 48 - res.json({ blips }); 49 - } catch (error) { 50 - console.error('Error fetching blips:', error); 51 - res.status(500).json({ error: 'Failed to fetch blips' }); 52 - } 53 - }); 54 - 55 - 56 - app.post('/api/blips', async (req, res) => { 57 - try { 58 - const { title, url, body, tags, vibe } = req.body; 59 - const tagArray = tags || []; 60 - 61 - const uri = await blipManager.createBlip(title, body, url, tagArray, vibe); 62 - res.json({ success: true, uri }); 63 - } catch (error) { 64 - console.error('Error creating blip:', error); 65 - res.status(500).json({ error: 'Failed to create blip' }); 66 - } 67 - }); 68 - 69 - // Get all vibes 70 - app.get('/api/vibes', async (req, res) => { 71 - try { 72 - const vibes = vibeDb.getVibes(50); 73 - res.json({ vibes }); 74 - } catch (error) { 75 - console.error('Error fetching vibes:', error); 76 - res.status(500).json({ error: 'Failed to fetch vibes' }); 77 - } 78 - }); 79 - 80 - // Get emerging vibes 81 - app.get('/api/vibes/emerging', async (req, res) => { 82 - try { 83 - const emergingVibes = vibeMentionDb.getEmergingVibes(); 84 - res.json({ emergingVibes }); 85 - } catch (error) { 86 - console.error('Error fetching emerging vibes:', error); 87 - res.status(500).json({ error: 'Failed to fetch emerging vibes' }); 88 - } 89 - }); 90 - 91 - // Get blips for a specific vibe 92 - app.get('/api/vibes/:vibeUri/blips', async (req, res) => { 93 - try { 94 - const blips = blipDb.getBlipsByVibe(req.params.vibeUri); 95 - res.json({ blips }); 96 - } catch (error) { 97 - console.error('Error fetching vibe blips:', error); 98 - res.status(500).json({ error: 'Failed to fetch vibe blips' }); 99 - } 100 - }); 101 - 102 - // Vibe creation is now disabled - vibes are created through viral hashtags 103 - app.post('/api/vibes', async (req, res) => { 104 - res.status(403).json({ 105 - error: 'Manual vibe creation is disabled. Vibes are created when #vibe-YOUR_VIBE reaches 5 unique mentions.' 106 - }); 107 - }); 108 - 109 - // Join a vibe 110 - app.post('/api/vibes/:vibeUri/join', async (req, res) => { 111 - try { 112 - const { cid } = req.body; 113 - await vibeManager.joinVibe(req.params.vibeUri, cid); 114 - vibeDb.addMember(req.params.vibeUri, agent.getAgent().session?.did!); 115 - res.json({ success: true }); 116 - } catch (error) { 117 - console.error('Error joining vibe:', error); 118 - res.status(500).json({ error: 'Failed to join vibe' }); 119 - } 120 - }); 121 - 122 - // Manual search trigger 123 - app.post('/api/vibes/search', async (req, res) => { 124 - try { 125 - console.log('Manual vibe search triggered...'); 126 - await searchMonitor.searchForVibeMentions(); 127 - res.json({ success: true, message: 'Search completed' }); 128 - } catch (error) { 129 - console.error('Error searching for vibes:', error); 130 - res.status(500).json({ error: 'Failed to search for vibes' }); 131 - } 132 - }); 133 - 134 - app.get('/api/blips/tag/:tag', async (req, res) => { 135 - try { 136 - const taggedBlips = blipDb.getBlipsByTag(req.params.tag); 137 - res.json({ blips: taggedBlips, tag: req.params.tag }); 138 - } catch (error) { 139 - console.error('Error fetching tagged blips:', error); 140 - res.status(500).json({ error: 'Failed to fetch tagged blips' }); 141 - } 142 - }); 143 - 144 - // Add endpoint to follow new users 145 - app.post('/api/follow', async (req, res) => { 146 - try { 147 - const { did } = req.body; 148 - if (!did) { 149 - return res.status(400).json({ error: 'DID required' }); 150 - } 151 - 152 - aggregator.addUser(did); 153 - res.json({ success: true, message: `Now following ${did}` }); 154 - } catch (error) { 155 - console.error('Error following user:', error); 156 - res.status(500).json({ error: 'Failed to follow user' }); 157 - } 158 - }); 159 - 160 - initializeAgent().then(() => { 161 - app.listen(PORT, () => { 162 - console.log(`🚀 Blonk API server running at http://localhost:${PORT}`); 163 - }); 164 - }).catch(error => { 165 - console.error('Failed to initialize:', error); 166 - process.exit(1); 167 - });
-135
src/simple-firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.SimpleFirehoseMonitor = void 0; 13 - const ws_1 = require("ws"); 14 - const cbor_x_1 = require("cbor-x"); 15 - const vibe_monitor_1 = require("./vibe-monitor"); 16 - class SimpleFirehoseMonitor { 17 - constructor(agent) { 18 - this.ws = null; 19 - this.reconnectTimeout = null; 20 - this.messageCount = 0; 21 - this.vibeDetectionCount = 0; 22 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 23 - } 24 - start() { 25 - return __awaiter(this, void 0, void 0, function* () { 26 - console.log('🔥 Starting simple Bluesky Firehose monitoring for #vibe-* hashtags...'); 27 - // Connect to Bluesky firehose - use the working network endpoint 28 - const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos'; 29 - console.log(`🔗 Connecting to: ${firehoseUrl}`); 30 - this.ws = new ws_1.WebSocket(firehoseUrl); 31 - this.ws.on('open', () => { 32 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 33 - this.messageCount = 0; 34 - this.vibeDetectionCount = 0; 35 - // Log stats every 30 seconds 36 - setInterval(() => { 37 - console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections`); 38 - }, 30000); 39 - }); 40 - this.ws.on('message', (data) => __awaiter(this, void 0, void 0, function* () { 41 - var _a; 42 - this.messageCount++; 43 - try { 44 - // Decode the CBOR message 45 - const decoded = (0, cbor_x_1.decode)(new Uint8Array(data)); 46 - if (decoded && decoded.$type === 'com.atproto.sync.subscribeRepos#commit') { 47 - // Process commits 48 - const commit = decoded.commit; 49 - if (!commit) 50 - return; 51 - // Look for post creates 52 - for (const op of decoded.ops || []) { 53 - if (op.action === 'create' && ((_a = op.path) === null || _a === void 0 ? void 0 : _a.includes('app.bsky.feed.post'))) { 54 - try { 55 - // Try to decode the blocks 56 - const blocks = decoded.blocks; 57 - if (!blocks) 58 - continue; 59 - // blocks might be a Uint8Array that needs to be decoded 60 - let record; 61 - if (blocks instanceof Uint8Array) { 62 - // If blocks is raw bytes, decode it 63 - const blocksDecoded = (0, cbor_x_1.decode)(blocks); 64 - record = blocksDecoded; 65 - } 66 - else if (typeof blocks.get === 'function') { 67 - // If blocks is a Map 68 - const recordBytes = blocks.get(op.cid); 69 - if (!recordBytes) 70 - continue; 71 - record = (0, cbor_x_1.decode)(recordBytes); 72 - } 73 - else if (Array.isArray(blocks)) { 74 - // If blocks is an array, find the matching CID 75 - const block = blocks.find(b => b.cid === op.cid); 76 - if (!block) 77 - continue; 78 - record = (0, cbor_x_1.decode)(block.bytes); 79 - } 80 - else { 81 - // Try direct decoding 82 - record = blocks; 83 - } 84 - if (record && record.text && typeof record.text === 'string') { 85 - // Check for #vibe- hashtags 86 - if (record.text.toLowerCase().includes('#vibe-')) { 87 - this.vibeDetectionCount++; 88 - const authorDid = decoded.repo; 89 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 90 - console.log(` Author: ${authorDid}`); 91 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 92 - // Process the vibe mention 93 - yield this.vibeMonitor.checkPost(record.text, authorDid, `at://${authorDid}/${op.path}`); 94 - } 95 - } 96 - } 97 - catch (e) { 98 - // Ignore individual record errors 99 - } 100 - } 101 - } 102 - } 103 - } 104 - catch (error) { 105 - // Ignore decoding errors - firehose sends various message types 106 - } 107 - })); 108 - this.ws.on('error', (error) => { 109 - console.error('❌ Firehose WebSocket error:', error.message); 110 - if (error.code) { 111 - console.error(' Error code:', error.code); 112 - } 113 - if (error.stack) { 114 - console.error(' Stack trace:', error.stack.split('\n').slice(0, 3).join('\n')); 115 - } 116 - }); 117 - this.ws.on('close', (code, reason) => { 118 - console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 119 - console.log(' Reconnecting in 5 seconds...'); 120 - this.reconnectTimeout = setTimeout(() => this.start(), 5000); 121 - }); 122 - }); 123 - } 124 - stop() { 125 - if (this.reconnectTimeout) { 126 - clearTimeout(this.reconnectTimeout); 127 - this.reconnectTimeout = null; 128 - } 129 - if (this.ws) { 130 - this.ws.close(); 131 - this.ws = null; 132 - } 133 - } 134 - } 135 - exports.SimpleFirehoseMonitor = SimpleFirehoseMonitor;
-129
src/simple-firehose.ts
··· 1 - import { WebSocket } from 'ws'; 2 - import { decode } from 'cbor-x'; 3 - import { VibeMonitor } from './vibe-monitor'; 4 - import { BskyAgent } from '@atproto/api'; 5 - 6 - export class SimpleFirehoseMonitor { 7 - private ws: WebSocket | null = null; 8 - private vibeMonitor: VibeMonitor; 9 - private reconnectTimeout: NodeJS.Timeout | null = null; 10 - private messageCount = 0; 11 - private vibeDetectionCount = 0; 12 - 13 - constructor(agent: BskyAgent) { 14 - this.vibeMonitor = new VibeMonitor(agent); 15 - } 16 - 17 - async start() { 18 - console.log('🔥 Starting simple Bluesky Firehose monitoring for #vibe-* hashtags...'); 19 - 20 - // Connect to Bluesky firehose - use the working network endpoint 21 - const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos'; 22 - console.log(`🔗 Connecting to: ${firehoseUrl}`); 23 - 24 - this.ws = new WebSocket(firehoseUrl); 25 - 26 - this.ws.on('open', () => { 27 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 28 - this.messageCount = 0; 29 - this.vibeDetectionCount = 0; 30 - 31 - // Log stats every 30 seconds 32 - setInterval(() => { 33 - console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections`); 34 - }, 30000); 35 - }); 36 - 37 - this.ws.on('message', async (data: Buffer) => { 38 - this.messageCount++; 39 - 40 - try { 41 - // Decode the CBOR message 42 - const decoded = decode(new Uint8Array(data)); 43 - 44 - if (decoded && decoded.$type === 'com.atproto.sync.subscribeRepos#commit') { 45 - // Process commits 46 - const commit = decoded.commit; 47 - if (!commit) return; 48 - 49 - // Look for post creates 50 - for (const op of decoded.ops || []) { 51 - if (op.action === 'create' && op.path?.includes('app.bsky.feed.post')) { 52 - try { 53 - // Try to decode the blocks 54 - const blocks = decoded.blocks; 55 - if (!blocks) continue; 56 - 57 - // blocks might be a Uint8Array that needs to be decoded 58 - let record; 59 - if (blocks instanceof Uint8Array) { 60 - // If blocks is raw bytes, decode it 61 - const blocksDecoded = decode(blocks); 62 - record = blocksDecoded; 63 - } else if (typeof blocks.get === 'function') { 64 - // If blocks is a Map 65 - const recordBytes = blocks.get(op.cid); 66 - if (!recordBytes) continue; 67 - record = decode(recordBytes); 68 - } else if (Array.isArray(blocks)) { 69 - // If blocks is an array, find the matching CID 70 - const block = blocks.find(b => b.cid === op.cid); 71 - if (!block) continue; 72 - record = decode(block.bytes); 73 - } else { 74 - // Try direct decoding 75 - record = blocks; 76 - } 77 - 78 - if (record && record.text && typeof record.text === 'string') { 79 - // Check for #vibe- hashtags 80 - if (record.text.toLowerCase().includes('#vibe-')) { 81 - this.vibeDetectionCount++; 82 - const authorDid = decoded.repo; 83 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 84 - console.log(` Author: ${authorDid}`); 85 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 86 - 87 - // Process the vibe mention 88 - await this.vibeMonitor.checkPost(record.text, authorDid, `at://${authorDid}/${op.path}`); 89 - } 90 - } 91 - } catch (e) { 92 - // Ignore individual record errors 93 - } 94 - } 95 - } 96 - } 97 - } catch (error) { 98 - // Ignore decoding errors - firehose sends various message types 99 - } 100 - }); 101 - 102 - this.ws.on('error', (error: any) => { 103 - console.error('❌ Firehose WebSocket error:', error.message); 104 - if (error.code) { 105 - console.error(' Error code:', error.code); 106 - } 107 - if (error.stack) { 108 - console.error(' Stack trace:', error.stack.split('\n').slice(0, 3).join('\n')); 109 - } 110 - }); 111 - 112 - this.ws.on('close', (code, reason) => { 113 - console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 114 - console.log(' Reconnecting in 5 seconds...'); 115 - this.reconnectTimeout = setTimeout(() => this.start(), 5000); 116 - }); 117 - } 118 - 119 - stop() { 120 - if (this.reconnectTimeout) { 121 - clearTimeout(this.reconnectTimeout); 122 - this.reconnectTimeout = null; 123 - } 124 - if (this.ws) { 125 - this.ws.close(); 126 - this.ws = null; 127 - } 128 - } 129 - }
-38
src/test-atproto-sync-firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - const api_1 = require("@atproto/api"); 13 - const firehose_with_atproto_sync_1 = require("./firehose-with-atproto-sync"); 14 - function main() { 15 - return __awaiter(this, void 0, void 0, function* () { 16 - console.log('🚀 Starting AT Protocol Sync Firehose Test...'); 17 - const agent = new api_1.BskyAgent({ 18 - service: 'https://bsky.social' 19 - }); 20 - const monitor = new firehose_with_atproto_sync_1.AtprotoSyncFirehoseMonitor(agent); 21 - // Handle graceful shutdown 22 - process.on('SIGINT', () => __awaiter(this, void 0, void 0, function* () { 23 - console.log('\n⏹️ Shutting down...'); 24 - yield monitor.stop(); 25 - process.exit(0); 26 - })); 27 - process.on('SIGTERM', () => __awaiter(this, void 0, void 0, function* () { 28 - console.log('\n⏹️ Shutting down...'); 29 - yield monitor.stop(); 30 - process.exit(0); 31 - })); 32 - yield monitor.start(); 33 - }); 34 - } 35 - main().catch((error) => { 36 - console.error('Fatal error:', error); 37 - process.exit(1); 38 - });
-32
src/test-atproto-sync-firehose.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { AtprotoSyncFirehoseMonitor } from './firehose-with-atproto-sync'; 3 - 4 - async function main() { 5 - console.log('🚀 Starting AT Protocol Sync Firehose Test...'); 6 - 7 - const agent = new BskyAgent({ 8 - service: 'https://bsky.social' 9 - }); 10 - 11 - const monitor = new AtprotoSyncFirehoseMonitor(agent); 12 - 13 - // Handle graceful shutdown 14 - process.on('SIGINT', async () => { 15 - console.log('\n⏹️ Shutting down...'); 16 - await monitor.stop(); 17 - process.exit(0); 18 - }); 19 - 20 - process.on('SIGTERM', async () => { 21 - console.log('\n⏹️ Shutting down...'); 22 - await monitor.stop(); 23 - process.exit(0); 24 - }); 25 - 26 - await monitor.start(); 27 - } 28 - 29 - main().catch((error) => { 30 - console.error('Fatal error:', error); 31 - process.exit(1); 32 - });
-38
src/test-fixed-firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - const api_1 = require("@atproto/api"); 13 - const firehose_fixed_1 = require("./firehose-fixed"); 14 - function main() { 15 - return __awaiter(this, void 0, void 0, function* () { 16 - console.log('🚀 Starting Fixed Firehose Test...'); 17 - const agent = new api_1.BskyAgent({ 18 - service: 'https://bsky.social' 19 - }); 20 - const monitor = new firehose_fixed_1.FixedFirehoseMonitor(agent); 21 - // Handle graceful shutdown 22 - process.on('SIGINT', () => { 23 - console.log('\n⏹️ Shutting down...'); 24 - monitor.stop(); 25 - process.exit(0); 26 - }); 27 - process.on('SIGTERM', () => { 28 - console.log('\n⏹️ Shutting down...'); 29 - monitor.stop(); 30 - process.exit(0); 31 - }); 32 - yield monitor.start(); 33 - }); 34 - } 35 - main().catch((error) => { 36 - console.error('Fatal error:', error); 37 - process.exit(1); 38 - });
-32
src/test-fixed-firehose.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { FixedFirehoseMonitor } from './firehose-fixed'; 3 - 4 - async function main() { 5 - console.log('🚀 Starting Fixed Firehose Test...'); 6 - 7 - const agent = new BskyAgent({ 8 - service: 'https://bsky.social' 9 - }); 10 - 11 - const monitor = new FixedFirehoseMonitor(agent); 12 - 13 - // Handle graceful shutdown 14 - process.on('SIGINT', () => { 15 - console.log('\n⏹️ Shutting down...'); 16 - monitor.stop(); 17 - process.exit(0); 18 - }); 19 - 20 - process.on('SIGTERM', () => { 21 - console.log('\n⏹️ Shutting down...'); 22 - monitor.stop(); 23 - process.exit(0); 24 - }); 25 - 26 - await monitor.start(); 27 - } 28 - 29 - main().catch((error) => { 30 - console.error('Fatal error:', error); 31 - process.exit(1); 32 - });
-50
src/test-skyware-firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - const { FirehoseSubscription } = require('@skyware/firehose'); 12 - function testFirehose() { 13 - return __awaiter(this, void 0, void 0, function* () { 14 - console.log('🔥 Testing Skyware Firehose...'); 15 - const firehose = new FirehoseSubscription({ 16 - service: 'wss://bsky.network', 17 - filter: { 18 - collections: ['app.bsky.feed.post'] 19 - } 20 - }); 21 - let messageCount = 0; 22 - let vibeCount = 0; 23 - firehose.on('commit', (commit) => { 24 - messageCount++; 25 - commit.ops.forEach((op) => { 26 - var _a; 27 - if (op.action === 'create' && ((_a = op.record) === null || _a === void 0 ? void 0 : _a.text)) { 28 - const text = op.record.text; 29 - if (text.toLowerCase().includes('#vibe-')) { 30 - vibeCount++; 31 - console.log(`\n🎯 FOUND #vibe-* POST!`); 32 - console.log(` Author: ${commit.repo}`); 33 - console.log(` Text: ${text}`); 34 - console.log(` Path: ${op.path}`); 35 - } 36 - } 37 - }); 38 - }); 39 - firehose.on('error', (error) => { 40 - console.error('Firehose error:', error); 41 - }); 42 - yield firehose.start(); 43 - console.log('📡 Connected to Skyware Firehose'); 44 - // Log stats every 10 seconds 45 - setInterval(() => { 46 - console.log(`📊 Stats: ${messageCount} messages, ${vibeCount} #vibe-* posts`); 47 - }, 10000); 48 - }); 49 - } 50 - testFirehose().catch(console.error);
-46
src/test-skyware-firehose.ts
··· 1 - const { FirehoseSubscription } = require('@skyware/firehose'); 2 - 3 - async function testFirehose() { 4 - console.log('🔥 Testing Skyware Firehose...'); 5 - 6 - const firehose = new FirehoseSubscription({ 7 - service: 'wss://bsky.network', 8 - filter: { 9 - collections: ['app.bsky.feed.post'] 10 - } 11 - }); 12 - 13 - let messageCount = 0; 14 - let vibeCount = 0; 15 - 16 - firehose.on('commit', (commit: any) => { 17 - messageCount++; 18 - 19 - commit.ops.forEach((op: any) => { 20 - if (op.action === 'create' && op.record?.text) { 21 - const text = op.record.text; 22 - if (text.toLowerCase().includes('#vibe-')) { 23 - vibeCount++; 24 - console.log(`\n🎯 FOUND #vibe-* POST!`); 25 - console.log(` Author: ${commit.repo}`); 26 - console.log(` Text: ${text}`); 27 - console.log(` Path: ${op.path}`); 28 - } 29 - } 30 - }); 31 - }); 32 - 33 - firehose.on('error', (error: any) => { 34 - console.error('Firehose error:', error); 35 - }); 36 - 37 - await firehose.start(); 38 - console.log('📡 Connected to Skyware Firehose'); 39 - 40 - // Log stats every 10 seconds 41 - setInterval(() => { 42 - console.log(`📊 Stats: ${messageCount} messages, ${vibeCount} #vibe-* posts`); 43 - }, 10000); 44 - } 45 - 46 - testFirehose().catch(console.error);
-67
src/test-vibe-post.js
··· 1 - "use strict"; 2 - var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 - if (k2 === undefined) k2 = k; 4 - var desc = Object.getOwnPropertyDescriptor(m, k); 5 - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 6 - desc = { enumerable: true, get: function() { return m[k]; } }; 7 - } 8 - Object.defineProperty(o, k2, desc); 9 - }) : (function(o, m, k, k2) { 10 - if (k2 === undefined) k2 = k; 11 - o[k2] = m[k]; 12 - })); 13 - var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 14 - Object.defineProperty(o, "default", { enumerable: true, value: v }); 15 - }) : function(o, v) { 16 - o["default"] = v; 17 - }); 18 - var __importStar = (this && this.__importStar) || (function () { 19 - var ownKeys = function(o) { 20 - ownKeys = Object.getOwnPropertyNames || function (o) { 21 - var ar = []; 22 - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; 23 - return ar; 24 - }; 25 - return ownKeys(o); 26 - }; 27 - return function (mod) { 28 - if (mod && mod.__esModule) return mod; 29 - var result = {}; 30 - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); 31 - __setModuleDefault(result, mod); 32 - return result; 33 - }; 34 - })(); 35 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 36 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 37 - return new (P || (P = Promise))(function (resolve, reject) { 38 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 39 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 40 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 41 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 42 - }); 43 - }; 44 - Object.defineProperty(exports, "__esModule", { value: true }); 45 - const api_1 = require("@atproto/api"); 46 - const dotenv = __importStar(require("dotenv")); 47 - dotenv.config(); 48 - function postVibeTest() { 49 - return __awaiter(this, void 0, void 0, function* () { 50 - const agent = new api_1.BskyAgent({ 51 - service: 'https://bsky.social' 52 - }); 53 - yield agent.login({ 54 - identifier: process.env.BLUESKY_HANDLE, 55 - password: process.env.BLUESKY_PASSWORD, 56 - }); 57 - const testVibeName = `test_firehose_${Date.now()}`; 58 - console.log(`Posting test vibe: #vibe-${testVibeName}`); 59 - const result = yield agent.post({ 60 - text: `Testing Blonk firehose monitoring! #vibe-${testVibeName}`, 61 - createdAt: new Date().toISOString(), 62 - }); 63 - console.log('Posted:', result.uri); 64 - console.log(`Now monitor the firehose logs to see if it detects: #vibe-${testVibeName}`); 65 - }); 66 - } 67 - postVibeTest().catch(console.error);
-29
src/test-vibe-post.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import * as dotenv from 'dotenv'; 3 - 4 - dotenv.config(); 5 - 6 - async function postVibeTest() { 7 - const agent = new BskyAgent({ 8 - service: 'https://bsky.social' 9 - }); 10 - 11 - await agent.login({ 12 - identifier: process.env.BLUESKY_HANDLE!, 13 - password: process.env.BLUESKY_PASSWORD!, 14 - }); 15 - 16 - const testVibeName = `test_firehose_${Date.now()}`; 17 - 18 - console.log(`Posting test vibe: #vibe-${testVibeName}`); 19 - 20 - const result = await agent.post({ 21 - text: `Testing Blonk firehose monitoring! #vibe-${testVibeName}`, 22 - createdAt: new Date().toISOString(), 23 - }); 24 - 25 - console.log('Posted:', result.uri); 26 - console.log(`Now monitor the firehose logs to see if it detects: #vibe-${testVibeName}`); 27 - } 28 - 29 - postVibeTest().catch(console.error);
-155
src/typed-firehose.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.TypedFirehoseMonitor = void 0; 13 - const ws_1 = require("ws"); 14 - const cbor_x_1 = require("cbor-x"); 15 - const repo_1 = require("@atproto/repo"); 16 - const vibe_monitor_1 = require("./vibe-monitor"); 17 - class TypedFirehoseMonitor { 18 - constructor(agent) { 19 - this.ws = null; 20 - this.reconnectTimeout = null; 21 - this.statsInterval = null; 22 - this.messageCount = 0; 23 - this.vibeDetectionCount = 0; 24 - this.errorCount = 0; 25 - this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent); 26 - } 27 - start() { 28 - return __awaiter(this, void 0, void 0, function* () { 29 - console.log('🔥 Starting typed Bluesky Firehose monitoring for #vibe-* hashtags...'); 30 - const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos'; 31 - console.log(`🔗 Connecting to: ${firehoseUrl}`); 32 - this.ws = new ws_1.WebSocket(firehoseUrl); 33 - this.ws.on('open', () => { 34 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 35 - this.messageCount = 0; 36 - this.vibeDetectionCount = 0; 37 - this.errorCount = 0; 38 - // Log stats every 30 seconds 39 - this.statsInterval = setInterval(() => { 40 - console.log(`📊 Firehose stats: ${this.messageCount} messages, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`); 41 - }, 30000); 42 - }); 43 - this.ws.on('message', (data) => __awaiter(this, void 0, void 0, function* () { 44 - this.messageCount++; 45 - try { 46 - // Decode the CBOR message 47 - const decoded = (0, cbor_x_1.decode)(new Uint8Array(data)); 48 - // Handle different message types 49 - switch (decoded.$type) { 50 - case 'com.atproto.sync.subscribeRepos#commit': 51 - yield this.handleCommit(decoded); 52 - break; 53 - case 'com.atproto.sync.subscribeRepos#error': 54 - console.error('Firehose error:', decoded.error, decoded.message); 55 - this.errorCount++; 56 - break; 57 - case 'com.atproto.sync.subscribeRepos#info': 58 - console.log('Firehose info:', decoded.name, decoded.message); 59 - break; 60 - default: 61 - // Unknown message type 62 - if (this.messageCount % 1000 === 0) { 63 - console.log(`Unknown message type: ${decoded === null || decoded === void 0 ? void 0 : decoded.$type}`); 64 - } 65 - } 66 - } 67 - catch (error) { 68 - // Only log every 100th error to avoid spam 69 - if (this.errorCount % 100 === 0) { 70 - console.error('Error processing firehose message:', error); 71 - } 72 - this.errorCount++; 73 - } 74 - })); 75 - this.ws.on('error', (error) => { 76 - console.error('❌ Firehose WebSocket error:', error.message); 77 - if (error.code) { 78 - console.error(' Error code:', error.code); 79 - } 80 - }); 81 - this.ws.on('close', (code, reason) => { 82 - console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 83 - console.log(' Reconnecting in 5 seconds...'); 84 - if (this.statsInterval) { 85 - clearInterval(this.statsInterval); 86 - this.statsInterval = null; 87 - } 88 - this.reconnectTimeout = setTimeout(() => this.start(), 5000); 89 - }); 90 - }); 91 - } 92 - handleCommit(commit) { 93 - return __awaiter(this, void 0, void 0, function* () { 94 - try { 95 - // Parse the CAR file from blocks 96 - const car = yield (0, repo_1.readCar)(commit.blocks); 97 - // Process each operation 98 - for (const op of commit.ops) { 99 - // We only care about post creates 100 - if (op.action === 'create' && op.path.includes('app.bsky.feed.post')) { 101 - try { 102 - // Get the record bytes from the CAR file using the operation's CID 103 - const recordBytes = car.blocks.get(op.cid); 104 - if (!recordBytes) 105 - continue; 106 - // Convert CBOR to lexicon record 107 - const record = (0, repo_1.cborToLexRecord)(recordBytes); 108 - // Check for #vibe- hashtags 109 - if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 110 - this.vibeDetectionCount++; 111 - const authorDid = commit.repo; 112 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 113 - console.log(` Author DID: ${authorDid}`); 114 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 115 - console.log(` Path: ${op.path}`); 116 - // Process the vibe mention 117 - const postUri = `at://${authorDid}/${op.path}`; 118 - yield this.vibeMonitor.checkPost(record.text, authorDid, postUri); 119 - } 120 - } 121 - catch (e) { 122 - // Record-specific error, don't spam logs 123 - if (this.errorCount % 100 === 0) { 124 - console.error('Error processing post record:', e); 125 - } 126 - this.errorCount++; 127 - } 128 - } 129 - } 130 - } 131 - catch (error) { 132 - // CAR parsing error 133 - if (this.errorCount % 100 === 0) { 134 - console.error('Error parsing CAR file:', error); 135 - } 136 - this.errorCount++; 137 - } 138 - }); 139 - } 140 - stop() { 141 - if (this.reconnectTimeout) { 142 - clearTimeout(this.reconnectTimeout); 143 - this.reconnectTimeout = null; 144 - } 145 - if (this.statsInterval) { 146 - clearInterval(this.statsInterval); 147 - this.statsInterval = null; 148 - } 149 - if (this.ws) { 150 - this.ws.close(); 151 - this.ws = null; 152 - } 153 - } 154 - } 155 - exports.TypedFirehoseMonitor = TypedFirehoseMonitor;
-203
src/typed-firehose.ts
··· 1 - import { WebSocket } from 'ws'; 2 - import { decode } from 'cbor-x'; 3 - import { readCar, cborToLexRecord } from '@atproto/repo'; 4 - import { VibeMonitor } from './vibe-monitor'; 5 - import { BskyAgent } from '@atproto/api'; 6 - 7 - // Firehose message types 8 - interface FirehoseCommit { 9 - $type: 'com.atproto.sync.subscribeRepos#commit'; 10 - seq: number; 11 - rebase: boolean; 12 - tooBig: boolean; 13 - repo: string; // DID of the repo 14 - commit: string; // CID of the commit 15 - prev?: string; 16 - blocks: Uint8Array; // CAR file containing the record blocks 17 - ops: CommitOperation[]; 18 - time: string; 19 - } 20 - 21 - interface CommitOperation { 22 - action: 'create' | 'update' | 'delete'; 23 - path: string; 24 - cid: string; 25 - } 26 - 27 - interface PostRecord { 28 - $type?: string; 29 - text: string; 30 - createdAt: string; 31 - langs?: string[]; 32 - reply?: any; 33 - embed?: any; 34 - facets?: any[]; 35 - tags?: string[]; 36 - labels?: any; 37 - } 38 - 39 - interface FirehoseError { 40 - $type: 'com.atproto.sync.subscribeRepos#error'; 41 - error: string; 42 - message?: string; 43 - } 44 - 45 - interface FirehoseInfo { 46 - $type: 'com.atproto.sync.subscribeRepos#info'; 47 - name: string; 48 - message?: string; 49 - } 50 - 51 - type FirehoseMessage = FirehoseCommit | FirehoseError | FirehoseInfo; 52 - 53 - export class TypedFirehoseMonitor { 54 - private ws: WebSocket | null = null; 55 - private vibeMonitor: VibeMonitor; 56 - private reconnectTimeout: NodeJS.Timeout | null = null; 57 - private statsInterval: NodeJS.Timeout | null = null; 58 - private messageCount = 0; 59 - private vibeDetectionCount = 0; 60 - private errorCount = 0; 61 - 62 - constructor(agent: BskyAgent) { 63 - this.vibeMonitor = new VibeMonitor(agent); 64 - } 65 - 66 - async start() { 67 - console.log('🔥 Starting typed Bluesky Firehose monitoring for #vibe-* hashtags...'); 68 - 69 - const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos'; 70 - console.log(`🔗 Connecting to: ${firehoseUrl}`); 71 - 72 - this.ws = new WebSocket(firehoseUrl); 73 - 74 - this.ws.on('open', () => { 75 - console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*'); 76 - this.messageCount = 0; 77 - this.vibeDetectionCount = 0; 78 - this.errorCount = 0; 79 - 80 - // Log stats every 30 seconds 81 - this.statsInterval = setInterval(() => { 82 - console.log(`📊 Firehose stats: ${this.messageCount} messages, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`); 83 - }, 30000); 84 - }); 85 - 86 - this.ws.on('message', async (data: Buffer) => { 87 - this.messageCount++; 88 - 89 - try { 90 - // Decode the CBOR message 91 - const decoded = decode(new Uint8Array(data)) as FirehoseMessage; 92 - 93 - // Handle different message types 94 - switch (decoded.$type) { 95 - case 'com.atproto.sync.subscribeRepos#commit': 96 - await this.handleCommit(decoded); 97 - break; 98 - case 'com.atproto.sync.subscribeRepos#error': 99 - console.error('Firehose error:', decoded.error, decoded.message); 100 - this.errorCount++; 101 - break; 102 - case 'com.atproto.sync.subscribeRepos#info': 103 - console.log('Firehose info:', decoded.name, decoded.message); 104 - break; 105 - default: 106 - // Unknown message type 107 - if (this.messageCount % 1000 === 0) { 108 - console.log(`Unknown message type: ${(decoded as any)?.$type}`); 109 - } 110 - } 111 - } catch (error) { 112 - // Only log every 100th error to avoid spam 113 - if (this.errorCount % 100 === 0) { 114 - console.error('Error processing firehose message:', error); 115 - } 116 - this.errorCount++; 117 - } 118 - }); 119 - 120 - this.ws.on('error', (error: any) => { 121 - console.error('❌ Firehose WebSocket error:', error.message); 122 - if (error.code) { 123 - console.error(' Error code:', error.code); 124 - } 125 - }); 126 - 127 - this.ws.on('close', (code, reason) => { 128 - console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`); 129 - console.log(' Reconnecting in 5 seconds...'); 130 - 131 - if (this.statsInterval) { 132 - clearInterval(this.statsInterval); 133 - this.statsInterval = null; 134 - } 135 - 136 - this.reconnectTimeout = setTimeout(() => this.start(), 5000); 137 - }); 138 - } 139 - 140 - private async handleCommit(commit: FirehoseCommit) { 141 - try { 142 - // Parse the CAR file from blocks 143 - const car = await readCar(commit.blocks); 144 - 145 - // Process each operation 146 - for (const op of commit.ops) { 147 - // We only care about post creates 148 - if (op.action === 'create' && op.path.includes('app.bsky.feed.post')) { 149 - try { 150 - // Get the record bytes from the CAR file using the operation's CID 151 - const recordBytes = car.blocks.get(op.cid); 152 - if (!recordBytes) continue; 153 - 154 - // Convert CBOR to lexicon record 155 - const record = cborToLexRecord(recordBytes) as PostRecord; 156 - 157 - // Check for #vibe- hashtags 158 - if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) { 159 - this.vibeDetectionCount++; 160 - const authorDid = commit.repo; 161 - 162 - console.log(`\n🎯 Detected #vibe-* in Bluesky post!`); 163 - console.log(` Author DID: ${authorDid}`); 164 - console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`); 165 - console.log(` Path: ${op.path}`); 166 - 167 - // Process the vibe mention 168 - const postUri = `at://${authorDid}/${op.path}`; 169 - await this.vibeMonitor.checkPost(record.text, authorDid, postUri); 170 - } 171 - } catch (e) { 172 - // Record-specific error, don't spam logs 173 - if (this.errorCount % 100 === 0) { 174 - console.error('Error processing post record:', e); 175 - } 176 - this.errorCount++; 177 - } 178 - } 179 - } 180 - } catch (error) { 181 - // CAR parsing error 182 - if (this.errorCount % 100 === 0) { 183 - console.error('Error parsing CAR file:', error); 184 - } 185 - this.errorCount++; 186 - } 187 - } 188 - 189 - stop() { 190 - if (this.reconnectTimeout) { 191 - clearTimeout(this.reconnectTimeout); 192 - this.reconnectTimeout = null; 193 - } 194 - if (this.statsInterval) { 195 - clearInterval(this.statsInterval); 196 - this.statsInterval = null; 197 - } 198 - if (this.ws) { 199 - this.ws.close(); 200 - this.ws = null; 201 - } 202 - } 203 - }
-41
src/utils/vibe-validation.js
··· 1 - "use strict"; 2 - // Valid vibe name formats: 3 - // - SCREAMING_SNAKE_CASE 4 - // - snake_case 5 - // - SCREAMINGCASE 6 - // - lowercase 7 - // Must be alphanumeric with underscores only, no spaces 8 - Object.defineProperty(exports, "__esModule", { value: true }); 9 - exports.isValidVibeName = isValidVibeName; 10 - exports.normalizeVibeName = normalizeVibeName; 11 - exports.extractVibeFromHashtag = extractVibeFromHashtag; 12 - function isValidVibeName(name) { 13 - // Must not be empty 14 - if (!name || name.length === 0) 15 - return false; 16 - // Must not contain spaces 17 - if (name.includes(' ')) 18 - return false; 19 - // Must only contain letters, numbers, and underscores 20 - if (!/^[a-zA-Z0-9_]+$/.test(name)) 21 - return false; 22 - // Must be between 3 and 30 characters 23 - if (name.length < 3 || name.length > 30) 24 - return false; 25 - return true; 26 - } 27 - function normalizeVibeName(name) { 28 - // Convert to lowercase for consistency in storage 29 - return name.toLowerCase(); 30 - } 31 - function extractVibeFromHashtag(text) { 32 - // Match #vibe-SOMETHING pattern 33 - const match = text.match(/#vibe-([a-zA-Z0-9_]+)/i); 34 - if (match && match[1]) { 35 - const vibeName = match[1]; 36 - if (isValidVibeName(vibeName)) { 37 - return normalizeVibeName(vibeName); 38 - } 39 - } 40 - return null; 41 - }
-41
src/utils/vibe-validation.ts
··· 1 - // Valid vibe name formats: 2 - // - SCREAMING_SNAKE_CASE 3 - // - snake_case 4 - // - SCREAMINGCASE 5 - // - lowercase 6 - // Must be alphanumeric with underscores only, no spaces 7 - 8 - export function isValidVibeName(name: string): boolean { 9 - // Must not be empty 10 - if (!name || name.length === 0) return false; 11 - 12 - // Must not contain spaces 13 - if (name.includes(' ')) return false; 14 - 15 - // Must only contain letters, numbers, and underscores 16 - if (!/^[a-zA-Z0-9_]+$/.test(name)) return false; 17 - 18 - // Must be between 3 and 30 characters 19 - if (name.length < 3 || name.length > 30) return false; 20 - 21 - return true; 22 - } 23 - 24 - export function normalizeVibeName(name: string): string { 25 - // Convert to lowercase for consistency in storage 26 - return name.toLowerCase(); 27 - } 28 - 29 - export function extractVibeFromHashtag(text: string): string | null { 30 - // Match #vibe-SOMETHING pattern 31 - const match = text.match(/#vibe-([a-zA-Z0-9_]+)/i); 32 - 33 - if (match && match[1]) { 34 - const vibeName = match[1]; 35 - if (isValidVibeName(vibeName)) { 36 - return normalizeVibeName(vibeName); 37 - } 38 - } 39 - 40 - return null; 41 - }
-95
src/vibe-monitor.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.VibeMonitor = void 0; 13 - const vibes_1 = require("./vibes"); 14 - const database_1 = require("./database"); 15 - const vibe_validation_1 = require("./utils/vibe-validation"); 16 - const UNIQUE_MENTION_THRESHOLD = 5; // Number of unique users needed to create a vibe 17 - const TOTAL_MENTION_THRESHOLD = 10; // OR total number of mentions needed 18 - class VibeMonitor { 19 - constructor(agent) { 20 - this.agent = agent; 21 - this.vibeManager = new vibes_1.VibeManager(agent); 22 - } 23 - checkPost(text, authorDid, postUri) { 24 - return __awaiter(this, void 0, void 0, function* () { 25 - const vibeName = (0, vibe_validation_1.extractVibeFromHashtag)(text); 26 - if (!vibeName) 27 - return; 28 - console.log(`📡 Detected vibe mention: #vibe-${vibeName} by ${authorDid}`); 29 - // Track the mention 30 - database_1.vibeMentionDb.trackMention(vibeName, authorDid, postUri); 31 - // Check if vibe already exists 32 - const existingVibe = database_1.vibeMentionDb.getVibeByName(vibeName); 33 - if (existingVibe) { 34 - console.log(`✅ Vibe "${vibeName}" already exists`); 35 - return; 36 - } 37 - // Check if we've hit either threshold 38 - const uniqueMentionCount = database_1.vibeMentionDb.getMentionCount(vibeName); 39 - const totalMentionCount = database_1.vibeMentionDb.getTotalMentionCount(vibeName); 40 - console.log(`📊 Vibe "${vibeName}" has ${uniqueMentionCount} unique mentions, ${totalMentionCount} total mentions`); 41 - if (uniqueMentionCount >= UNIQUE_MENTION_THRESHOLD || totalMentionCount >= TOTAL_MENTION_THRESHOLD) { 42 - yield this.createVibeFromHashtag(vibeName, uniqueMentionCount, totalMentionCount); 43 - } 44 - }); 45 - } 46 - createVibeFromHashtag(vibeName, uniqueMentions, totalMentions) { 47 - return __awaiter(this, void 0, void 0, function* () { 48 - try { 49 - console.log(`🎉 Creating new vibe "${vibeName}" after ${uniqueMentions} unique mentions (${totalMentions} total)!`); 50 - // Generate a mood based on the vibe name 51 - const mood = this.generateMood(vibeName); 52 - // Create the vibe 53 - const uri = yield this.vibeManager.createVibe(vibeName, mood, '🌊', // Default emoji 54 - '#7B68EE' // Default color (medium purple) 55 - ); 56 - // Store in local database 57 - database_1.vibeDb.insertVibe({ 58 - uri, 59 - cid: 'generated', // We'd get this from the creation response 60 - creatorDid: 'system', 61 - name: vibeName, 62 - mood, 63 - emoji: '🌊', 64 - color: '#7B68EE', 65 - memberCount: uniqueMentions, 66 - createdAt: new Date().toISOString(), 67 - }); 68 - console.log(`✨ Vibe "${vibeName}" created successfully!`); 69 - } 70 - catch (error) { 71 - console.error(`Failed to create vibe "${vibeName}":`, error); 72 - } 73 - }); 74 - } 75 - generateMood(vibeName) { 76 - // Generate a mood description based on the vibe name 77 - const words = vibeName.split('_').filter(w => w.length > 0); 78 - if (words.length === 0) 79 - return 'mysterious energy'; 80 - // Some fun default moods based on patterns 81 - if (vibeName.includes('chill')) 82 - return 'relaxed and easy-going vibes'; 83 - if (vibeName.includes('chaos')) 84 - return 'delightfully unpredictable energy'; 85 - if (vibeName.includes('nerd')) 86 - return 'enthusiastically geeky discussions'; 87 - if (vibeName.includes('midnight')) 88 - return 'late night contemplative mood'; 89 - if (vibeName.includes('morning')) 90 - return 'fresh start energy'; 91 - // Default: create a mood from the words 92 - return `${words.join(' ')} energy, discovered by the community`; 93 - } 94 - } 95 - exports.VibeMonitor = VibeMonitor;
-95
src/vibe-monitor.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { VibeManager } from './vibes'; 3 - import { vibeMentionDb, vibeDb } from './database'; 4 - import { extractVibeFromHashtag, normalizeVibeName } from './utils/vibe-validation'; 5 - 6 - const UNIQUE_MENTION_THRESHOLD = 5; // Number of unique users needed to create a vibe 7 - const TOTAL_MENTION_THRESHOLD = 10; // OR total number of mentions needed 8 - 9 - export class VibeMonitor { 10 - private agent: BskyAgent; 11 - private vibeManager: VibeManager; 12 - 13 - constructor(agent: BskyAgent) { 14 - this.agent = agent; 15 - this.vibeManager = new VibeManager(agent); 16 - } 17 - 18 - async checkPost(text: string, authorDid: string, postUri: string) { 19 - const vibeName = extractVibeFromHashtag(text); 20 - 21 - if (!vibeName) return; 22 - 23 - console.log(`📡 Detected vibe mention: #vibe-${vibeName} by ${authorDid}`); 24 - 25 - // Track the mention 26 - vibeMentionDb.trackMention(vibeName, authorDid, postUri); 27 - 28 - // Check if vibe already exists 29 - const existingVibe = vibeMentionDb.getVibeByName(vibeName); 30 - if (existingVibe) { 31 - console.log(`✅ Vibe "${vibeName}" already exists`); 32 - return; 33 - } 34 - 35 - // Check if we've hit either threshold 36 - const uniqueMentionCount = vibeMentionDb.getMentionCount(vibeName); 37 - const totalMentionCount = vibeMentionDb.getTotalMentionCount(vibeName); 38 - console.log(`📊 Vibe "${vibeName}" has ${uniqueMentionCount} unique mentions, ${totalMentionCount} total mentions`); 39 - 40 - if (uniqueMentionCount >= UNIQUE_MENTION_THRESHOLD || totalMentionCount >= TOTAL_MENTION_THRESHOLD) { 41 - await this.createVibeFromHashtag(vibeName, uniqueMentionCount, totalMentionCount); 42 - } 43 - } 44 - 45 - private async createVibeFromHashtag(vibeName: string, uniqueMentions: number, totalMentions: number) { 46 - try { 47 - console.log(`🎉 Creating new vibe "${vibeName}" after ${uniqueMentions} unique mentions (${totalMentions} total)!`); 48 - 49 - // Generate a mood based on the vibe name 50 - const mood = this.generateMood(vibeName); 51 - 52 - // Create the vibe 53 - const uri = await this.vibeManager.createVibe( 54 - vibeName, 55 - mood, 56 - '🌊', // Default emoji 57 - '#7B68EE' // Default color (medium purple) 58 - ); 59 - 60 - // Store in local database 61 - vibeDb.insertVibe({ 62 - uri, 63 - cid: 'generated', // We'd get this from the creation response 64 - creatorDid: 'system', 65 - name: vibeName, 66 - mood, 67 - emoji: '🌊', 68 - color: '#7B68EE', 69 - memberCount: uniqueMentions, 70 - createdAt: new Date().toISOString(), 71 - }); 72 - 73 - console.log(`✨ Vibe "${vibeName}" created successfully!`); 74 - } catch (error) { 75 - console.error(`Failed to create vibe "${vibeName}":`, error); 76 - } 77 - } 78 - 79 - private generateMood(vibeName: string): string { 80 - // Generate a mood description based on the vibe name 81 - const words = vibeName.split('_').filter(w => w.length > 0); 82 - 83 - if (words.length === 0) return 'mysterious energy'; 84 - 85 - // Some fun default moods based on patterns 86 - if (vibeName.includes('chill')) return 'relaxed and easy-going vibes'; 87 - if (vibeName.includes('chaos')) return 'delightfully unpredictable energy'; 88 - if (vibeName.includes('nerd')) return 'enthusiastically geeky discussions'; 89 - if (vibeName.includes('midnight')) return 'late night contemplative mood'; 90 - if (vibeName.includes('morning')) return 'fresh start energy'; 91 - 92 - // Default: create a mood from the words 93 - return `${words.join(' ')} energy, discovered by the community`; 94 - } 95 - }
-107
src/vibes.js
··· 1 - "use strict"; 2 - var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 - return new (P || (P = Promise))(function (resolve, reject) { 5 - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 - step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 - }); 10 - }; 11 - Object.defineProperty(exports, "__esModule", { value: true }); 12 - exports.VibeManager = void 0; 13 - const schemas_1 = require("./schemas"); 14 - const vibe_validation_1 = require("./utils/vibe-validation"); 15 - const database_1 = require("./database"); 16 - class VibeManager { 17 - constructor(agent) { 18 - this.agent = agent; 19 - } 20 - createVibe(name, mood, emoji, color) { 21 - return __awaiter(this, void 0, void 0, function* () { 22 - var _a; 23 - // Validate vibe name 24 - if (!(0, vibe_validation_1.isValidVibeName)(name)) { 25 - throw new Error('Invalid vibe name. Must be alphanumeric with underscores only, no spaces.'); 26 - } 27 - // Normalize the name 28 - const normalizedName = (0, vibe_validation_1.normalizeVibeName)(name); 29 - // Check for duplicates 30 - const existingVibe = database_1.vibeMentionDb.getVibeByName(normalizedName); 31 - if (existingVibe) { 32 - throw new Error(`Vibe "${normalizedName}" already exists`); 33 - } 34 - const vibe = { 35 - name: normalizedName, 36 - mood, 37 - emoji, 38 - color, 39 - createdAt: new Date().toISOString(), 40 - memberCount: 1, // Creator is automatically a member 41 - }; 42 - const response = yield this.agent.com.atproto.repo.createRecord({ 43 - repo: (_a = this.agent.session) === null || _a === void 0 ? void 0 : _a.did, 44 - collection: schemas_1.VIBE_NSID, 45 - record: vibe, 46 - }); 47 - // Automatically join the vibe you created 48 - yield this.joinVibe(response.data.uri, response.data.cid); 49 - console.log(`Created vibe: ${name} - ${mood}`); 50 - return response.data.uri; 51 - }); 52 - } 53 - joinVibe(vibeUri, vibeCid) { 54 - return __awaiter(this, void 0, void 0, function* () { 55 - var _a; 56 - const membership = { 57 - vibe: { 58 - uri: vibeUri, 59 - cid: vibeCid, 60 - }, 61 - createdAt: new Date().toISOString(), 62 - }; 63 - yield this.agent.com.atproto.repo.createRecord({ 64 - repo: (_a = this.agent.session) === null || _a === void 0 ? void 0 : _a.did, 65 - collection: schemas_1.VIBE_MEMBER_NSID, 66 - record: membership, 67 - }); 68 - }); 69 - } 70 - getVibes() { 71 - return __awaiter(this, arguments, void 0, function* (limit = 50) { 72 - var _a; 73 - const response = yield this.agent.com.atproto.repo.listRecords({ 74 - repo: (_a = this.agent.session) === null || _a === void 0 ? void 0 : _a.did, 75 - collection: schemas_1.VIBE_NSID, 76 - limit, 77 - }); 78 - return response.data.records.map(record => (Object.assign({ uri: record.uri, cid: record.cid }, record.value))); 79 - }); 80 - } 81 - getMyVibes() { 82 - return __awaiter(this, void 0, void 0, function* () { 83 - var _a; 84 - const response = yield this.agent.com.atproto.repo.listRecords({ 85 - repo: (_a = this.agent.session) === null || _a === void 0 ? void 0 : _a.did, 86 - collection: schemas_1.VIBE_MEMBER_NSID, 87 - limit: 100, 88 - }); 89 - return response.data.records.map(record => ({ 90 - uri: record.uri, 91 - membership: record.value, 92 - })); 93 - }); 94 - } 95 - getVibe(uri) { 96 - return __awaiter(this, void 0, void 0, function* () { 97 - const [repo, collection, rkey] = uri.replace('at://', '').split('/'); 98 - const response = yield this.agent.com.atproto.repo.getRecord({ 99 - repo, 100 - collection, 101 - rkey, 102 - }); 103 - return Object.assign({ uri, cid: response.data.cid }, response.data.value); 104 - }); 105 - } 106 - } 107 - exports.VibeManager = VibeManager;
-104
src/vibes.ts
··· 1 - import { BskyAgent } from '@atproto/api'; 2 - import { BlonkVibe, BlonkVibeMember, VIBE_NSID, VIBE_MEMBER_NSID } from './schemas'; 3 - import { isValidVibeName, normalizeVibeName } from './utils/vibe-validation'; 4 - import { vibeMentionDb } from './database'; 5 - 6 - export class VibeManager { 7 - constructor(private agent: BskyAgent) {} 8 - 9 - async createVibe(name: string, mood: string, emoji?: string, color?: string): Promise<string> { 10 - // Validate vibe name 11 - if (!isValidVibeName(name)) { 12 - throw new Error('Invalid vibe name. Must be alphanumeric with underscores only, no spaces.'); 13 - } 14 - 15 - // Normalize the name 16 - const normalizedName = normalizeVibeName(name); 17 - 18 - // Check for duplicates 19 - const existingVibe = vibeMentionDb.getVibeByName(normalizedName); 20 - if (existingVibe) { 21 - throw new Error(`Vibe "${normalizedName}" already exists`); 22 - } 23 - 24 - const vibe: BlonkVibe = { 25 - name: normalizedName, 26 - mood, 27 - emoji, 28 - color, 29 - createdAt: new Date().toISOString(), 30 - memberCount: 1, // Creator is automatically a member 31 - }; 32 - 33 - const response = await this.agent.com.atproto.repo.createRecord({ 34 - repo: this.agent.session?.did!, 35 - collection: VIBE_NSID, 36 - record: vibe, 37 - }); 38 - 39 - // Automatically join the vibe you created 40 - await this.joinVibe(response.data.uri, response.data.cid); 41 - 42 - console.log(`Created vibe: ${name} - ${mood}`); 43 - return response.data.uri; 44 - } 45 - 46 - async joinVibe(vibeUri: string, vibeCid: string): Promise<void> { 47 - const membership: BlonkVibeMember = { 48 - vibe: { 49 - uri: vibeUri, 50 - cid: vibeCid, 51 - }, 52 - createdAt: new Date().toISOString(), 53 - }; 54 - 55 - await this.agent.com.atproto.repo.createRecord({ 56 - repo: this.agent.session?.did!, 57 - collection: VIBE_MEMBER_NSID, 58 - record: membership, 59 - }); 60 - } 61 - 62 - async getVibes(limit: number = 50) { 63 - const response = await this.agent.com.atproto.repo.listRecords({ 64 - repo: this.agent.session?.did!, 65 - collection: VIBE_NSID, 66 - limit, 67 - }); 68 - 69 - return response.data.records.map(record => ({ 70 - uri: record.uri, 71 - cid: record.cid, 72 - ...record.value as BlonkVibe, 73 - })); 74 - } 75 - 76 - async getMyVibes() { 77 - const response = await this.agent.com.atproto.repo.listRecords({ 78 - repo: this.agent.session?.did!, 79 - collection: VIBE_MEMBER_NSID, 80 - limit: 100, 81 - }); 82 - 83 - return response.data.records.map(record => ({ 84 - uri: record.uri, 85 - membership: record.value as BlonkVibeMember, 86 - })); 87 - } 88 - 89 - async getVibe(uri: string) { 90 - const [repo, collection, rkey] = uri.replace('at://', '').split('/'); 91 - 92 - const response = await this.agent.com.atproto.repo.getRecord({ 93 - repo, 94 - collection, 95 - rkey, 96 - }); 97 - 98 - return { 99 - uri, 100 - cid: response.data.cid, 101 - ...response.data.value as BlonkVibe, 102 - }; 103 - } 104 - }
-117
tsconfig.json
··· 1 - { 2 - "compilerOptions": { 3 - /* Visit https://aka.ms/tsconfig to read more about this file */ 4 - "rootDir": "./src", 5 - "outDir": "./dist", 6 - 7 - /* Projects */ 8 - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 9 - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 10 - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 11 - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 12 - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 13 - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 14 - 15 - /* Language and Environment */ 16 - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 17 - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 18 - // "jsx": "preserve", /* Specify what JSX code is generated. */ 19 - // "libReplacement": true, /* Enable lib replacement. */ 20 - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 21 - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 22 - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 23 - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 24 - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 25 - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 26 - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 27 - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 28 - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 29 - 30 - /* Modules */ 31 - "module": "commonjs", /* Specify what module code is generated. */ 32 - // "rootDir": "./", /* Specify the root folder within your source files. */ 33 - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 34 - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 35 - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 36 - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 37 - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 38 - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 39 - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 40 - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 41 - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 42 - // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ 43 - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 44 - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 45 - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 46 - // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ 47 - // "resolveJsonModule": true, /* Enable importing .json files. */ 48 - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 49 - // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */ 50 - 51 - /* JavaScript Support */ 52 - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 53 - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 54 - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 55 - 56 - /* Emit */ 57 - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 58 - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 59 - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 60 - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 61 - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 62 - // "noEmit": true, /* Disable emitting files from a compilation. */ 63 - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 64 - // "outDir": "./", /* Specify an output folder for all emitted files. */ 65 - // "removeComments": true, /* Disable emitting comments. */ 66 - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 67 - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 68 - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 69 - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 70 - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 71 - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 72 - // "newLine": "crlf", /* Set the newline character for emitting files. */ 73 - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 74 - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 75 - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 76 - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 77 - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 78 - 79 - /* Interop Constraints */ 80 - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 81 - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 82 - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ 83 - // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ 84 - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 85 - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 86 - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 87 - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 88 - 89 - /* Type Checking */ 90 - "strict": true, /* Enable all strict type-checking options. */ 91 - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 92 - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 93 - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 94 - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 95 - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 96 - // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ 97 - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 98 - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 99 - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 100 - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 101 - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 102 - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 103 - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 104 - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 105 - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 106 - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 107 - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 108 - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 109 - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 110 - 111 - /* Completeness */ 112 - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 113 - "skipLibCheck": true /* Skip type checking all .d.ts files. */ 114 - }, 115 - "include": ["src/**/*"], 116 - "exclude": ["node_modules", "client", "dist"] 117 - }