diff --git a/bun.lock b/bun.lock
new file mode 100644
index 00000000..31db1efc
--- /dev/null
+++ b/bun.lock
@@ -0,0 +1,1407 @@
+{
+ "lockfileVersion": 1,
+ "configVersion": 0,
+ "workspaces": {
+ "": {
+ "name": "9router-app",
+ "dependencies": {
+ "@dnd-kit/core": "^6.3.1",
+ "@dnd-kit/modifiers": "^9.0.0",
+ "@dnd-kit/sortable": "^10.0.0",
+ "@dnd-kit/utilities": "^3.2.2",
+ "@monaco-editor/react": "^4.7.0",
+ "@next/third-parties": "^16.2.9",
+ "@node-saml/node-saml": "^5.1.0",
+ "@xyflow/react": "^12.10.1",
+ "bcryptjs": "^3.0.3",
+ "chalk": "^5.6.2",
+ "confbox": "^0.2.4",
+ "express": "^5.2.1",
+ "http-proxy-middleware": "^3.0.5",
+ "jose": "^6.1.3",
+ "marked": "^18.0.1",
+ "material-symbols": "^0.44.6",
+ "monaco-editor": "^0.55.1",
+ "next": "^16.1.6",
+ "node-forge": "^1.3.3",
+ "node-machine-id": "^1.1.12",
+ "open": "^11.0.0",
+ "ora": "^9.1.0",
+ "prop-types": "^15.8.1",
+ "react": "19.2.4",
+ "react-dom": "19.2.4",
+ "react-is": "^16.13.1",
+ "recharts": "^3.7.0",
+ "selfsigned": "^5.5.0",
+ "socks-proxy-agent": "^8.0.5",
+ "sql.js": "^1.14.1",
+ "undici": "^7.19.2",
+ "uuid": "^13.0.0",
+ "zustand": "^5.0.10",
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4.1.18",
+ "eslint": "^9",
+ "eslint-config-next": "16.1.6",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^4",
+ },
+ "optionalDependencies": {
+ "better-sqlite3": "^12.6.2",
+ },
+ },
+ },
+ "packages": {
+ "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
+
+ "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="],
+
+ "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="],
+
+ "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="],
+
+ "@babel/generator": ["@babel/generator@7.29.7", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="],
+
+ "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="],
+
+ "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="],
+
+ "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="],
+
+ "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="],
+
+ "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="],
+
+ "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="],
+
+ "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="],
+
+ "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="],
+
+ "@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="],
+
+ "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="],
+
+ "@babel/traverse": ["@babel/traverse@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="],
+
+ "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="],
+
+ "@dnd-kit/accessibility": ["@dnd-kit/accessibility@3.1.1", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw=="],
+
+ "@dnd-kit/core": ["@dnd-kit/core@6.3.1", "", { "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ=="],
+
+ "@dnd-kit/modifiers": ["@dnd-kit/modifiers@9.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw=="],
+
+ "@dnd-kit/sortable": ["@dnd-kit/sortable@10.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg=="],
+
+ "@dnd-kit/utilities": ["@dnd-kit/utilities@3.2.2", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg=="],
+
+ "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
+
+ "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
+
+ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
+
+ "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="],
+
+ "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="],
+
+ "@eslint/config-array": ["@eslint/config-array@0.21.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.5" } }, "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw=="],
+
+ "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="],
+
+ "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="],
+
+ "@eslint/eslintrc": ["@eslint/eslintrc@3.3.6", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" } }, "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA=="],
+
+ "@eslint/js": ["@eslint/js@9.39.5", "", {}, "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A=="],
+
+ "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="],
+
+ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="],
+
+ "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="],
+
+ "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="],
+
+ "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="],
+
+ "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
+
+ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
+
+ "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="],
+
+ "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.3.2" }, "os": "darwin", "cpu": "arm64" }, "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg=="],
+
+ "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.3.2" }, "os": "darwin", "cpu": "x64" }, "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w=="],
+
+ "@img/sharp-freebsd-wasm32": ["@img/sharp-freebsd-wasm32@0.35.3", "", { "dependencies": { "@img/sharp-wasm32": "0.35.3" }, "os": "freebsd" }, "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg=="],
+
+ "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.3.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg=="],
+
+ "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw=="],
+
+ "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.2", "", { "os": "linux", "cpu": "arm" }, "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ=="],
+
+ "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA=="],
+
+ "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw=="],
+
+ "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.2", "", { "os": "linux", "cpu": "none" }, "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w=="],
+
+ "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ=="],
+
+ "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w=="],
+
+ "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw=="],
+
+ "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ=="],
+
+ "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.2" }, "os": "linux", "cpu": "arm" }, "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA=="],
+
+ "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.2" }, "os": "linux", "cpu": "arm64" }, "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ=="],
+
+ "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.2" }, "os": "linux", "cpu": "ppc64" }, "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA=="],
+
+ "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.2" }, "os": "linux", "cpu": "none" }, "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ=="],
+
+ "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.2" }, "os": "linux", "cpu": "s390x" }, "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw=="],
+
+ "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.2" }, "os": "linux", "cpu": "x64" }, "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA=="],
+
+ "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" }, "os": "linux", "cpu": "arm64" }, "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w=="],
+
+ "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.2" }, "os": "linux", "cpu": "x64" }, "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg=="],
+
+ "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.3", "", { "dependencies": { "@emnapi/runtime": "^1.11.1" } }, "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w=="],
+
+ "@img/sharp-webcontainers-wasm32": ["@img/sharp-webcontainers-wasm32@0.35.3", "", { "dependencies": { "@img/sharp-wasm32": "0.35.3" }, "cpu": "none" }, "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q=="],
+
+ "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.35.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w=="],
+
+ "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.35.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw=="],
+
+ "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.35.3", "", { "os": "win32", "cpu": "x64" }, "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA=="],
+
+ "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
+
+ "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="],
+
+ "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
+
+ "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
+
+ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
+
+ "@monaco-editor/loader": ["@monaco-editor/loader@1.7.0", "", { "dependencies": { "state-local": "^1.0.6" } }, "sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA=="],
+
+ "@monaco-editor/react": ["@monaco-editor/react@4.7.0", "", { "dependencies": { "@monaco-editor/loader": "^1.5.0" }, "peerDependencies": { "monaco-editor": ">= 0.25.0 < 1", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA=="],
+
+ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="],
+
+ "@next/env": ["@next/env@16.3.1", "", {}, "sha512-35G3xwkQUb2oETSDjFXGrVugknoayLFBh7vSE+yAcl9IP2zT9wyGwq7297AYHR11kJld807t5f8AJBs6WBzXsQ=="],
+
+ "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.6", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ=="],
+
+ "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.3.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ABMIu2zQ7cnNIHm5ivKGwZwUrm0pAai3yiJ/gK/rF1c1VP9UOnj7XECbMKFdVKp9I9eMYq9NoDs1WXOoowxzJw=="],
+
+ "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.3.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-gNG21e/UnrroeScbY/QndUEdl0mF1FRibW7BBeYUz/5ABCepjqDdEdgr592vpzMtCn/m7FTjYq3TN4TpyDnutw=="],
+
+ "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.3.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-6B6Lw016iwNUQuaJoraMMTLh6TwHzFUtxipSScD1F3YyymcrRWkobodRS2ftIOkF5vrs4zNlyUrTC5YZQ9Lz5w=="],
+
+ "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.3.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-JUiPXZKK9wOhjf4MgDiH29GZLxfqOesbLtHq2pDxwH/WwscTRV2ToymnOTh1egzaZf0ueUf8T2+CeYTGHjW0Iw=="],
+
+ "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.3.1", "", { "os": "linux", "cpu": "x64" }, "sha512-Uog9jsrmIRIL/lfvIp9htmskSNC7JcQsMVucXL2V2YY1y/D9IUN3LPEafqy0zRJ2cIU1SQ0V6F6TlffQ+pLAGg=="],
+
+ "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.3.1", "", { "os": "linux", "cpu": "x64" }, "sha512-6yy3FT13KgUFOj5H8bl8w/6nKiJwHIvbtwh1V+1acsu+7y4tJjnemSa6mhsh53BeoVrlozE+fMgZhXH46WmjMA=="],
+
+ "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.3.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-iOoN1QecUoGNZik536U/vtK43YwgyrCsGIkth52yIkl612n+0C9MjSnJbQAikISpb+WYRooBVhaDlUW7iZoKog=="],
+
+ "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.3.1", "", { "os": "win32", "cpu": "x64" }, "sha512-d/k+PpAriUPaeMJJOG7HUSdqfEX46FEPWU1p3/nm2ACmXhj9hFEWdFODUBIpkuijXYkfL90qZzTqVPRp4BW/hw=="],
+
+ "@next/third-parties": ["@next/third-parties@16.3.1", "", { "dependencies": { "third-party-capital": "1.0.20" }, "peerDependencies": { "next": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0-beta.0", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0" } }, "sha512-OyIUIohaQ8AkD/8Ew0yPTaxcoOwobIgBjvNnhajgJ2IWPuSjFHfKYAFmFjYmL5Jwrf2qJDWubadhPqPbFhrDNg=="],
+
+ "@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="],
+
+ "@node-saml/node-saml": ["@node-saml/node-saml@5.1.0", "", { "dependencies": { "@types/debug": "^4.1.12", "@types/qs": "^6.9.18", "@types/xml-encryption": "^1.2.4", "@types/xml2js": "^0.4.14", "@xmldom/is-dom-node": "^1.0.1", "@xmldom/xmldom": "^0.8.10", "debug": "^4.4.0", "xml-crypto": "^6.1.2", "xml-encryption": "^3.1.0", "xml2js": "^0.6.2", "xmlbuilder": "^15.1.1", "xpath": "^0.0.34" } }, "sha512-t3cJnZ4aC7HhPZ6MGylGZULvUtBOZ6FzuUndaHGXjmIZHXnLfC/7L8a57O9Q9V7AxJGKAiRM5zu2wNm9EsvQpw=="],
+
+ "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
+
+ "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
+
+ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
+
+ "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="],
+
+ "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "@peculiar/asn1-x509-attr": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA=="],
+
+ "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg=="],
+
+ "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ=="],
+
+ "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.8.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.8.0", "@peculiar/asn1-pkcs8": "^2.8.0", "@peculiar/asn1-rsa": "^2.8.0", "@peculiar/asn1-schema": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg=="],
+
+ "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA=="],
+
+ "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.8.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.8.0", "@peculiar/asn1-pfx": "^2.8.0", "@peculiar/asn1-pkcs8": "^2.8.0", "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "@peculiar/asn1-x509-attr": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ=="],
+
+ "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg=="],
+
+ "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.8.0", "", { "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q=="],
+
+ "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg=="],
+
+ "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.8.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.8.0", "@peculiar/asn1-x509": "^2.8.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA=="],
+
+ "@peculiar/utils": ["@peculiar/utils@2.0.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ=="],
+
+ "@peculiar/x509": ["@peculiar/x509@1.14.3", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-csr": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.0", "@peculiar/asn1-pkcs9": "^2.6.0", "@peculiar/asn1-rsa": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA=="],
+
+ "@reduxjs/toolkit": ["@reduxjs/toolkit@2.12.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^11.0.0", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" } }, "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw=="],
+
+ "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="],
+
+ "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="],
+
+ "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="],
+
+ "@swc/helpers": ["@swc/helpers@0.5.23", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw=="],
+
+ "@tailwindcss/node": ["@tailwindcss/node@4.3.3", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.24.1", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.3" } }, "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg=="],
+
+ "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.3", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.3", "@tailwindcss/oxide-darwin-arm64": "4.3.3", "@tailwindcss/oxide-darwin-x64": "4.3.3", "@tailwindcss/oxide-freebsd-x64": "4.3.3", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", "@tailwindcss/oxide-linux-x64-musl": "4.3.3", "@tailwindcss/oxide-wasm32-wasi": "4.3.3", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" } }, "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA=="],
+
+ "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.3", "", { "os": "android", "cpu": "arm64" }, "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw=="],
+
+ "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw=="],
+
+ "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw=="],
+
+ "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw=="],
+
+ "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ=="],
+
+ "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="],
+
+ "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="],
+
+ "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="],
+
+ "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="],
+
+ "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.3", "", { "dependencies": { "@emnapi/core": "^1.11.1", "@emnapi/runtime": "^1.11.1", "@emnapi/wasi-threads": "^1.2.2", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ=="],
+
+ "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ=="],
+
+ "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw=="],
+
+ "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.3", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.3", "@tailwindcss/oxide": "4.3.3", "postcss": "^8.5.16", "tailwindcss": "4.3.3" } }, "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg=="],
+
+ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="],
+
+ "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="],
+
+ "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="],
+
+ "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="],
+
+ "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="],
+
+ "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="],
+
+ "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="],
+
+ "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="],
+
+ "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="],
+
+ "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="],
+
+ "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="],
+
+ "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="],
+
+ "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="],
+
+ "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="],
+
+ "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="],
+
+ "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="],
+
+ "@types/http-proxy": ["@types/http-proxy@1.17.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw=="],
+
+ "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
+
+ "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="],
+
+ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="],
+
+ "@types/node": ["@types/node@25.9.3", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg=="],
+
+ "@types/qs": ["@types/qs@6.15.1", "", {}, "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw=="],
+
+ "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
+
+ "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="],
+
+ "@types/xml-encryption": ["@types/xml-encryption@1.2.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-I69K/WW1Dv7j6O3jh13z0X8sLWJRXbu5xnHDl9yHzUNDUBtUoBY058eb5s+x/WG6yZC1h8aKdI2EoyEPjyEh+Q=="],
+
+ "@types/xml2js": ["@types/xml2js@0.4.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ=="],
+
+ "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.61.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/type-utils": "8.61.0", "@typescript-eslint/utils": "8.61.0", "@typescript-eslint/visitor-keys": "8.61.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.61.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw=="],
+
+ "@typescript-eslint/parser": ["@typescript-eslint/parser@8.61.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", "@typescript-eslint/typescript-estree": "8.61.0", "@typescript-eslint/visitor-keys": "8.61.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w=="],
+
+ "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.61.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.61.0", "@typescript-eslint/types": "^8.61.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA=="],
+
+ "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.61.0", "", { "dependencies": { "@typescript-eslint/types": "8.61.0", "@typescript-eslint/visitor-keys": "8.61.0" } }, "sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA=="],
+
+ "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.61.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ=="],
+
+ "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.61.0", "", { "dependencies": { "@typescript-eslint/types": "8.61.0", "@typescript-eslint/typescript-estree": "8.61.0", "@typescript-eslint/utils": "8.61.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A=="],
+
+ "@typescript-eslint/types": ["@typescript-eslint/types@8.61.0", "", {}, "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg=="],
+
+ "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.61.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.61.0", "@typescript-eslint/tsconfig-utils": "8.61.0", "@typescript-eslint/types": "8.61.0", "@typescript-eslint/visitor-keys": "8.61.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA=="],
+
+ "@typescript-eslint/utils": ["@typescript-eslint/utils@8.61.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", "@typescript-eslint/typescript-estree": "8.61.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA=="],
+
+ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.61.0", "", { "dependencies": { "@typescript-eslint/types": "8.61.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ=="],
+
+ "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.12.2", "", { "os": "android", "cpu": "arm" }, "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w=="],
+
+ "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.12.2", "", { "os": "android", "cpu": "arm64" }, "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ=="],
+
+ "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.12.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w=="],
+
+ "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.12.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA=="],
+
+ "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.12.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg=="],
+
+ "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2", "", { "os": "linux", "cpu": "arm" }, "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A=="],
+
+ "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.12.2", "", { "os": "linux", "cpu": "arm" }, "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g=="],
+
+ "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.12.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg=="],
+
+ "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.12.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA=="],
+
+ "@unrs/resolver-binding-linux-loong64-gnu": ["@unrs/resolver-binding-linux-loong64-gnu@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q=="],
+
+ "@unrs/resolver-binding-linux-loong64-musl": ["@unrs/resolver-binding-linux-loong64-musl@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew=="],
+
+ "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.12.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg=="],
+
+ "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A=="],
+
+ "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w=="],
+
+ "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.12.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw=="],
+
+ "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.12.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ=="],
+
+ "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.12.2", "", { "os": "linux", "cpu": "x64" }, "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A=="],
+
+ "@unrs/resolver-binding-openharmony-arm64": ["@unrs/resolver-binding-openharmony-arm64@1.12.2", "", { "os": "none", "cpu": "arm64" }, "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ=="],
+
+ "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.12.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A=="],
+
+ "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.12.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g=="],
+
+ "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.12.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g=="],
+
+ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.12.2", "", { "os": "win32", "cpu": "x64" }, "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA=="],
+
+ "@xmldom/is-dom-node": ["@xmldom/is-dom-node@1.0.1", "", {}, "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q=="],
+
+ "@xmldom/xmldom": ["@xmldom/xmldom@0.8.14", "", {}, "sha512-T4EDRUBVZYRldYApjEJiU0e1stYWaRAX7CuSnKzrpwdZKo53zGV8/pqfzV6FfwNl9YThD2OumQYvqtvjvgG7aQ=="],
+
+ "@xyflow/react": ["@xyflow/react@12.11.3", "", { "dependencies": { "@xyflow/system": "0.0.80", "classcat": "^5.0.3", "zustand": "^4.4.0" }, "peerDependencies": { "@types/react": ">=17", "@types/react-dom": ">=17", "react": ">=17", "react-dom": ">=17" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-G3jogHz2GWUtIOkhavUGno2YzY9u6fILIJBttfsBendb0/HWB90JG+sOTAvlIMEwyvq9zgy9V9ZQSwyQjR5QzQ=="],
+
+ "@xyflow/system": ["@xyflow/system@0.0.80", "", { "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-interpolate": "^3.0.4", "@types/d3-selection": "^3.0.10", "@types/d3-transition": "^3.0.8", "@types/d3-zoom": "^3.0.8", "d3-drag": "^3.0.0", "d3-interpolate": "^3.0.1", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0" } }, "sha512-ywc3ZqG91brzWrH1WlwMdIX4goOfrpBy6AbLdVSaof/Xx9l138ijIKRExM6EkMro2F+OImGmSiA/WKcXvKVcfA=="],
+
+ "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
+
+ "acorn": ["acorn@8.17.0", "", { "bin": "bin/acorn" }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="],
+
+ "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
+
+ "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
+
+ "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="],
+
+ "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
+
+ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
+
+ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
+
+ "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="],
+
+ "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="],
+
+ "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="],
+
+ "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="],
+
+ "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="],
+
+ "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="],
+
+ "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="],
+
+ "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="],
+
+ "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="],
+
+ "asn1js": ["asn1js@3.0.10", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.5", "tslib": "^2.8.1" } }, "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg=="],
+
+ "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="],
+
+ "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="],
+
+ "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="],
+
+ "axe-core": ["axe-core@4.12.1", "", {}, "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA=="],
+
+ "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
+
+ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
+
+ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
+
+ "baseline-browser-mapping": ["baseline-browser-mapping@2.10.37", "", { "bin": "dist/cli.cjs" }, "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig=="],
+
+ "bcryptjs": ["bcryptjs@3.0.3", "", { "bin": { "bcrypt": "bin/bcrypt" } }, "sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g=="],
+
+ "better-sqlite3": ["better-sqlite3@12.11.1", "", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" } }, "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA=="],
+
+ "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="],
+
+ "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="],
+
+ "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],
+
+ "brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="],
+
+ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
+
+ "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": "cli.js" }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="],
+
+ "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="],
+
+ "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
+
+ "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="],
+
+ "bytestreamjs": ["bytestreamjs@2.0.1", "", {}, "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ=="],
+
+ "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="],
+
+ "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
+
+ "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="],
+
+ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
+
+ "caniuse-lite": ["caniuse-lite@1.0.30001799", "", {}, "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw=="],
+
+ "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
+
+ "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="],
+
+ "classcat": ["classcat@5.0.5", "", {}, "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w=="],
+
+ "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="],
+
+ "cli-spinners": ["cli-spinners@3.4.0", "", {}, "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw=="],
+
+ "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="],
+
+ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
+
+ "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
+
+ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
+
+ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
+
+ "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="],
+
+ "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="],
+
+ "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="],
+
+ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="],
+
+ "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
+
+ "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="],
+
+ "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
+
+ "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="],
+
+ "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="],
+
+ "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="],
+
+ "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="],
+
+ "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="],
+
+ "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="],
+
+ "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="],
+
+ "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="],
+
+ "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="],
+
+ "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="],
+
+ "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="],
+
+ "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="],
+
+ "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="],
+
+ "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="],
+
+ "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="],
+
+ "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="],
+
+ "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="],
+
+ "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="],
+
+ "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="],
+
+ "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="],
+
+ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+
+ "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="],
+
+ "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="],
+
+ "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="],
+
+ "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
+
+ "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="],
+
+ "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="],
+
+ "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
+
+ "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="],
+
+ "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="],
+
+ "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="],
+
+ "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
+
+ "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="],
+
+ "dompurify": ["dompurify@3.2.7", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw=="],
+
+ "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
+
+ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="],
+
+ "electron-to-chromium": ["electron-to-chromium@1.5.372", "", {}, "sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA=="],
+
+ "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
+
+ "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="],
+
+ "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
+
+ "enhanced-resolve": ["enhanced-resolve@5.24.5", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A=="],
+
+ "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="],
+
+ "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
+
+ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
+
+ "es-iterator-helpers": ["es-iterator-helpers@1.3.3", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g=="],
+
+ "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="],
+
+ "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
+
+ "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="],
+
+ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="],
+
+ "es-toolkit": ["es-toolkit@1.47.1", "", {}, "sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q=="],
+
+ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
+
+ "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="],
+
+ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
+
+ "eslint": ["eslint@9.39.5", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.6", "@eslint/js": "9.39.5", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw=="],
+
+ "eslint-config-next": ["eslint-config-next@16.1.6", "", { "dependencies": { "@next/eslint-plugin-next": "16.1.6", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" } }, "sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA=="],
+
+ "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.10", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.16.1", "resolve": "^2.0.0-next.6" } }, "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ=="],
+
+ "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="],
+
+ "eslint-module-utils": ["eslint-module-utils@2.13.0", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ=="],
+
+ "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="],
+
+ "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="],
+
+ "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="],
+
+ "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.1.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g=="],
+
+ "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="],
+
+ "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="],
+
+ "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="],
+
+ "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="],
+
+ "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
+
+ "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
+
+ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
+
+ "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
+
+ "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="],
+
+ "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="],
+
+ "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="],
+
+ "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
+
+ "fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="],
+
+ "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
+
+ "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="],
+
+ "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="],
+
+ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
+
+ "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="],
+
+ "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="],
+
+ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
+
+ "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="],
+
+ "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
+
+ "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
+
+ "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="],
+
+ "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="],
+
+ "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="],
+
+ "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="],
+
+ "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="],
+
+ "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="],
+
+ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
+
+ "function.prototype.name": ["function.prototype.name@1.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2", "hasown": "^2.0.4", "is-callable": "^1.2.7", "is-document.all": "^1.0.0" } }, "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew=="],
+
+ "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="],
+
+ "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="],
+
+ "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
+
+ "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="],
+
+ "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="],
+
+ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
+
+ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="],
+
+ "get-tsconfig": ["get-tsconfig@4.14.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA=="],
+
+ "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="],
+
+ "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
+
+ "globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="],
+
+ "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
+
+ "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
+
+ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
+
+ "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="],
+
+ "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
+
+ "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
+
+ "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="],
+
+ "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
+
+ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
+
+ "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="],
+
+ "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="],
+
+ "hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="],
+
+ "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="],
+
+ "http-proxy": ["http-proxy@1.18.1", "", { "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ=="],
+
+ "http-proxy-middleware": ["http-proxy-middleware@3.0.7", "", { "dependencies": { "@types/http-proxy": "^1.17.15", "debug": "^4.3.6", "http-proxy": "^1.18.1", "is-glob": "^4.0.3", "is-plain-object": "^5.0.0", "micromatch": "^4.0.8" } }, "sha512-iwbQltVlx8bCrqePUM8C+hllHvdawVhQJaLrj1X7qllkvFQdXFsr16pW/mo9+JDVjN+QO2XUx9jd8SmoFkE5qw=="],
+
+ "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="],
+
+ "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
+
+ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
+
+ "immer": ["immer@11.1.8", "", {}, "sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA=="],
+
+ "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
+
+ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
+
+ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
+
+ "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="],
+
+ "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="],
+
+ "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="],
+
+ "ip-address": ["ip-address@10.2.0", "", {}, "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="],
+
+ "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="],
+
+ "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="],
+
+ "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="],
+
+ "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="],
+
+ "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="],
+
+ "is-bun-module": ["is-bun-module@2.0.0", "", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="],
+
+ "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="],
+
+ "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="],
+
+ "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="],
+
+ "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="],
+
+ "is-docker": ["is-docker@3.0.0", "", { "bin": "cli.js" }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
+
+ "is-document.all": ["is-document.all@1.0.0", "", { "dependencies": { "call-bound": "^1.0.4" } }, "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g=="],
+
+ "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
+
+ "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="],
+
+ "is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="],
+
+ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
+
+ "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="],
+
+ "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": "cli.js" }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],
+
+ "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="],
+
+ "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="],
+
+ "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="],
+
+ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
+
+ "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="],
+
+ "is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="],
+
+ "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="],
+
+ "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="],
+
+ "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="],
+
+ "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="],
+
+ "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="],
+
+ "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="],
+
+ "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="],
+
+ "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="],
+
+ "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="],
+
+ "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="],
+
+ "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="],
+
+ "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="],
+
+ "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
+
+ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
+
+ "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="],
+
+ "jiti": ["jiti@2.7.0", "", { "bin": "lib/jiti-cli.mjs" }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="],
+
+ "jose": ["jose@6.2.9", "", {}, "sha512-XrchZOFZUl/T3vTwRe8XK+cJrGtMF4th1ARnDfwbBXFKThGhlsxEE4Zu03AD/bjJSt/9jT/mxrOCkJWOg77aPA=="],
+
+ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
+
+ "js-yaml": ["js-yaml@4.3.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ=="],
+
+ "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="],
+
+ "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
+
+ "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
+
+ "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
+
+ "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": "lib/cli.js" }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="],
+
+ "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="],
+
+ "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
+
+ "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="],
+
+ "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="],
+
+ "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
+
+ "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
+
+ "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
+
+ "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
+
+ "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
+
+ "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
+
+ "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
+
+ "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
+
+ "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
+
+ "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
+
+ "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
+
+ "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
+
+ "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
+
+ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
+
+ "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
+
+ "log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="],
+
+ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
+
+ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
+
+ "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
+
+ "marked": ["marked@18.0.10", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-FJeH4bRpYoXiggcgriCGItKCSv3xkngJc4QCZ/rkQCogU3VYaLxYJoZl8Nw/b4+x7iij/pd+09mZ6A1dXzpL0A=="],
+
+ "material-symbols": ["material-symbols@0.44.12", "", {}, "sha512-lZkS9BwISNU2Jbup+IlwZrr9z1oAK6zx38qPpe7mNzkXwiIEnQaxPz1Sf3bNZ0MX15LNlJQNjKI3MWLgmo83+Q=="],
+
+ "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
+
+ "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="],
+
+ "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="],
+
+ "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
+
+ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
+
+ "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
+
+ "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
+
+ "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
+
+ "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
+
+ "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
+
+ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
+
+ "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="],
+
+ "monaco-editor": ["monaco-editor@0.55.1", "", { "dependencies": { "dompurify": "3.2.7", "marked": "14.0.0" } }, "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A=="],
+
+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
+
+ "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="],
+
+ "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="],
+
+ "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": "lib/cli.js" }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="],
+
+ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
+
+ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
+
+ "next": ["next@16.3.1", "", { "dependencies": { "@next/env": "16.3.1", "@swc/helpers": "0.5.23", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.5.23", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.3.1", "@next/swc-darwin-x64": "16.3.1", "@next/swc-linux-arm64-gnu": "16.3.1", "@next/swc-linux-arm64-musl": "16.3.1", "@next/swc-linux-x64-gnu": "16.3.1", "@next/swc-linux-x64-musl": "16.3.1", "@next/swc-win32-arm64-msvc": "16.3.1", "@next/swc-win32-x64-msvc": "16.3.1", "sharp": "^0.35.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-hsAp0i7Rh+/dhe7DGIeN2YlpLM1DP4MNxti9EtDMtqcO612X81MvvEj388/oTce9U1EcEIOWDlGq0zRwrBKvuA=="],
+
+ "node-abi": ["node-abi@3.92.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ=="],
+
+ "node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="],
+
+ "node-forge": ["node-forge@1.4.0", "", {}, "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ=="],
+
+ "node-machine-id": ["node-machine-id@1.1.12", "", {}, "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ=="],
+
+ "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="],
+
+ "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
+
+ "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="],
+
+ "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
+
+ "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="],
+
+ "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="],
+
+ "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="],
+
+ "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="],
+
+ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="],
+
+ "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="],
+
+ "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
+
+ "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
+
+ "open": ["open@11.0.1", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.2.0", "wsl-utils": "^1.0.0" } }, "sha512-NzwMUB6C1D0+Kd+9iMS/H4k+Ck3cTX6Ckyfr/gAGlmvSE1LUQZnEZvWBi4PYmMwH/S5SMeTXnE+9uAz8uF+pWw=="],
+
+ "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
+
+ "ora": ["ora@9.4.1", "", { "dependencies": { "chalk": "^5.6.2", "cli-cursor": "^5.0.0", "cli-spinners": "^3.2.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", "stdin-discarder": "^0.3.2", "string-width": "^8.1.0" } }, "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw=="],
+
+ "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="],
+
+ "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
+
+ "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
+
+ "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
+
+ "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="],
+
+ "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
+
+ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
+
+ "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
+
+ "path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="],
+
+ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
+
+ "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
+
+ "pkijs": ["pkijs@3.4.0", "", { "dependencies": { "@noble/hashes": "1.4.0", "asn1js": "^3.0.6", "bytestreamjs": "^2.0.1", "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw=="],
+
+ "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="],
+
+ "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="],
+
+ "powershell-utils": ["powershell-utils@0.2.0", "", {}, "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw=="],
+
+ "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": "bin.js" }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="],
+
+ "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
+
+ "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="],
+
+ "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="],
+
+ "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="],
+
+ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
+
+ "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="],
+
+ "pvutils": ["pvutils@1.1.5", "", {}, "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA=="],
+
+ "qs": ["qs@6.15.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw=="],
+
+ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
+
+ "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="],
+
+ "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],
+
+ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": "cli.js" }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="],
+
+ "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="],
+
+ "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="],
+
+ "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
+
+ "react-redux": ["react-redux@9.3.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "@types/react": "^18.2.25 || ^19", "react": "^18.0 || ^19", "redux": "^5.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g=="],
+
+ "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
+
+ "recharts": ["recharts@3.10.1", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^11.1.8", "react-redux": "8.x.x || 9.x.x", "reselect": "5.2.0", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-QXFrvt6IVcw7eeZCoyXTwkIJAX3Dv1nyVhMicXJ47GsGDDpcN8z6o644DibE9XjpBTThtsomLKnTV6lc+cVFUA=="],
+
+ "redux": ["redux@5.0.1", "", {}, "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="],
+
+ "redux-thunk": ["redux-thunk@3.1.0", "", { "peerDependencies": { "redux": "^5.0.0" } }, "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw=="],
+
+ "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="],
+
+ "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="],
+
+ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="],
+
+ "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="],
+
+ "reselect": ["reselect@5.2.0", "", {}, "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw=="],
+
+ "resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="],
+
+ "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
+
+ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
+
+ "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="],
+
+ "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
+
+ "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="],
+
+ "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="],
+
+ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
+
+ "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="],
+
+ "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
+
+ "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="],
+
+ "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="],
+
+ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
+
+ "sax": ["sax@1.6.1", "", {}, "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="],
+
+ "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
+
+ "selfsigned": ["selfsigned@5.5.0", "", { "dependencies": { "@peculiar/x509": "^1.14.2", "pkijs": "^3.3.3" } }, "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew=="],
+
+ "semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
+
+ "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="],
+
+ "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="],
+
+ "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="],
+
+ "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="],
+
+ "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="],
+
+ "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="],
+
+ "sharp": ["sharp@0.35.3", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.5" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.3", "@img/sharp-darwin-x64": "0.35.3", "@img/sharp-freebsd-wasm32": "0.35.3", "@img/sharp-libvips-darwin-arm64": "1.3.2", "@img/sharp-libvips-darwin-x64": "1.3.2", "@img/sharp-libvips-linux-arm": "1.3.2", "@img/sharp-libvips-linux-arm64": "1.3.2", "@img/sharp-libvips-linux-ppc64": "1.3.2", "@img/sharp-libvips-linux-riscv64": "1.3.2", "@img/sharp-libvips-linux-s390x": "1.3.2", "@img/sharp-libvips-linux-x64": "1.3.2", "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", "@img/sharp-libvips-linuxmusl-x64": "1.3.2", "@img/sharp-linux-arm": "0.35.3", "@img/sharp-linux-arm64": "0.35.3", "@img/sharp-linux-ppc64": "0.35.3", "@img/sharp-linux-riscv64": "0.35.3", "@img/sharp-linux-s390x": "0.35.3", "@img/sharp-linux-x64": "0.35.3", "@img/sharp-linuxmusl-arm64": "0.35.3", "@img/sharp-linuxmusl-x64": "0.35.3", "@img/sharp-webcontainers-wasm32": "0.35.3", "@img/sharp-win32-arm64": "0.35.3", "@img/sharp-win32-ia32": "0.35.3", "@img/sharp-win32-x64": "0.35.3" } }, "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q=="],
+
+ "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
+
+ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
+
+ "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="],
+
+ "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="],
+
+ "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="],
+
+ "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="],
+
+ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
+
+ "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="],
+
+ "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="],
+
+ "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
+
+ "socks": ["socks@2.8.9", "", { "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" } }, "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw=="],
+
+ "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="],
+
+ "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
+
+ "sql.js": ["sql.js@1.14.2", "", {}, "sha512-3ZGPovObMFrdw79zrUHbfdE/DLIsy8jdNdssmMSQuRAymedU6q84asPt0kgiqrdMYlPegDItiIMfmIXzZnYFcw=="],
+
+ "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="],
+
+ "state-local": ["state-local@1.0.7", "", {}, "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w=="],
+
+ "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
+
+ "stdin-discarder": ["stdin-discarder@0.3.2", "", {}, "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A=="],
+
+ "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="],
+
+ "string-width": ["string-width@8.2.1", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA=="],
+
+ "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="],
+
+ "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="],
+
+ "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="],
+
+ "string.prototype.trim": ["string.prototype.trim@1.2.11", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "has-property-descriptors": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w=="],
+
+ "string.prototype.trimend": ["string.prototype.trimend@1.0.10", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.2" } }, "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw=="],
+
+ "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="],
+
+ "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
+
+ "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
+
+ "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="],
+
+ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
+
+ "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="],
+
+ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
+
+ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
+
+ "tailwindcss": ["tailwindcss@4.3.3", "", {}, "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ=="],
+
+ "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="],
+
+ "tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="],
+
+ "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="],
+
+ "third-party-capital": ["third-party-capital@1.0.20", "", {}, "sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA=="],
+
+ "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="],
+
+ "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="],
+
+ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
+
+ "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="],
+
+ "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="],
+
+ "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="],
+
+ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "tsyringe": ["tsyringe@4.10.0", "", { "dependencies": { "tslib": "^1.9.3" } }, "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw=="],
+
+ "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="],
+
+ "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
+
+ "type-is": ["type-is@2.1.0", "", { "dependencies": { "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA=="],
+
+ "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="],
+
+ "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="],
+
+ "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="],
+
+ "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="],
+
+ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
+
+ "typescript-eslint": ["typescript-eslint@8.61.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.61.0", "@typescript-eslint/parser": "8.61.0", "@typescript-eslint/typescript-estree": "8.61.0", "@typescript-eslint/utils": "8.61.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw=="],
+
+ "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="],
+
+ "undici": ["undici@7.29.0", "", {}, "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw=="],
+
+ "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
+
+ "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="],
+
+ "unrs-resolver": ["unrs-resolver@1.12.2", "", { "dependencies": { "napi-postinstall": "^0.3.4" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.12.2", "@unrs/resolver-binding-android-arm64": "1.12.2", "@unrs/resolver-binding-darwin-arm64": "1.12.2", "@unrs/resolver-binding-darwin-x64": "1.12.2", "@unrs/resolver-binding-freebsd-x64": "1.12.2", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", "@unrs/resolver-binding-linux-x64-musl": "1.12.2", "@unrs/resolver-binding-openharmony-arm64": "1.12.2", "@unrs/resolver-binding-wasm32-wasi": "1.12.2", "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" } }, "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ=="],
+
+ "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="],
+
+ "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
+
+ "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="],
+
+ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
+
+ "uuid": ["uuid@13.0.2", "", { "bin": "dist-node/bin/uuid" }, "sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw=="],
+
+ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="],
+
+ "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="],
+
+ "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
+
+ "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="],
+
+ "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="],
+
+ "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="],
+
+ "which-typed-array": ["which-typed-array@1.1.22", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw=="],
+
+ "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
+
+ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
+
+ "wsl-utils": ["wsl-utils@1.0.0", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-Hl0ZOAs672vg+06kfujwRhoS6/jehvULrlFkuF2dRu6pHgA8U06h3xqNIqNNU1LTXPcedxByAR4GS6pwQK0mgA=="],
+
+ "xml-crypto": ["xml-crypto@6.1.2", "", { "dependencies": { "@xmldom/is-dom-node": "^1.0.1", "@xmldom/xmldom": "^0.8.10", "xpath": "^0.0.33" } }, "sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w=="],
+
+ "xml-encryption": ["xml-encryption@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.5", "escape-html": "^1.0.3", "xpath": "0.0.32" } }, "sha512-PV7qnYpoAMXbf1kvQkqMScLeQpjCMixddAKq9PtqVrho8HnYbBOWNfG0kA4R7zxQDo7w9kiYAyzS/ullAyO55Q=="],
+
+ "xml2js": ["xml2js@0.6.2", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA=="],
+
+ "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="],
+
+ "xpath": ["xpath@0.0.34", "", {}, "sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA=="],
+
+ "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
+
+ "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
+
+ "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="],
+
+ "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+
+ "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="],
+
+ "zustand": ["zustand@5.0.15", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-MpSEjRiBkA9crSYeOUH32rJC7SVqAbm0Fqcqge/bUi2PPoLcBWKOsG+C8mevmpr8TwXHBVkChbbJiyvkE+i/3A=="],
+
+ "@babel/core/json5": ["json5@2.2.3", "", { "bin": "lib/cli.js" }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
+
+ "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
+
+ "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="],
+
+ "@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="],
+
+ "@reduxjs/toolkit/reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="],
+
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" }, "bundled": true }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="],
+
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="],
+
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="],
+
+ "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="],
+
+ "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="],
+
+ "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
+
+ "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="],
+
+ "@typescript-eslint/typescript-estree/semver": ["semver@7.8.4", "", { "bin": "bin/semver.js" }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="],
+
+ "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="],
+
+ "@xyflow/react/zustand": ["zustand@4.5.7", "", { "dependencies": { "use-sync-external-store": "^1.2.2" }, "peerDependencies": { "@types/react": ">=16.8", "immer": ">=9.0.6", "react": ">=16.8" }, "optionalPeers": ["@types/react"] }, "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw=="],
+
+ "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
+
+ "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
+
+ "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
+
+ "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
+
+ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
+
+ "fdir/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
+
+ "http-proxy/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="],
+
+ "is-bun-module/semver": ["semver@7.8.4", "", { "bin": "bin/semver.js" }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="],
+
+ "monaco-editor/marked": ["marked@14.0.0", "", { "bin": "bin/marked.js" }, "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ=="],
+
+ "next/postcss": ["postcss@8.5.23", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg=="],
+
+ "node-abi/semver": ["semver@7.8.4", "", { "bin": "bin/semver.js" }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="],
+
+ "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
+
+ "sharp/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="],
+
+ "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
+
+ "tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="],
+
+ "type-is/content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="],
+
+ "wsl-utils/powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="],
+
+ "xml-crypto/xpath": ["xpath@0.0.33", "", {}, "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA=="],
+
+ "xml-encryption/xpath": ["xpath@0.0.32", "", {}, "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw=="],
+
+ "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="],
+
+ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="],
+
+ "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
+ }
+}
diff --git a/src/app/(dashboard)/dashboard/combos/page.js b/src/app/(dashboard)/dashboard/combos/page.js
index 16d16ba5..47020266 100644
--- a/src/app/(dashboard)/dashboard/combos/page.js
+++ b/src/app/(dashboard)/dashboard/combos/page.js
@@ -5,7 +5,7 @@ import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, us
import { arrayMove, SortableContext, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities";
import { restrictToVerticalAxis, restrictToParentElement } from "@dnd-kit/modifiers";
-import { Card, Button, Modal, Input, CardSkeleton, ModelSelectModal, ModelSelectSidePanel, ConfirmModal, CapacityBadges, Select, Toggle } from "@/shared/components";
+import { Card, Button, Modal, Input, CardSkeleton, ModelSelectModal, ModelSelectSidePanel, ConfirmModal, CapacityBadges, Select, Toggle, TagInput } from "@/shared/components";
import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard";
import { useModelCaps } from "@/shared/hooks/useModelCaps";
import { isOpenAICompatibleProvider, isAnthropicCompatibleProvider } from "@/shared/constants/providers";
@@ -56,6 +56,9 @@ export default function CombosPage() {
const { getCaps } = useModelCaps();
const [confirmState, setConfirmState] = useState(null);
const { copied, copy } = useCopyToClipboard();
+ // Tag filter is additive (OR). Empty set = show all. "Untagged" is a
+ // synthetic filter that matches combos whose tags array is empty.
+ const [activeTagFilters, setActiveTagFilters] = useState(() => new Set());
useEffect(() => {
fetchData();
@@ -190,15 +193,56 @@ export default function CombosPage() {
console.log("Error updating combo strategy:", error);
}
};
+ // Build the union of all tags + a synthetic "Untagged" entry when at least
+ // one combo has no tags. Stable order: alphabetical, with Untagged last.
+ const availableTags = (() => {
+ const set = new Set();
+ let hasUntagged = false;
+ for (const c of combos) {
+ if (Array.isArray(c.tags) && c.tags.length > 0) {
+ for (const t of c.tags) set.add(t);
+ } else {
+ hasUntagged = true;
+ }
+ }
+ const out = [...set].sort();
+ if (hasUntagged) out.push("__untagged__");
+ return out;
+ })();
- if (loading) {
- return (
-
-
-
-
- );
- }
+ const toggleTagFilter = (tag) => {
+ setActiveTagFilters((prev) => {
+ const next = new Set(prev);
+ if (next.has(tag)) next.delete(tag);
+ else next.add(tag);
+ return next;
+ });
+ };
+
+ // Apply OR-of-active-tags filter. Empty set = pass through unchanged.
+ const visibleCombos = activeTagFilters.size === 0
+ ? combos
+ : combos.filter((c) => {
+ const tags = Array.isArray(c.tags) && c.tags.length > 0 ? c.tags : ["__untagged__"];
+ return tags.some((t) => activeTagFilters.has(t));
+ });
+
+ // Group by tag. A combo with [a, b] appears in both groups. Combos with no
+ // tags land in a synthetic "__untagged__" bucket. Order within each group
+ // follows the input (combos are already in `createdAt ASC` from the repo).
+ const groupedCombos = (() => {
+ const groups = new Map();
+ for (const c of visibleCombos) {
+ const tags = Array.isArray(c.tags) && c.tags.length > 0 ? c.tags : ["__untagged__"];
+ for (const t of tags) {
+ if (activeTagFilters.size > 0 && !activeTagFilters.has(t)) continue;
+ const arr = groups.get(t) || [];
+ arr.push(c);
+ groups.set(t, arr);
+ }
+ }
+ return groups;
+ })();
return (
@@ -219,7 +263,39 @@ export default function CombosPage() {
- {/* Combos List */}
+ {/* Tag filter bar — chips toggle inclusion. OR semantics. */}
+ {availableTags.length > 0 && (
+
+ Filter
+ {availableTags.map((t) => {
+ const isUntagged = t === "__untagged__";
+ const active = activeTagFilters.has(t);
+ return (
+
+ );
+ })}
+ {activeTagFilters.size > 0 && (
+
+ )}
+
+ )}
+
+ {/* Combos List — grouped by active tag filter, or flat if no filter */}
{combos.length === 0 ? (
@@ -233,6 +309,37 @@ export default function CombosPage() {
+ ) : activeTagFilters.size > 0 ? (
+
+ {[...groupedCombos.entries()].map(([tag, list]) => (
+
+
+ sell
+
+ {tag === "__untagged__" ? "Untagged" : tag}
+
+ ({list.length})
+
+
+ {list.map((combo) => (
+ setEditingCombo(combo)}
+ onDelete={() => handleDelete(combo.id)}
+ strategy={comboStrategies[combo.name] || {}}
+ globalStrategy={globalComboStrategy}
+ onSetStrategy={(patch) => handleSetComboStrategy(combo.name, patch)}
+ />
+ ))}
+
+
+ ))}
+
) : (
{combos.map((combo) => (
@@ -252,8 +359,6 @@ export default function CombosPage() {
))}
)}
-
- {/* Capacity Adapter */}
+{combo.models.length - 3} more
)}
+ {/* Tags — read-only chips. Edit/manage via the form modal. */}
+ {Array.isArray(combo.tags) && combo.tags.length > 0 && (
+
+ {combo.tags.map((t) => (
+
+ sell
+ {t}
+
+ ))}
+
+ )}
{/* Fusion: judge picker (Auto = first model) */}
{isFusion && (
@@ -664,6 +780,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders, kindF
// Initialize state with combo values - key prop on parent handles reset on remount
const [name, setName] = useState(combo?.name || "");
const [models, setModels] = useState(combo?.models || []);
+ const [tags, setTags] = useState(combo?.tags || []);
const [showModelSelect, setShowModelSelect] = useState(false);
const [saving, setSaving] = useState(false);
const [nameError, setNameError] = useState("");
@@ -754,7 +871,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders, kindF
const handleSave = async () => {
if (!validateName(name)) return;
setSaving(true);
- await onSave({ name: name.trim(), models });
+ await onSave({ name: name.trim(), models, tags });
setSaving(false);
};
@@ -838,6 +955,17 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders, kindF
+ {/* Tags — optional. Used to group combos in the dashboard list. */}
+
+
+
+
+ Press Enter or comma to add. Lowercased + deduped automatically.
+
+
+
{/* Actions */}
diff --git a/src/app/api/combos/[id]/route.js b/src/app/api/combos/[id]/route.js
index d641da7f..cf55ec53 100644
--- a/src/app/api/combos/[id]/route.js
+++ b/src/app/api/combos/[id]/route.js
@@ -1,3 +1,20 @@
+// Normalize user-supplied tags: lowercase, trim, strip empties/dupes, cap length+count.
+// Kept in sync with the create route — same rules, same shape.
+function sanitizeTags(tags) {
+ if (!Array.isArray(tags)) return [];
+ const out = [];
+ const seen = new Set();
+ for (const t of tags) {
+ if (typeof t !== "string") continue;
+ const v = t.trim().toLowerCase();
+ if (!v || v.length > 32 || seen.has(v)) continue;
+ seen.add(v);
+ out.push(v);
+ if (out.length >= 12) break;
+ }
+ return out;
+}
+
import { NextResponse } from "next/server";
import { getComboById, updateCombo, deleteCombo, getComboByName } from "@/lib/localDb";
import { resetComboRotation } from "open-sse/services/combo.js";
@@ -27,24 +44,29 @@ export async function PUT(request, { params }) {
try {
const { id } = await params;
const body = await request.json();
-
+
// Validate name format if provided
if (body.name) {
if (!VALID_NAME_REGEX.test(body.name)) {
return NextResponse.json({ error: "Name can only contain letters, numbers, -, _ and ." }, { status: 400 });
}
-
+
// Check if name already exists (exclude current combo)
const existing = await getComboByName(body.name);
if (existing && existing.id !== id) {
return NextResponse.json({ error: "Combo name already exists" }, { status: 400 });
}
}
-
+
+ // `tags` is optional in PUT. When present (even as []), sanitize and store.
+ if (body.tags !== undefined) {
+ body.tags = sanitizeTags(body.tags);
+ }
+
// Capture previous name to invalidate rotation state on rename
const prev = await getComboById(id);
const combo = await updateCombo(id, body);
-
+
if (!combo) {
return NextResponse.json({ error: "Combo not found" }, { status: 404 });
}
diff --git a/src/app/api/combos/route.js b/src/app/api/combos/route.js
index db9f02de..dc89ea6a 100644
--- a/src/app/api/combos/route.js
+++ b/src/app/api/combos/route.js
@@ -1,3 +1,21 @@
+// Normalize user-supplied tags: lowercase, trim, strip empties/dupes, cap length+count.
+// Anything non-string is dropped. Tags are pure metadata, so this is a
+// generous regex on purpose (spaces, unicode) — only length + count are bounded.
+function sanitizeTags(tags) {
+ if (!Array.isArray(tags)) return [];
+ const out = [];
+ const seen = new Set();
+ for (const t of tags) {
+ if (typeof t !== "string") continue;
+ const v = t.trim().toLowerCase();
+ if (!v || v.length > 32 || seen.has(v)) continue;
+ seen.add(v);
+ out.push(v);
+ if (out.length >= 12) break;
+ }
+ return out;
+}
+
import { NextResponse } from "next/server";
import { getCombos, createCombo, getComboByName } from "@/lib/localDb";
@@ -21,7 +39,7 @@ export async function GET() {
export async function POST(request) {
try {
const body = await request.json();
- const { name, models, kind } = body;
+ const { name, models, kind, tags } = body;
if (!name) {
return NextResponse.json({ error: "Name is required" }, { status: 400 });
@@ -38,7 +56,8 @@ export async function POST(request) {
return NextResponse.json({ error: "Combo name already exists" }, { status: 400 });
}
- const combo = await createCombo({ name, models: models || [], kind: kind || null });
+ const sanitizedTags = sanitizeTags(tags);
+ const combo = await createCombo({ name, models: models || [], kind: kind || null, tags: sanitizedTags });
return NextResponse.json(combo, { status: 201 });
} catch (error) {
diff --git a/src/lib/db/index.js b/src/lib/db/index.js
index 8681dfdb..27a32a71 100644
--- a/src/lib/db/index.js
+++ b/src/lib/db/index.js
@@ -79,7 +79,7 @@ export async function exportDb() {
providerNodes: db.all(`SELECT * FROM providerNodes`).map((r) => ({ ...parseJson(r.data, {}), id: r.id, type: r.type, name: r.name, createdAt: r.createdAt, updatedAt: r.updatedAt })),
proxyPools: db.all(`SELECT * FROM proxyPools`).map((r) => ({ ...parseJson(r.data, {}), id: r.id, isActive: r.isActive === 1, testStatus: r.testStatus, createdAt: r.createdAt, updatedAt: r.updatedAt })),
apiKeys: db.all(`SELECT * FROM apiKeys`).map((r) => ({ id: r.id, key: r.key, name: r.name, machineId: r.machineId, isActive: r.isActive === 1, createdAt: r.createdAt })),
- combos: db.all(`SELECT * FROM combos`).map((r) => ({ id: r.id, name: r.name, kind: r.kind, models: parseJson(r.models, []), createdAt: r.createdAt, updatedAt: r.updatedAt })),
+ combos: db.all(`SELECT * FROM combos`).map((r) => ({ id: r.id, name: r.name, kind: r.kind, models: parseJson(r.models, []), tags: parseJson(r.tags, []), createdAt: r.createdAt, updatedAt: r.updatedAt })),
modelAliases: {},
customModels: [],
mitmAlias: {},
@@ -144,8 +144,8 @@ export async function importDb(payload) {
}
for (const c of payload.combos || []) {
db.run(
- `INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`,
- [c.id, c.name, c.kind || null, stringifyJson(c.models || []), c.createdAt || new Date().toISOString(), c.updatedAt || new Date().toISOString()]
+ `INSERT OR REPLACE INTO combos(id, name, kind, models, tags, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)`,
+ [c.id, c.name, c.kind || null, stringifyJson(c.models || []), stringifyJson(c.tags || []), c.createdAt || new Date().toISOString(), c.updatedAt || new Date().toISOString()]
);
}
for (const [a, m] of Object.entries(payload.modelAliases || {})) {
diff --git a/src/lib/db/migrate.js b/src/lib/db/migrate.js
index 0cca4da0..6349f7da 100644
--- a/src/lib/db/migrate.js
+++ b/src/lib/db/migrate.js
@@ -149,8 +149,8 @@ function importLegacyMain(adapter, data) {
importWithAssertion(adapter, "combos", data.combos || [], (c) => {
adapter.run(
- `INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`,
- [c.id, c.name, c.kind || null, stringifyJson(c.models || []), c.createdAt || new Date().toISOString(), c.updatedAt || new Date().toISOString()]
+ `INSERT OR REPLACE INTO combos(id, name, kind, models, tags, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)`,
+ [c.id, c.name, c.kind || null, stringifyJson(c.models || []), stringifyJson(c.tags || []), c.createdAt || new Date().toISOString(), c.updatedAt || new Date().toISOString()]
);
}, (c) => ({ id: c.id ?? null, name: c.name ?? null }));
diff --git a/src/lib/db/migrations/003-combo-tags.js b/src/lib/db/migrations/003-combo-tags.js
new file mode 100644
index 00000000..d184f138
--- /dev/null
+++ b/src/lib/db/migrations/003-combo-tags.js
@@ -0,0 +1,12 @@
+// Adds a `tags` JSON array column to combos so users can group combos in the
+// dashboard. Tags are pure metadata — routing / fallback still uses combo.name.
+export default {
+ version: 3,
+ name: "combo-tags",
+ up(db) {
+ const existing = db.all(`PRAGMA table_info(combos)`) || [];
+ if (!existing.some((c) => c.name === "tags")) {
+ db.exec(`ALTER TABLE combos ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'`);
+ }
+ },
+};
diff --git a/src/lib/db/migrations/index.js b/src/lib/db/migrations/index.js
index d3e8f9bd..f1033a14 100644
--- a/src/lib/db/migrations/index.js
+++ b/src/lib/db/migrations/index.js
@@ -1,10 +1,8 @@
-// Migration registry — append new entries when schema changes.
-// Each migration: { version: number, name: string, up(db): void }
-// Versions MUST be unique and monotonically increasing.
import m001 from "./001-initial.js";
import m002 from "./002-request-details-apikey.js";
+import m003 from "./003-combo-tags.js";
-export const MIGRATIONS = [m001, m002].sort((a, b) => a.version - b.version);
+export const MIGRATIONS = [m001, m002, m003].sort((a, b) => a.version - b.version);
export function latestVersion() {
return MIGRATIONS.length ? MIGRATIONS[MIGRATIONS.length - 1].version : 0;
diff --git a/src/lib/db/repos/combosRepo.js b/src/lib/db/repos/combosRepo.js
index 78dd5a5f..1157d084 100644
--- a/src/lib/db/repos/combosRepo.js
+++ b/src/lib/db/repos/combosRepo.js
@@ -10,6 +10,7 @@ function rowToCombo(row) {
kind: row.kind,
models: parseJson(row.models, []),
enabled: row.enabled === 1 || row.enabled === true,
+ tags: parseJson(row.tags, []),
createdAt: row.createdAt,
updatedAt: row.updatedAt,
};
@@ -42,17 +43,19 @@ export async function createCombo(data) {
kind: data.kind || null,
models: data.models || [],
enabled: data.enabled !== false,
+ tags: Array.isArray(data.tags) ? data.tags : [],
createdAt: now,
updatedAt: now,
};
db.run(
- `INSERT INTO combos(id, name, kind, models, enabled, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)`,
+ `INSERT INTO combos(id, name, kind, models, enabled, tags, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`,
[
combo.id,
combo.name,
combo.kind,
stringifyJson(combo.models),
combo.enabled !== false ? 1 : 0,
+ stringifyJson(combo.tags),
combo.createdAt,
combo.updatedAt,
],
@@ -71,13 +74,17 @@ export async function updateCombo(id, data) {
...data,
updatedAt: new Date().toISOString(),
};
+ // `tags` may arrive undefined on partial updates — fall back to whatever
+ // the row already had. An explicit empty array clears them.
+ if (!Array.isArray(merged.tags)) merged.tags = rowToCombo(row).tags;
db.run(
- `UPDATE combos SET name = ?, kind = ?, models = ?, enabled = ?, updatedAt = ? WHERE id = ?`,
+ `UPDATE combos SET name = ?, kind = ?, models = ?, enabled = ?, tags = ?, updatedAt = ? WHERE id = ?`,
[
merged.name,
merged.kind,
stringifyJson(merged.models || []),
merged.enabled ? 1 : 0,
+ stringifyJson(merged.tags),
merged.updatedAt,
id,
],
diff --git a/src/lib/db/schema.js b/src/lib/db/schema.js
index ceb9b6d6..42157272 100644
--- a/src/lib/db/schema.js
+++ b/src/lib/db/schema.js
@@ -3,7 +3,7 @@
// pre-change safety backup in migrate.js: when the stored version is lower,
// one lightweight DB backup is taken before applying schema changes. Forgetting
// to bump only skips that backup — it does NOT break the additive auto-sync.
-export const SCHEMA_VERSION = 3;
+export const SCHEMA_VERSION = 4;
export const PRAGMA_SQL = `
PRAGMA journal_mode = WAL;
@@ -83,6 +83,7 @@ export const TABLES = {
machineId: "TEXT",
isActive: "INTEGER DEFAULT 1",
allowedModels: "TEXT",
+ createdAt: "TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))",
},
indexes: ["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"],
},
@@ -93,6 +94,7 @@ export const TABLES = {
kind: "TEXT",
models: "TEXT NOT NULL",
enabled: "INTEGER NOT NULL DEFAULT 1",
+ tags: "TEXT NOT NULL DEFAULT '[]'",
createdAt: "TEXT NOT NULL",
updatedAt: "TEXT NOT NULL",
},
diff --git a/src/shared/components/TagInput.js b/src/shared/components/TagInput.js
new file mode 100644
index 00000000..ab688113
--- /dev/null
+++ b/src/shared/components/TagInput.js
@@ -0,0 +1,83 @@
+"use client";
+
+import { useState } from "react";
+
+// Pill input for free-form tags. Enter / comma commits. Backspace on empty
+// input pops the last tag. Pure local state — caller owns the canonical list.
+export default function TagInput({ value = [], onChange, placeholder = "Add tag…", maxTags = 12, disabled = false }) {
+ const [draft, setDraft] = useState("");
+
+ const commit = (raw) => {
+ const next = (raw || "")
+ .split(/[,\n]/)
+ .map((s) => s.trim().toLowerCase())
+ .filter(Boolean);
+ if (next.length === 0) return;
+ const merged = [...value];
+ const seen = new Set(merged);
+ for (const t of next) {
+ if (seen.has(t)) continue;
+ if (t.length > 32) continue;
+ if (merged.length >= maxTags) break;
+ merged.push(t);
+ seen.add(t);
+ }
+ if (merged.length !== value.length) onChange(merged);
+ setDraft("");
+ };
+
+ const remove = (t) => {
+ onChange(value.filter((x) => x !== t));
+ };
+
+ const onKeyDown = (e) => {
+ if (e.key === "Enter" || e.key === ",") {
+ e.preventDefault();
+ commit(draft);
+ } else if (e.key === "Backspace" && draft === "" && value.length > 0) {
+ onChange(value.slice(0, -1));
+ } else if (e.key === "Escape") {
+ setDraft("");
+ }
+ };
+
+ return (
+
{
+ // Clicking the pill row focuses the input so the user can keep typing.
+ if (e.target === e.currentTarget) {
+ e.currentTarget.querySelector("input")?.focus();
+ }
+ }}
+ >
+ {value.map((t) => (
+
+ sell
+ {t}
+
+
+ ))}
+ setDraft(e.target.value)}
+ onKeyDown={onKeyDown}
+ onBlur={() => { if (draft.trim()) commit(draft); }}
+ placeholder={value.length === 0 ? placeholder : ""}
+ maxLength={32}
+ className="flex-1 min-w-[80px] bg-transparent text-xs outline-none placeholder:text-text-muted"
+ />
+
+ );
+}
diff --git a/src/shared/components/index.js b/src/shared/components/index.js
index 62d5bb62..6ab27790 100644
--- a/src/shared/components/index.js
+++ b/src/shared/components/index.js
@@ -37,6 +37,7 @@ export { default as SegmentedControl } from "./SegmentedControl";
export { default as Tooltip } from "./Tooltip";
export { default as ProviderInfoCard } from "./ProviderInfoCard";
export { default as CapacityBadges } from "./CapacityBadges";
+export { default as TagInput } from "./TagInput";
export { default as ApiExplorerModal } from "./ApiExplorerModal";
// Layouts
diff --git a/tmp/9r-smoke-dist/dev/build-manifest.json b/tmp/9r-smoke-dist/dev/build-manifest.json
new file mode 100644
index 00000000..cc102f9f
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/build-manifest.json
@@ -0,0 +1,15 @@
+{
+ "pages": {
+ "/_app": []
+ },
+ "devFiles": [],
+ "polyfillFiles": [],
+ "lowPriorityFiles": [
+ "static/development/_buildManifest.js",
+ "static/development/_ssgManifest.js",
+ "static/development/_clientMiddlewareManifest.js"
+ ],
+ "rootMainFiles": [],
+ "rootMainFilesTree": {},
+ "pagesChunkGroupBootstrapParams": {}
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/cache/.rscinfo b/tmp/9r-smoke-dist/dev/cache/.rscinfo
new file mode 100644
index 00000000..f90afb39
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/cache/.rscinfo
@@ -0,0 +1 @@
+{"encryption.key":"+PzC19pP70GybS3k4K8t6RsdWKuh0Yqhwm2/p8Gxynw=","encryption.expire_at":1788861894573}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/cache/config.json b/tmp/9r-smoke-dist/dev/cache/config.json
new file mode 100644
index 00000000..9d9c2ab8
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/cache/config.json
@@ -0,0 +1,7 @@
+{
+ "telemetry": {
+ "notifiedAt": "1787652294386",
+ "anonymousId": "603e54ced475f5c44789656952c172a5cb54960610abe0044c7cf55588e68b9b",
+ "salt": "2780e49a8a0d18bcf1e75adcca6c2702"
+ }
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/cache/turbopack/v16.3.1-3d32eb87/CURRENT b/tmp/9r-smoke-dist/dev/cache/turbopack/v16.3.1-3d32eb87/CURRENT
new file mode 100644
index 00000000..35260809
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/cache/turbopack/v16.3.1-3d32eb87/CURRENT
@@ -0,0 +1 @@
+{"max_sequence_number":0,"commit_time":"2026-08-25T10:04:54.578821Z"}
diff --git a/tmp/9r-smoke-dist/dev/fallback-build-manifest.json b/tmp/9r-smoke-dist/dev/fallback-build-manifest.json
new file mode 100644
index 00000000..cc102f9f
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/fallback-build-manifest.json
@@ -0,0 +1,15 @@
+{
+ "pages": {
+ "/_app": []
+ },
+ "devFiles": [],
+ "polyfillFiles": [],
+ "lowPriorityFiles": [
+ "static/development/_buildManifest.js",
+ "static/development/_ssgManifest.js",
+ "static/development/_clientMiddlewareManifest.js"
+ ],
+ "rootMainFiles": [],
+ "rootMainFilesTree": {},
+ "pagesChunkGroupBootstrapParams": {}
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/lock b/tmp/9r-smoke-dist/dev/lock
new file mode 100644
index 00000000..4830a276
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/lock
@@ -0,0 +1 @@
+{"pid":19305,"port":20199,"hostname":"localhost","appUrl":"http://localhost:20199","startedAt":1787652294484}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/logs/next-development.log b/tmp/9r-smoke-dist/dev/logs/next-development.log
new file mode 100644
index 00000000..12b23b31
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/logs/next-development.log
@@ -0,0 +1,8 @@
+{"timestamp":"00:00:00.929","source":"Server","level":"LOG","message":"- Experiments (use with caution):"}
+{"timestamp":"00:00:00.929","source":"Server","level":"LOG","message":" · optimizePackageImports"}
+{"timestamp":"00:00:00.929","source":"Server","level":"LOG","message":" · proxyClientMaxBodySize: \"128mb\""}
+{"timestamp":"00:00:00.929","source":"Server","level":"LOG","message":""}
+{"timestamp":"00:00:00.930","source":"Server","level":"LOG","message":"✓ Generated CLAUDE.md for AI agents. Set `agentRules: false` in next.config to disable."}
+{"timestamp":"00:00:00.953","source":"Server","level":"ERROR","message":"Error: write EPIPE"}
+{"timestamp":"00:00:00.954","source":"Server","level":"ERROR","message":"⨯ \"uncaughtException:\" Error: write EPIPE"}
+{"timestamp":"00:00:00.954","source":"Server","level":"ERROR","message":"⨯ \"uncaughtException: \" Error: write EPIPE"}
diff --git a/tmp/9r-smoke-dist/dev/node_modules/better-sqlite3-90e2652d1716b047 b/tmp/9r-smoke-dist/dev/node_modules/better-sqlite3-90e2652d1716b047
new file mode 120000
index 00000000..f540aaba
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/node_modules/better-sqlite3-90e2652d1716b047
@@ -0,0 +1 @@
+../../../../node_modules/better-sqlite3
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/node_modules/sql.js-59d66b30daa0a8d2 b/tmp/9r-smoke-dist/dev/node_modules/sql.js-59d66b30daa0a8d2
new file mode 120000
index 00000000..012ad2c3
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/node_modules/sql.js-59d66b30daa0a8d2
@@ -0,0 +1 @@
+../../../../node_modules/sql.js
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/package.json b/tmp/9r-smoke-dist/dev/package.json
new file mode 100644
index 00000000..c9a44226
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/prerender-manifest.json b/tmp/9r-smoke-dist/dev/prerender-manifest.json
new file mode 100644
index 00000000..f0c08c14
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/prerender-manifest.json
@@ -0,0 +1,11 @@
+{
+ "version": 4,
+ "routes": {},
+ "dynamicRoutes": {},
+ "notFoundRoutes": [],
+ "preview": {
+ "previewModeId": "ccf2fc358f0d676072b2c8a97c13bb23",
+ "previewModeSigningKey": "2d92942cd8170b1f834dbada55904274205957eacff5167dcde5bb52c19403ec",
+ "previewModeEncryptionKey": "a139b9d52f12448b1c4fe91cb68fc842bda57b8c35acb25a5a052a0e16e145fa"
+ }
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/routes-manifest.json b/tmp/9r-smoke-dist/dev/routes-manifest.json
new file mode 100644
index 00000000..a8c3822d
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/routes-manifest.json
@@ -0,0 +1 @@
+{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*","regex":"^\\/v1\\/v1(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true},{"source":"/v1/v1","destination":"/api/v1","regex":"^\\/v1\\/v1(?:\\/)?$","check":true},{"source":"/codex/:path*","destination":"/api/v1/responses","regex":"^\\/codex(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true},{"source":"/responses","destination":"/api/v1/responses","regex":"^\\/responses(?:\\/)?$","check":true},{"source":"/v1beta/:path*","destination":"/api/v1beta/:path*","regex":"^\\/v1beta(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true},{"source":"/v1beta","destination":"/api/v1beta","regex":"^\\/v1beta(?:\\/)?$","check":true},{"source":"/v1/:path*","destination":"/api/v1/:path*","regex":"^\\/v1(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true},{"source":"/v1","destination":"/api/v1","regex":"^\\/v1(?:\\/)?$","check":true}],"fallback":[]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"priority":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[],"onMatchHeaders":[]}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/app-paths-manifest.json b/tmp/9r-smoke-dist/dev/server/app-paths-manifest.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/app-paths-manifest.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js
new file mode 100644
index 00000000..b05eceea
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js
@@ -0,0 +1,8 @@
+module.exports = [
+"[externals]/bun:sqlite [external] (bun:sqlite, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("bun:sqlite", () => require("bun:sqlite"));
+
+module.exports = mod;
+}),
+];
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js.map
new file mode 100644
index 00000000..c15d7ec0
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js.map
@@ -0,0 +1,5 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": []
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js
new file mode 100644
index 00000000..36c39a9e
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js
@@ -0,0 +1,12 @@
+module.exports = [
+"[externals]/bun:sqlite [external] (bun:sqlite, cjs, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/[externals]_bun_sqlite_1aygq0y._.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[externals]/bun:sqlite [external] (bun:sqlite, cjs)");
+ });
+});
+}),
+];
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js.map
new file mode 100644
index 00000000..c15d7ec0
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js.map
@@ -0,0 +1,5 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": []
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js
new file mode 100644
index 00000000..d470da5f
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js
@@ -0,0 +1,275 @@
+module.exports = [
+"[externals]/better-sqlite3 [external] (better-sqlite3, cjs, [project]/node_modules/better-sqlite3)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("better-sqlite3-90e2652d1716b047", () => require("better-sqlite3-90e2652d1716b047"));
+
+module.exports = mod;
+}),
+"[project]/src/lib/db/adapters/betterSqliteAdapter.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createBetterSqliteAdapter",
+ ()=>createBetterSqliteAdapter
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$better$2d$sqlite3__$5b$external$5d$__$28$better$2d$sqlite3$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f$better$2d$sqlite3$29$__ = __turbopack_context__.i("[externals]/better-sqlite3 [external] (better-sqlite3, cjs, [project]/node_modules/better-sqlite3)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$schema$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/schema.js [middleware] (ecmascript)");
+;
+;
+// Periodic checkpoint to keep WAL file small (avoid huge -wal/-shm growth)
+const CHECKPOINT_INTERVAL_MS = 60 * 1000;
+function createBetterSqliteAdapter(filePath) {
+ const db = new __TURBOPACK__imported__module__$5b$externals$5d2f$better$2d$sqlite3__$5b$external$5d$__$28$better$2d$sqlite3$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f$better$2d$sqlite3$29$__["default"](filePath);
+ db.exec(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$schema$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRAGMA_SQL"]);
+ // Schema is created/synced by migrate.js after adapter init
+ const stmtCache = new Map();
+ function prepare(sql) {
+ let stmt = stmtCache.get(sql);
+ if (!stmt) {
+ stmt = db.prepare(sql);
+ stmtCache.set(sql, stmt);
+ }
+ return stmt;
+ }
+ // Truncate WAL periodically so file stays small for backup/copy
+ const checkpointTimer = setInterval(()=>{
+ try {
+ db.pragma("wal_checkpoint(TRUNCATE)");
+ } catch {}
+ }, CHECKPOINT_INTERVAL_MS);
+ if (typeof checkpointTimer.unref === "function") checkpointTimer.unref();
+ function gracefulClose() {
+ try {
+ db.pragma("wal_checkpoint(TRUNCATE)");
+ } catch {}
+ try {
+ stmtCache.clear();
+ } catch {}
+ try {
+ db.close();
+ } catch {}
+ }
+ // Ensure WAL is flushed and -wal/-shm files removed on shutdown
+ const onShutdown = ()=>gracefulClose();
+ process.once("beforeExit", onShutdown);
+ process.once("SIGINT", ()=>{
+ onShutdown();
+ process.exit(0);
+ });
+ process.once("SIGTERM", ()=>{
+ onShutdown();
+ process.exit(0);
+ });
+ return {
+ driver: "better-sqlite3",
+ run (sql, params = []) {
+ return prepare(sql).run(...params);
+ },
+ get (sql, params = []) {
+ return prepare(sql).get(...params);
+ },
+ all (sql, params = []) {
+ return prepare(sql).all(...params);
+ },
+ exec (sql) {
+ return db.exec(sql);
+ },
+ transaction (fn) {
+ return db.transaction(fn)();
+ },
+ checkpoint () {
+ try {
+ db.pragma("wal_checkpoint(TRUNCATE)");
+ } catch {}
+ },
+ close () {
+ clearInterval(checkpointTimer);
+ gracefulClose();
+ },
+ raw: db
+ };
+}
+}),
+"[project]/src/lib/db/schema.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// ⚠️ AGENT/DEV: Bump this by +1 EVERY TIME you change the schema below
+// (add/remove/alter a table, column, or index in TABLES). It drives the
+// pre-change safety backup in migrate.js: when the stored version is lower,
+// one lightweight DB backup is taken before applying schema changes. Forgetting
+// to bump only skips that backup — it does NOT break the additive auto-sync.
+__turbopack_context__.s([
+ "PRAGMA_SQL",
+ ()=>PRAGMA_SQL,
+ "SCHEMA_VERSION",
+ ()=>SCHEMA_VERSION,
+ "TABLES",
+ ()=>TABLES,
+ "buildCreateTableSql",
+ ()=>buildCreateTableSql
+]);
+const SCHEMA_VERSION = 3;
+const PRAGMA_SQL = `
+PRAGMA journal_mode = WAL;
+PRAGMA synchronous = NORMAL;
+PRAGMA temp_store = MEMORY;
+PRAGMA mmap_size = 30000000;
+PRAGMA cache_size = -64000;
+PRAGMA foreign_keys = ON;
+PRAGMA busy_timeout = 5000;
+`;
+const TABLES = {
+ _meta: {
+ columns: {
+ key: "TEXT PRIMARY KEY",
+ value: "TEXT NOT NULL"
+ }
+ },
+ settings: {
+ columns: {
+ id: "INTEGER PRIMARY KEY CHECK (id = 1)",
+ data: "TEXT NOT NULL"
+ }
+ },
+ providerConnections: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ provider: "TEXT NOT NULL",
+ authType: "TEXT NOT NULL",
+ name: "TEXT",
+ email: "TEXT",
+ priority: "INTEGER",
+ isActive: "INTEGER DEFAULT 1",
+ data: "TEXT NOT NULL",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)",
+ "CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)",
+ "CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"
+ ]
+ },
+ providerNodes: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ type: "TEXT",
+ name: "TEXT",
+ data: "TEXT NOT NULL",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"
+ ]
+ },
+ proxyPools: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ isActive: "INTEGER DEFAULT 1",
+ testStatus: "TEXT",
+ data: "TEXT NOT NULL",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)",
+ "CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"
+ ]
+ },
+ apiKeys: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ key: "TEXT UNIQUE NOT NULL",
+ name: "TEXT",
+ machineId: "TEXT",
+ isActive: "INTEGER DEFAULT 1",
+ allowedModels: "TEXT"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"
+ ]
+ },
+ combos: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ name: "TEXT UNIQUE NOT NULL",
+ kind: "TEXT",
+ models: "TEXT NOT NULL",
+ enabled: "INTEGER NOT NULL DEFAULT 1",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"
+ ]
+ },
+ kv: {
+ columns: {
+ scope: "TEXT NOT NULL",
+ key: "TEXT NOT NULL",
+ value: "TEXT NOT NULL"
+ },
+ primaryKey: "PRIMARY KEY (scope, key)",
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"
+ ]
+ },
+ usageHistory: {
+ columns: {
+ id: "INTEGER PRIMARY KEY AUTOINCREMENT",
+ timestamp: "TEXT NOT NULL",
+ provider: "TEXT",
+ model: "TEXT",
+ connectionId: "TEXT",
+ apiKey: "TEXT",
+ endpoint: "TEXT",
+ promptTokens: "INTEGER DEFAULT 0",
+ completionTokens: "INTEGER DEFAULT 0",
+ cost: "REAL DEFAULT 0",
+ status: "TEXT",
+ tokens: "TEXT",
+ meta: "TEXT"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)",
+ "CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)",
+ "CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)",
+ "CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)"
+ ]
+ },
+ usageDaily: {
+ columns: {
+ dateKey: "TEXT PRIMARY KEY",
+ data: "TEXT NOT NULL"
+ }
+ },
+ requestDetails: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ timestamp: "TEXT NOT NULL",
+ provider: "TEXT",
+ model: "TEXT",
+ connectionId: "TEXT",
+ status: "TEXT",
+ apiKey: "TEXT",
+ data: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_apikey ON requestDetails(apiKey)"
+ ]
+ }
+};
+function buildCreateTableSql(name, def) {
+ const cols = Object.entries(def.columns).map(([k, v])=>`${k} ${v}`);
+ if (def.primaryKey) cols.push(def.primaryKey);
+ return `CREATE TABLE IF NOT EXISTS ${name} (${cols.join(", ")})`;
+}
+}),
+];
+
+//# sourceMappingURL=%5Broot-of-the-server%5D__16a8kp1._.js.map
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js.map
new file mode 100644
index 00000000..57a1a648
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": [
+ {"offset": {"line": 10, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/adapters/betterSqliteAdapter.js"],"sourcesContent":["import Database from \"better-sqlite3\";\nimport { PRAGMA_SQL } from \"../schema.js\";\n\n// Periodic checkpoint to keep WAL file small (avoid huge -wal/-shm growth)\nconst CHECKPOINT_INTERVAL_MS = 60 * 1000;\n\nexport function createBetterSqliteAdapter(filePath) {\n const db = new Database(filePath);\n db.exec(PRAGMA_SQL);\n // Schema is created/synced by migrate.js after adapter init\n\n const stmtCache = new Map();\n\n function prepare(sql) {\n let stmt = stmtCache.get(sql);\n if (!stmt) {\n stmt = db.prepare(sql);\n stmtCache.set(sql, stmt);\n }\n return stmt;\n }\n\n // Truncate WAL periodically so file stays small for backup/copy\n const checkpointTimer = setInterval(() => {\n try { db.pragma(\"wal_checkpoint(TRUNCATE)\"); } catch {}\n }, CHECKPOINT_INTERVAL_MS);\n if (typeof checkpointTimer.unref === \"function\") checkpointTimer.unref();\n\n function gracefulClose() {\n try { db.pragma(\"wal_checkpoint(TRUNCATE)\"); } catch {}\n try { stmtCache.clear(); } catch {}\n try { db.close(); } catch {}\n }\n\n // Ensure WAL is flushed and -wal/-shm files removed on shutdown\n const onShutdown = () => gracefulClose();\n process.once(\"beforeExit\", onShutdown);\n process.once(\"SIGINT\", () => { onShutdown(); process.exit(0); });\n process.once(\"SIGTERM\", () => { onShutdown(); process.exit(0); });\n\n return {\n driver: \"better-sqlite3\",\n run(sql, params = []) { return prepare(sql).run(...params); },\n get(sql, params = []) { return prepare(sql).get(...params); },\n all(sql, params = []) { return prepare(sql).all(...params); },\n exec(sql) { return db.exec(sql); },\n transaction(fn) { return db.transaction(fn)(); },\n checkpoint() { try { db.pragma(\"wal_checkpoint(TRUNCATE)\"); } catch {} },\n close() {\n clearInterval(checkpointTimer);\n gracefulClose();\n },\n raw: db,\n };\n}\n"],"names":["CHECKPOINT_INTERVAL_MS","createBetterSqliteAdapter","filePath","db","exec","stmtCache","Map","prepare","sql","stmt","get","set","checkpointTimer","setInterval","pragma","unref","gracefulClose","clear","close","onShutdown","process","once","exit","driver","run","params","all","transaction","fn","checkpoint","clearInterval","raw"],"mappings":";;;;AAAA;AACA;;;AAEA,2EAA2E;AAC3E,MAAMA,yBAAyB,KAAK;AAE7B,SAASC,0BAA0BC,QAAQ;IAChD,MAAMC,KAAK,IAAI,8LAAQ,CAACD;IACxBC,GAAGC,IAAI,CAAC,wIAAU;IAClB,4DAA4D;IAE5D,MAAMC,YAAY,IAAIC;IAEtB,SAASC,QAAQC,GAAG;QAClB,IAAIC,OAAOJ,UAAUK,GAAG,CAACF;QACzB,IAAI,CAACC,MAAM;YACTA,OAAON,GAAGI,OAAO,CAACC;YAClBH,UAAUM,GAAG,CAACH,KAAKC;QACrB;QACA,OAAOA;IACT;IAEA,gEAAgE;IAChE,MAAMG,kBAAkBC,YAAY;QAClC,IAAI;YAAEV,GAAGW,MAAM,CAAC;QAA6B,EAAE,OAAM,CAAC;IACxD,GAAGd;IACH,IAAI,OAAOY,gBAAgBG,KAAK,KAAK,YAAYH,gBAAgBG,KAAK;IAEtE,SAASC;QACP,IAAI;YAAEb,GAAGW,MAAM,CAAC;QAA6B,EAAE,OAAM,CAAC;QACtD,IAAI;YAAET,UAAUY,KAAK;QAAI,EAAE,OAAM,CAAC;QAClC,IAAI;YAAEd,GAAGe,KAAK;QAAI,EAAE,OAAM,CAAC;IAC7B;IAEA,gEAAgE;IAChE,MAAMC,aAAa,IAAMH;IACzBI,QAAQC,IAAI,CAAC,cAAcF;IAC3BC,QAAQC,IAAI,CAAC,UAAU;QAAQF;QAAcC,QAAQE,IAAI,CAAC;IAAI;IAC9DF,QAAQC,IAAI,CAAC,WAAW;QAAQF;QAAcC,QAAQE,IAAI,CAAC;IAAI;IAE/D,OAAO;QACLC,QAAQ;QACRC,KAAIhB,GAAG,EAAEiB,SAAS,EAAE;YAAI,OAAOlB,QAAQC,KAAKgB,GAAG,IAAIC;QAAS;QAC5Df,KAAIF,GAAG,EAAEiB,SAAS,EAAE;YAAI,OAAOlB,QAAQC,KAAKE,GAAG,IAAIe;QAAS;QAC5DC,KAAIlB,GAAG,EAAEiB,SAAS,EAAE;YAAI,OAAOlB,QAAQC,KAAKkB,GAAG,IAAID;QAAS;QAC5DrB,MAAKI,GAAG;YAAI,OAAOL,GAAGC,IAAI,CAACI;QAAM;QACjCmB,aAAYC,EAAE;YAAI,OAAOzB,GAAGwB,WAAW,CAACC;QAAO;QAC/CC;YAAe,IAAI;gBAAE1B,GAAGW,MAAM,CAAC;YAA6B,EAAE,OAAM,CAAC;QAAE;QACvEI;YACEY,cAAclB;YACdI;QACF;QACAe,KAAK5B;IACP;AACF"}},
+ {"offset": {"line": 95, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/schema.js"],"sourcesContent":["// ⚠️ AGENT/DEV: Bump this by +1 EVERY TIME you change the schema below\n// (add/remove/alter a table, column, or index in TABLES). It drives the\n// pre-change safety backup in migrate.js: when the stored version is lower,\n// one lightweight DB backup is taken before applying schema changes. Forgetting\n// to bump only skips that backup — it does NOT break the additive auto-sync.\nexport const SCHEMA_VERSION = 3;\n\nexport const PRAGMA_SQL = `\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA temp_store = MEMORY;\nPRAGMA mmap_size = 30000000;\nPRAGMA cache_size = -64000;\nPRAGMA foreign_keys = ON;\nPRAGMA busy_timeout = 5000;\n`;\n\n// Declarative current schema. Used by syncSchemaFromTables() to\n// auto-add missing tables/columns/indexes after versioned migrations.\n// For destructive changes (drop/rename/type-change), write a migration file.\nexport const TABLES = {\n\t_meta: {\n\t\tcolumns: {\n\t\t\tkey: \"TEXT PRIMARY KEY\",\n\t\t\tvalue: \"TEXT NOT NULL\",\n\t\t},\n\t},\n\tsettings: {\n\t\tcolumns: {\n\t\t\tid: \"INTEGER PRIMARY KEY CHECK (id = 1)\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t},\n\t},\n\tproviderConnections: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tprovider: \"TEXT NOT NULL\",\n\t\t\tauthType: \"TEXT NOT NULL\",\n\t\t\tname: \"TEXT\",\n\t\t\temail: \"TEXT\",\n\t\t\tpriority: \"INTEGER\",\n\t\t\tisActive: \"INTEGER DEFAULT 1\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)\",\n\t\t],\n\t},\n\tproviderNodes: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\ttype: \"TEXT\",\n\t\t\tname: \"TEXT\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)\"],\n\t},\n\tproxyPools: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tisActive: \"INTEGER DEFAULT 1\",\n\t\t\ttestStatus: \"TEXT\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)\",\n\t\t],\n\t},\n\tapiKeys: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tkey: \"TEXT UNIQUE NOT NULL\",\n\t\t\tname: \"TEXT\",\n\t\t\tmachineId: \"TEXT\",\n\t\t\tisActive: \"INTEGER DEFAULT 1\",\n\t\t\tallowedModels: \"TEXT\",\n\t\t},\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)\"],\n\t},\n\tcombos: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tname: \"TEXT UNIQUE NOT NULL\",\n\t\t\tkind: \"TEXT\",\n\t\t\tmodels: \"TEXT NOT NULL\",\n\t\t\tenabled: \"INTEGER NOT NULL DEFAULT 1\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)\"],\n\t},\n\tkv: {\n\t\tcolumns: {\n\t\t\tscope: \"TEXT NOT NULL\",\n\t\t\tkey: \"TEXT NOT NULL\",\n\t\t\tvalue: \"TEXT NOT NULL\",\n\t\t},\n\t\tprimaryKey: \"PRIMARY KEY (scope, key)\",\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)\"],\n\t},\n\tusageHistory: {\n\t\tcolumns: {\n\t\t\tid: \"INTEGER PRIMARY KEY AUTOINCREMENT\",\n\t\t\ttimestamp: \"TEXT NOT NULL\",\n\t\t\tprovider: \"TEXT\",\n\t\t\tmodel: \"TEXT\",\n\t\t\tconnectionId: \"TEXT\",\n\t\t\tapiKey: \"TEXT\",\n\t\t\tendpoint: \"TEXT\",\n\t\t\tpromptTokens: \"INTEGER DEFAULT 0\",\n\t\t\tcompletionTokens: \"INTEGER DEFAULT 0\",\n\t\t\tcost: \"REAL DEFAULT 0\",\n\t\t\tstatus: \"TEXT\",\n\t\t\ttokens: \"TEXT\",\n\t\t\tmeta: \"TEXT\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)\",\n\t\t],\n\t},\n\tusageDaily: {\n\t\tcolumns: {\n\t\t\tdateKey: \"TEXT PRIMARY KEY\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t},\n\t},\n\trequestDetails: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\ttimestamp: \"TEXT NOT NULL\",\n\t\t\tprovider: \"TEXT\",\n\t\t\tmodel: \"TEXT\",\n\t\t\tconnectionId: \"TEXT\",\n\t\t\tstatus: \"TEXT\",\n\t\t\tapiKey: \"TEXT\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_apikey ON requestDetails(apiKey)\",\n\t\t],\n\t},\n};\n\nexport function buildCreateTableSql(name, def) {\n\tconst cols = Object.entries(def.columns).map(([k, v]) => `${k} ${v}`);\n\tif (def.primaryKey) cols.push(def.primaryKey);\n\treturn `CREATE TABLE IF NOT EXISTS ${name} (${cols.join(\", \")})`;\n}\n"],"names":["SCHEMA_VERSION","PRAGMA_SQL","TABLES","_meta","columns","key","value","settings","id","data","providerConnections","provider","authType","name","email","priority","isActive","createdAt","updatedAt","indexes","providerNodes","type","proxyPools","testStatus","apiKeys","machineId","allowedModels","combos","kind","models","enabled","kv","scope","primaryKey","usageHistory","timestamp","model","connectionId","apiKey","endpoint","promptTokens","completionTokens","cost","status","tokens","meta","usageDaily","dateKey","requestDetails","buildCreateTableSql","def","cols","Object","entries","map","k","v","push","join"],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;;;;;;;;;;;AACtE,MAAMA,iBAAiB;AAEvB,MAAMC,aAAa,CAAC;;;;;;;;AAQ3B,CAAC;AAKM,MAAMC,SAAS;IACrBC,OAAO;QACNC,SAAS;YACRC,KAAK;YACLC,OAAO;QACR;IACD;IACAC,UAAU;QACTH,SAAS;YACRI,IAAI;YACJC,MAAM;QACP;IACD;IACAC,qBAAqB;QACpBN,SAAS;YACRI,IAAI;YACJG,UAAU;YACVC,UAAU;YACVC,MAAM;YACNC,OAAO;YACPC,UAAU;YACVC,UAAU;YACVP,MAAM;YACNQ,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YACR;YACA;YACA;SACA;IACF;IACAC,eAAe;QACdhB,SAAS;YACRI,IAAI;YACJa,MAAM;YACNR,MAAM;YACNJ,MAAM;YACNQ,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YAAC;SAAgE;IAC3E;IACAG,YAAY;QACXlB,SAAS;YACRI,IAAI;YACJQ,UAAU;YACVO,YAAY;YACZd,MAAM;YACNQ,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YACR;YACA;SACA;IACF;IACAK,SAAS;QACRpB,SAAS;YACRI,IAAI;YACJH,KAAK;YACLQ,MAAM;YACNY,WAAW;YACXT,UAAU;YACVU,eAAe;QAChB;QACAP,SAAS;YAAC;SAAwD;IACnE;IACAQ,QAAQ;QACPvB,SAAS;YACRI,IAAI;YACJK,MAAM;YACNe,MAAM;YACNC,QAAQ;YACRC,SAAS;YACTb,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YAAC;SAA4D;IACvE;IACAY,IAAI;QACH3B,SAAS;YACR4B,OAAO;YACP3B,KAAK;YACLC,OAAO;QACR;QACA2B,YAAY;QACZd,SAAS;YAAC;SAAuD;IAClE;IACAe,cAAc;QACb9B,SAAS;YACRI,IAAI;YACJ2B,WAAW;YACXxB,UAAU;YACVyB,OAAO;YACPC,cAAc;YACdC,QAAQ;YACRC,UAAU;YACVC,cAAc;YACdC,kBAAkB;YAClBC,MAAM;YACNC,QAAQ;YACRC,QAAQ;YACRC,MAAM;QACP;QACA1B,SAAS;YACR;YACA;YACA;YACA;SACA;IACF;IACA2B,YAAY;QACX1C,SAAS;YACR2C,SAAS;YACTtC,MAAM;QACP;IACD;IACAuC,gBAAgB;QACf5C,SAAS;YACRI,IAAI;YACJ2B,WAAW;YACXxB,UAAU;YACVyB,OAAO;YACPC,cAAc;YACdM,QAAQ;YACRL,QAAQ;YACR7B,MAAM;QACP;QACAU,SAAS;YACR;YACA;YACA;YACA;YACA;SACA;IACF;AACD;AAEO,SAAS8B,oBAAoBpC,IAAI,EAAEqC,GAAG;IAC5C,MAAMC,OAAOC,OAAOC,OAAO,CAACH,IAAI9C,OAAO,EAAEkD,GAAG,CAAC,CAAC,CAACC,GAAGC,EAAE,GAAK,GAAGD,EAAE,CAAC,EAAEC,GAAG;IACpE,IAAIN,IAAIjB,UAAU,EAAEkB,KAAKM,IAAI,CAACP,IAAIjB,UAAU;IAC5C,OAAO,CAAC,2BAA2B,EAAEpB,KAAK,EAAE,EAAEsC,KAAKO,IAAI,CAAC,MAAM,CAAC,CAAC;AACjE"}}]
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js
new file mode 100644
index 00000000..f288fe51
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js
@@ -0,0 +1,3778 @@
+module.exports = [
+"[externals]/child_process [external] (child_process, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("child_process", () => require("child_process"));
+
+module.exports = mod;
+}),
+"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("crypto", () => require("crypto"));
+
+module.exports = mod;
+}),
+"[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("events", () => require("events"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/build/adapter/setup-node-env.external.js [external] (next/dist/build/adapter/setup-node-env.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/build/adapter/setup-node-env.external.js", () => require("next/dist/build/adapter/setup-node-env.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/app-render/action-async-storage.external.js [external] (next/dist/server/app-render/action-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/app-render/action-async-storage.external.js", () => require("next/dist/server/app-render/action-async-storage.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/lib/incremental-cache/memory-cache.external.js [external] (next/dist/server/lib/incremental-cache/memory-cache.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/lib/incremental-cache/memory-cache.external.js", () => require("next/dist/server/lib/incremental-cache/memory-cache.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js [external] (next/dist/server/lib/incremental-cache/shared-cache-controls.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/lib/incremental-cache/shared-cache-controls.external.js", () => require("next/dist/server/lib/incremental-cache/shared-cache-controls.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/lib/incremental-cache/tags-manifest.external.js [external] (next/dist/server/lib/incremental-cache/tags-manifest.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/lib/incremental-cache/tags-manifest.external.js", () => require("next/dist/server/lib/incremental-cache/tags-manifest.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/lib/router-utils/instrumentation-globals.external.js [external] (next/dist/server/lib/router-utils/instrumentation-globals.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/lib/router-utils/instrumentation-globals.external.js", () => require("next/dist/server/lib/router-utils/instrumentation-globals.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("next/dist/server/runtime-reacts.external.js", () => require("next/dist/server/runtime-reacts.external.js"));
+
+module.exports = mod;
+}),
+"[externals]/node:async_hooks [external] (node:async_hooks, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("node:async_hooks", () => require("node:async_hooks"));
+
+module.exports = mod;
+}),
+"[externals]/node:crypto [external] (node:crypto, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("node:crypto", () => require("node:crypto"));
+
+module.exports = mod;
+}),
+"[externals]/node:fs [external] (node:fs, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("node:fs", () => require("node:fs"));
+
+module.exports = mod;
+}),
+"[externals]/node:path [external] (node:path, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("node:path", () => require("node:path"));
+
+module.exports = mod;
+}),
+"[externals]/node:stream [external] (node:stream, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("node:stream", () => require("node:stream"));
+
+module.exports = mod;
+}),
+"[externals]/os [external] (os, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("os", () => require("os"));
+
+module.exports = mod;
+}),
+"[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("path", () => require("path"));
+
+module.exports = mod;
+}),
+"[project]/src/dashboardGuard.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "__test__",
+ ()=>__test__,
+ "isLocalRequest",
+ ()=>isLocalRequest,
+ "proxy",
+ ()=>proxy
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/server.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$localDb$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/lib/localDb.js [middleware] (ecmascript)
");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$settingsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$apiKeysRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/apiKeysRepo.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$utils$2f$machineId$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/shared/utils/machineId.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$dashboardSession$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/auth/dashboardSession.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$trustedPeer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/auth/trustedPeer.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+const CLI_TOKEN_HEADER = "x-9r-cli-token";
+const CLI_TOKEN_SALT = "9r-cli-auth";
+let cachedCliToken = null;
+async function getCliToken() {
+ if (!cachedCliToken) cachedCliToken = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$utils$2f$machineId$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getConsistentMachineId"])(CLI_TOKEN_SALT);
+ return cachedCliToken;
+}
+async function hasValidCliToken(request) {
+ const token = request.headers.get(CLI_TOKEN_HEADER);
+ if (!token) return false;
+ return token === await getCliToken();
+}
+// Public API paths — no auth required (LLM API has its own key auth inside handler).
+const PUBLIC_API_PATHS = [
+ "/api/health",
+ "/api/init",
+ "/api/locale",
+ "/api/auth/login",
+ "/api/auth/logout",
+ "/api/auth/status",
+ "/api/auth/oidc",
+ "/api/auth/saml",
+ "/api/version",
+ "/api/settings/require-login"
+];
+// Public top-level prefixes (LLM API endpoints with their own API key auth).
+const PUBLIC_PREFIXES = [
+ "/v1",
+ "/v1beta",
+ "/api/v1",
+ "/api/v1beta",
+ "/codex"
+];
+// Always require JWT token regardless of requireLogin setting
+const ALWAYS_PROTECTED = [
+ "/api/shutdown",
+ "/api/settings/database",
+ "/api/version/shutdown",
+ "/api/version/update",
+ "/api/oauth/cursor/auto-import",
+ "/api/oauth/kiro/auto-import"
+];
+// Require auth, but allow through if requireLogin is disabled
+const PROTECTED_API_PATHS = [
+ "/api/settings",
+ "/api/keys",
+ "/api/providers",
+ "/api/provider-nodes",
+ "/api/proxy-pools",
+ "/api/combos",
+ "/api/models",
+ "/api/usage",
+ "/api/oauth",
+ "/api/cloud",
+ "/api/media-providers",
+ "/api/pricing",
+ "/api/tags",
+ "/api/cli-tools",
+ "/api/mcp",
+ "/api/translator",
+ "/api/tunnel"
+];
+// Routes that spawn child processes or read host secrets — restrict to localhost.
+const LOCAL_ONLY_PATHS = [
+ "/api/cli-tools/cowork-settings",
+ "/api/cli-tools/antigravity-mitm",
+ "/api/mcp/",
+ "/api/tunnel/tailscale-install",
+ "/api/tunnel/tailscale-enable",
+ "/api/tunnel/tailscale-disable",
+ "/api/tunnel/tailscale-check",
+ "/api/tunnel/enable",
+ "/api/tunnel/disable",
+ "/api/oauth/cursor/auto-import",
+ "/api/oauth/kiro/auto-import",
+ "/api/auth/reset-password",
+ "/api/headroom/start",
+ "/api/headroom/stop",
+ "/api/headroom/proxy"
+];
+const LOOPBACK_HOSTS = new Set([
+ "localhost",
+ "127.0.0.1",
+ "::1"
+]);
+// Accepts a Host header, a URL hostname or a raw socket address. Splitting on the first
+// colon only works for IPv4 and would reduce every IPv6 form to "", so a dual-stack
+// listener handing back ::ffff:127.0.0.1 would not read as loopback.
+function isLoopbackHostname(h) {
+ if (!h) return false;
+ let name = String(h).trim().toLowerCase();
+ if (name.startsWith("[")) {
+ const end = name.indexOf("]");
+ if (end === -1) return false;
+ name = name.slice(1, end);
+ } else if (name.indexOf(":") !== -1 && name.indexOf(":") === name.lastIndexOf(":")) {
+ name = name.slice(0, name.indexOf(":"));
+ }
+ if (name.startsWith("::ffff:")) name = name.slice(7);
+ return LOOPBACK_HOSTS.has(name);
+}
+function isLoopbackPeer(request) {
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$trustedPeer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["hasTrustedPeerHeaders"])(request)) {
+ return isLoopbackHostname(request.headers.get("x-9r-real-ip"));
+ }
+ // Bare `next dev` forks its server, so the wrapper never loads and no peer address
+ // reaches us. Host is spoofable, so this stays confined to development.
+ if ("TURBOPACK compile-time truthy", 1) {
+ return isLoopbackHostname(request.headers.get("host"));
+ }
+ //TURBOPACK unreachable
+ ;
+}
+function isLocalRequest(request) {
+ // Stamped by custom-server.js when forwarding headers exist: request came through
+ // a reverse proxy, so the loopback socket is the proxy hop, not the end-user.
+ if (request.headers.get("x-9r-via-proxy")) return false;
+ if (!isLoopbackPeer(request)) return false;
+ const origin = request.headers.get("origin");
+ if (origin) {
+ try {
+ if (!isLoopbackHostname(new URL(origin).hostname)) return false;
+ } catch {
+ return false;
+ }
+ }
+ return true;
+}
+function isPublicLlmApi(pathname) {
+ return PUBLIC_PREFIXES.some((p)=>pathname === p || pathname.startsWith(`${p}/`));
+}
+function extractApiKey(request) {
+ const authHeader = request.headers.get("Authorization");
+ if (authHeader?.startsWith("Bearer ")) return authHeader.slice(7);
+ const apiKeyHeader = request.headers.get("x-api-key");
+ if (apiKeyHeader) return apiKeyHeader;
+ const googleApiKeyHeader = request.headers.get("x-goog-api-key");
+ if (googleApiKeyHeader) return googleApiKeyHeader;
+ return request.nextUrl.searchParams?.get("key") || null;
+}
+async function hasValidApiKey(request) {
+ const apiKey = extractApiKey(request);
+ if (!apiKey) return false;
+ return await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$apiKeysRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["validateApiKey"])(apiKey);
+}
+async function canAccessPublicLlmApi(request) {
+ if (isLocalRequest(request)) return true;
+ if (await hasValidCliToken(request)) return true;
+ return await hasValidApiKey(request);
+}
+async function canAccessLocalOnlyRoute(request) {
+ if (await hasValidCliToken(request)) return true;
+ // Browser on host: loopback Host + Origin (blocks tunnel/CSRF) + auth (JWT or requireLogin=false)
+ if (isLocalRequest(request) && await isAuthenticated(request)) return true;
+ return false;
+}
+async function hasValidToken(request) {
+ const token = request.cookies.get("auth_token")?.value;
+ return await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$dashboardSession$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["verifyDashboardAuthToken"])(token);
+}
+// Read settings directly from DB to avoid self-fetch deadlock in proxy
+async function loadSettings() {
+ try {
+ return await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$settingsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getSettings"])();
+ } catch {
+ return null;
+ }
+}
+async function isAuthenticated(request) {
+ if (await hasValidToken(request)) return true;
+ const settings = await loadSettings();
+ if (settings && settings.requireLogin === false) return true;
+ return false;
+}
+function isPublicApi(pathname) {
+ if (isPublicLlmApi(pathname)) return true;
+ return PUBLIC_API_PATHS.some((p)=>pathname === p || pathname.startsWith(`${p}/`));
+}
+const __test__ = {
+ isLocalRequest,
+ isPublicLlmApi,
+ extractApiKey,
+ canAccessPublicLlmApi,
+ canAccessLocalOnlyRoute
+};
+async function proxy(request) {
+ const { pathname } = request.nextUrl;
+ // Local-only gate for spawn-capable / host-secret routes.
+ if (LOCAL_ONLY_PATHS.some((p)=>pathname.startsWith(p))) {
+ if (!await canAccessLocalOnlyRoute(request)) {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].json({
+ error: "Local only: CLI token required"
+ }, {
+ status: 403
+ });
+ }
+ }
+ // Always protected - require valid JWT or local CLI token (machineId-based)
+ if (ALWAYS_PROTECTED.some((p)=>pathname.startsWith(p))) {
+ if (await hasValidCliToken(request) || await hasValidToken(request)) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].json({
+ error: "Unauthorized"
+ }, {
+ status: 401
+ });
+ }
+ if (isPublicLlmApi(pathname)) {
+ if (await canAccessPublicLlmApi(request)) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].json({
+ error: "API key required for remote API access"
+ }, {
+ status: 401
+ });
+ }
+ // Deny-by-default for /api/* — public allow-list bypasses, everything else requires auth.
+ if (pathname.startsWith("/api/")) {
+ if (isPublicApi(pathname)) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+ if (await hasValidCliToken(request) || await isAuthenticated(request)) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].json({
+ error: "Unauthorized"
+ }, {
+ status: 401
+ });
+ }
+ // Protect all dashboard routes
+ if (pathname.startsWith("/dashboard")) {
+ let requireLogin = true;
+ let tunnelDashboardAccess = true;
+ try {
+ const settings = await loadSettings();
+ if (settings) {
+ requireLogin = settings.requireLogin !== false;
+ tunnelDashboardAccess = settings.tunnelDashboardAccess === true;
+ // Block tunnel/tailscale access if disabled (redirect to login)
+ if (!tunnelDashboardAccess) {
+ const host = (request.headers.get("host") || "").split(":")[0].toLowerCase();
+ const tunnelHost = settings.tunnelUrl ? new URL(settings.tunnelUrl).hostname.toLowerCase() : "";
+ const tailscaleHost = settings.tailscaleUrl ? new URL(settings.tailscaleUrl).hostname.toLowerCase() : "";
+ if (tunnelHost && host === tunnelHost || tailscaleHost && host === tailscaleHost) {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].redirect(new URL("/login", request.url));
+ }
+ }
+ }
+ } catch {
+ // On error, keep defaults (require login, block tunnel)
+ }
+ // If login not required, allow through
+ if (!requireLogin) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+ // Verify JWT token
+ const token = request.cookies.get("auth_token")?.value;
+ if (token) {
+ if (await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$dashboardSession$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["verifyDashboardAuthToken"])(token)) {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+ } else {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].redirect(new URL("/login", request.url));
+ }
+ }
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].redirect(new URL("/login", request.url));
+ }
+ // Redirect / to /dashboard if logged in, or /dashboard if it's the root
+ if (pathname === "/") {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].redirect(new URL("/dashboard", request.url));
+ }
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next();
+}
+}),
+"[project]/src/lib/auth/dashboardSession.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "clearDashboardAuthCookie",
+ ()=>clearDashboardAuthCookie,
+ "createDashboardAuthToken",
+ ()=>createDashboardAuthToken,
+ "getDashboardAuthSession",
+ ()=>getDashboardAuthSession,
+ "setDashboardAuthCookie",
+ ()=>setDashboardAuthCookie,
+ "shouldUseSecureCookie",
+ ()=>shouldUseSecureCookie,
+ "verifyDashboardAuthToken",
+ ()=>verifyDashboardAuthToken,
+ "verifyDashboardPassword",
+ ()=>verifyDashboardPassword
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jwt$2f$sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/jwt/sign.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jwt$2f$verify$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/jwt/verify.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/bcryptjs/index.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:fs [external] (node:fs, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:path [external] (node:path, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$crypto__$5b$external$5d$__$28$node$3a$crypto$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:crypto [external] (node:crypto, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/dataDir.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$localDb$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/lib/localDb.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$settingsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+const DEFAULT_PASSWORD = "123456";
+function loadJwtSecret() {
+ if (process.env.JWT_SECRET) return process.env.JWT_SECRET;
+ const file = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], "jwt-secret");
+ try {
+ return __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].readFileSync(file, "utf8").trim();
+ } catch {}
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].mkdirSync(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], {
+ recursive: true
+ });
+ const generated = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$crypto__$5b$external$5d$__$28$node$3a$crypto$2c$__cjs$29$__["default"].randomBytes(32).toString("hex");
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].writeFileSync(file, generated, {
+ mode: 0o600
+ });
+ return generated;
+}
+const SECRET = new TextEncoder().encode(loadJwtSecret());
+function shouldUseSecureCookie(request) {
+ const forceSecureCookie = process.env.AUTH_COOKIE_SECURE === "true";
+ const forwardedProto = request?.headers?.get?.("x-forwarded-proto");
+ const isHttpsRequest = forwardedProto === "https";
+ return forceSecureCookie || isHttpsRequest;
+}
+async function createDashboardAuthToken(claims = {}) {
+ return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jwt$2f$sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["SignJWT"]({
+ authenticated: true,
+ ...claims
+ }).setProtectedHeader({
+ alg: "HS256"
+ }).setIssuedAt().setExpirationTime("24h").sign(SECRET);
+}
+async function verifyDashboardAuthToken(token) {
+ if (!token) return false;
+ try {
+ await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jwt$2f$verify$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["jwtVerify"])(token, SECRET);
+ return true;
+ } catch {
+ return false;
+ }
+}
+async function getDashboardAuthSession(token) {
+ if (!token) return null;
+ try {
+ const { payload } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jwt$2f$verify$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["jwtVerify"])(token, SECRET);
+ return payload;
+ } catch {
+ return null;
+ }
+}
+async function setDashboardAuthCookie(cookieStore, request, claims = {}) {
+ const token = await createDashboardAuthToken(claims);
+ cookieStore.set("auth_token", token, {
+ httpOnly: true,
+ secure: shouldUseSecureCookie(request),
+ sameSite: "lax",
+ path: "/"
+ });
+}
+function clearDashboardAuthCookie(cookieStore) {
+ cookieStore.delete("auth_token");
+}
+async function verifyDashboardPassword(password) {
+ if (typeof password !== "string" || !password) return false;
+ const settings = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$settingsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getSettings"])();
+ const storedHash = settings?.password;
+ if (storedHash) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].compare(password, storedHash);
+ const initialPassword = process.env.INITIAL_PASSWORD || DEFAULT_PASSWORD;
+ return password === initialPassword;
+}
+}),
+"[project]/src/lib/auth/trustedPeer.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// x-9r-real-ip is only trustworthy when custom-server.js stamped it from the TCP socket.
+// It proves that by echoing the per-process secret it generated at boot, which a client
+// cannot guess. Without the proof the header is just attacker-supplied input.
+__turbopack_context__.s([
+ "hasTrustedPeerHeaders",
+ ()=>hasTrustedPeerHeaders
+]);
+function hasTrustedPeerHeaders(request) {
+ const token = process.env.NINEROUTER_PEER_TOKEN;
+ return Boolean(token) && request.headers.get("x-9r-peer-token") === token;
+}
+}),
+"[project]/src/lib/dataDir.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "DATA_DIR",
+ ()=>DATA_DIR,
+ "getDataDir",
+ ()=>getDataDir
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:fs [external] (node:fs, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/path [external] (path, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/os [external] (os, cjs)");
+;
+;
+;
+const APP_NAME = "9router";
+function defaultDir() {
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ return __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__["default"].homedir(), `.${APP_NAME}`);
+}
+function getDataDir() {
+ const configured = process.env.DATA_DIR;
+ if (!configured) return defaultDir();
+ // On Windows, ignore Unix-style absolute paths (e.g. /var/lib/...) that come
+ // from a Linux-targeted .env or Docker config — they are not valid here.
+ if (process.platform === "win32" && /^\//.test(configured)) //TURBOPACK unreachable
+ ;
+ try {
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].mkdirSync(configured, {
+ recursive: true
+ });
+ return configured;
+ } catch (e) {
+ if (e?.code === "EACCES" || e?.code === "EPERM") {
+ console.warn(`[DATA_DIR] '${configured}' not writable → fallback ~/.${APP_NAME}`);
+ return defaultDir();
+ }
+ throw e;
+ }
+}
+const DATA_DIR = getDataDir();
+}),
+"[project]/src/lib/db/driver.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getAdapter",
+ ()=>getAdapter,
+ "getAdapterSync",
+ ()=>getAdapterSync
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/paths.js [middleware] (ecmascript)");
+;
+// Use global to survive Next.js dev hot-reload (module state resets on reload)
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._dbAdapter) /*TURBOPACK member replacement*/ __turbopack_context__.g._dbAdapter = {
+ instance: null,
+ initPromise: null,
+ logged: false
+};
+const state = /*TURBOPACK member replacement*/ __turbopack_context__.g._dbAdapter;
+async function tryBunSqlite() {
+ // Bun runtime only — built-in, no install needed
+ if (!process.versions.bun) return null;
+ try {
+ const { createBunSqliteAdapter } = await __turbopack_context__.A("[project]/src/lib/db/adapters/bunSqliteAdapter.js [middleware] (ecmascript, async loader)");
+ return await createBunSqliteAdapter(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_FILE"]);
+ } catch (e) {
+ console.warn(`[DB] bun:sqlite unavailable: ${e.message}`);
+ return null;
+ }
+}
+async function tryBetterSqlite() {
+ // Skip on Bun — better-sqlite3 native bindings unsupported
+ if (process.versions.bun) return null;
+ try {
+ const { createBetterSqliteAdapter } = await __turbopack_context__.A("[project]/src/lib/db/adapters/betterSqliteAdapter.js [middleware] (ecmascript, async loader)");
+ return createBetterSqliteAdapter(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_FILE"]);
+ } catch (e) {
+ console.warn(`[DB] better-sqlite3 unavailable: ${e.message}`);
+ return null;
+ }
+}
+async function tryNodeSqlite() {
+ // Built-in since Node 22.5.0 — no install needed. Skip under Bun (no node:sqlite).
+ if (process.versions.bun) return null;
+ const [maj, min] = process.versions.node.split(".").map(Number);
+ if (maj < 22 || maj === 22 && min < 5) return null;
+ try {
+ const { createNodeSqliteAdapter } = await __turbopack_context__.A("[project]/src/lib/db/adapters/nodeSqliteAdapter.js [middleware] (ecmascript, async loader)");
+ return await createNodeSqliteAdapter(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_FILE"]);
+ } catch (e) {
+ console.warn(`[DB] node:sqlite unavailable: ${e.message}`);
+ return null;
+ }
+}
+async function trySqlJs() {
+ try {
+ const { createSqlJsAdapter } = await __turbopack_context__.A("[project]/src/lib/db/adapters/sqljsAdapter.js [middleware] (ecmascript, async loader)");
+ return await createSqlJsAdapter(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_FILE"]);
+ } catch (e) {
+ console.warn(`[DB] sql.js unavailable: ${e.message}`);
+ return null;
+ }
+}
+async function initAdapter() {
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ensureDirs"])();
+ // Order per runtime:
+ // Bun: bun:sqlite → sql.js
+ // Node: better-sqlite3 → node:sqlite (≥22.5) → sql.js
+ let adapter = await tryBunSqlite();
+ if (!adapter) adapter = await tryBetterSqlite();
+ if (!adapter) adapter = await tryNodeSqlite();
+ if (!adapter) adapter = await trySqlJs();
+ if (!adapter) throw new Error("[DB] No SQLite driver available (bun/better/node/sql.js all failed)");
+ if (!state.logged) {
+ console.log(`[DB] Driver: ${adapter.driver} | file: ${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_FILE"]}`);
+ state.logged = true;
+ }
+ const { runMigrationOnce } = await __turbopack_context__.A("[project]/src/lib/db/migrate.js [middleware] (ecmascript, async loader)");
+ await runMigrationOnce(adapter);
+ return adapter;
+}
+async function getAdapter() {
+ if (state.instance) return state.instance;
+ if (!state.initPromise) state.initPromise = initAdapter().then((a)=>{
+ state.instance = a;
+ return a;
+ });
+ return state.initPromise;
+}
+function getAdapterSync() {
+ if (!state.instance) throw new Error("[DB] adapter not initialized — await getAdapter() first");
+ return state.instance;
+}
+}),
+"[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "parseJson",
+ ()=>parseJson,
+ "stringifyJson",
+ ()=>stringifyJson
+]);
+function parseJson(str, fallback = null) {
+ if (str == null) return fallback;
+ if (typeof str !== "string") return str;
+ try {
+ return JSON.parse(str);
+ } catch {
+ return fallback;
+ }
+}
+function stringifyJson(value) {
+ return JSON.stringify(value ?? null);
+}
+}),
+"[project]/src/lib/db/helpers/kvStore.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "makeKv",
+ ()=>makeKv
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+function makeKv(scope) {
+ return {
+ async get (key, fallback = null) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [
+ scope,
+ key
+ ]);
+ return row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.value, fallback) : fallback;
+ },
+ async getAll () {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [
+ scope
+ ]);
+ const out = {};
+ for (const r of rows)out[r.key] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.value);
+ return out;
+ },
+ async set (key, value) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [
+ scope,
+ key,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(value)
+ ]);
+ },
+ async setMany (obj) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>{
+ for (const [k, v] of Object.entries(obj)){
+ db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [
+ scope,
+ k,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(v)
+ ]);
+ }
+ });
+ },
+ async remove (key) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [
+ scope,
+ key
+ ]);
+ },
+ async clear () {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.run(`DELETE FROM kv WHERE scope = ?`, [
+ scope
+ ]);
+ }
+ };
+}
+}),
+"[project]/src/lib/db/helpers/metaStore.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getMeta",
+ ()=>getMeta,
+ "getMetaSync",
+ ()=>getMetaSync,
+ "setMeta",
+ ()=>setMeta,
+ "setMetaSync",
+ ()=>setMetaSync
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+;
+async function getMeta(key, fallback = null) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT value FROM _meta WHERE key = ?`, [
+ key
+ ]);
+ return row ? row.value : fallback;
+}
+async function setMeta(key, value) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.run(`INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`, [
+ key,
+ String(value)
+ ]);
+}
+function getMetaSync(adapter, key, fallback = null) {
+ const row = adapter.get(`SELECT value FROM _meta WHERE key = ?`, [
+ key
+ ]);
+ return row ? row.value : fallback;
+}
+function setMetaSync(adapter, key, value) {
+ adapter.run(`INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`, [
+ key,
+ String(value)
+ ]);
+}
+}),
+"[project]/src/lib/db/index.js [middleware] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "exportDb",
+ ()=>exportDb,
+ "importDb",
+ ()=>importDb,
+ "initDb",
+ ()=>initDb
+]);
+// Public API barrel — all DB functions
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+// Settings
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$settingsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript)");
+// Provider connections
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$connectionsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript)");
+// Provider nodes
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$nodesRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/nodesRepo.js [middleware] (ecmascript)");
+// Proxy pools
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$proxyPoolsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/proxyPoolsRepo.js [middleware] (ecmascript)");
+// API keys
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$apiKeysRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/apiKeysRepo.js [middleware] (ecmascript)");
+// Combos
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$combosRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/combosRepo.js [middleware] (ecmascript)");
+// Aliases (model + custom + mitm)
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$aliasRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/aliasRepo.js [middleware] (ecmascript)");
+// Pricing
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$pricingRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/pricingRepo.js [middleware] (ecmascript)");
+// Disabled models
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$disabledModelsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/disabledModelsRepo.js [middleware] (ecmascript)");
+// Usage
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$usageRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/usageRepo.js [middleware] (ecmascript)");
+// Request details
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$repos$2f$requestDetailsRepo$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/repos/requestDetailsRepo.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+async function exportDb() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const { exportSettings } = await __turbopack_context__.A("[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript, async loader)");
+ const out = {
+ settings: await exportSettings(),
+ providerConnections: db.all(`SELECT * FROM providerConnections`).map((r)=>({
+ ...(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.data, {}),
+ id: r.id,
+ provider: r.provider,
+ authType: r.authType,
+ name: r.name,
+ email: r.email,
+ priority: r.priority,
+ isActive: r.isActive === 1,
+ createdAt: r.createdAt,
+ updatedAt: r.updatedAt
+ })),
+ providerNodes: db.all(`SELECT * FROM providerNodes`).map((r)=>({
+ ...(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.data, {}),
+ id: r.id,
+ type: r.type,
+ name: r.name,
+ createdAt: r.createdAt,
+ updatedAt: r.updatedAt
+ })),
+ proxyPools: db.all(`SELECT * FROM proxyPools`).map((r)=>({
+ ...(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.data, {}),
+ id: r.id,
+ isActive: r.isActive === 1,
+ testStatus: r.testStatus,
+ createdAt: r.createdAt,
+ updatedAt: r.updatedAt
+ })),
+ apiKeys: db.all(`SELECT * FROM apiKeys`).map((r)=>({
+ id: r.id,
+ key: r.key,
+ name: r.name,
+ machineId: r.machineId,
+ isActive: r.isActive === 1,
+ createdAt: r.createdAt
+ })),
+ combos: db.all(`SELECT * FROM combos`).map((r)=>({
+ id: r.id,
+ name: r.name,
+ kind: r.kind,
+ models: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.models, []),
+ createdAt: r.createdAt,
+ updatedAt: r.updatedAt
+ })),
+ modelAliases: {},
+ customModels: [],
+ mitmAlias: {},
+ pricing: {}
+ };
+ for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'modelAliases'`))out.modelAliases[r.key] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.value);
+ for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'customModels'`))out.customModels.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.value));
+ for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'mitmAlias'`))out.mitmAlias[r.key] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.value);
+ for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'pricing'`))out.pricing[r.key] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.value);
+ return out;
+}
+async function importDb(payload) {
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
+ throw new Error("Invalid database payload");
+ }
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>{
+ // Wipe all tables (keep _meta)
+ db.run(`DELETE FROM settings`);
+ db.run(`DELETE FROM providerConnections`);
+ db.run(`DELETE FROM providerNodes`);
+ db.run(`DELETE FROM proxyPools`);
+ db.run(`DELETE FROM apiKeys`);
+ db.run(`DELETE FROM combos`);
+ db.run(`DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing')`);
+ // Settings
+ if (payload.settings) {
+ db.run(`INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`, [
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(payload.settings)
+ ]);
+ }
+ for (const c of payload.providerConnections || []){
+ const { id, provider, authType, name, email, priority, isActive, createdAt, updatedAt, ...rest } = c;
+ db.run(`INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
+ id,
+ provider,
+ authType || "oauth",
+ name || null,
+ email || null,
+ priority || null,
+ isActive === false ? 0 : 1,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(rest),
+ createdAt || new Date().toISOString(),
+ updatedAt || new Date().toISOString()
+ ]);
+ }
+ for (const n of payload.providerNodes || []){
+ const { id, type, name, createdAt, updatedAt, ...rest } = n;
+ db.run(`INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`, [
+ id,
+ type || null,
+ name || null,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(rest),
+ createdAt || new Date().toISOString(),
+ updatedAt || new Date().toISOString()
+ ]);
+ }
+ for (const p of payload.proxyPools || []){
+ const { id, isActive, testStatus, createdAt, updatedAt, ...rest } = p;
+ db.run(`INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`, [
+ id,
+ isActive === false ? 0 : 1,
+ testStatus || "unknown",
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(rest),
+ createdAt || new Date().toISOString(),
+ updatedAt || new Date().toISOString()
+ ]);
+ }
+ for (const k of payload.apiKeys || []){
+ db.run(`INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`, [
+ k.id,
+ k.key,
+ k.name || null,
+ k.machineId || null,
+ k.isActive === false ? 0 : 1,
+ k.createdAt || new Date().toISOString()
+ ]);
+ }
+ for (const c of payload.combos || []){
+ db.run(`INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`, [
+ c.id,
+ c.name,
+ c.kind || null,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(c.models || []),
+ c.createdAt || new Date().toISOString(),
+ c.updatedAt || new Date().toISOString()
+ ]);
+ }
+ for (const [a, m] of Object.entries(payload.modelAliases || {})){
+ db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)`, [
+ a,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(m)
+ ]);
+ }
+ for (const m of payload.customModels || []){
+ const k = `${m.providerAlias}|${m.id}|${m.type || "llm"}`;
+ db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)`, [
+ k,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(m)
+ ]);
+ }
+ for (const [tool, mappings] of Object.entries(payload.mitmAlias || {})){
+ db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)`, [
+ tool,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(mappings || {})
+ ]);
+ }
+ for (const [provider, models] of Object.entries(payload.pricing || {})){
+ db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)`, [
+ provider,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(models || {})
+ ]);
+ }
+ });
+ return await exportDb();
+}
+async function initDb() {
+ await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+}
+}),
+"[project]/src/lib/db/paths.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "BACKUPS_DIR",
+ ()=>BACKUPS_DIR,
+ "DATA_FILE",
+ ()=>DATA_FILE,
+ "DB_DIR",
+ ()=>DB_DIR,
+ "LEGACY_FILES",
+ ()=>LEGACY_FILES,
+ "ensureDirs",
+ ()=>ensureDirs
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:path [external] (node:path, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:fs [external] (node:fs, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/dataDir.js [middleware] (ecmascript)");
+;
+;
+;
+const DB_DIR = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], "db");
+const DATA_FILE = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(DB_DIR, "data.sqlite");
+const BACKUPS_DIR = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(DB_DIR, "backups");
+const LEGACY_FILES = {
+ main: __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], "db.json"),
+ usage: __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], "usage.json"),
+ disabled: __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], "disabledModels.json"),
+ details: __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], "request-details.json")
+};
+function ensureDirs() {
+ for (const dir of [
+ __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"],
+ DB_DIR,
+ BACKUPS_DIR
+ ]){
+ if (!__TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].existsSync(dir)) __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].mkdirSync(dir, {
+ recursive: true
+ });
+ }
+}
+}),
+"[project]/src/lib/db/repos/aliasRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "addCustomModel",
+ ()=>addCustomModel,
+ "deleteCustomModel",
+ ()=>deleteCustomModel,
+ "deleteModelAlias",
+ ()=>deleteModelAlias,
+ "getCustomModels",
+ ()=>getCustomModels,
+ "getMitmAlias",
+ ()=>getMitmAlias,
+ "getModelAliases",
+ ()=>getModelAliases,
+ "setMitmAliasAll",
+ ()=>setMitmAliasAll,
+ "setModelAlias",
+ ()=>setModelAlias
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$kvStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/kvStore.js [middleware] (ecmascript)");
+;
+;
+;
+const aliasKv = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$kvStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["makeKv"])("modelAliases");
+const customKv = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$kvStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["makeKv"])("customModels");
+const mitmKv = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$kvStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["makeKv"])("mitmAlias");
+async function getModelAliases() {
+ return await aliasKv.getAll();
+}
+async function setModelAlias(alias, model) {
+ await aliasKv.set(alias, model);
+}
+async function deleteModelAlias(alias) {
+ await aliasKv.remove(alias);
+}
+// customModels: key=`${providerAlias}|${id}|${type}`, value=full model object
+function customKey(providerAlias, id, type) {
+ return `${providerAlias}|${id}|${type}`;
+}
+async function getCustomModels() {
+ const all = await customKv.getAll();
+ return Object.values(all);
+}
+async function addCustomModel({ providerAlias, id, type = "llm", name }) {
+ const k = customKey(providerAlias, id, type);
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let added = false;
+ db.transaction(()=>{
+ const row = db.get(`SELECT 1 FROM kv WHERE scope = 'customModels' AND key = ?`, [
+ k
+ ]);
+ if (row) return;
+ const value = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])({
+ providerAlias,
+ id,
+ type,
+ name: name || id
+ });
+ db.run(`INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)`, [
+ k,
+ value
+ ]);
+ added = true;
+ });
+ return added;
+}
+async function deleteCustomModel({ providerAlias, id, type = "llm" }) {
+ await customKv.remove(customKey(providerAlias, id, type));
+}
+async function getMitmAlias(toolName) {
+ if (toolName) {
+ const v = await mitmKv.get(toolName);
+ return v || {};
+ }
+ return await mitmKv.getAll();
+}
+async function setMitmAliasAll(toolName, mappings) {
+ await mitmKv.set(toolName, mappings || {});
+}
+}),
+"[project]/src/lib/db/repos/apiKeysRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createApiKey",
+ ()=>createApiKey,
+ "deleteApiKey",
+ ()=>deleteApiKey,
+ "getApiKeyById",
+ ()=>getApiKeyById,
+ "getApiKeyByKey",
+ ()=>getApiKeyByKey,
+ "getApiKeys",
+ ()=>getApiKeys,
+ "importApiKey",
+ ()=>importApiKey,
+ "updateApiKey",
+ ()=>updateApiKey,
+ "validateApiKey",
+ ()=>validateApiKey
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/node_modules/uuid/dist-node/v4.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+;
+;
+;
+function rowToKey(row) {
+ if (!row) return null;
+ return {
+ id: row.id,
+ key: row.key,
+ name: row.name,
+ machineId: row.machineId,
+ isActive: row.isActive === 1 || row.isActive === true,
+ allowedModels: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.allowedModels, null),
+ createdAt: row.createdAt
+ };
+}
+async function getApiKeys() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT * FROM apiKeys ORDER BY createdAt ASC`);
+ return rows.map(rowToKey);
+}
+async function getApiKeyById(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [
+ id
+ ]);
+ return rowToKey(row);
+}
+async function createApiKey(name, machineId) {
+ if (!machineId) throw new Error("machineId is required");
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const { generateApiKeyWithMachine } = await __turbopack_context__.A("[project]/src/shared/utils/apiKey.js [middleware] (ecmascript, async loader)");
+ const result = generateApiKeyWithMachine(machineId);
+ const apiKey = {
+ id: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(),
+ name,
+ key: result.key,
+ machineId,
+ isActive: true,
+ createdAt: new Date().toISOString()
+ };
+ db.run(`INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`, [
+ apiKey.id,
+ apiKey.key,
+ apiKey.name,
+ apiKey.machineId,
+ 1,
+ apiKey.createdAt
+ ]);
+ return apiKey;
+}
+async function updateApiKey(id, data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let result = null;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ const merged = {
+ ...rowToKey(row),
+ ...data
+ };
+ db.run(`UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, allowedModels = ? WHERE id = ?`, [
+ merged.key,
+ merged.name,
+ merged.machineId,
+ merged.isActive ? 1 : 0,
+ merged.allowedModels == null ? null : (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(merged.allowedModels),
+ id
+ ]);
+ result = merged;
+ });
+ return result;
+}
+async function importApiKey(name, keyValue) {
+ if (!keyValue?.trim()) throw new Error("Key value is required");
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ // Check for duplicates
+ const existing = db.get(`SELECT id FROM apiKeys WHERE key = ?`, [
+ keyValue.trim()
+ ]);
+ if (existing) {
+ throw new Error("This API key already exists in the system");
+ }
+ const apiKey = {
+ id: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(),
+ name: name?.trim() || "Imported Key",
+ key: keyValue.trim(),
+ machineId: null,
+ isActive: true,
+ createdAt: new Date().toISOString()
+ };
+ db.run(`INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`, [
+ apiKey.id,
+ apiKey.key,
+ apiKey.name,
+ apiKey.machineId,
+ 1,
+ apiKey.createdAt
+ ]);
+ return apiKey;
+}
+async function deleteApiKey(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const res = db.run(`DELETE FROM apiKeys WHERE id = ?`, [
+ id
+ ]);
+ return (res?.changes ?? 0) > 0;
+}
+async function validateApiKey(key) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT isActive FROM apiKeys WHERE key = ?`, [
+ key
+ ]);
+ if (!row) return false;
+ return row.isActive === 1 || row.isActive === true;
+}
+async function getApiKeyByKey(key) {
+ if (!key) return null;
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT * FROM apiKeys WHERE key = ?`, [
+ key
+ ]);
+ const rec = rowToKey(row);
+ if (!rec || !rec.isActive) return null;
+ return rec;
+}
+}),
+"[project]/src/lib/db/repos/combosRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createCombo",
+ ()=>createCombo,
+ "deleteCombo",
+ ()=>deleteCombo,
+ "getComboById",
+ ()=>getComboById,
+ "getComboByName",
+ ()=>getComboByName,
+ "getCombos",
+ ()=>getCombos,
+ "updateCombo",
+ ()=>updateCombo
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/node_modules/uuid/dist-node/v4.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+;
+function rowToCombo(row) {
+ if (!row) return null;
+ return {
+ id: row.id,
+ name: row.name,
+ kind: row.kind,
+ models: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.models, []),
+ enabled: row.enabled === 1 || row.enabled === true,
+ createdAt: row.createdAt,
+ updatedAt: row.updatedAt
+ };
+}
+async function getCombos() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT * FROM combos ORDER BY createdAt ASC`);
+ return rows.map(rowToCombo);
+}
+async function getComboById(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT * FROM combos WHERE id = ?`, [
+ id
+ ]);
+ return rowToCombo(row);
+}
+async function getComboByName(name) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT * FROM combos WHERE name = ?`, [
+ name
+ ]);
+ return rowToCombo(row);
+}
+async function createCombo(data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const now = new Date().toISOString();
+ const combo = {
+ id: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(),
+ name: data.name,
+ kind: data.kind || null,
+ models: data.models || [],
+ enabled: data.enabled !== false,
+ createdAt: now,
+ updatedAt: now
+ };
+ db.run(`INSERT INTO combos(id, name, kind, models, enabled, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)`, [
+ combo.id,
+ combo.name,
+ combo.kind,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(combo.models),
+ combo.enabled !== false ? 1 : 0,
+ combo.createdAt,
+ combo.updatedAt
+ ]);
+ return combo;
+}
+async function updateCombo(id, data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let result = null;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM combos WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ const merged = {
+ ...rowToCombo(row),
+ ...data,
+ updatedAt: new Date().toISOString()
+ };
+ db.run(`UPDATE combos SET name = ?, kind = ?, models = ?, enabled = ?, updatedAt = ? WHERE id = ?`, [
+ merged.name,
+ merged.kind,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(merged.models || []),
+ merged.enabled ? 1 : 0,
+ merged.updatedAt,
+ id
+ ]);
+ result = merged;
+ });
+ return result;
+}
+async function deleteCombo(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const res = db.run(`DELETE FROM combos WHERE id = ?`, [
+ id
+ ]);
+ return (res?.changes ?? 0) > 0;
+}
+}),
+"[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "cleanupProviderConnections",
+ ()=>cleanupProviderConnections,
+ "createProviderConnection",
+ ()=>createProviderConnection,
+ "deleteProviderConnection",
+ ()=>deleteProviderConnection,
+ "deleteProviderConnectionsByProvider",
+ ()=>deleteProviderConnectionsByProvider,
+ "getProviderConnectionById",
+ ()=>getProviderConnectionById,
+ "getProviderConnections",
+ ()=>getProviderConnections,
+ "reorderProviderConnections",
+ ()=>reorderProviderConnections,
+ "updateProviderConnection",
+ ()=>updateProviderConnection
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/node_modules/uuid/dist-node/v4.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+;
+const OPTIONAL_FIELDS = [
+ "displayName",
+ "email",
+ "globalPriority",
+ "defaultModel",
+ "accessToken",
+ "refreshToken",
+ "expiresAt",
+ "tokenType",
+ "scope",
+ "projectId",
+ "apiKey",
+ "testStatus",
+ "lastTested",
+ "lastError",
+ "lastErrorAt",
+ "rateLimitedUntil",
+ "expiresIn",
+ "errorCode",
+ "consecutiveUseCount",
+ "idToken",
+ "lastRefreshAt"
+];
+function rowToConn(row) {
+ if (!row) return null;
+ const extra = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, {});
+ return {
+ ...extra,
+ id: row.id,
+ provider: row.provider,
+ authType: row.authType,
+ name: row.name,
+ email: row.email,
+ priority: row.priority,
+ isActive: row.isActive === 1 || row.isActive === true,
+ createdAt: row.createdAt,
+ updatedAt: row.updatedAt
+ };
+}
+function connToRow(c) {
+ const { id, provider, authType, name, email, priority, isActive, createdAt, updatedAt, ...rest } = c;
+ return {
+ id,
+ provider,
+ authType,
+ name: name ?? null,
+ email: email ?? null,
+ priority: priority ?? null,
+ isActive: isActive === false ? 0 : 1,
+ data: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(rest),
+ createdAt,
+ updatedAt
+ };
+}
+function upsert(db, c) {
+ const r = connToRow(c);
+ db.run(`INSERT INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ ON CONFLICT(id) DO UPDATE SET
+ provider=excluded.provider, authType=excluded.authType, name=excluded.name,
+ email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,
+ data=excluded.data, updatedAt=excluded.updatedAt`, [
+ r.id,
+ r.provider,
+ r.authType,
+ r.name,
+ r.email,
+ r.priority,
+ r.isActive,
+ r.data,
+ r.createdAt,
+ r.updatedAt
+ ]);
+}
+function deriveConnectionName(data, fallbackName) {
+ if (data.provider === "github") {
+ return data.providerSpecificData?.githubLogin || data.providerSpecificData?.githubEmail || data.email || data.providerSpecificData?.githubName || fallbackName;
+ }
+ return fallbackName;
+}
+async function getProviderConnections(filter = {}) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const where = [];
+ const params = [];
+ if (filter.provider) {
+ where.push("provider = ?");
+ params.push(filter.provider);
+ }
+ if (filter.isActive !== undefined) {
+ where.push("isActive = ?");
+ params.push(filter.isActive ? 1 : 0);
+ }
+ const sql = `SELECT * FROM providerConnections${where.length ? ` WHERE ${where.join(" AND ")}` : ""}`;
+ const rows = db.all(sql, params);
+ const list = rows.map(rowToConn);
+ list.sort((a, b)=>(a.priority || 999) - (b.priority || 999));
+ return list;
+}
+async function getProviderConnectionById(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT * FROM providerConnections WHERE id = ?`, [
+ id
+ ]);
+ return rowToConn(row);
+}
+// Internal sync reorder — must be called INSIDE a transaction
+function reorderInTx(db, providerId) {
+ const list = db.all(`SELECT * FROM providerConnections WHERE provider = ?`, [
+ providerId
+ ]).map(rowToConn);
+ list.sort((a, b)=>{
+ const pDiff = (a.priority || 0) - (b.priority || 0);
+ if (pDiff !== 0) return pDiff;
+ return new Date(b.updatedAt || 0) - new Date(a.updatedAt || 0);
+ });
+ list.forEach((c, i)=>{
+ db.run(`UPDATE providerConnections SET priority = ? WHERE id = ?`, [
+ i + 1,
+ c.id
+ ]);
+ });
+}
+async function createProviderConnection(data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const now = new Date().toISOString();
+ let result;
+ db.transaction(()=>{
+ const all = db.all(`SELECT * FROM providerConnections WHERE provider = ?`, [
+ data.provider
+ ]).map(rowToConn);
+ let existing = null;
+ if (data.authType === "oauth" && data.email) {
+ const incomingUsername = data.providerSpecificData?.username;
+ const incomingWs = data.providerSpecificData?.chatgptAccountId;
+ existing = all.find((c)=>{
+ if (c.authType !== "oauth" || c.email !== data.email) return false;
+ // Codex/OpenAI can issue multiple OAuth grants for the same email.
+ // Refresh tokens are rotated single-use; collapsing a new login onto an
+ // existing bare-email row overwrites the first account's token pair and
+ // makes it look "invalid" after adding a second account. Only update an
+ // existing Codex row when both rows expose the same ChatGPT account ID.
+ if (data.provider === "codex") {
+ const existingWs = c.providerSpecificData?.chatgptAccountId;
+ return !!incomingWs && !!existingWs && incomingWs === existingWs;
+ }
+ // Workspace providers use workspace ID when both sides have it
+ const existingWs = c.providerSpecificData?.chatgptAccountId;
+ if (incomingWs && existingWs) return incomingWs === existingWs;
+ if (incomingWs && !existingWs) return false;
+ if (!incomingWs && existingWs) return false;
+ // Non-workspace providers: match on (email + username) so cross-IdP
+ // accounts don't overwrite each other. Require username on both sides
+ // — if only one side has it, treat as a distinct identity rather than
+ // collapsing onto the bare-email fallback (which would re-introduce
+ // the cross-IdP overwrite).
+ const existingUsername = c.providerSpecificData?.username;
+ if (incomingUsername && existingUsername) {
+ return incomingUsername === existingUsername;
+ }
+ if (incomingUsername || existingUsername) return false;
+ return true;
+ });
+ } else if (data.authType === "apikey" && data.name) {
+ existing = all.find((c)=>c.authType === "apikey" && c.name === data.name);
+ }
+ // access_token: never dedup — user manages duplicates manually
+ if (existing) {
+ const merged = {
+ ...existing,
+ ...data,
+ updatedAt: now
+ };
+ upsert(db, merged);
+ result = merged;
+ return;
+ }
+ let connectionName = data.name || null;
+ if (!connectionName && (data.authType === "oauth" || data.authType === "access_token")) {
+ connectionName = deriveConnectionName(data, data.email || `Account ${all.length + 1}`);
+ }
+ let connectionPriority = data.priority;
+ if (!connectionPriority) {
+ connectionPriority = all.reduce((m, c)=>Math.max(m, c.priority || 0), 0) + 1;
+ }
+ const conn = {
+ id: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(),
+ provider: data.provider,
+ authType: data.authType || "oauth",
+ name: connectionName,
+ priority: connectionPriority,
+ isActive: data.isActive !== undefined ? data.isActive : true,
+ createdAt: now,
+ updatedAt: now
+ };
+ for (const f of OPTIONAL_FIELDS){
+ if (data[f] !== undefined && data[f] !== null) conn[f] = data[f];
+ }
+ if (data.providerSpecificData && Object.keys(data.providerSpecificData).length > 0) {
+ conn.providerSpecificData = data.providerSpecificData;
+ }
+ if (data.email !== undefined) conn.email = data.email;
+ upsert(db, conn);
+ reorderInTx(db, data.provider);
+ result = conn;
+ });
+ return result;
+}
+async function updateProviderConnection(id, data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let result;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM providerConnections WHERE id = ?`, [
+ id
+ ]);
+ if (!row) {
+ result = null;
+ return;
+ }
+ const existing = rowToConn(row);
+ const merged = {
+ ...existing,
+ ...data,
+ updatedAt: new Date().toISOString()
+ };
+ upsert(db, merged);
+ if (data.priority !== undefined) reorderInTx(db, existing.provider);
+ result = merged;
+ });
+ return result;
+}
+async function deleteProviderConnection(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let ok = false;
+ db.transaction(()=>{
+ const row = db.get(`SELECT provider FROM providerConnections WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ db.run(`DELETE FROM providerConnections WHERE id = ?`, [
+ id
+ ]);
+ reorderInTx(db, row.provider);
+ ok = true;
+ });
+ return ok;
+}
+async function deleteProviderConnectionsByProvider(providerId) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const before = db.get(`SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?`, [
+ providerId
+ ]);
+ db.run(`DELETE FROM providerConnections WHERE provider = ?`, [
+ providerId
+ ]);
+ return before?.n || 0;
+}
+async function reorderProviderConnections(providerId) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>reorderInTx(db, providerId));
+}
+async function cleanupProviderConnections() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const fieldsToCheck = [
+ "displayName",
+ "email",
+ "globalPriority",
+ "defaultModel",
+ "accessToken",
+ "refreshToken",
+ "expiresAt",
+ "tokenType",
+ "scope",
+ "projectId",
+ "apiKey",
+ "testStatus",
+ "lastTested",
+ "lastError",
+ "lastErrorAt",
+ "rateLimitedUntil",
+ "expiresIn",
+ "consecutiveUseCount"
+ ];
+ let cleaned = 0;
+ db.transaction(()=>{
+ const rows = db.all(`SELECT * FROM providerConnections`);
+ for (const row of rows){
+ const conn = rowToConn(row);
+ let dirty = false;
+ for (const f of fieldsToCheck){
+ if (conn[f] === null || conn[f] === undefined) {
+ if (f in conn) {
+ delete conn[f];
+ cleaned++;
+ dirty = true;
+ }
+ }
+ }
+ if (conn.providerSpecificData && Object.keys(conn.providerSpecificData).length === 0) {
+ delete conn.providerSpecificData;
+ cleaned++;
+ dirty = true;
+ }
+ if (dirty) upsert(db, conn);
+ }
+ });
+ return cleaned;
+}
+}),
+"[project]/src/lib/db/repos/disabledModelsRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "disableModels",
+ ()=>disableModels,
+ "enableModels",
+ ()=>enableModels,
+ "getDisabledByProvider",
+ ()=>getDisabledByProvider,
+ "getDisabledModels",
+ ()=>getDisabledModels
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+const SCOPE = "disabledModels";
+async function getDisabledModels() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [
+ SCOPE
+ ]);
+ const out = {};
+ for (const r of rows)out[r.key] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.value, []);
+ return out;
+}
+async function getDisabledByProvider(providerAlias) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [
+ SCOPE,
+ providerAlias
+ ]);
+ return row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.value, []) || [] : [];
+}
+async function disableModels(providerAlias, ids) {
+ if (!providerAlias || !Array.isArray(ids)) return;
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>{
+ const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [
+ SCOPE,
+ providerAlias
+ ]);
+ const current = row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.value, []) || [] : [];
+ const merged = [
+ ...new Set([
+ ...current,
+ ...ids
+ ])
+ ];
+ db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [
+ SCOPE,
+ providerAlias,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(merged)
+ ]);
+ });
+}
+async function enableModels(providerAlias, ids) {
+ if (!providerAlias) return;
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>{
+ if (!Array.isArray(ids) || ids.length === 0) {
+ db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [
+ SCOPE,
+ providerAlias
+ ]);
+ return;
+ }
+ const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [
+ SCOPE,
+ providerAlias
+ ]);
+ const current = row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.value, []) || [] : [];
+ const removeSet = new Set(ids);
+ const next = current.filter((id)=>!removeSet.has(id));
+ if (next.length === 0) {
+ db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [
+ SCOPE,
+ providerAlias
+ ]);
+ } else {
+ db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [
+ SCOPE,
+ providerAlias,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(next)
+ ]);
+ }
+ });
+}
+}),
+"[project]/src/lib/db/repos/nodesRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createProviderNode",
+ ()=>createProviderNode,
+ "deleteProviderNode",
+ ()=>deleteProviderNode,
+ "getProviderNodeById",
+ ()=>getProviderNodeById,
+ "getProviderNodes",
+ ()=>getProviderNodes,
+ "updateProviderNode",
+ ()=>updateProviderNode
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/node_modules/uuid/dist-node/v4.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+;
+function rowToNode(row) {
+ if (!row) return null;
+ const extra = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, {});
+ return {
+ ...extra,
+ id: row.id,
+ type: row.type,
+ name: row.name,
+ createdAt: row.createdAt,
+ updatedAt: row.updatedAt
+ };
+}
+function nodeToRow(n) {
+ const { id, type, name, createdAt, updatedAt, ...rest } = n;
+ return {
+ id,
+ type: type ?? null,
+ name: name ?? null,
+ data: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(rest),
+ createdAt,
+ updatedAt
+ };
+}
+function upsert(db, n) {
+ const r = nodeToRow(n);
+ db.run(`INSERT INTO providerNodes(id, type, name, data, createdAt, updatedAt)
+ VALUES(?, ?, ?, ?, ?, ?)
+ ON CONFLICT(id) DO UPDATE SET
+ type=excluded.type, name=excluded.name, data=excluded.data, updatedAt=excluded.updatedAt`, [
+ r.id,
+ r.type,
+ r.name,
+ r.data,
+ r.createdAt,
+ r.updatedAt
+ ]);
+}
+async function getProviderNodes(filter = {}) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const where = [];
+ const params = [];
+ if (filter.type) {
+ where.push("type = ?");
+ params.push(filter.type);
+ }
+ const sql = `SELECT * FROM providerNodes${where.length ? ` WHERE ${where.join(" AND ")}` : ""}`;
+ return db.all(sql, params).map(rowToNode);
+}
+async function getProviderNodeById(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ return rowToNode(db.get(`SELECT * FROM providerNodes WHERE id = ?`, [
+ id
+ ]));
+}
+async function createProviderNode(data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const now = new Date().toISOString();
+ const node = {
+ id: data.id || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(),
+ type: data.type,
+ name: data.name,
+ prefix: data.prefix,
+ apiType: data.apiType,
+ baseUrl: data.baseUrl,
+ createdAt: now,
+ updatedAt: now
+ };
+ upsert(db, node);
+ return node;
+}
+async function updateProviderNode(id, data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let result = null;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM providerNodes WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ const merged = {
+ ...rowToNode(row),
+ ...data,
+ updatedAt: new Date().toISOString()
+ };
+ upsert(db, merged);
+ result = merged;
+ });
+ return result;
+}
+async function deleteProviderNode(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let removed = null;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM providerNodes WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ removed = rowToNode(row);
+ db.run(`DELETE FROM providerNodes WHERE id = ?`, [
+ id
+ ]);
+ });
+ return removed;
+}
+}),
+"[project]/src/lib/db/repos/pricingRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getPricing",
+ ()=>getPricing,
+ "getPricingForModel",
+ ()=>getPricingForModel,
+ "resetAllPricing",
+ ()=>resetAllPricing,
+ "resetPricing",
+ ()=>resetPricing,
+ "updatePricing",
+ ()=>updatePricing
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$kvStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/kvStore.js [middleware] (ecmascript)");
+;
+;
+;
+const pricingKv = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$kvStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["makeKv"])("pricing");
+const CACHE_TTL_MS = 5000;
+let cache = {
+ value: null,
+ expiresAt: 0
+};
+function invalidate() {
+ cache = {
+ value: null,
+ expiresAt: 0
+ };
+}
+async function getUserPricing() {
+ return await pricingKv.getAll();
+}
+async function getPricing() {
+ const now = Date.now();
+ if (cache.value && cache.expiresAt > now) return cache.value;
+ const userPricing = await getUserPricing();
+ const { PROVIDER_PRICING } = await __turbopack_context__.A("[project]/open-sse/providers/pricing.js [middleware] (ecmascript, async loader)");
+ const merged = {};
+ for (const [provider, models] of Object.entries(PROVIDER_PRICING)){
+ merged[provider] = {
+ ...models
+ };
+ if (userPricing[provider]) {
+ for (const [model, pricing] of Object.entries(userPricing[provider])){
+ merged[provider][model] = merged[provider][model] ? {
+ ...merged[provider][model],
+ ...pricing
+ } : pricing;
+ }
+ }
+ }
+ for (const [provider, models] of Object.entries(userPricing)){
+ if (!merged[provider]) {
+ merged[provider] = {
+ ...models
+ };
+ } else {
+ for (const [model, pricing] of Object.entries(models)){
+ if (!merged[provider][model]) merged[provider][model] = pricing;
+ }
+ }
+ }
+ cache = {
+ value: merged,
+ expiresAt: now + CACHE_TTL_MS
+ };
+ return merged;
+}
+async function getPricingForModel(provider, model) {
+ if (!model) return null;
+ const userPricing = await getUserPricing();
+ if (provider && userPricing[provider]?.[model]) return userPricing[provider][model];
+ const { getPricingForModel: resolveConst } = await __turbopack_context__.A("[project]/open-sse/providers/pricing.js [middleware] (ecmascript, async loader)");
+ return resolveConst(provider, model);
+}
+async function updatePricing(pricingData) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>{
+ for (const [provider, models] of Object.entries(pricingData)){
+ const row = db.get(`SELECT value FROM kv WHERE scope = 'pricing' AND key = ?`, [
+ provider
+ ]);
+ const current = row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.value, {}) || {} : {};
+ const merged = {
+ ...current
+ };
+ for (const [model, pricing] of Object.entries(models)){
+ merged[model] = pricing;
+ }
+ db.run(`INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [
+ provider,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(merged)
+ ]);
+ }
+ });
+ invalidate();
+ return await getUserPricing();
+}
+async function resetPricing(provider, model) {
+ if (!provider) return await getUserPricing();
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ db.transaction(()=>{
+ if (!model) {
+ db.run(`DELETE FROM kv WHERE scope = 'pricing' AND key = ?`, [
+ provider
+ ]);
+ return;
+ }
+ const row = db.get(`SELECT value FROM kv WHERE scope = 'pricing' AND key = ?`, [
+ provider
+ ]);
+ const current = row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.value, {}) || {} : {};
+ delete current[model];
+ if (Object.keys(current).length === 0) {
+ db.run(`DELETE FROM kv WHERE scope = 'pricing' AND key = ?`, [
+ provider
+ ]);
+ } else {
+ db.run(`INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [
+ provider,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(current)
+ ]);
+ }
+ });
+ invalidate();
+ return await getUserPricing();
+}
+async function resetAllPricing() {
+ await pricingKv.clear();
+ invalidate();
+ return {};
+}
+}),
+"[project]/src/lib/db/repos/proxyPoolsRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createProxyPool",
+ ()=>createProxyPool,
+ "deleteProxyPool",
+ ()=>deleteProxyPool,
+ "getProxyPoolById",
+ ()=>getProxyPoolById,
+ "getProxyPools",
+ ()=>getProxyPools,
+ "updateProxyPool",
+ ()=>updateProxyPool
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/node_modules/uuid/dist-node/v4.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+;
+function rowToPool(row) {
+ if (!row) return null;
+ const extra = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, {});
+ return {
+ ...extra,
+ id: row.id,
+ isActive: row.isActive === 1 || row.isActive === true,
+ testStatus: row.testStatus,
+ createdAt: row.createdAt,
+ updatedAt: row.updatedAt
+ };
+}
+function poolToRow(p) {
+ const { id, isActive, testStatus, createdAt, updatedAt, ...rest } = p;
+ return {
+ id,
+ isActive: isActive === false ? 0 : 1,
+ testStatus: testStatus ?? null,
+ data: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(rest),
+ createdAt,
+ updatedAt
+ };
+}
+function upsert(db, p) {
+ const r = poolToRow(p);
+ db.run(`INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)
+ VALUES(?, ?, ?, ?, ?, ?)
+ ON CONFLICT(id) DO UPDATE SET
+ isActive=excluded.isActive, testStatus=excluded.testStatus,
+ data=excluded.data, updatedAt=excluded.updatedAt`, [
+ r.id,
+ r.isActive,
+ r.testStatus,
+ r.data,
+ r.createdAt,
+ r.updatedAt
+ ]);
+}
+async function getProxyPools(filter = {}) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const where = [];
+ const params = [];
+ if (filter.isActive !== undefined) {
+ where.push("isActive = ?");
+ params.push(filter.isActive ? 1 : 0);
+ }
+ if (filter.testStatus) {
+ where.push("testStatus = ?");
+ params.push(filter.testStatus);
+ }
+ const sql = `SELECT * FROM proxyPools${where.length ? ` WHERE ${where.join(" AND ")}` : ""}`;
+ const list = db.all(sql, params).map(rowToPool);
+ list.sort((a, b)=>new Date(b.updatedAt || 0) - new Date(a.updatedAt || 0));
+ return list;
+}
+async function getProxyPoolById(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ return rowToPool(db.get(`SELECT * FROM proxyPools WHERE id = ?`, [
+ id
+ ]));
+}
+async function createProxyPool(data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const now = new Date().toISOString();
+ const pool = {
+ id: data.id || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(),
+ name: data.name,
+ proxyUrl: data.proxyUrl,
+ noProxy: data.noProxy || "",
+ type: data.type || "http",
+ isActive: data.isActive !== undefined ? data.isActive : true,
+ strictProxy: data.strictProxy === true,
+ testStatus: data.testStatus || "unknown",
+ lastTestedAt: data.lastTestedAt || null,
+ lastError: data.lastError || null,
+ createdAt: now,
+ updatedAt: now
+ };
+ upsert(db, pool);
+ return pool;
+}
+async function updateProxyPool(id, data) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let result = null;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM proxyPools WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ const merged = {
+ ...rowToPool(row),
+ ...data,
+ updatedAt: new Date().toISOString()
+ };
+ upsert(db, merged);
+ result = merged;
+ });
+ return result;
+}
+async function deleteProxyPool(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let removed = null;
+ db.transaction(()=>{
+ const row = db.get(`SELECT * FROM proxyPools WHERE id = ?`, [
+ id
+ ]);
+ if (!row) return;
+ removed = rowToPool(row);
+ db.run(`DELETE FROM proxyPools WHERE id = ?`, [
+ id
+ ]);
+ });
+ return removed;
+}
+}),
+"[project]/src/lib/db/repos/requestDetailsRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "__test__",
+ ()=>__test__,
+ "getDistinctApiKeys",
+ ()=>getDistinctApiKeys,
+ "getDistinctModels",
+ ()=>getDistinctModels,
+ "getDistinctProviders",
+ ()=>getDistinctProviders,
+ "getDistinctStatuses",
+ ()=>getDistinctStatuses,
+ "getRequestDetailById",
+ ()=>getRequestDetailById,
+ "getRequestDetails",
+ ()=>getRequestDetails,
+ "saveRequestDetail",
+ ()=>saveRequestDetail
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+const DEFAULT_MAX_RECORDS = 200;
+const DEFAULT_BATCH_SIZE = 20;
+const DEFAULT_FLUSH_INTERVAL_MS = 5000;
+const DEFAULT_MAX_JSON_SIZE = 5 * 1024;
+const CONFIG_CACHE_TTL_MS = 5000;
+let cachedConfig = null;
+let cachedConfigTs = 0;
+async function getObservabilityConfig() {
+ if (cachedConfig && Date.now() - cachedConfigTs < CONFIG_CACHE_TTL_MS) return cachedConfig;
+ try {
+ const { getSettings } = await __turbopack_context__.A("[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript, async loader)");
+ const settings = await getSettings();
+ const envRequestLogs = process.env.ENABLE_REQUEST_LOGS;
+ if (envRequestLogs !== undefined) {
+ const enabled = envRequestLogs.toLowerCase() === "true";
+ cachedConfig = {
+ enabled,
+ maxRecords: settings.observabilityMaxRecords || parseInt(process.env.OBSERVABILITY_MAX_RECORDS || String(DEFAULT_MAX_RECORDS), 10),
+ batchSize: settings.observabilityBatchSize || parseInt(process.env.OBSERVABILITY_BATCH_SIZE || String(DEFAULT_BATCH_SIZE), 10),
+ flushIntervalMs: settings.observabilityFlushIntervalMs || parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS || String(DEFAULT_FLUSH_INTERVAL_MS), 10),
+ maxJsonSize: (settings.observabilityMaxJsonSize || parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE || "5", 10)) * 1024
+ };
+ cachedConfigTs = Date.now();
+ return cachedConfig;
+ }
+ const envFallback = process.env.OBSERVABILITY_ENABLED !== "false";
+ const uiFlag = typeof settings.enableObservability === "boolean";
+ const enabled = uiFlag ? settings.enableObservability : envFallback;
+ cachedConfig = {
+ enabled,
+ maxRecords: settings.observabilityMaxRecords || parseInt(process.env.OBSERVABILITY_MAX_RECORDS || String(DEFAULT_MAX_RECORDS), 10),
+ batchSize: settings.observabilityBatchSize || parseInt(process.env.OBSERVABILITY_BATCH_SIZE || String(DEFAULT_BATCH_SIZE), 10),
+ flushIntervalMs: settings.observabilityFlushIntervalMs || parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS || String(DEFAULT_FLUSH_INTERVAL_MS), 10),
+ maxJsonSize: (settings.observabilityMaxJsonSize || parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE || "5", 10)) * 1024
+ };
+ } catch {
+ cachedConfig = {
+ enabled: false,
+ maxRecords: DEFAULT_MAX_RECORDS,
+ batchSize: DEFAULT_BATCH_SIZE,
+ flushIntervalMs: DEFAULT_FLUSH_INTERVAL_MS,
+ maxJsonSize: DEFAULT_MAX_JSON_SIZE
+ };
+ }
+ cachedConfigTs = Date.now();
+ return cachedConfig;
+}
+let writeBuffer = [];
+let flushTimer = null;
+let isFlushing = false;
+function sanitizeHeaders(headers) {
+ if (!headers || typeof headers !== "object") return {};
+ const sensitiveKeys = [
+ "authorization",
+ "x-api-key",
+ "cookie",
+ "token",
+ "api-key"
+ ];
+ const sanitized = {
+ ...headers
+ };
+ for (const key of Object.keys(sanitized)){
+ if (sensitiveKeys.some((s)=>key.toLowerCase().includes(s))) delete sanitized[key];
+ }
+ return sanitized;
+}
+const __test__ = {
+ sanitizeHeaders
+};
+function generateDetailId(model) {
+ const timestamp = new Date().toISOString();
+ const random = Math.random().toString(36).substring(2, 8);
+ const modelPart = model ? model.replace(/[^a-zA-Z0-9-]/g, "-") : "unknown";
+ return `${timestamp}-${random}-${modelPart}`;
+}
+function truncateField(obj, maxSize) {
+ const str = JSON.stringify(obj || {});
+ if (str.length > maxSize) {
+ return {
+ _truncated: true,
+ _originalSize: str.length,
+ _preview: str.substring(0, 200)
+ };
+ }
+ return obj || {};
+}
+async function flushToDatabase() {
+ if (isFlushing) return;
+ if (writeBuffer.length === 0) return;
+ isFlushing = true;
+ try {
+ // Drain entire buffer (loop in case more pushed during await)
+ while(writeBuffer.length > 0){
+ const items = writeBuffer.splice(0, writeBuffer.length);
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const config = await getObservabilityConfig();
+ db.transaction(()=>{
+ for (const item of items){
+ if (!item.id) item.id = generateDetailId(item.model);
+ if (!item.timestamp) item.timestamp = new Date().toISOString();
+ if (item.request?.headers) item.request.headers = sanitizeHeaders(item.request.headers);
+ const record = {
+ id: item.id,
+ provider: item.provider || null,
+ model: item.model || null,
+ connectionId: item.connectionId || null,
+ timestamp: item.timestamp,
+ status: item.status || null,
+ apiKey: item.apiKey || null,
+ latency: item.latency || {},
+ tokens: item.tokens || {},
+ request: truncateField(item.request, config.maxJsonSize),
+ providerRequest: truncateField(item.providerRequest, config.maxJsonSize),
+ providerResponse: truncateField(item.providerResponse, config.maxJsonSize),
+ response: truncateField(item.response, config.maxJsonSize),
+ pxpipe: item.pxpipe || undefined
+ };
+ db.run(`INSERT INTO requestDetails(id, timestamp, provider, model, connectionId, status, apiKey, data) VALUES(?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET timestamp = excluded.timestamp, provider = excluded.provider, model = excluded.model, connectionId = excluded.connectionId, status = excluded.status, apiKey = excluded.apiKey, data = excluded.data`, [
+ record.id,
+ record.timestamp,
+ record.provider,
+ record.model,
+ record.connectionId,
+ record.status,
+ record.apiKey,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(record)
+ ]);
+ }
+ const cnt = db.get(`SELECT COUNT(*) as c FROM requestDetails`);
+ if (cnt && cnt.c > config.maxRecords) {
+ db.run(`DELETE FROM requestDetails WHERE id IN (SELECT id FROM requestDetails ORDER BY timestamp ASC LIMIT ?)`, [
+ cnt.c - config.maxRecords
+ ]);
+ }
+ });
+ }
+ } catch (e) {
+ console.error("[requestDetailsRepo] Batch write failed:", e);
+ } finally{
+ isFlushing = false;
+ }
+}
+async function saveRequestDetail(detail) {
+ const config = await getObservabilityConfig();
+ if (!config.enabled) {
+ return;
+ }
+ writeBuffer.push(detail);
+ // Trigger immediate flush if batch threshold reached.
+ // flushToDatabase() drains entire buffer in a loop, so all pushes during await are persisted.
+ if (writeBuffer.length >= config.batchSize) {
+ if (flushTimer) {
+ clearTimeout(flushTimer);
+ flushTimer = null;
+ }
+ flushToDatabase().catch((e)=>console.error("[requestDetailsRepo] flush err:", e));
+ } else if (!flushTimer) {
+ flushTimer = setTimeout(()=>{
+ flushTimer = null;
+ flushToDatabase().catch(()=>{});
+ }, config.flushIntervalMs);
+ }
+}
+async function getRequestDetails(filter = {}) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const conds = [];
+ const params = [];
+ if (filter.provider) {
+ conds.push("provider = ?");
+ params.push(filter.provider);
+ }
+ if (filter.model) {
+ conds.push("model = ?");
+ params.push(filter.model);
+ }
+ if (filter.connectionId) {
+ conds.push("connectionId = ?");
+ params.push(filter.connectionId);
+ }
+ if (filter.status) {
+ conds.push("status = ?");
+ params.push(filter.status);
+ }
+ if (filter.apiKey) {
+ conds.push("apiKey = ?");
+ params.push(filter.apiKey);
+ }
+ if (filter.startDate) {
+ conds.push("timestamp >= ?");
+ params.push(new Date(filter.startDate).toISOString());
+ }
+ if (filter.endDate) {
+ conds.push("timestamp <= ?");
+ params.push(new Date(filter.endDate).toISOString());
+ }
+ const where = conds.length ? `WHERE ${conds.join(" AND ")}` : "";
+ const cntRow = db.get(`SELECT COUNT(*) as c FROM requestDetails ${where}`, params);
+ const totalItems = cntRow ? cntRow.c : 0;
+ const page = filter.page || 1;
+ const pageSize = filter.pageSize || 50;
+ const totalPages = Math.ceil(totalItems / pageSize);
+ const offset = (page - 1) * pageSize;
+ const rows = db.all(`SELECT data FROM requestDetails ${where} ORDER BY timestamp DESC LIMIT ? OFFSET ?`, [
+ ...params,
+ pageSize,
+ offset
+ ]);
+ const details = rows.map((r)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.data, {}));
+ return {
+ details,
+ pagination: {
+ page,
+ pageSize,
+ totalItems,
+ totalPages,
+ hasNext: page < totalPages,
+ hasPrev: page > 1
+ }
+ };
+}
+async function getDistinctProviders() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT DISTINCT provider FROM requestDetails WHERE provider IS NOT NULL ORDER BY provider ASC`);
+ return rows.map((r)=>r.provider);
+}
+async function getDistinctModels() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT DISTINCT model FROM requestDetails WHERE model IS NOT NULL AND model != '' ORDER BY model ASC`);
+ return rows.map((r)=>r.model);
+}
+async function getDistinctApiKeys() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT DISTINCT apiKey FROM requestDetails WHERE apiKey IS NOT NULL AND apiKey != '' ORDER BY apiKey ASC`);
+ return rows.map((r)=>r.apiKey);
+}
+async function getDistinctStatuses() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT DISTINCT status FROM requestDetails WHERE status IS NOT NULL AND status != '' ORDER BY status ASC`);
+ return rows.map((r)=>r.status);
+}
+async function getRequestDetailById(id) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT data FROM requestDetails WHERE id = ?`, [
+ id
+ ]);
+ return row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, null) : null;
+}
+const _shutdownHandler = async ()=>{
+ if (flushTimer) {
+ clearTimeout(flushTimer);
+ flushTimer = null;
+ }
+ if (writeBuffer.length > 0) await flushToDatabase();
+};
+function ensureShutdownHandler() {
+ process.off("beforeExit", _shutdownHandler);
+ process.off("SIGINT", _shutdownHandler);
+ process.off("SIGTERM", _shutdownHandler);
+ process.off("exit", _shutdownHandler);
+ process.on("beforeExit", _shutdownHandler);
+ process.on("SIGINT", _shutdownHandler);
+ process.on("SIGTERM", _shutdownHandler);
+ process.on("exit", _shutdownHandler);
+}
+ensureShutdownHandler();
+}),
+"[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "exportSettings",
+ ()=>exportSettings,
+ "getCloudUrl",
+ ()=>getCloudUrl,
+ "getSettings",
+ ()=>getSettings,
+ "isCloudEnabled",
+ ()=>isCloudEnabled,
+ "mergeWithDefaults",
+ ()=>mergeWithDefaults,
+ "updateSettings",
+ ()=>updateSettings
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+;
+;
+const DEFAULT_MITM_ROUTER_BASE = "http://localhost:20128";
+const DEFAULT_HEADROOM_URL = process.env.HEADROOM_URL || "http://localhost:8787";
+const DEFAULT_SETTINGS = {
+ cloudEnabled: false,
+ tunnelEnabled: false,
+ tunnelUrl: "",
+ tunnelProvider: "cloudflare",
+ tailscaleEnabled: false,
+ tailscaleUrl: "",
+ stickyRoundRobinLimit: 3,
+ providerStrategies: {},
+ providerTimeouts: {},
+ defaultTimeoutMs: null,
+ quotaVisibility: {},
+ comboStrategy: "fallback",
+ comboStickyRoundRobinLimit: 1,
+ comboStrategies: {},
+ capacityAdapter: {
+ vision: {
+ enabled: true,
+ roundRobin: false,
+ models: []
+ },
+ pdf: {
+ enabled: false,
+ roundRobin: false,
+ models: []
+ },
+ audioInput: {
+ enabled: true,
+ roundRobin: false,
+ models: []
+ },
+ videoInput: {
+ enabled: false,
+ roundRobin: false,
+ models: []
+ }
+ },
+ requireLogin: true,
+ requireApiKey: true,
+ tunnelDashboardAccess: true,
+ authMode: "password",
+ logLevel: "info",
+ ssoType: "oidc",
+ oidcIssuerUrl: "",
+ oidcClientId: "",
+ oidcClientSecret: "",
+ oidcScopes: "openid profile email",
+ oidcLoginLabel: "Sign in with OIDC",
+ samlEntryPoint: "",
+ samlIssuer: "urn:9router:sp",
+ samlCert: "",
+ samlLoginLabel: "Sign in with SAML SSO",
+ samlAttributeEmail: "email",
+ samlAttributeName: "name",
+ enableObservability: false,
+ observabilityMaxRecords: 1000,
+ observabilityBatchSize: 20,
+ observabilityFlushIntervalMs: 5000,
+ observabilityMaxJsonSize: 5,
+ outboundProxyEnabled: false,
+ outboundProxyUrl: "",
+ outboundNoProxy: "",
+ mitmRouterBaseUrl: DEFAULT_MITM_ROUTER_BASE,
+ dnsToolEnabled: {},
+ rtkEnabled: true,
+ headroomEnabled: false,
+ headroomUrl: DEFAULT_HEADROOM_URL,
+ headroomCompressUserMessages: false,
+ cavemanEnabled: false,
+ cavemanLevel: "full",
+ ponytailEnabled: false,
+ ponytailLevel: "full",
+ pxpipeEnabled: false,
+ pxpipeAutoInstall: true,
+ pxpipeMinChars: 25000,
+ pxpipeTimeoutMs: 15000
+};
+async function readRaw() {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const row = db.get(`SELECT data FROM settings WHERE id = 1`);
+ return row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, {}) : {};
+}
+function mergeWithDefaults(raw) {
+ const merged = {
+ ...DEFAULT_SETTINGS,
+ ...raw || {}
+ };
+ for (const [key, defVal] of Object.entries(DEFAULT_SETTINGS)){
+ if (merged[key] === undefined) {
+ if (key === "outboundProxyEnabled" && typeof merged.outboundProxyUrl === "string" && merged.outboundProxyUrl.trim()) {
+ merged[key] = true;
+ } else {
+ merged[key] = defVal;
+ }
+ }
+ }
+ return merged;
+}
+async function getSettings() {
+ const raw = await readRaw();
+ return mergeWithDefaults(raw);
+}
+async function updateSettings(updates) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ let next;
+ db.transaction(function() {
+ const row = db.get(`SELECT data FROM settings WHERE id = 1`);
+ const current = row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, {}) : {};
+ next = {
+ ...current,
+ ...updates
+ };
+ db.run(`INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`, [
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(next)
+ ]);
+ });
+ return mergeWithDefaults(next);
+}
+async function isCloudEnabled() {
+ const settings = await getSettings();
+ return settings.cloudEnabled === true;
+}
+async function getCloudUrl() {
+ const settings = await getSettings();
+ return settings.cloudUrl || process.env.CLOUD_URL || ("TURBOPACK compile-time value", "https://9router.com") || "";
+}
+async function exportSettings() {
+ return await readRaw();
+}
+}),
+"[project]/src/lib/db/repos/usageRepo.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getActiveRequests",
+ ()=>getActiveRequests,
+ "getChartData",
+ ()=>getChartData,
+ "getRecentLogs",
+ ()=>getRecentLogs,
+ "getUsageHistory",
+ ()=>getUsageHistory,
+ "getUsageStats",
+ ()=>getUsageStats,
+ "saveRequestUsage",
+ ()=>saveRequestUsage,
+ "statsEmitter",
+ ()=>statsEmitter,
+ "trackPendingRequest",
+ ()=>trackPendingRequest
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$events__$5b$external$5d$__$28$events$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/events [external] (events, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/driver.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/jsonCol.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$metaStore$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/helpers/metaStore.js [middleware] (ecmascript)");
+;
+;
+;
+;
+function maskApiKey(key) {
+ if (!key || typeof key !== "string") return null;
+ if (key.length <= 8) return key.charAt(0) + "***";
+ return key.slice(0, 8) + "***";
+}
+const PENDING_TIMEOUT_MS = 60 * 1000;
+const RING_CAP = 50;
+const CONN_CACHE_TTL_MS = 30 * 1000;
+const PERIOD_MS = {
+ "24h": 86400000,
+ "7d": 604800000,
+ "30d": 2592000000,
+ "60d": 5184000000
+};
+// In-memory state shared across Next.js modules
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._pendingRequests) /*TURBOPACK member replacement*/ __turbopack_context__.g._pendingRequests = {
+ byModel: {},
+ byAccount: {}
+};
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._lastErrorProvider) /*TURBOPACK member replacement*/ __turbopack_context__.g._lastErrorProvider = {
+ provider: "",
+ ts: 0
+};
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitter) {
+ /*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitter = new __TURBOPACK__imported__module__$5b$externals$5d2f$events__$5b$external$5d$__$28$events$2c$__cjs$29$__["EventEmitter"]();
+ /*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitter.setMaxListeners(50);
+}
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._pendingTimers) /*TURBOPACK member replacement*/ __turbopack_context__.g._pendingTimers = {};
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._recentRing) /*TURBOPACK member replacement*/ __turbopack_context__.g._recentRing = {
+ items: [],
+ initialized: false
+};
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._connectionMapCache) /*TURBOPACK member replacement*/ __turbopack_context__.g._connectionMapCache = {
+ map: {},
+ ts: 0
+};
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitTimers) /*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitTimers = {
+ pending: null,
+ update: null
+};
+const pendingRequests = /*TURBOPACK member replacement*/ __turbopack_context__.g._pendingRequests;
+const lastErrorProvider = /*TURBOPACK member replacement*/ __turbopack_context__.g._lastErrorProvider;
+const pendingTimers = /*TURBOPACK member replacement*/ __turbopack_context__.g._pendingTimers;
+const recentRing = /*TURBOPACK member replacement*/ __turbopack_context__.g._recentRing;
+const connCache = /*TURBOPACK member replacement*/ __turbopack_context__.g._connectionMapCache;
+const statsEmitTimers = /*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitTimers;
+const statsEmitter = /*TURBOPACK member replacement*/ __turbopack_context__.g._statsEmitter;
+function scheduleStatsEvent(event, delayMs = 150) {
+ const key = event === "update" ? "update" : "pending";
+ if (statsEmitTimers[key]) return;
+ statsEmitTimers[key] = setTimeout(()=>{
+ statsEmitTimers[key] = null;
+ statsEmitter.emit(event);
+ }, delayMs);
+ statsEmitTimers[key]?.unref?.();
+}
+function getLocalDateKey(timestamp) {
+ const d = timestamp ? new Date(timestamp) : new Date();
+ return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
+}
+function addToCounter(target, key, values) {
+ if (!target[key]) target[key] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0
+ };
+ target[key].requests += values.requests || 1;
+ target[key].promptTokens += values.promptTokens || 0;
+ target[key].completionTokens += values.completionTokens || 0;
+ target[key].cachedTokens += values.cachedTokens || 0;
+ target[key].cost += values.cost || 0;
+ if (values.meta) Object.assign(target[key], values.meta);
+}
+function aggregateEntryToDay(day, entry) {
+ const promptTokens = entry.tokens?.prompt_tokens || entry.tokens?.input_tokens || 0;
+ const completionTokens = entry.tokens?.completion_tokens || entry.tokens?.output_tokens || 0;
+ const cachedTokens = entry.tokens?.cached_tokens || entry.tokens?.cache_read_input_tokens || 0;
+ const cost = entry.cost || 0;
+ const vals = {
+ promptTokens,
+ completionTokens,
+ cachedTokens,
+ cost
+ };
+ day.requests = (day.requests || 0) + 1;
+ day.promptTokens = (day.promptTokens || 0) + promptTokens;
+ day.completionTokens = (day.completionTokens || 0) + completionTokens;
+ day.cachedTokens = (day.cachedTokens || 0) + cachedTokens;
+ day.cost = (day.cost || 0) + cost;
+ day.byProvider ||= {};
+ day.byModel ||= {};
+ day.byAccount ||= {};
+ day.byApiKey ||= {};
+ day.byEndpoint ||= {};
+ if (entry.provider) addToCounter(day.byProvider, entry.provider, vals);
+ const modelKey = entry.provider ? `${entry.model}|${entry.provider}` : entry.model;
+ addToCounter(day.byModel, modelKey, {
+ ...vals,
+ meta: {
+ rawModel: entry.model,
+ provider: entry.provider
+ }
+ });
+ if (entry.connectionId) {
+ addToCounter(day.byAccount, entry.connectionId, {
+ ...vals,
+ meta: {
+ rawModel: entry.model,
+ provider: entry.provider
+ }
+ });
+ }
+ const apiKeyVal = entry.apiKey && typeof entry.apiKey === "string" ? entry.apiKey : "local-no-key";
+ const akModelKey = `${apiKeyVal}|${entry.model}|${entry.provider || "unknown"}`;
+ addToCounter(day.byApiKey, akModelKey, {
+ ...vals,
+ meta: {
+ rawModel: entry.model,
+ provider: entry.provider,
+ apiKey: entry.apiKey || null
+ }
+ });
+ const endpoint = entry.endpoint || "Unknown";
+ const epKey = `${endpoint}|${entry.model}|${entry.provider || "unknown"}`;
+ addToCounter(day.byEndpoint, epKey, {
+ ...vals,
+ meta: {
+ endpoint,
+ rawModel: entry.model,
+ provider: entry.provider
+ }
+ });
+}
+function pushToRing(entry) {
+ recentRing.items.push(entry);
+ if (recentRing.items.length > RING_CAP) {
+ recentRing.items = recentRing.items.slice(-RING_CAP);
+ }
+}
+async function getConnectionMapCached() {
+ if (Date.now() - connCache.ts < CONN_CACHE_TTL_MS) return connCache.map;
+ try {
+ const { getProviderConnections } = await __turbopack_context__.A("[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript, async loader)");
+ const all = await getProviderConnections();
+ const map = {};
+ for (const c of all)map[c.id] = c.name || c.email || c.id;
+ connCache.map = map;
+ connCache.ts = Date.now();
+ } catch {}
+ return connCache.map;
+}
+async function ensureRingInitialized() {
+ if (recentRing.initialized) return;
+ recentRing.initialized = true;
+ try {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT timestamp, provider, model, connectionId, apiKey, endpoint, cost, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?`, [
+ RING_CAP
+ ]);
+ recentRing.items = rows.reverse().map((r)=>({
+ timestamp: r.timestamp,
+ provider: r.provider,
+ model: r.model,
+ connectionId: r.connectionId,
+ apiKey: r.apiKey,
+ endpoint: r.endpoint,
+ cost: r.cost,
+ status: r.status,
+ tokens: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.tokens, {})
+ }));
+ } catch {}
+}
+async function calculateCost(provider, model, tokens) {
+ if (!tokens || !provider || !model) return 0;
+ try {
+ const { getPricingForModel } = await __turbopack_context__.A("[project]/src/lib/db/repos/pricingRepo.js [middleware] (ecmascript, async loader)");
+ const pricing = await getPricingForModel(provider, model);
+ if (!pricing) return 0;
+ // Delegate the actual math to the single source of truth (avoids the two
+ // copies drifting apart — see open-sse/providers/pricing.js for the
+ // cache-inclusive prompt_tokens convention this assumes).
+ const { calculateCostFromTokens } = await __turbopack_context__.A("[project]/open-sse/providers/pricing.js [middleware] (ecmascript, async loader)");
+ return calculateCostFromTokens(tokens, pricing);
+ } catch (e) {
+ console.error("Error calculating cost:", e);
+ return 0;
+ }
+}
+function trackPendingRequest(model, provider, connectionId, started, error = false) {
+ const modelKey = provider ? `${model} (${provider})` : model;
+ const timerKey = `${connectionId}|${modelKey}`;
+ if (!pendingRequests.byModel[modelKey]) pendingRequests.byModel[modelKey] = 0;
+ pendingRequests.byModel[modelKey] = Math.max(0, pendingRequests.byModel[modelKey] + (started ? 1 : -1));
+ if (pendingRequests.byModel[modelKey] === 0) delete pendingRequests.byModel[modelKey];
+ if (connectionId) {
+ if (!pendingRequests.byAccount[connectionId]) pendingRequests.byAccount[connectionId] = {};
+ if (!pendingRequests.byAccount[connectionId][modelKey]) pendingRequests.byAccount[connectionId][modelKey] = 0;
+ pendingRequests.byAccount[connectionId][modelKey] = Math.max(0, pendingRequests.byAccount[connectionId][modelKey] + (started ? 1 : -1));
+ if (pendingRequests.byAccount[connectionId][modelKey] === 0) {
+ delete pendingRequests.byAccount[connectionId][modelKey];
+ if (Object.keys(pendingRequests.byAccount[connectionId]).length === 0) {
+ delete pendingRequests.byAccount[connectionId];
+ }
+ }
+ }
+ if (started) {
+ clearTimeout(pendingTimers[timerKey]);
+ pendingTimers[timerKey] = setTimeout(()=>{
+ delete pendingTimers[timerKey];
+ if (pendingRequests.byModel[modelKey] > 0) pendingRequests.byModel[modelKey] = 0;
+ if (connectionId && pendingRequests.byAccount[connectionId]?.[modelKey] > 0) {
+ pendingRequests.byAccount[connectionId][modelKey] = 0;
+ }
+ scheduleStatsEvent("pending");
+ }, PENDING_TIMEOUT_MS);
+ } else {
+ clearTimeout(pendingTimers[timerKey]);
+ delete pendingTimers[timerKey];
+ }
+ if (!started && error && provider) {
+ lastErrorProvider.provider = provider.toLowerCase();
+ lastErrorProvider.ts = Date.now();
+ }
+ // [PENDING] console line removed; lifecycle is visible via "▶" and "📊 done" lines
+ scheduleStatsEvent("pending");
+}
+async function getActiveRequests() {
+ const activeRequests = [];
+ const connectionMap = await getConnectionMapCached();
+ for (const [connectionId, models] of Object.entries(pendingRequests.byAccount)){
+ for (const [modelKey, count] of Object.entries(models)){
+ if (count > 0) {
+ const accountName = connectionMap[connectionId] || `Account ${connectionId.slice(0, 8)}...`;
+ const match = modelKey.match(/^(.*) \((.*)\)$/);
+ activeRequests.push({
+ model: match ? match[1] : modelKey,
+ provider: match ? match[2] : "unknown",
+ account: accountName,
+ count
+ });
+ }
+ }
+ }
+ await ensureRingInitialized();
+ const seen = new Set();
+ const recentRequests = [
+ ...recentRing.items
+ ].sort((a, b)=>new Date(b.timestamp) - new Date(a.timestamp)).map((e)=>{
+ const t = e.tokens || {};
+ return {
+ timestamp: e.timestamp,
+ model: e.model,
+ provider: e.provider || "",
+ promptTokens: t.prompt_tokens || t.input_tokens || 0,
+ completionTokens: t.completion_tokens || t.output_tokens || 0,
+ status: e.status || "ok"
+ };
+ }).filter((e)=>{
+ if (e.promptTokens === 0 && e.completionTokens === 0) return false;
+ const minute = e.timestamp ? e.timestamp.slice(0, 16) : "";
+ const key = `${e.model}|${e.provider}|${e.promptTokens}|${e.completionTokens}|${minute}`;
+ if (seen.has(key)) return false;
+ seen.add(key);
+ return true;
+ }).slice(0, 20);
+ const errorProvider = Date.now() - lastErrorProvider.ts < 10000 ? lastErrorProvider.provider : "";
+ return {
+ activeRequests,
+ recentRequests,
+ errorProvider
+ };
+}
+async function saveRequestUsage(entry) {
+ try {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ if (!entry.timestamp) entry.timestamp = new Date().toISOString();
+ entry.cost = await calculateCost(entry.provider, entry.model, entry.tokens);
+ const tokens = entry.tokens || {};
+ const promptTokens = tokens.prompt_tokens || tokens.input_tokens || 0;
+ const completionTokens = tokens.completion_tokens || tokens.output_tokens || 0;
+ let inserted = false;
+ // All 3 writes (history insert, daily upsert, lifetime counter) in ONE transaction.
+ // better-sqlite3 is sync → no JS yield mid-transaction → no race in same process.
+ db.transaction(()=>{
+ const existing = db.get(`SELECT id, endpoint FROM usageHistory
+ WHERE timestamp = ?
+ AND COALESCE(provider, '') = COALESCE(?, '')
+ AND COALESCE(model, '') = COALESCE(?, '')
+ AND COALESCE(connectionId, '') = COALESCE(?, '')
+ AND COALESCE(apiKey, '') = COALESCE(?, '')
+ AND promptTokens = ?
+ AND completionTokens = ?
+ ORDER BY id DESC LIMIT 1`, [
+ entry.timestamp,
+ entry.provider || null,
+ entry.model || null,
+ entry.connectionId || null,
+ entry.apiKey || null,
+ promptTokens,
+ completionTokens
+ ]);
+ if (existing) {
+ if (!existing.endpoint && entry.endpoint) {
+ db.run(`UPDATE usageHistory SET endpoint = ? WHERE id = ?`, [
+ entry.endpoint,
+ existing.id
+ ]);
+ }
+ return;
+ }
+ db.run(`INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
+ entry.timestamp,
+ entry.provider || null,
+ entry.model || null,
+ entry.connectionId || null,
+ entry.apiKey || null,
+ entry.endpoint || null,
+ promptTokens,
+ completionTokens,
+ entry.cost || 0,
+ entry.status || "ok",
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(tokens),
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])({})
+ ]);
+ const dateKey = getLocalDateKey(entry.timestamp);
+ const row = db.get(`SELECT data FROM usageDaily WHERE dateKey = ?`, [
+ dateKey
+ ]);
+ const day = row ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(row.data, {}) : {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cost: 0,
+ byProvider: {},
+ byModel: {},
+ byAccount: {},
+ byApiKey: {},
+ byEndpoint: {}
+ };
+ aggregateEntryToDay(day, entry);
+ db.run(`INSERT INTO usageDaily(dateKey, data) VALUES(?, ?) ON CONFLICT(dateKey) DO UPDATE SET data = excluded.data`, [
+ dateKey,
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stringifyJson"])(day)
+ ]);
+ // Atomic counter increment in same transaction
+ const cur = db.get(`SELECT value FROM _meta WHERE key = 'totalRequestsLifetime'`);
+ const next = (cur ? parseInt(cur.value, 10) : 0) + 1;
+ db.run(`INSERT INTO _meta(key, value) VALUES('totalRequestsLifetime', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`, [
+ String(next)
+ ]);
+ inserted = true;
+ });
+ if (inserted) {
+ pushToRing(entry);
+ scheduleStatsEvent("update", 250);
+ }
+ } catch (e) {
+ console.error("Failed to save usage stats:", e);
+ }
+}
+async function getUsageHistory(filter = {}) {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const conds = [];
+ const params = [];
+ if (filter.provider) {
+ conds.push("provider = ?");
+ params.push(filter.provider);
+ }
+ if (filter.model) {
+ conds.push("model = ?");
+ params.push(filter.model);
+ }
+ if (filter.startDate) {
+ conds.push("timestamp >= ?");
+ params.push(new Date(filter.startDate).toISOString());
+ }
+ if (filter.endDate) {
+ conds.push("timestamp <= ?");
+ params.push(new Date(filter.endDate).toISOString());
+ }
+ const where = conds.length ? `WHERE ${conds.join(" AND ")}` : "";
+ const rows = db.all(`SELECT timestamp, provider, model, connectionId, apiKey, endpoint, cost, status, tokens FROM usageHistory ${where} ORDER BY id ASC`, params);
+ return rows.map((r)=>({
+ timestamp: r.timestamp,
+ provider: r.provider,
+ model: r.model,
+ connectionId: r.connectionId,
+ apiKeyMasked: maskApiKey(r.apiKey),
+ endpoint: r.endpoint,
+ cost: r.cost,
+ status: r.status,
+ tokens: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.tokens, {})
+ }));
+}
+function loadDaysInRange(adapter, maxDays) {
+ if (maxDays == null) {
+ return adapter.all(`SELECT dateKey, data FROM usageDaily`);
+ }
+ const today = new Date();
+ const cutoff = new Date(today.getFullYear(), today.getMonth(), today.getDate() - maxDays + 1);
+ const cutoffKey = `${cutoff.getFullYear()}-${String(cutoff.getMonth() + 1).padStart(2, "0")}-${String(cutoff.getDate()).padStart(2, "0")}`;
+ return adapter.all(`SELECT dateKey, data FROM usageDaily WHERE dateKey >= ?`, [
+ cutoffKey
+ ]);
+}
+async function getUsageStats(period = "all") {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const [{ getProviderConnections }, { getApiKeys }, { getProviderNodes }] = await Promise.all([
+ __turbopack_context__.A("[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript, async loader)"),
+ __turbopack_context__.A("[project]/src/lib/db/repos/apiKeysRepo.js [middleware] (ecmascript, async loader)"),
+ __turbopack_context__.A("[project]/src/lib/db/repos/nodesRepo.js [middleware] (ecmascript, async loader)")
+ ]);
+ let allConnections = [];
+ try {
+ allConnections = await getProviderConnections();
+ } catch {}
+ const connectionMap = {};
+ for (const c of allConnections)connectionMap[c.id] = c.name || c.email || c.id;
+ const providerNodeNameMap = {};
+ try {
+ const nodes = await getProviderNodes();
+ for (const n of nodes)if (n.id && n.name) providerNodeNameMap[n.id] = n.name;
+ } catch {}
+ let allApiKeys = [];
+ try {
+ allApiKeys = await getApiKeys();
+ } catch {}
+ const apiKeyMap = {};
+ for (const k of allApiKeys)apiKeyMap[k.key] = {
+ name: k.name,
+ id: k.id,
+ createdAt: k.createdAt
+ };
+ // recentRequests from live history (last 100 entries enough for 20 deduped)
+ const recentRows = db.all(`SELECT timestamp, provider, model, tokens, status FROM usageHistory ORDER BY id DESC LIMIT 100`);
+ const seen = new Set();
+ const recentRequests = recentRows.map((r)=>{
+ const t = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.tokens, {}) || {};
+ return {
+ timestamp: r.timestamp,
+ model: r.model,
+ provider: r.provider || "",
+ promptTokens: t.prompt_tokens || t.input_tokens || 0,
+ completionTokens: t.completion_tokens || t.output_tokens || 0,
+ cachedTokens: t.cached_tokens || t.cache_read_input_tokens || 0,
+ status: r.status || "ok"
+ };
+ }).filter((e)=>{
+ if (e.promptTokens === 0 && e.completionTokens === 0) return false;
+ const minute = e.timestamp ? e.timestamp.slice(0, 16) : "";
+ const key = `${e.model}|${e.provider}|${e.promptTokens}|${e.completionTokens}|${minute}`;
+ if (seen.has(key)) return false;
+ seen.add(key);
+ return true;
+ }).slice(0, 20);
+ const stats = {
+ totalRequests: 0,
+ totalPromptTokens: 0,
+ totalCompletionTokens: 0,
+ totalCachedTokens: 0,
+ totalCost: 0,
+ byProvider: {},
+ byModel: {},
+ byAccount: {},
+ byApiKey: {},
+ byEndpoint: {},
+ last10Minutes: [],
+ pending: pendingRequests,
+ activeRequests: [],
+ recentRequests,
+ errorProvider: Date.now() - lastErrorProvider.ts < 10000 ? lastErrorProvider.provider : ""
+ };
+ // Active requests
+ for (const [connectionId, models] of Object.entries(pendingRequests.byAccount)){
+ for (const [modelKey, count] of Object.entries(models)){
+ if (count > 0) {
+ const accountName = connectionMap[connectionId] || `Account ${connectionId.slice(0, 8)}...`;
+ const match = modelKey.match(/^(.*) \((.*)\)$/);
+ stats.activeRequests.push({
+ model: match ? match[1] : modelKey,
+ provider: match ? match[2] : "unknown",
+ account: accountName,
+ count
+ });
+ }
+ }
+ }
+ // last10Minutes — query 10min window
+ const now = new Date();
+ const currentMinuteStart = new Date(Math.floor(now.getTime() / 60000) * 60000);
+ const tenMinutesAgo = new Date(currentMinuteStart.getTime() - 9 * 60 * 1000);
+ const bucketMap = {};
+ for(let i = 0; i < 10; i++){
+ const ts = currentMinuteStart.getTime() - (9 - i) * 60 * 1000;
+ bucketMap[ts] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cost: 0
+ };
+ stats.last10Minutes.push(bucketMap[ts]);
+ }
+ const recent10 = db.all(`SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ? AND timestamp <= ?`, [
+ tenMinutesAgo.toISOString(),
+ now.toISOString()
+ ]);
+ for (const r of recent10){
+ const tt = new Date(r.timestamp).getTime();
+ const minuteStart = Math.floor(tt / 60000) * 60000;
+ if (bucketMap[minuteStart]) {
+ bucketMap[minuteStart].requests++;
+ bucketMap[minuteStart].promptTokens += r.promptTokens || 0;
+ bucketMap[minuteStart].completionTokens += r.completionTokens || 0;
+ bucketMap[minuteStart].cost += r.cost || 0;
+ }
+ }
+ const useDailySummary = period !== "24h" && period !== "today";
+ if (useDailySummary) {
+ const periodDays = {
+ "7d": 7,
+ "30d": 30,
+ "60d": 60
+ };
+ const maxDays = periodDays[period] || null;
+ const dayRows = loadDaysInRange(db, maxDays);
+ for (const dr of dayRows){
+ const dateKey = dr.dateKey;
+ const day = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(dr.data, {});
+ stats.totalPromptTokens += day.promptTokens || 0;
+ stats.totalCompletionTokens += day.completionTokens || 0;
+ stats.totalCachedTokens += day.cachedTokens || 0;
+ stats.totalCost += day.cost || 0;
+ for (const [prov, p] of Object.entries(day.byProvider || {})){
+ if (!stats.byProvider[prov]) stats.byProvider[prov] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ lastUsed: dateKey
+ };
+ stats.byProvider[prov].requests += p.requests || 0;
+ stats.byProvider[prov].promptTokens += p.promptTokens || 0;
+ stats.byProvider[prov].completionTokens += p.completionTokens || 0;
+ stats.byProvider[prov].cachedTokens += p.cachedTokens || 0;
+ stats.byProvider[prov].cost += p.cost || 0;
+ if (dateKey > (stats.byProvider[prov].lastUsed || "")) stats.byProvider[prov].lastUsed = dateKey;
+ }
+ for (const [mk, m] of Object.entries(day.byModel || {})){
+ const rawModel = m.rawModel || mk.split("|")[0];
+ const provider = m.provider || mk.split("|")[1] || "";
+ const statsKey = provider ? `${rawModel} (${provider})` : rawModel;
+ const providerDisplayName = providerNodeNameMap[provider] || provider;
+ if (!stats.byModel[statsKey]) {
+ stats.byModel[statsKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel,
+ provider: providerDisplayName,
+ lastUsed: dateKey
+ };
+ }
+ stats.byModel[statsKey].requests += m.requests || 0;
+ stats.byModel[statsKey].promptTokens += m.promptTokens || 0;
+ stats.byModel[statsKey].completionTokens += m.completionTokens || 0;
+ stats.byModel[statsKey].cachedTokens += m.cachedTokens || 0;
+ stats.byModel[statsKey].cost += m.cost || 0;
+ if (dateKey > (stats.byModel[statsKey].lastUsed || "")) stats.byModel[statsKey].lastUsed = dateKey;
+ }
+ for (const [connId, a] of Object.entries(day.byAccount || {})){
+ const accountName = connectionMap[connId] || `Account ${connId.slice(0, 8)}...`;
+ const rawModel = a.rawModel || "";
+ const provider = a.provider || "";
+ const providerDisplayName = providerNodeNameMap[provider] || provider;
+ const accountKey = `${rawModel} (${provider} - ${accountName})`;
+ if (!stats.byAccount[accountKey]) {
+ stats.byAccount[accountKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel,
+ provider: providerDisplayName,
+ connectionId: connId,
+ accountName,
+ lastUsed: dateKey
+ };
+ }
+ stats.byAccount[accountKey].requests += a.requests || 0;
+ stats.byAccount[accountKey].promptTokens += a.promptTokens || 0;
+ stats.byAccount[accountKey].completionTokens += a.completionTokens || 0;
+ stats.byAccount[accountKey].cachedTokens += a.cachedTokens || 0;
+ stats.byAccount[accountKey].cost += a.cost || 0;
+ if (dateKey > (stats.byAccount[accountKey].lastUsed || "")) stats.byAccount[accountKey].lastUsed = dateKey;
+ }
+ for (const [akKey, ak] of Object.entries(day.byApiKey || {})){
+ const rawModel = ak.rawModel || "";
+ const provider = ak.provider || "";
+ const providerDisplayName = providerNodeNameMap[provider] || provider;
+ const apiKeyVal = ak.apiKey;
+ const keyInfo = apiKeyVal ? apiKeyMap[apiKeyVal] : null;
+ const keyName = keyInfo?.name || (apiKeyVal ? apiKeyVal.slice(0, 8) + "..." : "Local (No API Key)");
+ const apiKeyMasked = maskApiKey(apiKeyVal);
+ const apiKeyKey = apiKeyMasked || "local-no-key";
+ if (!stats.byApiKey[akKey]) {
+ stats.byApiKey[akKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel,
+ provider: providerDisplayName,
+ apiKeyMasked,
+ keyName,
+ apiKeyKey,
+ lastUsed: dateKey
+ };
+ }
+ stats.byApiKey[akKey].requests += ak.requests || 0;
+ stats.byApiKey[akKey].promptTokens += ak.promptTokens || 0;
+ stats.byApiKey[akKey].completionTokens += ak.completionTokens || 0;
+ stats.byApiKey[akKey].cachedTokens += ak.cachedTokens || 0;
+ stats.byApiKey[akKey].cost += ak.cost || 0;
+ if (dateKey > (stats.byApiKey[akKey].lastUsed || "")) stats.byApiKey[akKey].lastUsed = dateKey;
+ }
+ for (const [epKey, ep] of Object.entries(day.byEndpoint || {})){
+ const endpoint = ep.endpoint || epKey.split("|")[0] || "Unknown";
+ const rawModel = ep.rawModel || "";
+ const provider = ep.provider || "";
+ const providerDisplayName = providerNodeNameMap[provider] || provider;
+ if (!stats.byEndpoint[epKey]) {
+ stats.byEndpoint[epKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ endpoint,
+ rawModel,
+ provider: providerDisplayName,
+ lastUsed: dateKey
+ };
+ }
+ stats.byEndpoint[epKey].requests += ep.requests || 0;
+ stats.byEndpoint[epKey].promptTokens += ep.promptTokens || 0;
+ stats.byEndpoint[epKey].completionTokens += ep.completionTokens || 0;
+ stats.byEndpoint[epKey].cachedTokens += ep.cachedTokens || 0;
+ stats.byEndpoint[epKey].cost += ep.cost || 0;
+ if (dateKey > (stats.byEndpoint[epKey].lastUsed || "")) stats.byEndpoint[epKey].lastUsed = dateKey;
+ }
+ }
+ // Overlay precise lastUsed timestamps from history
+ const overlayCutoff = maxDays ? Date.now() - maxDays * 86400000 : 0;
+ const histRows = db.all(`SELECT timestamp, provider, model, connectionId, apiKey, endpoint FROM usageHistory WHERE timestamp >= ?`, [
+ new Date(overlayCutoff).toISOString()
+ ]);
+ for (const e of histRows){
+ const ts = e.timestamp;
+ if (stats.byProvider[e.provider] && new Date(ts) > new Date(stats.byProvider[e.provider].lastUsed)) stats.byProvider[e.provider].lastUsed = ts;
+ const modelKey = e.provider ? `${e.model} (${e.provider})` : e.model;
+ if (stats.byModel[modelKey] && new Date(ts) > new Date(stats.byModel[modelKey].lastUsed)) stats.byModel[modelKey].lastUsed = ts;
+ if (e.connectionId) {
+ const accountName = connectionMap[e.connectionId] || `Account ${e.connectionId.slice(0, 8)}...`;
+ const accountKey = `${e.model} (${e.provider} - ${accountName})`;
+ if (stats.byAccount[accountKey] && new Date(ts) > new Date(stats.byAccount[accountKey].lastUsed)) stats.byAccount[accountKey].lastUsed = ts;
+ }
+ const apiKeyKey = e.apiKey && typeof e.apiKey === "string" ? `${e.apiKey}|${e.model}|${e.provider || "unknown"}` : "local-no-key";
+ if (stats.byApiKey[apiKeyKey] && new Date(ts) > new Date(stats.byApiKey[apiKeyKey].lastUsed)) stats.byApiKey[apiKeyKey].lastUsed = ts;
+ const endpoint = e.endpoint || "Unknown";
+ const endpointKey = `${endpoint}|${e.model}|${e.provider || "unknown"}`;
+ if (stats.byEndpoint[endpointKey] && new Date(ts) > new Date(stats.byEndpoint[endpointKey].lastUsed)) stats.byEndpoint[endpointKey].lastUsed = ts;
+ }
+ } else {
+ // 24h / today: live history
+ let cutoff;
+ if (period === "today") {
+ const startOfDay = new Date();
+ startOfDay.setHours(0, 0, 0, 0);
+ cutoff = startOfDay.toISOString();
+ } else {
+ cutoff = new Date(Date.now() - PERIOD_MS["24h"]).toISOString();
+ }
+ const filtered = db.all(`SELECT timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, tokens FROM usageHistory WHERE timestamp >= ?`, [
+ cutoff
+ ]);
+ for (const r of filtered){
+ const tokens = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.tokens, {}) || {};
+ const promptTokens = tokens.prompt_tokens || 0;
+ const completionTokens = tokens.completion_tokens || 0;
+ const cachedTokens = tokens.cached_tokens || tokens.cache_read_input_tokens || 0;
+ const entryCost = r.cost || 0;
+ const providerDisplayName = providerNodeNameMap[r.provider] || r.provider;
+ stats.totalPromptTokens += promptTokens;
+ stats.totalCompletionTokens += completionTokens;
+ stats.totalCachedTokens += cachedTokens;
+ stats.totalCost += entryCost;
+ if (!stats.byProvider[r.provider]) stats.byProvider[r.provider] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ lastUsed: r.timestamp
+ };
+ stats.byProvider[r.provider].requests++;
+ stats.byProvider[r.provider].promptTokens += promptTokens;
+ stats.byProvider[r.provider].completionTokens += completionTokens;
+ stats.byProvider[r.provider].cachedTokens += cachedTokens;
+ stats.byProvider[r.provider].cost += entryCost;
+ if (new Date(r.timestamp) > new Date(stats.byProvider[r.provider].lastUsed)) stats.byProvider[r.provider].lastUsed = r.timestamp;
+ const modelKey = r.provider ? `${r.model} (${r.provider})` : r.model;
+ if (!stats.byModel[modelKey]) {
+ stats.byModel[modelKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel: r.model,
+ provider: providerDisplayName,
+ lastUsed: r.timestamp
+ };
+ }
+ stats.byModel[modelKey].requests++;
+ stats.byModel[modelKey].promptTokens += promptTokens;
+ stats.byModel[modelKey].completionTokens += completionTokens;
+ stats.byModel[modelKey].cachedTokens += cachedTokens;
+ stats.byModel[modelKey].cost += entryCost;
+ if (new Date(r.timestamp) > new Date(stats.byModel[modelKey].lastUsed)) stats.byModel[modelKey].lastUsed = r.timestamp;
+ if (r.connectionId) {
+ const accountName = connectionMap[r.connectionId] || `Account ${r.connectionId.slice(0, 8)}...`;
+ const accountKey = `${r.model} (${r.provider} - ${accountName})`;
+ if (!stats.byAccount[accountKey]) {
+ stats.byAccount[accountKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel: r.model,
+ provider: providerDisplayName,
+ connectionId: r.connectionId,
+ accountName,
+ lastUsed: r.timestamp
+ };
+ }
+ stats.byAccount[accountKey].requests++;
+ stats.byAccount[accountKey].promptTokens += promptTokens;
+ stats.byAccount[accountKey].completionTokens += completionTokens;
+ stats.byAccount[accountKey].cachedTokens += cachedTokens;
+ stats.byAccount[accountKey].cost += entryCost;
+ if (new Date(r.timestamp) > new Date(stats.byAccount[accountKey].lastUsed)) stats.byAccount[accountKey].lastUsed = r.timestamp;
+ }
+ if (r.apiKey && typeof r.apiKey === "string") {
+ const keyInfo = apiKeyMap[r.apiKey];
+ const keyName = keyInfo?.name || r.apiKey.slice(0, 8) + "...";
+ const apiKeyMasked = maskApiKey(r.apiKey);
+ const akKey = `${apiKeyMasked}|${r.model}|${r.provider || "unknown"}`;
+ if (!stats.byApiKey[akKey]) {
+ stats.byApiKey[akKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel: r.model,
+ provider: providerDisplayName,
+ apiKeyMasked,
+ keyName,
+ apiKeyKey: apiKeyMasked,
+ lastUsed: r.timestamp
+ };
+ }
+ const ake = stats.byApiKey[akKey];
+ ake.requests++;
+ ake.promptTokens += promptTokens;
+ ake.completionTokens += completionTokens;
+ ake.cachedTokens += cachedTokens;
+ ake.cost += entryCost;
+ if (new Date(r.timestamp) > new Date(ake.lastUsed)) ake.lastUsed = r.timestamp;
+ } else {
+ if (!stats.byApiKey["local-no-key"]) {
+ stats.byApiKey["local-no-key"] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ rawModel: r.model,
+ provider: providerDisplayName,
+ apiKeyMasked: null,
+ keyName: "Local (No API Key)",
+ apiKeyKey: "local-no-key",
+ lastUsed: r.timestamp
+ };
+ }
+ const ake = stats.byApiKey["local-no-key"];
+ ake.requests++;
+ ake.promptTokens += promptTokens;
+ ake.completionTokens += completionTokens;
+ ake.cachedTokens += cachedTokens;
+ ake.cost += entryCost;
+ if (new Date(r.timestamp) > new Date(ake.lastUsed)) ake.lastUsed = r.timestamp;
+ }
+ const endpoint = r.endpoint || "Unknown";
+ const epKey = `${endpoint}|${r.model}|${r.provider || "unknown"}`;
+ if (!stats.byEndpoint[epKey]) {
+ stats.byEndpoint[epKey] = {
+ requests: 0,
+ promptTokens: 0,
+ completionTokens: 0,
+ cachedTokens: 0,
+ cost: 0,
+ endpoint,
+ rawModel: r.model,
+ provider: providerDisplayName,
+ lastUsed: r.timestamp
+ };
+ }
+ const epe = stats.byEndpoint[epKey];
+ epe.requests++;
+ epe.promptTokens += promptTokens;
+ epe.completionTokens += completionTokens;
+ epe.cachedTokens += cachedTokens;
+ epe.cost += entryCost;
+ if (new Date(r.timestamp) > new Date(epe.lastUsed)) epe.lastUsed = r.timestamp;
+ }
+ }
+ stats.totalRequests = Object.values(stats.byProvider).reduce((sum, p)=>sum + (p.requests || 0), 0);
+ return stats;
+}
+async function getChartData(period = "7d") {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const now = Date.now();
+ if (period === "today") {
+ const bucketCount = 24;
+ const bucketMs = 3600000;
+ const startOfDay = new Date();
+ startOfDay.setHours(0, 0, 0, 0);
+ const startTime = startOfDay.getTime();
+ const endTime = startTime + bucketCount * bucketMs;
+ const labelFn = (ts)=>new Date(ts).toLocaleTimeString("en-US", {
+ hour: "2-digit",
+ minute: "2-digit",
+ hour12: false
+ });
+ const buckets = Array.from({
+ length: bucketCount
+ }, (_, i)=>({
+ label: labelFn(startTime + i * bucketMs),
+ tokens: 0,
+ cost: 0
+ }));
+ const rows = db.all(`SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?`, [
+ new Date(startTime).toISOString()
+ ]);
+ for (const r of rows){
+ const t = new Date(r.timestamp).getTime();
+ if (t < startTime || t >= endTime) continue;
+ const idx = Math.floor((t - startTime) / bucketMs);
+ if (idx >= 0 && idx < bucketCount) {
+ buckets[idx].tokens += (r.promptTokens || 0) + (r.completionTokens || 0);
+ buckets[idx].cost += r.cost || 0;
+ }
+ }
+ return buckets;
+ }
+ if (period === "24h") {
+ const bucketCount = 24;
+ const bucketMs = 3600000;
+ const labelFn = (ts)=>new Date(ts).toLocaleTimeString("en-US", {
+ hour: "2-digit",
+ minute: "2-digit",
+ hour12: false
+ });
+ const startTime = now - bucketCount * bucketMs;
+ const buckets = Array.from({
+ length: bucketCount
+ }, (_, i)=>({
+ label: labelFn(startTime + i * bucketMs),
+ tokens: 0,
+ cost: 0
+ }));
+ const rows = db.all(`SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?`, [
+ new Date(startTime).toISOString()
+ ]);
+ for (const r of rows){
+ const t = new Date(r.timestamp).getTime();
+ if (t < startTime || t > now) continue;
+ const idx = Math.min(Math.floor((t - startTime) / bucketMs), bucketCount - 1);
+ buckets[idx].tokens += (r.promptTokens || 0) + (r.completionTokens || 0);
+ buckets[idx].cost += r.cost || 0;
+ }
+ return buckets;
+ }
+ const bucketCount = period === "7d" ? 7 : period === "30d" ? 30 : 60;
+ const today = new Date();
+ const labelFn = (d)=>d.toLocaleDateString("en-US", {
+ month: "short",
+ day: "numeric"
+ });
+ // Build map of dateKey → day data
+ const dayRows = loadDaysInRange(db, bucketCount);
+ const dayMap = {};
+ for (const r of dayRows)dayMap[r.dateKey] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$helpers$2f$jsonCol$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJson"])(r.data, {});
+ return Array.from({
+ length: bucketCount
+ }, (_, i)=>{
+ const d = new Date(today);
+ d.setDate(d.getDate() - (bucketCount - 1 - i));
+ const dateKey = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
+ const dayData = dayMap[dateKey];
+ return {
+ label: labelFn(d),
+ tokens: dayData ? (dayData.promptTokens || 0) + (dayData.completionTokens || 0) : 0,
+ cost: dayData ? dayData.cost || 0 : 0
+ };
+ });
+}
+async function getRecentLogs(limit = 200) {
+ try {
+ const db = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$driver$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getAdapter"])();
+ const rows = db.all(`SELECT timestamp, provider, model, connectionId, promptTokens, completionTokens, status FROM usageHistory ORDER BY id DESC LIMIT ?`, [
+ limit
+ ]);
+ if (!rows.length) return [];
+ const connMap = {};
+ try {
+ const { getProviderConnections } = await __turbopack_context__.A("[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript, async loader)");
+ const connections = await getProviderConnections();
+ for (const c of connections)connMap[c.id] = c.displayName || c.name || c.email || "";
+ } catch {}
+ return rows.map((r)=>({
+ timestamp: r.timestamp,
+ model: r.model || "-",
+ provider: r.provider?.toUpperCase() || "-",
+ account: connMap[r.connectionId] || (r.connectionId ? r.connectionId.slice(0, 8) : "-"),
+ promptTokens: r.promptTokens ?? null,
+ completionTokens: r.completionTokens ?? null,
+ status: r.status || "-"
+ }));
+ } catch (e) {
+ console.error("[usageRepo] getRecentLogs failed:", e.message);
+ return [];
+ }
+}
+}),
+"[project]/src/lib/localDb.js [middleware] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([]);
+// Shim → re-export from new SQLite-based DB layer (src/lib/db/)
+// Kept for backward compatibility with existing imports.
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/lib/db/index.js [middleware] (ecmascript) ");
+;
+}),
+"[project]/src/proxy.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "config",
+ ()=>config,
+ "default",
+ ()=>proxy
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$dashboardGuard$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/dashboardGuard.js [middleware] (ecmascript)");
+;
+async function proxy(request) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$dashboardGuard$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["proxy"])(request);
+}
+const config = {
+ matcher: [
+ "/((?!_next/static|_next/image|favicon\\.ico).*)"
+ ]
+};
+}),
+"[project]/src/shared/utils/machineId.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getConsistentMachineId",
+ ()=>getConsistentMachineId,
+ "getRawMachineId",
+ ()=>getRawMachineId,
+ "isBrowser",
+ ()=>isBrowser
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$node$2d$machine$2d$id$2f$dist$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/node-machine-id/dist/index.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:fs [external] (node:fs, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:path [external] (node:path, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$crypto__$5b$external$5d$__$28$node$3a$crypto$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:crypto [external] (node:crypto, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/dataDir.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+const MACHINE_ID_FILE = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], 'machine-id');
+const AUTH_DIR = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], 'auth');
+const CLI_SECRET_FILE = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$path__$5b$external$5d$__$28$node$3a$path$2c$__cjs$29$__["default"].join(AUTH_DIR, 'cli-secret');
+const CLI_AUTH_SALT = '9r-cli-auth';
+let cachedRawId = null;
+let cachedCliSecret = null;
+// Persist raw machine ID to file → guarantees CLI/server/middleware see same value
+// even when machineIdSync fails or returns inconsistent values across runtimes.
+function loadRawMachineId() {
+ if (cachedRawId) return cachedRawId;
+ try {
+ cachedRawId = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].readFileSync(MACHINE_ID_FILE, 'utf8').trim();
+ if (cachedRawId) return cachedRawId;
+ } catch {}
+ try {
+ cachedRawId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$node$2d$machine$2d$id$2f$dist$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["machineIdSync"])();
+ } catch {
+ cachedRawId = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$crypto__$5b$external$5d$__$28$node$3a$crypto$2c$__cjs$29$__["default"].randomUUID();
+ }
+ try {
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].mkdirSync(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$dataDir$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DATA_DIR"], {
+ recursive: true
+ });
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].writeFileSync(MACHINE_ID_FILE, cachedRawId, {
+ mode: 0o600
+ });
+ } catch {}
+ return cachedRawId;
+}
+// Random secret persisted on first run → unpredictable CLI token even when machineId leaks.
+function loadCliSecret() {
+ if (cachedCliSecret) return cachedCliSecret;
+ try {
+ cachedCliSecret = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].readFileSync(CLI_SECRET_FILE, 'utf8').trim();
+ if (cachedCliSecret) return cachedCliSecret;
+ } catch {}
+ cachedCliSecret = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$crypto__$5b$external$5d$__$28$node$3a$crypto$2c$__cjs$29$__["default"].randomBytes(32).toString('hex');
+ try {
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].mkdirSync(AUTH_DIR, {
+ recursive: true
+ });
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].writeFileSync(CLI_SECRET_FILE, cachedCliSecret, {
+ mode: 0o600
+ });
+ } catch {}
+ return cachedCliSecret;
+}
+async function getConsistentMachineId(salt = null) {
+ const saltValue = salt || process.env.MACHINE_ID_SALT || 'endpoint-proxy-salt';
+ const raw = loadRawMachineId();
+ const extra = saltValue === CLI_AUTH_SALT ? loadCliSecret() : '';
+ return __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$crypto__$5b$external$5d$__$28$node$3a$crypto$2c$__cjs$29$__["default"].createHash('sha256').update(raw + saltValue + extra).digest('hex').substring(0, 16);
+}
+async function getRawMachineId() {
+ return loadRawMachineId();
+}
+function isBrowser() {
+ return ("TURBOPACK compile-time value", "undefined") !== 'undefined';
+}
+}),
+];
+
+//# sourceMappingURL=%5Broot-of-the-server%5D__18b1j7k._.js.map
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js.map
new file mode 100644
index 00000000..9350c25c
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js.map
@@ -0,0 +1,29 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": [
+ {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/dashboardGuard.js"],"sourcesContent":["import { NextResponse } from \"next/server\";\nimport { getSettings, validateApiKey } from \"@/lib/localDb\";\nimport { getConsistentMachineId } from \"@/shared/utils/machineId\";\nimport { verifyDashboardAuthToken } from \"@/lib/auth/dashboardSession\";\nimport { hasTrustedPeerHeaders } from \"@/lib/auth/trustedPeer\";\n\nconst CLI_TOKEN_HEADER = \"x-9r-cli-token\";\nconst CLI_TOKEN_SALT = \"9r-cli-auth\";\n\nlet cachedCliToken = null;\nasync function getCliToken() {\n if (!cachedCliToken) cachedCliToken = await getConsistentMachineId(CLI_TOKEN_SALT);\n return cachedCliToken;\n}\n\nasync function hasValidCliToken(request) {\n const token = request.headers.get(CLI_TOKEN_HEADER);\n if (!token) return false;\n return token === await getCliToken();\n}\n\n// Public API paths — no auth required (LLM API has its own key auth inside handler).\nconst PUBLIC_API_PATHS = [\n \"/api/health\",\n \"/api/init\",\n \"/api/locale\",\n \"/api/auth/login\",\n \"/api/auth/logout\",\n \"/api/auth/status\",\n \"/api/auth/oidc\",\n \"/api/auth/saml\",\n \"/api/version\",\n \"/api/settings/require-login\",\n];\n\n// Public top-level prefixes (LLM API endpoints with their own API key auth).\nconst PUBLIC_PREFIXES = [\"/v1\", \"/v1beta\", \"/api/v1\", \"/api/v1beta\", \"/codex\"];\n\n// Always require JWT token regardless of requireLogin setting\nconst ALWAYS_PROTECTED = [\n \"/api/shutdown\",\n \"/api/settings/database\",\n \"/api/version/shutdown\",\n \"/api/version/update\",\n \"/api/oauth/cursor/auto-import\",\n \"/api/oauth/kiro/auto-import\",\n];\n\n// Require auth, but allow through if requireLogin is disabled\nconst PROTECTED_API_PATHS = [\n \"/api/settings\",\n \"/api/keys\",\n \"/api/providers\",\n \"/api/provider-nodes\",\n \"/api/proxy-pools\",\n \"/api/combos\",\n \"/api/models\",\n \"/api/usage\",\n \"/api/oauth\",\n \"/api/cloud\",\n \"/api/media-providers\",\n \"/api/pricing\",\n \"/api/tags\",\n \"/api/cli-tools\",\n \"/api/mcp\",\n \"/api/translator\",\n \"/api/tunnel\",\n];\n\n// Routes that spawn child processes or read host secrets — restrict to localhost.\nconst LOCAL_ONLY_PATHS = [\n \"/api/cli-tools/cowork-settings\",\n \"/api/cli-tools/antigravity-mitm\",\n \"/api/mcp/\",\n \"/api/tunnel/tailscale-install\",\n \"/api/tunnel/tailscale-enable\",\n \"/api/tunnel/tailscale-disable\",\n \"/api/tunnel/tailscale-check\",\n \"/api/tunnel/enable\",\n \"/api/tunnel/disable\",\n \"/api/oauth/cursor/auto-import\",\n \"/api/oauth/kiro/auto-import\",\n \"/api/auth/reset-password\",\n \"/api/headroom/start\",\n \"/api/headroom/stop\",\n \"/api/headroom/proxy\",\n];\n\nconst LOOPBACK_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"::1\"]);\n\n// Accepts a Host header, a URL hostname or a raw socket address. Splitting on the first\n// colon only works for IPv4 and would reduce every IPv6 form to \"\", so a dual-stack\n// listener handing back ::ffff:127.0.0.1 would not read as loopback.\nfunction isLoopbackHostname(h) {\n if (!h) return false;\n let name = String(h).trim().toLowerCase();\n if (name.startsWith(\"[\")) {\n const end = name.indexOf(\"]\");\n if (end === -1) return false;\n name = name.slice(1, end);\n } else if (name.indexOf(\":\") !== -1 && name.indexOf(\":\") === name.lastIndexOf(\":\")) {\n name = name.slice(0, name.indexOf(\":\"));\n }\n if (name.startsWith(\"::ffff:\")) name = name.slice(7);\n return LOOPBACK_HOSTS.has(name);\n}\n\nfunction isLoopbackPeer(request) {\n if (hasTrustedPeerHeaders(request)) {\n return isLoopbackHostname(request.headers.get(\"x-9r-real-ip\"));\n }\n // Bare `next dev` forks its server, so the wrapper never loads and no peer address\n // reaches us. Host is spoofable, so this stays confined to development.\n if (process.env.NODE_ENV === \"development\") {\n return isLoopbackHostname(request.headers.get(\"host\"));\n }\n return false;\n}\n\nexport function isLocalRequest(request) {\n // Stamped by custom-server.js when forwarding headers exist: request came through\n // a reverse proxy, so the loopback socket is the proxy hop, not the end-user.\n if (request.headers.get(\"x-9r-via-proxy\")) return false;\n if (!isLoopbackPeer(request)) return false;\n const origin = request.headers.get(\"origin\");\n if (origin) {\n try {\n if (!isLoopbackHostname(new URL(origin).hostname)) return false;\n } catch { return false; }\n }\n return true;\n}\n\nfunction isPublicLlmApi(pathname) {\n return PUBLIC_PREFIXES.some((p) => pathname === p || pathname.startsWith(`${p}/`));\n}\n\nfunction extractApiKey(request) {\n const authHeader = request.headers.get(\"Authorization\");\n if (authHeader?.startsWith(\"Bearer \")) return authHeader.slice(7);\n const apiKeyHeader = request.headers.get(\"x-api-key\");\n if (apiKeyHeader) return apiKeyHeader;\n const googleApiKeyHeader = request.headers.get(\"x-goog-api-key\");\n if (googleApiKeyHeader) return googleApiKeyHeader;\n return request.nextUrl.searchParams?.get(\"key\") || null;\n}\n\nasync function hasValidApiKey(request) {\n const apiKey = extractApiKey(request);\n if (!apiKey) return false;\n return await validateApiKey(apiKey);\n}\n\nasync function canAccessPublicLlmApi(request) {\n if (isLocalRequest(request)) return true;\n if (await hasValidCliToken(request)) return true;\n return await hasValidApiKey(request);\n}\n\nasync function canAccessLocalOnlyRoute(request) {\n if (await hasValidCliToken(request)) return true;\n // Browser on host: loopback Host + Origin (blocks tunnel/CSRF) + auth (JWT or requireLogin=false)\n if (isLocalRequest(request) && await isAuthenticated(request)) return true;\n return false;\n}\n\nasync function hasValidToken(request) {\n const token = request.cookies.get(\"auth_token\")?.value;\n return await verifyDashboardAuthToken(token);\n}\n\n// Read settings directly from DB to avoid self-fetch deadlock in proxy\nasync function loadSettings() {\n try {\n return await getSettings();\n } catch {\n return null;\n }\n}\n\nasync function isAuthenticated(request) {\n if (await hasValidToken(request)) return true;\n const settings = await loadSettings();\n if (settings && settings.requireLogin === false) return true;\n return false;\n}\n\nfunction isPublicApi(pathname) {\n if (isPublicLlmApi(pathname)) return true;\n return PUBLIC_API_PATHS.some((p) => pathname === p || pathname.startsWith(`${p}/`));\n}\n\nexport const __test__ = {\n isLocalRequest,\n isPublicLlmApi,\n extractApiKey,\n canAccessPublicLlmApi,\n canAccessLocalOnlyRoute,\n};\n\nexport async function proxy(request) {\n const { pathname } = request.nextUrl;\n\n // Local-only gate for spawn-capable / host-secret routes.\n if (LOCAL_ONLY_PATHS.some((p) => pathname.startsWith(p))) {\n if (!(await canAccessLocalOnlyRoute(request))) {\n return NextResponse.json({ error: \"Local only: CLI token required\" }, { status: 403 });\n }\n }\n\n // Always protected - require valid JWT or local CLI token (machineId-based)\n if (ALWAYS_PROTECTED.some((p) => pathname.startsWith(p))) {\n if (await hasValidCliToken(request) || await hasValidToken(request))\n return NextResponse.next();\n return NextResponse.json({ error: \"Unauthorized\" }, { status: 401 });\n }\n\n if (isPublicLlmApi(pathname)) {\n if (await canAccessPublicLlmApi(request)) return NextResponse.next();\n return NextResponse.json({ error: \"API key required for remote API access\" }, { status: 401 });\n }\n\n // Deny-by-default for /api/* — public allow-list bypasses, everything else requires auth.\n if (pathname.startsWith(\"/api/\")) {\n if (isPublicApi(pathname)) return NextResponse.next();\n if (await hasValidCliToken(request) || await isAuthenticated(request))\n return NextResponse.next();\n return NextResponse.json({ error: \"Unauthorized\" }, { status: 401 });\n }\n\n // Protect all dashboard routes\n if (pathname.startsWith(\"/dashboard\")) {\n let requireLogin = true;\n let tunnelDashboardAccess = true;\n\n try {\n const settings = await loadSettings();\n if (settings) {\n requireLogin = settings.requireLogin !== false;\n tunnelDashboardAccess = settings.tunnelDashboardAccess === true;\n\n // Block tunnel/tailscale access if disabled (redirect to login)\n if (!tunnelDashboardAccess) {\n const host = (request.headers.get(\"host\") || \"\").split(\":\")[0].toLowerCase();\n const tunnelHost = settings.tunnelUrl ? new URL(settings.tunnelUrl).hostname.toLowerCase() : \"\";\n const tailscaleHost = settings.tailscaleUrl ? new URL(settings.tailscaleUrl).hostname.toLowerCase() : \"\";\n if ((tunnelHost && host === tunnelHost) || (tailscaleHost && host === tailscaleHost)) {\n return NextResponse.redirect(new URL(\"/login\", request.url));\n }\n }\n }\n } catch {\n // On error, keep defaults (require login, block tunnel)\n }\n\n // If login not required, allow through\n if (!requireLogin) return NextResponse.next();\n\n // Verify JWT token\n const token = request.cookies.get(\"auth_token\")?.value;\n if (token) {\n if (await verifyDashboardAuthToken(token)) {\n return NextResponse.next();\n } else {\n return NextResponse.redirect(new URL(\"/login\", request.url));\n }\n }\n\n return NextResponse.redirect(new URL(\"/login\", request.url));\n }\n\n // Redirect / to /dashboard if logged in, or /dashboard if it's the root\n if (pathname === \"/\") {\n return NextResponse.redirect(new URL(\"/dashboard\", request.url));\n }\n\n return NextResponse.next();\n}\n"],"names":["CLI_TOKEN_HEADER","CLI_TOKEN_SALT","cachedCliToken","getCliToken","hasValidCliToken","request","token","headers","get","PUBLIC_API_PATHS","PUBLIC_PREFIXES","ALWAYS_PROTECTED","PROTECTED_API_PATHS","LOCAL_ONLY_PATHS","LOOPBACK_HOSTS","Set","isLoopbackHostname","h","name","String","trim","toLowerCase","startsWith","end","indexOf","slice","lastIndexOf","has","isLoopbackPeer","isLocalRequest","origin","URL","hostname","isPublicLlmApi","pathname","some","p","extractApiKey","authHeader","apiKeyHeader","googleApiKeyHeader","nextUrl","searchParams","hasValidApiKey","apiKey","canAccessPublicLlmApi","canAccessLocalOnlyRoute","isAuthenticated","hasValidToken","cookies","value","loadSettings","settings","requireLogin","isPublicApi","__test__","proxy","json","error","status","next","tunnelDashboardAccess","host","split","tunnelHost","tunnelUrl","tailscaleHost","tailscaleUrl","redirect","url"],"mappings":"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"}},
+ {"offset": {"line": 425, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/auth/dashboardSession.js"],"sourcesContent":["import { SignJWT, jwtVerify } from \"jose\";\nimport bcrypt from \"bcryptjs\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\nimport { DATA_DIR } from \"@/lib/dataDir\";\nimport { getSettings } from \"@/lib/localDb\";\n\nconst DEFAULT_PASSWORD = \"123456\";\n\nfunction loadJwtSecret() {\n if (process.env.JWT_SECRET) return process.env.JWT_SECRET;\n const file = path.join(DATA_DIR, \"jwt-secret\");\n try {\n return fs.readFileSync(file, \"utf8\").trim();\n } catch {}\n fs.mkdirSync(DATA_DIR, { recursive: true });\n const generated = crypto.randomBytes(32).toString(\"hex\");\n fs.writeFileSync(file, generated, { mode: 0o600 });\n return generated;\n}\n\nconst SECRET = new TextEncoder().encode(loadJwtSecret());\n\nexport function shouldUseSecureCookie(request) {\n const forceSecureCookie = process.env.AUTH_COOKIE_SECURE === \"true\";\n const forwardedProto = request?.headers?.get?.(\"x-forwarded-proto\");\n const isHttpsRequest = forwardedProto === \"https\";\n return forceSecureCookie || isHttpsRequest;\n}\n\nexport async function createDashboardAuthToken(claims = {}) {\n return new SignJWT({ authenticated: true, ...claims })\n .setProtectedHeader({ alg: \"HS256\" })\n .setIssuedAt()\n .setExpirationTime(\"24h\")\n .sign(SECRET);\n}\n\nexport async function verifyDashboardAuthToken(token) {\n if (!token) return false;\n try {\n await jwtVerify(token, SECRET);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function getDashboardAuthSession(token) {\n if (!token) return null;\n try {\n const { payload } = await jwtVerify(token, SECRET);\n return payload;\n } catch {\n return null;\n }\n}\n\nexport async function setDashboardAuthCookie(cookieStore, request, claims = {}) {\n const token = await createDashboardAuthToken(claims);\n cookieStore.set(\"auth_token\", token, {\n httpOnly: true,\n secure: shouldUseSecureCookie(request),\n sameSite: \"lax\",\n path: \"/\",\n });\n}\n\nexport function clearDashboardAuthCookie(cookieStore) {\n cookieStore.delete(\"auth_token\");\n}\n\n// Verify the current dashboard password (re-auth for sensitive actions).\nexport async function verifyDashboardPassword(password) {\n if (typeof password !== \"string\" || !password) return false;\n const settings = await getSettings();\n const storedHash = settings?.password;\n if (storedHash) return bcrypt.compare(password, storedHash);\n const initialPassword = process.env.INITIAL_PASSWORD || DEFAULT_PASSWORD;\n return password === initialPassword;\n}\n"],"names":["DEFAULT_PASSWORD","loadJwtSecret","process","env","JWT_SECRET","file","join","readFileSync","trim","mkdirSync","recursive","generated","randomBytes","toString","writeFileSync","mode","SECRET","TextEncoder","encode","shouldUseSecureCookie","request","forceSecureCookie","AUTH_COOKIE_SECURE","forwardedProto","headers","get","isHttpsRequest","createDashboardAuthToken","claims","authenticated","setProtectedHeader","alg","setIssuedAt","setExpirationTime","sign","verifyDashboardAuthToken","token","getDashboardAuthSession","payload","setDashboardAuthCookie","cookieStore","set","httpOnly","secure","sameSite","path","clearDashboardAuthCookie","delete","verifyDashboardPassword","password","settings","storedHash","compare","initialPassword","INITIAL_PASSWORD"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;AAEA,MAAMA,mBAAmB;AAEzB,SAASC;IACP,IAAIC,QAAQC,GAAG,CAACC,UAAU,EAAE,OAAOF,QAAQC,GAAG,CAACC,UAAU;IACzD,MAAMC,OAAO,4HAAI,CAACC,IAAI,CAAC,iIAAQ,EAAE;IACjC,IAAI;QACF,OAAO,wHAAE,CAACC,YAAY,CAACF,MAAM,QAAQG,IAAI;IAC3C,EAAE,OAAM,CAAC;IACT,wHAAE,CAACC,SAAS,CAAC,iIAAQ,EAAE;QAAEC,WAAW;IAAK;IACzC,MAAMC,YAAY,gIAAM,CAACC,WAAW,CAAC,IAAIC,QAAQ,CAAC;IAClD,wHAAE,CAACC,aAAa,CAACT,MAAMM,WAAW;QAAEI,MAAM;IAAM;IAChD,OAAOJ;AACT;AAEA,MAAMK,SAAS,IAAIC,cAAcC,MAAM,CAACjB;AAEjC,SAASkB,sBAAsBC,OAAO;IAC3C,MAAMC,oBAAoBnB,QAAQC,GAAG,CAACmB,kBAAkB,KAAK;IAC7D,MAAMC,iBAAiBH,SAASI,SAASC,MAAM;IAC/C,MAAMC,iBAAiBH,mBAAmB;IAC1C,OAAOF,qBAAqBK;AAC9B;AAEO,eAAeC,yBAAyBC,SAAS,CAAC,CAAC;IACxD,OAAO,IAAI,gKAAO,CAAC;QAAEC,eAAe;QAAM,GAAGD,MAAM;IAAC,GACjDE,kBAAkB,CAAC;QAAEC,KAAK;IAAQ,GAClCC,WAAW,GACXC,iBAAiB,CAAC,OAClBC,IAAI,CAAClB;AACV;AAEO,eAAemB,yBAAyBC,KAAK;IAClD,IAAI,CAACA,OAAO,OAAO;IACnB,IAAI;QACF,MAAM,IAAA,oKAAS,EAACA,OAAOpB;QACvB,OAAO;IACT,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEO,eAAeqB,wBAAwBD,KAAK;IACjD,IAAI,CAACA,OAAO,OAAO;IACnB,IAAI;QACF,MAAM,EAAEE,OAAO,EAAE,GAAG,MAAM,IAAA,oKAAS,EAACF,OAAOpB;QAC3C,OAAOsB;IACT,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEO,eAAeC,uBAAuBC,WAAW,EAAEpB,OAAO,EAAEQ,SAAS,CAAC,CAAC;IAC5E,MAAMQ,QAAQ,MAAMT,yBAAyBC;IAC7CY,YAAYC,GAAG,CAAC,cAAcL,OAAO;QACnCM,UAAU;QACVC,QAAQxB,sBAAsBC;QAC9BwB,UAAU;QACVC,MAAM;IACR;AACF;AAEO,SAASC,yBAAyBN,WAAW;IAClDA,YAAYO,MAAM,CAAC;AACrB;AAGO,eAAeC,wBAAwBC,QAAQ;IACpD,IAAI,OAAOA,aAAa,YAAY,CAACA,UAAU,OAAO;IACtD,MAAMC,WAAW,MAAM,IAAA,wJAAW;IAClC,MAAMC,aAAaD,UAAUD;IAC7B,IAAIE,YAAY,OAAO,4IAAM,CAACC,OAAO,CAACH,UAAUE;IAChD,MAAME,kBAAkBnD,QAAQC,GAAG,CAACmD,gBAAgB,IAAItD;IACxD,OAAOiD,aAAaI;AACtB"}},
+ {"offset": {"line": 530, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/auth/trustedPeer.js"],"sourcesContent":["// x-9r-real-ip is only trustworthy when custom-server.js stamped it from the TCP socket.\n// It proves that by echoing the per-process secret it generated at boot, which a client\n// cannot guess. Without the proof the header is just attacker-supplied input.\nexport function hasTrustedPeerHeaders(request) {\n const token = process.env.NINEROUTER_PEER_TOKEN;\n return Boolean(token) && request.headers.get(\"x-9r-peer-token\") === token;\n}\n"],"names":["hasTrustedPeerHeaders","request","token","process","env","NINEROUTER_PEER_TOKEN","Boolean","headers","get"],"mappings":"AAAA,yFAAyF;AACzF,wFAAwF;AACxF,8EAA8E;;;;;AACvE,SAASA,sBAAsBC,OAAO;IAC3C,MAAMC,QAAQC,QAAQC,GAAG,CAACC,qBAAqB;IAC/C,OAAOC,QAAQJ,UAAUD,QAAQM,OAAO,CAACC,GAAG,CAAC,uBAAuBN;AACtE"}},
+ {"offset": {"line": 545, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/dataDir.js"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"path\";\nimport os from \"os\";\n\nconst APP_NAME = \"9router\";\n\nfunction defaultDir() {\n if (process.platform === \"win32\") {\n return path.join(process.env.APPDATA || path.join(os.homedir(), \"AppData\", \"Roaming\"), APP_NAME);\n }\n return path.join(os.homedir(), `.${APP_NAME}`);\n}\n\nexport function getDataDir() {\n const configured = process.env.DATA_DIR;\n if (!configured) return defaultDir();\n\n // On Windows, ignore Unix-style absolute paths (e.g. /var/lib/...) that come\n // from a Linux-targeted .env or Docker config — they are not valid here.\n if (process.platform === \"win32\" && /^\\//.test(configured)) {\n console.warn(`[DATA_DIR] '${configured}' is a Unix path on Windows → fallback to default`);\n return defaultDir();\n }\n\n try {\n fs.mkdirSync(configured, { recursive: true });\n return configured;\n } catch (e) {\n if (e?.code === \"EACCES\" || e?.code === \"EPERM\") {\n console.warn(`[DATA_DIR] '${configured}' not writable → fallback ~/.${APP_NAME}`);\n return defaultDir();\n }\n throw e;\n }\n}\n\nexport const DATA_DIR = getDataDir();\n"],"names":["APP_NAME","defaultDir","join","homedir","getDataDir","configured","process","env","DATA_DIR","platform","test","mkdirSync","recursive","e","code","console","warn"],"mappings":";;;;;;AAAA;AACA;AACA;;;;AAEA,MAAMA,WAAW;AAEjB,SAASC;IACP;;IAGA,OAAO,4GAAI,CAACC,IAAI,CAAC,wGAAE,CAACC,OAAO,IAAI,CAAC,CAAC,EAAEH,UAAU;AAC/C;AAEO,SAASI;IACd,MAAMC,aAAaC,QAAQC,GAAG,CAACC,QAAQ;IACvC,IAAI,CAACH,YAAY,OAAOJ;IAExB,6EAA6E;IAC7E,yEAAyE;IACzE,IAAIK,QAAQG,QAAQ,KAAK,WAAW,MAAMC,IAAI,CAACL;;IAK/C,IAAI;QACF,wHAAE,CAACM,SAAS,CAACN,YAAY;YAAEO,WAAW;QAAK;QAC3C,OAAOP;IACT,EAAE,OAAOQ,GAAG;QACV,IAAIA,GAAGC,SAAS,YAAYD,GAAGC,SAAS,SAAS;YAC/CC,QAAQC,IAAI,CAAC,CAAC,YAAY,EAAEX,WAAW,6BAA6B,EAAEL,UAAU;YAChF,OAAOC;QACT;QACA,MAAMY;IACR;AACF;AAEO,MAAML,WAAWJ"}},
+ {"offset": {"line": 588, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/driver.js"],"sourcesContent":["import { ensureDirs, DATA_FILE } from \"./paths.js\";\n\n// Use global to survive Next.js dev hot-reload (module state resets on reload)\nif (!global._dbAdapter) global._dbAdapter = { instance: null, initPromise: null, logged: false };\nconst state = global._dbAdapter;\n\nasync function tryBunSqlite() {\n // Bun runtime only — built-in, no install needed\n if (!process.versions.bun) return null;\n try {\n const { createBunSqliteAdapter } = await import(\"./adapters/bunSqliteAdapter.js\");\n return await createBunSqliteAdapter(DATA_FILE);\n } catch (e) {\n console.warn(`[DB] bun:sqlite unavailable: ${e.message}`);\n return null;\n }\n}\n\nasync function tryBetterSqlite() {\n // Skip on Bun — better-sqlite3 native bindings unsupported\n if (process.versions.bun) return null;\n try {\n const { createBetterSqliteAdapter } = await import(\"./adapters/betterSqliteAdapter.js\");\n return createBetterSqliteAdapter(DATA_FILE);\n } catch (e) {\n console.warn(`[DB] better-sqlite3 unavailable: ${e.message}`);\n return null;\n }\n}\n\nasync function tryNodeSqlite() {\n // Built-in since Node 22.5.0 — no install needed. Skip under Bun (no node:sqlite).\n if (process.versions.bun) return null;\n const [maj, min] = process.versions.node.split(\".\").map(Number);\n if (maj < 22 || (maj === 22 && min < 5)) return null;\n try {\n const { createNodeSqliteAdapter } = await import(\"./adapters/nodeSqliteAdapter.js\");\n return await createNodeSqliteAdapter(DATA_FILE);\n } catch (e) {\n console.warn(`[DB] node:sqlite unavailable: ${e.message}`);\n return null;\n }\n}\n\nasync function trySqlJs() {\n try {\n const { createSqlJsAdapter } = await import(\"./adapters/sqljsAdapter.js\");\n return await createSqlJsAdapter(DATA_FILE);\n } catch (e) {\n console.warn(`[DB] sql.js unavailable: ${e.message}`);\n return null;\n }\n}\n\nasync function initAdapter() {\n ensureDirs();\n // Order per runtime:\n // Bun: bun:sqlite → sql.js\n // Node: better-sqlite3 → node:sqlite (≥22.5) → sql.js\n let adapter = await tryBunSqlite();\n if (!adapter) adapter = await tryBetterSqlite();\n if (!adapter) adapter = await tryNodeSqlite();\n if (!adapter) adapter = await trySqlJs();\n if (!adapter) throw new Error(\"[DB] No SQLite driver available (bun/better/node/sql.js all failed)\");\n\n if (!state.logged) {\n console.log(`[DB] Driver: ${adapter.driver} | file: ${DATA_FILE}`);\n state.logged = true;\n }\n\n const { runMigrationOnce } = await import(\"./migrate.js\");\n await runMigrationOnce(adapter);\n return adapter;\n}\n\nexport async function getAdapter() {\n if (state.instance) return state.instance;\n if (!state.initPromise) state.initPromise = initAdapter().then((a) => { state.instance = a; return a; });\n return state.initPromise;\n}\n\nexport function getAdapterSync() {\n if (!state.instance) throw new Error(\"[DB] adapter not initialized — await getAdapter() first\");\n return state.instance;\n}\n"],"names":["_dbAdapter","instance","initPromise","logged","state","tryBunSqlite","process","versions","bun","createBunSqliteAdapter","e","console","warn","message","tryBetterSqlite","createBetterSqliteAdapter","tryNodeSqlite","maj","min","node","split","map","Number","createNodeSqliteAdapter","trySqlJs","createSqlJsAdapter","initAdapter","adapter","Error","log","driver","runMigrationOnce","getAdapter","then","a","getAdapterSync"],"mappings":";;;;;;AAAA;;AAEA,+EAA+E;AAC/E,IAAI,CAAC,yDAAOA,UAAU,EAAE,yDAAOA,UAAU,GAAG;IAAEC,UAAU;IAAMC,aAAa;IAAMC,QAAQ;AAAM;AAC/F,MAAMC,QAAQ,yDAAOJ,UAAU;AAE/B,eAAeK;IACb,iDAAiD;IACjD,IAAI,CAACC,QAAQC,QAAQ,CAACC,GAAG,EAAE,OAAO;IAClC,IAAI;QACF,MAAM,EAAEC,sBAAsB,EAAE,GAAG;QACnC,OAAO,MAAMA,uBAAuB,sIAAS;IAC/C,EAAE,OAAOC,GAAG;QACVC,QAAQC,IAAI,CAAC,CAAC,6BAA6B,EAAEF,EAAEG,OAAO,EAAE;QACxD,OAAO;IACT;AACF;AAEA,eAAeC;IACb,2DAA2D;IAC3D,IAAIR,QAAQC,QAAQ,CAACC,GAAG,EAAE,OAAO;IACjC,IAAI;QACF,MAAM,EAAEO,yBAAyB,EAAE,GAAG;QACtC,OAAOA,0BAA0B,sIAAS;IAC5C,EAAE,OAAOL,GAAG;QACVC,QAAQC,IAAI,CAAC,CAAC,iCAAiC,EAAEF,EAAEG,OAAO,EAAE;QAC5D,OAAO;IACT;AACF;AAEA,eAAeG;IACb,mFAAmF;IACnF,IAAIV,QAAQC,QAAQ,CAACC,GAAG,EAAE,OAAO;IACjC,MAAM,CAACS,KAAKC,IAAI,GAAGZ,QAAQC,QAAQ,CAACY,IAAI,CAACC,KAAK,CAAC,KAAKC,GAAG,CAACC;IACxD,IAAIL,MAAM,MAAOA,QAAQ,MAAMC,MAAM,GAAI,OAAO;IAChD,IAAI;QACF,MAAM,EAAEK,uBAAuB,EAAE,GAAG;QACpC,OAAO,MAAMA,wBAAwB,sIAAS;IAChD,EAAE,OAAOb,GAAG;QACVC,QAAQC,IAAI,CAAC,CAAC,8BAA8B,EAAEF,EAAEG,OAAO,EAAE;QACzD,OAAO;IACT;AACF;AAEA,eAAeW;IACb,IAAI;QACF,MAAM,EAAEC,kBAAkB,EAAE,GAAG;QAC/B,OAAO,MAAMA,mBAAmB,sIAAS;IAC3C,EAAE,OAAOf,GAAG;QACVC,QAAQC,IAAI,CAAC,CAAC,yBAAyB,EAAEF,EAAEG,OAAO,EAAE;QACpD,OAAO;IACT;AACF;AAEA,eAAea;IACb,IAAA,uIAAU;IACV,qBAAqB;IACrB,8BAA8B;IAC9B,wDAAwD;IACxD,IAAIC,UAAU,MAAMtB;IACpB,IAAI,CAACsB,SAASA,UAAU,MAAMb;IAC9B,IAAI,CAACa,SAASA,UAAU,MAAMX;IAC9B,IAAI,CAACW,SAASA,UAAU,MAAMH;IAC9B,IAAI,CAACG,SAAS,MAAM,IAAIC,MAAM;IAE9B,IAAI,CAACxB,MAAMD,MAAM,EAAE;QACjBQ,QAAQkB,GAAG,CAAC,CAAC,aAAa,EAAEF,QAAQG,MAAM,CAAC,SAAS,EAAE,sIAAS,EAAE;QACjE1B,MAAMD,MAAM,GAAG;IACjB;IAEA,MAAM,EAAE4B,gBAAgB,EAAE,GAAG;IAC7B,MAAMA,iBAAiBJ;IACvB,OAAOA;AACT;AAEO,eAAeK;IACpB,IAAI5B,MAAMH,QAAQ,EAAE,OAAOG,MAAMH,QAAQ;IACzC,IAAI,CAACG,MAAMF,WAAW,EAAEE,MAAMF,WAAW,GAAGwB,cAAcO,IAAI,CAAC,CAACC;QAAQ9B,MAAMH,QAAQ,GAAGiC;QAAG,OAAOA;IAAG;IACtG,OAAO9B,MAAMF,WAAW;AAC1B;AAEO,SAASiC;IACd,IAAI,CAAC/B,MAAMH,QAAQ,EAAE,MAAM,IAAI2B,MAAM;IACrC,OAAOxB,MAAMH,QAAQ;AACvB"}},
+ {"offset": {"line": 681, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/helpers/jsonCol.js"],"sourcesContent":["export function parseJson(str, fallback = null) {\n if (str == null) return fallback;\n if (typeof str !== \"string\") return str;\n try { return JSON.parse(str); } catch { return fallback; }\n}\n\nexport function stringifyJson(value) {\n return JSON.stringify(value ?? null);\n}\n"],"names":["parseJson","str","fallback","JSON","parse","stringifyJson","value","stringify"],"mappings":";;;;;;AAAO,SAASA,UAAUC,GAAG,EAAEC,WAAW,IAAI;IAC5C,IAAID,OAAO,MAAM,OAAOC;IACxB,IAAI,OAAOD,QAAQ,UAAU,OAAOA;IACpC,IAAI;QAAE,OAAOE,KAAKC,KAAK,CAACH;IAAM,EAAE,OAAM;QAAE,OAAOC;IAAU;AAC3D;AAEO,SAASG,cAAcC,KAAK;IACjC,OAAOH,KAAKI,SAAS,CAACD,SAAS;AACjC"}},
+ {"offset": {"line": 703, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/helpers/kvStore.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"./jsonCol.js\";\n\nexport function makeKv(scope) {\n return {\n async get(key, fallback = null) {\n const db = await getAdapter();\n const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [scope, key]);\n return row ? parseJson(row.value, fallback) : fallback;\n },\n async getAll() {\n const db = await getAdapter();\n const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [scope]);\n const out = {};\n for (const r of rows) out[r.key] = parseJson(r.value);\n return out;\n },\n async set(key, value) {\n const db = await getAdapter();\n db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [scope, key, stringifyJson(value)]);\n },\n async setMany(obj) {\n const db = await getAdapter();\n db.transaction(() => {\n for (const [k, v] of Object.entries(obj)) {\n db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [scope, k, stringifyJson(v)]);\n }\n });\n },\n async remove(key) {\n const db = await getAdapter();\n db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [scope, key]);\n },\n async clear() {\n const db = await getAdapter();\n db.run(`DELETE FROM kv WHERE scope = ?`, [scope]);\n },\n };\n}\n"],"names":["makeKv","scope","get","key","fallback","db","row","value","getAll","rows","all","out","r","set","run","setMany","obj","transaction","k","v","Object","entries","remove","clear"],"mappings":";;;;AAAA;AACA;;;AAEO,SAASA,OAAOC,KAAK;IAC1B,OAAO;QACL,MAAMC,KAAIC,GAAG,EAAEC,WAAW,IAAI;YAC5B,MAAMC,KAAK,MAAM,IAAA,wIAAU;YAC3B,MAAMC,MAAMD,GAAGH,GAAG,CAAC,CAAC,gDAAgD,CAAC,EAAE;gBAACD;gBAAOE;aAAI;YACnF,OAAOG,MAAM,IAAA,mJAAS,EAACA,IAAIC,KAAK,EAAEH,YAAYA;QAChD;QACA,MAAMI;YACJ,MAAMH,KAAK,MAAM,IAAA,wIAAU;YAC3B,MAAMI,OAAOJ,GAAGK,GAAG,CAAC,CAAC,yCAAyC,CAAC,EAAE;gBAACT;aAAM;YACxE,MAAMU,MAAM,CAAC;YACb,KAAK,MAAMC,KAAKH,KAAME,GAAG,CAACC,EAAET,GAAG,CAAC,GAAG,IAAA,mJAAS,EAACS,EAAEL,KAAK;YACpD,OAAOI;QACT;QACA,MAAME,KAAIV,GAAG,EAAEI,KAAK;YAClB,MAAMF,KAAK,MAAM,IAAA,wIAAU;YAC3BA,GAAGS,GAAG,CAAC,CAAC,8GAA8G,CAAC,EAAE;gBAACb;gBAAOE;gBAAK,IAAA,uJAAa,EAACI;aAAO;QAC7J;QACA,MAAMQ,SAAQC,GAAG;YACf,MAAMX,KAAK,MAAM,IAAA,wIAAU;YAC3BA,GAAGY,WAAW,CAAC;gBACb,KAAK,MAAM,CAACC,GAAGC,EAAE,IAAIC,OAAOC,OAAO,CAACL,KAAM;oBACxCX,GAAGS,GAAG,CAAC,CAAC,8GAA8G,CAAC,EAAE;wBAACb;wBAAOiB;wBAAG,IAAA,uJAAa,EAACC;qBAAG;gBACvJ;YACF;QACF;QACA,MAAMG,QAAOnB,GAAG;YACd,MAAME,KAAK,MAAM,IAAA,wIAAU;YAC3BA,GAAGS,GAAG,CAAC,CAAC,0CAA0C,CAAC,EAAE;gBAACb;gBAAOE;aAAI;QACnE;QACA,MAAMoB;YACJ,MAAMlB,KAAK,MAAM,IAAA,wIAAU;YAC3BA,GAAGS,GAAG,CAAC,CAAC,8BAA8B,CAAC,EAAE;gBAACb;aAAM;QAClD;IACF;AACF"}},
+ {"offset": {"line": 769, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/helpers/metaStore.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\n\nexport async function getMeta(key, fallback = null) {\n const db = await getAdapter();\n const row = db.get(`SELECT value FROM _meta WHERE key = ?`, [key]);\n return row ? row.value : fallback;\n}\n\nexport async function setMeta(key, value) {\n const db = await getAdapter();\n db.run(`INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`, [key, String(value)]);\n}\n\n// Sync versions for use during migration (adapter passed directly)\nexport function getMetaSync(adapter, key, fallback = null) {\n const row = adapter.get(`SELECT value FROM _meta WHERE key = ?`, [key]);\n return row ? row.value : fallback;\n}\n\nexport function setMetaSync(adapter, key, value) {\n adapter.run(`INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`, [key, String(value)]);\n}\n"],"names":["getMeta","key","fallback","db","row","get","value","setMeta","run","String","getMetaSync","adapter","setMetaSync"],"mappings":";;;;;;;;;;AAAA;;AAEO,eAAeA,QAAQC,GAAG,EAAEC,WAAW,IAAI;IAChD,MAAMC,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMC,MAAMD,GAAGE,GAAG,CAAC,CAAC,qCAAqC,CAAC,EAAE;QAACJ;KAAI;IACjE,OAAOG,MAAMA,IAAIE,KAAK,GAAGJ;AAC3B;AAEO,eAAeK,QAAQN,GAAG,EAAEK,KAAK;IACtC,MAAMH,KAAK,MAAM,IAAA,wIAAU;IAC3BA,GAAGK,GAAG,CAAC,CAAC,gGAAgG,CAAC,EAAE;QAACP;QAAKQ,OAAOH;KAAO;AACjI;AAGO,SAASI,YAAYC,OAAO,EAAEV,GAAG,EAAEC,WAAW,IAAI;IACvD,MAAME,MAAMO,QAAQN,GAAG,CAAC,CAAC,qCAAqC,CAAC,EAAE;QAACJ;KAAI;IACtE,OAAOG,MAAMA,IAAIE,KAAK,GAAGJ;AAC3B;AAEO,SAASU,YAAYD,OAAO,EAAEV,GAAG,EAAEK,KAAK;IAC7CK,QAAQH,GAAG,CAAC,CAAC,gGAAgG,CAAC,EAAE;QAACP;QAAKQ,OAAOH;KAAO;AACtI"}},
+ {"offset": {"line": 811, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/index.js"],"sourcesContent":["// Public API barrel — all DB functions\nimport { getAdapter } from \"./driver.js\";\nimport { stringifyJson, parseJson } from \"./helpers/jsonCol.js\";\n\n// Settings\nexport {\n getSettings, updateSettings, isCloudEnabled, getCloudUrl, exportSettings,\n} from \"./repos/settingsRepo.js\";\n\n// Provider connections\nexport {\n getProviderConnections, getProviderConnectionById,\n createProviderConnection, updateProviderConnection,\n deleteProviderConnection, deleteProviderConnectionsByProvider,\n reorderProviderConnections, cleanupProviderConnections,\n} from \"./repos/connectionsRepo.js\";\n\n// Provider nodes\nexport {\n getProviderNodes, getProviderNodeById,\n createProviderNode, updateProviderNode, deleteProviderNode,\n} from \"./repos/nodesRepo.js\";\n\n// Proxy pools\nexport {\n getProxyPools, getProxyPoolById,\n createProxyPool, updateProxyPool, deleteProxyPool,\n} from \"./repos/proxyPoolsRepo.js\";\n\n// API keys\nexport {\n getApiKeys, getApiKeyById, createApiKey, updateApiKey, importApiKey, deleteApiKey, validateApiKey, getApiKeyByKey,\n} from \"./repos/apiKeysRepo.js\";\n\n// Combos\nexport {\n getCombos, getComboById, getComboByName,\n createCombo, updateCombo, deleteCombo,\n} from \"./repos/combosRepo.js\";\n\n// Aliases (model + custom + mitm)\nexport {\n getModelAliases, setModelAlias, deleteModelAlias,\n getCustomModels, addCustomModel, deleteCustomModel,\n getMitmAlias, setMitmAliasAll,\n} from \"./repos/aliasRepo.js\";\n\n// Pricing\nexport {\n getPricing, getPricingForModel, updatePricing, resetPricing, resetAllPricing,\n} from \"./repos/pricingRepo.js\";\n\n// Disabled models\nexport {\n getDisabledModels, getDisabledByProvider, disableModels, enableModels,\n} from \"./repos/disabledModelsRepo.js\";\n\n// Usage\nexport {\n statsEmitter, trackPendingRequest, getActiveRequests,\n saveRequestUsage, getUsageHistory, getUsageStats, getChartData,\n getRecentLogs,\n} from \"./repos/usageRepo.js\";\n\n// Request details\nexport {\n saveRequestDetail, getRequestDetails, getRequestDetailById, getDistinctProviders,\n getDistinctModels, getDistinctApiKeys, getDistinctStatuses,\n} from \"./repos/requestDetailsRepo.js\";\n\n// Export/import full DB\nexport async function exportDb() {\n const db = await getAdapter();\n const { exportSettings } = await import(\"./repos/settingsRepo.js\");\n\n const out = {\n settings: await exportSettings(),\n providerConnections: db.all(`SELECT * FROM providerConnections`).map((r) => ({ ...parseJson(r.data, {}), id: r.id, provider: r.provider, authType: r.authType, name: r.name, email: r.email, priority: r.priority, isActive: r.isActive === 1, createdAt: r.createdAt, updatedAt: r.updatedAt })),\n providerNodes: db.all(`SELECT * FROM providerNodes`).map((r) => ({ ...parseJson(r.data, {}), id: r.id, type: r.type, name: r.name, createdAt: r.createdAt, updatedAt: r.updatedAt })),\n proxyPools: db.all(`SELECT * FROM proxyPools`).map((r) => ({ ...parseJson(r.data, {}), id: r.id, isActive: r.isActive === 1, testStatus: r.testStatus, createdAt: r.createdAt, updatedAt: r.updatedAt })),\n apiKeys: db.all(`SELECT * FROM apiKeys`).map((r) => ({ id: r.id, key: r.key, name: r.name, machineId: r.machineId, isActive: r.isActive === 1, createdAt: r.createdAt })),\n combos: db.all(`SELECT * FROM combos`).map((r) => ({ id: r.id, name: r.name, kind: r.kind, models: parseJson(r.models, []), createdAt: r.createdAt, updatedAt: r.updatedAt })),\n modelAliases: {},\n customModels: [],\n mitmAlias: {},\n pricing: {},\n };\n\n for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'modelAliases'`)) out.modelAliases[r.key] = parseJson(r.value);\n for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'customModels'`)) out.customModels.push(parseJson(r.value));\n for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'mitmAlias'`)) out.mitmAlias[r.key] = parseJson(r.value);\n for (const r of db.all(`SELECT key, value FROM kv WHERE scope = 'pricing'`)) out.pricing[r.key] = parseJson(r.value);\n\n return out;\n}\n\nexport async function importDb(payload) {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n throw new Error(\"Invalid database payload\");\n }\n const db = await getAdapter();\n\n db.transaction(() => {\n // Wipe all tables (keep _meta)\n db.run(`DELETE FROM settings`);\n db.run(`DELETE FROM providerConnections`);\n db.run(`DELETE FROM providerNodes`);\n db.run(`DELETE FROM proxyPools`);\n db.run(`DELETE FROM apiKeys`);\n db.run(`DELETE FROM combos`);\n db.run(`DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing')`);\n\n // Settings\n if (payload.settings) {\n db.run(`INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`, [stringifyJson(payload.settings)]);\n }\n\n for (const c of payload.providerConnections || []) {\n const { id, provider, authType, name, email, priority, isActive, createdAt, updatedAt, ...rest } = c;\n db.run(\n `INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [id, provider, authType || \"oauth\", name || null, email || null, priority || null, isActive === false ? 0 : 1, stringifyJson(rest), createdAt || new Date().toISOString(), updatedAt || new Date().toISOString()]\n );\n }\n for (const n of payload.providerNodes || []) {\n const { id, type, name, createdAt, updatedAt, ...rest } = n;\n db.run(\n `INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`,\n [id, type || null, name || null, stringifyJson(rest), createdAt || new Date().toISOString(), updatedAt || new Date().toISOString()]\n );\n }\n for (const p of payload.proxyPools || []) {\n const { id, isActive, testStatus, createdAt, updatedAt, ...rest } = p;\n db.run(\n `INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`,\n [id, isActive === false ? 0 : 1, testStatus || \"unknown\", stringifyJson(rest), createdAt || new Date().toISOString(), updatedAt || new Date().toISOString()]\n );\n }\n for (const k of payload.apiKeys || []) {\n db.run(\n `INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`,\n [k.id, k.key, k.name || null, k.machineId || null, k.isActive === false ? 0 : 1, k.createdAt || new Date().toISOString()]\n );\n }\n for (const c of payload.combos || []) {\n db.run(\n `INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`,\n [c.id, c.name, c.kind || null, stringifyJson(c.models || []), c.createdAt || new Date().toISOString(), c.updatedAt || new Date().toISOString()]\n );\n }\n for (const [a, m] of Object.entries(payload.modelAliases || {})) {\n db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)`, [a, stringifyJson(m)]);\n }\n for (const m of payload.customModels || []) {\n const k = `${m.providerAlias}|${m.id}|${m.type || \"llm\"}`;\n db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)`, [k, stringifyJson(m)]);\n }\n for (const [tool, mappings] of Object.entries(payload.mitmAlias || {})) {\n db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)`, [tool, stringifyJson(mappings || {})]);\n }\n for (const [provider, models] of Object.entries(payload.pricing || {})) {\n db.run(`INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)`, [provider, stringifyJson(models || {})]);\n }\n });\n\n return await exportDb();\n}\n\n// Eager init helper (optional)\nexport async function initDb() {\n await getAdapter();\n}\n"],"names":["exportDb","db","exportSettings","out","settings","providerConnections","all","map","r","data","id","provider","authType","name","email","priority","isActive","createdAt","updatedAt","providerNodes","type","proxyPools","testStatus","apiKeys","key","machineId","combos","kind","models","modelAliases","customModels","mitmAlias","pricing","value","push","importDb","payload","Array","isArray","Error","transaction","run","c","rest","Date","toISOString","n","p","k","a","m","Object","entries","providerAlias","tool","mappings","initDb"],"mappings":"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"}},
+ {"offset": {"line": 1029, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/paths.js"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport { DATA_DIR } from \"@/lib/dataDir.js\";\n\nexport const DB_DIR = path.join(DATA_DIR, \"db\");\nexport const DATA_FILE = path.join(DB_DIR, \"data.sqlite\");\nexport const BACKUPS_DIR = path.join(DB_DIR, \"backups\");\nexport const LEGACY_FILES = {\n main: path.join(DATA_DIR, \"db.json\"),\n usage: path.join(DATA_DIR, \"usage.json\"),\n disabled: path.join(DATA_DIR, \"disabledModels.json\"),\n details: path.join(DATA_DIR, \"request-details.json\"),\n};\nexport function ensureDirs() {\n for (const dir of [DATA_DIR, DB_DIR, BACKUPS_DIR]) {\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n }\n}\n"],"names":["DB_DIR","join","DATA_FILE","BACKUPS_DIR","LEGACY_FILES","main","usage","disabled","details","ensureDirs","dir","existsSync","mkdirSync","recursive"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;;;;AAEO,MAAMA,SAAS,4HAAI,CAACC,IAAI,CAAC,iIAAQ,EAAE;AACnC,MAAMC,YAAY,4HAAI,CAACD,IAAI,CAACD,QAAQ;AACpC,MAAMG,cAAc,4HAAI,CAACF,IAAI,CAACD,QAAQ;AACtC,MAAMI,eAAe;IAC1BC,MAAM,4HAAI,CAACJ,IAAI,CAAC,iIAAQ,EAAE;IAC1BK,OAAO,4HAAI,CAACL,IAAI,CAAC,iIAAQ,EAAE;IAC3BM,UAAU,4HAAI,CAACN,IAAI,CAAC,iIAAQ,EAAE;IAC9BO,SAAS,4HAAI,CAACP,IAAI,CAAC,iIAAQ,EAAE;AAC/B;AACO,SAASQ;IACd,KAAK,MAAMC,OAAO;QAAC,iIAAQ;QAAEV;QAAQG;KAAY,CAAE;QACjD,IAAI,CAAC,wHAAE,CAACQ,UAAU,CAACD,MAAM,wHAAE,CAACE,SAAS,CAACF,KAAK;YAAEG,WAAW;QAAK;IAC/D;AACF"}},
+ {"offset": {"line": 1071, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/aliasRepo.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\nimport { makeKv } from \"../helpers/kvStore.js\";\n\nconst aliasKv = makeKv(\"modelAliases\");\nconst customKv = makeKv(\"customModels\");\nconst mitmKv = makeKv(\"mitmAlias\");\n\n// modelAliases: key=alias, value=modelString\nexport async function getModelAliases() {\n return await aliasKv.getAll();\n}\n\nexport async function setModelAlias(alias, model) {\n await aliasKv.set(alias, model);\n}\n\nexport async function deleteModelAlias(alias) {\n await aliasKv.remove(alias);\n}\n\n// customModels: key=`${providerAlias}|${id}|${type}`, value=full model object\nfunction customKey(providerAlias, id, type) {\n return `${providerAlias}|${id}|${type}`;\n}\n\nexport async function getCustomModels() {\n const all = await customKv.getAll();\n return Object.values(all);\n}\n\n// Atomic check-then-insert inside transaction to prevent duplicate races\nexport async function addCustomModel({ providerAlias, id, type = \"llm\", name }) {\n const k = customKey(providerAlias, id, type);\n const db = await getAdapter();\n let added = false;\n db.transaction(() => {\n const row = db.get(`SELECT 1 FROM kv WHERE scope = 'customModels' AND key = ?`, [k]);\n if (row) return;\n const value = stringifyJson({ providerAlias, id, type, name: name || id });\n db.run(`INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)`, [k, value]);\n added = true;\n });\n return added;\n}\n\nexport async function deleteCustomModel({ providerAlias, id, type = \"llm\" }) {\n await customKv.remove(customKey(providerAlias, id, type));\n}\n\n// mitmAlias: key=toolName, value=mappings object\nexport async function getMitmAlias(toolName) {\n if (toolName) {\n const v = await mitmKv.get(toolName);\n return v || {};\n }\n return await mitmKv.getAll();\n}\n\nexport async function setMitmAliasAll(toolName, mappings) {\n await mitmKv.set(toolName, mappings || {});\n}\n"],"names":["aliasKv","customKv","mitmKv","getModelAliases","getAll","setModelAlias","alias","model","set","deleteModelAlias","remove","customKey","providerAlias","id","type","getCustomModels","all","Object","values","addCustomModel","name","k","db","added","transaction","row","get","value","run","deleteCustomModel","getMitmAlias","toolName","v","setMitmAliasAll","mappings"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;;;;AAEA,MAAMA,UAAU,IAAA,gJAAM,EAAC;AACvB,MAAMC,WAAW,IAAA,gJAAM,EAAC;AACxB,MAAMC,SAAS,IAAA,gJAAM,EAAC;AAGf,eAAeC;IACpB,OAAO,MAAMH,QAAQI,MAAM;AAC7B;AAEO,eAAeC,cAAcC,KAAK,EAAEC,KAAK;IAC9C,MAAMP,QAAQQ,GAAG,CAACF,OAAOC;AAC3B;AAEO,eAAeE,iBAAiBH,KAAK;IAC1C,MAAMN,QAAQU,MAAM,CAACJ;AACvB;AAEA,8EAA8E;AAC9E,SAASK,UAAUC,aAAa,EAAEC,EAAE,EAAEC,IAAI;IACxC,OAAO,GAAGF,cAAc,CAAC,EAAEC,GAAG,CAAC,EAAEC,MAAM;AACzC;AAEO,eAAeC;IACpB,MAAMC,MAAM,MAAMf,SAASG,MAAM;IACjC,OAAOa,OAAOC,MAAM,CAACF;AACvB;AAGO,eAAeG,eAAe,EAAEP,aAAa,EAAEC,EAAE,EAAEC,OAAO,KAAK,EAAEM,IAAI,EAAE;IAC5E,MAAMC,IAAIV,UAAUC,eAAeC,IAAIC;IACvC,MAAMQ,KAAK,MAAM,IAAA,wIAAU;IAC3B,IAAIC,QAAQ;IACZD,GAAGE,WAAW,CAAC;QACb,MAAMC,MAAMH,GAAGI,GAAG,CAAC,CAAC,yDAAyD,CAAC,EAAE;YAACL;SAAE;QACnF,IAAII,KAAK;QACT,MAAME,QAAQ,IAAA,uJAAa,EAAC;YAAEf;YAAeC;YAAIC;YAAMM,MAAMA,QAAQP;QAAG;QACxES,GAAGM,GAAG,CAAC,CAAC,8DAA8D,CAAC,EAAE;YAACP;YAAGM;SAAM;QACnFJ,QAAQ;IACV;IACA,OAAOA;AACT;AAEO,eAAeM,kBAAkB,EAAEjB,aAAa,EAAEC,EAAE,EAAEC,OAAO,KAAK,EAAE;IACzE,MAAMb,SAASS,MAAM,CAACC,UAAUC,eAAeC,IAAIC;AACrD;AAGO,eAAegB,aAAaC,QAAQ;IACzC,IAAIA,UAAU;QACZ,MAAMC,IAAI,MAAM9B,OAAOwB,GAAG,CAACK;QAC3B,OAAOC,KAAK,CAAC;IACf;IACA,OAAO,MAAM9B,OAAOE,MAAM;AAC5B;AAEO,eAAe6B,gBAAgBF,QAAQ,EAAEG,QAAQ;IACtD,MAAMhC,OAAOM,GAAG,CAACuB,UAAUG,YAAY,CAAC;AAC1C"}},
+ {"offset": {"line": 1155, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/apiKeysRepo.js"],"sourcesContent":["import { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { getAdapter } from \"../driver.js\";\n\nfunction rowToKey(row) {\n if (!row) return null;\n return {\n id: row.id,\n key: row.key,\n name: row.name,\n machineId: row.machineId,\n isActive: row.isActive === 1 || row.isActive === true,\n allowedModels: parseJson(row.allowedModels, null),\n createdAt: row.createdAt,\n };\n}\n\nexport async function getApiKeys() {\n const db = await getAdapter();\n const rows = db.all(`SELECT * FROM apiKeys ORDER BY createdAt ASC`);\n return rows.map(rowToKey);\n}\n\nexport async function getApiKeyById(id) {\n const db = await getAdapter();\n const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [id]);\n return rowToKey(row);\n}\n\nexport async function createApiKey(name, machineId) {\n if (!machineId) throw new Error(\"machineId is required\");\n const db = await getAdapter();\n const { generateApiKeyWithMachine } = await import(\"@/shared/utils/apiKey\");\n const result = generateApiKeyWithMachine(machineId);\n const apiKey = {\n id: uuidv4(),\n name,\n key: result.key,\n machineId,\n isActive: true,\n createdAt: new Date().toISOString(),\n };\n db.run(\n `INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`,\n [apiKey.id, apiKey.key, apiKey.name, apiKey.machineId, 1, apiKey.createdAt]\n );\n return apiKey;\n}\n\nexport async function updateApiKey(id, data) {\n const db = await getAdapter();\n let result = null;\n db.transaction(() => {\n const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [id]);\n if (!row) return;\n const merged = { ...rowToKey(row), ...data };\n db.run(\n `UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, allowedModels = ? WHERE id = ?`,\n [merged.key, merged.name, merged.machineId, merged.isActive ? 1 : 0,\n merged.allowedModels == null ? null : stringifyJson(merged.allowedModels), id]\n );\n result = merged;\n });\n return result;\n}\n\nexport async function importApiKey(name, keyValue) {\n if (!keyValue?.trim()) throw new Error(\"Key value is required\");\n const db = await getAdapter();\n\n // Check for duplicates\n const existing = db.get(`SELECT id FROM apiKeys WHERE key = ?`, [keyValue.trim()]);\n if (existing) {\n throw new Error(\"This API key already exists in the system\");\n }\n\n const apiKey = {\n id: uuidv4(),\n name: name?.trim() || \"Imported Key\",\n key: keyValue.trim(),\n machineId: null,\n isActive: true,\n createdAt: new Date().toISOString(),\n };\n db.run(\n `INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`,\n [apiKey.id, apiKey.key, apiKey.name, apiKey.machineId, 1, apiKey.createdAt]\n );\n return apiKey;\n}\n\nexport async function deleteApiKey(id) {\n const db = await getAdapter();\n const res = db.run(`DELETE FROM apiKeys WHERE id = ?`, [id]);\n return (res?.changes ?? 0) > 0;\n}\n\nexport async function validateApiKey(key) {\n const db = await getAdapter();\n const row = db.get(`SELECT isActive FROM apiKeys WHERE key = ?`, [key]);\n if (!row) return false;\n return row.isActive === 1 || row.isActive === true;\n}\n\n// Resolve a raw key string to its full record (null when unknown/inactive).\n// Used by the gateway to enforce per-key model restrictions.\nexport async function getApiKeyByKey(key) {\n if (!key) return null;\n const db = await getAdapter();\n const row = db.get(`SELECT * FROM apiKeys WHERE key = ?`, [key]);\n const rec = rowToKey(row);\n if (!rec || !rec.isActive) return null;\n return rec;\n}\n"],"names":["rowToKey","row","id","key","name","machineId","isActive","allowedModels","createdAt","getApiKeys","db","rows","all","map","getApiKeyById","get","createApiKey","Error","generateApiKeyWithMachine","result","apiKey","Date","toISOString","run","updateApiKey","data","transaction","merged","importApiKey","keyValue","trim","existing","deleteApiKey","res","changes","validateApiKey","getApiKeyByKey","rec"],"mappings":"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"}},
+ {"offset": {"line": 1307, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/combosRepo.js"],"sourcesContent":["import { v4 as uuidv4 } from \"uuid\";\nimport { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nfunction rowToCombo(row) {\n\tif (!row) return null;\n\treturn {\n\t\tid: row.id,\n\t\tname: row.name,\n\t\tkind: row.kind,\n\t\tmodels: parseJson(row.models, []),\n\t\tenabled: row.enabled === 1 || row.enabled === true,\n\t\tcreatedAt: row.createdAt,\n\t\tupdatedAt: row.updatedAt,\n\t};\n}\n\nexport async function getCombos() {\n\tconst db = await getAdapter();\n\tconst rows = db.all(`SELECT * FROM combos ORDER BY createdAt ASC`);\n\treturn rows.map(rowToCombo);\n}\n\nexport async function getComboById(id) {\n\tconst db = await getAdapter();\n\tconst row = db.get(`SELECT * FROM combos WHERE id = ?`, [id]);\n\treturn rowToCombo(row);\n}\n\nexport async function getComboByName(name) {\n\tconst db = await getAdapter();\n\tconst row = db.get(`SELECT * FROM combos WHERE name = ?`, [name]);\n\treturn rowToCombo(row);\n}\n\nexport async function createCombo(data) {\n\tconst db = await getAdapter();\n\tconst now = new Date().toISOString();\n\tconst combo = {\n\t\tid: uuidv4(),\n\t\tname: data.name,\n\t\tkind: data.kind || null,\n\t\tmodels: data.models || [],\n\t\tenabled: data.enabled !== false,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t};\n\tdb.run(\n\t\t`INSERT INTO combos(id, name, kind, models, enabled, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)`,\n\t\t[\n\t\t\tcombo.id,\n\t\t\tcombo.name,\n\t\t\tcombo.kind,\n\t\t\tstringifyJson(combo.models),\n\t\t\tcombo.enabled !== false ? 1 : 0,\n\t\t\tcombo.createdAt,\n\t\t\tcombo.updatedAt,\n\t\t],\n\t);\n\treturn combo;\n}\n\nexport async function updateCombo(id, data) {\n\tconst db = await getAdapter();\n\tlet result = null;\n\tdb.transaction(() => {\n\t\tconst row = db.get(`SELECT * FROM combos WHERE id = ?`, [id]);\n\t\tif (!row) return;\n\t\tconst merged = {\n\t\t\t...rowToCombo(row),\n\t\t\t...data,\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t};\n\t\tdb.run(\n\t\t\t`UPDATE combos SET name = ?, kind = ?, models = ?, enabled = ?, updatedAt = ? WHERE id = ?`,\n\t\t\t[\n\t\t\t\tmerged.name,\n\t\t\t\tmerged.kind,\n\t\t\t\tstringifyJson(merged.models || []),\n\t\t\t\tmerged.enabled ? 1 : 0,\n\t\t\t\tmerged.updatedAt,\n\t\t\t\tid,\n\t\t\t],\n\t\t);\n\t\tresult = merged;\n\t});\n\treturn result;\n}\n\nexport async function deleteCombo(id) {\n\tconst db = await getAdapter();\n\tconst res = db.run(`DELETE FROM combos WHERE id = ?`, [id]);\n\treturn (res?.changes ?? 0) > 0;\n}\n"],"names":["rowToCombo","row","id","name","kind","models","enabled","createdAt","updatedAt","getCombos","db","rows","all","map","getComboById","get","getComboByName","createCombo","data","now","Date","toISOString","combo","run","updateCombo","result","transaction","merged","deleteCombo","res","changes"],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;;;;AAEA,SAASA,WAAWC,GAAG;IACtB,IAAI,CAACA,KAAK,OAAO;IACjB,OAAO;QACNC,IAAID,IAAIC,EAAE;QACVC,MAAMF,IAAIE,IAAI;QACdC,MAAMH,IAAIG,IAAI;QACdC,QAAQ,IAAA,mJAAS,EAACJ,IAAII,MAAM,EAAE,EAAE;QAChCC,SAASL,IAAIK,OAAO,KAAK,KAAKL,IAAIK,OAAO,KAAK;QAC9CC,WAAWN,IAAIM,SAAS;QACxBC,WAAWP,IAAIO,SAAS;IACzB;AACD;AAEO,eAAeC;IACrB,MAAMC,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMC,OAAOD,GAAGE,GAAG,CAAC,CAAC,2CAA2C,CAAC;IACjE,OAAOD,KAAKE,GAAG,CAACb;AACjB;AAEO,eAAec,aAAaZ,EAAE;IACpC,MAAMQ,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMT,MAAMS,GAAGK,GAAG,CAAC,CAAC,iCAAiC,CAAC,EAAE;QAACb;KAAG;IAC5D,OAAOF,WAAWC;AACnB;AAEO,eAAee,eAAeb,IAAI;IACxC,MAAMO,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMT,MAAMS,GAAGK,GAAG,CAAC,CAAC,mCAAmC,CAAC,EAAE;QAACZ;KAAK;IAChE,OAAOH,WAAWC;AACnB;AAEO,eAAegB,YAAYC,IAAI;IACrC,MAAMR,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMS,MAAM,IAAIC,OAAOC,WAAW;IAClC,MAAMC,QAAQ;QACbpB,IAAI,IAAA,iLAAM;QACVC,MAAMe,KAAKf,IAAI;QACfC,MAAMc,KAAKd,IAAI,IAAI;QACnBC,QAAQa,KAAKb,MAAM,IAAI,EAAE;QACzBC,SAASY,KAAKZ,OAAO,KAAK;QAC1BC,WAAWY;QACXX,WAAWW;IACZ;IACAT,GAAGa,GAAG,CACL,CAAC,qGAAqG,CAAC,EACvG;QACCD,MAAMpB,EAAE;QACRoB,MAAMnB,IAAI;QACVmB,MAAMlB,IAAI;QACV,IAAA,uJAAa,EAACkB,MAAMjB,MAAM;QAC1BiB,MAAMhB,OAAO,KAAK,QAAQ,IAAI;QAC9BgB,MAAMf,SAAS;QACfe,MAAMd,SAAS;KACf;IAEF,OAAOc;AACR;AAEO,eAAeE,YAAYtB,EAAE,EAAEgB,IAAI;IACzC,MAAMR,KAAK,MAAM,IAAA,wIAAU;IAC3B,IAAIe,SAAS;IACbf,GAAGgB,WAAW,CAAC;QACd,MAAMzB,MAAMS,GAAGK,GAAG,CAAC,CAAC,iCAAiC,CAAC,EAAE;YAACb;SAAG;QAC5D,IAAI,CAACD,KAAK;QACV,MAAM0B,SAAS;YACd,GAAG3B,WAAWC,IAAI;YAClB,GAAGiB,IAAI;YACPV,WAAW,IAAIY,OAAOC,WAAW;QAClC;QACAX,GAAGa,GAAG,CACL,CAAC,yFAAyF,CAAC,EAC3F;YACCI,OAAOxB,IAAI;YACXwB,OAAOvB,IAAI;YACX,IAAA,uJAAa,EAACuB,OAAOtB,MAAM,IAAI,EAAE;YACjCsB,OAAOrB,OAAO,GAAG,IAAI;YACrBqB,OAAOnB,SAAS;YAChBN;SACA;QAEFuB,SAASE;IACV;IACA,OAAOF;AACR;AAEO,eAAeG,YAAY1B,EAAE;IACnC,MAAMQ,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMmB,MAAMnB,GAAGa,GAAG,CAAC,CAAC,+BAA+B,CAAC,EAAE;QAACrB;KAAG;IAC1D,OAAO,CAAC2B,KAAKC,WAAW,CAAC,IAAI;AAC9B"}},
+ {"offset": {"line": 1417, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/connectionsRepo.js"],"sourcesContent":["import { v4 as uuidv4 } from \"uuid\";\nimport { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nconst OPTIONAL_FIELDS = [\n \"displayName\", \"email\", \"globalPriority\", \"defaultModel\",\n \"accessToken\", \"refreshToken\", \"expiresAt\", \"tokenType\",\n \"scope\", \"projectId\", \"apiKey\", \"testStatus\",\n \"lastTested\", \"lastError\", \"lastErrorAt\", \"rateLimitedUntil\", \"expiresIn\", \"errorCode\",\n \"consecutiveUseCount\", \"idToken\", \"lastRefreshAt\",\n];\n\nfunction rowToConn(row) {\n if (!row) return null;\n const extra = parseJson(row.data, {});\n return {\n ...extra,\n id: row.id,\n provider: row.provider,\n authType: row.authType,\n name: row.name,\n email: row.email,\n priority: row.priority,\n isActive: row.isActive === 1 || row.isActive === true,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction connToRow(c) {\n const { id, provider, authType, name, email, priority, isActive, createdAt, updatedAt, ...rest } = c;\n return {\n id,\n provider,\n authType,\n name: name ?? null,\n email: email ?? null,\n priority: priority ?? null,\n isActive: isActive === false ? 0 : 1,\n data: stringifyJson(rest),\n createdAt,\n updatedAt,\n };\n}\n\nfunction upsert(db, c) {\n const r = connToRow(c);\n db.run(\n `INSERT INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt)\n VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n provider=excluded.provider, authType=excluded.authType, name=excluded.name,\n email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,\n data=excluded.data, updatedAt=excluded.updatedAt`,\n [r.id, r.provider, r.authType, r.name, r.email, r.priority, r.isActive, r.data, r.createdAt, r.updatedAt]\n );\n}\n\nfunction deriveConnectionName(data, fallbackName) {\n if (data.provider === \"github\") {\n return data.providerSpecificData?.githubLogin\n || data.providerSpecificData?.githubEmail\n || data.email\n || data.providerSpecificData?.githubName\n || fallbackName;\n }\n return fallbackName;\n}\n\nexport async function getProviderConnections(filter = {}) {\n const db = await getAdapter();\n const where = [];\n const params = [];\n if (filter.provider) { where.push(\"provider = ?\"); params.push(filter.provider); }\n if (filter.isActive !== undefined) { where.push(\"isActive = ?\"); params.push(filter.isActive ? 1 : 0); }\n const sql = `SELECT * FROM providerConnections${where.length ? ` WHERE ${where.join(\" AND \")}` : \"\"}`;\n const rows = db.all(sql, params);\n const list = rows.map(rowToConn);\n list.sort((a, b) => (a.priority || 999) - (b.priority || 999));\n return list;\n}\n\nexport async function getProviderConnectionById(id) {\n const db = await getAdapter();\n const row = db.get(`SELECT * FROM providerConnections WHERE id = ?`, [id]);\n return rowToConn(row);\n}\n\n// Internal sync reorder — must be called INSIDE a transaction\nfunction reorderInTx(db, providerId) {\n const list = db.all(`SELECT * FROM providerConnections WHERE provider = ?`, [providerId]).map(rowToConn);\n list.sort((a, b) => {\n const pDiff = (a.priority || 0) - (b.priority || 0);\n if (pDiff !== 0) return pDiff;\n return new Date(b.updatedAt || 0) - new Date(a.updatedAt || 0);\n });\n list.forEach((c, i) => {\n db.run(`UPDATE providerConnections SET priority = ? WHERE id = ?`, [i + 1, c.id]);\n });\n}\n\nexport async function createProviderConnection(data) {\n const db = await getAdapter();\n const now = new Date().toISOString();\n let result;\n\n db.transaction(() => {\n const all = db.all(`SELECT * FROM providerConnections WHERE provider = ?`, [data.provider]).map(rowToConn);\n\n let existing = null;\n if (data.authType === \"oauth\" && data.email) {\n const incomingUsername = data.providerSpecificData?.username;\n const incomingWs = data.providerSpecificData?.chatgptAccountId;\n existing = all.find(c => {\n if (c.authType !== \"oauth\" || c.email !== data.email) return false;\n\n // Codex/OpenAI can issue multiple OAuth grants for the same email.\n // Refresh tokens are rotated single-use; collapsing a new login onto an\n // existing bare-email row overwrites the first account's token pair and\n // makes it look \"invalid\" after adding a second account. Only update an\n // existing Codex row when both rows expose the same ChatGPT account ID.\n if (data.provider === \"codex\") {\n const existingWs = c.providerSpecificData?.chatgptAccountId;\n return !!incomingWs && !!existingWs && incomingWs === existingWs;\n }\n\n // Workspace providers use workspace ID when both sides have it\n const existingWs = c.providerSpecificData?.chatgptAccountId;\n if (incomingWs && existingWs) return incomingWs === existingWs;\n if (incomingWs && !existingWs) return false;\n if (!incomingWs && existingWs) return false;\n // Non-workspace providers: match on (email + username) so cross-IdP\n // accounts don't overwrite each other. Require username on both sides\n // — if only one side has it, treat as a distinct identity rather than\n // collapsing onto the bare-email fallback (which would re-introduce\n // the cross-IdP overwrite).\n const existingUsername = c.providerSpecificData?.username;\n if (incomingUsername && existingUsername) {\n return incomingUsername === existingUsername;\n }\n if (incomingUsername || existingUsername) return false;\n return true;\n });\n } else if (data.authType === \"apikey\" && data.name) {\n existing = all.find(c => c.authType === \"apikey\" && c.name === data.name);\n }\n // access_token: never dedup — user manages duplicates manually\n\n if (existing) {\n const merged = { ...existing, ...data, updatedAt: now };\n upsert(db, merged);\n result = merged;\n return;\n }\n\n let connectionName = data.name || null;\n if (!connectionName && (data.authType === \"oauth\" || data.authType === \"access_token\")) {\n connectionName = deriveConnectionName(data, data.email || `Account ${all.length + 1}`);\n }\n let connectionPriority = data.priority;\n if (!connectionPriority) {\n connectionPriority = all.reduce((m, c) => Math.max(m, c.priority || 0), 0) + 1;\n }\n\n const conn = {\n id: uuidv4(),\n provider: data.provider,\n authType: data.authType || \"oauth\",\n name: connectionName,\n priority: connectionPriority,\n isActive: data.isActive !== undefined ? data.isActive : true,\n createdAt: now,\n updatedAt: now,\n };\n for (const f of OPTIONAL_FIELDS) {\n if (data[f] !== undefined && data[f] !== null) conn[f] = data[f];\n }\n if (data.providerSpecificData && Object.keys(data.providerSpecificData).length > 0) {\n conn.providerSpecificData = data.providerSpecificData;\n }\n if (data.email !== undefined) conn.email = data.email;\n\n upsert(db, conn);\n reorderInTx(db, data.provider);\n result = conn;\n });\n\n return result;\n}\n\n// Critical: OAuth refresh token race — atomic merge inside transaction\nexport async function updateProviderConnection(id, data) {\n const db = await getAdapter();\n let result;\n db.transaction(() => {\n const row = db.get(`SELECT * FROM providerConnections WHERE id = ?`, [id]);\n if (!row) { result = null; return; }\n const existing = rowToConn(row);\n const merged = { ...existing, ...data, updatedAt: new Date().toISOString() };\n upsert(db, merged);\n if (data.priority !== undefined) reorderInTx(db, existing.provider);\n result = merged;\n });\n return result;\n}\n\nexport async function deleteProviderConnection(id) {\n const db = await getAdapter();\n let ok = false;\n db.transaction(() => {\n const row = db.get(`SELECT provider FROM providerConnections WHERE id = ?`, [id]);\n if (!row) return;\n db.run(`DELETE FROM providerConnections WHERE id = ?`, [id]);\n reorderInTx(db, row.provider);\n ok = true;\n });\n return ok;\n}\n\nexport async function deleteProviderConnectionsByProvider(providerId) {\n const db = await getAdapter();\n const before = db.get(`SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?`, [providerId]);\n db.run(`DELETE FROM providerConnections WHERE provider = ?`, [providerId]);\n return before?.n || 0;\n}\n\nexport async function reorderProviderConnections(providerId) {\n const db = await getAdapter();\n db.transaction(() => reorderInTx(db, providerId));\n}\n\nexport async function cleanupProviderConnections() {\n const db = await getAdapter();\n const fieldsToCheck = [\n \"displayName\", \"email\", \"globalPriority\", \"defaultModel\",\n \"accessToken\", \"refreshToken\", \"expiresAt\", \"tokenType\",\n \"scope\", \"projectId\", \"apiKey\", \"testStatus\",\n \"lastTested\", \"lastError\", \"lastErrorAt\", \"rateLimitedUntil\", \"expiresIn\",\n \"consecutiveUseCount\",\n ];\n let cleaned = 0;\n db.transaction(() => {\n const rows = db.all(`SELECT * FROM providerConnections`);\n for (const row of rows) {\n const conn = rowToConn(row);\n let dirty = false;\n for (const f of fieldsToCheck) {\n if (conn[f] === null || conn[f] === undefined) {\n if (f in conn) { delete conn[f]; cleaned++; dirty = true; }\n }\n }\n if (conn.providerSpecificData && Object.keys(conn.providerSpecificData).length === 0) {\n delete conn.providerSpecificData;\n cleaned++;\n dirty = true;\n }\n if (dirty) upsert(db, conn);\n }\n });\n return cleaned;\n}\n"],"names":["OPTIONAL_FIELDS","rowToConn","row","extra","data","id","provider","authType","name","email","priority","isActive","createdAt","updatedAt","connToRow","c","rest","upsert","db","r","run","deriveConnectionName","fallbackName","providerSpecificData","githubLogin","githubEmail","githubName","getProviderConnections","filter","where","params","push","undefined","sql","length","join","rows","all","list","map","sort","a","b","getProviderConnectionById","get","reorderInTx","providerId","pDiff","Date","forEach","i","createProviderConnection","now","toISOString","result","transaction","existing","incomingUsername","username","incomingWs","chatgptAccountId","find","existingWs","existingUsername","merged","connectionName","connectionPriority","reduce","m","Math","max","conn","f","Object","keys","updateProviderConnection","deleteProviderConnection","ok","deleteProviderConnectionsByProvider","before","n","reorderProviderConnections","cleanupProviderConnections","fieldsToCheck","cleaned","dirty"],"mappings":"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"}},
+ {"offset": {"line": 1752, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/disabledModelsRepo.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nconst SCOPE = \"disabledModels\";\n\nexport async function getDisabledModels() {\n const db = await getAdapter();\n const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [SCOPE]);\n const out = {};\n for (const r of rows) out[r.key] = parseJson(r.value, []);\n return out;\n}\n\nexport async function getDisabledByProvider(providerAlias) {\n const db = await getAdapter();\n const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);\n return row ? (parseJson(row.value, []) || []) : [];\n}\n\n// Atomic read-merge-write inside a transaction (no JS yield mid-transaction).\nexport async function disableModels(providerAlias, ids) {\n if (!providerAlias || !Array.isArray(ids)) return;\n const db = await getAdapter();\n db.transaction(() => {\n const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);\n const current = row ? (parseJson(row.value, []) || []) : [];\n const merged = [...new Set([...current, ...ids])];\n db.run(\n `INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,\n [SCOPE, providerAlias, stringifyJson(merged)]\n );\n });\n}\n\nexport async function enableModels(providerAlias, ids) {\n if (!providerAlias) return;\n const db = await getAdapter();\n db.transaction(() => {\n if (!Array.isArray(ids) || ids.length === 0) {\n db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);\n return;\n }\n const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);\n const current = row ? (parseJson(row.value, []) || []) : [];\n const removeSet = new Set(ids);\n const next = current.filter((id) => !removeSet.has(id));\n if (next.length === 0) {\n db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);\n } else {\n db.run(\n `INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,\n [SCOPE, providerAlias, stringifyJson(next)]\n );\n }\n });\n}\n"],"names":["SCOPE","getDisabledModels","db","rows","all","out","r","key","value","getDisabledByProvider","providerAlias","row","get","disableModels","ids","Array","isArray","transaction","current","merged","Set","run","enableModels","length","removeSet","next","filter","id","has"],"mappings":";;;;;;;;;;AAAA;AACA;;;AAEA,MAAMA,QAAQ;AAEP,eAAeC;IACpB,MAAMC,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMC,OAAOD,GAAGE,GAAG,CAAC,CAAC,yCAAyC,CAAC,EAAE;QAACJ;KAAM;IACxE,MAAMK,MAAM,CAAC;IACb,KAAK,MAAMC,KAAKH,KAAME,GAAG,CAACC,EAAEC,GAAG,CAAC,GAAG,IAAA,mJAAS,EAACD,EAAEE,KAAK,EAAE,EAAE;IACxD,OAAOH;AACT;AAEO,eAAeI,sBAAsBC,aAAa;IACvD,MAAMR,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMS,MAAMT,GAAGU,GAAG,CAAC,CAAC,gDAAgD,CAAC,EAAE;QAACZ;QAAOU;KAAc;IAC7F,OAAOC,MAAO,IAAA,mJAAS,EAACA,IAAIH,KAAK,EAAE,EAAE,KAAK,EAAE,GAAI,EAAE;AACpD;AAGO,eAAeK,cAAcH,aAAa,EAAEI,GAAG;IACpD,IAAI,CAACJ,iBAAiB,CAACK,MAAMC,OAAO,CAACF,MAAM;IAC3C,MAAMZ,KAAK,MAAM,IAAA,wIAAU;IAC3BA,GAAGe,WAAW,CAAC;QACb,MAAMN,MAAMT,GAAGU,GAAG,CAAC,CAAC,gDAAgD,CAAC,EAAE;YAACZ;YAAOU;SAAc;QAC7F,MAAMQ,UAAUP,MAAO,IAAA,mJAAS,EAACA,IAAIH,KAAK,EAAE,EAAE,KAAK,EAAE,GAAI,EAAE;QAC3D,MAAMW,SAAS;eAAI,IAAIC,IAAI;mBAAIF;mBAAYJ;aAAI;SAAE;QACjDZ,GAAGmB,GAAG,CACJ,CAAC,8GAA8G,CAAC,EAChH;YAACrB;YAAOU;YAAe,IAAA,uJAAa,EAACS;SAAQ;IAEjD;AACF;AAEO,eAAeG,aAAaZ,aAAa,EAAEI,GAAG;IACnD,IAAI,CAACJ,eAAe;IACpB,MAAMR,KAAK,MAAM,IAAA,wIAAU;IAC3BA,GAAGe,WAAW,CAAC;QACb,IAAI,CAACF,MAAMC,OAAO,CAACF,QAAQA,IAAIS,MAAM,KAAK,GAAG;YAC3CrB,GAAGmB,GAAG,CAAC,CAAC,0CAA0C,CAAC,EAAE;gBAACrB;gBAAOU;aAAc;YAC3E;QACF;QACA,MAAMC,MAAMT,GAAGU,GAAG,CAAC,CAAC,gDAAgD,CAAC,EAAE;YAACZ;YAAOU;SAAc;QAC7F,MAAMQ,UAAUP,MAAO,IAAA,mJAAS,EAACA,IAAIH,KAAK,EAAE,EAAE,KAAK,EAAE,GAAI,EAAE;QAC3D,MAAMgB,YAAY,IAAIJ,IAAIN;QAC1B,MAAMW,OAAOP,QAAQQ,MAAM,CAAC,CAACC,KAAO,CAACH,UAAUI,GAAG,CAACD;QACnD,IAAIF,KAAKF,MAAM,KAAK,GAAG;YACrBrB,GAAGmB,GAAG,CAAC,CAAC,0CAA0C,CAAC,EAAE;gBAACrB;gBAAOU;aAAc;QAC7E,OAAO;YACLR,GAAGmB,GAAG,CACJ,CAAC,8GAA8G,CAAC,EAChH;gBAACrB;gBAAOU;gBAAe,IAAA,uJAAa,EAACe;aAAM;QAE/C;IACF;AACF"}},
+ {"offset": {"line": 1842, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/nodesRepo.js"],"sourcesContent":["import { v4 as uuidv4 } from \"uuid\";\nimport { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nfunction rowToNode(row) {\n if (!row) return null;\n const extra = parseJson(row.data, {});\n return {\n ...extra,\n id: row.id,\n type: row.type,\n name: row.name,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction nodeToRow(n) {\n const { id, type, name, createdAt, updatedAt, ...rest } = n;\n return {\n id,\n type: type ?? null,\n name: name ?? null,\n data: stringifyJson(rest),\n createdAt,\n updatedAt,\n };\n}\n\nfunction upsert(db, n) {\n const r = nodeToRow(n);\n db.run(\n `INSERT INTO providerNodes(id, type, name, data, createdAt, updatedAt)\n VALUES(?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n type=excluded.type, name=excluded.name, data=excluded.data, updatedAt=excluded.updatedAt`,\n [r.id, r.type, r.name, r.data, r.createdAt, r.updatedAt]\n );\n}\n\nexport async function getProviderNodes(filter = {}) {\n const db = await getAdapter();\n const where = [];\n const params = [];\n if (filter.type) { where.push(\"type = ?\"); params.push(filter.type); }\n const sql = `SELECT * FROM providerNodes${where.length ? ` WHERE ${where.join(\" AND \")}` : \"\"}`;\n return db.all(sql, params).map(rowToNode);\n}\n\nexport async function getProviderNodeById(id) {\n const db = await getAdapter();\n return rowToNode(db.get(`SELECT * FROM providerNodes WHERE id = ?`, [id]));\n}\n\nexport async function createProviderNode(data) {\n const db = await getAdapter();\n const now = new Date().toISOString();\n const node = {\n id: data.id || uuidv4(),\n type: data.type,\n name: data.name,\n prefix: data.prefix,\n apiType: data.apiType,\n baseUrl: data.baseUrl,\n createdAt: now,\n updatedAt: now,\n };\n upsert(db, node);\n return node;\n}\n\nexport async function updateProviderNode(id, data) {\n const db = await getAdapter();\n let result = null;\n db.transaction(() => {\n const row = db.get(`SELECT * FROM providerNodes WHERE id = ?`, [id]);\n if (!row) return;\n const merged = { ...rowToNode(row), ...data, updatedAt: new Date().toISOString() };\n upsert(db, merged);\n result = merged;\n });\n return result;\n}\n\nexport async function deleteProviderNode(id) {\n const db = await getAdapter();\n let removed = null;\n db.transaction(() => {\n const row = db.get(`SELECT * FROM providerNodes WHERE id = ?`, [id]);\n if (!row) return;\n removed = rowToNode(row);\n db.run(`DELETE FROM providerNodes WHERE id = ?`, [id]);\n });\n return removed;\n}\n"],"names":["rowToNode","row","extra","data","id","type","name","createdAt","updatedAt","nodeToRow","n","rest","upsert","db","r","run","getProviderNodes","filter","where","params","push","sql","length","join","all","map","getProviderNodeById","get","createProviderNode","now","Date","toISOString","node","prefix","apiType","baseUrl","updateProviderNode","result","transaction","merged","deleteProviderNode","removed"],"mappings":"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"}},
+ {"offset": {"line": 1967, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/pricingRepo.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\nimport { makeKv } from \"../helpers/kvStore.js\";\n\nconst pricingKv = makeKv(\"pricing\");\nconst CACHE_TTL_MS = 5000;\n\nlet cache = { value: null, expiresAt: 0 };\n\nfunction invalidate() {\n cache = { value: null, expiresAt: 0 };\n}\n\nasync function getUserPricing() {\n return await pricingKv.getAll();\n}\n\nexport async function getPricing() {\n const now = Date.now();\n if (cache.value && cache.expiresAt > now) return cache.value;\n\n const userPricing = await getUserPricing();\n const { PROVIDER_PRICING } = await import(\"open-sse/providers/pricing.js\");\n const merged = {};\n\n for (const [provider, models] of Object.entries(PROVIDER_PRICING)) {\n merged[provider] = { ...models };\n if (userPricing[provider]) {\n for (const [model, pricing] of Object.entries(userPricing[provider])) {\n merged[provider][model] = merged[provider][model]\n ? { ...merged[provider][model], ...pricing }\n : pricing;\n }\n }\n }\n\n for (const [provider, models] of Object.entries(userPricing)) {\n if (!merged[provider]) {\n merged[provider] = { ...models };\n } else {\n for (const [model, pricing] of Object.entries(models)) {\n if (!merged[provider][model]) merged[provider][model] = pricing;\n }\n }\n }\n\n cache = { value: merged, expiresAt: now + CACHE_TTL_MS };\n return merged;\n}\n\nexport async function getPricingForModel(provider, model) {\n if (!model) return null;\n const userPricing = await getUserPricing();\n if (provider && userPricing[provider]?.[model]) return userPricing[provider][model];\n const { getPricingForModel: resolveConst } = await import(\"open-sse/providers/pricing.js\");\n return resolveConst(provider, model);\n}\n\n// Atomic merge inside transaction (per-provider read-modify-write)\nexport async function updatePricing(pricingData) {\n const db = await getAdapter();\n db.transaction(() => {\n for (const [provider, models] of Object.entries(pricingData)) {\n const row = db.get(`SELECT value FROM kv WHERE scope = 'pricing' AND key = ?`, [provider]);\n const current = row ? (parseJson(row.value, {}) || {}) : {};\n const merged = { ...current };\n for (const [model, pricing] of Object.entries(models)) {\n merged[model] = pricing;\n }\n db.run(\n `INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,\n [provider, stringifyJson(merged)]\n );\n }\n });\n invalidate();\n return await getUserPricing();\n}\n\nexport async function resetPricing(provider, model) {\n if (!provider) return await getUserPricing();\n const db = await getAdapter();\n db.transaction(() => {\n if (!model) {\n db.run(`DELETE FROM kv WHERE scope = 'pricing' AND key = ?`, [provider]);\n return;\n }\n const row = db.get(`SELECT value FROM kv WHERE scope = 'pricing' AND key = ?`, [provider]);\n const current = row ? (parseJson(row.value, {}) || {}) : {};\n delete current[model];\n if (Object.keys(current).length === 0) {\n db.run(`DELETE FROM kv WHERE scope = 'pricing' AND key = ?`, [provider]);\n } else {\n db.run(\n `INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,\n [provider, stringifyJson(current)]\n );\n }\n });\n invalidate();\n return await getUserPricing();\n}\n\nexport async function resetAllPricing() {\n await pricingKv.clear();\n invalidate();\n return {};\n}\n"],"names":["pricingKv","CACHE_TTL_MS","cache","value","expiresAt","invalidate","getUserPricing","getAll","getPricing","now","Date","userPricing","PROVIDER_PRICING","merged","provider","models","Object","entries","model","pricing","getPricingForModel","resolveConst","updatePricing","pricingData","db","transaction","row","get","current","run","resetPricing","keys","length","resetAllPricing","clear"],"mappings":"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"}},
+ {"offset": {"line": 2104, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/proxyPoolsRepo.js"],"sourcesContent":["import { v4 as uuidv4 } from \"uuid\";\nimport { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nfunction rowToPool(row) {\n if (!row) return null;\n const extra = parseJson(row.data, {});\n return {\n ...extra,\n id: row.id,\n isActive: row.isActive === 1 || row.isActive === true,\n testStatus: row.testStatus,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction poolToRow(p) {\n const { id, isActive, testStatus, createdAt, updatedAt, ...rest } = p;\n return {\n id,\n isActive: isActive === false ? 0 : 1,\n testStatus: testStatus ?? null,\n data: stringifyJson(rest),\n createdAt,\n updatedAt,\n };\n}\n\nfunction upsert(db, p) {\n const r = poolToRow(p);\n db.run(\n `INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)\n VALUES(?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n isActive=excluded.isActive, testStatus=excluded.testStatus,\n data=excluded.data, updatedAt=excluded.updatedAt`,\n [r.id, r.isActive, r.testStatus, r.data, r.createdAt, r.updatedAt]\n );\n}\n\nexport async function getProxyPools(filter = {}) {\n const db = await getAdapter();\n const where = [];\n const params = [];\n if (filter.isActive !== undefined) { where.push(\"isActive = ?\"); params.push(filter.isActive ? 1 : 0); }\n if (filter.testStatus) { where.push(\"testStatus = ?\"); params.push(filter.testStatus); }\n const sql = `SELECT * FROM proxyPools${where.length ? ` WHERE ${where.join(\" AND \")}` : \"\"}`;\n const list = db.all(sql, params).map(rowToPool);\n list.sort((a, b) => new Date(b.updatedAt || 0) - new Date(a.updatedAt || 0));\n return list;\n}\n\nexport async function getProxyPoolById(id) {\n const db = await getAdapter();\n return rowToPool(db.get(`SELECT * FROM proxyPools WHERE id = ?`, [id]));\n}\n\nexport async function createProxyPool(data) {\n const db = await getAdapter();\n const now = new Date().toISOString();\n const pool = {\n id: data.id || uuidv4(),\n name: data.name,\n proxyUrl: data.proxyUrl,\n noProxy: data.noProxy || \"\",\n type: data.type || \"http\",\n isActive: data.isActive !== undefined ? data.isActive : true,\n strictProxy: data.strictProxy === true,\n testStatus: data.testStatus || \"unknown\",\n lastTestedAt: data.lastTestedAt || null,\n lastError: data.lastError || null,\n createdAt: now,\n updatedAt: now,\n };\n upsert(db, pool);\n return pool;\n}\n\nexport async function updateProxyPool(id, data) {\n const db = await getAdapter();\n let result = null;\n db.transaction(() => {\n const row = db.get(`SELECT * FROM proxyPools WHERE id = ?`, [id]);\n if (!row) return;\n const merged = { ...rowToPool(row), ...data, updatedAt: new Date().toISOString() };\n upsert(db, merged);\n result = merged;\n });\n return result;\n}\n\nexport async function deleteProxyPool(id) {\n const db = await getAdapter();\n let removed = null;\n db.transaction(() => {\n const row = db.get(`SELECT * FROM proxyPools WHERE id = ?`, [id]);\n if (!row) return;\n removed = rowToPool(row);\n db.run(`DELETE FROM proxyPools WHERE id = ?`, [id]);\n });\n return removed;\n}\n"],"names":["rowToPool","row","extra","data","id","isActive","testStatus","createdAt","updatedAt","poolToRow","p","rest","upsert","db","r","run","getProxyPools","filter","where","params","undefined","push","sql","length","join","list","all","map","sort","a","b","Date","getProxyPoolById","get","createProxyPool","now","toISOString","pool","name","proxyUrl","noProxy","type","strictProxy","lastTestedAt","lastError","updateProxyPool","result","transaction","merged","deleteProxyPool","removed"],"mappings":"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"}},
+ {"offset": {"line": 2240, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/requestDetailsRepo.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nconst DEFAULT_MAX_RECORDS = 200;\nconst DEFAULT_BATCH_SIZE = 20;\nconst DEFAULT_FLUSH_INTERVAL_MS = 5000;\nconst DEFAULT_MAX_JSON_SIZE = 5 * 1024;\nconst CONFIG_CACHE_TTL_MS = 5000;\n\nlet cachedConfig = null;\nlet cachedConfigTs = 0;\n\nasync function getObservabilityConfig() {\n if (cachedConfig && (Date.now() - cachedConfigTs) < CONFIG_CACHE_TTL_MS) return cachedConfig;\n try {\n const { getSettings } = await import(\"./settingsRepo.js\");\n const settings = await getSettings();\n const envRequestLogs = process.env.ENABLE_REQUEST_LOGS;\n if (envRequestLogs !== undefined) {\n const enabled = envRequestLogs.toLowerCase() === \"true\";\n cachedConfig = {\n enabled,\n maxRecords: settings.observabilityMaxRecords || parseInt(process.env.OBSERVABILITY_MAX_RECORDS || String(DEFAULT_MAX_RECORDS), 10),\n batchSize: settings.observabilityBatchSize || parseInt(process.env.OBSERVABILITY_BATCH_SIZE || String(DEFAULT_BATCH_SIZE), 10),\n flushIntervalMs: settings.observabilityFlushIntervalMs || parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS || String(DEFAULT_FLUSH_INTERVAL_MS), 10),\n maxJsonSize: (settings.observabilityMaxJsonSize || parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE || \"5\", 10)) * 1024,\n };\n cachedConfigTs = Date.now();\n return cachedConfig;\n }\n const envFallback = process.env.OBSERVABILITY_ENABLED !== \"false\";\n const uiFlag = typeof settings.enableObservability === \"boolean\";\n const enabled = uiFlag\n ? settings.enableObservability\n : envFallback;\n\n cachedConfig = {\n enabled,\n maxRecords: settings.observabilityMaxRecords || parseInt(process.env.OBSERVABILITY_MAX_RECORDS || String(DEFAULT_MAX_RECORDS), 10),\n batchSize: settings.observabilityBatchSize || parseInt(process.env.OBSERVABILITY_BATCH_SIZE || String(DEFAULT_BATCH_SIZE), 10),\n flushIntervalMs: settings.observabilityFlushIntervalMs || parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS || String(DEFAULT_FLUSH_INTERVAL_MS), 10),\n maxJsonSize: (settings.observabilityMaxJsonSize || parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE || \"5\", 10)) * 1024,\n };\n } catch {\n cachedConfig = {\n enabled: false,\n maxRecords: DEFAULT_MAX_RECORDS,\n batchSize: DEFAULT_BATCH_SIZE,\n flushIntervalMs: DEFAULT_FLUSH_INTERVAL_MS,\n maxJsonSize: DEFAULT_MAX_JSON_SIZE,\n };\n }\n cachedConfigTs = Date.now();\n return cachedConfig;\n}\n\nlet writeBuffer = [];\nlet flushTimer = null;\nlet isFlushing = false;\n\nfunction sanitizeHeaders(headers) {\n if (!headers || typeof headers !== \"object\") return {};\n const sensitiveKeys = [\"authorization\", \"x-api-key\", \"cookie\", \"token\", \"api-key\"];\n const sanitized = { ...headers };\n for (const key of Object.keys(sanitized)) {\n if (sensitiveKeys.some((s) => key.toLowerCase().includes(s))) delete sanitized[key];\n }\n return sanitized;\n}\n\nexport const __test__ = { sanitizeHeaders };\n\nfunction generateDetailId(model) {\n const timestamp = new Date().toISOString();\n const random = Math.random().toString(36).substring(2, 8);\n const modelPart = model ? model.replace(/[^a-zA-Z0-9-]/g, \"-\") : \"unknown\";\n return `${timestamp}-${random}-${modelPart}`;\n}\n\nfunction truncateField(obj, maxSize) {\n const str = JSON.stringify(obj || {});\n if (str.length > maxSize) {\n return { _truncated: true, _originalSize: str.length, _preview: str.substring(0, 200) };\n }\n return obj || {};\n}\n\nasync function flushToDatabase() {\n if (isFlushing) return;\n if (writeBuffer.length === 0) return;\n isFlushing = true;\n try {\n // Drain entire buffer (loop in case more pushed during await)\n while (writeBuffer.length > 0) {\n const items = writeBuffer.splice(0, writeBuffer.length);\n const db = await getAdapter();\n const config = await getObservabilityConfig();\n\n db.transaction(() => {\n for (const item of items) {\n if (!item.id) item.id = generateDetailId(item.model);\n if (!item.timestamp) item.timestamp = new Date().toISOString();\n if (item.request?.headers) item.request.headers = sanitizeHeaders(item.request.headers);\n\n const record = {\n id: item.id,\n provider: item.provider || null,\n model: item.model || null,\n connectionId: item.connectionId || null,\n timestamp: item.timestamp,\n status: item.status || null,\n apiKey: item.apiKey || null,\n latency: item.latency || {},\n tokens: item.tokens || {},\n request: truncateField(item.request, config.maxJsonSize),\n providerRequest: truncateField(item.providerRequest, config.maxJsonSize),\n providerResponse: truncateField(item.providerResponse, config.maxJsonSize),\n response: truncateField(item.response, config.maxJsonSize),\n pxpipe: item.pxpipe || undefined,\n };\n\n db.run(\n `INSERT INTO requestDetails(id, timestamp, provider, model, connectionId, status, apiKey, data) VALUES(?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET timestamp = excluded.timestamp, provider = excluded.provider, model = excluded.model, connectionId = excluded.connectionId, status = excluded.status, apiKey = excluded.apiKey, data = excluded.data`,\n [record.id, record.timestamp, record.provider, record.model, record.connectionId, record.status, record.apiKey, stringifyJson(record)]\n );\n }\n\n const cnt = db.get(`SELECT COUNT(*) as c FROM requestDetails`);\n if (cnt && cnt.c > config.maxRecords) {\n db.run(\n `DELETE FROM requestDetails WHERE id IN (SELECT id FROM requestDetails ORDER BY timestamp ASC LIMIT ?)`,\n [cnt.c - config.maxRecords]\n );\n }\n });\n }\n } catch (e) {\n console.error(\"[requestDetailsRepo] Batch write failed:\", e);\n } finally {\n isFlushing = false;\n }\n}\n\nexport async function saveRequestDetail(detail) {\n const config = await getObservabilityConfig();\n if (!config.enabled) {return;}\n\n writeBuffer.push(detail);\n\n // Trigger immediate flush if batch threshold reached.\n // flushToDatabase() drains entire buffer in a loop, so all pushes during await are persisted.\n if (writeBuffer.length >= config.batchSize) {\n if (flushTimer) { clearTimeout(flushTimer); flushTimer = null; }\n flushToDatabase().catch((e) => console.error(\"[requestDetailsRepo] flush err:\", e));\n } else if (!flushTimer) {\n flushTimer = setTimeout(() => {\n flushTimer = null;\n flushToDatabase().catch(() => {});\n }, config.flushIntervalMs);\n }\n}\n\nexport async function getRequestDetails(filter = {}) {\n const db = await getAdapter();\n const conds = [];\n const params = [];\n\n if (filter.provider) { conds.push(\"provider = ?\"); params.push(filter.provider); }\n if (filter.model) { conds.push(\"model = ?\"); params.push(filter.model); }\n if (filter.connectionId) { conds.push(\"connectionId = ?\"); params.push(filter.connectionId); }\n if (filter.status) { conds.push(\"status = ?\"); params.push(filter.status); }\n if (filter.apiKey) { conds.push(\"apiKey = ?\"); params.push(filter.apiKey); }\n if (filter.startDate) { conds.push(\"timestamp >= ?\"); params.push(new Date(filter.startDate).toISOString()); }\n if (filter.endDate) { conds.push(\"timestamp <= ?\"); params.push(new Date(filter.endDate).toISOString()); }\n\n const where = conds.length ? `WHERE ${conds.join(\" AND \")}` : \"\";\n const cntRow = db.get(`SELECT COUNT(*) as c FROM requestDetails ${where}`, params);\n const totalItems = cntRow ? cntRow.c : 0;\n\n const page = filter.page || 1;\n const pageSize = filter.pageSize || 50;\n const totalPages = Math.ceil(totalItems / pageSize);\n const offset = (page - 1) * pageSize;\n\n const rows = db.all(\n `SELECT data FROM requestDetails ${where} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,\n [...params, pageSize, offset]\n );\n const details = rows.map((r) => parseJson(r.data, {}));\n\n return {\n details,\n pagination: { page, pageSize, totalItems, totalPages, hasNext: page < totalPages, hasPrev: page > 1 },\n };\n}\n\nexport async function getDistinctProviders() {\n const db = await getAdapter();\n const rows = db.all(`SELECT DISTINCT provider FROM requestDetails WHERE provider IS NOT NULL ORDER BY provider ASC`);\n return rows.map((r) => r.provider);\n}\n\nexport async function getDistinctModels() {\n const db = await getAdapter();\n const rows = db.all(`SELECT DISTINCT model FROM requestDetails WHERE model IS NOT NULL AND model != '' ORDER BY model ASC`);\n return rows.map((r) => r.model);\n}\n\nexport async function getDistinctApiKeys() {\n const db = await getAdapter();\n const rows = db.all(`SELECT DISTINCT apiKey FROM requestDetails WHERE apiKey IS NOT NULL AND apiKey != '' ORDER BY apiKey ASC`);\n return rows.map((r) => r.apiKey);\n}\n\nexport async function getDistinctStatuses() {\n const db = await getAdapter();\n const rows = db.all(`SELECT DISTINCT status FROM requestDetails WHERE status IS NOT NULL AND status != '' ORDER BY status ASC`);\n return rows.map((r) => r.status);\n}\n\nexport async function getRequestDetailById(id) {\n const db = await getAdapter();\n const row = db.get(`SELECT data FROM requestDetails WHERE id = ?`, [id]);\n return row ? parseJson(row.data, null) : null;\n}\n\nconst _shutdownHandler = async () => {\n if (flushTimer) { clearTimeout(flushTimer); flushTimer = null; }\n if (writeBuffer.length > 0) await flushToDatabase();\n};\n\nfunction ensureShutdownHandler() {\n process.off(\"beforeExit\", _shutdownHandler);\n process.off(\"SIGINT\", _shutdownHandler);\n process.off(\"SIGTERM\", _shutdownHandler);\n process.off(\"exit\", _shutdownHandler);\n\n process.on(\"beforeExit\", _shutdownHandler);\n process.on(\"SIGINT\", _shutdownHandler);\n process.on(\"SIGTERM\", _shutdownHandler);\n process.on(\"exit\", _shutdownHandler);\n}\n\nensureShutdownHandler();\n"],"names":["DEFAULT_MAX_RECORDS","DEFAULT_BATCH_SIZE","DEFAULT_FLUSH_INTERVAL_MS","DEFAULT_MAX_JSON_SIZE","CONFIG_CACHE_TTL_MS","cachedConfig","cachedConfigTs","getObservabilityConfig","Date","now","getSettings","settings","envRequestLogs","process","env","ENABLE_REQUEST_LOGS","undefined","enabled","toLowerCase","maxRecords","observabilityMaxRecords","parseInt","OBSERVABILITY_MAX_RECORDS","String","batchSize","observabilityBatchSize","OBSERVABILITY_BATCH_SIZE","flushIntervalMs","observabilityFlushIntervalMs","OBSERVABILITY_FLUSH_INTERVAL_MS","maxJsonSize","observabilityMaxJsonSize","OBSERVABILITY_MAX_JSON_SIZE","envFallback","OBSERVABILITY_ENABLED","uiFlag","enableObservability","writeBuffer","flushTimer","isFlushing","sanitizeHeaders","headers","sensitiveKeys","sanitized","key","Object","keys","some","s","includes","__test__","generateDetailId","model","timestamp","toISOString","random","Math","toString","substring","modelPart","replace","truncateField","obj","maxSize","str","JSON","stringify","length","_truncated","_originalSize","_preview","flushToDatabase","items","splice","db","config","transaction","item","id","request","record","provider","connectionId","status","apiKey","latency","tokens","providerRequest","providerResponse","response","pxpipe","run","cnt","get","c","e","console","error","saveRequestDetail","detail","push","clearTimeout","catch","setTimeout","getRequestDetails","filter","conds","params","startDate","endDate","where","join","cntRow","totalItems","page","pageSize","totalPages","ceil","offset","rows","all","details","map","r","data","pagination","hasNext","hasPrev","getDistinctProviders","getDistinctModels","getDistinctApiKeys","getDistinctStatuses","getRequestDetailById","row","_shutdownHandler","ensureShutdownHandler","off","on"],"mappings":"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"}},
+ {"offset": {"line": 2532, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/settingsRepo.js"],"sourcesContent":["import { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\n\nconst DEFAULT_MITM_ROUTER_BASE = \"http://localhost:20128\";\nconst DEFAULT_HEADROOM_URL = process.env.HEADROOM_URL || \"http://localhost:8787\";\n\nconst DEFAULT_SETTINGS = {\n cloudEnabled: false,\n tunnelEnabled: false,\n tunnelUrl: \"\",\n tunnelProvider: \"cloudflare\",\n tailscaleEnabled: false,\n tailscaleUrl: \"\",\n stickyRoundRobinLimit: 3,\n providerStrategies: {},\n providerTimeouts: {},\n defaultTimeoutMs: null,\n quotaVisibility: {},\n comboStrategy: \"fallback\",\n comboStickyRoundRobinLimit: 1,\n comboStrategies: {},\n capacityAdapter: {\n vision: { enabled: true, roundRobin: false, models: [] },\n pdf: { enabled: false, roundRobin: false, models: [] },\n audioInput: { enabled: true, roundRobin: false, models: [] },\n videoInput: { enabled: false, roundRobin: false, models: [] },\n },\n requireLogin: true,\n requireApiKey: true,\n tunnelDashboardAccess: true,\n authMode: \"password\",\n logLevel: \"info\",\n ssoType: \"oidc\",\n oidcIssuerUrl: \"\",\n oidcClientId: \"\",\n oidcClientSecret: \"\",\n oidcScopes: \"openid profile email\",\n oidcLoginLabel: \"Sign in with OIDC\",\n samlEntryPoint: \"\",\n samlIssuer: \"urn:9router:sp\",\n samlCert: \"\",\n samlLoginLabel: \"Sign in with SAML SSO\",\n samlAttributeEmail: \"email\",\n samlAttributeName: \"name\",\n enableObservability: false,\n observabilityMaxRecords: 1000,\n observabilityBatchSize: 20,\n observabilityFlushIntervalMs: 5000,\n observabilityMaxJsonSize: 5,\n outboundProxyEnabled: false,\n outboundProxyUrl: \"\",\n outboundNoProxy: \"\",\n mitmRouterBaseUrl: DEFAULT_MITM_ROUTER_BASE,\n dnsToolEnabled: {},\n rtkEnabled: true,\n headroomEnabled: false,\n headroomUrl: DEFAULT_HEADROOM_URL,\n headroomCompressUserMessages: false,\n cavemanEnabled: false,\n cavemanLevel: \"full\",\n ponytailEnabled: false,\n ponytailLevel: \"full\",\n pxpipeEnabled: false,\n pxpipeAutoInstall: true,\n pxpipeMinChars: 25000,\n pxpipeTimeoutMs: 15000,\n};\n\nasync function readRaw() {\n const db = await getAdapter();\n const row = db.get(`SELECT data FROM settings WHERE id = 1`);\n return row ? parseJson(row.data, {}) : {};\n}\n\n// Merge raw settings with defaults; backward-compat for missing keys\nexport function mergeWithDefaults(raw) {\n const merged = { ...DEFAULT_SETTINGS, ...(raw || {}) };\n for (const [key, defVal] of Object.entries(DEFAULT_SETTINGS)) {\n if (merged[key] === undefined) {\n if (\n key === \"outboundProxyEnabled\" &&\n typeof merged.outboundProxyUrl === \"string\" &&\n merged.outboundProxyUrl.trim()\n ) {\n merged[key] = true;\n } else {\n merged[key] = defVal;\n }\n }\n }\n return merged;\n}\n\nexport async function getSettings() {\n const raw = await readRaw();\n return mergeWithDefaults(raw);\n}\n\n// Atomic read-merge-write inside transaction (prevents losing concurrent updates)\nexport async function updateSettings(updates) {\n const db = await getAdapter();\n let next;\n db.transaction(function () {\n const row = db.get(`SELECT data FROM settings WHERE id = 1`);\n const current = row ? parseJson(row.data, {}) : {};\n next = { ...current, ...updates };\n db.run(\n `INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`,\n [stringifyJson(next)],\n );\n });\n return mergeWithDefaults(next);\n}\n\nexport async function isCloudEnabled() {\n const settings = await getSettings();\n return settings.cloudEnabled === true;\n}\n\nexport async function getCloudUrl() {\n const settings = await getSettings();\n return (\n settings.cloudUrl ||\n process.env.CLOUD_URL ||\n process.env.NEXT_PUBLIC_CLOUD_URL ||\n \"\"\n );\n}\n\nexport async function exportSettings() {\n return await readRaw();\n}\n"],"names":["DEFAULT_MITM_ROUTER_BASE","DEFAULT_HEADROOM_URL","process","env","HEADROOM_URL","DEFAULT_SETTINGS","cloudEnabled","tunnelEnabled","tunnelUrl","tunnelProvider","tailscaleEnabled","tailscaleUrl","stickyRoundRobinLimit","providerStrategies","providerTimeouts","defaultTimeoutMs","quotaVisibility","comboStrategy","comboStickyRoundRobinLimit","comboStrategies","capacityAdapter","vision","enabled","roundRobin","models","pdf","audioInput","videoInput","requireLogin","requireApiKey","tunnelDashboardAccess","authMode","logLevel","ssoType","oidcIssuerUrl","oidcClientId","oidcClientSecret","oidcScopes","oidcLoginLabel","samlEntryPoint","samlIssuer","samlCert","samlLoginLabel","samlAttributeEmail","samlAttributeName","enableObservability","observabilityMaxRecords","observabilityBatchSize","observabilityFlushIntervalMs","observabilityMaxJsonSize","outboundProxyEnabled","outboundProxyUrl","outboundNoProxy","mitmRouterBaseUrl","dnsToolEnabled","rtkEnabled","headroomEnabled","headroomUrl","headroomCompressUserMessages","cavemanEnabled","cavemanLevel","ponytailEnabled","ponytailLevel","pxpipeEnabled","pxpipeAutoInstall","pxpipeMinChars","pxpipeTimeoutMs","readRaw","db","row","get","data","mergeWithDefaults","raw","merged","key","defVal","Object","entries","undefined","trim","getSettings","updateSettings","updates","next","transaction","current","run","isCloudEnabled","settings","getCloudUrl","cloudUrl","CLOUD_URL","exportSettings"],"mappings":"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"}},
+ {"offset": {"line": 2685, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/repos/usageRepo.js"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport { getAdapter } from \"../driver.js\";\nimport { parseJson, stringifyJson } from \"../helpers/jsonCol.js\";\nimport { getMeta, setMeta } from \"../helpers/metaStore.js\";\n\nfunction maskApiKey(key) {\n\tif (!key || typeof key !== \"string\") return null;\n\tif (key.length <= 8) return key.charAt(0) + \"***\";\n\treturn key.slice(0, 8) + \"***\";\n}\n\nconst PENDING_TIMEOUT_MS = 60 * 1000;\nconst RING_CAP = 50;\nconst CONN_CACHE_TTL_MS = 30 * 1000;\nconst PERIOD_MS = {\n\t\"24h\": 86400000,\n\t\"7d\": 604800000,\n\t\"30d\": 2592000000,\n\t\"60d\": 5184000000,\n};\n\n// In-memory state shared across Next.js modules\nif (!global._pendingRequests)\n\tglobal._pendingRequests = { byModel: {}, byAccount: {} };\nif (!global._lastErrorProvider)\n\tglobal._lastErrorProvider = { provider: \"\", ts: 0 };\nif (!global._statsEmitter) {\n\tglobal._statsEmitter = new EventEmitter();\n\tglobal._statsEmitter.setMaxListeners(50);\n}\nif (!global._pendingTimers) global._pendingTimers = {};\nif (!global._recentRing) global._recentRing = { items: [], initialized: false };\nif (!global._connectionMapCache)\n\tglobal._connectionMapCache = { map: {}, ts: 0 };\nif (!global._statsEmitTimers)\n\tglobal._statsEmitTimers = { pending: null, update: null };\n\nconst pendingRequests = global._pendingRequests;\nconst lastErrorProvider = global._lastErrorProvider;\nconst pendingTimers = global._pendingTimers;\nconst recentRing = global._recentRing;\nconst connCache = global._connectionMapCache;\nconst statsEmitTimers = global._statsEmitTimers;\n\nexport const statsEmitter = global._statsEmitter;\n\nfunction scheduleStatsEvent(event, delayMs = 150) {\n\tconst key = event === \"update\" ? \"update\" : \"pending\";\n\tif (statsEmitTimers[key]) return;\n\tstatsEmitTimers[key] = setTimeout(() => {\n\t\tstatsEmitTimers[key] = null;\n\t\tstatsEmitter.emit(event);\n\t}, delayMs);\n\tstatsEmitTimers[key]?.unref?.();\n}\n\nfunction getLocalDateKey(timestamp) {\n\tconst d = timestamp ? new Date(timestamp) : new Date();\n\treturn `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}-${String(d.getDate()).padStart(2, \"0\")}`;\n}\n\nfunction addToCounter(target, key, values) {\n\tif (!target[key])\n\t\ttarget[key] = {\n\t\t\trequests: 0,\n\t\t\tpromptTokens: 0,\n\t\t\tcompletionTokens: 0,\n\t\t\tcachedTokens: 0,\n\t\t\tcost: 0,\n\t\t};\n\ttarget[key].requests += values.requests || 1;\n\ttarget[key].promptTokens += values.promptTokens || 0;\n\ttarget[key].completionTokens += values.completionTokens || 0;\n\ttarget[key].cachedTokens += values.cachedTokens || 0;\n\ttarget[key].cost += values.cost || 0;\n\tif (values.meta) Object.assign(target[key], values.meta);\n}\n\nfunction aggregateEntryToDay(day, entry) {\n\tconst promptTokens =\n\t\tentry.tokens?.prompt_tokens || entry.tokens?.input_tokens || 0;\n\tconst completionTokens =\n\t\tentry.tokens?.completion_tokens || entry.tokens?.output_tokens || 0;\n\tconst cachedTokens =\n\t\tentry.tokens?.cached_tokens || entry.tokens?.cache_read_input_tokens || 0;\n\tconst cost = entry.cost || 0;\n\tconst vals = { promptTokens, completionTokens, cachedTokens, cost };\n\n\tday.requests = (day.requests || 0) + 1;\n\tday.promptTokens = (day.promptTokens || 0) + promptTokens;\n\tday.completionTokens = (day.completionTokens || 0) + completionTokens;\n\tday.cachedTokens = (day.cachedTokens || 0) + cachedTokens;\n\tday.cost = (day.cost || 0) + cost;\n\n\tday.byProvider ||= {};\n\tday.byModel ||= {};\n\tday.byAccount ||= {};\n\tday.byApiKey ||= {};\n\tday.byEndpoint ||= {};\n\n\tif (entry.provider) addToCounter(day.byProvider, entry.provider, vals);\n\n\tconst modelKey = entry.provider\n\t\t? `${entry.model}|${entry.provider}`\n\t\t: entry.model;\n\taddToCounter(day.byModel, modelKey, {\n\t\t...vals,\n\t\tmeta: { rawModel: entry.model, provider: entry.provider },\n\t});\n\n\tif (entry.connectionId) {\n\t\taddToCounter(day.byAccount, entry.connectionId, {\n\t\t\t...vals,\n\t\t\tmeta: { rawModel: entry.model, provider: entry.provider },\n\t\t});\n\t}\n\n\tconst apiKeyVal =\n\t\tentry.apiKey && typeof entry.apiKey === \"string\"\n\t\t\t? entry.apiKey\n\t\t\t: \"local-no-key\";\n\tconst akModelKey = `${apiKeyVal}|${entry.model}|${entry.provider || \"unknown\"}`;\n\taddToCounter(day.byApiKey, akModelKey, {\n\t\t...vals,\n\t\tmeta: {\n\t\t\trawModel: entry.model,\n\t\t\tprovider: entry.provider,\n\t\t\tapiKey: entry.apiKey || null,\n\t\t},\n\t});\n\n\tconst endpoint = entry.endpoint || \"Unknown\";\n\tconst epKey = `${endpoint}|${entry.model}|${entry.provider || \"unknown\"}`;\n\taddToCounter(day.byEndpoint, epKey, {\n\t\t...vals,\n\t\tmeta: { endpoint, rawModel: entry.model, provider: entry.provider },\n\t});\n}\n\nfunction pushToRing(entry) {\n\trecentRing.items.push(entry);\n\tif (recentRing.items.length > RING_CAP) {\n\t\trecentRing.items = recentRing.items.slice(-RING_CAP);\n\t}\n}\n\nasync function getConnectionMapCached() {\n\tif (Date.now() - connCache.ts < CONN_CACHE_TTL_MS) return connCache.map;\n\ttry {\n\t\tconst { getProviderConnections } = await import(\"./connectionsRepo.js\");\n\t\tconst all = await getProviderConnections();\n\t\tconst map = {};\n\t\tfor (const c of all) map[c.id] = c.name || c.email || c.id;\n\t\tconnCache.map = map;\n\t\tconnCache.ts = Date.now();\n\t} catch {}\n\treturn connCache.map;\n}\n\nasync function ensureRingInitialized() {\n\tif (recentRing.initialized) return;\n\trecentRing.initialized = true;\n\ttry {\n\t\tconst db = await getAdapter();\n\t\tconst rows = db.all(\n\t\t\t`SELECT timestamp, provider, model, connectionId, apiKey, endpoint, cost, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?`,\n\t\t\t[RING_CAP],\n\t\t);\n\t\trecentRing.items = rows.reverse().map((r) => ({\n\t\t\ttimestamp: r.timestamp,\n\t\t\tprovider: r.provider,\n\t\t\tmodel: r.model,\n\t\t\tconnectionId: r.connectionId,\n\t\t\tapiKey: r.apiKey,\n\t\t\tendpoint: r.endpoint,\n\t\t\tcost: r.cost,\n\t\t\tstatus: r.status,\n\t\t\ttokens: parseJson(r.tokens, {}),\n\t\t}));\n\t} catch {}\n}\n\nasync function calculateCost(provider, model, tokens) {\n\tif (!tokens || !provider || !model) return 0;\n\ttry {\n\t\tconst { getPricingForModel } = await import(\"./pricingRepo.js\");\n\t\tconst pricing = await getPricingForModel(provider, model);\n\t\tif (!pricing) return 0;\n\n\t\t// Delegate the actual math to the single source of truth (avoids the two\n\t\t// copies drifting apart — see open-sse/providers/pricing.js for the\n\t\t// cache-inclusive prompt_tokens convention this assumes).\n\t\tconst { calculateCostFromTokens } = await import(\n\t\t\t\"open-sse/providers/pricing.js\"\n\t\t);\n\t\treturn calculateCostFromTokens(tokens, pricing);\n\t} catch (e) {\n\t\tconsole.error(\"Error calculating cost:\", e);\n\t\treturn 0;\n\t}\n}\n\nexport function trackPendingRequest(\n\tmodel,\n\tprovider,\n\tconnectionId,\n\tstarted,\n\terror = false,\n) {\n\tconst modelKey = provider ? `${model} (${provider})` : model;\n\tconst timerKey = `${connectionId}|${modelKey}`;\n\n\tif (!pendingRequests.byModel[modelKey]) pendingRequests.byModel[modelKey] = 0;\n\tpendingRequests.byModel[modelKey] = Math.max(\n\t\t0,\n\t\tpendingRequests.byModel[modelKey] + (started ? 1 : -1),\n\t);\n\tif (pendingRequests.byModel[modelKey] === 0)\n\t\tdelete pendingRequests.byModel[modelKey];\n\n\tif (connectionId) {\n\t\tif (!pendingRequests.byAccount[connectionId])\n\t\t\tpendingRequests.byAccount[connectionId] = {};\n\t\tif (!pendingRequests.byAccount[connectionId][modelKey])\n\t\t\tpendingRequests.byAccount[connectionId][modelKey] = 0;\n\t\tpendingRequests.byAccount[connectionId][modelKey] = Math.max(\n\t\t\t0,\n\t\t\tpendingRequests.byAccount[connectionId][modelKey] + (started ? 1 : -1),\n\t\t);\n\t\tif (pendingRequests.byAccount[connectionId][modelKey] === 0) {\n\t\t\tdelete pendingRequests.byAccount[connectionId][modelKey];\n\t\t\tif (Object.keys(pendingRequests.byAccount[connectionId]).length === 0) {\n\t\t\t\tdelete pendingRequests.byAccount[connectionId];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (started) {\n\t\tclearTimeout(pendingTimers[timerKey]);\n\t\tpendingTimers[timerKey] = setTimeout(() => {\n\t\t\tdelete pendingTimers[timerKey];\n\t\t\tif (pendingRequests.byModel[modelKey] > 0)\n\t\t\t\tpendingRequests.byModel[modelKey] = 0;\n\t\t\tif (\n\t\t\t\tconnectionId &&\n\t\t\t\tpendingRequests.byAccount[connectionId]?.[modelKey] > 0\n\t\t\t) {\n\t\t\t\tpendingRequests.byAccount[connectionId][modelKey] = 0;\n\t\t\t}\n\t\t\tscheduleStatsEvent(\"pending\");\n\t\t}, PENDING_TIMEOUT_MS);\n\t} else {\n\t\tclearTimeout(pendingTimers[timerKey]);\n\t\tdelete pendingTimers[timerKey];\n\t}\n\n\tif (!started && error && provider) {\n\t\tlastErrorProvider.provider = provider.toLowerCase();\n\t\tlastErrorProvider.ts = Date.now();\n\t}\n\n\t// [PENDING] console line removed; lifecycle is visible via \"▶\" and \"📊 done\" lines\n\tscheduleStatsEvent(\"pending\");\n}\n\nexport async function getActiveRequests() {\n\tconst activeRequests = [];\n\tconst connectionMap = await getConnectionMapCached();\n\n\tfor (const [connectionId, models] of Object.entries(\n\t\tpendingRequests.byAccount,\n\t)) {\n\t\tfor (const [modelKey, count] of Object.entries(models)) {\n\t\t\tif (count > 0) {\n\t\t\t\tconst accountName =\n\t\t\t\t\tconnectionMap[connectionId] ||\n\t\t\t\t\t`Account ${connectionId.slice(0, 8)}...`;\n\t\t\t\tconst match = modelKey.match(/^(.*) \\((.*)\\)$/);\n\t\t\t\tactiveRequests.push({\n\t\t\t\t\tmodel: match ? match[1] : modelKey,\n\t\t\t\t\tprovider: match ? match[2] : \"unknown\",\n\t\t\t\t\taccount: accountName,\n\t\t\t\t\tcount,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tawait ensureRingInitialized();\n\tconst seen = new Set();\n\tconst recentRequests = [...recentRing.items]\n\t\t.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp))\n\t\t.map((e) => {\n\t\t\tconst t = e.tokens || {};\n\t\t\treturn {\n\t\t\t\ttimestamp: e.timestamp,\n\t\t\t\tmodel: e.model,\n\t\t\t\tprovider: e.provider || \"\",\n\t\t\t\tpromptTokens: t.prompt_tokens || t.input_tokens || 0,\n\t\t\t\tcompletionTokens: t.completion_tokens || t.output_tokens || 0,\n\t\t\t\tstatus: e.status || \"ok\",\n\t\t\t};\n\t\t})\n\t\t.filter((e) => {\n\t\t\tif (e.promptTokens === 0 && e.completionTokens === 0) return false;\n\t\t\tconst minute = e.timestamp ? e.timestamp.slice(0, 16) : \"\";\n\t\t\tconst key = `${e.model}|${e.provider}|${e.promptTokens}|${e.completionTokens}|${minute}`;\n\t\t\tif (seen.has(key)) return false;\n\t\t\tseen.add(key);\n\t\t\treturn true;\n\t\t})\n\t\t.slice(0, 20);\n\n\tconst errorProvider =\n\t\tDate.now() - lastErrorProvider.ts < 10000 ? lastErrorProvider.provider : \"\";\n\treturn { activeRequests, recentRequests, errorProvider };\n}\n\nexport async function saveRequestUsage(entry) {\n\ttry {\n\t\tconst db = await getAdapter();\n\n\t\tif (!entry.timestamp) entry.timestamp = new Date().toISOString();\n\t\tentry.cost = await calculateCost(entry.provider, entry.model, entry.tokens);\n\n\t\tconst tokens = entry.tokens || {};\n\t\tconst promptTokens = tokens.prompt_tokens || tokens.input_tokens || 0;\n\t\tconst completionTokens =\n\t\t\ttokens.completion_tokens || tokens.output_tokens || 0;\n\n\t\tlet inserted = false;\n\n\t\t// All 3 writes (history insert, daily upsert, lifetime counter) in ONE transaction.\n\t\t// better-sqlite3 is sync → no JS yield mid-transaction → no race in same process.\n\t\tdb.transaction(() => {\n\t\t\tconst existing = db.get(\n\t\t\t\t`SELECT id, endpoint FROM usageHistory\n WHERE timestamp = ?\n AND COALESCE(provider, '') = COALESCE(?, '')\n AND COALESCE(model, '') = COALESCE(?, '')\n AND COALESCE(connectionId, '') = COALESCE(?, '')\n AND COALESCE(apiKey, '') = COALESCE(?, '')\n AND promptTokens = ?\n AND completionTokens = ?\n ORDER BY id DESC LIMIT 1`,\n\t\t\t\t[\n\t\t\t\t\tentry.timestamp,\n\t\t\t\t\tentry.provider || null,\n\t\t\t\t\tentry.model || null,\n\t\t\t\t\tentry.connectionId || null,\n\t\t\t\t\tentry.apiKey || null,\n\t\t\t\t\tpromptTokens,\n\t\t\t\t\tcompletionTokens,\n\t\t\t\t],\n\t\t\t);\n\n\t\t\tif (existing) {\n\t\t\t\tif (!existing.endpoint && entry.endpoint) {\n\t\t\t\t\tdb.run(`UPDATE usageHistory SET endpoint = ? WHERE id = ?`, [\n\t\t\t\t\t\tentry.endpoint,\n\t\t\t\t\t\texisting.id,\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdb.run(\n\t\t\t\t`INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n\t\t\t\t[\n\t\t\t\t\tentry.timestamp,\n\t\t\t\t\tentry.provider || null,\n\t\t\t\t\tentry.model || null,\n\t\t\t\t\tentry.connectionId || null,\n\t\t\t\t\tentry.apiKey || null,\n\t\t\t\t\tentry.endpoint || null,\n\t\t\t\t\tpromptTokens,\n\t\t\t\t\tcompletionTokens,\n\t\t\t\t\tentry.cost || 0,\n\t\t\t\t\tentry.status || \"ok\",\n\t\t\t\t\tstringifyJson(tokens),\n\t\t\t\t\tstringifyJson({}),\n\t\t\t\t],\n\t\t\t);\n\n\t\t\tconst dateKey = getLocalDateKey(entry.timestamp);\n\t\t\tconst row = db.get(`SELECT data FROM usageDaily WHERE dateKey = ?`, [\n\t\t\t\tdateKey,\n\t\t\t]);\n\t\t\tconst day = row\n\t\t\t\t? parseJson(row.data, {})\n\t\t\t\t: {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\tbyProvider: {},\n\t\t\t\t\t\tbyModel: {},\n\t\t\t\t\t\tbyAccount: {},\n\t\t\t\t\t\tbyApiKey: {},\n\t\t\t\t\t\tbyEndpoint: {},\n\t\t\t\t\t};\n\t\t\taggregateEntryToDay(day, entry);\n\t\t\tdb.run(\n\t\t\t\t`INSERT INTO usageDaily(dateKey, data) VALUES(?, ?) ON CONFLICT(dateKey) DO UPDATE SET data = excluded.data`,\n\t\t\t\t[dateKey, stringifyJson(day)],\n\t\t\t);\n\n\t\t\t// Atomic counter increment in same transaction\n\t\t\tconst cur = db.get(\n\t\t\t\t`SELECT value FROM _meta WHERE key = 'totalRequestsLifetime'`,\n\t\t\t);\n\t\t\tconst next = (cur ? parseInt(cur.value, 10) : 0) + 1;\n\t\t\tdb.run(\n\t\t\t\t`INSERT INTO _meta(key, value) VALUES('totalRequestsLifetime', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`,\n\t\t\t\t[String(next)],\n\t\t\t);\n\t\t\tinserted = true;\n\t\t});\n\n\t\tif (inserted) {\n\t\t\tpushToRing(entry);\n\t\t\tscheduleStatsEvent(\"update\", 250);\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(\"Failed to save usage stats:\", e);\n\t}\n}\n\nexport async function getUsageHistory(filter = {}) {\n\tconst db = await getAdapter();\n\tconst conds = [];\n\tconst params = [];\n\n\tif (filter.provider) {\n\t\tconds.push(\"provider = ?\");\n\t\tparams.push(filter.provider);\n\t}\n\tif (filter.model) {\n\t\tconds.push(\"model = ?\");\n\t\tparams.push(filter.model);\n\t}\n\tif (filter.startDate) {\n\t\tconds.push(\"timestamp >= ?\");\n\t\tparams.push(new Date(filter.startDate).toISOString());\n\t}\n\tif (filter.endDate) {\n\t\tconds.push(\"timestamp <= ?\");\n\t\tparams.push(new Date(filter.endDate).toISOString());\n\t}\n\n\tconst where = conds.length ? `WHERE ${conds.join(\" AND \")}` : \"\";\n\tconst rows = db.all(\n\t\t`SELECT timestamp, provider, model, connectionId, apiKey, endpoint, cost, status, tokens FROM usageHistory ${where} ORDER BY id ASC`,\n\t\tparams,\n\t);\n\n\treturn rows.map((r) => ({\n\t\ttimestamp: r.timestamp,\n\t\tprovider: r.provider,\n\t\tmodel: r.model,\n\t\tconnectionId: r.connectionId,\n\t\tapiKeyMasked: maskApiKey(r.apiKey),\n\t\tendpoint: r.endpoint,\n\t\tcost: r.cost,\n\t\tstatus: r.status,\n\t\ttokens: parseJson(r.tokens, {}),\n\t}));\n}\n\nfunction loadDaysInRange(adapter, maxDays) {\n\tif (maxDays == null) {\n\t\treturn adapter.all(`SELECT dateKey, data FROM usageDaily`);\n\t}\n\tconst today = new Date();\n\tconst cutoff = new Date(\n\t\ttoday.getFullYear(),\n\t\ttoday.getMonth(),\n\t\ttoday.getDate() - maxDays + 1,\n\t);\n\tconst cutoffKey = `${cutoff.getFullYear()}-${String(cutoff.getMonth() + 1).padStart(2, \"0\")}-${String(cutoff.getDate()).padStart(2, \"0\")}`;\n\treturn adapter.all(\n\t\t`SELECT dateKey, data FROM usageDaily WHERE dateKey >= ?`,\n\t\t[cutoffKey],\n\t);\n}\n\nexport async function getUsageStats(period = \"all\") {\n\tconst db = await getAdapter();\n\n\tconst [{ getProviderConnections }, { getApiKeys }, { getProviderNodes }] =\n\t\tawait Promise.all([\n\t\t\timport(\"./connectionsRepo.js\"),\n\t\t\timport(\"./apiKeysRepo.js\"),\n\t\t\timport(\"./nodesRepo.js\"),\n\t\t]);\n\n\tlet allConnections = [];\n\ttry {\n\t\tallConnections = await getProviderConnections();\n\t} catch {}\n\tconst connectionMap = {};\n\tfor (const c of allConnections)\n\t\tconnectionMap[c.id] = c.name || c.email || c.id;\n\n\tconst providerNodeNameMap = {};\n\ttry {\n\t\tconst nodes = await getProviderNodes();\n\t\tfor (const n of nodes)\n\t\t\tif (n.id && n.name) providerNodeNameMap[n.id] = n.name;\n\t} catch {}\n\n\tlet allApiKeys = [];\n\ttry {\n\t\tallApiKeys = await getApiKeys();\n\t} catch {}\n\tconst apiKeyMap = {};\n\tfor (const k of allApiKeys)\n\t\tapiKeyMap[k.key] = { name: k.name, id: k.id, createdAt: k.createdAt };\n\n\t// recentRequests from live history (last 100 entries enough for 20 deduped)\n\tconst recentRows = db.all(\n\t\t`SELECT timestamp, provider, model, tokens, status FROM usageHistory ORDER BY id DESC LIMIT 100`,\n\t);\n\tconst seen = new Set();\n\tconst recentRequests = recentRows\n\t\t.map((r) => {\n\t\t\tconst t = parseJson(r.tokens, {}) || {};\n\t\t\treturn {\n\t\t\t\ttimestamp: r.timestamp,\n\t\t\t\tmodel: r.model,\n\t\t\t\tprovider: r.provider || \"\",\n\t\t\t\tpromptTokens: t.prompt_tokens || t.input_tokens || 0,\n\t\t\t\tcompletionTokens: t.completion_tokens || t.output_tokens || 0,\n\t\t\t\tcachedTokens: t.cached_tokens || t.cache_read_input_tokens || 0,\n\t\t\t\tstatus: r.status || \"ok\",\n\t\t\t};\n\t\t})\n\t\t.filter((e) => {\n\t\t\tif (e.promptTokens === 0 && e.completionTokens === 0) return false;\n\t\t\tconst minute = e.timestamp ? e.timestamp.slice(0, 16) : \"\";\n\t\t\tconst key = `${e.model}|${e.provider}|${e.promptTokens}|${e.completionTokens}|${minute}`;\n\t\t\tif (seen.has(key)) return false;\n\t\t\tseen.add(key);\n\t\t\treturn true;\n\t\t})\n\t\t.slice(0, 20);\n\n\tconst stats = {\n\t\ttotalRequests: 0,\n\t\ttotalPromptTokens: 0,\n\t\ttotalCompletionTokens: 0,\n\t\ttotalCachedTokens: 0,\n\t\ttotalCost: 0,\n\t\tbyProvider: {},\n\t\tbyModel: {},\n\t\tbyAccount: {},\n\t\tbyApiKey: {},\n\t\tbyEndpoint: {},\n\t\tlast10Minutes: [],\n\t\tpending: pendingRequests,\n\t\tactiveRequests: [],\n\t\trecentRequests,\n\t\terrorProvider:\n\t\t\tDate.now() - lastErrorProvider.ts < 10000\n\t\t\t\t? lastErrorProvider.provider\n\t\t\t\t: \"\",\n\t};\n\n\t// Active requests\n\tfor (const [connectionId, models] of Object.entries(\n\t\tpendingRequests.byAccount,\n\t)) {\n\t\tfor (const [modelKey, count] of Object.entries(models)) {\n\t\t\tif (count > 0) {\n\t\t\t\tconst accountName =\n\t\t\t\t\tconnectionMap[connectionId] ||\n\t\t\t\t\t`Account ${connectionId.slice(0, 8)}...`;\n\t\t\t\tconst match = modelKey.match(/^(.*) \\((.*)\\)$/);\n\t\t\t\tstats.activeRequests.push({\n\t\t\t\t\tmodel: match ? match[1] : modelKey,\n\t\t\t\t\tprovider: match ? match[2] : \"unknown\",\n\t\t\t\t\taccount: accountName,\n\t\t\t\t\tcount,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// last10Minutes — query 10min window\n\tconst now = new Date();\n\tconst currentMinuteStart = new Date(\n\t\tMath.floor(now.getTime() / 60000) * 60000,\n\t);\n\tconst tenMinutesAgo = new Date(currentMinuteStart.getTime() - 9 * 60 * 1000);\n\tconst bucketMap = {};\n\tfor (let i = 0; i < 10; i++) {\n\t\tconst ts = currentMinuteStart.getTime() - (9 - i) * 60 * 1000;\n\t\tbucketMap[ts] = {\n\t\t\trequests: 0,\n\t\t\tpromptTokens: 0,\n\t\t\tcompletionTokens: 0,\n\t\t\tcost: 0,\n\t\t};\n\t\tstats.last10Minutes.push(bucketMap[ts]);\n\t}\n\tconst recent10 = db.all(\n\t\t`SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ? AND timestamp <= ?`,\n\t\t[tenMinutesAgo.toISOString(), now.toISOString()],\n\t);\n\tfor (const r of recent10) {\n\t\tconst tt = new Date(r.timestamp).getTime();\n\t\tconst minuteStart = Math.floor(tt / 60000) * 60000;\n\t\tif (bucketMap[minuteStart]) {\n\t\t\tbucketMap[minuteStart].requests++;\n\t\t\tbucketMap[minuteStart].promptTokens += r.promptTokens || 0;\n\t\t\tbucketMap[minuteStart].completionTokens += r.completionTokens || 0;\n\t\t\tbucketMap[minuteStart].cost += r.cost || 0;\n\t\t}\n\t}\n\n\tconst useDailySummary = period !== \"24h\" && period !== \"today\";\n\n\tif (useDailySummary) {\n\t\tconst periodDays = { \"7d\": 7, \"30d\": 30, \"60d\": 60 };\n\t\tconst maxDays = periodDays[period] || null;\n\t\tconst dayRows = loadDaysInRange(db, maxDays);\n\n\t\tfor (const dr of dayRows) {\n\t\t\tconst dateKey = dr.dateKey;\n\t\t\tconst day = parseJson(dr.data, {});\n\t\t\tstats.totalPromptTokens += day.promptTokens || 0;\n\t\t\tstats.totalCompletionTokens += day.completionTokens || 0;\n\t\t\tstats.totalCachedTokens += day.cachedTokens || 0;\n\t\t\tstats.totalCost += day.cost || 0;\n\n\t\t\tfor (const [prov, p] of Object.entries(day.byProvider || {})) {\n\t\t\t\tif (!stats.byProvider[prov])\n\t\t\t\t\tstats.byProvider[prov] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\tlastUsed: dateKey,\n\t\t\t\t\t};\n\t\t\t\tstats.byProvider[prov].requests += p.requests || 0;\n\t\t\t\tstats.byProvider[prov].promptTokens += p.promptTokens || 0;\n\t\t\t\tstats.byProvider[prov].completionTokens += p.completionTokens || 0;\n\t\t\t\tstats.byProvider[prov].cachedTokens += p.cachedTokens || 0;\n\t\t\t\tstats.byProvider[prov].cost += p.cost || 0;\n\t\t\t\tif (dateKey > (stats.byProvider[prov].lastUsed || \"\"))\n\t\t\t\t\tstats.byProvider[prov].lastUsed = dateKey;\n\t\t\t}\n\n\t\t\tfor (const [mk, m] of Object.entries(day.byModel || {})) {\n\t\t\t\tconst rawModel = m.rawModel || mk.split(\"|\")[0];\n\t\t\t\tconst provider = m.provider || mk.split(\"|\")[1] || \"\";\n\t\t\t\tconst statsKey = provider ? `${rawModel} (${provider})` : rawModel;\n\t\t\t\tconst providerDisplayName = providerNodeNameMap[provider] || provider;\n\t\t\t\tif (!stats.byModel[statsKey]) {\n\t\t\t\t\tstats.byModel[statsKey] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\trawModel,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tlastUsed: dateKey,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tstats.byModel[statsKey].requests += m.requests || 0;\n\t\t\t\tstats.byModel[statsKey].promptTokens += m.promptTokens || 0;\n\t\t\t\tstats.byModel[statsKey].completionTokens += m.completionTokens || 0;\n\t\t\t\tstats.byModel[statsKey].cachedTokens += m.cachedTokens || 0;\n\t\t\t\tstats.byModel[statsKey].cost += m.cost || 0;\n\t\t\t\tif (dateKey > (stats.byModel[statsKey].lastUsed || \"\"))\n\t\t\t\t\tstats.byModel[statsKey].lastUsed = dateKey;\n\t\t\t}\n\n\t\t\tfor (const [connId, a] of Object.entries(day.byAccount || {})) {\n\t\t\t\tconst accountName =\n\t\t\t\t\tconnectionMap[connId] || `Account ${connId.slice(0, 8)}...`;\n\t\t\t\tconst rawModel = a.rawModel || \"\";\n\t\t\t\tconst provider = a.provider || \"\";\n\t\t\t\tconst providerDisplayName = providerNodeNameMap[provider] || provider;\n\t\t\t\tconst accountKey = `${rawModel} (${provider} - ${accountName})`;\n\t\t\t\tif (!stats.byAccount[accountKey]) {\n\t\t\t\t\tstats.byAccount[accountKey] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\trawModel,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tconnectionId: connId,\n\t\t\t\t\t\taccountName,\n\t\t\t\t\t\tlastUsed: dateKey,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tstats.byAccount[accountKey].requests += a.requests || 0;\n\t\t\t\tstats.byAccount[accountKey].promptTokens += a.promptTokens || 0;\n\t\t\t\tstats.byAccount[accountKey].completionTokens += a.completionTokens || 0;\n\t\t\t\tstats.byAccount[accountKey].cachedTokens += a.cachedTokens || 0;\n\t\t\t\tstats.byAccount[accountKey].cost += a.cost || 0;\n\t\t\t\tif (dateKey > (stats.byAccount[accountKey].lastUsed || \"\"))\n\t\t\t\t\tstats.byAccount[accountKey].lastUsed = dateKey;\n\t\t\t}\n\n\t\t\tfor (const [akKey, ak] of Object.entries(day.byApiKey || {})) {\n\t\t\t\tconst rawModel = ak.rawModel || \"\";\n\t\t\t\tconst provider = ak.provider || \"\";\n\t\t\t\tconst providerDisplayName = providerNodeNameMap[provider] || provider;\n\t\t\t\tconst apiKeyVal = ak.apiKey;\n\t\t\t\tconst keyInfo = apiKeyVal ? apiKeyMap[apiKeyVal] : null;\n\t\t\t\tconst keyName =\n\t\t\t\t\tkeyInfo?.name ||\n\t\t\t\t\t(apiKeyVal ? apiKeyVal.slice(0, 8) + \"...\" : \"Local (No API Key)\");\n\t\t\t\tconst apiKeyMasked = maskApiKey(apiKeyVal);\n\t\t\t\tconst apiKeyKey = apiKeyMasked || \"local-no-key\";\n\t\t\t\tif (!stats.byApiKey[akKey]) {\n\t\t\t\t\tstats.byApiKey[akKey] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\trawModel,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tapiKeyMasked,\n\t\t\t\t\t\tkeyName,\n\t\t\t\t\t\tapiKeyKey,\n\t\t\t\t\t\tlastUsed: dateKey,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tstats.byApiKey[akKey].requests += ak.requests || 0;\n\t\t\t\tstats.byApiKey[akKey].promptTokens += ak.promptTokens || 0;\n\t\t\t\tstats.byApiKey[akKey].completionTokens += ak.completionTokens || 0;\n\t\t\t\tstats.byApiKey[akKey].cachedTokens += ak.cachedTokens || 0;\n\t\t\t\tstats.byApiKey[akKey].cost += ak.cost || 0;\n\t\t\t\tif (dateKey > (stats.byApiKey[akKey].lastUsed || \"\"))\n\t\t\t\t\tstats.byApiKey[akKey].lastUsed = dateKey;\n\t\t\t}\n\n\t\t\tfor (const [epKey, ep] of Object.entries(day.byEndpoint || {})) {\n\t\t\t\tconst endpoint = ep.endpoint || epKey.split(\"|\")[0] || \"Unknown\";\n\t\t\t\tconst rawModel = ep.rawModel || \"\";\n\t\t\t\tconst provider = ep.provider || \"\";\n\t\t\t\tconst providerDisplayName = providerNodeNameMap[provider] || provider;\n\t\t\t\tif (!stats.byEndpoint[epKey]) {\n\t\t\t\t\tstats.byEndpoint[epKey] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\tendpoint,\n\t\t\t\t\t\trawModel,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tlastUsed: dateKey,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tstats.byEndpoint[epKey].requests += ep.requests || 0;\n\t\t\t\tstats.byEndpoint[epKey].promptTokens += ep.promptTokens || 0;\n\t\t\t\tstats.byEndpoint[epKey].completionTokens += ep.completionTokens || 0;\n\t\t\t\tstats.byEndpoint[epKey].cachedTokens += ep.cachedTokens || 0;\n\t\t\t\tstats.byEndpoint[epKey].cost += ep.cost || 0;\n\t\t\t\tif (dateKey > (stats.byEndpoint[epKey].lastUsed || \"\"))\n\t\t\t\t\tstats.byEndpoint[epKey].lastUsed = dateKey;\n\t\t\t}\n\t\t}\n\n\t\t// Overlay precise lastUsed timestamps from history\n\t\tconst overlayCutoff = maxDays ? Date.now() - maxDays * 86400000 : 0;\n\t\tconst histRows = db.all(\n\t\t\t`SELECT timestamp, provider, model, connectionId, apiKey, endpoint FROM usageHistory WHERE timestamp >= ?`,\n\t\t\t[new Date(overlayCutoff).toISOString()],\n\t\t);\n\t\tfor (const e of histRows) {\n\t\t\tconst ts = e.timestamp;\n\t\t\tif (\n\t\t\t\tstats.byProvider[e.provider] &&\n\t\t\t\tnew Date(ts) > new Date(stats.byProvider[e.provider].lastUsed)\n\t\t\t)\n\t\t\t\tstats.byProvider[e.provider].lastUsed = ts;\n\t\t\tconst modelKey = e.provider ? `${e.model} (${e.provider})` : e.model;\n\t\t\tif (\n\t\t\t\tstats.byModel[modelKey] &&\n\t\t\t\tnew Date(ts) > new Date(stats.byModel[modelKey].lastUsed)\n\t\t\t)\n\t\t\t\tstats.byModel[modelKey].lastUsed = ts;\n\n\t\t\tif (e.connectionId) {\n\t\t\t\tconst accountName =\n\t\t\t\t\tconnectionMap[e.connectionId] ||\n\t\t\t\t\t`Account ${e.connectionId.slice(0, 8)}...`;\n\t\t\t\tconst accountKey = `${e.model} (${e.provider} - ${accountName})`;\n\t\t\t\tif (\n\t\t\t\t\tstats.byAccount[accountKey] &&\n\t\t\t\t\tnew Date(ts) > new Date(stats.byAccount[accountKey].lastUsed)\n\t\t\t\t)\n\t\t\t\t\tstats.byAccount[accountKey].lastUsed = ts;\n\t\t\t}\n\n\t\t\tconst apiKeyKey =\n\t\t\t\te.apiKey && typeof e.apiKey === \"string\"\n\t\t\t\t\t? `${e.apiKey}|${e.model}|${e.provider || \"unknown\"}`\n\t\t\t\t\t: \"local-no-key\";\n\t\t\tif (\n\t\t\t\tstats.byApiKey[apiKeyKey] &&\n\t\t\t\tnew Date(ts) > new Date(stats.byApiKey[apiKeyKey].lastUsed)\n\t\t\t)\n\t\t\t\tstats.byApiKey[apiKeyKey].lastUsed = ts;\n\n\t\t\tconst endpoint = e.endpoint || \"Unknown\";\n\t\t\tconst endpointKey = `${endpoint}|${e.model}|${e.provider || \"unknown\"}`;\n\t\t\tif (\n\t\t\t\tstats.byEndpoint[endpointKey] &&\n\t\t\t\tnew Date(ts) > new Date(stats.byEndpoint[endpointKey].lastUsed)\n\t\t\t)\n\t\t\t\tstats.byEndpoint[endpointKey].lastUsed = ts;\n\t\t}\n\t} else {\n\t\t// 24h / today: live history\n\t\tlet cutoff;\n\t\tif (period === \"today\") {\n\t\t\tconst startOfDay = new Date();\n\t\t\tstartOfDay.setHours(0, 0, 0, 0);\n\t\t\tcutoff = startOfDay.toISOString();\n\t\t} else {\n\t\t\tcutoff = new Date(Date.now() - PERIOD_MS[\"24h\"]).toISOString();\n\t\t}\n\t\tconst filtered = db.all(\n\t\t\t`SELECT timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, tokens FROM usageHistory WHERE timestamp >= ?`,\n\t\t\t[cutoff],\n\t\t);\n\n\t\tfor (const r of filtered) {\n\t\t\tconst tokens = parseJson(r.tokens, {}) || {};\n\t\t\tconst promptTokens = tokens.prompt_tokens || 0;\n\t\t\tconst completionTokens = tokens.completion_tokens || 0;\n\t\t\tconst cachedTokens =\n\t\t\t\ttokens.cached_tokens || tokens.cache_read_input_tokens || 0;\n\t\t\tconst entryCost = r.cost || 0;\n\t\t\tconst providerDisplayName = providerNodeNameMap[r.provider] || r.provider;\n\n\t\t\tstats.totalPromptTokens += promptTokens;\n\t\t\tstats.totalCompletionTokens += completionTokens;\n\t\t\tstats.totalCachedTokens += cachedTokens;\n\t\t\tstats.totalCost += entryCost;\n\n\t\t\tif (!stats.byProvider[r.provider])\n\t\t\t\tstats.byProvider[r.provider] = {\n\t\t\t\t\trequests: 0,\n\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\tcost: 0,\n\t\t\t\t\tlastUsed: r.timestamp,\n\t\t\t\t};\n\t\t\tstats.byProvider[r.provider].requests++;\n\t\t\tstats.byProvider[r.provider].promptTokens += promptTokens;\n\t\t\tstats.byProvider[r.provider].completionTokens += completionTokens;\n\t\t\tstats.byProvider[r.provider].cachedTokens += cachedTokens;\n\t\t\tstats.byProvider[r.provider].cost += entryCost;\n\t\t\tif (\n\t\t\t\tnew Date(r.timestamp) > new Date(stats.byProvider[r.provider].lastUsed)\n\t\t\t)\n\t\t\t\tstats.byProvider[r.provider].lastUsed = r.timestamp;\n\n\t\t\tconst modelKey = r.provider ? `${r.model} (${r.provider})` : r.model;\n\t\t\tif (!stats.byModel[modelKey]) {\n\t\t\t\tstats.byModel[modelKey] = {\n\t\t\t\t\trequests: 0,\n\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\tcost: 0,\n\t\t\t\t\trawModel: r.model,\n\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\tlastUsed: r.timestamp,\n\t\t\t\t};\n\t\t\t}\n\t\t\tstats.byModel[modelKey].requests++;\n\t\t\tstats.byModel[modelKey].promptTokens += promptTokens;\n\t\t\tstats.byModel[modelKey].completionTokens += completionTokens;\n\t\t\tstats.byModel[modelKey].cachedTokens += cachedTokens;\n\t\t\tstats.byModel[modelKey].cost += entryCost;\n\t\t\tif (new Date(r.timestamp) > new Date(stats.byModel[modelKey].lastUsed))\n\t\t\t\tstats.byModel[modelKey].lastUsed = r.timestamp;\n\n\t\t\tif (r.connectionId) {\n\t\t\t\tconst accountName =\n\t\t\t\t\tconnectionMap[r.connectionId] ||\n\t\t\t\t\t`Account ${r.connectionId.slice(0, 8)}...`;\n\t\t\t\tconst accountKey = `${r.model} (${r.provider} - ${accountName})`;\n\t\t\t\tif (!stats.byAccount[accountKey]) {\n\t\t\t\t\tstats.byAccount[accountKey] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\trawModel: r.model,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tconnectionId: r.connectionId,\n\t\t\t\t\t\taccountName,\n\t\t\t\t\t\tlastUsed: r.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tstats.byAccount[accountKey].requests++;\n\t\t\t\tstats.byAccount[accountKey].promptTokens += promptTokens;\n\t\t\t\tstats.byAccount[accountKey].completionTokens += completionTokens;\n\t\t\t\tstats.byAccount[accountKey].cachedTokens += cachedTokens;\n\t\t\t\tstats.byAccount[accountKey].cost += entryCost;\n\t\t\t\tif (\n\t\t\t\t\tnew Date(r.timestamp) > new Date(stats.byAccount[accountKey].lastUsed)\n\t\t\t\t)\n\t\t\t\t\tstats.byAccount[accountKey].lastUsed = r.timestamp;\n\t\t\t}\n\n\t\t\tif (r.apiKey && typeof r.apiKey === \"string\") {\n\t\t\t\tconst keyInfo = apiKeyMap[r.apiKey];\n\t\t\t\tconst keyName = keyInfo?.name || r.apiKey.slice(0, 8) + \"...\";\n\t\t\t\tconst apiKeyMasked = maskApiKey(r.apiKey);\n\t\t\t\tconst akKey = `${apiKeyMasked}|${r.model}|${r.provider || \"unknown\"}`;\n\t\t\t\tif (!stats.byApiKey[akKey]) {\n\t\t\t\t\tstats.byApiKey[akKey] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\trawModel: r.model,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tapiKeyMasked,\n\t\t\t\t\t\tkeyName,\n\t\t\t\t\t\tapiKeyKey: apiKeyMasked,\n\t\t\t\t\t\tlastUsed: r.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst ake = stats.byApiKey[akKey];\n\t\t\t\take.requests++;\n\t\t\t\take.promptTokens += promptTokens;\n\t\t\t\take.completionTokens += completionTokens;\n\t\t\t\take.cachedTokens += cachedTokens;\n\t\t\t\take.cost += entryCost;\n\t\t\t\tif (new Date(r.timestamp) > new Date(ake.lastUsed))\n\t\t\t\t\take.lastUsed = r.timestamp;\n\t\t\t} else {\n\t\t\t\tif (!stats.byApiKey[\"local-no-key\"]) {\n\t\t\t\t\tstats.byApiKey[\"local-no-key\"] = {\n\t\t\t\t\t\trequests: 0,\n\t\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\t\tcost: 0,\n\t\t\t\t\t\trawModel: r.model,\n\t\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\t\tapiKeyMasked: null,\n\t\t\t\t\t\tkeyName: \"Local (No API Key)\",\n\t\t\t\t\t\tapiKeyKey: \"local-no-key\",\n\t\t\t\t\t\tlastUsed: r.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst ake = stats.byApiKey[\"local-no-key\"];\n\t\t\t\take.requests++;\n\t\t\t\take.promptTokens += promptTokens;\n\t\t\t\take.completionTokens += completionTokens;\n\t\t\t\take.cachedTokens += cachedTokens;\n\t\t\t\take.cost += entryCost;\n\t\t\t\tif (new Date(r.timestamp) > new Date(ake.lastUsed))\n\t\t\t\t\take.lastUsed = r.timestamp;\n\t\t\t}\n\n\t\t\tconst endpoint = r.endpoint || \"Unknown\";\n\t\t\tconst epKey = `${endpoint}|${r.model}|${r.provider || \"unknown\"}`;\n\t\t\tif (!stats.byEndpoint[epKey]) {\n\t\t\t\tstats.byEndpoint[epKey] = {\n\t\t\t\t\trequests: 0,\n\t\t\t\t\tpromptTokens: 0,\n\t\t\t\t\tcompletionTokens: 0,\n\t\t\t\t\tcachedTokens: 0,\n\t\t\t\t\tcost: 0,\n\t\t\t\t\tendpoint,\n\t\t\t\t\trawModel: r.model,\n\t\t\t\t\tprovider: providerDisplayName,\n\t\t\t\t\tlastUsed: r.timestamp,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst epe = stats.byEndpoint[epKey];\n\t\t\tepe.requests++;\n\t\t\tepe.promptTokens += promptTokens;\n\t\t\tepe.completionTokens += completionTokens;\n\t\t\tepe.cachedTokens += cachedTokens;\n\t\t\tepe.cost += entryCost;\n\t\t\tif (new Date(r.timestamp) > new Date(epe.lastUsed))\n\t\t\t\tepe.lastUsed = r.timestamp;\n\t\t}\n\t}\n\n\tstats.totalRequests = Object.values(stats.byProvider).reduce(\n\t\t(sum, p) => sum + (p.requests || 0),\n\t\t0,\n\t);\n\treturn stats;\n}\n\nexport async function getChartData(period = \"7d\") {\n\tconst db = await getAdapter();\n\tconst now = Date.now();\n\n\tif (period === \"today\") {\n\t\tconst bucketCount = 24;\n\t\tconst bucketMs = 3600000;\n\t\tconst startOfDay = new Date();\n\t\tstartOfDay.setHours(0, 0, 0, 0);\n\t\tconst startTime = startOfDay.getTime();\n\t\tconst endTime = startTime + bucketCount * bucketMs;\n\t\tconst labelFn = (ts) =>\n\t\t\tnew Date(ts).toLocaleTimeString(\"en-US\", {\n\t\t\t\thour: \"2-digit\",\n\t\t\t\tminute: \"2-digit\",\n\t\t\t\thour12: false,\n\t\t\t});\n\t\tconst buckets = Array.from({ length: bucketCount }, (_, i) => ({\n\t\t\tlabel: labelFn(startTime + i * bucketMs),\n\t\t\ttokens: 0,\n\t\t\tcost: 0,\n\t\t}));\n\n\t\tconst rows = db.all(\n\t\t\t`SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?`,\n\t\t\t[new Date(startTime).toISOString()],\n\t\t);\n\t\tfor (const r of rows) {\n\t\t\tconst t = new Date(r.timestamp).getTime();\n\t\t\tif (t < startTime || t >= endTime) continue;\n\t\t\tconst idx = Math.floor((t - startTime) / bucketMs);\n\t\t\tif (idx >= 0 && idx < bucketCount) {\n\t\t\t\tbuckets[idx].tokens +=\n\t\t\t\t\t(r.promptTokens || 0) + (r.completionTokens || 0);\n\t\t\t\tbuckets[idx].cost += r.cost || 0;\n\t\t\t}\n\t\t}\n\t\treturn buckets;\n\t}\n\n\tif (period === \"24h\") {\n\t\tconst bucketCount = 24;\n\t\tconst bucketMs = 3600000;\n\t\tconst labelFn = (ts) =>\n\t\t\tnew Date(ts).toLocaleTimeString(\"en-US\", {\n\t\t\t\thour: \"2-digit\",\n\t\t\t\tminute: \"2-digit\",\n\t\t\t\thour12: false,\n\t\t\t});\n\t\tconst startTime = now - bucketCount * bucketMs;\n\t\tconst buckets = Array.from({ length: bucketCount }, (_, i) => ({\n\t\t\tlabel: labelFn(startTime + i * bucketMs),\n\t\t\ttokens: 0,\n\t\t\tcost: 0,\n\t\t}));\n\n\t\tconst rows = db.all(\n\t\t\t`SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?`,\n\t\t\t[new Date(startTime).toISOString()],\n\t\t);\n\t\tfor (const r of rows) {\n\t\t\tconst t = new Date(r.timestamp).getTime();\n\t\t\tif (t < startTime || t > now) continue;\n\t\t\tconst idx = Math.min(\n\t\t\t\tMath.floor((t - startTime) / bucketMs),\n\t\t\t\tbucketCount - 1,\n\t\t\t);\n\t\t\tbuckets[idx].tokens += (r.promptTokens || 0) + (r.completionTokens || 0);\n\t\t\tbuckets[idx].cost += r.cost || 0;\n\t\t}\n\t\treturn buckets;\n\t}\n\n\tconst bucketCount = period === \"7d\" ? 7 : period === \"30d\" ? 30 : 60;\n\tconst today = new Date();\n\tconst labelFn = (d) =>\n\t\td.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n\n\t// Build map of dateKey → day data\n\tconst dayRows = loadDaysInRange(db, bucketCount);\n\tconst dayMap = {};\n\tfor (const r of dayRows) dayMap[r.dateKey] = parseJson(r.data, {});\n\n\treturn Array.from({ length: bucketCount }, (_, i) => {\n\t\tconst d = new Date(today);\n\t\td.setDate(d.getDate() - (bucketCount - 1 - i));\n\t\tconst dateKey = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}-${String(d.getDate()).padStart(2, \"0\")}`;\n\t\tconst dayData = dayMap[dateKey];\n\t\treturn {\n\t\t\tlabel: labelFn(d),\n\t\t\ttokens: dayData\n\t\t\t\t? (dayData.promptTokens || 0) + (dayData.completionTokens || 0)\n\t\t\t\t: 0,\n\t\t\tcost: dayData ? dayData.cost || 0 : 0,\n\t\t};\n\t});\n}\n\nexport async function getRecentLogs(limit = 200) {\n\ttry {\n\t\tconst db = await getAdapter();\n\t\tconst rows = db.all(\n\t\t\t`SELECT timestamp, provider, model, connectionId, promptTokens, completionTokens, status FROM usageHistory ORDER BY id DESC LIMIT ?`,\n\t\t\t[limit],\n\t\t);\n\t\tif (!rows.length) return [];\n\n\t\tconst connMap = {};\n\t\ttry {\n\t\t\tconst { getProviderConnections } = await import(\"./connectionsRepo.js\");\n\t\t\tconst connections = await getProviderConnections();\n\t\t\tfor (const c of connections) connMap[c.id] = c.displayName || c.name || c.email || \"\";\n\t\t} catch {}\n\n\t\treturn rows.map((r) => ({\n\t\t\ttimestamp: r.timestamp,\n\t\t\tmodel: r.model || \"-\",\n\t\t\tprovider: r.provider?.toUpperCase() || \"-\",\n\t\t\taccount: connMap[r.connectionId] || (r.connectionId ? r.connectionId.slice(0, 8) : \"-\"),\n\t\t\tpromptTokens: r.promptTokens ?? null,\n\t\t\tcompletionTokens: r.completionTokens ?? null,\n\t\t\tstatus: r.status || \"-\",\n\t\t}));\n\t} catch (e) {\n\t\tconsole.error(\"[usageRepo] getRecentLogs failed:\", e.message);\n\t\treturn [];\n\t}\n}\n"],"names":["maskApiKey","key","length","charAt","slice","PENDING_TIMEOUT_MS","RING_CAP","CONN_CACHE_TTL_MS","PERIOD_MS","_pendingRequests","byModel","byAccount","_lastErrorProvider","provider","ts","_statsEmitter","setMaxListeners","_pendingTimers","_recentRing","items","initialized","_connectionMapCache","map","_statsEmitTimers","pending","update","pendingRequests","lastErrorProvider","pendingTimers","recentRing","connCache","statsEmitTimers","statsEmitter","scheduleStatsEvent","event","delayMs","setTimeout","emit","unref","getLocalDateKey","timestamp","d","Date","getFullYear","String","getMonth","padStart","getDate","addToCounter","target","values","requests","promptTokens","completionTokens","cachedTokens","cost","meta","Object","assign","aggregateEntryToDay","day","entry","tokens","prompt_tokens","input_tokens","completion_tokens","output_tokens","cached_tokens","cache_read_input_tokens","vals","byProvider","byApiKey","byEndpoint","modelKey","model","rawModel","connectionId","apiKeyVal","apiKey","akModelKey","endpoint","epKey","pushToRing","push","getConnectionMapCached","now","getProviderConnections","all","c","id","name","email","ensureRingInitialized","db","rows","reverse","r","status","calculateCost","getPricingForModel","pricing","calculateCostFromTokens","e","console","error","trackPendingRequest","started","timerKey","Math","max","keys","clearTimeout","toLowerCase","getActiveRequests","activeRequests","connectionMap","models","entries","count","accountName","match","account","seen","Set","recentRequests","sort","a","b","t","filter","minute","has","add","errorProvider","saveRequestUsage","toISOString","inserted","transaction","existing","get","run","dateKey","row","data","cur","next","parseInt","value","getUsageHistory","conds","params","startDate","endDate","where","join","apiKeyMasked","loadDaysInRange","adapter","maxDays","today","cutoff","cutoffKey","getUsageStats","period","getApiKeys","getProviderNodes","Promise","allConnections","providerNodeNameMap","nodes","n","allApiKeys","apiKeyMap","k","createdAt","recentRows","stats","totalRequests","totalPromptTokens","totalCompletionTokens","totalCachedTokens","totalCost","last10Minutes","currentMinuteStart","floor","getTime","tenMinutesAgo","bucketMap","i","recent10","tt","minuteStart","useDailySummary","periodDays","dayRows","dr","prov","p","lastUsed","mk","m","split","statsKey","providerDisplayName","connId","accountKey","akKey","ak","keyInfo","keyName","apiKeyKey","ep","overlayCutoff","histRows","endpointKey","startOfDay","setHours","filtered","entryCost","ake","epe","reduce","sum","getChartData","bucketCount","bucketMs","startTime","endTime","labelFn","toLocaleTimeString","hour","hour12","buckets","Array","from","_","label","idx","min","toLocaleDateString","month","dayMap","setDate","dayData","getRecentLogs","limit","connMap","connections","displayName","toUpperCase","message"],"mappings":"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"}},
+ {"offset": {"line": 3668, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/localDb.js"],"sourcesContent":["// Shim → re-export from new SQLite-based DB layer (src/lib/db/)\n// Kept for backward compatibility with existing imports.\nexport {\n getSettings, updateSettings, isCloudEnabled, getCloudUrl,\n getProviderConnections, getProviderConnectionById,\n createProviderConnection, updateProviderConnection,\n deleteProviderConnection, deleteProviderConnectionsByProvider,\n reorderProviderConnections, cleanupProviderConnections,\n getProviderNodes, getProviderNodeById,\n createProviderNode, updateProviderNode, deleteProviderNode,\n getProxyPools, getProxyPoolById,\n createProxyPool, updateProxyPool, deleteProxyPool,\n getApiKeys, getApiKeyById, createApiKey, updateApiKey, importApiKey, deleteApiKey, validateApiKey, getApiKeyByKey,\n getCombos, getComboById, getComboByName,\n createCombo, updateCombo, deleteCombo,\n getModelAliases, setModelAlias, deleteModelAlias,\n getCustomModels, addCustomModel, deleteCustomModel,\n getMitmAlias, setMitmAliasAll,\n getPricing, getPricingForModel, updatePricing, resetPricing, resetAllPricing,\n exportDb, importDb,\n} from \"@/lib/db/index.js\";\n"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,yDAAyD;AACzD"}},
+ {"offset": {"line": 3677, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/proxy.js"],"sourcesContent":["import { proxy as dashboardProxy } from \"./dashboardGuard\";\n\nexport default async function proxy(request) {\n return dashboardProxy(request);\n}\n\nexport const config = {\n matcher: [\"/((?!_next/static|_next/image|favicon\\\\.ico).*)\"],\n};\n"],"names":["proxy","request","config","matcher"],"mappings":";;;;;;AAAA;;AAEe,eAAeA,MAAMC,OAAO;IACzC,OAAO,IAAA,8HAAc,EAACA;AACxB;AAEO,MAAMC,SAAS;IACpBC,SAAS;QAAC;KAAkD;AAC9D"}},
+ {"offset": {"line": 3697, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/shared/utils/machineId.js"],"sourcesContent":["import { machineIdSync } from 'node-machine-id';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport { DATA_DIR } from '@/lib/dataDir';\n\nconst MACHINE_ID_FILE = path.join(DATA_DIR, 'machine-id');\nconst AUTH_DIR = path.join(DATA_DIR, 'auth');\nconst CLI_SECRET_FILE = path.join(AUTH_DIR, 'cli-secret');\nconst CLI_AUTH_SALT = '9r-cli-auth';\nlet cachedRawId = null;\nlet cachedCliSecret = null;\n\n// Persist raw machine ID to file → guarantees CLI/server/middleware see same value\n// even when machineIdSync fails or returns inconsistent values across runtimes.\nfunction loadRawMachineId() {\n if (cachedRawId) return cachedRawId;\n try {\n cachedRawId = fs.readFileSync(MACHINE_ID_FILE, 'utf8').trim();\n if (cachedRawId) return cachedRawId;\n } catch {}\n try {\n cachedRawId = machineIdSync();\n } catch {\n cachedRawId = crypto.randomUUID();\n }\n try {\n fs.mkdirSync(DATA_DIR, { recursive: true });\n fs.writeFileSync(MACHINE_ID_FILE, cachedRawId, { mode: 0o600 });\n } catch {}\n return cachedRawId;\n}\n\n// Random secret persisted on first run → unpredictable CLI token even when machineId leaks.\nfunction loadCliSecret() {\n if (cachedCliSecret) return cachedCliSecret;\n try {\n cachedCliSecret = fs.readFileSync(CLI_SECRET_FILE, 'utf8').trim();\n if (cachedCliSecret) return cachedCliSecret;\n } catch {}\n cachedCliSecret = crypto.randomBytes(32).toString('hex');\n try {\n fs.mkdirSync(AUTH_DIR, { recursive: true });\n fs.writeFileSync(CLI_SECRET_FILE, cachedCliSecret, { mode: 0o600 });\n } catch {}\n return cachedCliSecret;\n}\n\nexport async function getConsistentMachineId(salt = null) {\n const saltValue = salt || process.env.MACHINE_ID_SALT || 'endpoint-proxy-salt';\n const raw = loadRawMachineId();\n const extra = saltValue === CLI_AUTH_SALT ? loadCliSecret() : '';\n return crypto.createHash('sha256').update(raw + saltValue + extra).digest('hex').substring(0, 16);\n}\n\nexport async function getRawMachineId() {\n return loadRawMachineId();\n}\n\n/**\n * Check if we're running in browser or server environment\n * @returns {boolean} True if in browser, false if in server\n */\nexport function isBrowser() {\n return typeof window !== 'undefined';\n}\n"],"names":["MACHINE_ID_FILE","join","AUTH_DIR","CLI_SECRET_FILE","CLI_AUTH_SALT","cachedRawId","cachedCliSecret","loadRawMachineId","readFileSync","trim","randomUUID","mkdirSync","recursive","writeFileSync","mode","loadCliSecret","randomBytes","toString","getConsistentMachineId","salt","saltValue","process","env","MACHINE_ID_SALT","raw","extra","createHash","update","digest","substring","getRawMachineId","isBrowser"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;;;;;;AAEA,MAAMA,kBAAkB,4HAAI,CAACC,IAAI,CAAC,iIAAQ,EAAE;AAC5C,MAAMC,WAAW,4HAAI,CAACD,IAAI,CAAC,iIAAQ,EAAE;AACrC,MAAME,kBAAkB,4HAAI,CAACF,IAAI,CAACC,UAAU;AAC5C,MAAME,gBAAgB;AACtB,IAAIC,cAAc;AAClB,IAAIC,kBAAkB;AAEtB,mFAAmF;AACnF,gFAAgF;AAChF,SAASC;IACP,IAAIF,aAAa,OAAOA;IACxB,IAAI;QACFA,cAAc,wHAAE,CAACG,YAAY,CAACR,iBAAiB,QAAQS,IAAI;QAC3D,IAAIJ,aAAa,OAAOA;IAC1B,EAAE,OAAM,CAAC;IACT,IAAI;QACFA,cAAc,IAAA,uKAAa;IAC7B,EAAE,OAAM;QACNA,cAAc,gIAAM,CAACK,UAAU;IACjC;IACA,IAAI;QACF,wHAAE,CAACC,SAAS,CAAC,iIAAQ,EAAE;YAAEC,WAAW;QAAK;QACzC,wHAAE,CAACC,aAAa,CAACb,iBAAiBK,aAAa;YAAES,MAAM;QAAM;IAC/D,EAAE,OAAM,CAAC;IACT,OAAOT;AACT;AAEA,4FAA4F;AAC5F,SAASU;IACP,IAAIT,iBAAiB,OAAOA;IAC5B,IAAI;QACFA,kBAAkB,wHAAE,CAACE,YAAY,CAACL,iBAAiB,QAAQM,IAAI;QAC/D,IAAIH,iBAAiB,OAAOA;IAC9B,EAAE,OAAM,CAAC;IACTA,kBAAkB,gIAAM,CAACU,WAAW,CAAC,IAAIC,QAAQ,CAAC;IAClD,IAAI;QACF,wHAAE,CAACN,SAAS,CAACT,UAAU;YAAEU,WAAW;QAAK;QACzC,wHAAE,CAACC,aAAa,CAACV,iBAAiBG,iBAAiB;YAAEQ,MAAM;QAAM;IACnE,EAAE,OAAM,CAAC;IACT,OAAOR;AACT;AAEO,eAAeY,uBAAuBC,OAAO,IAAI;IACtD,MAAMC,YAAYD,QAAQE,QAAQC,GAAG,CAACC,eAAe,IAAI;IACzD,MAAMC,MAAMjB;IACZ,MAAMkB,QAAQL,cAAchB,gBAAgBW,kBAAkB;IAC9D,OAAO,gIAAM,CAACW,UAAU,CAAC,UAAUC,MAAM,CAACH,MAAMJ,YAAYK,OAAOG,MAAM,CAAC,OAAOC,SAAS,CAAC,GAAG;AAChG;AAEO,eAAeC;IACpB,OAAOvB;AACT;AAMO,SAASwB;IACd,OAAO,kDAAkB;AAC3B"}}]
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js
new file mode 100644
index 00000000..bbaba7a8
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js
@@ -0,0 +1,324 @@
+module.exports = [
+"[externals]/sql.js [external] (sql.js, cjs, [project]/node_modules/sql.js)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("sql.js-59d66b30daa0a8d2", () => require("sql.js-59d66b30daa0a8d2"));
+
+module.exports = mod;
+}),
+"[project]/src/lib/db/adapters/sqljsAdapter.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createSqlJsAdapter",
+ ()=>createSqlJsAdapter
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:fs [external] (node:fs, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$sql$2e$js__$5b$external$5d$__$28$sql$2e$js$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f$sql$2e$js$29$__ = __turbopack_context__.i("[externals]/sql.js [external] (sql.js, cjs, [project]/node_modules/sql.js)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$schema$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/db/schema.js [middleware] (ecmascript)");
+;
+;
+;
+let SQL = null;
+async function loadSql() {
+ if (SQL) return SQL;
+ SQL = await (0, __TURBOPACK__imported__module__$5b$externals$5d2f$sql$2e$js__$5b$external$5d$__$28$sql$2e$js$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f$sql$2e$js$29$__["default"])();
+ return SQL;
+}
+async function createSqlJsAdapter(filePath) {
+ const SQLLib = await loadSql();
+ const buf = __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].existsSync(filePath) ? __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].readFileSync(filePath) : null;
+ const db = new SQLLib.Database(buf);
+ db.exec(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$db$2f$schema$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRAGMA_SQL"]);
+ // Schema is created/synced by migrate.js after adapter init
+ let dirty = false;
+ let saveTimer = null;
+ const SAVE_DEBOUNCE_MS = 100;
+ function persist() {
+ const data = db.export();
+ __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$fs__$5b$external$5d$__$28$node$3a$fs$2c$__cjs$29$__["default"].writeFileSync(filePath, Buffer.from(data));
+ dirty = false;
+ }
+ function scheduleSave() {
+ dirty = true;
+ if (saveTimer) clearTimeout(saveTimer);
+ saveTimer = setTimeout(()=>{
+ saveTimer = null;
+ if (dirty) {
+ try {
+ persist();
+ } catch (e) {
+ console.error("[sqljs] save failed:", e);
+ }
+ }
+ }, SAVE_DEBOUNCE_MS);
+ }
+ function paramsObj(params) {
+ if (!params || Array.isArray(params) && params.length === 0) return undefined;
+ return params;
+ }
+ function run(sql, params = []) {
+ const stmt = db.prepare(sql);
+ try {
+ stmt.bind(paramsObj(params));
+ stmt.step();
+ const changes = db.getRowsModified();
+ const lastInsertRowid = db.exec("SELECT last_insert_rowid() as id")[0]?.values?.[0]?.[0] ?? null;
+ scheduleSave();
+ return {
+ changes,
+ lastInsertRowid
+ };
+ } finally{
+ stmt.free();
+ }
+ }
+ function get(sql, params = []) {
+ const stmt = db.prepare(sql);
+ try {
+ stmt.bind(paramsObj(params));
+ if (stmt.step()) return stmt.getAsObject();
+ return undefined;
+ } finally{
+ stmt.free();
+ }
+ }
+ function all(sql, params = []) {
+ const stmt = db.prepare(sql);
+ try {
+ stmt.bind(paramsObj(params));
+ const rows = [];
+ while(stmt.step())rows.push(stmt.getAsObject());
+ return rows;
+ } finally{
+ stmt.free();
+ }
+ }
+ function exec(sql) {
+ db.exec(sql);
+ scheduleSave();
+ }
+ function transaction(fn) {
+ const sp = `sp_${Math.random().toString(36).slice(2)}`;
+ db.exec(`SAVEPOINT ${sp}`);
+ try {
+ const result = fn();
+ db.exec(`RELEASE ${sp}`);
+ scheduleSave();
+ return result;
+ } catch (e) {
+ try {
+ db.exec(`ROLLBACK TO ${sp}`);
+ db.exec(`RELEASE ${sp}`);
+ } catch {}
+ throw e;
+ }
+ }
+ function close() {
+ if (saveTimer) clearTimeout(saveTimer);
+ if (dirty) persist();
+ db.close();
+ }
+ // Flush on shutdown
+ const flush = ()=>{
+ if (dirty) try {
+ persist();
+ } catch {}
+ };
+ process.on("beforeExit", flush);
+ process.on("SIGINT", flush);
+ process.on("SIGTERM", flush);
+ return {
+ driver: "sql.js",
+ run,
+ get,
+ all,
+ exec,
+ transaction,
+ close,
+ raw: db
+ };
+}
+}),
+"[project]/src/lib/db/schema.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// ⚠️ AGENT/DEV: Bump this by +1 EVERY TIME you change the schema below
+// (add/remove/alter a table, column, or index in TABLES). It drives the
+// pre-change safety backup in migrate.js: when the stored version is lower,
+// one lightweight DB backup is taken before applying schema changes. Forgetting
+// to bump only skips that backup — it does NOT break the additive auto-sync.
+__turbopack_context__.s([
+ "PRAGMA_SQL",
+ ()=>PRAGMA_SQL,
+ "SCHEMA_VERSION",
+ ()=>SCHEMA_VERSION,
+ "TABLES",
+ ()=>TABLES,
+ "buildCreateTableSql",
+ ()=>buildCreateTableSql
+]);
+const SCHEMA_VERSION = 3;
+const PRAGMA_SQL = `
+PRAGMA journal_mode = WAL;
+PRAGMA synchronous = NORMAL;
+PRAGMA temp_store = MEMORY;
+PRAGMA mmap_size = 30000000;
+PRAGMA cache_size = -64000;
+PRAGMA foreign_keys = ON;
+PRAGMA busy_timeout = 5000;
+`;
+const TABLES = {
+ _meta: {
+ columns: {
+ key: "TEXT PRIMARY KEY",
+ value: "TEXT NOT NULL"
+ }
+ },
+ settings: {
+ columns: {
+ id: "INTEGER PRIMARY KEY CHECK (id = 1)",
+ data: "TEXT NOT NULL"
+ }
+ },
+ providerConnections: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ provider: "TEXT NOT NULL",
+ authType: "TEXT NOT NULL",
+ name: "TEXT",
+ email: "TEXT",
+ priority: "INTEGER",
+ isActive: "INTEGER DEFAULT 1",
+ data: "TEXT NOT NULL",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)",
+ "CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)",
+ "CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"
+ ]
+ },
+ providerNodes: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ type: "TEXT",
+ name: "TEXT",
+ data: "TEXT NOT NULL",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"
+ ]
+ },
+ proxyPools: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ isActive: "INTEGER DEFAULT 1",
+ testStatus: "TEXT",
+ data: "TEXT NOT NULL",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)",
+ "CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"
+ ]
+ },
+ apiKeys: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ key: "TEXT UNIQUE NOT NULL",
+ name: "TEXT",
+ machineId: "TEXT",
+ isActive: "INTEGER DEFAULT 1",
+ allowedModels: "TEXT"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"
+ ]
+ },
+ combos: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ name: "TEXT UNIQUE NOT NULL",
+ kind: "TEXT",
+ models: "TEXT NOT NULL",
+ enabled: "INTEGER NOT NULL DEFAULT 1",
+ createdAt: "TEXT NOT NULL",
+ updatedAt: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"
+ ]
+ },
+ kv: {
+ columns: {
+ scope: "TEXT NOT NULL",
+ key: "TEXT NOT NULL",
+ value: "TEXT NOT NULL"
+ },
+ primaryKey: "PRIMARY KEY (scope, key)",
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"
+ ]
+ },
+ usageHistory: {
+ columns: {
+ id: "INTEGER PRIMARY KEY AUTOINCREMENT",
+ timestamp: "TEXT NOT NULL",
+ provider: "TEXT",
+ model: "TEXT",
+ connectionId: "TEXT",
+ apiKey: "TEXT",
+ endpoint: "TEXT",
+ promptTokens: "INTEGER DEFAULT 0",
+ completionTokens: "INTEGER DEFAULT 0",
+ cost: "REAL DEFAULT 0",
+ status: "TEXT",
+ tokens: "TEXT",
+ meta: "TEXT"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)",
+ "CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)",
+ "CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)",
+ "CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)"
+ ]
+ },
+ usageDaily: {
+ columns: {
+ dateKey: "TEXT PRIMARY KEY",
+ data: "TEXT NOT NULL"
+ }
+ },
+ requestDetails: {
+ columns: {
+ id: "TEXT PRIMARY KEY",
+ timestamp: "TEXT NOT NULL",
+ provider: "TEXT",
+ model: "TEXT",
+ connectionId: "TEXT",
+ status: "TEXT",
+ apiKey: "TEXT",
+ data: "TEXT NOT NULL"
+ },
+ indexes: [
+ "CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)",
+ "CREATE INDEX IF NOT EXISTS idx_rd_apikey ON requestDetails(apiKey)"
+ ]
+ }
+};
+function buildCreateTableSql(name, def) {
+ const cols = Object.entries(def.columns).map(([k, v])=>`${k} ${v}`);
+ if (def.primaryKey) cols.push(def.primaryKey);
+ return `CREATE TABLE IF NOT EXISTS ${name} (${cols.join(", ")})`;
+}
+}),
+];
+
+//# sourceMappingURL=%5Broot-of-the-server%5D__1_pghx_._.js.map
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js.map
new file mode 100644
index 00000000..58613860
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": [
+ {"offset": {"line": 10, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/adapters/sqljsAdapter.js"],"sourcesContent":["import fs from \"node:fs\";\nimport initSqlJs from \"sql.js\";\nimport { PRAGMA_SQL } from \"../schema.js\";\n\nlet SQL = null;\n\nasync function loadSql() {\n if (SQL) return SQL;\n SQL = await initSqlJs();\n return SQL;\n}\n\nexport async function createSqlJsAdapter(filePath) {\n const SQLLib = await loadSql();\n const buf = fs.existsSync(filePath) ? fs.readFileSync(filePath) : null;\n const db = new SQLLib.Database(buf);\n db.exec(PRAGMA_SQL);\n // Schema is created/synced by migrate.js after adapter init\n\n let dirty = false;\n let saveTimer = null;\n const SAVE_DEBOUNCE_MS = 100;\n\n function persist() {\n const data = db.export();\n fs.writeFileSync(filePath, Buffer.from(data));\n dirty = false;\n }\n\n function scheduleSave() {\n dirty = true;\n if (saveTimer) clearTimeout(saveTimer);\n saveTimer = setTimeout(() => {\n saveTimer = null;\n if (dirty) {\n try { persist(); } catch (e) { console.error(\"[sqljs] save failed:\", e); }\n }\n }, SAVE_DEBOUNCE_MS);\n }\n\n function paramsObj(params) {\n if (!params || (Array.isArray(params) && params.length === 0)) return undefined;\n return params;\n }\n\n function run(sql, params = []) {\n const stmt = db.prepare(sql);\n try {\n stmt.bind(paramsObj(params));\n stmt.step();\n const changes = db.getRowsModified();\n const lastInsertRowid = db.exec(\"SELECT last_insert_rowid() as id\")[0]?.values?.[0]?.[0] ?? null;\n scheduleSave();\n return { changes, lastInsertRowid };\n } finally {\n stmt.free();\n }\n }\n\n function get(sql, params = []) {\n const stmt = db.prepare(sql);\n try {\n stmt.bind(paramsObj(params));\n if (stmt.step()) return stmt.getAsObject();\n return undefined;\n } finally {\n stmt.free();\n }\n }\n\n function all(sql, params = []) {\n const stmt = db.prepare(sql);\n try {\n stmt.bind(paramsObj(params));\n const rows = [];\n while (stmt.step()) rows.push(stmt.getAsObject());\n return rows;\n } finally {\n stmt.free();\n }\n }\n\n function exec(sql) {\n db.exec(sql);\n scheduleSave();\n }\n\n function transaction(fn) {\n const sp = `sp_${Math.random().toString(36).slice(2)}`;\n db.exec(`SAVEPOINT ${sp}`);\n try {\n const result = fn();\n db.exec(`RELEASE ${sp}`);\n scheduleSave();\n return result;\n } catch (e) {\n try { db.exec(`ROLLBACK TO ${sp}`); db.exec(`RELEASE ${sp}`); } catch {}\n throw e;\n }\n }\n\n function close() {\n if (saveTimer) clearTimeout(saveTimer);\n if (dirty) persist();\n db.close();\n }\n\n // Flush on shutdown\n const flush = () => { if (dirty) try { persist(); } catch {} };\n process.on(\"beforeExit\", flush);\n process.on(\"SIGINT\", flush);\n process.on(\"SIGTERM\", flush);\n\n return { driver: \"sql.js\", run, get, all, exec, transaction, close, raw: db };\n}\n"],"names":["SQL","loadSql","createSqlJsAdapter","filePath","SQLLib","buf","existsSync","readFileSync","db","Database","exec","dirty","saveTimer","SAVE_DEBOUNCE_MS","persist","data","export","writeFileSync","Buffer","from","scheduleSave","clearTimeout","setTimeout","e","console","error","paramsObj","params","Array","isArray","length","undefined","run","sql","stmt","prepare","bind","step","changes","getRowsModified","lastInsertRowid","values","free","get","getAsObject","all","rows","push","transaction","fn","sp","Math","random","toString","slice","result","close","flush","process","on","driver","raw"],"mappings":"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"}},
+ {"offset": {"line": 144, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/db/schema.js"],"sourcesContent":["// ⚠️ AGENT/DEV: Bump this by +1 EVERY TIME you change the schema below\n// (add/remove/alter a table, column, or index in TABLES). It drives the\n// pre-change safety backup in migrate.js: when the stored version is lower,\n// one lightweight DB backup is taken before applying schema changes. Forgetting\n// to bump only skips that backup — it does NOT break the additive auto-sync.\nexport const SCHEMA_VERSION = 3;\n\nexport const PRAGMA_SQL = `\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA temp_store = MEMORY;\nPRAGMA mmap_size = 30000000;\nPRAGMA cache_size = -64000;\nPRAGMA foreign_keys = ON;\nPRAGMA busy_timeout = 5000;\n`;\n\n// Declarative current schema. Used by syncSchemaFromTables() to\n// auto-add missing tables/columns/indexes after versioned migrations.\n// For destructive changes (drop/rename/type-change), write a migration file.\nexport const TABLES = {\n\t_meta: {\n\t\tcolumns: {\n\t\t\tkey: \"TEXT PRIMARY KEY\",\n\t\t\tvalue: \"TEXT NOT NULL\",\n\t\t},\n\t},\n\tsettings: {\n\t\tcolumns: {\n\t\t\tid: \"INTEGER PRIMARY KEY CHECK (id = 1)\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t},\n\t},\n\tproviderConnections: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tprovider: \"TEXT NOT NULL\",\n\t\t\tauthType: \"TEXT NOT NULL\",\n\t\t\tname: \"TEXT\",\n\t\t\temail: \"TEXT\",\n\t\t\tpriority: \"INTEGER\",\n\t\t\tisActive: \"INTEGER DEFAULT 1\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)\",\n\t\t],\n\t},\n\tproviderNodes: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\ttype: \"TEXT\",\n\t\t\tname: \"TEXT\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)\"],\n\t},\n\tproxyPools: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tisActive: \"INTEGER DEFAULT 1\",\n\t\t\ttestStatus: \"TEXT\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)\",\n\t\t],\n\t},\n\tapiKeys: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tkey: \"TEXT UNIQUE NOT NULL\",\n\t\t\tname: \"TEXT\",\n\t\t\tmachineId: \"TEXT\",\n\t\t\tisActive: \"INTEGER DEFAULT 1\",\n\t\t\tallowedModels: \"TEXT\",\n\t\t},\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)\"],\n\t},\n\tcombos: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\tname: \"TEXT UNIQUE NOT NULL\",\n\t\t\tkind: \"TEXT\",\n\t\t\tmodels: \"TEXT NOT NULL\",\n\t\t\tenabled: \"INTEGER NOT NULL DEFAULT 1\",\n\t\t\tcreatedAt: \"TEXT NOT NULL\",\n\t\t\tupdatedAt: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)\"],\n\t},\n\tkv: {\n\t\tcolumns: {\n\t\t\tscope: \"TEXT NOT NULL\",\n\t\t\tkey: \"TEXT NOT NULL\",\n\t\t\tvalue: \"TEXT NOT NULL\",\n\t\t},\n\t\tprimaryKey: \"PRIMARY KEY (scope, key)\",\n\t\tindexes: [\"CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)\"],\n\t},\n\tusageHistory: {\n\t\tcolumns: {\n\t\t\tid: \"INTEGER PRIMARY KEY AUTOINCREMENT\",\n\t\t\ttimestamp: \"TEXT NOT NULL\",\n\t\t\tprovider: \"TEXT\",\n\t\t\tmodel: \"TEXT\",\n\t\t\tconnectionId: \"TEXT\",\n\t\t\tapiKey: \"TEXT\",\n\t\t\tendpoint: \"TEXT\",\n\t\t\tpromptTokens: \"INTEGER DEFAULT 0\",\n\t\t\tcompletionTokens: \"INTEGER DEFAULT 0\",\n\t\t\tcost: \"REAL DEFAULT 0\",\n\t\t\tstatus: \"TEXT\",\n\t\t\ttokens: \"TEXT\",\n\t\t\tmeta: \"TEXT\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)\",\n\t\t],\n\t},\n\tusageDaily: {\n\t\tcolumns: {\n\t\t\tdateKey: \"TEXT PRIMARY KEY\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t},\n\t},\n\trequestDetails: {\n\t\tcolumns: {\n\t\t\tid: \"TEXT PRIMARY KEY\",\n\t\t\ttimestamp: \"TEXT NOT NULL\",\n\t\t\tprovider: \"TEXT\",\n\t\t\tmodel: \"TEXT\",\n\t\t\tconnectionId: \"TEXT\",\n\t\t\tstatus: \"TEXT\",\n\t\t\tapiKey: \"TEXT\",\n\t\t\tdata: \"TEXT NOT NULL\",\n\t\t},\n\t\tindexes: [\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)\",\n\t\t\t\"CREATE INDEX IF NOT EXISTS idx_rd_apikey ON requestDetails(apiKey)\",\n\t\t],\n\t},\n};\n\nexport function buildCreateTableSql(name, def) {\n\tconst cols = Object.entries(def.columns).map(([k, v]) => `${k} ${v}`);\n\tif (def.primaryKey) cols.push(def.primaryKey);\n\treturn `CREATE TABLE IF NOT EXISTS ${name} (${cols.join(\", \")})`;\n}\n"],"names":["SCHEMA_VERSION","PRAGMA_SQL","TABLES","_meta","columns","key","value","settings","id","data","providerConnections","provider","authType","name","email","priority","isActive","createdAt","updatedAt","indexes","providerNodes","type","proxyPools","testStatus","apiKeys","machineId","allowedModels","combos","kind","models","enabled","kv","scope","primaryKey","usageHistory","timestamp","model","connectionId","apiKey","endpoint","promptTokens","completionTokens","cost","status","tokens","meta","usageDaily","dateKey","requestDetails","buildCreateTableSql","def","cols","Object","entries","map","k","v","push","join"],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;;;;;;;;;;;AACtE,MAAMA,iBAAiB;AAEvB,MAAMC,aAAa,CAAC;;;;;;;;AAQ3B,CAAC;AAKM,MAAMC,SAAS;IACrBC,OAAO;QACNC,SAAS;YACRC,KAAK;YACLC,OAAO;QACR;IACD;IACAC,UAAU;QACTH,SAAS;YACRI,IAAI;YACJC,MAAM;QACP;IACD;IACAC,qBAAqB;QACpBN,SAAS;YACRI,IAAI;YACJG,UAAU;YACVC,UAAU;YACVC,MAAM;YACNC,OAAO;YACPC,UAAU;YACVC,UAAU;YACVP,MAAM;YACNQ,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YACR;YACA;YACA;SACA;IACF;IACAC,eAAe;QACdhB,SAAS;YACRI,IAAI;YACJa,MAAM;YACNR,MAAM;YACNJ,MAAM;YACNQ,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YAAC;SAAgE;IAC3E;IACAG,YAAY;QACXlB,SAAS;YACRI,IAAI;YACJQ,UAAU;YACVO,YAAY;YACZd,MAAM;YACNQ,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YACR;YACA;SACA;IACF;IACAK,SAAS;QACRpB,SAAS;YACRI,IAAI;YACJH,KAAK;YACLQ,MAAM;YACNY,WAAW;YACXT,UAAU;YACVU,eAAe;QAChB;QACAP,SAAS;YAAC;SAAwD;IACnE;IACAQ,QAAQ;QACPvB,SAAS;YACRI,IAAI;YACJK,MAAM;YACNe,MAAM;YACNC,QAAQ;YACRC,SAAS;YACTb,WAAW;YACXC,WAAW;QACZ;QACAC,SAAS;YAAC;SAA4D;IACvE;IACAY,IAAI;QACH3B,SAAS;YACR4B,OAAO;YACP3B,KAAK;YACLC,OAAO;QACR;QACA2B,YAAY;QACZd,SAAS;YAAC;SAAuD;IAClE;IACAe,cAAc;QACb9B,SAAS;YACRI,IAAI;YACJ2B,WAAW;YACXxB,UAAU;YACVyB,OAAO;YACPC,cAAc;YACdC,QAAQ;YACRC,UAAU;YACVC,cAAc;YACdC,kBAAkB;YAClBC,MAAM;YACNC,QAAQ;YACRC,QAAQ;YACRC,MAAM;QACP;QACA1B,SAAS;YACR;YACA;YACA;YACA;SACA;IACF;IACA2B,YAAY;QACX1C,SAAS;YACR2C,SAAS;YACTtC,MAAM;QACP;IACD;IACAuC,gBAAgB;QACf5C,SAAS;YACRI,IAAI;YACJ2B,WAAW;YACXxB,UAAU;YACVyB,OAAO;YACPC,cAAc;YACdM,QAAQ;YACRL,QAAQ;YACR7B,MAAM;QACP;QACAU,SAAS;YACR;YACA;YACA;YACA;YACA;SACA;IACF;AACD;AAEO,SAAS8B,oBAAoBpC,IAAI,EAAEqC,GAAG;IAC5C,MAAMC,OAAOC,OAAOC,OAAO,CAACH,IAAI9C,OAAO,EAAEkD,GAAG,CAAC,CAAC,CAACC,GAAGC,EAAE,GAAK,GAAGD,EAAE,CAAC,EAAEC,GAAG;IACpE,IAAIN,IAAIjB,UAAU,EAAEkB,KAAKM,IAAI,CAACP,IAAIjB,UAAU;IAC5C,OAAO,CAAC,2BAA2B,EAAEpB,KAAK,EAAE,EAAEsC,KAAKO,IAAI,CAAC,MAAM,CAAC,CAAC;AACjE"}}]
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js
new file mode 100644
index 00000000..aaaa986a
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js
@@ -0,0 +1,12402 @@
+module.exports = [
+"[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("events", () => require("events"));
+
+module.exports = mod;
+}),
+"[externals]/os [external] (os, cjs)", ((__turbopack_context__, module, exports) => {
+
+var mod = __turbopack_context__.x("os", () => require("os"));
+
+module.exports = mod;
+}),
+"[project]/open-sse/config/googleTtsLanguages.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "GOOGLE_TTS_LANGUAGES",
+ ()=>GOOGLE_TTS_LANGUAGES
+]);
+const GOOGLE_TTS_LANGUAGES = [
+ {
+ id: "af",
+ name: "Afrikaans",
+ type: "tts"
+ },
+ {
+ id: "ar",
+ name: "Arabic",
+ type: "tts"
+ },
+ {
+ id: "bg",
+ name: "Bulgarian",
+ type: "tts"
+ },
+ {
+ id: "bn",
+ name: "Bengali",
+ type: "tts"
+ },
+ {
+ id: "bs",
+ name: "Bosnian",
+ type: "tts"
+ },
+ {
+ id: "ca",
+ name: "Catalan",
+ type: "tts"
+ },
+ {
+ id: "cs",
+ name: "Czech",
+ type: "tts"
+ },
+ {
+ id: "cy",
+ name: "Welsh",
+ type: "tts"
+ },
+ {
+ id: "da",
+ name: "Danish",
+ type: "tts"
+ },
+ {
+ id: "de",
+ name: "German",
+ type: "tts"
+ },
+ {
+ id: "el",
+ name: "Greek",
+ type: "tts"
+ },
+ {
+ id: "en",
+ name: "English",
+ type: "tts"
+ },
+ {
+ id: "eo",
+ name: "Esperanto",
+ type: "tts"
+ },
+ {
+ id: "es",
+ name: "Spanish",
+ type: "tts"
+ },
+ {
+ id: "et",
+ name: "Estonian",
+ type: "tts"
+ },
+ {
+ id: "fi",
+ name: "Finnish",
+ type: "tts"
+ },
+ {
+ id: "fr",
+ name: "French",
+ type: "tts"
+ },
+ {
+ id: "gu",
+ name: "Gujarati",
+ type: "tts"
+ },
+ {
+ id: "hi",
+ name: "Hindi",
+ type: "tts"
+ },
+ {
+ id: "hr",
+ name: "Croatian",
+ type: "tts"
+ },
+ {
+ id: "hu",
+ name: "Hungarian",
+ type: "tts"
+ },
+ {
+ id: "hy",
+ name: "Armenian",
+ type: "tts"
+ },
+ {
+ id: "id",
+ name: "Indonesian",
+ type: "tts"
+ },
+ {
+ id: "is",
+ name: "Icelandic",
+ type: "tts"
+ },
+ {
+ id: "it",
+ name: "Italian",
+ type: "tts"
+ },
+ {
+ id: "ja",
+ name: "Japanese",
+ type: "tts"
+ },
+ {
+ id: "jw",
+ name: "Javanese",
+ type: "tts"
+ },
+ {
+ id: "km",
+ name: "Khmer",
+ type: "tts"
+ },
+ {
+ id: "kn",
+ name: "Kannada",
+ type: "tts"
+ },
+ {
+ id: "ko",
+ name: "Korean",
+ type: "tts"
+ },
+ {
+ id: "la",
+ name: "Latin",
+ type: "tts"
+ },
+ {
+ id: "lv",
+ name: "Latvian",
+ type: "tts"
+ },
+ {
+ id: "mk",
+ name: "Macedonian",
+ type: "tts"
+ },
+ {
+ id: "ml",
+ name: "Malayalam",
+ type: "tts"
+ },
+ {
+ id: "mr",
+ name: "Marathi",
+ type: "tts"
+ },
+ {
+ id: "my",
+ name: "Myanmar (Burmese)",
+ type: "tts"
+ },
+ {
+ id: "ne",
+ name: "Nepali",
+ type: "tts"
+ },
+ {
+ id: "nl",
+ name: "Dutch",
+ type: "tts"
+ },
+ {
+ id: "no",
+ name: "Norwegian",
+ type: "tts"
+ },
+ {
+ id: "pl",
+ name: "Polish",
+ type: "tts"
+ },
+ {
+ id: "pt",
+ name: "Portuguese",
+ type: "tts"
+ },
+ {
+ id: "ro",
+ name: "Romanian",
+ type: "tts"
+ },
+ {
+ id: "ru",
+ name: "Russian",
+ type: "tts"
+ },
+ {
+ id: "si",
+ name: "Sinhala",
+ type: "tts"
+ },
+ {
+ id: "sk",
+ name: "Slovak",
+ type: "tts"
+ },
+ {
+ id: "sq",
+ name: "Albanian",
+ type: "tts"
+ },
+ {
+ id: "sr",
+ name: "Serbian",
+ type: "tts"
+ },
+ {
+ id: "su",
+ name: "Sundanese",
+ type: "tts"
+ },
+ {
+ id: "sv",
+ name: "Swedish",
+ type: "tts"
+ },
+ {
+ id: "sw",
+ name: "Swahili",
+ type: "tts"
+ },
+ {
+ id: "ta",
+ name: "Tamil",
+ type: "tts"
+ },
+ {
+ id: "te",
+ name: "Telugu",
+ type: "tts"
+ },
+ {
+ id: "th",
+ name: "Thai",
+ type: "tts"
+ },
+ {
+ id: "tl",
+ name: "Filipino",
+ type: "tts"
+ },
+ {
+ id: "tr",
+ name: "Turkish",
+ type: "tts"
+ },
+ {
+ id: "uk",
+ name: "Ukrainian",
+ type: "tts"
+ },
+ {
+ id: "ur",
+ name: "Urdu",
+ type: "tts"
+ },
+ {
+ id: "vi",
+ name: "Vietnamese",
+ type: "tts"
+ },
+ {
+ id: "zh-CN",
+ name: "Chinese (Simplified)",
+ type: "tts"
+ },
+ {
+ id: "zh-TW",
+ name: "Chinese (Traditional)",
+ type: "tts"
+ }
+];
+}),
+"[project]/open-sse/config/grokCli.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "GROK_CLI_BASE_URL",
+ ()=>GROK_CLI_BASE_URL,
+ "GROK_CLI_CLIENT_IDENTIFIER",
+ ()=>GROK_CLI_CLIENT_IDENTIFIER,
+ "GROK_CLI_MODEL",
+ ()=>GROK_CLI_MODEL,
+ "GROK_CLI_USER_AGENT",
+ ()=>GROK_CLI_USER_AGENT,
+ "GROK_CLI_VERSION",
+ ()=>GROK_CLI_VERSION,
+ "supportsGrokCliReasoningEffort",
+ ()=>supportsGrokCliReasoningEffort
+]);
+const GROK_CLI_VERSION = "0.2.99";
+const GROK_CLI_MODEL = "grok-build";
+const GROK_CLI_BASE_URL = "https://cli-chat-proxy.grok.com/v1";
+const GROK_CLI_CLIENT_IDENTIFIER = "grok-shell";
+const GROK_CLI_USER_AGENT = `grok-shell/${GROK_CLI_VERSION} (linux; x86_64)`;
+function supportsGrokCliReasoningEffort(model) {
+ // ponytail: unknown models omit effort until live metadata reaches dispatch.
+ return /^grok-4\.5(?:$|-)/.test(String(model || ""));
+}
+}),
+"[project]/open-sse/config/providerModels.js [instrumentation] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "OAUTH_ALIASES",
+ ()=>OAUTH_ALIASES,
+ "PROVIDER_ID_TO_ALIAS",
+ ()=>PROVIDER_ID_TO_ALIAS,
+ "findModelName",
+ ()=>findModelName,
+ "getDefaultModel",
+ ()=>getDefaultModel,
+ "getModelQuotaFamily",
+ ()=>getModelQuotaFamily,
+ "getModelStrip",
+ ()=>getModelStrip,
+ "getModelSupportedFormats",
+ ()=>getModelSupportedFormats,
+ "getModelTargetFormat",
+ ()=>getModelTargetFormat,
+ "getModelType",
+ ()=>getModelType,
+ "getModelUpstreamId",
+ ()=>getModelUpstreamId,
+ "getModelsByProviderId",
+ ()=>getModelsByProviderId,
+ "getProviderModels",
+ ()=>getProviderModels,
+ "isValidModel",
+ ()=>isValidModel
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$providers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/open-sse/config/providers.js [instrumentation] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/index.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/index.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/models/schema.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$helpers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/models/helpers.js [instrumentation] (ecmascript)");
+;
+;
+;
+;
+;
+;
+function getProviderModels(aliasOrId) {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId] || [];
+}
+function getDefaultModel(aliasOrId) {
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ return models?.[0]?.id || null;
+}
+// Providers whose registry uses dots in version numbers (e.g. "claude-sonnet-4.5").
+// For these, we tolerate clients sending dashes ("claude-sonnet-4-5") by normalizing
+// digit-hyphen-digit to digit-dot-digit before lookup. Other providers are left untouched.
+const DOT_VERSION_PROVIDERS = new Set([
+ "kr",
+ "kiro"
+]);
+// Find a registry entry by id. For Kiro models, tolerates dash/dot version separators
+// ("claude-sonnet-4-5" ~= "claude-sonnet-4.5"). Other providers use exact match only.
+function findModel(models, modelId, aliasOrId) {
+ if (!models) return undefined;
+ const found = models.find((m)=>m.id === modelId);
+ if (found) return found;
+ if (!DOT_VERSION_PROVIDERS.has(aliasOrId)) return undefined;
+ const normalized = (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["normalizeModelId"])(modelId);
+ if (normalized === modelId) return undefined;
+ return models.find((m)=>m.id === normalized);
+}
+function isValidModel(aliasOrId, modelId, passthroughProviders = new Set()) {
+ if (passthroughProviders.has(aliasOrId)) return true;
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ if (!models) return false;
+ return !!findModel(models, modelId, aliasOrId);
+}
+function findModelName(aliasOrId, modelId) {
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ if (!models) return modelId;
+ const found = findModel(models, modelId, aliasOrId);
+ return found?.name || modelId;
+}
+function getModelTargetFormat(aliasOrId, modelId) {
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ if (!models) return null;
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["modelTargetFormat"])(findModel(models, modelId, aliasOrId));
+}
+function getModelSupportedFormats(aliasOrId, modelId) {
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ if (!models) return null;
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["modelSupportedFormats"])(findModel(models, modelId, aliasOrId));
+}
+function getModelType(aliasOrId, modelId) {
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ if (!models) return null;
+ const found = findModel(models, modelId, aliasOrId);
+ return found?.kind || found?.type || null;
+}
+function getModelUpstreamId(aliasOrId, modelId) {
+ // Split off thinking suffix "(level)" so lookup hits the base id; re-append it to
+ // the result so downstream applyThinking still sees the suffix (body.model is stripped separately).
+ const sufMatch = typeof modelId === "string" ? modelId.match(/\([^()]+\)\s*$/) : null;
+ const suffix = sufMatch ? sufMatch[0] : "";
+ const baseId = suffix ? modelId.slice(0, sufMatch.index).trim() : modelId;
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ const found = findModel(models, baseId, aliasOrId);
+ const resolvedId = found?.upstreamModelId || found?.id;
+ if (resolvedId) {
+ const presetMatch = resolvedId.match(/\([^()]+\)\s*$/);
+ const presetSuffix = presetMatch?.[0] || "";
+ const resolvedBase = presetSuffix ? resolvedId.slice(0, presetMatch.index).trim() : resolvedId;
+ return resolvedBase + (suffix || presetSuffix);
+ }
+ if (aliasOrId === "cx" && typeof baseId === "string" && baseId.endsWith(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$helpers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CODEX_REVIEW_SUFFIX"])) {
+ return baseId.slice(0, -__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$helpers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CODEX_REVIEW_SUFFIX"].length) + suffix;
+ }
+ return baseId + suffix;
+}
+function getModelQuotaFamily(aliasOrId, modelId) {
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["modelQuotaFamily"])(findModel(models, modelId, aliasOrId));
+}
+const OAUTH_ALIASES = Object.fromEntries(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"].filter((r)=>r.alias && r.alias !== r.id).map((r)=>[
+ r.id,
+ r.alias
+ ]));
+const PROVIDER_ID_TO_ALIAS = Object.fromEntries(Object.keys(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDERS"]).map((id)=>[
+ id,
+ OAUTH_ALIASES[id] || id
+ ]));
+function getModelsByProviderId(providerId) {
+ const alias = PROVIDER_ID_TO_ALIAS[providerId] || providerId;
+ return __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][alias] || [];
+}
+function getModelStrip(alias, modelId) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["modelStrip"])(findModel(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][alias], modelId, alias));
+}
+}),
+"[project]/open-sse/config/providers.js [instrumentation] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "OLLAMA_LOCAL_DEFAULT_HOST",
+ ()=>OLLAMA_LOCAL_DEFAULT_HOST,
+ "XIAOMI_TOKENPLAN_DEFAULT_REGION",
+ ()=>XIAOMI_TOKENPLAN_DEFAULT_REGION,
+ "XIAOMI_TOKENPLAN_REGIONS",
+ ()=>XIAOMI_TOKENPLAN_REGIONS,
+ "resolveOllamaLocalHost",
+ ()=>resolveOllamaLocalHost,
+ "resolveXiaomiTokenplanBaseUrl",
+ ()=>resolveXiaomiTokenplanBaseUrl
+]);
+// Barrel: PROVIDERS now built from providers/registry (transport co-located with models)
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/index.js [instrumentation] (ecmascript)");
+;
+;
+const OLLAMA_LOCAL_DEFAULT_HOST = "http://localhost:11434";
+function resolveOllamaLocalHost(credentials) {
+ const raw = credentials?.providerSpecificData?.baseUrl?.trim();
+ return (raw || OLLAMA_LOCAL_DEFAULT_HOST).replace(/\/$/, "");
+}
+const XIAOMI_TOKENPLAN_REGIONS = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDERS"]["xiaomi-tokenplan"]?.regions || {};
+const XIAOMI_TOKENPLAN_DEFAULT_REGION = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDERS"]["xiaomi-tokenplan"]?.defaultRegion;
+function resolveXiaomiTokenplanBaseUrl(credentials) {
+ const region = credentials?.providerSpecificData?.region;
+ return XIAOMI_TOKENPLAN_REGIONS[region] || XIAOMI_TOKENPLAN_REGIONS[XIAOMI_TOKENPLAN_DEFAULT_REGION];
+}
+}),
+"[project]/open-sse/config/runtimeConfig.js [instrumentation] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+// HTTP status codes
+__turbopack_context__.s([
+ "CACHE_TTL",
+ ()=>CACHE_TTL,
+ "DEFAULT_MAX_TOKENS",
+ ()=>DEFAULT_MAX_TOKENS,
+ "DEFAULT_MIN_TOKENS",
+ ()=>DEFAULT_MIN_TOKENS,
+ "DEFAULT_RETRY_CONFIG",
+ ()=>DEFAULT_RETRY_CONFIG,
+ "FETCH_CONNECT_TIMEOUT_MS",
+ ()=>FETCH_CONNECT_TIMEOUT_MS,
+ "GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS",
+ ()=>GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS,
+ "HTTP_STATUS",
+ ()=>HTTP_STATUS,
+ "MEMORY_CONFIG",
+ ()=>MEMORY_CONFIG,
+ "RETRY_CONFIG",
+ ()=>RETRY_CONFIG,
+ "SEARXNG_URL",
+ ()=>SEARXNG_URL,
+ "SKIP_PATTERNS",
+ ()=>SKIP_PATTERNS,
+ "STREAM_FIRST_CHUNK_TIMEOUT_MS",
+ ()=>STREAM_FIRST_CHUNK_TIMEOUT_MS,
+ "STREAM_STALL_TIMEOUT_MS",
+ ()=>STREAM_STALL_TIMEOUT_MS,
+ "TOKEN_SAVER_HEADER",
+ ()=>TOKEN_SAVER_HEADER,
+ "resolveRetryEntry",
+ ()=>resolveRetryEntry
+]);
+const HTTP_STATUS = {
+ BAD_REQUEST: 400,
+ UNAUTHORIZED: 401,
+ PAYMENT_REQUIRED: 402,
+ FORBIDDEN: 403,
+ NOT_FOUND: 404,
+ NOT_ACCEPTABLE: 406,
+ REQUEST_TIMEOUT: 408,
+ RATE_LIMITED: 429,
+ SERVER_ERROR: 500,
+ BAD_GATEWAY: 502,
+ SERVICE_UNAVAILABLE: 503,
+ GATEWAY_TIMEOUT: 504
+};
+;
+const CACHE_TTL = {
+ userInfo: 300,
+ modelAlias: 3600 // 1 hour
+};
+const MEMORY_CONFIG = {
+ sessionTtlMs: 2 * 60 * 60 * 1000,
+ sessionCleanupIntervalMs: 30 * 60 * 1000,
+ dnsCacheTtlMs: 5 * 60 * 1000,
+ proxyDispatchersMaxSize: 20
+};
+// Parse a positive integer env override, falling back to a default.
+function envMs(name, def) {
+ const raw = process.env[name];
+ if (raw == null || raw === "") return def;
+ const n = parseInt(raw, 10);
+ return Number.isFinite(n) && n > 0 ? n : def;
+}
+function envUrl(name, def) {
+ const raw = process.env[name]?.trim();
+ return raw || def;
+}
+const SEARXNG_URL = envUrl("SEARXNG_URL", "http://localhost:8888/search");
+const STREAM_STALL_TIMEOUT_MS = envMs("STREAM_STALL_TIMEOUT_MS", 360 * 1000);
+const STREAM_FIRST_CHUNK_TIMEOUT_MS = envMs("STREAM_FIRST_CHUNK_TIMEOUT_MS", 200 * 1000);
+const FETCH_CONNECT_TIMEOUT_MS = envMs("FETCH_CONNECT_TIMEOUT_MS", 60 * 1000);
+const GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS = envMs("GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS", 45 * 1000);
+const DEFAULT_MAX_TOKENS = 64000;
+const DEFAULT_MIN_TOKENS = 32000;
+const TOKEN_SAVER_HEADER = "x-9router-token-saver";
+const RETRY_CONFIG = {
+ maxAttempts: 2,
+ delayMs: 2000
+};
+const DEFAULT_RETRY_CONFIG = {
+ 429: {
+ attempts: 0,
+ delayMs: 0
+ },
+ 502: {
+ attempts: 3,
+ delayMs: 3000
+ },
+ 503: {
+ attempts: 3,
+ delayMs: 2000
+ },
+ 504: {
+ attempts: 2,
+ delayMs: 3000
+ }
+};
+function resolveRetryEntry(entry) {
+ if (entry == null) return {
+ attempts: 0,
+ delayMs: RETRY_CONFIG.delayMs
+ };
+ if (typeof entry === "number") return {
+ attempts: entry,
+ delayMs: RETRY_CONFIG.delayMs
+ };
+ return {
+ attempts: entry.attempts || 0,
+ delayMs: entry.delayMs != null ? entry.delayMs : RETRY_CONFIG.delayMs
+ };
+}
+const SKIP_PATTERNS = [
+ "Please write a 5-10 word title for the following conversation:"
+];
+}),
+"[project]/open-sse/config/ttsModels.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "TTS_MODELS_CONFIG",
+ ()=>TTS_MODELS_CONFIG,
+ "buildTtsProviderModels",
+ ()=>buildTtsProviderModels,
+ "getTtsVoicesForModel",
+ ()=>getTtsVoicesForModel
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$googleTtsLanguages$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/config/googleTtsLanguages.js [instrumentation] (ecmascript)");
+;
+// ── Voice definitions (DRY — reused across providers) ──────────────────────
+const VOICES = {
+ alloy: {
+ id: "alloy",
+ name: "Alloy"
+ },
+ ash: {
+ id: "ash",
+ name: "Ash"
+ },
+ ballad: {
+ id: "ballad",
+ name: "Ballad"
+ },
+ cedar: {
+ id: "cedar",
+ name: "Cedar"
+ },
+ coral: {
+ id: "coral",
+ name: "Coral"
+ },
+ echo: {
+ id: "echo",
+ name: "Echo"
+ },
+ fable: {
+ id: "fable",
+ name: "Fable"
+ },
+ marin: {
+ id: "marin",
+ name: "Marin"
+ },
+ nova: {
+ id: "nova",
+ name: "Nova"
+ },
+ onyx: {
+ id: "onyx",
+ name: "Onyx"
+ },
+ sage: {
+ id: "sage",
+ name: "Sage"
+ },
+ shimmer: {
+ id: "shimmer",
+ name: "Shimmer"
+ },
+ verse: {
+ id: "verse",
+ name: "Verse"
+ }
+};
+const v = (...keys)=>keys.map((k)=>({
+ ...VOICES[k],
+ type: "tts"
+ }));
+// 9 voices for tts-1 / tts-1-hd
+const VOICES_STANDARD = v("alloy", "ash", "coral", "echo", "fable", "nova", "onyx", "sage", "shimmer");
+// 13 voices for gpt-4o-mini-tts
+const VOICES_FULL = v("alloy", "ash", "ballad", "cedar", "coral", "echo", "fable", "marin", "nova", "onyx", "sage", "shimmer", "verse");
+// Gemini prebuilt voices (30 voices, multi-language auto-detect)
+const GEMINI_VOICES = [
+ "Zephyr",
+ "Puck",
+ "Charon",
+ "Kore",
+ "Fenrir",
+ "Leda",
+ "Orus",
+ "Aoede",
+ "Callirrhoe",
+ "Autonoe",
+ "Enceladus",
+ "Iapetus",
+ "Umbriel",
+ "Algieba",
+ "Despina",
+ "Erinome",
+ "Algenib",
+ "Rasalgethi",
+ "Laomedeia",
+ "Achernar",
+ "Alnilam",
+ "Schedar",
+ "Gacrux",
+ "Pulcherrima",
+ "Achird",
+ "Zubenelgenubi",
+ "Vindemiatrix",
+ "Sadachbia",
+ "Sadaltager",
+ "Sulafat"
+].map((id)=>({
+ id,
+ name: id,
+ type: "tts"
+ }));
+// Xiaomi MiMo preset voices (from https://mimo.mi.com/docs/zh-CN/quick-start/usage-guide/audio/speech-synthesis-v2.5).
+// Voice id is passed via `audio.voice`; `mimo_default` = default (冰糖 on CN cluster, Mia elsewhere).
+// Voices are language-independent — the spoken language is a separate hint, not bound to the voice.
+const MIMO_VOICES = [
+ {
+ id: "mimo_default",
+ name: "mimo_default"
+ },
+ {
+ id: "冰糖",
+ name: "冰糖"
+ },
+ {
+ id: "茉莉",
+ name: "茉莉"
+ },
+ {
+ id: "苏打",
+ name: "苏打"
+ },
+ {
+ id: "白桦",
+ name: "白桦"
+ },
+ {
+ id: "Mia",
+ name: "Mia"
+ },
+ {
+ id: "Chloe",
+ name: "Chloe"
+ },
+ {
+ id: "Milo",
+ name: "Milo"
+ },
+ {
+ id: "Dean",
+ name: "Dean"
+ }
+].map((v)=>({
+ type: "tts",
+ ...v
+ }));
+const TTS_MODELS_CONFIG = {
+ openai: {
+ models: [
+ {
+ id: "gpt-4o-mini-tts",
+ name: "GPT-4o Mini TTS",
+ type: "tts"
+ },
+ {
+ id: "tts-1-hd",
+ name: "TTS-1 HD",
+ type: "tts"
+ },
+ {
+ id: "tts-1",
+ name: "TTS-1",
+ type: "tts"
+ }
+ ],
+ voices: {
+ "gpt-4o-mini-tts": VOICES_FULL,
+ "tts-1": VOICES_STANDARD,
+ "tts-1-hd": VOICES_STANDARD
+ },
+ // Flat voice list (all unique voices) for backward compat
+ allVoices: VOICES_FULL
+ },
+ openrouter: {
+ models: [
+ {
+ id: "openai/gpt-4o-mini-tts",
+ name: "GPT-4o Mini TTS",
+ type: "tts"
+ },
+ {
+ id: "openai/tts-1-hd",
+ name: "TTS-1 HD",
+ type: "tts"
+ },
+ {
+ id: "openai/tts-1",
+ name: "TTS-1",
+ type: "tts"
+ }
+ ],
+ voices: {
+ "openai/gpt-4o-mini-tts": VOICES_FULL,
+ "openai/tts-1": VOICES_STANDARD,
+ "openai/tts-1-hd": VOICES_STANDARD
+ },
+ allVoices: VOICES_FULL
+ },
+ elevenlabs: {
+ models: [
+ {
+ id: "eleven_flash_v2_5",
+ name: "Flash v2.5 (Fastest)",
+ type: "tts"
+ },
+ {
+ id: "eleven_turbo_v2_5",
+ name: "Turbo v2.5 (Fast)",
+ type: "tts"
+ },
+ {
+ id: "eleven_multilingual_v2",
+ name: "Multilingual v2 (Quality)",
+ type: "tts"
+ },
+ {
+ id: "eleven_monolingual_v1",
+ name: "Monolingual v1 (English)",
+ type: "tts"
+ }
+ ]
+ },
+ "edge-tts": {
+ defaults: [
+ {
+ id: "en-US-AriaNeural",
+ name: "Aria (en-US)",
+ type: "tts"
+ },
+ {
+ id: "en-US-GuyNeural",
+ name: "Guy (en-US)",
+ type: "tts"
+ },
+ {
+ id: "en-GB-SoniaNeural",
+ name: "Sonia (en-GB)",
+ type: "tts"
+ },
+ {
+ id: "vi-VN-HoaiMyNeural",
+ name: "Hoai My (vi-VN)",
+ type: "tts"
+ },
+ {
+ id: "vi-VN-NamMinhNeural",
+ name: "Nam Minh (vi-VN)",
+ type: "tts"
+ },
+ {
+ id: "zh-CN-XiaoxiaoNeural",
+ name: "Xiaoxiao (zh-CN)",
+ type: "tts"
+ },
+ {
+ id: "zh-CN-YunxiNeural",
+ name: "Yunxi (zh-CN)",
+ type: "tts"
+ },
+ {
+ id: "fr-FR-DeniseNeural",
+ name: "Denise (fr-FR)",
+ type: "tts"
+ },
+ {
+ id: "de-DE-KatjaNeural",
+ name: "Katja (de-DE)",
+ type: "tts"
+ },
+ {
+ id: "ja-JP-NanamiNeural",
+ name: "Nanami (ja-JP)",
+ type: "tts"
+ },
+ {
+ id: "ko-KR-SunHiNeural",
+ name: "SunHi (ko-KR)",
+ type: "tts"
+ }
+ ]
+ },
+ "local-device": {
+ defaults: [
+ {
+ id: "default",
+ name: "System Default Voice",
+ type: "tts"
+ }
+ ]
+ },
+ "google-tts": {
+ defaults: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$googleTtsLanguages$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GOOGLE_TTS_LANGUAGES"]
+ },
+ gemini: {
+ models: [
+ {
+ id: "gemini-3.1-flash-tts-preview",
+ name: "Gemini 3.1 Flash TTS",
+ type: "tts"
+ },
+ {
+ id: "gemini-2.5-flash-preview-tts",
+ name: "Gemini 2.5 Flash TTS",
+ type: "tts"
+ },
+ {
+ id: "gemini-2.5-pro-preview-tts",
+ name: "Gemini 2.5 Pro TTS",
+ type: "tts"
+ }
+ ],
+ voices: {
+ "gemini-3.1-flash-tts-preview": GEMINI_VOICES,
+ "gemini-2.5-flash-preview-tts": GEMINI_VOICES,
+ "gemini-2.5-pro-preview-tts": GEMINI_VOICES
+ },
+ allVoices: GEMINI_VOICES
+ },
+ "xiaomi-mimo": {
+ models: [
+ {
+ id: "mimo-v2.5-tts",
+ name: "MiMo V2.5 TTS",
+ type: "tts"
+ }
+ ],
+ voices: {
+ "mimo-v2.5-tts": MIMO_VOICES
+ }
+ }
+};
+function getTtsVoicesForModel(provider, modelId) {
+ const cfg = TTS_MODELS_CONFIG[provider];
+ if (!cfg?.voices) return null;
+ return cfg.voices[modelId] || cfg.allVoices || null;
+}
+function buildTtsProviderModels() {
+ const entries = {};
+ for (const [provider, cfg] of Object.entries(TTS_MODELS_CONFIG)){
+ if (cfg.models) entries[`${provider}-tts-models`] = cfg.models;
+ if (cfg.allVoices) entries[`${provider}-tts-voices`] = cfg.allVoices;
+ if (cfg.defaults) entries[provider] = cfg.defaults;
+ }
+ // Keep openai-tts-voices key pointing to full voice list for backward compat
+ entries["openai-tts-voices"] = TTS_MODELS_CONFIG.openai.allVoices;
+ entries["openrouter-tts-voices"] = TTS_MODELS_CONFIG.openrouter.allVoices;
+ return entries;
+}
+}),
+"[project]/open-sse/providers/index.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "PROVIDERS",
+ ()=>PROVIDERS,
+ "PROVIDER_MEDIA",
+ ()=>PROVIDER_MEDIA,
+ "PROVIDER_MODELS",
+ ()=>PROVIDER_MODELS,
+ "PROVIDER_OAUTH",
+ ()=>PROVIDER_OAUTH
+]);
+// Single source: build PROVIDERS + PROVIDER_MODELS from registry/{id}.js (transport + models co-located).
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/index.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/schema.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/models/schema.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$ttsModels$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/config/ttsModels.js [instrumentation] (ecmascript)");
+;
+;
+;
+;
+// oauth block is canonical for these fields; inject into transport so executors reading
+// this.config.{clientId,clientSecret,tokenUrl} keep working without duplicating in transport
+const OAUTH_INJECT_FIELDS = [
+ "clientId",
+ "clientSecret",
+ "tokenUrl"
+];
+// transport: re-apply shared default (format:"openai") + inject oauth-canonical fields
+function buildTransport(transport, oauth) {
+ const t = {
+ ...transport
+ };
+ if (!t.format) t.format = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_DEFAULTS"].format;
+ if (oauth) {
+ for (const f of OAUTH_INJECT_FIELDS){
+ if (t[f] === undefined && oauth[f] !== undefined) t[f] = oauth[f];
+ }
+ }
+ return t;
+}
+const MEDIA_KEYS = new Set([
+ "serviceKinds",
+ "ttsConfig",
+ "sttConfig",
+ "embeddingConfig",
+ "imageConfig",
+ "imageToTextConfig",
+ "videoConfig",
+ "musicConfig",
+ "searchViaChat",
+ "searchConfig",
+ "fetchConfig",
+ "modelsFetcher",
+ "mediaPriority",
+ "hiddenKinds"
+]);
+const PROVIDERS = {};
+const PROVIDER_MODELS = {};
+const PROVIDER_OAUTH = {};
+const PROVIDER_MEDIA = {};
+for (const entry of __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"]){
+ if (entry.transport) {
+ PROVIDERS[entry.id] = buildTransport(entry.transport, entry.oauth);
+ if (entry.transports) PROVIDERS[entry.id].transports = entry.transports;
+ }
+ if (entry.models !== undefined) PROVIDER_MODELS[entry.alias || entry.id] = entry.models.map(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$schema$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["normalizeModel"]);
+ if (entry.oauth) PROVIDER_OAUTH[entry.id] = entry.oauth;
+ // Build PROVIDER_MEDIA from top-level fields (post-migration) + legacy entry.media
+ const mediaFields = {};
+ for (const k of MEDIA_KEYS){
+ if (entry[k] !== undefined) mediaFields[k] = entry[k];
+ }
+ if (entry.media) Object.assign(mediaFields, entry.media);
+ if (Object.keys(mediaFields).length) PROVIDER_MEDIA[entry.id] = mediaFields;
+}
+// TTS model/voice tables keyed by special names (openai-tts-models, ...), not provider ids
+Object.assign(PROVIDER_MODELS, (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$ttsModels$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["buildTtsProviderModels"])());
+}),
+"[project]/open-sse/providers/models/helpers.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Codex auto-generates a "-review" variant for each llm model (review quota family)
+__turbopack_context__.s([
+ "CODEX_REVIEW_SUFFIX",
+ ()=>CODEX_REVIEW_SUFFIX,
+ "withCodexReviewModels",
+ ()=>withCodexReviewModels
+]);
+const CODEX_REVIEW_SUFFIX = "-review";
+function withCodexReviewModels(models) {
+ return models.flatMap((model)=>{
+ if ((model.kind || model.type || "llm") !== "llm" || model.id.endsWith(CODEX_REVIEW_SUFFIX)) {
+ return [
+ model
+ ];
+ }
+ return [
+ model,
+ {
+ ...model,
+ id: `${model.id}${CODEX_REVIEW_SUFFIX}`,
+ name: `${model.name} Review`,
+ upstreamModelId: model.upstreamModelId || model.id,
+ quotaFamily: "review"
+ }
+ ];
+ });
+}
+}),
+"[project]/open-sse/providers/models/namePatterns.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "NAME_PATTERNS",
+ ()=>NAME_PATTERNS,
+ "deriveModelName",
+ ()=>deriveModelName
+]);
+// Derive a display name from a model id when the entry omits `name` (mirrors PATTERN_PRICING).
+// Provider entries that ship their own `name` always win; this is only a fallback for terse entries.
+// Capitalize a hyphen/space separated token group: "coder-plus" → "Coder Plus".
+function titleCase(s) {
+ return s.split(/[-_\s]+/).filter(Boolean).map((w)=>/^\d/.test(w) ? w : w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
+}
+const NAME_PATTERNS = [
+ [
+ /^kimi-k(\d+(?:\.\d+)?)(-thinking)?$/i,
+ (m)=>`Kimi K${m[1]}${m[2] ? " Thinking" : ""}`
+ ],
+ [
+ /^glm-(\d+(?:\.\d+)?)(v)?$/i,
+ (m)=>`GLM ${m[1]}${m[2] ? "V (Vision)" : ""}`
+ ],
+ [
+ /^minimax-m(\d+(?:\.\d+)?)$/i,
+ (m)=>`MiniMax M${m[1]}`
+ ],
+ [
+ /^gpt-(.+)$/i,
+ (m)=>`GPT ${titleCase(m[1])}`
+ ],
+ [
+ /^gemini-(.+)$/i,
+ (m)=>`Gemini ${titleCase(m[1])}`
+ ],
+ [
+ /^grok-(.+)$/i,
+ (m)=>`Grok ${titleCase(m[1])}`
+ ],
+ [
+ /^deepseek-(.+)$/i,
+ (m)=>`DeepSeek ${titleCase(m[1])}`
+ ],
+ [
+ /^qwen([\d.]+.*)$/i,
+ (m)=>`Qwen ${titleCase(m[1])}`
+ ]
+];
+function deriveModelName(id) {
+ if (typeof id !== "string") return id;
+ for (const [re, fn] of NAME_PATTERNS){
+ const m = id.match(re);
+ if (m) return fn(m);
+ }
+ return id;
+}
+}),
+"[project]/open-sse/providers/models/schema.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "MODEL_DEFAULTS",
+ ()=>MODEL_DEFAULTS,
+ "modelKind",
+ ()=>modelKind,
+ "modelQuotaFamily",
+ ()=>modelQuotaFamily,
+ "modelStrip",
+ ()=>modelStrip,
+ "modelSupportedFormats",
+ ()=>modelSupportedFormats,
+ "modelTargetFormat",
+ ()=>modelTargetFormat,
+ "normalizeModel",
+ ()=>normalizeModel,
+ "normalizeModelId",
+ ()=>normalizeModelId
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$namePatterns$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/models/namePatterns.js [instrumentation] (ecmascript)");
+;
+function normalizeModelId(modelId) {
+ if (typeof modelId !== "string") return modelId;
+ return modelId.replace(/(\d)-(\d)/g, "$1.$2");
+}
+const MODEL_DEFAULTS = {
+ kind: "llm",
+ quotaFamily: "normal",
+ strip: [],
+ targetFormat: null
+};
+function normalizeModel(raw) {
+ const model = typeof raw === "string" ? {
+ id: raw
+ } : raw;
+ if (model.name !== undefined) return model;
+ return {
+ ...model,
+ name: (0, __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$models$2f$namePatterns$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["deriveModelName"])(model.id)
+ };
+}
+function modelKind(model) {
+ return model?.kind || model?.type || MODEL_DEFAULTS.kind;
+}
+function modelQuotaFamily(model) {
+ return model?.quotaFamily || MODEL_DEFAULTS.quotaFamily;
+}
+function modelStrip(model) {
+ return model?.strip || [];
+}
+function modelTargetFormat(model) {
+ return model?.targetFormat || MODEL_DEFAULTS.targetFormat;
+}
+function modelSupportedFormats(model) {
+ return model?.supportedFormats || null;
+}
+}),
+"[project]/open-sse/providers/registry/alicode-intl.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "alicode-intl",
+ priority: 10,
+ alias: "alicode-intl",
+ display: {
+ name: "Alibaba Coding",
+ icon: "cloud",
+ color: "#FF6A00",
+ textIcon: "ALi",
+ website: "https://www.alibabacloud.com/product/coding",
+ notice: {
+ apiKeyUrl: "https://www.alibabacloud.com/product/coding"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",
+ headers: {},
+ quirks: {
+ preserveCacheControl: true
+ }
+ },
+ models: [
+ {
+ id: "qwen3.5-plus",
+ name: "Qwen3.5 Plus"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "qwen3-coder-next",
+ name: "Qwen3 Coder Next"
+ },
+ {
+ id: "qwen3-coder-plus",
+ name: "Qwen3 Coder Plus"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM 4.7"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/alicode.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "alicode",
+ priority: 20,
+ alias: "alicode",
+ display: {
+ name: "Alibaba",
+ icon: "cloud",
+ color: "#FF6A00",
+ textIcon: "ALi",
+ website: "https://bailian.console.aliyun.com",
+ notice: {
+ apiKeyUrl: "https://bailian.console.aliyun.com/?apiKey=1"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://coding.dashscope.aliyuncs.com/v1/chat/completions",
+ headers: {},
+ quirks: {
+ preserveCacheControl: true
+ }
+ },
+ models: [
+ {
+ id: "qwen3.5-plus",
+ name: "Qwen3.5 Plus"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "qwen3-max-2026-01-23",
+ name: "Qwen3 Max"
+ },
+ {
+ id: "qwen3-coder-next",
+ name: "Qwen3 Coder Next"
+ },
+ {
+ id: "qwen3-coder-plus",
+ name: "Qwen3 Coder Plus"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM 4.7"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/alims-intl.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Model Studio Intl — standard DashScope API keys (sk-...), NOT Coding Plan keys.
+// Sibling of alicode-intl (Coding Plan). Two key types use two different hosts.
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "alims-intl",
+ priority: 11,
+ alias: "alims-intl",
+ display: {
+ name: "Alibaba Studio",
+ icon: "cloud",
+ color: "#FF6A00",
+ textIcon: "ALi",
+ website: "https://modelstudio.console.alibabacloud.com",
+ notice: {
+ apiKeyUrl: "https://modelstudio.console.alibabacloud.com/?apiKey=1"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions",
+ headers: {},
+ quirks: {
+ preserveCacheControl: true
+ }
+ },
+ models: [
+ {
+ id: "qwen3.5-plus",
+ name: "Qwen3.5 Plus"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "qwen3-coder-next",
+ name: "Qwen3 Coder Next"
+ },
+ {
+ id: "qwen3-coder-plus",
+ name: "Qwen3 Coder Plus"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM 4.7"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/alitp-intl.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Token Plan — credit subscription keys on token-plan..maas.aliyuncs.com.
+// Fourth Alibaba key type: Coding Plan (alicode/alicode-intl) and Model Studio
+// (alims-intl) both reject these keys, and they reject Model Studio keys back.
+// Singapore is the only region that serves the plan; eu-central-1 answers
+// IllegalEndpoint. The Anthropic surface (/apps/anthropic/v1/messages) is not
+// authorized for this plan, so OpenAI-compatible mode is the only transport.
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "alitp-intl",
+ priority: 11,
+ alias: "alitp-intl",
+ display: {
+ name: "Alibaba Token Plan",
+ icon: "cloud",
+ color: "#FF6A00",
+ textIcon: "ATP",
+ website: "https://www.alibabacloud.com/campaign/ai-landing-page-token",
+ notice: {
+ apiKeyUrl: "https://modelstudio.console.alibabacloud.com/?apiKey=1"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions",
+ headers: {},
+ quirks: {
+ preserveCacheControl: true
+ }
+ },
+ models: [
+ {
+ id: "qwen3.8-max-preview",
+ name: "Qwen3.8 Max Preview"
+ },
+ {
+ id: "qwen3.7-max",
+ name: "Qwen3.7 Max"
+ },
+ {
+ id: "qwen3.7-plus",
+ name: "Qwen3.7 Plus"
+ },
+ {
+ id: "qwen3.6-flash",
+ name: "Qwen3.6 Flash"
+ },
+ {
+ id: "glm-5.2",
+ name: "GLM 5.2"
+ },
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek V4 Pro"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/anthropic.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "anthropic",
+ priority: 30,
+ alias: "anthropic",
+ display: {
+ name: "Anthropic",
+ icon: "smart_toy",
+ color: "#D97757",
+ textIcon: "AN",
+ website: "https://console.anthropic.com",
+ notice: {
+ apiKeyUrl: "https://console.anthropic.com/settings/keys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.anthropic.com/v1/messages",
+ format: "claude",
+ headers: {
+ "anthropic-version": "2023-06-01",
+ "Anthropic-Beta": "claude-code-20250219,interleaved-thinking-2025-05-14"
+ }
+ },
+ models: [
+ {
+ id: "claude-sonnet-4-20250514",
+ name: "Claude Sonnet 4"
+ },
+ {
+ id: "claude-opus-4-20250514",
+ name: "Claude Opus 4"
+ },
+ {
+ id: "claude-3-5-sonnet-20241022",
+ name: "Claude 3.5 Sonnet"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "imageToText"
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/antigravity.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "antigravity",
+ priority: 20,
+ alias: "ag",
+ uiAlias: "ag",
+ display: {
+ name: "Antigravity",
+ icon: "rocket_launch",
+ color: "#F59E0B",
+ website: "https://antigravity.google",
+ notice: {
+ signupUrl: "https://antigravity.google"
+ },
+ deprecated: true,
+ deprecationNotice: "RISK_NOTICE"
+ },
+ category: "oauth",
+ serviceKinds: [
+ "llm",
+ "image"
+ ],
+ transport: {
+ baseUrls: [
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["ANTIGRAVITY_IDE_BASE_URL"]
+ ],
+ format: "antigravity",
+ headers: {
+ "User-Agent": __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["ANTIGRAVITY_IDE_USER_AGENT"]
+ },
+ retry: {
+ "429": {
+ attempts: 3
+ },
+ "500": {
+ attempts: 3
+ },
+ "503": {
+ attempts: 3
+ }
+ },
+ usage: {
+ // Discovery (quota/project) on PROD; daily host rejects these.
+ quotaApiUrl: "https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels",
+ loadProjectApiUrl: "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",
+ tokenUrl: "https://oauth2.googleapis.com/token"
+ },
+ clientId: "1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",
+ clientSecret: "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"
+ },
+ models: [
+ {
+ id: "gemini-3.7-flash-high",
+ name: "Gemini 3.7 Flash (High)",
+ upstreamModelId: "gemini-3.7-flash-tiered(high)"
+ },
+ {
+ id: "gemini-3.7-flash-medium",
+ name: "Gemini 3.7 Flash (Medium)",
+ upstreamModelId: "gemini-3.7-flash-tiered(medium)"
+ },
+ {
+ id: "gemini-3.7-flash-low",
+ name: "Gemini 3.7 Flash (Low)",
+ upstreamModelId: "gemini-3.7-flash-tiered(low)"
+ },
+ {
+ id: "gemini-3.6-flash-high",
+ name: "Gemini 3.6 Flash (High)",
+ upstreamModelId: "gemini-3.6-flash-tiered(high)"
+ },
+ {
+ id: "gemini-3.6-flash-medium",
+ name: "Gemini 3.6 Flash (Medium)",
+ upstreamModelId: "gemini-3.6-flash-tiered(medium)"
+ },
+ {
+ id: "gemini-3.6-flash-low",
+ name: "Gemini 3.6 Flash (Low)",
+ upstreamModelId: "gemini-3.6-flash-tiered(low)"
+ },
+ {
+ id: "gemini-3.5-flash-high",
+ name: "Gemini 3.5 Flash (High)"
+ },
+ {
+ id: "gemini-3-flash-agent",
+ name: "Gemini 3.5 Flash (High)"
+ },
+ {
+ id: "gemini-3.5-flash-low",
+ name: "Gemini 3.5 Flash (Medium)"
+ },
+ {
+ id: "gemini-3.5-flash-extra-low",
+ name: "Gemini 3.5 Flash (Low)"
+ },
+ {
+ id: "gemini-pro-agent",
+ name: "Gemini 3.1 Pro (High)"
+ },
+ {
+ id: "gemini-3.1-pro-low",
+ name: "Gemini 3.1 Pro (Low)"
+ },
+ {
+ id: "claude-sonnet-4-6",
+ name: "Claude Sonnet 4.6 (Thinking)"
+ },
+ {
+ id: "claude-opus-4-6-thinking",
+ name: "Claude Opus 4.6 (Thinking)"
+ },
+ {
+ id: "gpt-oss-120b-medium",
+ name: "GPT-OSS 120B (Medium)"
+ },
+ {
+ id: "gemini-3-flash",
+ name: "Gemini 3 Flash",
+ thinking: false
+ },
+ // Image generation models
+ {
+ id: "gemini-3.1-flash-image",
+ name: "Gemini 3.1 Flash (Image)",
+ kind: "image",
+ imageGen: true,
+ capabilities: [
+ "textToImage"
+ ]
+ }
+ ],
+ oauth: {
+ authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ userInfoUrl: "https://www.googleapis.com/oauth2/v1/userinfo",
+ scopes: [
+ "https://www.googleapis.com/auth/cloud-platform",
+ "https://www.googleapis.com/auth/userinfo.email",
+ "https://www.googleapis.com/auth/userinfo.profile",
+ "https://www.googleapis.com/auth/cclog",
+ "https://www.googleapis.com/auth/experimentsandconfigs"
+ ],
+ apiEndpoint: "https://daily-cloudcode-pa.googleapis.com",
+ apiVersion: "v1internal",
+ loadCodeAssistEndpoint: "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",
+ onboardUserEndpoint: "https://cloudcode-pa.googleapis.com/v1internal:onboardUser",
+ loadCodeAssistUserAgent: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["ANTIGRAVITY_IDE_USER_AGENT"],
+ refreshLeadMs: 300000
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/api-airforce.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "api-airforce",
+ alias: "af",
+ aliases: [
+ "airforce"
+ ],
+ uiAlias: "af",
+ display: {
+ name: "API.airforce",
+ icon: "flight",
+ color: "#0EA5E9",
+ textIcon: "AF",
+ website: "https://api.airforce",
+ notice: {
+ apiKeyUrl: "https://api.airforce"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.airforce/v1/chat/completions",
+ validateUrl: "https://api.airforce/v1/models",
+ headers: {
+ "HTTP-Referer": "https://endpoint-proxy.local",
+ "X-Title": "Endpoint Proxy"
+ }
+ },
+ models: [
+ {
+ id: "anthropic/claude-3.7-sonnet",
+ name: "Claude 3.7 Sonnet (Free)",
+ contextLength: 200000
+ },
+ {
+ id: "moonshot/kimi-k2.6",
+ name: "Kimi K2.6 (Free)",
+ contextLength: 262144
+ },
+ {
+ id: "google/gemini-2.5-flash",
+ name: "Gemini 2.5 Flash (Free)",
+ contextLength: 1048576
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/assemblyai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "assemblyai",
+ priority: 30,
+ alias: "assemblyai",
+ aliases: [
+ "aai"
+ ],
+ uiAlias: "aai",
+ display: {
+ name: "AssemblyAI",
+ icon: "record_voice_over",
+ color: "#0062FF",
+ textIcon: "AA",
+ website: "https://assemblyai.com",
+ notice: {
+ apiKeyUrl: "https://www.assemblyai.com/app/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.assemblyai.com/v1/audio/transcriptions",
+ validateUrl: "https://api.assemblyai.com/v1/account"
+ },
+ models: [
+ {
+ id: "universal-3-pro",
+ name: "Universal 3 Pro",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "universal-2",
+ name: "Universal 2",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "best",
+ name: "Best (Nano + Universal)",
+ kind: "stt"
+ },
+ {
+ id: "nano",
+ name: "Nano (Fast)",
+ kind: "stt"
+ }
+ ],
+ serviceKinds: [
+ "stt"
+ ],
+ sttConfig: {
+ baseUrl: "https://api.assemblyai.com/v2/transcript",
+ authType: "apikey",
+ authHeader: "authorization",
+ format: "assemblyai"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/aws-polly.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "aws-polly",
+ alias: "polly",
+ display: {
+ name: "AWS Polly",
+ icon: "record_voice_over",
+ color: "#FF9900",
+ textIcon: "PL",
+ website: "https://aws.amazon.com/polly/",
+ notice: {
+ text: "Use AWS Secret Access Key as API key; set providerSpecificData.accessKeyId and optional region.",
+ apiKeyUrl: "https://console.aws.amazon.com/iam/home#/security_credentials"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://polly.{region}.amazonaws.com/v1/speech",
+ authType: "apikey",
+ authHeader: "aws-sigv4",
+ format: "aws-polly",
+ models: [
+ {
+ id: "standard",
+ name: "Standard"
+ },
+ {
+ id: "neural",
+ name: "Neural"
+ },
+ {
+ id: "long-form",
+ name: "Long-form"
+ },
+ {
+ id: "generative",
+ name: "Generative"
+ }
+ ]
+ },
+ hasProviderSpecificData: true
+};
+}),
+"[project]/open-sse/providers/registry/azure.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "azure",
+ priority: 40,
+ alias: "azure",
+ display: {
+ name: "Azure OpenAI",
+ icon: "cloud",
+ color: "#0078D4",
+ textIcon: "AZ",
+ website: "https://azure.microsoft.com/en-us/products/ai-services/openai-service",
+ notice: {
+ apiKeyUrl: "https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI"
+ }
+ },
+ category: "apikey",
+ hasProviderSpecificData: true,
+ transport: {
+ baseUrl: "",
+ headers: {}
+ }
+};
+}),
+"[project]/open-sse/providers/registry/baidu.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "baidu",
+ alias: "qianfan",
+ aliases: [
+ "qianfan",
+ "ernie",
+ "baidu-qianfan"
+ ],
+ uiAlias: "qianfan",
+ category: "apikey",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ display: {
+ name: "Baidu Qianfan",
+ icon: "search",
+ color: "#2932E1",
+ textIcon: "BD",
+ website: "https://cloud.baidu.com/product/qianfan.html",
+ notice: {
+ apiKeyUrl: "https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application"
+ }
+ },
+ transport: {
+ baseUrl: "https://qianfan.baidubce.com/v2/chat/completions",
+ validateUrl: "https://qianfan.baidubce.com/v2/models"
+ },
+ models: [
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek V4 Pro",
+ contextLength: 1048576
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek V4 Flash",
+ contextLength: 1048576
+ },
+ {
+ id: "glm-5.2",
+ name: "GLM 5.2",
+ contextLength: 512000
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM 5.1",
+ contextLength: 198000
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi K2.6",
+ contextLength: 262144
+ },
+ {
+ id: "qwen3.5-397b-a17b",
+ name: "Qwen 3.5 397B A17B",
+ contextLength: 262144
+ },
+ {
+ id: "qwen3.5-27b",
+ name: "Qwen 3.5 27B",
+ contextLength: 262144
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/bazaarlink.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "bazaarlink",
+ alias: "bzl",
+ aliases: [
+ "bazaar-link"
+ ],
+ uiAlias: "bzl",
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ display: {
+ name: "Bazaarlink",
+ icon: "storefront",
+ color: "#DC2626",
+ textIcon: "BZ",
+ website: "https://bazaarlink.ai",
+ notice: {
+ apiKeyUrl: "https://bazaarlink.ai"
+ }
+ },
+ transport: {
+ baseUrl: "https://bazaarlink.ai/api/v1/chat/completions",
+ validateUrl: "https://bazaarlink.ai/api/v1/models"
+ },
+ models: [
+ {
+ id: "auto:free",
+ name: "Auto Free (Zero Cost)"
+ },
+ {
+ id: "claude-opus-4.7",
+ name: "Claude Opus 4.7",
+ contextLength: 1000000
+ },
+ {
+ id: "claude-sonnet-4.6",
+ name: "Claude Sonnet 4.6",
+ contextLength: 1000000
+ },
+ {
+ id: "claude-haiku-4.5",
+ name: "Claude Haiku 4.5",
+ contextLength: 200000
+ },
+ {
+ id: "gpt-5.5",
+ name: "GPT-5.5",
+ contextLength: 1050000
+ },
+ {
+ id: "gpt-5.4",
+ name: "GPT-5.4",
+ contextLength: 1050000
+ },
+ {
+ id: "gpt-5.4-mini",
+ name: "GPT-5.4 Mini",
+ contextLength: 400000
+ },
+ {
+ id: "gpt-5.4-nano",
+ name: "GPT-5.4 Nano",
+ contextLength: 400000
+ },
+ {
+ id: "grok-4.3",
+ name: "Grok 4.3",
+ contextLength: 1000000
+ },
+ {
+ id: "grok-4.20",
+ name: "Grok 4.20",
+ contextLength: 2000000
+ },
+ {
+ id: "gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro",
+ contextLength: 1048576
+ },
+ {
+ id: "gemini-3-flash-preview",
+ name: "Gemini 3 Flash",
+ contextLength: 1048576
+ },
+ {
+ id: "gemini-3.1-flash-lite-preview",
+ name: "Gemini 3.1 Flash Lite",
+ contextLength: 1048576
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi K2.6",
+ contextLength: 262144
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5",
+ contextLength: 262144
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM 5.1",
+ contextLength: 204800
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5",
+ contextLength: 204800
+ },
+ {
+ id: "mimo-v2.5-pro",
+ name: "MiMo-V2.5-Pro",
+ contextLength: 1050000
+ },
+ {
+ id: "mimo-v2.5",
+ name: "MiMo-V2.5",
+ contextLength: 1050000
+ },
+ {
+ id: "minimax-m3",
+ name: "MiniMax M3",
+ contextLength: 1048576
+ },
+ {
+ id: "minimax-m2.7",
+ name: "MiniMax M2.7",
+ contextLength: 204800
+ },
+ {
+ id: "minimax-m2.5",
+ name: "MiniMax M2.5",
+ contextLength: 204800
+ },
+ {
+ id: "qwen3.6-plus",
+ name: "Qwen 3.6 Plus",
+ contextLength: 1000000
+ },
+ {
+ id: "nemotron-3-super-120b-a12b",
+ name: "Nemotron 3 Super",
+ contextLength: 1000000
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/black-forest-labs.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "black-forest-labs",
+ priority: 50,
+ alias: "black-forest-labs",
+ aliases: [
+ "bfl"
+ ],
+ uiAlias: "bfl",
+ display: {
+ name: "Black Forest Labs",
+ icon: "image",
+ color: "#111827",
+ textIcon: "BF",
+ website: "https://blackforestlabs.ai",
+ notice: {
+ apiKeyUrl: "https://api.bfl.ai"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "flux-pro-1.1",
+ name: "FLUX Pro 1.1",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "flux-pro-1.1-ultra",
+ name: "FLUX Pro 1.1 Ultra",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "flux-pro",
+ name: "FLUX Pro",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "flux-dev",
+ name: "FLUX Dev",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "flux-kontext-pro",
+ name: "FLUX Kontext Pro (Edit)",
+ params: [
+ "size"
+ ],
+ capabilities: [
+ "edit"
+ ],
+ kind: "image"
+ },
+ {
+ id: "flux-kontext-max",
+ name: "FLUX Kontext Max (Edit)",
+ params: [
+ "size"
+ ],
+ capabilities: [
+ "edit"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://api.bfl.ai/v1"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/blackbox.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "blackbox",
+ priority: 50,
+ alias: "blackbox",
+ aliases: [
+ "bb"
+ ],
+ uiAlias: "bb",
+ display: {
+ name: "Blackbox AI",
+ icon: "smart_toy",
+ color: "#5B5FEF",
+ textIcon: "BB",
+ website: "https://blackbox.ai",
+ notice: {
+ apiKeyUrl: "https://www.blackbox.ai/api-management"
+ }
+ },
+ category: "apikey",
+ serviceKinds: [
+ "llm"
+ ],
+ thinkingConfig: {
+ options: [
+ "auto",
+ "none",
+ "low",
+ "medium",
+ "high",
+ "xhigh"
+ ],
+ defaultMode: "auto"
+ },
+ transport: {
+ baseUrl: "https://api.blackbox.ai/v1/chat/completions",
+ thinkingFormat: "openai"
+ },
+ models: [
+ {
+ id: "claude-fable-5",
+ name: "Claude Fable 5",
+ upstreamModelId: "blackboxai/anthropic/claude-fable-5"
+ },
+ {
+ id: "claude-opus-4.8",
+ name: "Claude Opus 4.8",
+ upstreamModelId: "blackboxai/anthropic/claude-opus-4.8"
+ },
+ {
+ id: "claude-sonnet-4.6",
+ name: "Claude Sonnet 4.6",
+ upstreamModelId: "blackboxai/anthropic/claude-sonnet-4.6"
+ },
+ {
+ id: "gpt-5.5",
+ name: "GPT-5.5",
+ upstreamModelId: "blackboxai/openai/gpt-5.5"
+ },
+ {
+ id: "gpt-5.4-pro",
+ name: "GPT-5.4 Pro",
+ upstreamModelId: "blackboxai/openai/gpt-5.4-pro"
+ },
+ {
+ id: "gpt-5.4",
+ name: "GPT-5.4",
+ upstreamModelId: "blackboxai/openai/gpt-5.4"
+ },
+ {
+ id: "gpt-5.3-codex",
+ name: "GPT-5.3 Codex",
+ upstreamModelId: "blackboxai/openai/gpt-5.3-codex"
+ },
+ {
+ id: "gpt-5.4-nano",
+ name: "GPT-5.4 Nano",
+ upstreamModelId: "blackboxai/openai/gpt-5.4-nano"
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek V4 Flash",
+ upstreamModelId: "blackboxai/deepseek/deepseek-v4-flash"
+ },
+ {
+ id: "grok-4.3",
+ name: "Grok 4.3",
+ upstreamModelId: "blackboxai/x-ai/grok-4.3"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/bluesminds.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "bluesminds",
+ alias: "bm",
+ aliases: [
+ "blue-sminds"
+ ],
+ uiAlias: "bm",
+ hidden: true,
+ display: {
+ name: "BluesMinds",
+ icon: "psychology",
+ color: "#2563EB",
+ textIcon: "BM",
+ website: "https://bluesminds.com",
+ notice: {
+ apiKeyUrl: "https://bluesminds.com"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.bluesminds.com/v1/chat/completions",
+ validateUrl: "https://api.bluesminds.com/v1/models"
+ },
+ models: [
+ {
+ id: "gpt-4.1",
+ name: "GPT-4.1",
+ contextLength: 1048576
+ },
+ {
+ id: "gpt-4.1-mini",
+ name: "GPT-4.1 Mini",
+ contextLength: 1048576
+ },
+ {
+ id: "gpt-4.1-nano",
+ name: "GPT-4.1 Nano",
+ contextLength: 1048576
+ },
+ {
+ id: "claude-sonnet-4-5",
+ name: "Claude Sonnet 4.5",
+ contextLength: 200000
+ },
+ {
+ id: "claude-haiku-4-5",
+ name: "Claude Haiku 4.5",
+ contextLength: 200000
+ },
+ {
+ id: "gemini-2.0-flash",
+ name: "Gemini 2.0 Flash",
+ contextLength: 1048576
+ },
+ {
+ id: "gemini-2.0-flash-exp",
+ name: "Gemini 2.0 Flash (Exp)",
+ contextLength: 1048576
+ },
+ {
+ id: "qwen-turbo",
+ name: "Qwen Turbo",
+ contextLength: 1000000
+ },
+ {
+ id: "kimi-k2",
+ name: "Kimi K2",
+ contextLength: 262144
+ },
+ {
+ id: "kimi-k2-thinking",
+ name: "Kimi K2 Thinking",
+ contextLength: 262144
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM 4.7",
+ contextLength: 204800
+ },
+ {
+ id: "minimax-m2.5",
+ name: "MiniMax M2.5",
+ contextLength: 204800
+ },
+ {
+ id: "claude-opus-4-5",
+ name: "Claude Opus 4.5 (VIP)",
+ contextLength: 200000
+ },
+ {
+ id: "gemini-2.5-pro",
+ name: "Gemini 2.5 Pro (VIP)",
+ contextLength: 1048576
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/brave-search.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "brave-search",
+ alias: "brave",
+ display: {
+ name: "Brave Search",
+ icon: "travel_explore",
+ color: "#FB542B",
+ textIcon: "BR",
+ website: "https://brave.com/search/api",
+ notice: {
+ apiKeyUrl: "https://api-dashboard.search.brave.com/app/keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch"
+ ],
+ searchConfig: {
+ baseUrl: "https://api.search.brave.com/res/v1",
+ method: "GET",
+ authType: "apikey",
+ authHeader: "x-subscription-token",
+ costPerQuery: 0.005,
+ freeMonthlyQuota: 1000,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 20,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/byteplus.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "byteplus",
+ priority: 70,
+ alias: "byteplus",
+ aliases: [
+ "bpm"
+ ],
+ uiAlias: "bpm",
+ display: {
+ name: "BytePlus ModelArk",
+ icon: "cloud",
+ color: "#2563EB",
+ textIcon: "BP",
+ website: "https://console.byteplus.com/ark",
+ notice: {
+ text: "Free credits for new accounts. Access to Seed 2.0, Kimi K2 Thinking, GLM 4.7, GPT-OSS-120B models.",
+ apiKeyUrl: "https://console.byteplus.com/ark/region:ark+ap-southeast-1/apiKey"
+ }
+ },
+ category: "freeTier",
+ transport: {
+ baseUrl: "https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions",
+ headers: {}
+ },
+ models: [
+ {
+ id: "seed-2-0-pro-260328",
+ name: "Seed 2.0 Pro"
+ },
+ {
+ id: "seed-2-0-code-preview-260328",
+ name: "Seed 2.0 Code Preview"
+ },
+ {
+ id: "seed-2-0-mini-260215",
+ name: "Seed 2.0 Mini"
+ },
+ {
+ id: "seed-2-0-lite-260228",
+ name: "Seed 2.0 Lite"
+ },
+ {
+ id: "kimi-k2-thinking-251104",
+ name: "Kimi K2 Thinking"
+ },
+ {
+ id: "glm-4-7-251222",
+ name: "GLM 4.7"
+ },
+ {
+ id: "gpt-oss-120b-250805",
+ name: "GPT-OSS-120B"
+ }
+ ],
+ serviceKinds: [
+ "llm"
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/cartesia.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "cartesia",
+ alias: "cartesia",
+ display: {
+ name: "Cartesia",
+ icon: "spatial_audio",
+ color: "#FF4F8B",
+ textIcon: "CA",
+ website: "https://cartesia.ai",
+ notice: {
+ apiKeyUrl: "https://play.cartesia.ai/keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.cartesia.ai/tts/bytes",
+ authType: "apikey",
+ authHeader: "x-api-key",
+ format: "cartesia",
+ models: [
+ {
+ id: "sonic-2",
+ name: "Sonic 2"
+ },
+ {
+ id: "sonic-3",
+ name: "Sonic 3"
+ }
+ ]
+ },
+ hidden: true
+};
+}),
+"[project]/open-sse/providers/registry/cerebras.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "cerebras",
+ priority: 60,
+ alias: "cerebras",
+ display: {
+ name: "Cerebras",
+ icon: "memory",
+ color: "#FF4F00",
+ textIcon: "CB",
+ website: "https://www.cerebras.ai",
+ notice: {
+ apiKeyUrl: "https://cloud.cerebras.ai/platform"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.cerebras.ai/v1/chat/completions",
+ validateUrl: "https://api.cerebras.ai/v1/models",
+ quirks: {
+ dropClientMetadata: true
+ }
+ },
+ models: [
+ {
+ id: "gpt-oss-120b",
+ name: "GPT OSS 120B"
+ },
+ {
+ id: "zai-glm-4.7",
+ name: "ZAI GLM 4.7"
+ },
+ {
+ id: "llama-3.3-70b",
+ name: "Llama 3.3 70B"
+ },
+ {
+ id: "llama-4-scout-17b-16e-instruct",
+ name: "Llama 4 Scout"
+ },
+ {
+ id: "qwen-3-235b-a22b-instruct-2507",
+ name: "Qwen3 235B A22B"
+ },
+ {
+ id: "qwen-3-32b",
+ name: "Qwen3 32B"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/chutes.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "chutes",
+ priority: 70,
+ alias: "chutes",
+ aliases: [
+ "ch"
+ ],
+ uiAlias: "ch",
+ display: {
+ name: "Chutes AI",
+ icon: "water_drop",
+ color: "#ffffffff",
+ textIcon: "CH",
+ website: "https://chutes.ai",
+ notice: {
+ apiKeyUrl: "https://chutes.ai/app/api"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://llm.chutes.ai/v1/chat/completions",
+ validateUrl: "https://llm.chutes.ai/v1/models"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/claude.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "claude",
+ priority: 10,
+ alias: "cc",
+ uiAlias: "cc",
+ display: {
+ name: "Claude Code",
+ icon: "smart_toy",
+ color: "#D97757",
+ website: "https://claude.ai",
+ notice: {
+ signupUrl: "https://claude.ai"
+ },
+ deprecated: true,
+ deprecationNotice: "RISK_NOTICE"
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://api.anthropic.com/v1/messages",
+ format: "claude",
+ urlSuffix: "?beta=true",
+ headers: {
+ "Anthropic-Version": "2023-06-01",
+ "Anthropic-Beta": "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28",
+ "Anthropic-Dangerous-Direct-Browser-Access": "true",
+ "User-Agent": "claude-cli/2.1.92 (external, sdk-cli)",
+ "X-App": "cli",
+ "X-Stainless-Helper-Method": "stream",
+ "X-Stainless-Retry-Count": "0",
+ "X-Stainless-Runtime-Version": "v24.14.0",
+ "X-Stainless-Package-Version": "0.80.0",
+ "X-Stainless-Runtime": "node",
+ "X-Stainless-Lang": "js",
+ "X-Stainless-Arch": "arm64",
+ "X-Stainless-Os": "MacOS",
+ "X-Stainless-Timeout": "600"
+ },
+ quirks: {
+ cloakToolsOnOAuth: true
+ },
+ auth: {
+ apiKey: {
+ header: "x-api-key",
+ scheme: "raw"
+ },
+ oauth: {
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ usage: {
+ oauthUrl: "https://api.anthropic.com/api/oauth/usage",
+ orgUrl: "https://api.anthropic.com/v1/organizations/{org_id}/usage",
+ settingsUrl: "https://api.anthropic.com/v1/settings"
+ }
+ },
+ models: [
+ {
+ id: "claude-opus-5",
+ name: "Claude Opus 5"
+ },
+ {
+ id: "claude-fable-5",
+ name: "Claude Fable 5"
+ },
+ {
+ id: "claude-sonnet-5",
+ name: "Claude Sonnet 5"
+ },
+ {
+ id: "claude-haiku-4-5-20251001",
+ name: "Claude 4.5 Haiku"
+ }
+ ],
+ oauth: {
+ clientId: "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
+ authorizeUrl: "https://claude.ai/oauth/authorize",
+ tokenUrl: "https://api.anthropic.com/v1/oauth/token",
+ scopes: [
+ "org:create_api_key",
+ "user:profile",
+ "user:inference"
+ ],
+ codeChallengeMethod: "S256",
+ refreshLeadMs: 14400000,
+ refresh: {
+ encoding: "json"
+ }
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/cline.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "cline",
+ priority: 80,
+ alias: "cl",
+ uiAlias: "cl",
+ display: {
+ name: "Cline",
+ icon: "smart_toy",
+ color: "#5B9BD5",
+ textIcon: "CL",
+ website: "https://cline.bot",
+ notice: {
+ signupUrl: "https://cline.bot"
+ }
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://api.cline.bot/api/v1/chat/completions",
+ headers: {
+ "HTTP-Referer": "https://cline.bot",
+ "X-Title": "Cline"
+ },
+ tokenUrl: "https://api.cline.bot/api/v1/auth/token",
+ refreshUrl: "https://api.cline.bot/api/v1/auth/refresh",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer",
+ hooks: [
+ "clineHeaders"
+ ]
+ }
+ },
+ models: [
+ {
+ id: "anthropic/claude-opus-4.7",
+ name: "Claude Opus 4.7"
+ },
+ {
+ id: "anthropic/claude-sonnet-4.6",
+ name: "Claude Sonnet 4.6"
+ },
+ {
+ id: "anthropic/claude-opus-4.6",
+ name: "Claude Opus 4.6"
+ },
+ {
+ id: "openai/gpt-5.3-codex",
+ name: "GPT-5.3 Codex"
+ },
+ {
+ id: "openai/gpt-5.4",
+ name: "GPT-5.4"
+ },
+ {
+ id: "google/gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro Preview"
+ },
+ {
+ id: "google/gemini-3.1-flash-lite-preview",
+ name: "Gemini 3.1 Flash Lite Preview"
+ },
+ {
+ id: "kwaipilot/kat-coder-pro",
+ name: "KAT Coder Pro"
+ }
+ ],
+ oauth: {
+ appBaseUrl: "https://app.cline.bot",
+ apiBaseUrl: "https://api.cline.bot",
+ authorizeUrl: "https://api.cline.bot/api/v1/auth/authorize",
+ tokenExchangeUrl: "https://api.cline.bot/api/v1/auth/token",
+ refreshUrl: "https://api.cline.bot/api/v1/auth/refresh"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/clinepass.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "clinepass",
+ priority: 85,
+ alias: "clinepass",
+ uiAlias: "clinepass",
+ display: {
+ name: "ClinePass",
+ icon: "vpn_key",
+ color: "#5B9BD5",
+ textIcon: "CP",
+ website: "https://cline.bot",
+ notice: {
+ signupUrl: "https://app.cline.bot"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ transport: {
+ baseUrl: "https://api.cline.bot/api/v1/chat/completions",
+ headers: {
+ "HTTP-Referer": "https://cline.bot",
+ "X-Title": "Cline"
+ },
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer",
+ hooks: [
+ "clineHeaders"
+ ]
+ }
+ },
+ models: [
+ {
+ id: "cline-pass/glm-5.2",
+ name: "GLM-5.2 (ClinePass)"
+ },
+ {
+ id: "cline-pass/kimi-k2.7-code",
+ name: "Kimi K2.7 Code (ClinePass)"
+ },
+ {
+ id: "cline-pass/kimi-k2.6",
+ name: "Kimi K2.6 (ClinePass)"
+ },
+ {
+ id: "cline-pass/deepseek-v4-pro",
+ name: "DeepSeek V4 Pro (ClinePass)"
+ },
+ {
+ id: "cline-pass/deepseek-v4-flash",
+ name: "DeepSeek V4 Flash (ClinePass)"
+ },
+ {
+ id: "cline-pass/mimo-v2.5",
+ name: "MiMo-V2.5 (ClinePass)"
+ },
+ {
+ id: "cline-pass/mimo-v2.5-pro",
+ name: "MiMo-V2.5-Pro (ClinePass)"
+ },
+ {
+ id: "cline-pass/minimax-m3",
+ name: "MiniMax M3 (ClinePass)"
+ },
+ {
+ id: "cline-pass/qwen3.7-max",
+ name: "Qwen3.7 Max (ClinePass)"
+ },
+ {
+ id: "cline-pass/qwen3.7-plus",
+ name: "Qwen3.7 Plus (ClinePass)"
+ }
+ ],
+ oauth: {
+ appBaseUrl: "https://app.cline.bot",
+ apiBaseUrl: "https://api.cline.bot",
+ authorizeUrl: "https://api.cline.bot/api/v1/auth/authorize",
+ tokenUrl: "https://api.cline.bot/api/v1/auth/token",
+ refreshUrl: "https://api.cline.bot/api/v1/auth/refresh"
+ },
+ thinkingConfig: {
+ options: [
+ "auto",
+ "on",
+ "off"
+ ],
+ defaultMode: "auto"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/cloudflare-ai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "cloudflare-ai",
+ priority: 60,
+ hasFree: true,
+ alias: "cloudflare-ai",
+ aliases: [
+ "cf"
+ ],
+ uiAlias: "cf",
+ display: {
+ name: "Cloudflare",
+ icon: "cloud",
+ color: "#F38020",
+ textIcon: "CF",
+ website: "https://developers.cloudflare.com/workers-ai/",
+ notice: {
+ text: "Workers AI free tier. Requires a Cloudflare API token and Account ID.",
+ apiKeyUrl: "https://dash.cloudflare.com/profile/api-tokens"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ hasProviderSpecificData: true,
+ transport: {
+ baseUrl: "https://api.cloudflare.com/client/v4/accounts/{accountId}/ai/v1/chat/completions",
+ thinkingFormat: "openai"
+ },
+ models: [
+ {
+ id: "@cf/meta/llama-3.2-1b-instruct",
+ name: "Llama 3.2 1B Instruct"
+ },
+ {
+ id: "@cf/meta/llama-3.2-3b-instruct",
+ name: "Llama 3.2 3B Instruct"
+ },
+ {
+ id: "@cf/meta/llama-3.1-8b-instruct-fp8-fast",
+ name: "Llama 3.1 8B Instruct FP8 Fast"
+ },
+ {
+ id: "@cf/meta/llama-3.1-8b-instruct-awq",
+ name: "Llama 3.1 8B Instruct AWQ"
+ },
+ {
+ id: "@cf/mistralai/mistral-small-3.1-24b-instruct",
+ name: "Mistral Small 3.1 24B Instruct"
+ },
+ {
+ id: "@cf/meta/llama-3.1-70b-instruct-fp8-fast",
+ name: "Llama 3.1 70B Instruct FP8 Fast"
+ },
+ {
+ id: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
+ name: "Llama 3.3 70B Instruct FP8 Fast"
+ },
+ {
+ id: "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",
+ name: "DeepSeek R1 Distill Qwen 32B"
+ },
+ {
+ id: "@cf/moonshotai/kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "@cf/moonshotai/kimi-k2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "@cf/zai-org/glm-4.7-flash",
+ name: "GLM 4.7 Flash"
+ },
+ {
+ id: "@cf/qwen/qwq-32b",
+ name: "QwQ 32B"
+ },
+ {
+ id: "@cf/qwen/qwen2.5-coder-32b-instruct",
+ name: "Qwen 2.5 Coder 32B Instruct"
+ },
+ {
+ id: "@cf/black-forest-labs/flux-2-klein-9b",
+ name: "FLUX.2 Klein 9B",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/black-forest-labs/flux-2-klein-4b",
+ name: "FLUX.2 Klein 4B",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/black-forest-labs/flux-2-dev",
+ name: "FLUX.2 Dev",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/leonardo/lucid-origin",
+ name: "Lucid Origin",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/leonardo/phoenix-1.0",
+ name: "Phoenix 1.0",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/black-forest-labs/flux-1-schnell",
+ name: "FLUX.1 Schnell",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/bytedance/stable-diffusion-xl-lightning",
+ name: "SDXL Lightning",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/lykon/dreamshaper-8-lcm",
+ name: "DreamShaper 8 LCM",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/runwayml/stable-diffusion-v1-5-img2img",
+ name: "Stable Diffusion v1.5 Img2Img",
+ params: [
+ "size"
+ ],
+ capabilities: [
+ "edit"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/runwayml/stable-diffusion-v1-5-inpainting",
+ name: "Stable Diffusion v1.5 Inpainting",
+ params: [
+ "size"
+ ],
+ capabilities: [
+ "edit",
+ "mask"
+ ],
+ kind: "image"
+ },
+ {
+ id: "@cf/stabilityai/stable-diffusion-xl-base-1.0",
+ name: "SDXL Base 1.0",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://api.cloudflare.com/client/v4/accounts"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/codebuddy-cn.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "codebuddy-cn",
+ // Short model prefix (cbcn/glm-5.2). "cbcn" = CodeBuddy CN; reserve "cbai"
+ // for a future codebuddy-ai (intl) provider. The full id still resolves.
+ alias: "cbcn",
+ uiAlias: "cbcn",
+ hidden: false,
+ priority: 90,
+ display: {
+ name: "CodeBuddy CN",
+ icon: "smart_toy",
+ color: "#006EFF",
+ website: "https://copilot.tencent.com",
+ notice: {
+ signupUrl: "https://copilot.tencent.com"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ transport: {
+ baseUrl: "https://copilot.tencent.com/v2/chat/completions",
+ forceStream: true,
+ // CodeBuddy is a unified OpenAI-compatible gateway: every model (GLM, Kimi,
+ // MiniMax, DeepSeek, Hunyuan) takes reasoning via OpenAI-style reasoning_effort,
+ // not its vendor-native thinking shape. Force the openai thinking format.
+ thinkingFormat: "openai",
+ headers: {
+ "User-Agent": "CLI/2.108.1 CodeBuddy/2.108.1",
+ "X-Product": "SaaS",
+ "X-IDE-Type": "CLI",
+ "X-IDE-Name": "CLI",
+ "x-requested-with": "XMLHttpRequest",
+ "x-codebuddy-request": "1"
+ },
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ },
+ // Quota endpoint differs from the chat gateway: POST returns nested Tencent
+ // billing payload (data.Response.Data.Accounts[]). See services/usage/codebuddy-cn.js.
+ usage: {
+ url: "https://copilot.tencent.com/v2/billing/meter/get-user-resource"
+ }
+ },
+ models: [
+ {
+ id: "glm-5.2",
+ name: "GLM-5.2"
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM-5.1"
+ },
+ {
+ id: "glm-5.0",
+ name: "GLM-5.0"
+ },
+ {
+ id: "glm-5.0-turbo",
+ name: "GLM-5.0-Turbo"
+ },
+ {
+ id: "glm-5v-turbo",
+ name: "GLM-5v-Turbo"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM-4.7"
+ },
+ {
+ id: "minimax-m3",
+ name: "MiniMax-M3"
+ },
+ {
+ id: "minimax-m2.7",
+ name: "MiniMax-M2.7"
+ },
+ {
+ id: "kimi-k2.7",
+ name: "Kimi-K2.7-Code"
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi-K2.6"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi-K2.5"
+ },
+ {
+ id: "hy3-preview",
+ name: "Hy3 Preview"
+ },
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek-V4-Pro"
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek-V4-Flash"
+ },
+ {
+ id: "deepseek-v3-2-volc",
+ name: "DeepSeek-V3.2"
+ }
+ ],
+ oauth: {
+ baseUrl: "https://copilot.tencent.com",
+ stateUrl: "https://copilot.tencent.com/v2/plugin/auth/state",
+ tokenUrl: "https://copilot.tencent.com/v2/plugin/auth/token",
+ refreshUrl: "https://copilot.tencent.com/v2/plugin/auth/token/refresh",
+ userAgent: "CLI/2.63.2 CodeBuddy/2.63.2",
+ platform: "CLI",
+ pollInterval: 5000
+ },
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/codebuddy-intl.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// CodeBuddy international (codebuddy.ai) — mirrors codebuddy-cn registry shape,
+// swapping the Tencent CN domain for the .ai endpoint set. All OAuth/plugin URLs
+// use the /v2/plugin prefix with platform=ide (CN uses platform=CLI).
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "codebuddy-intl",
+ alias: "cbai",
+ uiAlias: "cbai",
+ hidden: false,
+ priority: 90,
+ display: {
+ name: "CodeBuddy",
+ icon: "smart_toy",
+ color: "#006EFF",
+ website: "https://www.codebuddy.ai",
+ notice: {
+ signupUrl: "https://www.codebuddy.ai"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ transport: {
+ // Chat gateway is OpenAI-compatible SSE (same /v2/chat/completions path as CN).
+ baseUrl: "https://www.codebuddy.ai/v2/chat/completions",
+ forceStream: true,
+ // CodeBuddy intl speaks the same unified OpenAI reasoning_effort shape as CN.
+ thinkingFormat: "openai",
+ headers: {
+ "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1",
+ "X-Product": "SaaS",
+ "X-IDE-Type": "IDE",
+ "X-IDE-Name": "IDE",
+ "x-requested-with": "XMLHttpRequest",
+ "x-codebuddy-request": "1"
+ },
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ },
+ // Intl billing endpoint mirrors CN shape (data.Response.Data.Accounts[]).
+ usage: {
+ url: "https://www.codebuddy.ai/v2/billing/meter/get-user-resource"
+ }
+ },
+ // Same model lineup exposed by the CN gateway — intl backend is the same catalog.
+ models: [
+ {
+ id: "glm-5.2",
+ name: "GLM-5.2"
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM-5.1"
+ },
+ {
+ id: "glm-5.0",
+ name: "GLM-5.0"
+ },
+ {
+ id: "glm-5.0-turbo",
+ name: "GLM-5.0-Turbo"
+ },
+ {
+ id: "glm-5v-turbo",
+ name: "GLM-5v-Turbo"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM-4.7"
+ },
+ {
+ id: "minimax-m3",
+ name: "MiniMax-M3"
+ },
+ {
+ id: "minimax-m2.7",
+ name: "MiniMax-M2.7"
+ },
+ {
+ id: "kimi-k2.7",
+ name: "Kimi-K2.7-Code"
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi-K2.6"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi-K2.5"
+ },
+ {
+ id: "hy3-preview",
+ name: "Hy3 Preview"
+ },
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek-V4-Pro"
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek-V4-Flash"
+ },
+ {
+ id: "deepseek-v3-2-volc",
+ name: "DeepSeek-V3.2"
+ }
+ ],
+ oauth: {
+ baseUrl: "https://www.codebuddy.ai",
+ stateUrl: "https://www.codebuddy.ai/v2/plugin/auth/state",
+ tokenUrl: "https://www.codebuddy.ai/v2/plugin/auth/token",
+ refreshUrl: "https://www.codebuddy.ai/v2/plugin/auth/token/refresh",
+ userAgent: "IDE/2.63.2 CodeBuddy/2.63.2",
+ platform: "ide",
+ pollInterval: 5000
+ },
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/codex.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+;
+const __TURBOPACK__default__export__ = {
+ id: "codex",
+ priority: 30,
+ alias: "cx",
+ uiAlias: "cx",
+ display: {
+ name: "OpenAI Codex",
+ icon: "code",
+ color: "#3B82F6",
+ website: "https://chatgpt.com/codex",
+ notice: {
+ signupUrl: "https://chatgpt.com/codex"
+ },
+ deprecated: true,
+ deprecationNotice: "RISK_NOTICE",
+ kindNotice: {
+ image: "Requires a ChatGPT Plus (or higher) account. Free accounts are not supported for image generation."
+ }
+ },
+ category: "oauth",
+ thinkingConfig: {
+ options: [
+ "auto",
+ "none",
+ "low",
+ "medium",
+ "high"
+ ],
+ defaultMode: "auto"
+ },
+ transport: {
+ baseUrl: "https://chatgpt.com/backend-api/codex/responses",
+ format: "openai-responses",
+ forceStream: true,
+ headers: {
+ originator: "codex_cli_rs",
+ "User-Agent": "codex_cli_rs/0.136.0"
+ },
+ usage: {
+ url: "https://chatgpt.com/backend-api/wham/usage",
+ resetCreditsUrl: "https://chatgpt.com/backend-api/wham/rate-limit-reset-credits",
+ resetCreditsConsumeUrl: "https://chatgpt.com/backend-api/wham/rate-limit-reset-credits/consume"
+ }
+ },
+ models: [
+ {
+ id: "gpt-5.6-sol",
+ name: "GPT 5.6 Sol"
+ },
+ {
+ id: "gpt-5.6-sol-review",
+ name: "GPT 5.6 Sol Review",
+ upstreamModelId: "gpt-5.6-sol",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.6-terra",
+ name: "GPT 5.6 Terra"
+ },
+ {
+ id: "gpt-5.6-terra-review",
+ name: "GPT 5.6 Terra Review",
+ upstreamModelId: "gpt-5.6-terra",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.6-luna",
+ name: "GPT 5.6 Luna"
+ },
+ {
+ id: "gpt-5.6-luna-review",
+ name: "GPT 5.6 Luna Review",
+ upstreamModelId: "gpt-5.6-luna",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.5",
+ name: "GPT 5.5"
+ },
+ {
+ id: "gpt-5.5-review",
+ name: "GPT 5.5 Review",
+ upstreamModelId: "gpt-5.5",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.4",
+ name: "GPT 5.4"
+ },
+ {
+ id: "gpt-5.4-review",
+ name: "GPT 5.4 Review",
+ upstreamModelId: "gpt-5.4",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.4-mini",
+ name: "GPT 5.4 Mini"
+ },
+ {
+ id: "gpt-5.4-mini-review",
+ name: "GPT 5.4 Mini Review",
+ upstreamModelId: "gpt-5.4-mini",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.3-codex-spark",
+ name: "GPT 5.3 Codex Spark"
+ },
+ {
+ id: "gpt-5.3-codex-spark-review",
+ name: "GPT 5.3 Codex Spark Review",
+ upstreamModelId: "gpt-5.3-codex-spark",
+ quotaFamily: "review"
+ },
+ {
+ id: "gpt-5.5-image",
+ name: "GPT 5.5 Image",
+ capabilities: [
+ "text2img",
+ "edit"
+ ],
+ params: [
+ "size",
+ "quality",
+ "background",
+ "image_detail",
+ "output_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "gpt-5.4-image",
+ name: "GPT 5.4 Image",
+ capabilities: [
+ "text2img",
+ "edit"
+ ],
+ params: [
+ "size",
+ "quality",
+ "background",
+ "image_detail",
+ "output_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "gpt-5.3-image",
+ name: "GPT 5.3 Image",
+ capabilities: [
+ "text2img",
+ "edit"
+ ],
+ params: [
+ "size",
+ "quality",
+ "background",
+ "image_detail",
+ "output_format"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "image"
+ ],
+ oauth: {
+ clientId: "app_EMoamEEZ73f0CkXaXp7hrann",
+ authorizeUrl: "https://auth.openai.com/oauth/authorize",
+ tokenUrl: "https://auth.openai.com/oauth/token",
+ scope: "openid profile email offline_access",
+ codeChallengeMethod: "S256",
+ fixedPort: 1455,
+ callbackPath: "/auth/callback",
+ extraParams: {
+ id_token_add_organizations: "true",
+ codex_cli_simplified_flow: "true",
+ originator: "codex_cli_rs"
+ },
+ refreshLeadMs: 432000000,
+ refresh: {
+ encoding: "form",
+ scope: "openid profile email offline_access"
+ },
+ maxRefreshAgeMs: 691200000,
+ trackRefreshAt: true
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/cohere.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "cohere",
+ priority: 90,
+ alias: "cohere",
+ display: {
+ name: "Cohere",
+ icon: "hub",
+ color: "#39594D",
+ textIcon: "CO",
+ website: "https://cohere.com",
+ notice: {
+ apiKeyUrl: "https://dashboard.cohere.com/api-keys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.cohere.ai/v1/chat/completions",
+ validateUrl: "https://api.cohere.ai/v1/models"
+ },
+ models: [
+ {
+ id: "command-r-plus-08-2024",
+ name: "Command R+ (Aug 2024)"
+ },
+ {
+ id: "command-r-08-2024",
+ name: "Command R (Aug 2024)"
+ },
+ {
+ id: "command-a-03-2025",
+ name: "Command A (Mar 2025)"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/comfyui.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "comfyui",
+ priority: 120,
+ alias: "comfyui",
+ display: {
+ name: "ComfyUI",
+ icon: "account_tree",
+ color: "#4CAF50",
+ textIcon: "CF",
+ website: "https://github.com/comfyanonymous/ComfyUI"
+ },
+ category: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "flux-dev",
+ name: "FLUX Dev",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "sdxl",
+ name: "SDXL",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "http://localhost:8188"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/commandcode.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "commandcode",
+ priority: 100,
+ alias: "commandcode",
+ aliases: [
+ "cmc"
+ ],
+ uiAlias: "cmc",
+ display: {
+ name: "Command Code",
+ icon: "smart_toy",
+ color: "#000000",
+ textIcon: "CC",
+ website: "https://commandcode.ai",
+ notice: {
+ text: "Use your CommandCode CLI API key (starts with user_...) from ~/.commandcode/auth.json or commandcode.ai/studio.",
+ apiKeyUrl: "https://commandcode.ai/studio"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.commandcode.ai/alpha/generate",
+ format: "commandcode",
+ forceStream: true,
+ headers: {
+ "x-command-code-version": "1.10.0",
+ "x-cli-environment": "cli",
+ "User-Agent": "cli"
+ },
+ // Quota/billing endpoints (same alpha API the official CLI /usage calls).
+ // whoami resolves orgId; credits+subscription+usage/summary then report the
+ // 5-hour/weekly windows, plan, and period credits. See services/usage/commandcode.js.
+ usage: {
+ baseUrl: "https://api.commandcode.ai",
+ whoamiUrl: "/alpha/whoami",
+ creditsUrl: "/alpha/billing/credits",
+ subscriptionsUrl: "/alpha/billing/subscriptions",
+ summaryUrl: "/alpha/usage/summary"
+ }
+ },
+ features: {
+ usage: true,
+ usageApikey: true
+ },
+ models: [
+ {
+ id: "deepseek/deepseek-v4-pro",
+ name: "DeepSeek V4 Pro"
+ },
+ {
+ id: "deepseek/deepseek-v4-flash",
+ name: "DeepSeek V4 Flash"
+ },
+ {
+ id: "moonshotai/Kimi-K2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "moonshotai/Kimi-K2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "zai-org/GLM-5.1",
+ name: "GLM 5.1"
+ },
+ {
+ id: "zai-org/GLM-5",
+ name: "GLM 5"
+ },
+ {
+ id: "MiniMaxAI/MiniMax-M2.7",
+ name: "MiniMax M2.7"
+ },
+ {
+ id: "MiniMaxAI/MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "Qwen/Qwen3.6-Max-Preview",
+ name: "Qwen 3.6 Max Preview"
+ },
+ {
+ id: "Qwen/Qwen3.6-Plus",
+ name: "Qwen 3.6 Plus"
+ },
+ {
+ id: "stepfun/Step-3.5-Flash",
+ name: "Step 3.5 Flash"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/coqui.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "coqui",
+ alias: "coqui",
+ display: {
+ name: "Coqui TTS",
+ icon: "record_voice_over",
+ color: "#10B981",
+ textIcon: "CQ",
+ website: "https://github.com/coqui-ai/TTS"
+ },
+ category: "freeTier",
+ authType: "none",
+ serviceKinds: [
+ "tts"
+ ],
+ noAuth: true,
+ ttsConfig: {
+ baseUrl: "http://localhost:5002/api/tts",
+ authType: "none",
+ authHeader: "none",
+ format: "coqui",
+ models: [
+ {
+ id: "tts_models/en/ljspeech/tacotron2-DDC",
+ name: "Tacotron2 DDC (LJSpeech)"
+ }
+ ]
+ },
+ hidden: true
+};
+}),
+"[project]/open-sse/providers/registry/cursor.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "cursor",
+ priority: 50,
+ alias: "cu",
+ uiAlias: "cu",
+ display: {
+ name: "Cursor IDE",
+ icon: "edit_note",
+ color: "#00D4AA",
+ website: "https://cursor.com",
+ notice: {
+ signupUrl: "https://cursor.com"
+ }
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://api2.cursor.sh",
+ chatPath: "/aiserver.v1.ChatService/StreamUnifiedChatWithTools",
+ format: "cursor",
+ headers: {
+ "connect-accept-encoding": "gzip",
+ "connect-protocol-version": "1",
+ "Content-Type": "application/connect+proto",
+ "User-Agent": "connect-es/1.6.1"
+ },
+ clientVersion: "3.12.17"
+ },
+ models: [
+ {
+ id: "default",
+ name: "Auto (Server Picks)"
+ },
+ {
+ id: "claude-4.5-opus-high-thinking",
+ name: "Claude 4.5 Opus High Thinking"
+ },
+ {
+ id: "claude-4.5-opus-high",
+ name: "Claude 4.5 Opus High"
+ },
+ {
+ id: "claude-4.5-sonnet-thinking",
+ name: "Claude 4.5 Sonnet Thinking"
+ },
+ {
+ id: "claude-4.5-sonnet",
+ name: "Claude 4.5 Sonnet"
+ },
+ {
+ id: "claude-4.5-haiku",
+ name: "Claude 4.5 Haiku"
+ },
+ {
+ id: "claude-4.5-opus",
+ name: "Claude 4.5 Opus"
+ },
+ {
+ id: "gpt-5.2-codex",
+ name: "GPT 5.2 Codex"
+ },
+ {
+ id: "claude-4.6-opus-max",
+ name: "Claude 4.6 Opus Max"
+ },
+ {
+ id: "claude-4.6-sonnet-medium-thinking",
+ name: "Claude 4.6 Sonnet Medium Thinking"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "gemini-3-flash-preview",
+ name: "Gemini 3 Flash Preview"
+ },
+ {
+ id: "gpt-5.2",
+ name: "GPT 5.2"
+ },
+ {
+ id: "gpt-5.3-codex",
+ name: "GPT 5.3 Codex"
+ }
+ ],
+ oauth: {
+ apiEndpoint: "https://api2.cursor.sh",
+ chatEndpoint: "/aiserver.v1.ChatService/StreamUnifiedChatWithTools",
+ modelsEndpoint: "/agent.v1.AgentService/GetUsableModels",
+ api3Endpoint: "https://api3.cursor.sh",
+ agentEndpoint: "https://agent.api5.cursor.sh",
+ agentNonPrivacyEndpoint: "https://agentn.api5.cursor.sh",
+ clientVersion: "3.12.17",
+ clientType: "ide",
+ dbKeys: {
+ accessToken: "cursorAuth/accessToken",
+ machineId: "storage.serviceMachineId"
+ }
+ }
+};
+}),
+"[project]/open-sse/providers/registry/deepgram.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "deepgram",
+ priority: 20,
+ alias: "deepgram",
+ aliases: [
+ "dg"
+ ],
+ uiAlias: "dg",
+ display: {
+ name: "Deepgram",
+ icon: "mic",
+ color: "#13EF93",
+ textIcon: "DG",
+ website: "https://deepgram.com",
+ notice: {
+ text: "$200 free credit on signup (no card required). Aura-1: $0.015/1k chars, Aura-2: $0.030/1k chars (Pay-As-You-Go).",
+ apiKeyUrl: "https://console.deepgram.com/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.deepgram.com/v1/listen"
+ },
+ models: [
+ {
+ id: "nova-3",
+ name: "Nova 3",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "nova-2",
+ name: "Nova 2",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "whisper-large",
+ name: "Whisper Large",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "nova",
+ name: "Nova",
+ kind: "stt"
+ }
+ ],
+ serviceKinds: [
+ "stt"
+ ],
+ sttConfig: {
+ baseUrl: "https://api.deepgram.com/v1/listen",
+ authType: "apikey",
+ authHeader: "token",
+ format: "deepgram"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/deepseek.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "deepseek",
+ priority: 110,
+ alias: "deepseek",
+ aliases: [
+ "ds"
+ ],
+ uiAlias: "ds",
+ display: {
+ name: "DeepSeek",
+ icon: "bolt",
+ color: "#4D6BFE",
+ textIcon: "DS",
+ website: "https://deepseek.com",
+ notice: {
+ apiKeyUrl: "https://platform.deepseek.com/api_keys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.deepseek.com/chat/completions",
+ validateUrl: "https://api.deepseek.com/models",
+ reasoningInject: {
+ scope: "all"
+ }
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://api.deepseek.com/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://api.deepseek.com/anthropic/v1/messages",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek V4 Pro"
+ },
+ {
+ id: "deepseek-v4-pro-max",
+ name: "DeepSeek V4 Pro Max",
+ upstreamModelId: "deepseek-v4-pro"
+ },
+ {
+ id: "deepseek-v4-pro-none",
+ name: "DeepSeek V4 Pro No Thinking",
+ upstreamModelId: "deepseek-v4-pro"
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek V4 Flash"
+ },
+ {
+ id: "deepseek-chat",
+ name: "DeepSeek V3.2 Chat"
+ },
+ {
+ id: "deepseek-reasoner",
+ name: "DeepSeek V3.2 Reasoner"
+ }
+ ],
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/edge-tts.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "edge-tts",
+ alias: "edge-tts",
+ display: {
+ name: "Edge TTS",
+ icon: "record_voice_over",
+ color: "#0078D4",
+ textIcon: "ET"
+ },
+ category: "freeTier",
+ authType: "none",
+ serviceKinds: [
+ "tts"
+ ],
+ mediaPriority: 5,
+ noAuth: true,
+ ttsConfig: {
+ baseUrl: "edge-tts",
+ authType: "none",
+ authHeader: "none",
+ format: "edge-tts",
+ models: []
+ }
+};
+}),
+"[project]/open-sse/providers/registry/elevenlabs.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "elevenlabs",
+ alias: "el",
+ display: {
+ name: "ElevenLabs",
+ icon: "record_voice_over",
+ color: "#6C47FF",
+ textIcon: "EL",
+ website: "https://elevenlabs.io",
+ notice: {
+ apiKeyUrl: "https://elevenlabs.io/app/settings/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.elevenlabs.io/v1/text-to-speech",
+ authType: "apikey",
+ authHeader: "xi-api-key",
+ format: "elevenlabs",
+ models: [
+ {
+ id: "eleven_multilingual_v2",
+ name: "Eleven Multilingual v2"
+ },
+ {
+ id: "eleven_turbo_v2_5",
+ name: "Eleven Turbo v2.5"
+ }
+ ]
+ }
+};
+}),
+"[project]/open-sse/providers/registry/exa.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "exa",
+ alias: "exa",
+ display: {
+ name: "Exa",
+ icon: "manage_search",
+ color: "#2563EB",
+ textIcon: "EX",
+ website: "https://exa.ai",
+ notice: {
+ apiKeyUrl: "https://dashboard.exa.ai/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch",
+ "webFetch"
+ ],
+ searchConfig: {
+ baseUrl: "https://api.exa.ai/search",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "x-api-key",
+ costPerQuery: 0.007,
+ freeMonthlyQuota: 1000,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 100,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ },
+ fetchConfig: {
+ baseUrl: "https://api.exa.ai/contents",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "x-api-key",
+ costPerQuery: 0.001,
+ freeMonthlyQuota: 1000,
+ formats: [
+ "text",
+ "markdown"
+ ],
+ maxCharacters: 100000,
+ timeoutMs: 15000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/fal-ai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "fal-ai",
+ priority: 90,
+ hasFree: true,
+ alias: "fal-ai",
+ aliases: [
+ "fal"
+ ],
+ uiAlias: "fal",
+ display: {
+ name: "Fal.ai",
+ icon: "image",
+ color: "#2563EB",
+ textIcon: "FL",
+ website: "https://fal.ai",
+ notice: {
+ apiKeyUrl: "https://fal.ai/dashboard/keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "fal-ai/flux/schnell",
+ name: "FLUX Schnell",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "fal-ai/flux/dev",
+ name: "FLUX Dev",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "fal-ai/flux-pro/v1.1",
+ name: "FLUX Pro v1.1",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "fal-ai/flux-pro/v1.1-ultra",
+ name: "FLUX Pro v1.1 Ultra",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "fal-ai/recraft-v3",
+ name: "Recraft V3",
+ params: [
+ "n",
+ "size",
+ "style"
+ ],
+ kind: "image"
+ },
+ {
+ id: "fal-ai/ideogram/v2",
+ name: "Ideogram V2",
+ params: [
+ "n",
+ "size",
+ "style"
+ ],
+ kind: "image"
+ },
+ {
+ id: "fal-ai/stable-diffusion-v35-large",
+ name: "SD 3.5 Large",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://queue.fal.run"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/featherless.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "featherless",
+ priority: 65,
+ alias: "featherless",
+ aliases: [
+ "fl"
+ ],
+ uiAlias: "fl",
+ display: {
+ name: "Featherless",
+ icon: "flutter_dash",
+ color: "#111827",
+ textIcon: "FL",
+ website: "https://featherless.ai",
+ notice: {
+ apiKeyUrl: "https://featherless.ai/account/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.featherless.ai/v1/chat/completions",
+ validateUrl: "https://api.featherless.ai/v1/models"
+ },
+ models: [
+ {
+ id: "deepseek-ai/DeepSeek-V4-Pro",
+ name: "DeepSeek V4 Pro"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V4-Flash",
+ name: "DeepSeek V4 Flash"
+ },
+ {
+ id: "zai-org/GLM-5.2",
+ name: "GLM 5.2"
+ },
+ {
+ id: "zai-org/GLM-5.1",
+ name: "GLM 5.1"
+ },
+ {
+ id: "moonshotai/Kimi-K2.7-Code",
+ name: "Kimi K2.7 Code"
+ },
+ {
+ id: "moonshotai/Kimi-K2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "moonshotai/Kimi-K2.5",
+ name: "Kimi K2.5"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/firecrawl.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "firecrawl",
+ alias: "firecrawl",
+ display: {
+ name: "Firecrawl",
+ icon: "local_fire_department",
+ color: "#F59E0B",
+ textIcon: "FC",
+ website: "https://firecrawl.dev",
+ notice: {
+ apiKeyUrl: "https://www.firecrawl.dev/app/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webFetch"
+ ],
+ fetchConfig: {
+ baseUrl: "https://api.firecrawl.dev/v1/scrape",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "bearer",
+ costPerQuery: 0.002,
+ freeMonthlyQuota: 500,
+ formats: [
+ "markdown",
+ "html",
+ "text"
+ ],
+ maxCharacters: 200000,
+ timeoutMs: 30000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/fireworks.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "fireworks",
+ priority: 50,
+ alias: "fireworks",
+ display: {
+ name: "Fireworks AI",
+ icon: "local_fire_department",
+ color: "#7B2EF2",
+ textIcon: "FW",
+ website: "https://fireworks.ai",
+ notice: {
+ apiKeyUrl: "https://fireworks.ai/account/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.fireworks.ai/inference/v1/chat/completions",
+ validateUrl: "https://api.fireworks.ai/inference/v1/models"
+ },
+ models: [
+ {
+ id: "accounts/fireworks/models/deepseek-v3p1",
+ name: "DeepSeek V3.1"
+ },
+ {
+ id: "accounts/fireworks/models/llama-v3p3-70b-instruct",
+ name: "Llama 3.3 70B"
+ },
+ {
+ id: "accounts/fireworks/models/qwen3-235b-a22b",
+ name: "Qwen3 235B"
+ },
+ {
+ id: "nomic-ai/nomic-embed-text-v1.5",
+ name: "Nomic Embed Text v1.5",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.fireworks.ai/inference/v1/embeddings"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/fish-audio.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Fish Audio TTS — the model id travels in an HTTP `model` header rather than the
+// JSON body, and the voice is a reference_id (a cloned or preset voice model).
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "fish-audio",
+ alias: "fish",
+ display: {
+ name: "Fish Audio",
+ icon: "record_voice_over",
+ color: "#1E9BF0",
+ textIcon: "FA",
+ website: "https://fish.audio",
+ notice: {
+ apiKeyUrl: "https://fish.audio/app/api-keys/"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.fish.audio/v1/tts",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "fish-audio",
+ models: [
+ {
+ id: "s2.1-pro-free",
+ name: "S2.1 Pro Free"
+ },
+ {
+ id: "s2.1-pro",
+ name: "S2.1 Pro"
+ },
+ {
+ id: "s2-pro",
+ name: "S2 Pro"
+ },
+ {
+ id: "s1",
+ name: "S1"
+ }
+ ]
+ }
+};
+}),
+"[project]/open-sse/providers/registry/gemini-cli.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "gemini-cli",
+ priority: 20,
+ hasFree: true,
+ alias: "gc",
+ uiAlias: "gc",
+ display: {
+ name: "Gemini CLI",
+ icon: "terminal",
+ color: "#4285F4",
+ website: "https://github.com/google-gemini/gemini-cli",
+ notice: {
+ signupUrl: "https://github.com/google-gemini/gemini-cli"
+ },
+ deprecated: true,
+ deprecationNotice: "RISK_NOTICE"
+ },
+ category: "free",
+ transport: {
+ baseUrl: "https://cloudcode-pa.googleapis.com/v1internal",
+ format: "gemini-cli",
+ cliVersion: "0.34.0",
+ apiClient: "google-genai-sdk/1.41.0 gl-node/v22.19.0",
+ usage: {
+ quotaUrl: "https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuota",
+ loadCodeAssistUrl: "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist"
+ },
+ clientId: "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",
+ clientSecret: "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"
+ },
+ models: [
+ {
+ id: "gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro Preview"
+ },
+ {
+ id: "gemini-3-pro-preview",
+ name: "Gemini 3 Pro Preview"
+ },
+ {
+ id: "gemini-3-flash-preview",
+ name: "Gemini 3 Flash Preview"
+ },
+ {
+ id: "gemini-3.1-flash-lite-preview",
+ name: "Gemini 3.1 Flash Lite Preview"
+ },
+ {
+ id: "gemini-2.5-pro",
+ name: "Gemini 2.5 Pro"
+ },
+ {
+ id: "gemini-2.5-flash",
+ name: "Gemini 2.5 Flash"
+ },
+ {
+ id: "gemini-2.5-flash-lite",
+ name: "Gemini 2.5 Flash Lite"
+ }
+ ],
+ oauth: {
+ authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
+ tokenUrl: "https://oauth2.googleapis.com/token",
+ userInfoUrl: "https://www.googleapis.com/oauth2/v1/userinfo",
+ scopes: [
+ "https://www.googleapis.com/auth/cloud-platform",
+ "https://www.googleapis.com/auth/userinfo.email",
+ "https://www.googleapis.com/auth/userinfo.profile"
+ ],
+ refresh: {
+ encoding: "form"
+ }
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/gemini.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "gemini",
+ priority: 50,
+ hasFree: true,
+ alias: "gemini",
+ display: {
+ name: "Gemini",
+ icon: "diamond",
+ color: "#4285F4",
+ textIcon: "GE",
+ website: "https://ai.google.dev",
+ notice: {
+ apiKeyUrl: "https://aistudio.google.com/app/apikey"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ mediaPriority: 1,
+ transport: {
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
+ format: "gemini",
+ clientId: "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",
+ clientSecret: "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",
+ auth: {
+ apiKey: {
+ header: "x-goog-api-key",
+ scheme: "raw"
+ },
+ oauth: {
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ }
+ },
+ models: [
+ {
+ id: "gemini-3.7-flash",
+ name: "Gemini 3.7 Flash"
+ },
+ {
+ id: "gemini-3.6-flash",
+ name: "Gemini 3.6 Flash"
+ },
+ {
+ id: "gemini-3.5-flash-lite",
+ name: "Gemini 3.5 Flash Lite"
+ },
+ {
+ id: "gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro Preview"
+ },
+ {
+ id: "gemini-3.1-flash-lite-preview",
+ name: "Gemini 3.1 Flash Lite Preview"
+ },
+ {
+ id: "gemini-3-flash-preview",
+ name: "Gemini 3 Flash Preview"
+ },
+ {
+ id: "gemini-2.5-pro",
+ name: "Gemini 2.5 Pro"
+ },
+ {
+ id: "gemini-2.5-flash",
+ name: "Gemini 2.5 Flash"
+ },
+ {
+ id: "gemini-2.5-flash-lite",
+ name: "Gemini 2.5 Flash Lite"
+ },
+ {
+ id: "gemma-4-31b-it",
+ name: "Gemma 4 31B IT"
+ },
+ {
+ id: "gemini-embedding-2-preview",
+ name: "Gemini Embedding 2 Preview",
+ kind: "embedding"
+ },
+ {
+ id: "gemini-embedding-001",
+ name: "Gemini Embedding 001",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-005",
+ name: "Text Embedding 005",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-004",
+ name: "Text Embedding 004 (Legacy)",
+ kind: "embedding"
+ },
+ {
+ id: "gemini-3.1-flash-image-preview",
+ name: "Gemini 3.1 Flash Image (Nano Banana 2)",
+ params: [],
+ kind: "image"
+ },
+ {
+ id: "gemini-3-pro-image-preview",
+ name: "Gemini 3 Pro Image (Nano Banana Pro)",
+ params: [],
+ kind: "image"
+ },
+ {
+ id: "gemini-2.5-flash-image",
+ name: "Gemini 2.5 Flash Image (Nano Banana)",
+ params: [],
+ kind: "image"
+ },
+ {
+ id: "gemini-2.5-pro",
+ name: "Gemini 2.5 Pro (Best)",
+ params: [
+ "language",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gemini-2.5-flash",
+ name: "Gemini 2.5 Flash",
+ params: [
+ "language",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gemini-2.5-flash-lite",
+ name: "Gemini 2.5 Flash Lite (Cheapest)",
+ params: [
+ "language",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gemini-2.0-flash",
+ name: "Gemini 2.0 Flash",
+ params: [
+ "language",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gemini-3.1-flash-tts-preview",
+ name: "Gemini 3.1 Flash TTS",
+ kind: "tts"
+ },
+ {
+ id: "gemini-2.5-flash-preview-tts",
+ name: "Gemini 2.5 Flash TTS",
+ kind: "tts"
+ },
+ {
+ id: "gemini-2.5-pro-preview-tts",
+ name: "Gemini 2.5 Pro TTS",
+ kind: "tts"
+ },
+ {
+ id: "embedding-001",
+ name: "Embedding 001",
+ dimensions: 768,
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding",
+ "image",
+ "imageToText",
+ "webSearch",
+ "tts",
+ "stt"
+ ],
+ ttsConfig: {
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
+ authType: "apikey",
+ authHeader: "key",
+ format: "gemini-tts"
+ },
+ sttConfig: {
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
+ authType: "apikey",
+ authHeader: "key",
+ format: "gemini-stt"
+ },
+ embeddingConfig: {
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
+ authType: "apikey",
+ authHeader: "key"
+ },
+ imageConfig: {
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/models"
+ },
+ searchViaChat: {
+ defaultModel: "gemini-2.5-flash",
+ endpoint: "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",
+ pricingUrl: "https://ai.google.dev/pricing",
+ freeTier: "Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio."
+ }
+};
+}),
+"[project]/open-sse/providers/registry/github.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "github",
+ priority: 40,
+ alias: "gh",
+ uiAlias: "gh",
+ display: {
+ name: "GitHub Copilot",
+ icon: "code",
+ color: "#333333",
+ website: "https://github.com/features/copilot",
+ notice: {
+ signupUrl: "https://github.com/features/copilot"
+ },
+ deprecated: true,
+ deprecationNotice: "RISK_NOTICE"
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://api.githubcopilot.com/chat/completions",
+ responsesUrl: "https://api.githubcopilot.com/responses",
+ messagesUrl: "https://api.githubcopilot.com/v1/messages",
+ headers: {
+ "copilot-integration-id": "vscode-chat",
+ "editor-version": "vscode/1.110.0",
+ "editor-plugin-version": "copilot-chat/0.38.0",
+ "user-agent": "GitHubCopilotChat/0.38.0",
+ "openai-intent": "conversation-panel",
+ "x-github-api-version": "2025-04-01",
+ "x-vscode-user-agent-library-version": "electron-fetch",
+ "X-Initiator": "user",
+ Accept: "application/json",
+ "Content-Type": "application/json"
+ },
+ copilot: {
+ vscodeVersion: "1.110.0",
+ chatVersion: "0.38.0",
+ userAgent: "GitHubCopilotChat/0.38.0",
+ apiVersion: "2025-04-01"
+ },
+ usage: {
+ url: "https://api.github.com/copilot_internal/user"
+ }
+ },
+ models: [
+ {
+ id: "gpt-5.2",
+ name: "GPT-5.2"
+ },
+ {
+ id: "gpt-5.2-codex",
+ name: "GPT-5.2 Codex"
+ },
+ {
+ id: "gpt-5.3-codex",
+ name: "GPT-5.3 Codex"
+ },
+ {
+ id: "gpt-5.4",
+ name: "GPT-5.4"
+ },
+ {
+ id: "gpt-5.4-mini",
+ name: "GPT-5.4 Mini"
+ },
+ // Note: routing to Copilot's Anthropic-native /v1/messages shim (see
+ // executors/github.js) is decided by model-NAME pattern at request time, not by
+ // a static targetFormat field here — Copilot's live model catalog (see
+ // services/copilotModels.js) regularly exposes claude-* models this static list
+ // hasn't caught up with yet (e.g. claude-opus-4.8), and a static per-entry
+ // targetFormat would silently miss those while also double-translating requests
+ // for models that ARE listed here (chatCore.js would pre-translate to Claude
+ // shape, then the executor would translate again). Keep these as plain entries.
+ {
+ id: "claude-haiku-4.5",
+ name: "Claude Haiku 4.5"
+ },
+ {
+ id: "claude-opus-4.5",
+ name: "Claude Opus 4.5"
+ },
+ {
+ id: "claude-sonnet-4.5",
+ name: "Claude Sonnet 4.5"
+ },
+ {
+ id: "claude-sonnet-4.6",
+ name: "Claude Sonnet 4.6"
+ },
+ {
+ id: "claude-opus-4.6",
+ name: "Claude Opus 4.6"
+ },
+ {
+ id: "claude-opus-4.7",
+ name: "Claude Opus 4.7"
+ },
+ {
+ id: "gemini-2.5-pro",
+ name: "Gemini 2.5 Pro"
+ },
+ {
+ id: "gemini-3-flash-preview",
+ name: "Gemini 3 Flash"
+ },
+ {
+ id: "gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro"
+ },
+ {
+ id: "grok-code-fast-1",
+ name: "Grok Code Fast 1"
+ },
+ {
+ id: "oswe-vscode-prime",
+ name: "Raptor Mini"
+ },
+ {
+ id: "goldeneye-free-auto",
+ name: "GoldenEye"
+ },
+ {
+ id: "text-embedding-3-small",
+ name: "Text Embedding 3 Small (GitHub)",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-3-large",
+ name: "Text Embedding 3 Large (GitHub)",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://models.github.ai/inference/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ },
+ oauth: {
+ clientId: "Iv1.b507a08c87ecfe98",
+ authorizeUrl: "https://github.com/login/oauth/authorize",
+ deviceCodeUrl: "https://github.com/login/device/code",
+ tokenUrl: "https://github.com/login/oauth/access_token",
+ userInfoUrl: "https://api.github.com/user",
+ scopes: "read:user",
+ apiVersion: "2022-11-28",
+ copilotTokenUrl: "https://api.github.com/copilot_internal/v2/token",
+ userAgent: "GitHubCopilotChat/0.26.7",
+ editorVersion: "vscode/1.85.0",
+ editorPluginVersion: "copilot-chat/0.26.7"
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/gitlab.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "gitlab",
+ hidden: true,
+ priority: 100,
+ display: {
+ name: "GitLab Duo",
+ icon: "code",
+ color: "#FC6D26",
+ textIcon: "GL",
+ website: "https://gitlab.com",
+ notice: {
+ signupUrl: "https://gitlab.com"
+ }
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://gitlab.com/api/v4/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ oauth: {
+ defaultBaseUrl: "https://gitlab.com",
+ authorizeUrlPath: "/oauth/authorize",
+ tokenUrlPath: "/oauth/token",
+ userInfoUrlPath: "/api/v4/user",
+ scope: "api read_user",
+ codeChallengeMethod: "S256"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/glm-cn.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "glm-cn",
+ priority: 130,
+ alias: "glm-cn",
+ display: {
+ name: "GLM (China)",
+ icon: "code",
+ color: "#DC2626",
+ textIcon: "GC",
+ website: "https://open.bigmodel.cn",
+ notice: {
+ apiKeyUrl: "https://open.bigmodel.cn/usercenter/apikeys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",
+ headers: {},
+ usage: {
+ url: "https://open.bigmodel.cn/api/monitor/usage/quota/limit"
+ }
+ },
+ models: [
+ {
+ id: "glm-5.3",
+ name: "GLM 5.3"
+ },
+ {
+ id: "glm-5.2",
+ name: "GLM 5.2"
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM 5.1"
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM-4.7"
+ },
+ {
+ id: "glm-4.6",
+ name: "GLM-4.6"
+ },
+ {
+ id: "glm-4.5-air",
+ name: "GLM-4.5-Air"
+ }
+ ],
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/glm.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "glm",
+ priority: 140,
+ alias: "glm",
+ display: {
+ name: "GLM Coding",
+ icon: "code",
+ color: "#2563EB",
+ textIcon: "GL",
+ website: "https://open.bigmodel.cn",
+ notice: {
+ apiKeyUrl: "https://open.bigmodel.cn/usercenter/apikeys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.z.ai/api/anthropic/v1/messages",
+ format: "claude",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ },
+ usage: {
+ url: "https://api.z.ai/api/monitor/usage/quota/limit"
+ }
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://api.z.ai/api/coding/paas/v4/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://api.z.ai/api/anthropic/v1/messages",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "glm-5.3",
+ name: "GLM 5.3"
+ },
+ {
+ id: "glm-5.2",
+ name: "GLM 5.2"
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM 5.1"
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM 4.7"
+ },
+ {
+ id: "glm-4.6v",
+ name: "GLM 4.6V (Vision)"
+ }
+ ],
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/google-pse.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "google-pse",
+ alias: "gpse",
+ display: {
+ name: "Google PSE",
+ icon: "search",
+ color: "#4285F4",
+ textIcon: "GP",
+ website: "https://programmablesearchengine.google.com",
+ notice: {
+ apiKeyUrl: "https://programmablesearchengine.google.com/controlpanel/create"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch"
+ ],
+ searchConfig: {
+ baseUrl: "https://www.googleapis.com/customsearch/v1",
+ method: "GET",
+ authType: "apikey",
+ authHeader: "key",
+ costPerQuery: 0.005,
+ freeMonthlyQuota: 3000,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 10,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/google-tts.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "google-tts",
+ alias: "google-tts",
+ display: {
+ name: "Google TTS",
+ icon: "record_voice_over",
+ color: "#4285F4",
+ textIcon: "GT"
+ },
+ category: "freeTier",
+ authType: "none",
+ serviceKinds: [
+ "tts"
+ ],
+ mediaPriority: 5,
+ noAuth: true,
+ ttsConfig: {
+ baseUrl: "google-tts",
+ authType: "none",
+ authHeader: "none",
+ format: "google-tts",
+ models: []
+ }
+};
+}),
+"[project]/open-sse/providers/registry/grok-cli.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+/**
+ * Grok CLI / Grok Build (cli-chat-proxy.grok.com)
+ *
+ * Source of truth: wire capture of official @xai-official/grok 0.2.99
+ * talking to https://cli-chat-proxy.grok.com (OpenAI Responses API).
+ *
+ * Distinct from:
+ * - `xai` → api.x.ai (API key / xAI API OAuth PKCE)
+ * - `grok-web` → grok.com web SSO cookie
+ */ var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/config/grokCli.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "grok-cli",
+ priority: 275,
+ alias: "gcli",
+ aliases: [
+ "grok-build",
+ "gb"
+ ],
+ uiAlias: "gcli",
+ display: {
+ name: "Grok CLI (Grok Build)",
+ icon: "auto_awesome",
+ color: "#1DA1F2",
+ textIcon: "GC",
+ website: "https://x.ai",
+ notice: {
+ text: "Sign in with your xAI / Grok account via device code. Uses Grok Build subscription credits (cli-chat-proxy.grok.com).",
+ signupUrl: "https://grok.com/supergrok"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth"
+ ],
+ hasOAuth: true,
+ thinkingConfig: {
+ options: [
+ "low",
+ "medium",
+ "high",
+ "xhigh"
+ ],
+ defaultMode: "high"
+ },
+ transport: {
+ baseUrl: `${__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_BASE_URL"]}/responses`,
+ format: "openai-responses",
+ forceStream: true,
+ modelsUrl: `${__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_BASE_URL"]}/models`,
+ userUrl: `${__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_BASE_URL"]}/user`,
+ billingUrl: `${__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_BASE_URL"]}/billing`,
+ clientVersion: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_VERSION"],
+ clientIdentifier: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_CLIENT_IDENTIFIER"],
+ tokenAuth: "xai-grok-cli",
+ headers: {
+ "User-Agent": __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_USER_AGENT"],
+ "x-grok-client-identifier": __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_CLIENT_IDENTIFIER"],
+ "x-grok-client-version": __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_VERSION"]
+ },
+ // Quota tracker: official CLI polls billing?format=credits + user?include=subscription
+ usage: {
+ url: `${__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_BASE_URL"]}/billing?format=credits`,
+ userUrl: `${__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_BASE_URL"]}/user?include=subscription`
+ },
+ retry: {
+ 429: {
+ attempts: 2,
+ delayMs: 2000
+ },
+ 502: {
+ attempts: 2,
+ delayMs: 1500
+ },
+ 503: {
+ attempts: 2,
+ delayMs: 1500
+ }
+ }
+ },
+ models: [
+ {
+ id: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$grokCli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["GROK_CLI_MODEL"],
+ name: "Grok Build",
+ contextLength: 500000,
+ maxOutputTokens: 64000
+ },
+ {
+ id: "grok-4.5",
+ name: "Grok 4.5"
+ },
+ {
+ id: "grok-4.5-high",
+ name: "Grok 4.5 (High)",
+ upstreamModelId: "grok-4.5"
+ },
+ {
+ id: "grok-4.5-medium",
+ name: "Grok 4.5 (Medium)",
+ upstreamModelId: "grok-4.5"
+ },
+ {
+ id: "grok-4.5-low",
+ name: "Grok 4.5 (Low)",
+ upstreamModelId: "grok-4.5"
+ }
+ ],
+ features: {
+ usage: true
+ },
+ oauth: {
+ // Same public client_id as Grok CLI / existing xai OAuth
+ clientId: "b1a00492-073a-47ea-816f-4c329264a828",
+ deviceCodeUrl: "https://auth.x.ai/oauth2/device/code",
+ tokenUrl: "https://auth.x.ai/oauth2/token",
+ refreshUrl: "https://auth.x.ai/oauth2/token",
+ // HAR scope includes conversations read/write beyond the api-only xai scope
+ scope: "openid profile email offline_access grok-cli:access api:access conversations:read conversations:write",
+ referrer: "grok-build",
+ refreshLeadMs: 5 * 60 * 1000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/grok-web.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "grok-web",
+ priority: 150,
+ alias: "grok-web",
+ aliases: [
+ "gw"
+ ],
+ uiAlias: "gw",
+ display: {
+ name: "Grok Web (Subscription)",
+ icon: "auto_awesome",
+ color: "#1DA1F2",
+ textIcon: "GW",
+ website: "https://grok.com"
+ },
+ category: "webCookie",
+ authType: "cookie",
+ authHint: "Paste your sso= cookie value from grok.com",
+ transport: {
+ baseUrl: "https://grok.com/rest/app-chat/conversations/new",
+ format: "grok-web",
+ authType: "cookie"
+ },
+ models: [
+ {
+ id: "grok-3",
+ name: "Grok 3"
+ },
+ {
+ id: "grok-3-mini",
+ name: "Grok 3 Mini (Thinking)"
+ },
+ {
+ id: "grok-3-thinking",
+ name: "Grok 3 Thinking"
+ },
+ {
+ id: "grok-4",
+ name: "Grok 4"
+ },
+ {
+ id: "grok-4-mini",
+ name: "Grok 4 Mini (Thinking)"
+ },
+ {
+ id: "grok-4-thinking",
+ name: "Grok 4 Thinking"
+ },
+ {
+ id: "grok-4-heavy",
+ name: "Grok 4 Heavy (SuperGrok)"
+ },
+ {
+ id: "grok-4.1-mini",
+ name: "Grok 4.1 Mini (Thinking)"
+ },
+ {
+ id: "grok-4.1-fast",
+ name: "Grok 4.1 Fast"
+ },
+ {
+ id: "grok-4.1-expert",
+ name: "Grok 4.1 Expert"
+ },
+ {
+ id: "grok-4.1-thinking",
+ name: "Grok 4.1 Thinking"
+ },
+ {
+ id: "grok-4.2",
+ name: "Grok 4.2 (4.20 Beta)"
+ }
+ ],
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/groq.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "groq",
+ priority: 60,
+ hasFree: true,
+ alias: "groq",
+ display: {
+ name: "Groq",
+ icon: "speed",
+ color: "#F55036",
+ textIcon: "GQ",
+ website: "https://groq.com",
+ notice: {
+ apiKeyUrl: "https://console.groq.com/keys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.groq.com/openai/v1/chat/completions",
+ validateUrl: "https://api.groq.com/openai/v1/models"
+ },
+ models: [
+ {
+ id: "llama-3.3-70b-versatile",
+ name: "Llama 3.3 70B"
+ },
+ {
+ id: "meta-llama/llama-4-maverick-17b-128e-instruct",
+ name: "Llama 4 Maverick"
+ },
+ {
+ id: "qwen/qwen3-32b",
+ name: "Qwen3 32B"
+ },
+ {
+ id: "openai/gpt-oss-120b",
+ name: "GPT-OSS 120B"
+ },
+ {
+ id: "whisper-large-v3",
+ name: "Whisper Large v3",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "whisper-large-v3-turbo",
+ name: "Whisper Large v3 Turbo",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "distil-whisper-large-v3-en",
+ name: "Distil Whisper Large v3 EN",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "imageToText",
+ "stt"
+ ],
+ sttConfig: {
+ baseUrl: "https://api.groq.com/openai/v1/audio/transcriptions",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "openai"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/huggingface.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "huggingface",
+ priority: 70,
+ hasFree: true,
+ alias: "huggingface",
+ aliases: [
+ "hf"
+ ],
+ uiAlias: "hf",
+ display: {
+ name: "HuggingFace",
+ icon: "face",
+ color: "#FFD21E",
+ textIcon: "HF",
+ website: "https://huggingface.co",
+ notice: {
+ apiKeyUrl: "https://huggingface.co/settings/tokens"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ hiddenKinds: [
+ "tts"
+ ],
+ transport: null,
+ models: [
+ {
+ id: "black-forest-labs/FLUX.1-schnell",
+ name: "FLUX.1 Schnell",
+ params: [],
+ kind: "image"
+ },
+ {
+ id: "stabilityai/stable-diffusion-xl-base-1.0",
+ name: "SDXL Base 1.0",
+ params: [],
+ kind: "image"
+ },
+ {
+ id: "openai/whisper-large-v3",
+ name: "Whisper Large v3 (HF)",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "openai/whisper-small",
+ name: "Whisper Small (HF)",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ }
+ ],
+ serviceKinds: [
+ "image",
+ "stt"
+ ],
+ imageConfig: {
+ baseUrl: "https://api-inference.huggingface.co/models"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/hyperbolic.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "hyperbolic",
+ priority: 160,
+ alias: "hyperbolic",
+ aliases: [
+ "hyp"
+ ],
+ uiAlias: "hyp",
+ display: {
+ name: "Hyperbolic",
+ icon: "bolt",
+ color: "#00D4FF",
+ textIcon: "HY",
+ website: "https://hyperbolic.xyz",
+ notice: {
+ apiKeyUrl: "https://app.hyperbolic.xyz/settings"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.hyperbolic.xyz/v1/chat/completions",
+ validateUrl: "https://api.hyperbolic.xyz/v1/models"
+ },
+ models: [
+ {
+ id: "Qwen/QwQ-32B",
+ name: "QwQ 32B"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-R1",
+ name: "DeepSeek R1"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V3",
+ name: "DeepSeek V3"
+ },
+ {
+ id: "meta-llama/Llama-3.3-70B-Instruct",
+ name: "Llama 3.3 70B"
+ },
+ {
+ id: "meta-llama/Llama-3.2-3B-Instruct",
+ name: "Llama 3.2 3B"
+ },
+ {
+ id: "Qwen/Qwen2.5-72B-Instruct",
+ name: "Qwen 2.5 72B"
+ },
+ {
+ id: "Qwen/Qwen2.5-Coder-32B-Instruct",
+ name: "Qwen 2.5 Coder 32B"
+ },
+ {
+ id: "NousResearch/Hermes-3-Llama-3.1-70B",
+ name: "Hermes 3 70B"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/iflow.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "iflow",
+ hidden: true,
+ priority: 110,
+ alias: "if",
+ display: {
+ name: "iFlow AI",
+ icon: "water_drop",
+ color: "#6366F1",
+ website: "https://iflow.cn",
+ notice: {
+ signupUrl: "https://iflow.cn"
+ }
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://apis.iflow.cn/v1/chat/completions",
+ thinkingFormat: "openai",
+ headers: {
+ "User-Agent": "iFlow-Cli"
+ }
+ },
+ models: [
+ {
+ id: "qwen3-coder-plus",
+ name: "Qwen3 Coder Plus"
+ },
+ {
+ id: "qwen3-max",
+ name: "Qwen3 Max"
+ },
+ {
+ id: "qwen3-vl-plus",
+ name: "Qwen3 VL Plus"
+ },
+ {
+ id: "qwen3-max-preview",
+ name: "Qwen3 Max Preview"
+ },
+ {
+ id: "qwen3-235b",
+ name: "Qwen3 235B A22B"
+ },
+ {
+ id: "qwen3-235b-a22b-instruct",
+ name: "Qwen3 235B A22B Instruct"
+ },
+ {
+ id: "qwen3-235b-a22b-thinking-2507",
+ name: "Qwen3 235B A22B Thinking"
+ },
+ {
+ id: "qwen3-32b",
+ name: "Qwen3 32B"
+ },
+ {
+ id: "kimi-k2",
+ name: "Kimi K2"
+ },
+ {
+ id: "deepseek-v3.2",
+ name: "DeepSeek V3.2 Exp"
+ },
+ {
+ id: "deepseek-v3.1",
+ name: "DeepSeek V3.1 Terminus"
+ },
+ {
+ id: "deepseek-v3",
+ name: "DeepSeek V3 671B"
+ },
+ {
+ id: "deepseek-r1",
+ name: "DeepSeek R1"
+ },
+ {
+ id: "glm-4.7",
+ name: "GLM 4.7"
+ },
+ {
+ id: "iflow-rome-30ba3b",
+ name: "iFlow ROME"
+ }
+ ],
+ oauth: {
+ clientId: "10009311001",
+ clientSecret: "4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",
+ authorizeUrl: "https://iflow.cn/oauth",
+ tokenUrl: "https://iflow.cn/oauth/token",
+ userInfoUrl: "https://iflow.cn/api/oauth/getUserInfo",
+ extraParams: {
+ loginMethod: "phone",
+ type: "phone"
+ },
+ refreshLeadMs: 86400000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/index.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+// Auto-generated: static imports for all registry entries
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alicode$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/alicode-intl.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alicode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/alicode.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$anthropic$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/anthropic.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$antigravity$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/antigravity.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$assemblyai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/assemblyai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$aws$2d$polly$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/aws-polly.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$azure$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/azure.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$black$2d$forest$2d$labs$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/black-forest-labs.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$blackbox$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/blackbox.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$brave$2d$search$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/brave-search.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$byteplus$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/byteplus.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cartesia$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/cartesia.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cerebras$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/cerebras.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$chutes$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/chutes.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$claude$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/claude.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cline$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/cline.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$clinepass$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/clinepass.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cloudflare$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/cloudflare-ai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$codebuddy$2d$cn$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/codebuddy-cn.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$codex$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/codex.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cohere$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/cohere.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$comfyui$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/comfyui.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$commandcode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/commandcode.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$coqui$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/coqui.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cursor$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/cursor.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$deepgram$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/deepgram.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$deepseek$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/deepseek.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$edge$2d$tts$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/edge-tts.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$elevenlabs$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/elevenlabs.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$exa$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/exa.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$fal$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/fal-ai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$featherless$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/featherless.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$firecrawl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/firecrawl.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$fireworks$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/fireworks.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$gemini$2d$cli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/gemini-cli.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$gemini$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/gemini.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$github$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/github.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$gitlab$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/gitlab.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$glm$2d$cn$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/glm-cn.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$glm$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/glm.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$google$2d$pse$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/google-pse.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$google$2d$tts$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/google-tts.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$grok$2d$cli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/grok-cli.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$grok$2d$web$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/grok-web.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$groq$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/groq.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$huggingface$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/huggingface.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$hyperbolic$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/hyperbolic.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$iflow$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/iflow.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$inworld$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/inworld.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$jina$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/jina-ai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$jina$2d$reader$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/jina-reader.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kilocode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/kilocode.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kimchi$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/kimchi.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kimi$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/kimi.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kiro$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/kiro.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$linkup$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/linkup.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$local$2d$device$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/local-device.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$mimo$2d$free$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/mimo-free.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$minimax$2d$cn$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/minimax-cn.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$minimax$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/minimax.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$mistral$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/mistral.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$mmf$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/mmf.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$nanobanana$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/nanobanana.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$nebius$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/nebius.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$nvidia$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/nvidia.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$ollama$2d$local$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/ollama-local.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$ollama$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/ollama.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$openai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/openai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$opencode$2d$go$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/opencode-go.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$opencode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/opencode.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$openrouter$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/openrouter.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$perplexity$2d$web$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/perplexity-web.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$perplexity$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/perplexity.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$perplexity$2d$agent$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/perplexity-agent.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$playht$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/playht.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$qoder$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/qoder.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$recraft$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/recraft.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$runwayml$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/runwayml.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$sdwebui$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/sdwebui.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$searchapi$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/searchapi.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$searxng$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/searxng.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$serper$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/serper.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$siliconflow$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/siliconflow.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$stability$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/stability-ai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tavily$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/tavily.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$together$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/together.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$topaz$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/topaz.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tortoise$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/tortoise.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$venice$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/venice.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$vercel$2d$ai$2d$gateway$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/vercel-ai-gateway.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$vertex$2d$partner$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/vertex-partner.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$vertex$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/vertex.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$volcengine$2d$ark$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/volcengine-ark.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$voyage$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/voyage-ai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$xai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/xai.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$xiaomi$2d$mimo$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/xiaomi-mimo.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$xiaomi$2d$tokenplan$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/xiaomi-tokenplan.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$youcom$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/youcom.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alims$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/alims-intl.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$codebuddy$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/codebuddy-intl.js [instrumentation] (ecmascript)");
+// Temporarily hidden — no tool calling support (trae SOLO agent / windsurf gRPC skip ToolCallChunk).
+// Re-enable by uncommenting both the import and the array entry below.
+// import p102 from "./trae.js";
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$zed$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/zed.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$api$2d$airforce$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/api-airforce.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$baidu$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/baidu.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$bazaarlink$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/bazaarlink.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$bluesminds$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/bluesminds.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kilo$2d$gateway$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/kilo-gateway.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$llm7$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/llm7.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$sambanova$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/sambanova.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tencent$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/tencent.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$morph$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/morph.js [instrumentation] (ecmascript)");
+// import p114 from "./devin-cli.js";
+// import p104 from "./windsurf.js";
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$poolside$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/poolside.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tokenrouter$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/tokenrouter.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$selfhosted$2d$stt$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/selfhosted-stt.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$selfhosted$2d$tts$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/selfhosted-tts.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$selfhosted$2d$embedding$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/selfhosted-embedding.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$fish$2d$audio$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/fish-audio.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alitp$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/alitp-intl.js [instrumentation] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+const __TURBOPACK__default__export__ = [
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alicode$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alicode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$anthropic$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$antigravity$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$assemblyai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$aws$2d$polly$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$azure$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$black$2d$forest$2d$labs$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$blackbox$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$brave$2d$search$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$byteplus$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cartesia$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cerebras$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$chutes$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$claude$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cline$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$clinepass$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cloudflare$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$codebuddy$2d$cn$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$codex$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cohere$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$comfyui$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$commandcode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$coqui$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$cursor$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$deepgram$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$deepseek$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$edge$2d$tts$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$elevenlabs$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$exa$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$fal$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$featherless$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$firecrawl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$fireworks$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$gemini$2d$cli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$gemini$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$github$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$gitlab$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$glm$2d$cn$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$glm$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$google$2d$pse$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$google$2d$tts$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$grok$2d$cli$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$grok$2d$web$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$groq$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$huggingface$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$hyperbolic$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$iflow$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$inworld$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$jina$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$jina$2d$reader$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kilocode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kimchi$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kimi$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kiro$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$linkup$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$local$2d$device$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$mimo$2d$free$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$minimax$2d$cn$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$minimax$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$mistral$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$mmf$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$nanobanana$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$nebius$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$nvidia$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$ollama$2d$local$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$ollama$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$openai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$opencode$2d$go$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$opencode$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$openrouter$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$perplexity$2d$web$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$perplexity$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$perplexity$2d$agent$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$playht$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$qoder$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$recraft$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$runwayml$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$sdwebui$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$searchapi$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$searxng$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$serper$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$siliconflow$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$stability$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tavily$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$together$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$topaz$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tortoise$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$venice$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$vercel$2d$ai$2d$gateway$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$vertex$2d$partner$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$vertex$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$volcengine$2d$ark$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$voyage$2d$ai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$xai$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$xiaomi$2d$mimo$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$xiaomi$2d$tokenplan$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$youcom$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alims$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$codebuddy$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ // p102, // trae — hidden, no tool calling
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$zed$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$api$2d$airforce$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$baidu$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$bazaarlink$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$bluesminds$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$kilo$2d$gateway$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$llm7$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$sambanova$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tencent$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$morph$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ // p114, // devin-cli — hidden, spawns local agent with shell/fs access
+ // p104, // windsurf — hidden, no tool calling
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$poolside$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$tokenrouter$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$selfhosted$2d$stt$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$selfhosted$2d$tts$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$selfhosted$2d$embedding$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$fish$2d$audio$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$alitp$2d$intl$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"]
+];
+}),
+"[project]/open-sse/providers/registry/inworld.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "inworld",
+ alias: "inworld",
+ display: {
+ name: "Inworld TTS",
+ icon: "record_voice_over",
+ color: "#FF6B6B",
+ textIcon: "IW",
+ website: "https://inworld.ai",
+ notice: {
+ text: "Free tier: 40 minutes/month TTS. Paid: TTS-1.5 Mini $0.01/min ($15/1M chars), TTS-1.5 Max $0.025/min ($30/1M chars). 270+ voices, 15 languages.",
+ apiKeyUrl: "https://platform.inworld.ai/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.inworld.ai/tts/v1/voice",
+ authType: "apikey",
+ authHeader: "basic",
+ format: "inworld",
+ models: [
+ {
+ id: "inworld-tts-1.5-mini",
+ name: "Inworld TTS 1.5 Mini ($0.01/min)"
+ },
+ {
+ id: "inworld-tts-1.5-max",
+ name: "Inworld TTS 1.5 Max ($0.025/min)"
+ }
+ ]
+ }
+};
+}),
+"[project]/open-sse/providers/registry/jina-ai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "jina-ai",
+ alias: "jina",
+ display: {
+ name: "Jina AI",
+ icon: "blur_on",
+ color: "#2563EB",
+ textIcon: "JA",
+ website: "https://jina.ai",
+ notice: {
+ text: "10M free tokens on signup (non-commercial), no credit card required.",
+ apiKeyUrl: "https://jina.ai/?sui=apikey"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.jina.ai/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer",
+ models: [
+ {
+ id: "jina-embeddings-v3",
+ name: "Jina Embeddings v3",
+ dimensions: 1024
+ },
+ {
+ id: "jina-embeddings-v2-base-en",
+ name: "Jina Embeddings v2 Base EN",
+ dimensions: 768
+ },
+ {
+ id: "jina-embeddings-v2-base-code",
+ name: "Jina Embeddings v2 Base Code",
+ dimensions: 768
+ }
+ ]
+ }
+};
+}),
+"[project]/open-sse/providers/registry/jina-reader.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "jina-reader",
+ alias: "jina-reader",
+ display: {
+ name: "Jina Reader",
+ icon: "menu_book",
+ color: "#000000",
+ textIcon: "JR",
+ website: "https://jina.ai/reader",
+ notice: {
+ apiKeyUrl: "https://jina.ai/?sui=apikey"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webFetch"
+ ],
+ fetchConfig: {
+ baseUrl: "https://r.jina.ai",
+ method: "GET",
+ authType: "apikey",
+ authHeader: "bearer",
+ costPerQuery: 0,
+ freeMonthlyQuota: 1000000,
+ formats: [
+ "markdown",
+ "text",
+ "html"
+ ],
+ maxCharacters: 200000,
+ timeoutMs: 30000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/kilo-gateway.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "kilo-gateway",
+ alias: "kgw",
+ aliases: [
+ "kilo-gateway",
+ "kilogateway"
+ ],
+ uiAlias: "kgw",
+ category: "freeTier",
+ display: {
+ name: "Kilo Gateway",
+ icon: "login",
+ color: "#8B5CF6",
+ textIcon: "KG",
+ website: "https://kilo.ai",
+ notice: {
+ apiKeyUrl: "https://kilo.ai/dashboard?tab=apiKeys"
+ }
+ },
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.kilo.ai/api/gateway/chat/completions",
+ validateUrl: "https://api.kilo.ai/api/gateway/models"
+ },
+ models: [
+ {
+ id: "kilo-auto/free",
+ name: "Kilo Auto Free",
+ contextLength: 256000
+ },
+ {
+ id: "nvidia/nemotron-3-super-120b-a12b:free",
+ name: "Nemotron 3 Super 120B (Free)",
+ contextLength: 262144
+ },
+ {
+ id: "nvidia/nemotron-3-ultra-550b-a55b:free",
+ name: "Nemotron 3 Ultra 550B (Free)",
+ contextLength: 1000000
+ },
+ {
+ id: "kwaipilot/kat-coder-pro-v2.5:free",
+ name: "Kat Coder Pro v2.5 (Free)",
+ contextLength: 256000
+ },
+ {
+ id: "kilo-auto/frontier",
+ name: "Kilo Auto Frontier",
+ contextLength: 1000000
+ },
+ {
+ id: "kilo-auto/balanced",
+ name: "Kilo Auto Balanced",
+ contextLength: 1000000
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/kilocode.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "kilocode",
+ priority: 70,
+ alias: "kc",
+ uiAlias: "kc",
+ display: {
+ name: "Kilo Code",
+ icon: "code",
+ color: "#FF6B35",
+ textIcon: "KC",
+ website: "https://kilocode.ai",
+ notice: {
+ signupUrl: "https://kilocode.ai"
+ }
+ },
+ category: "oauth",
+ transport: {
+ baseUrl: "https://api.kilo.ai/api/openrouter/chat/completions",
+ headers: {},
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer",
+ hooks: [
+ "kilocodeOrg"
+ ]
+ }
+ },
+ models: [
+ {
+ id: "anthropic/claude-sonnet-4-20250514",
+ name: "Claude Sonnet 4"
+ },
+ {
+ id: "anthropic/claude-opus-4-20250514",
+ name: "Claude Opus 4"
+ },
+ {
+ id: "google/gemini-2.5-pro",
+ name: "Gemini 2.5 Pro"
+ },
+ {
+ id: "google/gemini-2.5-flash",
+ name: "Gemini 2.5 Flash"
+ },
+ {
+ id: "openai/gpt-4.1",
+ name: "GPT-4.1"
+ },
+ {
+ id: "openai/o3",
+ name: "o3"
+ },
+ {
+ id: "deepseek/deepseek-chat",
+ name: "DeepSeek Chat"
+ },
+ {
+ id: "deepseek/deepseek-reasoner",
+ name: "DeepSeek Reasoner"
+ }
+ ],
+ // Kilo Code proxies the OpenRouter catalog (334 models at time of writing),
+ // so the hardcoded list above is only a fallback. Surfacing the full catalog
+ // requires a fetcher + passthroughModels, matching how openrouter.js is set up.
+ // Without these, only the 8 hardcoded models appear in the combo model picker,
+ // hiding dynamic models like cohere/north-mini-code:free and poolside/laguna-m.1:free.
+ modelsFetcher: {
+ url: "https://api.kilo.ai/api/gateway/models",
+ type: "openrouter-free"
+ },
+ passthroughModels: true,
+ oauth: {
+ apiBaseUrl: "https://api.kilo.ai",
+ initiateUrl: "https://api.kilo.ai/api/device-auth/codes",
+ pollUrlBase: "https://api.kilo.ai/api/device-auth/codes"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/kimchi.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "kimchi",
+ priority: 95,
+ alias: "kimchi",
+ uiAlias: "kimchi",
+ display: {
+ name: "Kimchi",
+ icon: "restaurant",
+ color: "#FF521D",
+ textIcon: "KC",
+ website: "https://kimchi.dev",
+ notice: {
+ signupUrl: "https://app.kimchi.dev"
+ }
+ },
+ category: "freeTier",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ transport: {
+ baseUrl: "https://llm.kimchi.dev/openai/v1/chat/completions",
+ format: "openai",
+ headers: {
+ "User-Agent": "kimchi/0.1.50"
+ },
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ models: [
+ {
+ id: "minimax-m3",
+ name: "MiniMax-M3"
+ },
+ {
+ id: "kimi-k2.7",
+ name: "Kimi-K2.7"
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi-K2.6"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi-K2.5"
+ },
+ {
+ id: "nemotron-3-ultra-fp4",
+ name: "Nemotron 3 Ultra FP4"
+ },
+ {
+ id: "minimax-m2.7",
+ name: "MiniMax-M2.7"
+ },
+ {
+ id: "claude-opus-4-6",
+ name: "Claude Opus 4.6"
+ },
+ {
+ id: "claude-sonnet-4-6",
+ name: "Claude Sonnet 4.6"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "imageToText"
+ ],
+ oauth: {
+ webAppUrl: "https://app.kimchi.dev",
+ validationUrl: "https://api.cast.ai/v1/llm/openai/supported-providers",
+ userInfoUrl: "https://app.kimchi.dev/api/v1/me",
+ modelsUrl: "https://llm.kimchi.dev/v1/models/metadata?include_in_cli=true"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/kimi.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "kimi",
+ priority: 170,
+ alias: "kimi",
+ // Legacy id + short alias from former kimi-coding registry entry
+ aliases: [
+ "kimi-coding",
+ "kmc"
+ ],
+ display: {
+ name: "Kimi",
+ icon: "psychology",
+ color: "#1E3A8A",
+ textIcon: "KM",
+ website: "https://kimi.moonshot.cn",
+ notice: {
+ apiKeyUrl: "https://platform.moonshot.ai/console/api-keys",
+ signupUrl: "https://www.kimi.com/code"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ transport: {
+ baseUrl: "https://api.kimi.com/coding/v1/messages",
+ format: "claude",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ clientId: "17e5f671-d194-4dfb-9706-5516cb48c098",
+ tokenUrl: "https://auth.kimi.com/api/oauth/token",
+ refreshUrl: "https://auth.kimi.com/api/oauth/token",
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw",
+ hooks: [
+ "kimiHeaders"
+ ]
+ }
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://api.kimi.com/coding/v1/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer",
+ hooks: [
+ "kimiHeaders"
+ ]
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://api.kimi.com/coding/v1/messages",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw",
+ hooks: [
+ "kimiHeaders"
+ ]
+ }
+ }
+ ],
+ models: [
+ // Flagship K3 — platform.kimi.ai id `kimi-k3`, Kimi Code OAuth id `k3` (up to 1M)
+ {
+ id: "kimi-k3",
+ name: "Kimi K3"
+ },
+ {
+ id: "k3",
+ name: "Kimi K3 (Code)"
+ },
+ // Kimi Code subscription stable ids (map to K2.7 Code backend)
+ {
+ id: "kimi-for-coding",
+ name: "Kimi for Coding"
+ },
+ {
+ id: "kimi-for-coding-highspeed",
+ name: "Kimi for Coding Highspeed"
+ },
+ // Pay-as-you-go platform ids
+ {
+ id: "kimi-k2.7-code",
+ name: "Kimi K2.7 Code"
+ },
+ {
+ id: "kimi-k2.7-code-highspeed",
+ name: "Kimi K2.7 Code Highspeed"
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "kimi-k2.5-thinking",
+ name: "Kimi K2.5 Thinking"
+ },
+ {
+ id: "kimi-latest",
+ name: "Kimi Latest"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "webSearch"
+ ],
+ searchViaChat: {
+ defaultModel: "kimi-k3",
+ endpoint: "https://api.moonshot.cn/v1/chat/completions",
+ pricingUrl: "https://platform.kimi.ai/docs/pricing/chat"
+ },
+ oauth: {
+ clientId: "17e5f671-d194-4dfb-9706-5516cb48c098",
+ deviceCodeUrl: "https://auth.kimi.com/api/oauth/device_authorization",
+ tokenUrl: "https://auth.kimi.com/api/oauth/token",
+ refreshUrl: "https://auth.kimi.com/api/oauth/token",
+ // CLIProxyAPI refreshThresholdSeconds = 300
+ refreshLeadMs: 300000,
+ authorizeDeviceUrl: "https://www.kimi.com/code/authorize_device"
+ },
+ features: {
+ usage: true,
+ // API-key connections also hit /v1/usages (x-api-key) — need usageApikey
+ // so isUsageEligible + /api/usage allow non-oauth authType.
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/kiro.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "kiro",
+ priority: 10,
+ alias: "kr",
+ uiAlias: "kr",
+ display: {
+ name: "Kiro AI",
+ icon: "psychology_alt",
+ color: "#FF6B35",
+ website: "https://kiro.dev",
+ notice: {
+ signupUrl: "https://kiro.dev"
+ },
+ deprecated: true,
+ deprecationNotice: "RISK_NOTICE"
+ },
+ category: "free",
+ transport: {
+ baseUrl: "https://runtime.us-east-1.kiro.dev/generateAssistantResponse",
+ baseUrls: [
+ "https://runtime.us-east-1.kiro.dev/generateAssistantResponse",
+ "https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",
+ "https://q.us-east-1.amazonaws.com/generateAssistantResponse"
+ ],
+ format: "kiro",
+ retry: {
+ "429": 0
+ },
+ headers: {
+ "Content-Type": "application/json",
+ Accept: "application/vnd.amazon.eventstream",
+ "User-Agent": "AWS-SDK-JS/3.0.0 kiro-ide/1.0.0",
+ "X-Amz-User-Agent": "aws-sdk-js/3.0.0 kiro-ide/1.0.0"
+ },
+ tokenUrl: "https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",
+ authUrl: "https://prod.us-east-1.auth.desktop.kiro.dev",
+ usage: {
+ cwHost: "https://codewhisperer.us-east-1.amazonaws.com",
+ qHost: "https://q.us-east-1.amazonaws.com",
+ limitsPath: "/getUsageLimits"
+ }
+ },
+ models: [
+ // Opus (added per kiro.dev/changelog/models and kiro.dev/docs/models)
+ {
+ id: "claude-opus-5",
+ name: "Claude Opus 5"
+ },
+ {
+ id: "claude-opus-5-thinking",
+ name: "Claude Opus 5 (Thinking)"
+ },
+ {
+ id: "claude-opus-5-agentic",
+ name: "Claude Opus 5 (Agentic)"
+ },
+ {
+ id: "claude-opus-5-thinking-agentic",
+ name: "Claude Opus 5 (Thinking + Agentic)"
+ },
+ {
+ id: "claude-opus-4.8",
+ name: "Claude Opus 4.8"
+ },
+ {
+ id: "claude-opus-4.8-thinking",
+ name: "Claude Opus 4.8 (Thinking)"
+ },
+ {
+ id: "claude-opus-4.8-agentic",
+ name: "Claude Opus 4.8 (Agentic)"
+ },
+ {
+ id: "claude-opus-4.8-thinking-agentic",
+ name: "Claude Opus 4.8 (Thinking + Agentic)"
+ },
+ {
+ id: "claude-opus-4.7",
+ name: "Claude Opus 4.7"
+ },
+ {
+ id: "claude-opus-4.7-thinking",
+ name: "Claude Opus 4.7 (Thinking)"
+ },
+ {
+ id: "claude-opus-4.7-agentic",
+ name: "Claude Opus 4.7 (Agentic)"
+ },
+ {
+ id: "claude-opus-4.7-thinking-agentic",
+ name: "Claude Opus 4.7 (Thinking + Agentic)"
+ },
+ {
+ id: "claude-opus-4.5",
+ name: "Claude Opus 4.5"
+ },
+ {
+ id: "claude-opus-4.5-thinking",
+ name: "Claude Opus 4.5 (Thinking)"
+ },
+ {
+ id: "claude-opus-4.5-agentic",
+ name: "Claude Opus 4.5 (Agentic)"
+ },
+ {
+ id: "claude-opus-4.5-thinking-agentic",
+ name: "Claude Opus 4.5 (Thinking + Agentic)"
+ },
+ // Sonnet
+ {
+ id: "claude-sonnet-5",
+ name: "Claude Sonnet 5"
+ },
+ {
+ id: "claude-sonnet-4.5",
+ name: "Claude Sonnet 4.5"
+ },
+ // Haiku
+ {
+ id: "claude-haiku-4.5",
+ name: "Claude Haiku 4.5"
+ },
+ // Non-Anthropic
+ {
+ id: "deepseek-3.2",
+ name: "DeepSeek 3.2",
+ strip: [
+ "image",
+ "audio"
+ ]
+ },
+ {
+ id: "qwen3-coder-next",
+ name: "Qwen3 Coder Next",
+ strip: [
+ "image",
+ "audio"
+ ]
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "gpt-5.6-sol",
+ name: "GPT 5.6 Sol",
+ contextLength: 272000,
+ rateMultiplier: 2.4,
+ upstreamModelId: "gpt-5.6-sol",
+ description: "Experimental preview of OpenAI GPT 5.6 Sol with 272k context window"
+ },
+ {
+ id: "gpt-5.6-terra",
+ name: "GPT 5.6 Terra",
+ contextLength: 272000,
+ rateMultiplier: 1.2,
+ upstreamModelId: "gpt-5.6-terra",
+ description: "Experimental preview of OpenAI GPT 5.6 Terra with 272k context window"
+ },
+ {
+ id: "gpt-5.6-luna",
+ name: "GPT 5.6 Luna",
+ contextLength: 272000,
+ rateMultiplier: 0.6,
+ upstreamModelId: "gpt-5.6-luna",
+ description: "Experimental preview of OpenAI GPT 5.6 Luna with 272k context window"
+ },
+ // Thinking variants
+ {
+ id: "claude-sonnet-5-thinking",
+ name: "Claude Sonnet 5 (Thinking)"
+ },
+ {
+ id: "claude-sonnet-4.5-thinking",
+ name: "Claude Sonnet 4.5 (Thinking)"
+ },
+ {
+ id: "claude-haiku-4.5-thinking",
+ name: "Claude Haiku 4.5 (Thinking)"
+ },
+ {
+ id: "gpt-5.6-sol-thinking",
+ name: "GPT 5.6 Sol (Thinking)",
+ contextLength: 272000,
+ rateMultiplier: 2.4,
+ upstreamModelId: "gpt-5.6-sol",
+ description: "Experimental preview of OpenAI GPT 5.6 Sol with 272k context window"
+ },
+ {
+ id: "gpt-5.6-terra-thinking",
+ name: "GPT 5.6 Terra (Thinking)",
+ contextLength: 272000,
+ rateMultiplier: 1.2,
+ upstreamModelId: "gpt-5.6-terra",
+ description: "Experimental preview of OpenAI GPT 5.6 Terra with 272k context window"
+ },
+ {
+ id: "gpt-5.6-luna-thinking",
+ name: "GPT 5.6 Luna (Thinking)",
+ contextLength: 272000,
+ rateMultiplier: 0.6,
+ upstreamModelId: "gpt-5.6-luna",
+ description: "Experimental preview of OpenAI GPT 5.6 Luna with 272k context window"
+ },
+ // Agentic variants
+ {
+ id: "claude-sonnet-5-agentic",
+ name: "Claude Sonnet 5 (Agentic)"
+ },
+ {
+ id: "claude-sonnet-4.5-agentic",
+ name: "Claude Sonnet 4.5 (Agentic)"
+ },
+ {
+ id: "claude-haiku-4.5-agentic",
+ name: "Claude Haiku 4.5 (Agentic)"
+ },
+ {
+ id: "gpt-5.6-sol-agentic",
+ name: "GPT 5.6 Sol (Agentic)",
+ contextLength: 272000,
+ rateMultiplier: 2.4,
+ upstreamModelId: "gpt-5.6-sol",
+ description: "Experimental preview of OpenAI GPT 5.6 Sol with 272k context window"
+ },
+ {
+ id: "gpt-5.6-terra-agentic",
+ name: "GPT 5.6 Terra (Agentic)",
+ contextLength: 272000,
+ rateMultiplier: 1.2,
+ upstreamModelId: "gpt-5.6-terra",
+ description: "Experimental preview of OpenAI GPT 5.6 Terra with 272k context window"
+ },
+ {
+ id: "gpt-5.6-luna-agentic",
+ name: "GPT 5.6 Luna (Agentic)",
+ contextLength: 272000,
+ rateMultiplier: 0.6,
+ upstreamModelId: "gpt-5.6-luna",
+ description: "Experimental preview of OpenAI GPT 5.6 Luna with 272k context window"
+ },
+ // Thinking + Agentic variants
+ {
+ id: "claude-sonnet-5-thinking-agentic",
+ name: "Claude Sonnet 5 (Thinking + Agentic)"
+ },
+ {
+ id: "claude-sonnet-4.5-thinking-agentic",
+ name: "Claude Sonnet 4.5 (Thinking + Agentic)"
+ },
+ {
+ id: "claude-haiku-4.5-thinking-agentic",
+ name: "Claude Haiku 4.5 (Thinking + Agentic)"
+ },
+ {
+ id: "gpt-5.6-sol-thinking-agentic",
+ name: "GPT 5.6 Sol (Thinking + Agentic)",
+ contextLength: 272000,
+ rateMultiplier: 2.4,
+ upstreamModelId: "gpt-5.6-sol",
+ description: "Experimental preview of OpenAI GPT 5.6 Sol with 272k context window"
+ },
+ {
+ id: "gpt-5.6-terra-thinking-agentic",
+ name: "GPT 5.6 Terra (Thinking + Agentic)",
+ contextLength: 272000,
+ rateMultiplier: 1.2,
+ upstreamModelId: "gpt-5.6-terra",
+ description: "Experimental preview of OpenAI GPT 5.6 Terra with 272k context window"
+ },
+ {
+ id: "gpt-5.6-luna-thinking-agentic",
+ name: "GPT 5.6 Luna (Thinking + Agentic)",
+ contextLength: 272000,
+ rateMultiplier: 0.6,
+ upstreamModelId: "gpt-5.6-luna",
+ description: "Experimental preview of OpenAI GPT 5.6 Luna with 272k context window"
+ }
+ ],
+ oauth: {
+ ssoOidcEndpoint: "https://oidc.us-east-1.amazonaws.com",
+ registerClientUrl: "https://oidc.us-east-1.amazonaws.com/client/register",
+ deviceAuthUrl: "https://oidc.us-east-1.amazonaws.com/device_authorization",
+ tokenUrl: "https://oidc.us-east-1.amazonaws.com/token",
+ startUrl: "https://view.awsapps.com/start",
+ clientName: "kiro-oauth-client",
+ clientType: "public",
+ scopes: [
+ "codewhisperer:completions",
+ "codewhisperer:analysis",
+ "codewhisperer:conversations"
+ ],
+ grantTypes: [
+ "urn:ietf:params:oauth:grant-type:device_code",
+ "refresh_token"
+ ],
+ issuerUrl: "https://identitycenter.amazonaws.com/ssoins-722374e8c3c8e6c6",
+ socialAuthEndpoint: "https://prod.us-east-1.auth.desktop.kiro.dev",
+ socialLoginUrl: "https://prod.us-east-1.auth.desktop.kiro.dev/login",
+ socialTokenUrl: "https://prod.us-east-1.auth.desktop.kiro.dev/oauth/token",
+ socialRefreshUrl: "https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",
+ authMethods: [
+ "builder-id",
+ "idc",
+ "google",
+ "github",
+ "import"
+ ]
+ },
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/linkup.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "linkup",
+ alias: "linkup",
+ display: {
+ name: "Linkup",
+ icon: "link",
+ color: "#0EA5E9",
+ textIcon: "LK",
+ website: "https://linkup.so",
+ notice: {
+ apiKeyUrl: "https://app.linkup.so/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch"
+ ],
+ searchConfig: {
+ baseUrl: "https://api.linkup.so/v1/search",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "bearer",
+ costPerQuery: 0.005,
+ freeMonthlyQuota: 1000,
+ searchTypes: [
+ "web"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 50,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/llm7.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "llm7",
+ alias: "llm7",
+ aliases: [
+ "llm-7"
+ ],
+ uiAlias: "llm7",
+ display: {
+ name: "LLM7",
+ icon: "pool",
+ color: "#7C3AED",
+ textIcon: "L7",
+ website: "https://llm7.io",
+ notice: {
+ apiKeyUrl: "https://llm7.io"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.llm7.io/v1/chat/completions",
+ validateUrl: "https://api.llm7.io/v1/models"
+ },
+ models: [
+ {
+ id: "gpt-5.5",
+ name: "GPT-5.5 (LLM7)",
+ contextLength: 1050000
+ },
+ {
+ id: "claude-opus-5",
+ name: "Claude Opus 5 (LLM7)",
+ contextLength: 1000000
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek V4 Flash (LLM7)",
+ contextLength: 1000000
+ },
+ {
+ id: "grok-4.5",
+ name: "Grok 4.5 (LLM7)",
+ contextLength: 500000
+ },
+ {
+ id: "kimi-k3",
+ name: "Kimi K3 (LLM7)",
+ contextLength: 1000000
+ }
+ ],
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/local-device.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "local-device",
+ alias: "local-device",
+ display: {
+ name: "Local Device",
+ icon: "speaker",
+ color: "#64748B",
+ textIcon: "LD"
+ },
+ category: "freeTier",
+ authType: "none",
+ serviceKinds: [
+ "tts"
+ ],
+ mediaPriority: 5,
+ noAuth: true,
+ ttsConfig: {
+ baseUrl: "local-device",
+ authType: "none",
+ authHeader: "none",
+ format: "local-device",
+ models: []
+ }
+};
+}),
+"[project]/open-sse/providers/registry/mimo-free.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Xiaomi ended the free MiMo channel ("MiMo free API service has ended").
+// Hidden until/unless a replacement (OAuth MiMo Platform) is wired.
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "mimo-free",
+ hidden: true,
+ priority: 50,
+ hasFree: true,
+ alias: "mmf",
+ uiAlias: "mmf",
+ display: {
+ name: "MiMo Code Free",
+ icon: "smart_toy",
+ color: "#FF6900",
+ textIcon: "MF"
+ },
+ category: "free",
+ noAuth: true,
+ transport: {
+ baseUrl: "https://api.xiaomimimo.com/api/free-ai/openai/chat",
+ noAuth: true
+ },
+ models: [
+ {
+ id: "mimo-auto",
+ name: "MiMo Auto"
+ }
+ ],
+ modelsFetcher: {
+ url: "https://models.dev/api.json",
+ type: "mimo-free"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/minimax-cn.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "minimax-cn",
+ priority: 190,
+ alias: "minimax-cn",
+ display: {
+ name: "Minimax (China)",
+ icon: "memory",
+ color: "#DC2626",
+ textIcon: "MC",
+ website: "https://www.minimaxi.com",
+ notice: {
+ apiKeyUrl: "https://platform.minimaxi.com/user-center/basic-information/interface-key"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.minimaxi.com/anthropic/v1/messages",
+ format: "claude",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ quirks: {
+ dropOutputConfig: true
+ },
+ reasoningInject: {
+ scope: "all"
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ },
+ usage: {
+ urls: [
+ "https://www.minimaxi.com/v1/api/openplatform/coding_plan/remains",
+ "https://api.minimaxi.com/v1/api/openplatform/coding_plan/remains"
+ ]
+ }
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://api.minimaxi.com/v1/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://api.minimaxi.com/anthropic/v1/messages",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "MiniMax-M3",
+ name: "MiniMax M3",
+ targetFormat: "claude"
+ },
+ {
+ id: "MiniMax-M2.7",
+ name: "MiniMax M2.7"
+ },
+ {
+ id: "MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "MiniMax-M2.1",
+ name: "MiniMax M2.1"
+ },
+ {
+ id: "speech-2.8-hd",
+ name: "Speech 2.8 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-2.8-turbo",
+ name: "Speech 2.8 Turbo",
+ kind: "tts"
+ },
+ {
+ id: "speech-2.6-hd",
+ name: "Speech 2.6 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-2.6-turbo",
+ name: "Speech 2.6 Turbo",
+ kind: "tts"
+ },
+ {
+ id: "speech-02-hd",
+ name: "Speech 02 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-02-turbo",
+ name: "Speech 02 Turbo",
+ kind: "tts"
+ },
+ {
+ id: "speech-01-hd",
+ name: "Speech 01 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-01-turbo",
+ name: "Speech 01 Turbo",
+ kind: "tts"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.minimaxi.com/v1/t2a_v2",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "minimax-tts"
+ },
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/minimax.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "minimax",
+ priority: 90,
+ alias: "minimax",
+ display: {
+ name: "Minimax Coding",
+ icon: "memory",
+ color: "#7C3AED",
+ textIcon: "MM",
+ website: "https://www.minimaxi.com",
+ notice: {
+ apiKeyUrl: "https://platform.minimaxi.com/user-center/basic-information/interface-key"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.minimax.io/anthropic/v1/messages",
+ format: "claude",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ quirks: {
+ dropOutputConfig: true
+ },
+ reasoningInject: {
+ scope: "all"
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ },
+ usage: {
+ urls: [
+ "https://www.minimax.io/v1/token_plan/remains",
+ "https://api.minimax.io/v1/api/openplatform/coding_plan/remains"
+ ]
+ }
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://api.minimax.io/v1/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://api.minimax.io/anthropic/v1/messages",
+ urlSuffix: "?beta=true",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "MiniMax-M3",
+ name: "MiniMax M3",
+ targetFormat: "claude"
+ },
+ {
+ id: "MiniMax-M2.7",
+ name: "MiniMax M2.7"
+ },
+ {
+ id: "MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "MiniMax-M2.1",
+ name: "MiniMax M2.1"
+ },
+ {
+ id: "minimax-image-01",
+ name: "MiniMax Image 01",
+ params: [
+ "n",
+ "size",
+ "response_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "speech-2.8-hd",
+ name: "Speech 2.8 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-2.8-turbo",
+ name: "Speech 2.8 Turbo",
+ kind: "tts"
+ },
+ {
+ id: "speech-2.6-hd",
+ name: "Speech 2.6 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-2.6-turbo",
+ name: "Speech 2.6 Turbo",
+ kind: "tts"
+ },
+ {
+ id: "speech-02-hd",
+ name: "Speech 02 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-02-turbo",
+ name: "Speech 02 Turbo",
+ kind: "tts"
+ },
+ {
+ id: "speech-01-hd",
+ name: "Speech 01 HD",
+ kind: "tts"
+ },
+ {
+ id: "speech-01-turbo",
+ name: "Speech 01 Turbo",
+ kind: "tts"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "image",
+ "imageToText",
+ "webSearch",
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.minimax.io/v1/t2a_v2",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "minimax-tts"
+ },
+ imageConfig: {
+ baseUrl: "https://api.minimaxi.com/v1/images/generations"
+ },
+ searchViaChat: {
+ defaultModel: "MiniMax-M2.7",
+ endpoint: "https://api.minimaxi.com/v1/text/chatcompletion_v2",
+ pricingUrl: "https://www.minimaxi.com/document/price"
+ },
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/mistral.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "mistral",
+ priority: 80,
+ alias: "mistral",
+ display: {
+ name: "Mistral",
+ icon: "air",
+ color: "#FF7000",
+ textIcon: "MI",
+ website: "https://mistral.ai",
+ notice: {
+ apiKeyUrl: "https://console.mistral.ai/api-keys"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.mistral.ai/v1/chat/completions",
+ validateUrl: "https://api.mistral.ai/v1/models",
+ quirks: {
+ dropClientMetadata: true
+ }
+ },
+ models: [
+ {
+ id: "mistral-large-latest",
+ name: "Mistral Large 3"
+ },
+ {
+ id: "codestral-latest",
+ name: "Codestral"
+ },
+ {
+ id: "mistral-medium-latest",
+ name: "Mistral Medium 3"
+ },
+ {
+ id: "mistral-embed",
+ name: "Mistral Embed",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "imageToText",
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.mistral.ai/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/mmf.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "mmf",
+ hidden: true,
+ priority: 200,
+ display: {
+ name: "MMF",
+ icon: "hub",
+ color: "#6366F1",
+ textIcon: "MF"
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.xiaomimimo.com/api/free-ai/openai/chat",
+ noAuth: true
+ },
+ models: [
+ {
+ id: "mimo-auto",
+ name: "MiMo Auto"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/morph.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "morph",
+ alias: "morph",
+ aliases: [
+ "morphllm"
+ ],
+ uiAlias: "morph",
+ display: {
+ name: "Morph",
+ icon: "change_history",
+ color: "#14B8A6",
+ textIcon: "MP",
+ website: "https://morphllm.com",
+ notice: {
+ apiKeyUrl: "https://morphllm.com"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.morphllm.com/v1/chat/completions",
+ validateUrl: "https://api.morphllm.com/v1/models"
+ },
+ models: [
+ {
+ id: "morph-v3-large",
+ name: "Morph v3 Large"
+ },
+ {
+ id: "morph-v3-fast",
+ name: "Morph v3 Fast"
+ },
+ {
+ id: "morph-qwen35-397b",
+ name: "Qwen 3.5 397B (Morph)",
+ contextLength: 262144
+ },
+ {
+ id: "morph-minimax27-230b",
+ name: "MiniMax M2.7 (Morph)",
+ contextLength: 200704
+ },
+ {
+ id: "morph-qwen36-27b",
+ name: "Qwen 3.6 27B (Morph)",
+ contextLength: 262144
+ },
+ {
+ id: "morph-dsv4flash",
+ name: "DeepSeek V4 Flash (Morph)",
+ contextLength: 1048576
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/nanobanana.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "nanobanana",
+ priority: 80,
+ hasFree: true,
+ alias: "nanobanana",
+ aliases: [
+ "nb"
+ ],
+ uiAlias: "nb",
+ display: {
+ name: "NanoBanana API",
+ icon: "extension",
+ color: "#FFD700",
+ textIcon: "🍌",
+ website: "https://nanobananaapi.ai",
+ notice: {
+ text: "3rd-party proxy for Google Nano Banana (Gemini 2.5/3 Flash Image). For official, use Gemini provider.",
+ apiKeyUrl: "https://nanobananaapi.ai/dashboard"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.nanobananaapi.ai/v1/chat/completions",
+ validateUrl: "https://api.nanobananaapi.ai/v1/models"
+ },
+ models: [
+ {
+ id: "nanobanana-flash",
+ name: "NanoBanana Flash",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "nanobanana-pro",
+ name: "NanoBanana Pro",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://api.nanobananaapi.ai/api/v1/nanobanana/generate",
+ pollUrl: "https://api.nanobananaapi.ai/api/v1/nanobanana/record-info"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/nebius.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "nebius",
+ priority: 70,
+ alias: "nebius",
+ display: {
+ name: "Nebius AI",
+ icon: "cloud",
+ color: "#6C5CE7",
+ textIcon: "NB",
+ website: "https://nebius.com",
+ notice: {
+ apiKeyUrl: "https://studio.nebius.com/settings/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.studio.nebius.ai/v1/chat/completions",
+ validateUrl: "https://api.studio.nebius.ai/v1/models"
+ },
+ models: [
+ {
+ id: "meta-llama/Llama-3.3-70B-Instruct",
+ name: "Llama 3.3 70B Instruct"
+ },
+ {
+ id: "Qwen/Qwen3-Embedding-8B",
+ name: "Qwen3 Embedding 8B",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.tokenfactory.nebius.com/v1/embeddings"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/nvidia.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "nvidia",
+ priority: 20,
+ hasFree: true,
+ alias: "nvidia",
+ display: {
+ name: "NVIDIA NIM",
+ icon: "developer_board",
+ color: "#76B900",
+ textIcon: "NV",
+ website: "https://developer.nvidia.com/nim",
+ notice: {
+ text: "Free access for NVIDIA Developer Program members (prototyping & testing).",
+ apiKeyUrl: "https://build.nvidia.com/settings/api-keys"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://integrate.api.nvidia.com/v1/chat/completions",
+ validateUrl: "https://integrate.api.nvidia.com/v1/models"
+ },
+ models: [
+ {
+ id: "minimaxai/minimax-m2.7",
+ name: "MiniMax M2.7"
+ },
+ {
+ id: "minimaxai/minimax-m3",
+ name: "MiniMax M3"
+ },
+ {
+ id: "z-ai/glm-5.2",
+ name: "GLM 5.2"
+ },
+ {
+ id: "deepseek-ai/deepseek-v4-pro",
+ name: "DeepSeek V4 Pro"
+ },
+ {
+ id: "deepseek-ai/deepseek-v4-flash",
+ name: "DeepSeek V4 Flash"
+ },
+ {
+ id: "moonshotai/kimi-k2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "nvidia/nemotron-3-ultra-550b-a55b",
+ name: "Nemotron 3 Ultra"
+ },
+ {
+ id: "nvidia/nv-embedqa-e5-v5",
+ name: "NV EmbedQA E5 v5",
+ kind: "embedding"
+ },
+ {
+ id: "nvidia/parakeet-ctc-1.1b-asr",
+ name: "Parakeet CTC 1.1B",
+ params: [
+ "language"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "fastpitch",
+ name: "FastPitch",
+ kind: "tts"
+ },
+ {
+ id: "tacotron2",
+ name: "Tacotron2",
+ kind: "tts"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "tts",
+ "embedding"
+ ],
+ ttsConfig: {
+ baseUrl: "https://integrate.api.nvidia.com/v1/audio/speech",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "nvidia-tts"
+ },
+ embeddingConfig: {
+ baseUrl: "https://integrate.api.nvidia.com/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/ollama-local.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "ollama-local",
+ priority: 50,
+ hasFree: true,
+ alias: "ollama-local",
+ display: {
+ name: "Ollama Local",
+ icon: "cloud",
+ color: "#ffffffff",
+ textIcon: "OL",
+ website: "https://ollama.com"
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "http://localhost:11434/api/chat",
+ format: "ollama"
+ },
+ serviceKinds: [
+ "llm"
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/ollama.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "ollama",
+ priority: 30,
+ hasFree: true,
+ alias: "ollama",
+ display: {
+ name: "Ollama Cloud",
+ icon: "cloud",
+ color: "#ffffffff",
+ textIcon: "OL",
+ website: "https://ollama.com",
+ notice: {
+ text: "Free tier: light usage, 1 cloud model at a time (limits reset every 5h & 7d). Pro $20/mo · Max $100/mo.",
+ apiKeyUrl: "https://ollama.com/settings/keys"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://ollama.com/api/chat",
+ validateUrl: "https://ollama.com/api/tags",
+ format: "ollama"
+ },
+ models: [
+ {
+ id: "gpt-oss:120b",
+ name: "GPT OSS 120B"
+ },
+ {
+ id: "kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "glm-5",
+ name: "GLM 5"
+ },
+ {
+ id: "minimax-m2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "glm-4.7-flash",
+ name: "GLM 4.7 Flash"
+ },
+ {
+ id: "qwen3.5",
+ name: "Qwen3.5"
+ },
+ {
+ id: "minimax-m3",
+ name: "MiniMax M3"
+ }
+ ],
+ serviceKinds: [
+ "llm"
+ ],
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/openai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "openai",
+ priority: 30,
+ alias: "openai",
+ display: {
+ name: "OpenAI",
+ icon: "auto_awesome",
+ color: "#10A37F",
+ textIcon: "OA",
+ website: "https://platform.openai.com",
+ notice: {
+ apiKeyUrl: "https://platform.openai.com/api-keys"
+ }
+ },
+ category: "apikey",
+ thinkingConfig: {
+ options: [
+ "auto",
+ "none",
+ "low",
+ "medium",
+ "high"
+ ],
+ defaultMode: "auto"
+ },
+ transport: {
+ baseUrl: "https://api.openai.com/v1/chat/completions",
+ forceStream: true
+ },
+ models: [
+ {
+ id: "gpt-5.4",
+ name: "GPT-5.4"
+ },
+ {
+ id: "gpt-5.4-mini",
+ name: "GPT-5.4 Mini"
+ },
+ {
+ id: "gpt-5.4-nano",
+ name: "GPT-5.4 Nano"
+ },
+ {
+ id: "gpt-5.2",
+ name: "GPT-5.2"
+ },
+ {
+ id: "gpt-5.1",
+ name: "GPT-5.1"
+ },
+ {
+ id: "gpt-5",
+ name: "GPT-5"
+ },
+ {
+ id: "gpt-5-mini",
+ name: "GPT-5 Mini"
+ },
+ {
+ id: "gpt-5-nano",
+ name: "GPT-5 Nano"
+ },
+ {
+ id: "gpt-4o",
+ name: "GPT-4o"
+ },
+ {
+ id: "gpt-4o-mini",
+ name: "GPT-4o Mini"
+ },
+ {
+ id: "gpt-4-turbo",
+ name: "GPT-4 Turbo"
+ },
+ {
+ id: "gpt-4.1",
+ name: "GPT-4.1"
+ },
+ {
+ id: "gpt-4.1-mini",
+ name: "GPT-4.1 Mini"
+ },
+ {
+ id: "gpt-4.1-nano",
+ name: "GPT-4.1 Nano"
+ },
+ {
+ id: "o3",
+ name: "O3"
+ },
+ {
+ id: "o3-mini",
+ name: "O3 Mini"
+ },
+ {
+ id: "o3-pro",
+ name: "O3 Pro"
+ },
+ {
+ id: "o4-mini",
+ name: "O4 Mini"
+ },
+ {
+ id: "o1",
+ name: "O1"
+ },
+ {
+ id: "o1-mini",
+ name: "O1 Mini"
+ },
+ {
+ id: "text-embedding-3-large",
+ name: "Text Embedding 3 Large",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-3-small",
+ name: "Text Embedding 3 Small",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-ada-002",
+ name: "Text Embedding Ada 002",
+ kind: "embedding"
+ },
+ {
+ id: "tts-1",
+ name: "TTS-1",
+ kind: "tts"
+ },
+ {
+ id: "tts-1-hd",
+ name: "TTS-1 HD",
+ kind: "tts"
+ },
+ {
+ id: "gpt-4o-mini-tts",
+ name: "GPT-4o Mini TTS",
+ kind: "tts"
+ },
+ {
+ id: "whisper-1",
+ name: "Whisper 1",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gpt-4o-transcribe",
+ name: "GPT-4o Transcribe",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gpt-4o-mini-transcribe",
+ name: "GPT-4o Mini Transcribe",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ },
+ {
+ id: "gpt-image-1",
+ name: "GPT Image 1",
+ params: [
+ "n",
+ "size",
+ "quality",
+ "response_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "dall-e-3",
+ name: "DALL-E 3",
+ params: [
+ "size",
+ "quality",
+ "style",
+ "response_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "dall-e-2",
+ name: "DALL-E 2",
+ params: [
+ "n",
+ "size",
+ "response_format"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding",
+ "tts",
+ "stt",
+ "image",
+ "imageToText",
+ "webSearch"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.openai.com/v1/audio/speech",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "openai",
+ defaultModel: "gpt-4o-mini-tts"
+ },
+ sttConfig: {
+ baseUrl: "https://api.openai.com/v1/audio/transcriptions",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "openai"
+ },
+ embeddingConfig: {
+ baseUrl: "https://api.openai.com/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ },
+ imageConfig: {
+ baseUrl: "https://api.openai.com/v1/images/generations"
+ },
+ searchViaChat: {
+ defaultModel: "gpt-4o-mini",
+ pricingUrl: "https://openai.com/api/pricing"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/opencode-go.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "opencode-go",
+ priority: 210,
+ alias: "opencode-go",
+ aliases: [
+ "ocg"
+ ],
+ uiAlias: "ocg",
+ display: {
+ name: "OpenCode Go",
+ icon: "terminal",
+ color: "#E87040",
+ textIcon: "OC",
+ website: "https://opencode.ai/auth",
+ notice: {
+ text: "OpenCode Go subscription: $5/mo (then 0/mo). Access to Kimi, GLM, Qwen, MiMo, MiniMax models.",
+ apiKeyUrl: "https://opencode.ai/auth"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://opencode.ai/zen/go/v1/chat/completions",
+ headers: {}
+ },
+ // Multi-endpoint: pick the transport matching the client sourceFormat to skip
+ // translation. Guarded per-model by `supportedFormats` (see chatCore) because
+ // opencode-go models differ in endpoint support.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://opencode.ai/zen/go/v1/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://opencode.ai/zen/go/v1/messages",
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw",
+ anthropicVersion: true
+ }
+ },
+ {
+ format: "openai-responses",
+ baseUrl: "https://opencode.ai/zen/go/v1/responses",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "glm-5.2",
+ name: "GLM 5.2",
+ supportedFormats: [
+ "openai"
+ ]
+ },
+ {
+ id: "glm-5.1",
+ name: "GLM 5.1",
+ supportedFormats: [
+ "openai"
+ ]
+ },
+ {
+ id: "kimi-k2.7-code",
+ name: "Kimi K2.7 Code",
+ supportedFormats: [
+ "openai"
+ ]
+ },
+ {
+ id: "kimi-k2.6",
+ name: "Kimi K2.6",
+ supportedFormats: [
+ "openai"
+ ]
+ },
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek V4 Pro",
+ supportedFormats: [
+ "openai",
+ "claude",
+ "openai-responses"
+ ]
+ },
+ {
+ id: "deepseek-v4-flash",
+ name: "DeepSeek V4 Flash",
+ supportedFormats: [
+ "openai",
+ "claude",
+ "openai-responses"
+ ]
+ },
+ {
+ id: "mimo-v2.5",
+ name: "MiMo V2.5",
+ supportedFormats: [
+ "openai"
+ ]
+ },
+ {
+ id: "mimo-v2.5-pro",
+ name: "MiMo V2.5 Pro",
+ supportedFormats: [
+ "openai"
+ ]
+ },
+ {
+ id: "minimax-m3",
+ name: "MiniMax M3",
+ supportedFormats: [
+ "openai",
+ "claude"
+ ]
+ },
+ {
+ id: "minimax-m2.7",
+ name: "MiniMax M2.7",
+ supportedFormats: [
+ "openai",
+ "claude"
+ ]
+ },
+ {
+ id: "minimax-m2.5",
+ name: "MiniMax M2.5",
+ supportedFormats: [
+ "openai",
+ "claude"
+ ]
+ },
+ {
+ id: "qwen3.7-max",
+ name: "Qwen 3.7 Max",
+ supportedFormats: [
+ "openai",
+ "claude"
+ ]
+ },
+ {
+ id: "qwen3.7-plus",
+ name: "Qwen 3.7 Plus",
+ supportedFormats: [
+ "openai",
+ "claude"
+ ]
+ },
+ {
+ id: "qwen3.6-plus",
+ name: "Qwen 3.6 Plus",
+ supportedFormats: [
+ "openai",
+ "claude"
+ ]
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/opencode.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "opencode",
+ priority: 40,
+ hasFree: true,
+ alias: "oc",
+ uiAlias: "oc",
+ display: {
+ name: "OpenCode Free",
+ icon: "terminal",
+ color: "#E87040",
+ textIcon: "OC"
+ },
+ category: "free",
+ noAuth: true,
+ transport: {
+ baseUrl: "https://opencode.ai",
+ headers: {
+ "x-opencode-client": "desktop"
+ },
+ noAuth: true
+ },
+ models: [],
+ modelsFetcher: {
+ url: "https://opencode.ai/zen/v1/models",
+ type: "opencode-free"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/openrouter.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "openrouter",
+ priority: 10,
+ hasFree: true,
+ alias: "openrouter",
+ display: {
+ name: "OpenRouter",
+ icon: "router",
+ color: "#F97316",
+ textIcon: "OR",
+ website: "https://openrouter.ai",
+ notice: {
+ text: "Free tier: 27+ free models, no credit card needed, 200 req/day. After 0 credit: 1,000 req/day.",
+ apiKeyUrl: "https://openrouter.ai/settings/keys"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://openrouter.ai/api/v1/chat/completions",
+ thinkingFormat: "openai",
+ headers: {
+ "HTTP-Referer": "https://endpoint-proxy.local",
+ "X-Title": "Endpoint Proxy"
+ }
+ },
+ models: [
+ {
+ id: "openai/text-embedding-3-large",
+ name: "OpenAI Text Embedding 3 Large",
+ kind: "embedding"
+ },
+ {
+ id: "openai/text-embedding-3-small",
+ name: "OpenAI Text Embedding 3 Small",
+ kind: "embedding"
+ },
+ {
+ id: "openai/text-embedding-ada-002",
+ name: "OpenAI Text Embedding Ada 002",
+ kind: "embedding"
+ },
+ {
+ id: "qwen/qwen3-embedding-8b",
+ name: "Qwen3 Embedding 8B",
+ kind: "embedding"
+ },
+ {
+ id: "perplexity/pplx-embed-v1-4b",
+ name: "Perplexity Embed V1 4B",
+ kind: "embedding"
+ },
+ {
+ id: "perplexity/pplx-embed-v1-0.6b",
+ name: "Perplexity Embed V1 0.6B",
+ kind: "embedding"
+ },
+ {
+ id: "nvidia/llama-nemotron-embed-vl-1b-v2:free",
+ name: "NVIDIA Nemotron Embed VL 1B V2 (Free)",
+ kind: "embedding"
+ },
+ {
+ id: "openai/gpt-4o-mini-tts",
+ name: "GPT-4o Mini TTS",
+ kind: "tts"
+ },
+ {
+ id: "openai/tts-1-hd",
+ name: "TTS-1 HD",
+ kind: "tts"
+ },
+ {
+ id: "openai/tts-1",
+ name: "TTS-1",
+ kind: "tts"
+ },
+ {
+ id: "openai/dall-e-3",
+ name: "DALL-E 3 (via OpenRouter)",
+ params: [
+ "size",
+ "quality",
+ "style",
+ "response_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "openai/gpt-image-1",
+ name: "GPT Image 1 (via OpenRouter)",
+ params: [
+ "n",
+ "size",
+ "quality",
+ "response_format"
+ ],
+ kind: "image"
+ },
+ {
+ id: "google/imagen-3.0-generate-002",
+ name: "Imagen 3 (via OpenRouter)",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "black-forest-labs/FLUX.1-schnell",
+ name: "FLUX.1 Schnell (via OpenRouter)",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding",
+ "tts",
+ "imageToText"
+ ],
+ ttsConfig: {
+ baseUrl: "https://openrouter.ai/api/v1/chat/completions",
+ defaultModel: "openai/gpt-4o-mini-tts",
+ headers: {
+ "HTTP-Referer": "https://endpoint-proxy.local",
+ "X-Title": "Endpoint Proxy"
+ }
+ },
+ embeddingConfig: {
+ baseUrl: "https://openrouter.ai/api/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer",
+ headers: {
+ "HTTP-Referer": "https://endpoint-proxy.local",
+ "X-Title": "Endpoint Proxy"
+ }
+ },
+ imageConfig: {
+ baseUrl: "https://openrouter.ai/api/v1/images/generations",
+ headers: {
+ "HTTP-Referer": "https://endpoint-proxy.local",
+ "X-Title": "Endpoint Proxy"
+ }
+ },
+ modelsFetcher: {
+ url: "https://openrouter.ai/api/v1/models",
+ type: "openrouter-free"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/perplexity-agent.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "perplexity-agent",
+ priority: 181,
+ alias: "perplexity-agent",
+ aliases: [
+ "pplx-agent",
+ "pplx-responses"
+ ],
+ uiAlias: "pa",
+ display: {
+ name: "Perplexity Agent",
+ icon: "travel_explore",
+ color: "#20808D",
+ textIcon: "PA",
+ website: "https://www.perplexity.ai",
+ notice: {
+ text: "Perplexity Agent API exposes GPT, Claude, Gemini, Grok, GLM, Kimi, and Sonar models through one OpenAI-compatible Responses API.",
+ apiKeyUrl: "https://www.perplexity.ai/settings/api"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.perplexity.ai/v1/responses",
+ validateUrl: "https://api.perplexity.ai/v1/models",
+ format: "openai-responses"
+ },
+ models: [
+ {
+ id: "perplexity/sonar",
+ name: "Perplexity Sonar"
+ },
+ {
+ id: "openai/gpt-5.5",
+ name: "GPT-5.5"
+ },
+ {
+ id: "openai/gpt-5.4",
+ name: "GPT-5.4"
+ },
+ {
+ id: "openai/gpt-5.4-mini",
+ name: "GPT-5.4 Mini"
+ },
+ {
+ id: "anthropic/claude-sonnet-4-6",
+ name: "Claude Sonnet 4.6"
+ },
+ {
+ id: "anthropic/claude-opus-4-8",
+ name: "Claude Opus 4.8"
+ },
+ {
+ id: "google/gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro"
+ },
+ {
+ id: "xai/grok-4.20-reasoning",
+ name: "Grok 4.20 Reasoning"
+ },
+ {
+ id: "perplexity/glm-5.2",
+ name: "GLM 5.2"
+ },
+ {
+ id: "perplexity/kimi-k2.7-code",
+ name: "Kimi K2.7 Code"
+ },
+ {
+ id: "nvidia/nemotron-3-super-120b-a12b",
+ name: "Nemotron 3 Super 120B"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "webSearch"
+ ],
+ searchViaChat: {
+ defaultModel: "perplexity/sonar",
+ endpoint: "https://api.perplexity.ai/v1/responses",
+ pricingUrl: "https://docs.perplexity.ai/docs/agent-api/models"
+ },
+ modelsFetcher: {
+ url: "https://api.perplexity.ai/v1/models",
+ type: "openai"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/perplexity-web.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "perplexity-web",
+ priority: 220,
+ alias: "perplexity-web",
+ aliases: [
+ "pw"
+ ],
+ uiAlias: "pw",
+ display: {
+ name: "Perplexity Web (Pro/Max)",
+ icon: "search",
+ color: "#20808D",
+ textIcon: "PW",
+ website: "https://www.perplexity.ai"
+ },
+ category: "webCookie",
+ authType: "cookie",
+ authHint: "Paste your __Secure-next-auth.session-token cookie value from perplexity.ai",
+ transport: {
+ baseUrl: "https://www.perplexity.ai/rest/sse/perplexity_ask",
+ format: "perplexity-web",
+ authType: "cookie"
+ },
+ models: [
+ {
+ id: "pplx-auto",
+ name: "Perplexity Auto (Free)"
+ },
+ {
+ id: "pplx-sonar",
+ name: "Perplexity Sonar"
+ },
+ {
+ id: "pplx-gpt",
+ name: "GPT-5.4 (via Perplexity)"
+ },
+ {
+ id: "pplx-gemini",
+ name: "Gemini 3.1 Pro (via Perplexity)"
+ },
+ {
+ id: "pplx-sonnet",
+ name: "Claude Sonnet 4.6 (via Perplexity)"
+ },
+ {
+ id: "pplx-opus",
+ name: "Claude Opus 4.6 (via Perplexity)"
+ },
+ {
+ id: "pplx-nemotron",
+ name: "Nemotron 3 Super (via Perplexity)"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/perplexity.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "perplexity",
+ priority: 180,
+ alias: "perplexity",
+ aliases: [
+ "pplx"
+ ],
+ uiAlias: "pplx",
+ display: {
+ name: "Perplexity",
+ icon: "search",
+ color: "#20808D",
+ textIcon: "PP",
+ website: "https://www.perplexity.ai",
+ notice: {
+ apiKeyUrl: "https://www.perplexity.ai/settings/api"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.perplexity.ai/chat/completions",
+ validateUrl: "https://api.perplexity.ai/models"
+ },
+ models: [
+ {
+ id: "sonar-pro",
+ name: "Sonar Pro"
+ },
+ {
+ id: "sonar",
+ name: "Sonar"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "webSearch"
+ ],
+ searchViaChat: {
+ defaultModel: "sonar",
+ endpoint: "https://api.perplexity.ai/chat/completions",
+ pricingUrl: "https://docs.perplexity.ai/guides/pricing"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/playht.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "playht",
+ alias: "playht",
+ display: {
+ name: "PlayHT",
+ icon: "play_circle",
+ color: "#00B4D8",
+ textIcon: "PH",
+ website: "https://play.ht",
+ notice: {
+ apiKeyUrl: "https://play.ht/studio/api-access"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.play.ht/api/v2/tts/stream",
+ authType: "apikey",
+ authHeader: "playht",
+ format: "playht",
+ models: [
+ {
+ id: "PlayDialog",
+ name: "PlayDialog"
+ },
+ {
+ id: "Play3.0-mini",
+ name: "Play 3.0 Mini"
+ }
+ ]
+ },
+ hidden: true
+};
+}),
+"[project]/open-sse/providers/registry/poolside.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "poolside",
+ priority: 60,
+ alias: "poolside",
+ aliases: [
+ "ps"
+ ],
+ uiAlias: "ps",
+ display: {
+ name: "Poolside",
+ icon: "water_drop",
+ color: "#0EA5E9",
+ textIcon: "PS",
+ website: "https://poolside.ai",
+ notice: {
+ apiKeyUrl: "https://platform.poolside.ai/api-keys"
+ }
+ },
+ category: "freeTier",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://inference.poolside.ai/v1/chat/completions",
+ validateUrl: "https://inference.poolside.ai/v1/models"
+ },
+ models: [
+ {
+ id: "poolside/laguna-s-2.1",
+ name: "Laguna S 2.1"
+ },
+ {
+ id: "poolside/laguna-xs-2.1",
+ name: "Laguna XS 2.1"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/qoder.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "qoder",
+ priority: 30,
+ alias: "qd",
+ uiAlias: "qd",
+ display: {
+ name: "Qoder",
+ icon: "water_drop",
+ color: "#EC4899",
+ website: "https://qoder.com",
+ notice: {
+ signupUrl: "https://qoder.com"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ authHint: "Personal Access Token (pt-...) từ https://qoder.com/account/integrations",
+ transport: {
+ baseUrl: "https://api3.qoder.sh/algo/api/v2/service/pro/sse/agent_chat_generation",
+ headers: {},
+ timeoutMs: 120000,
+ stallTimeoutMs: 120000,
+ usage: {
+ url: "https://openapi.qoder.sh/api/v2/quota/usage"
+ }
+ },
+ models: [
+ {
+ id: "ultimate",
+ name: "Ultimate"
+ },
+ {
+ id: "auto",
+ name: "Auto"
+ },
+ {
+ id: "performance",
+ name: "Performance"
+ },
+ {
+ id: "efficient",
+ name: "Efficient"
+ },
+ {
+ id: "qmodel_preview",
+ name: "Qwen3.8-Max-Preview"
+ },
+ {
+ id: "qmodel_latest",
+ name: "Qwen3.7-Max"
+ },
+ {
+ id: "qmodel",
+ name: "Qwen3.7-Plus"
+ },
+ {
+ id: "kmodel_latest",
+ name: "Kimi-K3"
+ },
+ {
+ id: "kmodel",
+ name: "Kimi-K2.7-Code"
+ },
+ {
+ id: "gm51model",
+ name: "GLM-5.2"
+ },
+ {
+ id: "dmodel",
+ name: "DeepSeek-V4-Pro"
+ },
+ {
+ id: "dfmodel",
+ name: "DeepSeek-V4-Flash"
+ },
+ {
+ id: "mmodel",
+ name: "MiniMax-M3"
+ }
+ ],
+ oauth: {
+ openApiBaseUrl: "https://openapi.qoder.sh",
+ centerBaseUrl: "https://center.qoder.sh",
+ chatBaseUrl: "https://api3.qoder.sh",
+ deviceTokenUrl: "https://openapi.qoder.sh/api/v1/deviceToken/poll",
+ refreshUrl: "https://center.qoder.sh/algo/api/v3/user/refresh_token",
+ userInfoUrl: "https://openapi.qoder.sh/api/v1/userinfo",
+ quotaUsageUrl: "https://openapi.qoder.sh/api/v2/quota/usage",
+ loginUrl: "https://qoder.com/device/selectAccounts"
+ },
+ features: {
+ usage: true,
+ // PAT (apikey) connections also carry quota usage (via job-token exchange).
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/recraft.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "recraft",
+ priority: 70,
+ alias: "recraft",
+ display: {
+ name: "Recraft",
+ icon: "image",
+ color: "#EC4899",
+ textIcon: "RC",
+ website: "https://recraft.ai",
+ notice: {
+ apiKeyUrl: "https://www.recraft.ai/profile/api"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "recraftv3",
+ name: "Recraft V3",
+ params: [
+ "n",
+ "size",
+ "style"
+ ],
+ kind: "image"
+ },
+ {
+ id: "recraftv2",
+ name: "Recraft V2",
+ params: [
+ "n",
+ "size",
+ "style"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://external.api.recraft.ai/v1/images/generations"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/runwayml.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "runwayml",
+ priority: 80,
+ alias: "runwayml",
+ aliases: [
+ "runway"
+ ],
+ uiAlias: "runway",
+ display: {
+ name: "Runway ML",
+ icon: "movie",
+ color: "#000000",
+ textIcon: "RW",
+ website: "https://runwayml.com",
+ notice: {
+ apiKeyUrl: "https://dev.runwayml.com"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "gen4_image",
+ name: "Gen-4 Image",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "gen4_image_turbo",
+ name: "Gen-4 Image Turbo",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "gen4_turbo",
+ name: "Gen-4 Turbo",
+ params: [],
+ kind: "video"
+ },
+ {
+ id: "gen3a_turbo",
+ name: "Gen-3 Alpha Turbo",
+ params: [],
+ kind: "video"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://api.dev.runwayml.com/v1"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/sambanova.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "sambanova",
+ alias: "samba",
+ aliases: [
+ "sambanova-ai"
+ ],
+ uiAlias: "samba",
+ hidden: true,
+ display: {
+ name: "SambaNova",
+ icon: "memory",
+ color: "#F97316",
+ textIcon: "SN",
+ website: "https://sambanova.ai",
+ notice: {
+ apiKeyUrl: "https://cloud.sambanova.ai/apis"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.sambanova.ai/v1/chat/completions",
+ validateUrl: "https://api.sambanova.ai/v1/models"
+ },
+ models: [
+ {
+ id: "MiniMax-M2.7",
+ name: "MiniMax M2.7",
+ contextLength: 196608
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/sdwebui.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "sdwebui",
+ priority: 110,
+ alias: "sdwebui",
+ display: {
+ name: "SD WebUI",
+ icon: "brush",
+ color: "#FF7043",
+ textIcon: "SD",
+ website: "https://github.com/AUTOMATIC1111/stable-diffusion-webui"
+ },
+ category: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "stable-diffusion-v1-5",
+ name: "Stable Diffusion v1.5",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "sdxl-base-1.0",
+ name: "SDXL Base 1.0",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "http://localhost:7860/sdapi/v1/txt2img"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/searchapi.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "searchapi",
+ alias: "searchapi",
+ display: {
+ name: "SearchAPI",
+ icon: "search",
+ color: "#0EA5A4",
+ textIcon: "SA",
+ website: "https://www.searchapi.io",
+ notice: {
+ apiKeyUrl: "https://www.searchapi.io/dashboard"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch"
+ ],
+ searchConfig: {
+ baseUrl: "https://www.searchapi.io/api/v1/search",
+ method: "GET",
+ authType: "apikey",
+ authHeader: "api_key",
+ costPerQuery: 0.004,
+ freeMonthlyQuota: 100,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 100,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/searxng.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$runtimeConfig$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/open-sse/config/runtimeConfig.js [instrumentation] (ecmascript) ");
+;
+const __TURBOPACK__default__export__ = {
+ id: "searxng",
+ alias: "searxng",
+ display: {
+ name: "SearXNG",
+ icon: "saved_search",
+ color: "#3B82F6",
+ textIcon: "SX",
+ website: "https://docs.searxng.org"
+ },
+ category: "freeTier",
+ authType: "none",
+ serviceKinds: [
+ "webSearch"
+ ],
+ noAuth: true,
+ searchConfig: {
+ baseUrl: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$runtimeConfig$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__["SEARXNG_URL"],
+ method: "GET",
+ authType: "none",
+ authHeader: "none",
+ costPerQuery: 0,
+ freeMonthlyQuota: 999999,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 50,
+ timeoutMs: 10000,
+ cacheTTLMs: 180000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/selfhosted-embedding.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Self-hosted, OpenAI-compatible embeddings (llama.cpp / llama-server, vLLM,
+// Infinity, text-embeddings-inference, ...) — the embeddings counterpart of
+// selfhosted-stt and selfhosted-tts.
+//
+// Routing a self-hosted embeddings server already WORKS today, via a custom
+// provider node: getEmbeddingAdapter() matches `openai-compatible-*` and
+// `custom-embedding-*` and returns openaiCompatNode, whose buildUrl reads
+// creds.providerSpecificData.baseUrl. What is missing is a first-class provider,
+// and the gap is visible rather than functional:
+//
+// /v1/embeddings on such a node -> 200, correct vectors
+// the Embedding page in the dashboard -> the node is not listed at all
+//
+// The page renders getProvidersByKind("embedding") plus provider nodes filtered
+// to `type === "custom-embedding"`. A node created as `openai-compatible` — the
+// natural choice when ONE endpoint serves chat and embeddings behind the same
+// front door — satisfies neither, so a working self-hosted embeddings endpoint is
+// invisible on the page whose job is to show embeddings providers. Diagnosed on a
+// deployment serving Qwen3-Embedding-8B at 4096 dimensions through exactly that
+// shape (2026-08-04).
+//
+// Declaring it as a provider with serviceKinds: ["embedding"] puts it on the page
+// beside Voyage, Jina and the rest, and keeps the per-connection baseUrl that
+// makes self-hosting possible at all.
+//
+// authType is "apikey" rather than "none" for the same reason as the STT and TTS
+// entries: it is what gives the connection a credentials record, and
+// providerSpecificData.baseUrl lives there. Local servers ignore the key itself;
+// any non-empty value works.
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "selfhosted-embedding",
+ priority: 50,
+ hasFree: true,
+ alias: "selfhosted-embedding",
+ display: {
+ name: "Self-hosted Embedding",
+ icon: "cloud",
+ color: "#ffffffff",
+ textIcon: "SE",
+ website: "https://github.com/ggml-org/llama.cpp"
+ },
+ category: "apikey",
+ auth: {
+ apiKey: {
+ // Note the /v1: the adapter appends "/embeddings" to whatever it is given,
+ // so a bare http://host:8080 resolves to http://host:8080/embeddings and
+ // misses the OpenAI route entirely. Give it the OpenAI base, the same value
+ // an OpenAI client would use. A trailing /embeddings is tolerated.
+ text: "Set providerSpecificData.baseUrl to the OpenAI base URL, e.g. http://host:8080/v1 — /embeddings is appended. The API key is not checked by local servers; any value works."
+ }
+ },
+ // A self-hosted server serves whatever model it was started with, so the id
+ // here is a placeholder for the UI: the request passes `model` straight
+ // through, and llama-server ignores an unknown value rather than rejecting it.
+ // Dimensions are deliberately NOT declared — they are a property of the loaded
+ // weights, and asserting a number here would be a guess that silently
+ // contradicts the server.
+ models: [
+ {
+ id: "embedding",
+ name: "Self-hosted embedding model",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "embedding"
+ ],
+ embeddingConfig: {
+ // Declared for shape-consistency with the other embedding providers, and
+ // read by the UI — but NOT by the request path. openaiCompatNode resolves the
+ // URL purely from creds.providerSpecificData.baseUrl (falling back to
+ // api.openai.com), so unlike a fixed cloud provider this baseUrl never
+ // reaches the wire. Stated plainly because a reader would otherwise
+ // reasonably assume it is the default endpoint.
+ baseUrl: "http://localhost:8080/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/selfhosted-stt.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Self-hosted, OpenAI-compatible speech-to-text (whisper.cpp, faster-whisper,
+// Speaches, vLLM-served Whisper, ...).
+//
+// Every other STT provider here is a named cloud service with a fixed endpoint.
+// This one exists so a locally-served /v1/audio/transcriptions can be used at
+// all: set the connection's providerSpecificData.baseUrl to the full URL of the
+// endpoint, exactly as the custom embedding providers already work.
+//
+// sttCore dispatches on `format`; anything that is not one of the five named
+// cloud shapes falls through to transcribeOpenAICompatible, which POSTs the
+// standard multipart body (file, model, and optional language / prompt /
+// response_format / temperature). That is precisely what whisper.cpp's OpenAI
+// endpoint accepts.
+//
+// authType is "apikey" rather than "none" so the connection carries a
+// credentials record — which is where providerSpecificData.baseUrl lives. Local
+// servers ignore the key itself; any non-empty value works.
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "selfhosted-stt",
+ priority: 50,
+ hasFree: true,
+ alias: "selfhosted-stt",
+ display: {
+ name: "Self-hosted STT",
+ icon: "cloud",
+ color: "#ffffffff",
+ textIcon: "ST",
+ website: "https://github.com/ggml-org/whisper.cpp"
+ },
+ category: "apikey",
+ auth: {
+ apiKey: {
+ text: "Set providerSpecificData.baseUrl to the full transcriptions URL, e.g. http://host:8080/v1/audio/transcriptions. The API key is not checked by local servers; any value works."
+ }
+ },
+ models: [
+ {
+ id: "whisper-1",
+ name: "Whisper (self-hosted)",
+ params: [
+ "language",
+ "response_format",
+ "temperature",
+ "prompt"
+ ],
+ kind: "stt"
+ }
+ ],
+ serviceKinds: [
+ "stt"
+ ],
+ sttConfig: {
+ // Overridden per connection by providerSpecificData.baseUrl; this default
+ // only makes the provider usable out of the box on a same-host deployment.
+ baseUrl: "http://localhost:8080/v1/audio/transcriptions",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "openai"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/selfhosted-tts.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Self-hosted, OpenAI-compatible text-to-speech (Kokoro-FastAPI, openedai-speech,
+// vLLM-served TTS, ...) — the TTS counterpart of selfhosted-stt.
+//
+// Every other self-hostable TTS provider here (coqui, tortoise) carries a FIXED
+// localhost baseUrl in its registry entry and `authType: "none"`, and the generic
+// dispatcher reads `ttsConfig.baseUrl` from that entry rather than from the
+// connection. So there was no way to point TTS at a server on another host.
+//
+// `authType: "apikey"` is what makes the override possible at all: it gives the
+// connection a credentials record, which is where providerSpecificData.baseUrl
+// lives. Local servers ignore the key; any non-empty value works.
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "selfhosted-tts",
+ priority: 50,
+ hasFree: true,
+ alias: "selfhosted-tts",
+ display: {
+ name: "Self-hosted TTS",
+ icon: "cloud",
+ color: "#ffffffff",
+ textIcon: "TT",
+ website: "https://github.com/remsky/Kokoro-FastAPI"
+ },
+ category: "apikey",
+ auth: {
+ apiKey: {
+ text: "Set providerSpecificData.baseUrl to the server root, e.g. http://host:8080 — /v1/audio/speech is appended. The API key is not checked by local servers; any value works."
+ }
+ },
+ // Voice is selected as "/", the same convention the OpenAI TTS
+ // adapter uses, so existing clients need no special casing.
+ models: [
+ {
+ id: "kokoro",
+ name: "Kokoro (self-hosted)",
+ params: [
+ "voice",
+ "response_format",
+ "speed"
+ ],
+ kind: "tts"
+ }
+ ],
+ serviceKinds: [
+ "tts"
+ ],
+ ttsConfig: {
+ // Overridden per connection by providerSpecificData.baseUrl; this default
+ // only makes the provider usable on a same-host deployment.
+ baseUrl: "http://localhost:8880",
+ defaultModel: "kokoro",
+ authType: "apikey",
+ format: "openai-speech"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/serper.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "serper",
+ alias: "serper",
+ display: {
+ name: "Serper",
+ icon: "search",
+ color: "#4F46E5",
+ textIcon: "SP",
+ website: "https://serper.dev",
+ notice: {
+ apiKeyUrl: "https://serper.dev/api-key"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch"
+ ],
+ searchConfig: {
+ baseUrl: "https://google.serper.dev",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "x-api-key",
+ costPerQuery: 0.001,
+ freeMonthlyQuota: 2500,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 100,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/siliconflow.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "siliconflow",
+ priority: 250,
+ alias: "siliconflow",
+ display: {
+ name: "SiliconFlow",
+ icon: "cloud_queue",
+ color: "#5B6EF5",
+ textIcon: "SF",
+ website: "https://cloud.siliconflow.com",
+ notice: {
+ apiKeyUrl: "https://cloud.siliconflow.com/account/ak"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.siliconflow.com/v1/chat/completions",
+ validateUrl: "https://api.siliconflow.com/v1/models",
+ thinkingFormat: "openai"
+ },
+ models: [
+ {
+ id: "deepseek-ai/DeepSeek-V4-Pro",
+ name: "DeepSeek V4 Pro"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V4-Flash",
+ name: "DeepSeek V4 Flash"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V3.2",
+ name: "DeepSeek V3.2"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V3.2-Exp",
+ name: "DeepSeek V3.2 Exp"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V3.1",
+ name: "DeepSeek V3.1"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-V3.1-Terminus",
+ name: "DeepSeek V3.1 Terminus"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-R1",
+ name: "DeepSeek R1"
+ },
+ {
+ id: "Qwen/Qwen3.5-397B-A17B",
+ name: "Qwen 3.5 397B A17B"
+ },
+ {
+ id: "Qwen/Qwen3.5-122B-A10B",
+ name: "Qwen 3.5 122B A10B"
+ },
+ {
+ id: "zai-org/GLM-5.1",
+ name: "GLM 5.1"
+ },
+ {
+ id: "zai-org/GLM-5",
+ name: "GLM 5"
+ },
+ {
+ id: "moonshotai/Kimi-K2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "moonshotai/Kimi-K2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "openai/gpt-oss-120b",
+ name: "GPT OSS 120B"
+ },
+ {
+ id: "MiniMaxAI/MiniMax-M2.5",
+ name: "MiniMax M2.5"
+ },
+ {
+ id: "inclusionAI/Ling-flash-2.0",
+ name: "Ling Flash 2.0"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/stability-ai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "stability-ai",
+ priority: 60,
+ alias: "stability-ai",
+ aliases: [
+ "stability"
+ ],
+ uiAlias: "stability",
+ display: {
+ name: "Stability AI",
+ icon: "image",
+ color: "#8B5CF6",
+ textIcon: "SA",
+ website: "https://stability.ai",
+ notice: {
+ apiKeyUrl: "https://platform.stability.ai/account/keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "stable-image-ultra",
+ name: "Stable Image Ultra",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "stable-image-core",
+ name: "Stable Image Core",
+ params: [
+ "size",
+ "style"
+ ],
+ kind: "image"
+ },
+ {
+ id: "sd3.5-large",
+ name: "Stable Diffusion 3.5 Large",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "sd3.5-large-turbo",
+ name: "Stable Diffusion 3.5 Large Turbo",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "sd3.5-medium",
+ name: "Stable Diffusion 3.5 Medium",
+ params: [
+ "size"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "image"
+ ],
+ imageConfig: {
+ baseUrl: "https://api.stability.ai/v2beta/stable-image/generate"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/tavily.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "tavily",
+ alias: "tavily",
+ display: {
+ name: "Tavily",
+ icon: "search",
+ color: "#5B21B6",
+ textIcon: "TV",
+ website: "https://tavily.com",
+ notice: {
+ apiKeyUrl: "https://app.tavily.com/home"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch",
+ "webFetch"
+ ],
+ searchConfig: {
+ baseUrl: "https://api.tavily.com/search",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "bearer",
+ costPerQuery: 0.008,
+ freeMonthlyQuota: 1000,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 20,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ },
+ fetchConfig: {
+ baseUrl: "https://api.tavily.com/extract",
+ method: "POST",
+ authType: "apikey",
+ authHeader: "bearer",
+ costPerQuery: 0.008,
+ freeMonthlyQuota: 1000,
+ formats: [
+ "markdown",
+ "text"
+ ],
+ maxCharacters: 100000,
+ timeoutMs: 15000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/tencent.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "tencent",
+ alias: "hunyuan",
+ aliases: [
+ "hunyuan",
+ "tencent-hunyuan"
+ ],
+ uiAlias: "hunyuan",
+ display: {
+ name: "Tencent Hunyuan",
+ icon: "cloud",
+ color: "#0052D9",
+ textIcon: "HY",
+ website: "https://cloud.tencent.com/product/hunyuan",
+ notice: {
+ apiKeyUrl: "https://console.cloud.tencent.com/hunyuan/api-key"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ authModes: [
+ "apikey"
+ ],
+ transport: {
+ baseUrl: "https://api.hunyuan.cloud.tencent.com/v1/chat/completions",
+ validateUrl: "https://api.hunyuan.cloud.tencent.com/v1/models"
+ },
+ models: [
+ {
+ id: "hunyuan-turbos-latest",
+ name: "Hunyuan TurboS Latest",
+ contextLength: 200000
+ },
+ {
+ id: "hunyuan-t1-latest",
+ name: "Hunyuan T1 Latest",
+ contextLength: 256000
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/together.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "together",
+ priority: 60,
+ alias: "together",
+ display: {
+ name: "Together AI",
+ icon: "group_work",
+ color: "#0F6FFF",
+ textIcon: "TG",
+ website: "https://www.together.ai",
+ notice: {
+ apiKeyUrl: "https://api.together.xyz/settings/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: {
+ baseUrl: "https://api.together.xyz/v1/chat/completions",
+ validateUrl: "https://api.together.xyz/v1/models"
+ },
+ models: [
+ {
+ id: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
+ name: "Llama 3.3 70B Turbo"
+ },
+ {
+ id: "deepseek-ai/DeepSeek-R1",
+ name: "DeepSeek R1"
+ },
+ {
+ id: "Qwen/Qwen3-235B-A22B",
+ name: "Qwen3 235B"
+ },
+ {
+ id: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",
+ name: "Llama 4 Maverick"
+ },
+ {
+ id: "BAAI/bge-large-en-v1.5",
+ name: "BGE Large EN v1.5",
+ kind: "embedding"
+ },
+ {
+ id: "togethercomputer/m2-bert-80M-8k-retrieval",
+ name: "M2 BERT 80M 8K",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.together.xyz/v1/embeddings"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/tokenrouter.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "tokenrouter",
+ alias: "tokenrouter",
+ aliases: [
+ "tr"
+ ],
+ uiAlias: "tokenrouter",
+ display: {
+ name: "TokenRouter",
+ icon: "hub",
+ color: "#0EA5E9",
+ textIcon: "TR",
+ website: "https://www.tokenrouter.com",
+ notice: {
+ text: "OpenAI-compatible gateway. 300+ models (OpenAI, Claude, Gemini, Qwen, DeepSeek, Kimi, GLM, dsb).",
+ apiKeyUrl: "https://www.tokenrouter.com"
+ }
+ },
+ category: "apikey",
+ thinkingConfig: {
+ options: [
+ "low",
+ "medium",
+ "high",
+ "xhigh",
+ "max"
+ ],
+ defaultMode: "high"
+ },
+ transport: {
+ baseUrl: "https://api.tokenrouter.com/v1/chat/completions",
+ validateUrl: "https://api.tokenrouter.com/v1/models",
+ thinkingFormat: "tokenrouter"
+ },
+ // Seed snapshot from live /v1/models (120 entries). Latest catalogue is
+ // fetched via modelsFetcher; other ids still accepted via passthroughModels.
+ models: [
+ {
+ id: "MiniMax-Hailuo-2.3",
+ name: "Minimax Hailuo 2.3",
+ kind: "video"
+ },
+ {
+ id: "MiniMax-M3",
+ name: "Minimax M3"
+ },
+ {
+ id: "anthropic/claude-fable-5",
+ name: "Claude Fable 5"
+ },
+ {
+ id: "anthropic/claude-haiku-4.5",
+ name: "Claude Haiku 4.5"
+ },
+ {
+ id: "anthropic/claude-opus-4.5",
+ name: "Claude Opus 4.5"
+ },
+ {
+ id: "anthropic/claude-opus-4.6",
+ name: "Claude Opus 4.6"
+ },
+ {
+ id: "anthropic/claude-opus-4.7",
+ name: "Claude Opus 4.7"
+ },
+ {
+ id: "anthropic/claude-opus-4.7-fast",
+ name: "Claude Opus 4.7 Fast"
+ },
+ {
+ id: "anthropic/claude-opus-4.8",
+ name: "Claude Opus 4.8"
+ },
+ {
+ id: "anthropic/claude-opus-4.8-fast",
+ name: "Claude Opus 4.8 Fast"
+ },
+ {
+ id: "anthropic/claude-opus-5",
+ name: "Claude Opus 5"
+ },
+ {
+ id: "anthropic/claude-opus-5-fast",
+ name: "Claude Opus 5 Fast"
+ },
+ {
+ id: "anthropic/claude-sonnet-4",
+ name: "Claude Sonnet 4"
+ },
+ {
+ id: "anthropic/claude-sonnet-4.5",
+ name: "Claude Sonnet 4.5"
+ },
+ {
+ id: "anthropic/claude-sonnet-4.6",
+ name: "Claude Sonnet 4.6"
+ },
+ {
+ id: "anthropic/claude-sonnet-5",
+ name: "Claude Sonnet 5"
+ },
+ {
+ id: "bytedance-seed/seedream-4.5",
+ name: "Seedream 4.5",
+ kind: "image"
+ },
+ {
+ id: "bytedance-seed/seedream-5.0-lite",
+ name: "Seedream 5.0 Lite",
+ kind: "image"
+ },
+ {
+ id: "bytedance-seed/seedream-5.0-pro",
+ name: "Seedream 5.0 Pro",
+ kind: "image"
+ },
+ {
+ id: "claude-haiku-4-5",
+ name: "Claude Haiku 4 5"
+ },
+ {
+ id: "claude-opus-4-8-m-aws",
+ name: "Claude Opus 4 8 M Aws"
+ },
+ {
+ id: "deepseek/deepseek-v3.2",
+ name: "Deepseek V3.2"
+ },
+ {
+ id: "deepseek/deepseek-v4-flash",
+ name: "Deepseek V4 Flash"
+ },
+ {
+ id: "deepseek/deepseek-v4-flash-0731",
+ name: "Deepseek V4 Flash 0731"
+ },
+ {
+ id: "deepseek/deepseek-v4-pro",
+ name: "Deepseek V4 Pro"
+ },
+ {
+ id: "ex/gpt-5.4",
+ name: "Gpt 5.4"
+ },
+ {
+ id: "google/gemini-2.5-flash-image",
+ name: "Gemini 2.5 Flash Image"
+ },
+ {
+ id: "google/gemini-3-flash-preview",
+ name: "Gemini 3 Flash Preview"
+ },
+ {
+ id: "google/gemini-3-pro-image-preview",
+ name: "Gemini 3 Pro Image Preview"
+ },
+ {
+ id: "google/gemini-3.1-flash-image-preview",
+ name: "Gemini 3.1 Flash Image Preview"
+ },
+ {
+ id: "google/gemini-3.1-flash-lite-image",
+ name: "Gemini 3.1 Flash Lite Image"
+ },
+ {
+ id: "google/gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro Preview"
+ },
+ {
+ id: "google/gemini-3.5-flash",
+ name: "Gemini 3.5 Flash"
+ },
+ {
+ id: "google/gemini-3.5-flash-lite",
+ name: "Gemini 3.5 Flash Lite"
+ },
+ {
+ id: "google/gemini-3.6-flash",
+ name: "Gemini 3.6 Flash"
+ },
+ {
+ id: "google/gemini-embedding-2",
+ name: "Gemini Embedding 2"
+ },
+ {
+ id: "google/gemma-4-26b-a4b-it",
+ name: "Gemma 4 26B A4B It"
+ },
+ {
+ id: "happyhorse-1.0-t2v",
+ name: "Happyhorse 1.0 T2V",
+ kind: "video"
+ },
+ {
+ id: "kling-3.0-turbo",
+ name: "Kling 3.0 Turbo",
+ kind: "video"
+ },
+ {
+ id: "kling-v2-6",
+ name: "Kling V2 6",
+ kind: "video"
+ },
+ {
+ id: "kling-v3",
+ name: "Kling V3",
+ kind: "video"
+ },
+ {
+ id: "kling-v3-omni",
+ name: "Kling V3 Omni",
+ kind: "video"
+ },
+ {
+ id: "microsoft/mai-image-2.5",
+ name: "Mai Image 2.5"
+ },
+ {
+ id: "minimax/minimax-m2-her",
+ name: "Minimax M2 Her"
+ },
+ {
+ id: "minimax/minimax-m2.1",
+ name: "Minimax M2.1"
+ },
+ {
+ id: "minimax/minimax-m2.1-highspeed",
+ name: "Minimax M2.1 Highspeed"
+ },
+ {
+ id: "minimax/minimax-m2.5",
+ name: "Minimax M2.5"
+ },
+ {
+ id: "minimax/minimax-m2.7",
+ name: "Minimax M2.7"
+ },
+ {
+ id: "minimax/minimax-m2.7-highspeed",
+ name: "Minimax M2.7 Highspeed"
+ },
+ {
+ id: "miromind/mirothinker-1-7-deepresearch",
+ name: "Mirothinker 1 7 Deepresearch"
+ },
+ {
+ id: "miromind/mirothinker-1-7-deepresearch-mini",
+ name: "Mirothinker 1 7 Deepresearch Mini"
+ },
+ {
+ id: "mistralai/devstral-2512",
+ name: "Devstral 2512"
+ },
+ {
+ id: "mistralai/mistral-medium-3-5",
+ name: "Mistral Medium 3 5"
+ },
+ {
+ id: "mistralai/mistral-small-2603",
+ name: "Mistral Small 2603"
+ },
+ {
+ id: "mistralai/voxtral-small-24b-2507",
+ name: "Voxtral Small 24B 2507"
+ },
+ {
+ id: "moonshotai/kimi-k2.5",
+ name: "Kimi K2.5"
+ },
+ {
+ id: "moonshotai/kimi-k2.6",
+ name: "Kimi K2.6"
+ },
+ {
+ id: "moonshotai/kimi-k2.7-code",
+ name: "Kimi K2.7 Code"
+ },
+ {
+ id: "moonshotai/kimi-k3",
+ name: "Kimi K3"
+ },
+ {
+ id: "moonshotai/kimi-k3-free",
+ name: "Kimi K3 Free"
+ },
+ {
+ id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
+ name: "Nemotron 3 Nano Omni 30B A3B Reasoning:Free"
+ },
+ {
+ id: "nvidia/nemotron-3-super-120b-a12b",
+ name: "Nemotron 3 Super 120B A12B"
+ },
+ {
+ id: "openai/gpt-4o-mini",
+ name: "Gpt 4O Mini"
+ },
+ {
+ id: "openai/gpt-5",
+ name: "Gpt 5"
+ },
+ {
+ id: "openai/gpt-5-image",
+ name: "Gpt 5 Image"
+ },
+ {
+ id: "openai/gpt-5-image-mini",
+ name: "Gpt 5 Image Mini"
+ },
+ {
+ id: "openai/gpt-5-mini",
+ name: "Gpt 5 Mini"
+ },
+ {
+ id: "openai/gpt-5.2",
+ name: "Gpt 5.2"
+ },
+ {
+ id: "openai/gpt-5.4",
+ name: "Gpt 5.4"
+ },
+ {
+ id: "openai/gpt-5.4-image-2",
+ name: "Gpt 5.4 Image 2",
+ kind: "image"
+ },
+ {
+ id: "openai/gpt-5.4-mini",
+ name: "Gpt 5.4 Mini"
+ },
+ {
+ id: "openai/gpt-5.4-nano",
+ name: "Gpt 5.4 Nano"
+ },
+ {
+ id: "openai/gpt-5.4-pro",
+ name: "Gpt 5.4 Pro"
+ },
+ {
+ id: "openai/gpt-5.5",
+ name: "Gpt 5.5"
+ },
+ {
+ id: "openai/gpt-5.5-pro",
+ name: "Gpt 5.5 Pro"
+ },
+ {
+ id: "openai/gpt-5.6-luna",
+ name: "Gpt 5.6 Luna"
+ },
+ {
+ id: "openai/gpt-5.6-sol",
+ name: "Gpt 5.6 Sol"
+ },
+ {
+ id: "openai/gpt-5.6-terra",
+ name: "Gpt 5.6 Terra"
+ },
+ {
+ id: "openai/gpt-audio",
+ name: "Gpt Audio",
+ kind: "audio"
+ },
+ {
+ id: "openai/gpt-audio-mini",
+ name: "Gpt Audio Mini",
+ kind: "audio"
+ },
+ {
+ id: "openai/gpt-oss-120b",
+ name: "Gpt Oss 120B"
+ },
+ {
+ id: "qwen/qwen3-coder-next",
+ name: "Qwen3 Coder Next"
+ },
+ {
+ id: "qwen/qwen3.5-122b-a10b",
+ name: "Qwen3.5 122B A10B"
+ },
+ {
+ id: "qwen/qwen3.5-35b-a3b",
+ name: "Qwen3.5 35B A3B"
+ },
+ {
+ id: "qwen/qwen3.5-397b-a17b",
+ name: "Qwen3.5 397B A17B"
+ },
+ {
+ id: "qwen/qwen3.5-9b",
+ name: "Qwen3.5 9B"
+ },
+ {
+ id: "qwen/qwen3.5-flash",
+ name: "Qwen3.5 Flash"
+ },
+ {
+ id: "qwen/qwen3.5-plus-02-15",
+ name: "Qwen3.5 Plus 02 15"
+ },
+ {
+ id: "qwen/qwen3.6-plus",
+ name: "Qwen3.6 Plus"
+ },
+ {
+ id: "qwen/qwen3.7-max",
+ name: "Qwen3.7 Max"
+ },
+ {
+ id: "qwen/qwen3.7-plus",
+ name: "Qwen3.7 Plus"
+ },
+ {
+ id: "qwen/qwen3.8-max",
+ name: "Qwen3.8 Max"
+ },
+ {
+ id: "qwen3.5-omni-plus",
+ name: "Qwen3.5 Omni Plus"
+ },
+ {
+ id: "qwen3.6-flash",
+ name: "Qwen3.6 Flash"
+ },
+ {
+ id: "sakana/fugu-ultra",
+ name: "Fugu Ultra"
+ },
+ {
+ id: "seed-2-0-code-preview-260328",
+ name: "Seed 2 0 Code Preview 260328"
+ },
+ {
+ id: "seed-2-0-lite-260428",
+ name: "Seed 2 0 Lite 260428"
+ },
+ {
+ id: "seed-2-0-mini-260428",
+ name: "Seed 2 0 Mini 260428"
+ },
+ {
+ id: "seed-2-0-pro-260328",
+ name: "Seed 2 0 Pro 260328"
+ },
+ {
+ id: "stepfun/step-3.5-flash",
+ name: "Step 3.5 Flash"
+ },
+ {
+ id: "stepfun/step-3.7-flash",
+ name: "Step 3.7 Flash"
+ },
+ {
+ id: "tencent/hy3-preview",
+ name: "Hy3 Preview"
+ },
+ {
+ id: "x-ai/grok-4.1-fast",
+ name: "Grok 4.1 Fast"
+ },
+ {
+ id: "x-ai/grok-4.20-beta",
+ name: "Grok 4.20 Beta"
+ },
+ {
+ id: "x-ai/grok-4.3",
+ name: "Grok 4.3"
+ },
+ {
+ id: "x-ai/grok-4.5",
+ name: "Grok 4.5"
+ },
+ {
+ id: "x-ai/grok-build-0.1",
+ name: "Grok Build 0.1"
+ },
+ {
+ id: "xiaomi/mimo-v2-flash",
+ name: "Mimo V2 Flash"
+ },
+ {
+ id: "xiaomi/mimo-v2-omni",
+ name: "Mimo V2 Omni"
+ },
+ {
+ id: "xiaomi/mimo-v2-pro",
+ name: "Mimo V2 Pro"
+ },
+ {
+ id: "xiaomi/mimo-v2.5",
+ name: "Mimo V2.5"
+ },
+ {
+ id: "xiaomi/mimo-v2.5-pro",
+ name: "Mimo V2.5 Pro"
+ },
+ {
+ id: "z-ai/glm-4.5-air",
+ name: "Glm 4.5 Air"
+ },
+ {
+ id: "z-ai/glm-4.6",
+ name: "Glm 4.6"
+ },
+ {
+ id: "z-ai/glm-4.6v",
+ name: "Glm 4.6V"
+ },
+ {
+ id: "z-ai/glm-4.7",
+ name: "Glm 4.7"
+ },
+ {
+ id: "z-ai/glm-5",
+ name: "Glm 5"
+ },
+ {
+ id: "z-ai/glm-5-turbo",
+ name: "Glm 5 Turbo"
+ },
+ {
+ id: "z-ai/glm-5.1",
+ name: "Glm 5.1"
+ },
+ {
+ id: "z-ai/glm-5.2",
+ name: "Glm 5.2"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding",
+ "image"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.tokenrouter.com/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ },
+ imageConfig: {
+ baseUrl: "https://api.tokenrouter.com/v1/images/generations"
+ },
+ modelsFetcher: {
+ url: "https://api.tokenrouter.com/v1/models",
+ type: "openai"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/topaz.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "topaz",
+ alias: "topaz",
+ display: {
+ name: "Topaz",
+ icon: "image",
+ color: "#059669",
+ textIcon: "TP",
+ website: "https://topazlabs.com",
+ notice: {
+ apiKeyUrl: "https://topazlabs.com/account"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "image"
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/tortoise.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "tortoise",
+ alias: "tortoise",
+ display: {
+ name: "Tortoise TTS",
+ icon: "record_voice_over",
+ color: "#7C3AED",
+ textIcon: "TT",
+ website: "https://github.com/neonbjb/tortoise-tts"
+ },
+ category: "freeTier",
+ authType: "none",
+ serviceKinds: [
+ "tts"
+ ],
+ noAuth: true,
+ ttsConfig: {
+ baseUrl: "http://localhost:5000/api/tts",
+ authType: "none",
+ authHeader: "none",
+ format: "tortoise",
+ models: [
+ {
+ id: "tortoise-v2",
+ name: "Tortoise v2"
+ }
+ ]
+ },
+ hidden: true
+};
+}),
+"[project]/open-sse/providers/registry/venice.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "venice",
+ priority: 115,
+ alias: "venice",
+ aliases: [
+ "vn"
+ ],
+ uiAlias: "venice",
+ display: {
+ name: "Venice AI",
+ icon: "shield",
+ color: "#DC2626",
+ textIcon: "VE",
+ website: "https://venice.ai",
+ notice: {
+ text: "OpenAI-compatible. Private inference + uncensored models (Venice Uncensored, GLM, Qwen, DeepSeek, Llama).",
+ apiKeyUrl: "https://venice.ai/settings/api"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://api.venice.ai/api/v1/chat/completions",
+ validateUrl: "https://api.venice.ai/api/v1/models",
+ thinkingFormat: "openai"
+ },
+ // Curated seed; the full live catalogue (90+ text models) is fetched via
+ // modelsFetcher and any other id is accepted via passthroughModels.
+ models: [
+ {
+ id: "venice-uncensored-1-2",
+ name: "Venice Uncensored 1.2"
+ },
+ {
+ id: "zai-org-glm-5",
+ name: "GLM-5"
+ },
+ {
+ id: "qwen3-235b-a22b-instruct-2507",
+ name: "Qwen3 235B A22B Instruct"
+ },
+ {
+ id: "qwen3-coder-480b-a35b-instruct-turbo",
+ name: "Qwen3 Coder 480B A35B Turbo"
+ },
+ {
+ id: "qwen3-vl-235b-a22b",
+ name: "Qwen3 VL 235B A22B"
+ },
+ {
+ id: "deepseek-v4-pro",
+ name: "DeepSeek V4 Pro"
+ },
+ {
+ id: "llama-3.3-70b",
+ name: "Llama 3.3 70B"
+ },
+ {
+ id: "hermes-3-llama-3.1-405b",
+ name: "Hermes 3 Llama 3.1 405B"
+ },
+ {
+ id: "mistral-small-3-2-24b-instruct",
+ name: "Mistral Small 3.2 24B"
+ },
+ {
+ id: "text-embedding-3-large",
+ name: "Text Embedding 3 Large",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-bge-m3",
+ name: "BGE-M3 Embedding",
+ kind: "embedding"
+ },
+ {
+ id: "text-embedding-qwen3-8b",
+ name: "Qwen3 8B Embedding",
+ kind: "embedding"
+ },
+ {
+ id: "venice-sd35",
+ name: "Venice SD3.5",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "flux-2-pro",
+ name: "FLUX.2 Pro",
+ params: [
+ "n",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "gpt-image-2",
+ name: "GPT Image 2 (via Venice)",
+ params: [
+ "n",
+ "size",
+ "quality"
+ ],
+ kind: "image"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "embedding",
+ "image"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.venice.ai/api/v1/embeddings",
+ authType: "apikey",
+ authHeader: "bearer"
+ },
+ imageConfig: {
+ baseUrl: "https://api.venice.ai/api/v1/images/generations"
+ },
+ modelsFetcher: {
+ url: "https://api.venice.ai/api/v1/models",
+ type: "openai"
+ },
+ passthroughModels: true
+};
+}),
+"[project]/open-sse/providers/registry/vercel-ai-gateway.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "vercel-ai-gateway",
+ priority: 160,
+ alias: "vercel-ai-gateway",
+ aliases: [
+ "vercel"
+ ],
+ uiAlias: "vercel",
+ display: {
+ name: "Vercel AI Gateway",
+ icon: "deployed_code",
+ color: "#111827",
+ textIcon: "VG",
+ website: "https://vercel.com/ai-gateway",
+ notice: {
+ text: "Unified OpenAI-compatible endpoint from Vercel. Use your AI Gateway API key, then pick models with provider/model IDs like anthropic/claude-sonnet-4.6 or openai/gpt-5.4.",
+ apiKeyUrl: "https://vercel.com/dashboard/~/ai-gateway"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://ai-gateway.vercel.sh/v1/chat/completions",
+ thinkingFormat: "openai",
+ retry: {
+ "429": 2
+ },
+ usage: {
+ url: "https://ai-gateway.vercel.sh/v1/credits"
+ }
+ },
+ serviceKinds: [
+ "llm",
+ "embedding",
+ "image",
+ "imageToText",
+ "webSearch"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://ai-gateway.vercel.sh/v1/embeddings"
+ },
+ imageConfig: {
+ baseUrl: "https://ai-gateway.vercel.sh/v1/images/generations"
+ },
+ searchViaChat: {
+ defaultModel: "openai/gpt-4o-mini",
+ pricingUrl: "https://vercel.com/docs/ai-gateway/pricing"
+ },
+ modelsFetcher: {
+ url: "https://ai-gateway.vercel.sh/v1/models",
+ type: "openai"
+ },
+ passthroughModels: true,
+ features: {
+ usage: true,
+ usageApikey: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/vertex-partner.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "vertex-partner",
+ priority: 260,
+ alias: "vertex-partner",
+ aliases: [
+ "vxp"
+ ],
+ uiAlias: "vxp",
+ display: {
+ name: "Vertex Partner",
+ icon: "cloud",
+ color: "#34A853",
+ textIcon: "VP",
+ website: "https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models",
+ notice: {
+ apiKeyUrl: "https://console.cloud.google.com/iam-admin/serviceaccounts"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://aiplatform.googleapis.com"
+ },
+ models: [
+ {
+ id: "deepseek-ai/deepseek-v3.2-maas",
+ name: "DeepSeek V3.2 (Vertex)"
+ },
+ {
+ id: "qwen/qwen3-next-80b-a3b-thinking-maas",
+ name: "Qwen3 Next 80B Thinking (Vertex)"
+ },
+ {
+ id: "qwen/qwen3-next-80b-a3b-instruct-maas",
+ name: "Qwen3 Next 80B Instruct (Vertex)"
+ },
+ {
+ id: "zai-org/glm-5-maas",
+ name: "GLM-5 (Vertex)"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/vertex.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "vertex",
+ priority: 40,
+ alias: "vertex",
+ aliases: [
+ "vx"
+ ],
+ uiAlias: "vx",
+ display: {
+ name: "Vertex AI",
+ icon: "cloud",
+ color: "#4285F4",
+ textIcon: "VX",
+ website: "https://cloud.google.com/vertex-ai",
+ notice: {
+ text: "New Google Cloud accounts get $300 free credits. Requires GCP project + Service Account with Vertex AI API enabled.",
+ apiKeyUrl: "https://console.cloud.google.com/iam-admin/serviceaccounts"
+ }
+ },
+ category: "freeTier",
+ transport: {
+ baseUrl: "https://aiplatform.googleapis.com",
+ format: "vertex"
+ },
+ models: [
+ {
+ id: "gemini-3.1-pro-preview",
+ name: "Gemini 3.1 Pro Preview"
+ },
+ {
+ id: "gemini-3.1-flash-lite-preview",
+ name: "Gemini 3.1 Flash Lite Preview"
+ },
+ {
+ id: "gemini-3-flash-preview",
+ name: "Gemini 3 Flash Preview"
+ },
+ {
+ id: "gemini-2.5-flash",
+ name: "Gemini 2.5 Flash"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "imageToText"
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/volcengine-ark.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "volcengine-ark",
+ priority: 270,
+ alias: "volcengine-ark",
+ aliases: [
+ "ark"
+ ],
+ uiAlias: "ark",
+ display: {
+ name: "Volcengine Ark",
+ icon: "cloud",
+ color: "#1677FF",
+ textIcon: "ARK",
+ website: "https://ark.cn-beijing.volces.com",
+ notice: {
+ apiKeyUrl: "https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey"
+ }
+ },
+ category: "apikey",
+ transport: {
+ baseUrl: "https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions",
+ headers: {}
+ },
+ models: [
+ {
+ id: "Doubao-Seed-2.0-Code",
+ name: "Doubao-Seed-2.0-Code"
+ },
+ {
+ id: "Doubao-Seed-2.0-pro",
+ name: "Doubao-Seed-2.0-pro"
+ },
+ {
+ id: "Doubao-Seed-2.0-lite",
+ name: "Doubao-Seed-2.0-lite"
+ },
+ {
+ id: "Doubao-Seed-Code",
+ name: "Doubao-Seed-Code"
+ },
+ {
+ id: "DeepSeek-V4-Flash",
+ name: "DeepSeek-V4-Flash"
+ },
+ {
+ id: "DeepSeek-V4-Pro",
+ name: "DeepSeek-V4-Pro"
+ },
+ {
+ id: "GLM-5.1",
+ name: "GLM-5.1"
+ },
+ {
+ id: "MiniMax-M2.7",
+ name: "MiniMax-M2.7"
+ },
+ {
+ id: "Kimi-K2.6",
+ name: "Kimi-K2.6"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/voyage-ai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "voyage-ai",
+ priority: 40,
+ alias: "voyage-ai",
+ uiAlias: "voyage",
+ display: {
+ name: "Voyage AI",
+ icon: "data_array",
+ color: "#0EA5E9",
+ textIcon: "VG",
+ website: "https://www.voyageai.com",
+ notice: {
+ apiKeyUrl: "https://dash.voyageai.com/api-keys"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ transport: null,
+ models: [
+ {
+ id: "voyage-3-large",
+ name: "Voyage 3 Large",
+ kind: "embedding"
+ },
+ {
+ id: "voyage-3.5",
+ name: "Voyage 3.5",
+ kind: "embedding"
+ },
+ {
+ id: "voyage-3.5-lite",
+ name: "Voyage 3.5 Lite",
+ kind: "embedding"
+ },
+ {
+ id: "voyage-code-3",
+ name: "Voyage Code 3",
+ kind: "embedding"
+ },
+ {
+ id: "voyage-finance-2",
+ name: "Voyage Finance 2",
+ kind: "embedding"
+ },
+ {
+ id: "voyage-law-2",
+ name: "Voyage Law 2",
+ kind: "embedding"
+ },
+ {
+ id: "voyage-multilingual-2",
+ name: "Voyage Multilingual 2",
+ kind: "embedding"
+ }
+ ],
+ serviceKinds: [
+ "embedding"
+ ],
+ embeddingConfig: {
+ baseUrl: "https://api.voyageai.com/v1/embeddings"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/xai.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "xai",
+ priority: 280,
+ alias: "xai",
+ display: {
+ name: "xAI (Grok)",
+ icon: "auto_awesome",
+ color: "#1DA1F2",
+ textIcon: "XA",
+ website: "https://x.ai",
+ notice: {
+ apiKeyUrl: "https://console.x.ai"
+ }
+ },
+ category: "oauth",
+ authModes: [
+ "oauth",
+ "apikey"
+ ],
+ hasOAuth: true,
+ transport: {
+ baseUrl: "https://api.x.ai/v1/chat/completions",
+ validateUrl: "https://api.x.ai/v1/models",
+ responsesUrl: "https://api.x.ai/v1/responses",
+ clientId: "b1a00492-073a-47ea-816f-4c329264a828",
+ tokenUrl: "https://auth.x.ai/oauth2/token",
+ refreshUrl: "https://auth.x.ai/oauth2/token",
+ // OAuth-only SuperGrok quota surfaces:
+ // - url: monthly API usage allotment (JSON)
+ // - creditsUrl: weekly SuperGrok limit (grpc-web)
+ // - settingsUrl: plan label (subscription_tier_display)
+ usage: {
+ url: "https://cli-chat-proxy.grok.com/v1/billing",
+ creditsUrl: "https://grok.com/grok_api_v2.GrokBuildBilling/GetGrokCreditsConfig",
+ settingsUrl: "https://cli-chat-proxy.grok.com/v1/settings"
+ }
+ },
+ models: [
+ {
+ id: "grok-4",
+ name: "Grok 4"
+ },
+ {
+ id: "grok-4-fast-reasoning",
+ name: "Grok 4 Fast Reasoning"
+ },
+ {
+ id: "grok-code-fast-1",
+ name: "Grok Code Fast"
+ },
+ {
+ id: "grok-3",
+ name: "Grok 3"
+ },
+ {
+ id: "grok-imagine-image-quality",
+ name: "Grok Imagine Image Quality",
+ capabilities: [
+ "text2img",
+ "edit"
+ ],
+ params: [
+ "n",
+ "aspect_ratio",
+ "resolution",
+ "response_format",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "grok-2-image-1212",
+ name: "Grok 2 Image",
+ capabilities: [
+ "text2img",
+ "edit"
+ ],
+ params: [
+ "n",
+ "aspect_ratio",
+ "resolution",
+ "response_format",
+ "size"
+ ],
+ kind: "image"
+ },
+ {
+ id: "grok-imagine-video",
+ name: "Grok Imagine Video",
+ params: [
+ "duration",
+ "aspect_ratio",
+ "resolution"
+ ],
+ kind: "video"
+ }
+ ],
+ serviceKinds: [
+ "llm",
+ "imageToText",
+ "webSearch",
+ "image",
+ "video"
+ ],
+ imageConfig: {
+ baseUrl: "https://api.x.ai/v1/images/generations",
+ editsUrl: "https://api.x.ai/v1/images/edits",
+ bodyFields: [
+ "model",
+ "prompt",
+ "n",
+ "response_format",
+ "aspect_ratio",
+ "resolution",
+ "image",
+ "images"
+ ]
+ },
+ // Async video jobs (POST returns { request_id }, GET polls until done/failed).
+ // Docs: https://docs.x.ai/developers/rest-api-reference/inference/videos
+ videoConfig: {
+ baseUrl: "https://api.x.ai/v1/videos"
+ },
+ searchViaChat: {
+ defaultModel: "grok-4.20-reasoning",
+ endpoint: "https://api.x.ai/v1/responses",
+ pricingUrl: "https://x.ai/api#pricing"
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/registry/xiaomi-mimo.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "xiaomi-mimo",
+ priority: 290,
+ alias: "xiaomi-mimo",
+ aliases: [
+ "mimo"
+ ],
+ uiAlias: "mimo",
+ display: {
+ name: "Xiaomi MiMo",
+ icon: "smart_toy",
+ color: "#FF6900",
+ textIcon: "XM",
+ website: "https://xiaomimimo.com",
+ notice: {
+ apiKeyUrl: "https://platform.xiaomimimo.com/console/api-keys"
+ }
+ },
+ category: "apikey",
+ serviceKinds: [
+ "llm",
+ "tts"
+ ],
+ transport: {
+ baseUrl: "https://api.xiaomimimo.com/v1/chat/completions",
+ validateUrl: "https://api.xiaomimimo.com/v1/models"
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ transports: [
+ {
+ format: "openai",
+ baseUrl: "https://api.xiaomimimo.com/v1/chat/completions",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ baseUrl: "https://api.xiaomimimo.com/anthropic/v1/messages",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "mimo-v2.5-pro",
+ name: "MiMo V2.5 Pro"
+ },
+ {
+ id: "mimo-v2.5",
+ name: "MiMo V2.5"
+ },
+ {
+ id: "mimo-v2-omni",
+ name: "MiMo V2 Omni"
+ },
+ {
+ id: "mimo-v2-flash",
+ name: "MiMo V2 Flash"
+ },
+ {
+ id: "mimo-v2.5-tts",
+ name: "MiMo V2.5 TTS",
+ kind: "tts"
+ }
+ ],
+ ttsConfig: {
+ baseUrl: "https://api.xiaomimimo.com/v1/chat/completions",
+ authType: "apikey",
+ authHeader: "bearer",
+ format: "xiaomi-mimo-tts"
+ }
+};
+}),
+"[project]/open-sse/providers/registry/xiaomi-tokenplan.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)");
+;
+const __TURBOPACK__default__export__ = {
+ id: "xiaomi-tokenplan",
+ priority: 300,
+ alias: "xiaomi-tokenplan",
+ aliases: [
+ "xmtp"
+ ],
+ uiAlias: "xmtp",
+ display: {
+ name: "Xiaomi MiMo (Token Plan)",
+ icon: "smart_toy",
+ color: "#FF6700",
+ textIcon: "XT",
+ website: "https://mimo.xiaomi.com",
+ notice: {
+ text: "Xiaomi MiMo Token Plan subscription (API key starts with tp-). Token Plan keys are cluster-specific — select the region matching your subscription.",
+ apiKeyUrl: "https://mimo.xiaomi.com"
+ }
+ },
+ category: "apikey",
+ hasProviderSpecificData: true,
+ regions: [
+ {
+ id: "sgp",
+ label: "Singapore (新加坡)"
+ },
+ {
+ id: "cn",
+ label: "China (中国大陆)"
+ },
+ {
+ id: "ams",
+ label: "Amsterdam (阿姆斯特丹)"
+ }
+ ],
+ defaultRegion: "sgp",
+ transport: {
+ baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1/chat/completions",
+ regions: {
+ sgp: "https://token-plan-sgp.xiaomimimo.com/v1",
+ cn: "https://token-plan-cn.xiaomimimo.com/v1",
+ ams: "https://token-plan-ams.xiaomimimo.com/v1"
+ },
+ defaultRegion: "sgp"
+ },
+ // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.
+ // baseUrl omitted — region-dynamic, resolved in the executor's buildUrl.
+ transports: [
+ {
+ format: "openai",
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: "bearer"
+ }
+ },
+ {
+ format: "claude",
+ headers: {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$shared$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["CLAUDE_API_HEADERS"]
+ },
+ auth: {
+ combined: true,
+ header: "x-api-key",
+ scheme: "raw"
+ }
+ }
+ ],
+ models: [
+ {
+ id: "mimo-v2.5-pro",
+ name: "MiMo V2.5 Pro"
+ },
+ {
+ id: "mimo-v2.5-pro-claude",
+ name: "MiMo V2.5 Pro (Claude Native)",
+ targetFormat: "claude",
+ upstreamModelId: "mimo-v2.5-pro"
+ },
+ {
+ id: "mimo-v2.5",
+ name: "MiMo V2.5"
+ },
+ {
+ id: "mimo-v2-pro",
+ name: "MiMo V2 Pro"
+ },
+ {
+ id: "mimo-v2-omni",
+ name: "MiMo V2 Omni"
+ },
+ {
+ id: "mimo-v2-tts",
+ name: "MiMo V2 TTS"
+ },
+ {
+ id: "mimo-v2.5-tts",
+ name: "MiMo V2.5 TTS"
+ },
+ {
+ id: "mimo-v2.5-tts-voiceclone",
+ name: "MiMo V2.5 TTS Voice Clone"
+ },
+ {
+ id: "mimo-v2.5-tts-voicedesign",
+ name: "MiMo V2.5 TTS Voice Design"
+ }
+ ]
+};
+}),
+"[project]/open-sse/providers/registry/youcom.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "youcom",
+ alias: "youcom",
+ display: {
+ name: "You.com Search",
+ icon: "search",
+ color: "#7C3AED",
+ textIcon: "YC",
+ website: "https://you.com",
+ notice: {
+ apiKeyUrl: "https://api.you.com"
+ }
+ },
+ category: "apikey",
+ authType: "apikey",
+ serviceKinds: [
+ "webSearch"
+ ],
+ searchConfig: {
+ baseUrl: "https://ydc-index.io/v1/search",
+ method: "GET",
+ authType: "apikey",
+ authHeader: "x-api-key",
+ costPerQuery: 0.005,
+ freeMonthlyQuota: 0,
+ searchTypes: [
+ "web",
+ "news"
+ ],
+ defaultMaxResults: 5,
+ maxMaxResults: 100,
+ timeoutMs: 10000,
+ cacheTTLMs: 300000
+ }
+};
+}),
+"[project]/open-sse/providers/registry/zed.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// Zed provider — RSA keypair callback auth (NOT standard OAuth).
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+const __TURBOPACK__default__export__ = {
+ id: "zed",
+ priority: 10,
+ alias: "zd",
+ uiAlias: "zd",
+ hidden: true,
+ display: {
+ name: "Zed",
+ icon: "code",
+ color: "#A855F7",
+ website: "https://zed.dev",
+ notice: {
+ signupUrl: "https://zed.dev/native_app_signin"
+ }
+ },
+ category: "oauth",
+ authType: "oauth",
+ hasOAuth: true,
+ transport: {
+ // Zed hosted LLM aggregator: cloud.zed.dev/completions is a
+ // multi-format proxy fronting Anthropic/OpenAI/Google/xAI depending on the model.
+ // Wire protocol = NDJSON/SSE-ish stream authenticated with a short-lived LLM bearer
+ // token exchanged from the RSA-decrypted access_token (see open-sse/shared/zedAuth).
+ baseUrl: "https://cloud.zed.dev/completions",
+ format: "openai",
+ forceStream: true,
+ headers: {
+ "content-type": "application/json"
+ },
+ // Auth scheme is non-standard: "Authorization: " plus a duplicate
+ // x-zed-cloud-token header (verified in zed_account.rs build_authorization_header +
+ // cloud fetch). Executor builds both; scheme here is a marker for config-driven tooling.
+ auth: {
+ combined: true,
+ header: "Authorization",
+ scheme: " "
+ },
+ usage: {
+ url: "https://cloud.zed.dev/client/users/me"
+ },
+ // Live catalog discovery — Zed's hosted model list changes frequently and is fetched
+ // per-connection rather than hardcoded.
+ modelsUrl: "https://cloud.zed.dev/models"
+ },
+ // Empty static catalog + passthrough: Zed fronts a rotating set of upstream models
+ // (Claude/GPT/Gemini/Grok). Resolved live via modelsUrl; any client-sent model id is
+ // forwarded as-is rather than validated against a frozen list.
+ models: [],
+ passthroughModels: true,
+ oauth: {
+ // Zed auth flow is RSA-based, NOT OAuth2/PKCE:
+ // 1. App generates RSA-2048 keypair locally (PKCS#1 DER, URL-safe base64).
+ // 2. Bind random TCP port on 127.0.0.1.
+ // 3. Open https://zed.dev/native_app_signin?native_app_port={port}&native_app_public_key={pub}.
+ // 4. After login, browser redirects http://127.0.0.1:{port}/?user_id=...&access_token=...
+ // where access_token = base64(RSA-encrypted plaintext token).
+ // 5. Decrypt with private key (OAEP-SHA256, fallback PKCS1v15). Store user_id + plaintext token.
+ // No clientId/clientSecret/tokenUrl/refreshUrl — long-lived access_token, no refresh.
+ authorizeUrl: "https://zed.dev/native_app_signin",
+ platform: "zed",
+ rsaKeyExchange: true
+ },
+ features: {
+ usage: true
+ }
+};
+}),
+"[project]/open-sse/providers/schema.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "ENDPOINT_DEFAULTS",
+ ()=>ENDPOINT_DEFAULTS,
+ "PROVIDER_DEFAULTS",
+ ()=>PROVIDER_DEFAULTS,
+ "resolveProvider",
+ ()=>resolveProvider
+]);
+// Provider transport schema: shared defaults + endpoint defaults + resolver (skeleton, not wired)
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$runtimeConfig$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/open-sse/config/runtimeConfig.js [instrumentation] (ecmascript) ");
+;
+const PROVIDER_DEFAULTS = {
+ baseUrl: "",
+ format: "openai",
+ headers: {},
+ auth: {
+ header: "Authorization",
+ scheme: "bearer",
+ source: [
+ "accessToken",
+ "apiKey"
+ ]
+ },
+ forceStream: false,
+ urlSuffix: "",
+ quirks: {},
+ passthroughModels: false,
+ retry: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$runtimeConfig$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__["DEFAULT_RETRY_CONFIG"],
+ timeoutMs: __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$runtimeConfig$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__["FETCH_CONNECT_TIMEOUT_MS"],
+ executor: "default"
+};
+const ENDPOINT_DEFAULTS = {
+ openai: {
+ chat: "/chat/completions",
+ test: "/models",
+ models: "/models"
+ },
+ claude: {
+ chat: "/messages",
+ test: "/models",
+ countTokens: "/messages/count_tokens"
+ },
+ gemini: {
+ chat: "/{model}:streamGenerateContent",
+ models: "/models",
+ test: "/models"
+ }
+};
+function resolveProvider(entry) {
+ const transport = entry && entry.transport || {};
+ return {
+ ...PROVIDER_DEFAULTS,
+ ...transport,
+ headers: {
+ ...PROVIDER_DEFAULTS.headers,
+ ...transport.headers
+ },
+ auth: {
+ ...PROVIDER_DEFAULTS.auth,
+ ...transport.auth
+ },
+ quirks: {
+ ...PROVIDER_DEFAULTS.quirks,
+ ...transport.quirks
+ },
+ retry: {
+ ...PROVIDER_DEFAULTS.retry,
+ ...transport.retry
+ }
+ };
+}
+}),
+"[project]/open-sse/providers/shared.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "ANTHROPIC_API_VERSION",
+ ()=>ANTHROPIC_API_VERSION,
+ "ANTHROPIC_COMPAT_BASE",
+ ()=>ANTHROPIC_COMPAT_BASE,
+ "ANTIGRAVITY_IDE_BASE_URL",
+ ()=>ANTIGRAVITY_IDE_BASE_URL,
+ "ANTIGRAVITY_IDE_USER_AGENT",
+ ()=>ANTIGRAVITY_IDE_USER_AGENT,
+ "ANTIGRAVITY_IDE_VERSION",
+ ()=>ANTIGRAVITY_IDE_VERSION,
+ "ANTIGRAVITY_OAUTH_CLIENT",
+ ()=>ANTIGRAVITY_OAUTH_CLIENT,
+ "CLAUDE_API_HEADERS",
+ ()=>CLAUDE_API_HEADERS,
+ "CLAUDE_CLI_SPOOF_HEADERS",
+ ()=>CLAUDE_CLI_SPOOF_HEADERS,
+ "GOOGLE_OAUTH_CLIENT",
+ ()=>GOOGLE_OAUTH_CLIENT,
+ "KIMI_CODING_BASE_URL",
+ ()=>KIMI_CODING_BASE_URL,
+ "OPENAI_COMPAT_BASE",
+ ()=>OPENAI_COMPAT_BASE,
+ "mapStainlessArch",
+ ()=>mapStainlessArch,
+ "mapStainlessOs",
+ ()=>mapStainlessOs,
+ "selectAnthropicBeta",
+ ()=>selectAnthropicBeta
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/os [external] (os, cjs)");
+;
+function mapStainlessOs() {
+ switch((0, __TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__["platform"])()){
+ case "darwin":
+ return "MacOS";
+ case "win32":
+ return "Windows";
+ case "linux":
+ return "Linux";
+ case "freebsd":
+ return "FreeBSD";
+ default:
+ return `Other::${(0, __TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__["platform"])()}`;
+ }
+}
+function mapStainlessArch() {
+ switch((0, __TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__["arch"])()){
+ case "x64":
+ return "x64";
+ case "arm64":
+ return "arm64";
+ case "ia32":
+ return "x86";
+ default:
+ return `other::${(0, __TURBOPACK__imported__module__$5b$externals$5d2f$os__$5b$external$5d$__$28$os$2c$__cjs$29$__["arch"])()}`;
+ }
+}
+const ANTHROPIC_API_VERSION = "2023-06-01";
+const CLAUDE_API_HEADERS = {
+ "Anthropic-Version": ANTHROPIC_API_VERSION,
+ "Anthropic-Beta": "claude-code-20250219,interleaved-thinking-2025-05-14"
+};
+const CLAUDE_CLI_SPOOF_HEADERS = {
+ "Anthropic-Version": ANTHROPIC_API_VERSION,
+ "Anthropic-Beta": "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28",
+ "Anthropic-Dangerous-Direct-Browser-Access": "true",
+ "User-Agent": "claude-cli/2.1.92 (external, sdk-cli)",
+ "X-App": "cli",
+ "X-Stainless-Helper-Method": "stream",
+ "X-Stainless-Retry-Count": "0",
+ "X-Stainless-Runtime-Version": "v24.14.0",
+ "X-Stainless-Package-Version": "0.80.0",
+ "X-Stainless-Runtime": "node",
+ "X-Stainless-Lang": "js",
+ "X-Stainless-Arch": mapStainlessArch(),
+ "X-Stainless-Os": mapStainlessOs(),
+ "X-Stainless-Timeout": "600"
+};
+const ANTHROPIC_BETA_BASE = [
+ "claude-code-20250219",
+ "oauth-2025-04-20",
+ "interleaved-thinking-2025-05-14",
+ "context-management-2025-06-27",
+ "prompt-caching-scope-2026-01-05",
+ "structured-outputs-2025-12-15",
+ "fast-mode-2026-02-01",
+ "redact-thinking-2026-02-12",
+ "token-efficient-tools-2026-03-28"
+];
+const ANTHROPIC_BETA_HEAVY_AGENT = [
+ "advanced-tool-use-2025-11-20",
+ "effort-2025-11-24"
+];
+function selectAnthropicBeta(model = "") {
+ const flags = [
+ ...ANTHROPIC_BETA_BASE
+ ];
+ if (/^claude-(opus|sonnet)/.test(model)) flags.push(...ANTHROPIC_BETA_HEAVY_AGENT);
+ return flags.join(",");
+}
+const KIMI_CODING_BASE_URL = "https://api.kimi.com/coding/v1/messages";
+const OPENAI_COMPAT_BASE = "https://api.openai.com/v1";
+const ANTHROPIC_COMPAT_BASE = "https://api.anthropic.com/v1";
+const ANTIGRAVITY_IDE_VERSION = "2.1.1";
+const ANTIGRAVITY_IDE_BASE_URL = "https://daily-cloudcode-pa.googleapis.com";
+const ANTIGRAVITY_IDE_USER_AGENT = `antigravity/ide/${ANTIGRAVITY_IDE_VERSION} darwin/arm64`;
+const ANTIGRAVITY_OAUTH_CLIENT = {
+ clientId: "1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",
+ clientSecret: "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"
+};
+const GOOGLE_OAUTH_CLIENT = {
+ clientId: "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",
+ clientSecret: "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"
+};
+}),
+"[project]/package.json.[json].mjs [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__
+]);
+"use turbopack no side effects";
+const __TURBOPACK__default__export__ = {
+ "name": "9router-app",
+ "version": "0.5.55",
+ "description": "9Router web dashboard",
+ "private": true,
+ "scripts": {
+ "dev": "next dev --port 20127",
+ "dev:webpack": "next dev --webpack --port 20127",
+ "build": "next build --webpack",
+ "postbuild": "node scripts/copy-standalone-assets.mjs",
+ "postbuild:bun": "node scripts/copy-standalone-assets.mjs",
+ "start": "node custom-server.js --port 20127",
+ "dev:bun": "bun --bun next dev --webpack --port 20127",
+ "build:bun": "bun --bun next build --webpack",
+ "start:bun": "bun ./.next/standalone/custom-server.js",
+ "cli:pack": "npm --prefix cli run pack:cli",
+ "cli:publish": "npm --prefix cli run publish:cli"
+ },
+ "dependencies": {
+ "@dnd-kit/core": "^6.3.1",
+ "@dnd-kit/modifiers": "^9.0.0",
+ "@dnd-kit/sortable": "^10.0.0",
+ "@dnd-kit/utilities": "^3.2.2",
+ "@monaco-editor/react": "^4.7.0",
+ "@next/third-parties": "^16.3.1",
+ "@node-saml/node-saml": "^5.1.0",
+ "@xyflow/react": "^12.11.3",
+ "bcryptjs": "^3.0.3",
+ "chalk": "^5.6.2",
+ "confbox": "^0.2.4",
+ "express": "^5.2.1",
+ "http-proxy-middleware": "^3.0.7",
+ "jose": "^6.2.9",
+ "marked": "^18.0.10",
+ "material-symbols": "^0.44.12",
+ "monaco-editor": "^0.55.1",
+ "next": "^16.3.1",
+ "node-forge": "^1.4.0",
+ "node-machine-id": "^1.1.12",
+ "open": "^11.0.1",
+ "ora": "^9.4.1",
+ "prop-types": "^15.8.1",
+ "react": "19.2.4",
+ "react-dom": "19.2.4",
+ "react-is": "^16.13.1",
+ "recharts": "^3.10.1",
+ "selfsigned": "^5.5.0",
+ "socks-proxy-agent": "^8.0.5",
+ "sql.js": "^1.14.2",
+ "undici": "^7.29.0",
+ "uuid": "^13.0.2",
+ "zustand": "^5.0.15"
+ },
+ "optionalDependencies": {
+ "better-sqlite3": "^12.11.1"
+ },
+ "comment_better_sqlite3": "kept in optionalDependencies so npm install doesn't fail on systems without build tools — sql.js is used as fallback at runtime",
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4.3.3",
+ "eslint": "^9.39.5",
+ "eslint-config-next": "16.1.6",
+ "postcss": "^8.5.26",
+ "tailwindcss": "^4.3.3"
+ }
+};
+}),
+"[project]/src/lib/consoleLogBuffer.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "clearConsoleLogs",
+ ()=>clearConsoleLogs,
+ "getConsoleEmitter",
+ ()=>getConsoleEmitter,
+ "getConsoleLogs",
+ ()=>getConsoleLogs,
+ "initConsoleLogCapture",
+ ()=>initConsoleLogCapture
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$events__$5b$external$5d$__$28$events$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/events [external] (events, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$config$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/shared/constants/config.js [instrumentation] (ecmascript) ");
+;
+;
+const consoleLevels = [
+ "log",
+ "info",
+ "warn",
+ "error",
+ "debug"
+];
+if (!/*TURBOPACK member replacement*/ __turbopack_context__.g._consoleLogBufferState) {
+ /*TURBOPACK member replacement*/ __turbopack_context__.g._consoleLogBufferState = {
+ logs: [],
+ patched: false,
+ originals: {},
+ emitter: new __TURBOPACK__imported__module__$5b$externals$5d2f$events__$5b$external$5d$__$28$events$2c$__cjs$29$__["EventEmitter"]()
+ };
+ /*TURBOPACK member replacement*/ __turbopack_context__.g._consoleLogBufferState.emitter.setMaxListeners(50);
+}
+const state = /*TURBOPACK member replacement*/ __turbopack_context__.g._consoleLogBufferState;
+// Ensure emitter exists (handles hot reload with stale global)
+if (!state.emitter) {
+ state.emitter = new __TURBOPACK__imported__module__$5b$externals$5d2f$events__$5b$external$5d$__$28$events$2c$__cjs$29$__["EventEmitter"]();
+ state.emitter.setMaxListeners(50);
+}
+if (!state.pendingLines) state.pendingLines = [];
+if (!state.flushTimer) state.flushTimer = null;
+const FLUSH_INTERVAL_MS = 100;
+const MAX_BATCH_LINES = 50;
+function flushPendingLines() {
+ state.flushTimer = null;
+ if (!state.pendingLines.length) return;
+ const lines = state.pendingLines.splice(0, state.pendingLines.length);
+ state.emitter.emit("lines", lines);
+}
+function scheduleFlush() {
+ if (state.flushTimer) return;
+ state.flushTimer = setTimeout(flushPendingLines, FLUSH_INTERVAL_MS);
+ state.flushTimer?.unref?.();
+}
+function toLogLine(level, args) {
+ return args.map(formatArg).join(" ");
+}
+// Strip ANSI escape codes so terminal colors don't bleed into UI
+const ANSI_RE = /\x1b\[[0-9;]*m/g;
+function stripAnsi(str) {
+ return str.replace(ANSI_RE, "");
+}
+function formatArg(arg) {
+ if (typeof arg === "string") return stripAnsi(arg);
+ if (arg instanceof Error) return stripAnsi(arg.stack || arg.message || String(arg));
+ try {
+ return stripAnsi(JSON.stringify(arg));
+ } catch {
+ return stripAnsi(String(arg));
+ }
+}
+function appendLine(line) {
+ state.logs.push(line);
+ const maxLines = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$config$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__["CONSOLE_LOG_CONFIG"].maxLines;
+ if (state.logs.length > maxLines) {
+ state.logs = state.logs.slice(-maxLines);
+ }
+ state.pendingLines.push(line);
+ if (state.pendingLines.length >= MAX_BATCH_LINES) {
+ if (state.flushTimer) {
+ clearTimeout(state.flushTimer);
+ state.flushTimer = null;
+ }
+ flushPendingLines();
+ } else {
+ scheduleFlush();
+ }
+}
+function initConsoleLogCapture() {
+ if (state.patched) return;
+ for (const level of consoleLevels){
+ state.originals[level] = console[level];
+ console[level] = (...args)=>{
+ appendLine(toLogLine(level, args));
+ state.originals[level](...args);
+ };
+ }
+ state.patched = true;
+}
+function getConsoleLogs() {
+ return state.logs;
+}
+function clearConsoleLogs() {
+ state.logs = [];
+ state.emitter.emit("clear");
+}
+function getConsoleEmitter() {
+ return state.emitter;
+}
+}),
+"[project]/src/shared/constants/config.js [instrumentation] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "API_ENDPOINTS",
+ ()=>API_ENDPOINTS,
+ "APP_CONFIG",
+ ()=>APP_CONFIG,
+ "CLIENT_STORE_TTL_MS",
+ ()=>CLIENT_STORE_TTL_MS,
+ "CONSOLE_LOG_CONFIG",
+ ()=>CONSOLE_LOG_CONFIG,
+ "GITHUB_CONFIG",
+ ()=>GITHUB_CONFIG,
+ "QUOTA_AUTOPING_CONFIG",
+ ()=>QUOTA_AUTOPING_CONFIG,
+ "SUBSCRIPTION_CONFIG",
+ ()=>SUBSCRIPTION_CONFIG,
+ "THEME_CONFIG",
+ ()=>THEME_CONFIG,
+ "UPDATER_CONFIG",
+ ()=>UPDATER_CONFIG
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$package$2e$json$2e5b$json$5d2e$mjs__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/package.json.[json].mjs [instrumentation] (ecmascript)");
+// Re-export from providers.js for backward compatibility
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$providers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/shared/constants/providers.js [instrumentation] (ecmascript)");
+// Re-export from models.js for backward compatibility
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$models$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/shared/constants/models.js [instrumentation] (ecmascript) ");
+;
+const APP_CONFIG = {
+ name: "9Router Proxy",
+ description: "AI Infrastructure Management",
+ version: __TURBOPACK__imported__module__$5b$project$5d2f$package$2e$json$2e5b$json$5d2e$mjs__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"].version
+};
+const GITHUB_CONFIG = {
+ changelogUrl: "https://raw.githubusercontent.com/decolua/9router/refs/heads/master/CHANGELOG.md",
+ donateUrl: "https://9router.com/api/donate"
+};
+const UPDATER_CONFIG = {
+ npmPackageName: "9router",
+ installCmd: "npm i -g 9router",
+ installCmdLatest: "npm i -g 9router@latest --prefer-online",
+ shutdownCountdownSec: 3,
+ exitDelayMs: 500,
+ statusPort: 20129,
+ statusPollIntervalMs: 1000,
+ statusLogTailLines: 8,
+ installRetries: 3,
+ installRetryDelayMs: 5000,
+ lingerAfterDoneMs: 30000,
+ waitForExitMinMs: 5000,
+ waitForExitMaxMs: 20000,
+ waitForExitCheckMs: 500,
+ appPort: 20128
+};
+const THEME_CONFIG = {
+ storageKey: "theme",
+ defaultTheme: "system"
+};
+const SUBSCRIPTION_CONFIG = {
+ price: 1.0,
+ currency: "USD",
+ interval: "month",
+ planName: "Pro Plan"
+};
+const API_ENDPOINTS = {
+ users: "/api/users",
+ providers: "/api/providers",
+ payments: "/api/payments",
+ auth: "/api/auth"
+};
+const CONSOLE_LOG_CONFIG = {
+ maxLines: 200,
+ pollIntervalMs: 1000
+};
+const CLIENT_STORE_TTL_MS = 60000;
+const QUOTA_AUTOPING_CONFIG = {
+ tickIntervalMs: 60000,
+ pingLeadMs: 5000,
+ refreshAheadMs: 300000,
+ failureCooldownMs: 900000,
+ providers: {
+ claude: {
+ settingsKey: "claudeAutoPing",
+ quotaKey: "session (5h)",
+ pingModel: "claude-haiku-4-5-20251001",
+ pingText: "hi",
+ pingMaxTokens: 1
+ },
+ codex: {
+ settingsKey: "codexAutoPing",
+ quotaKey: "session",
+ pingWhenResetAtSlides: true,
+ resetAtDriftMs: 30000,
+ minPingIntervalMs: 600000,
+ skipWhenBlockingQuotaExhausted: true,
+ // Free and Plus Codex accounts both expose gpt-5.5; avoid fallback probes that waste requests.
+ pingModel: "gpt-5.5",
+ pingText: "hi",
+ pingInstructions: "Reply with OK.",
+ pingReasoningEffort: "none"
+ }
+ }
+};
+;
+;
+}),
+"[project]/src/shared/constants/models.js [instrumentation] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "AI_MODELS",
+ ()=>AI_MODELS,
+ "CAPACITY_META",
+ ()=>CAPACITY_META,
+ "getModelKind",
+ ()=>getModelKind,
+ "isValidModel",
+ ()=>isValidModel
+]);
+// Import directly from file to avoid pulling in server-side dependencies via index.js
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$config$2f$providerModels$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/open-sse/config/providerModels.js [instrumentation] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$providers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/shared/constants/providers.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/index.js [instrumentation] (ecmascript)");
+;
+;
+;
+// Providers that accept any model (passthrough)
+const PASSTHROUGH_PROVIDERS = new Set(Object.entries(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$providers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["AI_PROVIDERS"]).filter(([, p])=>p.passthroughModels).map(([key])=>key));
+function isValidModel(aliasOrId, modelId) {
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$providers$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["isOpenAICompatibleProvider"])(aliasOrId)) return true;
+ if (PASSTHROUGH_PROVIDERS.has(aliasOrId)) return true;
+ const models = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"][aliasOrId];
+ if (!models) return false;
+ return models.some((m)=>m.id === modelId);
+}
+const AI_MODELS = Object.entries(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["PROVIDER_MODELS"]).flatMap(([alias, models])=>models.map((m)=>({
+ provider: alias,
+ model: m.id,
+ name: m.name
+ })));
+const getModelKind = (m, fallback = null)=>m?.kind || m?.type || fallback;
+const CAPACITY_META = {
+ vision: {
+ icon: "visibility",
+ label: "Vision",
+ desc: "Supports image input",
+ color: "text-blue-500"
+ },
+ // search: temporarily hidden (feature not wired yet)
+ reasoning: {
+ icon: "neurology",
+ label: "Reasoning",
+ desc: "Supports reasoning / thinking",
+ color: "text-amber-500"
+ }
+};
+}),
+"[project]/src/shared/constants/providers.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "AI_PROVIDERS",
+ ()=>AI_PROVIDERS,
+ "ALIAS_TO_ID",
+ ()=>ALIAS_TO_ID,
+ "ANTHROPIC_COMPATIBLE_PREFIX",
+ ()=>ANTHROPIC_COMPATIBLE_PREFIX,
+ "APIKEY_PROVIDERS",
+ ()=>APIKEY_PROVIDERS,
+ "AUTH_METHODS",
+ ()=>AUTH_METHODS,
+ "CUSTOM_EMBEDDING_PREFIX",
+ ()=>CUSTOM_EMBEDDING_PREFIX,
+ "FREE_PROVIDERS",
+ ()=>FREE_PROVIDERS,
+ "FREE_TIER_PROVIDERS",
+ ()=>FREE_TIER_PROVIDERS,
+ "ID_TO_ALIAS",
+ ()=>ID_TO_ALIAS,
+ "MEDIA_PROVIDER_KINDS",
+ ()=>MEDIA_PROVIDER_KINDS,
+ "OAUTH_PROVIDERS",
+ ()=>OAUTH_PROVIDERS,
+ "OPENAI_COMPATIBLE_PREFIX",
+ ()=>OPENAI_COMPATIBLE_PREFIX,
+ "THINKING_CONFIG",
+ ()=>THINKING_CONFIG,
+ "USAGE_APIKEY_PROVIDERS",
+ ()=>USAGE_APIKEY_PROVIDERS,
+ "USAGE_SUPPORTED_PROVIDERS",
+ ()=>USAGE_SUPPORTED_PROVIDERS,
+ "WEB_COOKIE_PROVIDERS",
+ ()=>WEB_COOKIE_PROVIDERS,
+ "getProviderAlias",
+ ()=>getProviderAlias,
+ "getProviderByAlias",
+ ()=>getProviderByAlias,
+ "getProvidersByKind",
+ ()=>getProvidersByKind,
+ "isAnthropicCompatibleProvider",
+ ()=>isAnthropicCompatibleProvider,
+ "isCustomEmbeddingProvider",
+ ()=>isCustomEmbeddingProvider,
+ "isOpenAICompatibleProvider",
+ ()=>isOpenAICompatibleProvider,
+ "resolveProviderId",
+ ()=>resolveProviderId
+]);
+// Provider definitions
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/index.js [instrumentation] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$providersDisplay$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/shared/constants/providersDisplay.js [instrumentation] (ecmascript)");
+;
+;
+const MEDIA_ENTRY_KEYS = [
+ "serviceKinds",
+ "ttsConfig",
+ "sttConfig",
+ "embeddingConfig",
+ "imageConfig",
+ "imageToTextConfig",
+ "videoConfig",
+ "musicConfig",
+ "searchViaChat",
+ "searchConfig",
+ "fetchConfig",
+ "modelsFetcher",
+ "mediaPriority",
+ "hiddenKinds"
+];
+// Build provider UI object from registry entry
+function buildProviderEntry(r) {
+ const mediaFields = {};
+ if (r.media) Object.assign(mediaFields, r.media);
+ for (const k of MEDIA_ENTRY_KEYS){
+ if (r[k] !== undefined) mediaFields[k] = r[k];
+ }
+ const display = {
+ ...r.display || {}
+ };
+ if (display.deprecationNotice === "RISK_NOTICE") display.deprecationNotice = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$shared$2f$constants$2f$providersDisplay$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["RISK_NOTICE"];
+ return {
+ ...display,
+ id: r.id,
+ alias: r.uiAlias || r.alias,
+ ...r.hidden ? {
+ hidden: true
+ } : {},
+ ...mediaFields,
+ ...r.priority !== undefined ? {
+ priority: r.priority
+ } : {},
+ ...r.hasFree ? {
+ hasFree: true
+ } : {},
+ ...r.thinkingConfig ? {
+ thinkingConfig: r.thinkingConfig
+ } : {},
+ ...r.regions ? {
+ regions: r.regions,
+ defaultRegion: r.defaultRegion
+ } : {},
+ ...r.hasProviderSpecificData ? {
+ hasProviderSpecificData: true
+ } : {},
+ ...r.noAuth ? {
+ noAuth: true
+ } : {},
+ ...r.passthroughModels ? {
+ passthroughModels: true
+ } : {},
+ ...r.hasOAuth ? {
+ hasOAuth: true
+ } : {},
+ ...r.authModes ? {
+ authModes: r.authModes
+ } : {},
+ ...r.authType ? {
+ authType: r.authType
+ } : {},
+ ...r.authHint ? {
+ authHint: r.authHint
+ } : {}
+ };
+}
+const byCategory = (cat)=>Object.fromEntries(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"].filter((r)=>r.category === cat).map((r)=>[
+ r.id,
+ buildProviderEntry(r)
+ ]));
+const FREE_PROVIDERS = byCategory("free");
+const FREE_TIER_PROVIDERS = byCategory("freeTier");
+const THINKING_CONFIG = {
+ extended: {
+ options: [
+ "auto",
+ "on",
+ "off"
+ ],
+ defaultMode: "auto",
+ defaultBudgetTokens: 10000
+ },
+ effort: {
+ options: [
+ "auto",
+ "none",
+ "low",
+ "medium",
+ "high"
+ ],
+ defaultMode: "auto"
+ }
+};
+const OAUTH_PROVIDERS = byCategory("oauth");
+const APIKEY_PROVIDERS = byCategory("apikey");
+const WEB_COOKIE_PROVIDERS = byCategory("webCookie");
+const MEDIA_PROVIDER_KINDS = [
+ {
+ id: "embedding",
+ label: "Embedding",
+ icon: "data_array",
+ endpoint: {
+ method: "POST",
+ path: "/v1/embeddings"
+ }
+ },
+ {
+ id: "image",
+ label: "Text to Image",
+ icon: "brush",
+ endpoint: {
+ method: "POST",
+ path: "/v1/images/generations"
+ }
+ },
+ {
+ id: "imageToText",
+ label: "Image to Text",
+ icon: "image_search",
+ endpoint: {
+ method: "POST",
+ path: "/v1/images/understanding"
+ }
+ },
+ {
+ id: "tts",
+ label: "Text To Speech",
+ icon: "record_voice_over",
+ endpoint: {
+ method: "POST",
+ path: "/v1/audio/speech"
+ }
+ },
+ {
+ id: "stt",
+ label: "Speech To Text",
+ icon: "mic",
+ endpoint: {
+ method: "POST",
+ path: "/v1/audio/transcriptions"
+ }
+ },
+ {
+ id: "webSearch",
+ label: "Web Search",
+ icon: "travel_explore",
+ endpoint: {
+ method: "POST",
+ path: "/v1/search"
+ }
+ },
+ {
+ id: "webFetch",
+ label: "Web Fetch",
+ icon: "language",
+ endpoint: {
+ method: "POST",
+ path: "/v1/web/fetch"
+ }
+ },
+ {
+ id: "video",
+ label: "Video",
+ icon: "movie",
+ endpoint: {
+ method: "POST",
+ path: "/v1/videos/generations"
+ }
+ },
+ {
+ id: "music",
+ label: "Music",
+ icon: "music_note",
+ endpoint: {
+ method: "POST",
+ path: "/v1/audio/music"
+ }
+ }
+];
+const OPENAI_COMPATIBLE_PREFIX = "openai-compatible-";
+const ANTHROPIC_COMPATIBLE_PREFIX = "anthropic-compatible-";
+const CUSTOM_EMBEDDING_PREFIX = "custom-embedding-";
+function isOpenAICompatibleProvider(providerId) {
+ return typeof providerId === "string" && providerId.startsWith(OPENAI_COMPATIBLE_PREFIX);
+}
+function isAnthropicCompatibleProvider(providerId) {
+ return typeof providerId === "string" && providerId.startsWith(ANTHROPIC_COMPATIBLE_PREFIX);
+}
+function isCustomEmbeddingProvider(providerId) {
+ return typeof providerId === "string" && providerId.startsWith(CUSTOM_EMBEDDING_PREFIX);
+}
+const AI_PROVIDERS = {
+ ...FREE_PROVIDERS,
+ ...FREE_TIER_PROVIDERS,
+ ...OAUTH_PROVIDERS,
+ ...APIKEY_PROVIDERS,
+ ...WEB_COOKIE_PROVIDERS
+};
+const AUTH_METHODS = {
+ oauth: {
+ id: "oauth"
+ },
+ apikey: {
+ id: "apikey"
+ },
+ cookie: {
+ id: "cookie"
+ }
+};
+function getProviderByAlias(alias) {
+ for (const provider of Object.values(AI_PROVIDERS)){
+ if (provider.alias === alias || provider.id === alias) {
+ return provider;
+ }
+ }
+ return null;
+}
+function resolveProviderId(aliasOrId) {
+ const provider = getProviderByAlias(aliasOrId);
+ return provider?.id || aliasOrId;
+}
+function getProviderAlias(providerId) {
+ const provider = AI_PROVIDERS[providerId];
+ return provider?.alias || providerId;
+}
+const ALIAS_TO_ID = Object.values(AI_PROVIDERS).reduce((acc, p)=>{
+ acc[p.alias] = p.id;
+ return acc;
+}, {});
+const ID_TO_ALIAS = Object.values(AI_PROVIDERS).reduce((acc, p)=>{
+ acc[p.id] = p.alias;
+ return acc;
+}, {});
+function getProvidersByKind(kind) {
+ return Object.values(AI_PROVIDERS).filter((p)=>{
+ const kinds = p.serviceKinds ?? [
+ "llm"
+ ];
+ if (!kinds.includes(kind)) return false;
+ if (p.hidden) return false;
+ if (p.hiddenKinds?.includes(kind)) return false;
+ return true;
+ }).sort((a, b)=>(a.priority ?? a.mediaPriority ?? 999) - (b.priority ?? b.mediaPriority ?? 999));
+}
+const USAGE_SUPPORTED_PROVIDERS = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"].filter((r)=>r.features?.usage).map((r)=>r.id);
+const USAGE_APIKEY_PROVIDERS = __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"].filter((r)=>r.features?.usageApikey).map((r)=>r.id);
+}),
+"[project]/src/shared/constants/providersDisplay.js [instrumentation] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "PROVIDER_DISPLAY",
+ ()=>PROVIDER_DISPLAY,
+ "RISK_NOTICE",
+ ()=>RISK_NOTICE
+]);
+// UI display config — all providers derive from registry.display.
+var __TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/open-sse/providers/registry/index.js [instrumentation] (ecmascript)");
+;
+const RISK_NOTICE = "⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";
+// Resolve "RISK_NOTICE" token → real notice text (registry stores token to avoid import cycle)
+const resolveDisplay = (d)=>d.deprecationNotice === "RISK_NOTICE" ? {
+ ...d,
+ deprecationNotice: RISK_NOTICE
+ } : d;
+const PROVIDER_DISPLAY = Object.fromEntries(__TURBOPACK__imported__module__$5b$project$5d2f$open$2d$sse$2f$providers$2f$registry$2f$index$2e$js__$5b$instrumentation$5d$__$28$ecmascript$29$__["default"].filter((r)=>r.display).map((r)=>[
+ r.id,
+ resolveDisplay(r.display)
+ ]));
+}),
+];
+
+//# sourceMappingURL=%5Broot-of-the-server%5D__1mtjwcs._.js.map
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js.map
new file mode 100644
index 00000000..26ba6c20
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js.map
@@ -0,0 +1,141 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": [
+ {"offset": {"line": 16, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/config/googleTtsLanguages.js"],"sourcesContent":["export const GOOGLE_TTS_LANGUAGES = [\n { id: \"af\", name: \"Afrikaans\", type: \"tts\" },\n { id: \"ar\", name: \"Arabic\", type: \"tts\" },\n { id: \"bg\", name: \"Bulgarian\", type: \"tts\" },\n { id: \"bn\", name: \"Bengali\", type: \"tts\" },\n { id: \"bs\", name: \"Bosnian\", type: \"tts\" },\n { id: \"ca\", name: \"Catalan\", type: \"tts\" },\n { id: \"cs\", name: \"Czech\", type: \"tts\" },\n { id: \"cy\", name: \"Welsh\", type: \"tts\" },\n { id: \"da\", name: \"Danish\", type: \"tts\" },\n { id: \"de\", name: \"German\", type: \"tts\" },\n { id: \"el\", name: \"Greek\", type: \"tts\" },\n { id: \"en\", name: \"English\", type: \"tts\" },\n { id: \"eo\", name: \"Esperanto\", type: \"tts\" },\n { id: \"es\", name: \"Spanish\", type: \"tts\" },\n { id: \"et\", name: \"Estonian\", type: \"tts\" },\n { id: \"fi\", name: \"Finnish\", type: \"tts\" },\n { id: \"fr\", name: \"French\", type: \"tts\" },\n { id: \"gu\", name: \"Gujarati\", type: \"tts\" },\n { id: \"hi\", name: \"Hindi\", type: \"tts\" },\n { id: \"hr\", name: \"Croatian\", type: \"tts\" },\n { id: \"hu\", name: \"Hungarian\", type: \"tts\" },\n { id: \"hy\", name: \"Armenian\", type: \"tts\" },\n { id: \"id\", name: \"Indonesian\", type: \"tts\" },\n { id: \"is\", name: \"Icelandic\", type: \"tts\" },\n { id: \"it\", name: \"Italian\", type: \"tts\" },\n { id: \"ja\", name: \"Japanese\", type: \"tts\" },\n { id: \"jw\", name: \"Javanese\", type: \"tts\" },\n { id: \"km\", name: \"Khmer\", type: \"tts\" },\n { id: \"kn\", name: \"Kannada\", type: \"tts\" },\n { id: \"ko\", name: \"Korean\", type: \"tts\" },\n { id: \"la\", name: \"Latin\", type: \"tts\" },\n { id: \"lv\", name: \"Latvian\", type: \"tts\" },\n { id: \"mk\", name: \"Macedonian\", type: \"tts\" },\n { id: \"ml\", name: \"Malayalam\", type: \"tts\" },\n { id: \"mr\", name: \"Marathi\", type: \"tts\" },\n { id: \"my\", name: \"Myanmar (Burmese)\", type: \"tts\" },\n { id: \"ne\", name: \"Nepali\", type: \"tts\" },\n { id: \"nl\", name: \"Dutch\", type: \"tts\" },\n { id: \"no\", name: \"Norwegian\", type: \"tts\" },\n { id: \"pl\", name: \"Polish\", type: \"tts\" },\n { id: \"pt\", name: \"Portuguese\", type: \"tts\" },\n { id: \"ro\", name: \"Romanian\", type: \"tts\" },\n { id: \"ru\", name: \"Russian\", type: \"tts\" },\n { id: \"si\", name: \"Sinhala\", type: \"tts\" },\n { id: \"sk\", name: \"Slovak\", type: \"tts\" },\n { id: \"sq\", name: \"Albanian\", type: \"tts\" },\n { id: \"sr\", name: \"Serbian\", type: \"tts\" },\n { id: \"su\", name: \"Sundanese\", type: \"tts\" },\n { id: \"sv\", name: \"Swedish\", type: \"tts\" },\n { id: \"sw\", name: \"Swahili\", type: \"tts\" },\n { id: \"ta\", name: \"Tamil\", type: \"tts\" },\n { id: \"te\", name: \"Telugu\", type: \"tts\" },\n { id: \"th\", name: \"Thai\", type: \"tts\" },\n { id: \"tl\", name: \"Filipino\", type: \"tts\" },\n { id: \"tr\", name: \"Turkish\", type: \"tts\" },\n { id: \"uk\", name: \"Ukrainian\", type: \"tts\" },\n { id: \"ur\", name: \"Urdu\", type: \"tts\" },\n { id: \"vi\", name: \"Vietnamese\", type: \"tts\" },\n { id: \"zh-CN\", name: \"Chinese (Simplified)\", type: \"tts\" },\n { id: \"zh-TW\", name: \"Chinese (Traditional)\", type: \"tts\" },\n];\n"],"names":["GOOGLE_TTS_LANGUAGES","id","name","type"],"mappings":"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"}},
+ {"offset": {"line": 326, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/config/grokCli.js"],"sourcesContent":["export const GROK_CLI_VERSION = \"0.2.99\";\nexport const GROK_CLI_MODEL = \"grok-build\";\nexport const GROK_CLI_BASE_URL = \"https://cli-chat-proxy.grok.com/v1\";\nexport const GROK_CLI_CLIENT_IDENTIFIER = \"grok-shell\";\nexport const GROK_CLI_USER_AGENT = `grok-shell/${GROK_CLI_VERSION} (linux; x86_64)`;\n\nexport function supportsGrokCliReasoningEffort(model) {\n // ponytail: unknown models omit effort until live metadata reaches dispatch.\n return /^grok-4\\.5(?:$|-)/.test(String(model || \"\"));\n}\n"],"names":["GROK_CLI_VERSION","GROK_CLI_MODEL","GROK_CLI_BASE_URL","GROK_CLI_CLIENT_IDENTIFIER","GROK_CLI_USER_AGENT","supportsGrokCliReasoningEffort","model","test","String"],"mappings":";;;;;;;;;;;;;;AAAO,MAAMA,mBAAmB;AACzB,MAAMC,iBAAiB;AACvB,MAAMC,oBAAoB;AAC1B,MAAMC,6BAA6B;AACnC,MAAMC,sBAAsB,CAAC,WAAW,EAAEJ,iBAAiB,gBAAgB,CAAC;AAE5E,SAASK,+BAA+BC,KAAK;IAClD,6EAA6E;IAC7E,OAAO,oBAAoBC,IAAI,CAACC,OAAOF,SAAS;AAClD"}},
+ {"offset": {"line": 353, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/config/providerModels.js"],"sourcesContent":["import { PROVIDERS } from \"./providers.js\";\nimport REGISTRY from \"../providers/registry/index.js\";\n// PROVIDER_MODELS now built from providers/registry (transport + models co-located)\nimport { PROVIDER_MODELS } from \"../providers/index.js\";\nimport { modelQuotaFamily, modelStrip, modelTargetFormat, modelSupportedFormats, normalizeModelId } from \"../providers/models/schema.js\";\nimport { CODEX_REVIEW_SUFFIX } from \"../providers/models/helpers.js\";\nexport { PROVIDER_MODELS };\n\n\n// Helper functions\nexport function getProviderModels(aliasOrId) {\n return PROVIDER_MODELS[aliasOrId] || [];\n}\n\nexport function getDefaultModel(aliasOrId) {\n const models = PROVIDER_MODELS[aliasOrId];\n return models?.[0]?.id || null;\n}\n\n// Providers whose registry uses dots in version numbers (e.g. \"claude-sonnet-4.5\").\n// For these, we tolerate clients sending dashes (\"claude-sonnet-4-5\") by normalizing\n// digit-hyphen-digit to digit-dot-digit before lookup. Other providers are left untouched.\nconst DOT_VERSION_PROVIDERS = new Set([\"kr\", \"kiro\"]);\n\n// Find a registry entry by id. For Kiro models, tolerates dash/dot version separators\n// (\"claude-sonnet-4-5\" ~= \"claude-sonnet-4.5\"). Other providers use exact match only.\nfunction findModel(models, modelId, aliasOrId) {\n if (!models) return undefined;\n const found = models.find(m => m.id === modelId);\n if (found) return found;\n if (!DOT_VERSION_PROVIDERS.has(aliasOrId)) return undefined;\n const normalized = normalizeModelId(modelId);\n if (normalized === modelId) return undefined;\n return models.find(m => m.id === normalized);\n}\n\nexport function isValidModel(aliasOrId, modelId, passthroughProviders = new Set()) {\n if (passthroughProviders.has(aliasOrId)) return true;\n const models = PROVIDER_MODELS[aliasOrId];\n if (!models) return false;\n return !!findModel(models, modelId, aliasOrId);\n}\n\nexport function findModelName(aliasOrId, modelId) {\n const models = PROVIDER_MODELS[aliasOrId];\n if (!models) return modelId;\n const found = findModel(models, modelId, aliasOrId);\n return found?.name || modelId;\n}\n\nexport function getModelTargetFormat(aliasOrId, modelId) {\n const models = PROVIDER_MODELS[aliasOrId];\n if (!models) return null;\n return modelTargetFormat(findModel(models, modelId, aliasOrId));\n}\n\n// Declared upstream formats for a model (registry `supportedFormats`). Drives the\n// per-model guard on the sourceFormat-matched transport; null when undeclared.\nexport function getModelSupportedFormats(aliasOrId, modelId) {\n const models = PROVIDER_MODELS[aliasOrId];\n if (!models) return null;\n return modelSupportedFormats(findModel(models, modelId, aliasOrId));\n}\n\nexport function getModelType(aliasOrId, modelId) {\n const models = PROVIDER_MODELS[aliasOrId];\n if (!models) return null;\n const found = findModel(models, modelId, aliasOrId);\n return found?.kind || found?.type || null;\n}\n\nexport function getModelUpstreamId(aliasOrId, modelId) {\n // Split off thinking suffix \"(level)\" so lookup hits the base id; re-append it to\n // the result so downstream applyThinking still sees the suffix (body.model is stripped separately).\n const sufMatch = typeof modelId === \"string\" ? modelId.match(/\\([^()]+\\)\\s*$/) : null;\n const suffix = sufMatch ? sufMatch[0] : \"\";\n const baseId = suffix ? modelId.slice(0, sufMatch.index).trim() : modelId;\n const models = PROVIDER_MODELS[aliasOrId];\n const found = findModel(models, baseId, aliasOrId);\n const resolvedId = found?.upstreamModelId || found?.id;\n if (resolvedId) {\n const presetMatch = resolvedId.match(/\\([^()]+\\)\\s*$/);\n const presetSuffix = presetMatch?.[0] || \"\";\n const resolvedBase = presetSuffix ? resolvedId.slice(0, presetMatch.index).trim() : resolvedId;\n return resolvedBase + (suffix || presetSuffix);\n }\n if (aliasOrId === \"cx\" && typeof baseId === \"string\" && baseId.endsWith(CODEX_REVIEW_SUFFIX)) {\n return baseId.slice(0, -CODEX_REVIEW_SUFFIX.length) + suffix;\n }\n return baseId + suffix;\n}\n\nexport function getModelQuotaFamily(aliasOrId, modelId) {\n const models = PROVIDER_MODELS[aliasOrId];\n return modelQuotaFamily(findModel(models, modelId, aliasOrId));\n}\n\n// OAuth short aliases — derived from registry `alias` (single source). everything else: alias = id.\n// vertex/vertex-partner keep alias=id (kept via the `|| id` fallback in consumers).\nexport const OAUTH_ALIASES = Object.fromEntries(\n REGISTRY.filter(r => r.alias && r.alias !== r.id).map(r => [r.id, r.alias])\n);\n\n// Derived from PROVIDERS — no need to maintain manually\nexport const PROVIDER_ID_TO_ALIAS = Object.fromEntries(\n Object.keys(PROVIDERS).map(id => [id, OAUTH_ALIASES[id] || id])\n);\n\nexport function getModelsByProviderId(providerId) {\n const alias = PROVIDER_ID_TO_ALIAS[providerId] || providerId;\n return PROVIDER_MODELS[alias] || [];\n}\n\n// Get strip list for a model entry (explicit opt-in only)\n// Returns array of content types to strip, e.g. [\"image\", \"audio\"]\nexport function getModelStrip(alias, modelId) {\n return modelStrip(findModel(PROVIDER_MODELS[alias], modelId, alias));\n}\n"],"names":["getProviderModels","aliasOrId","getDefaultModel","models","id","DOT_VERSION_PROVIDERS","Set","findModel","modelId","undefined","found","find","m","has","normalized","isValidModel","passthroughProviders","findModelName","name","getModelTargetFormat","getModelSupportedFormats","getModelType","kind","type","getModelUpstreamId","sufMatch","match","suffix","baseId","slice","index","trim","resolvedId","upstreamModelId","presetMatch","presetSuffix","resolvedBase","endsWith","length","getModelQuotaFamily","OAUTH_ALIASES","Object","fromEntries","filter","r","alias","map","PROVIDER_ID_TO_ALIAS","keys","getModelsByProviderId","providerId","getModelStrip"],"mappings":"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"}},
+ {"offset": {"line": 488, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/config/providers.js"],"sourcesContent":["// Barrel: PROVIDERS now built from providers/registry (transport co-located with models)\nimport { PROVIDERS } from \"../providers/index.js\";\nexport { PROVIDERS, PROVIDER_OAUTH } from \"../providers/index.js\";\n\nexport const OLLAMA_LOCAL_DEFAULT_HOST = \"http://localhost:11434\";\n\nexport function resolveOllamaLocalHost(credentials) {\n const raw = credentials?.providerSpecificData?.baseUrl?.trim();\n return (raw || OLLAMA_LOCAL_DEFAULT_HOST).replace(/\\/$/, \"\");\n}\n\n// Region URLs single-source from registry xiaomi-tokenplan.transport\nexport const XIAOMI_TOKENPLAN_REGIONS = PROVIDERS[\"xiaomi-tokenplan\"]?.regions || {};\nexport const XIAOMI_TOKENPLAN_DEFAULT_REGION = PROVIDERS[\"xiaomi-tokenplan\"]?.defaultRegion;\n\nexport function resolveXiaomiTokenplanBaseUrl(credentials) {\n const region = credentials?.providerSpecificData?.region;\n return XIAOMI_TOKENPLAN_REGIONS[region] || XIAOMI_TOKENPLAN_REGIONS[XIAOMI_TOKENPLAN_DEFAULT_REGION];\n}\n"],"names":["OLLAMA_LOCAL_DEFAULT_HOST","resolveOllamaLocalHost","credentials","raw","providerSpecificData","baseUrl","trim","replace","XIAOMI_TOKENPLAN_REGIONS","regions","XIAOMI_TOKENPLAN_DEFAULT_REGION","defaultRegion","resolveXiaomiTokenplanBaseUrl","region"],"mappings":";;;;;;;;;;;;AAAA,yFAAyF;AACzF;;;AAGO,MAAMA,4BAA4B;AAElC,SAASC,uBAAuBC,WAAW;IAChD,MAAMC,MAAMD,aAAaE,sBAAsBC,SAASC;IACxD,OAAO,CAACH,OAAOH,yBAAyB,EAAEO,OAAO,CAAC,OAAO;AAC3D;AAGO,MAAMC,2BAA2B,mJAAS,CAAC,mBAAmB,EAAEC,WAAW,CAAC;AAC5E,MAAMC,kCAAkC,mJAAS,CAAC,mBAAmB,EAAEC;AAEvE,SAASC,8BAA8BV,WAAW;IACvD,MAAMW,SAASX,aAAaE,sBAAsBS;IAClD,OAAOL,wBAAwB,CAACK,OAAO,IAAIL,wBAAwB,CAACE,gCAAgC;AACtG"}},
+ {"offset": {"line": 519, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/config/runtimeConfig.js"],"sourcesContent":["// HTTP status codes\nexport const HTTP_STATUS = {\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n PAYMENT_REQUIRED: 402,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n NOT_ACCEPTABLE: 406,\n REQUEST_TIMEOUT: 408,\n RATE_LIMITED: 429,\n SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504\n};\n\n// Re-export error config (backward compat)\nexport { ERROR_TYPES, DEFAULT_ERROR_MESSAGES, BACKOFF_CONFIG, COOLDOWN_MS } from \"./errorConfig.js\";\n\n// Cache TTLs (seconds)\nexport const CACHE_TTL = {\n userInfo: 300, // 5 minutes\n modelAlias: 3600 // 1 hour\n};\n\n// Memory management config\nexport const MEMORY_CONFIG = {\n sessionTtlMs: 2 * 60 * 60 * 1000,\n sessionCleanupIntervalMs: 30 * 60 * 1000,\n dnsCacheTtlMs: 5 * 60 * 1000,\n proxyDispatchersMaxSize: 20,\n};\n\n// Parse a positive integer env override, falling back to a default.\nfunction envMs(name, def) {\n const raw = process.env[name];\n if (raw == null || raw === \"\") return def;\n const n = parseInt(raw, 10);\n return Number.isFinite(n) && n > 0 ? n : def;\n}\n\nfunction envUrl(name, def) {\n const raw = process.env[name]?.trim();\n return raw || def;\n}\n\n// SearXNG endpoint used by the unauthenticated web-search provider.\n// Configure this for a separate Docker service or remote SearXNG instance.\nexport const SEARXNG_URL = envUrl(\"SEARXNG_URL\", \"http://localhost:8888/search\");\n\n// Inter-chunk stall timeout (once tokens are flowing). Generous headroom so\n// slow reasoning models aren't aborted mid-stream. Env: STREAM_STALL_TIMEOUT_MS.\nexport const STREAM_STALL_TIMEOUT_MS = envMs(\"STREAM_STALL_TIMEOUT_MS\", 360 * 1000);\n\n// Time-to-first-token timeout (prompt prefill). Env: STREAM_FIRST_CHUNK_TIMEOUT_MS.\nexport const STREAM_FIRST_CHUNK_TIMEOUT_MS = envMs(\"STREAM_FIRST_CHUNK_TIMEOUT_MS\", 200 * 1000);\n\n// Fetch connect timeout: abort if upstream doesn't return response headers within this duration\nexport const FETCH_CONNECT_TIMEOUT_MS = envMs(\"FETCH_CONNECT_TIMEOUT_MS\", 60 * 1000);\n\n// Gemini native TTS fetch timeout: abort if Google does not return response headers in time.\nexport const GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS = envMs(\"GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS\", 45 * 1000);\n\n// Default token limits\nexport const DEFAULT_MAX_TOKENS = 64000;\nexport const DEFAULT_MIN_TOKENS = 32000;\n\nexport const TOKEN_SAVER_HEADER = \"x-9router-token-saver\";\n\n// Retry config for 429 responses (legacy - kept for backward compatibility)\nexport const RETRY_CONFIG = {\n maxAttempts: 2,\n delayMs: 2000\n};\n\n// Default retry config by status code: { attempts, delayMs }\n// Backward compat: if value is a number, treated as attempts with RETRY_CONFIG.delayMs\nexport const DEFAULT_RETRY_CONFIG = {\n 429: { attempts: 0, delayMs: 0 },\n 502: { attempts: 3, delayMs: 3000 },\n 503: { attempts: 3, delayMs: 2000 },\n 504: { attempts: 2, delayMs: 3000 }\n};\n\n// Normalize a retry entry to { attempts, delayMs }\nexport function resolveRetryEntry(entry) {\n if (entry == null) return { attempts: 0, delayMs: RETRY_CONFIG.delayMs };\n if (typeof entry === \"number\") return { attempts: entry, delayMs: RETRY_CONFIG.delayMs };\n return {\n attempts: entry.attempts || 0,\n delayMs: entry.delayMs != null ? entry.delayMs : RETRY_CONFIG.delayMs\n };\n}\n\n// Requests containing these texts will bypass provider\nexport const SKIP_PATTERNS = [\n \"Please write a 5-10 word title for the following conversation:\"\n];\n"],"names":["HTTP_STATUS","BAD_REQUEST","UNAUTHORIZED","PAYMENT_REQUIRED","FORBIDDEN","NOT_FOUND","NOT_ACCEPTABLE","REQUEST_TIMEOUT","RATE_LIMITED","SERVER_ERROR","BAD_GATEWAY","SERVICE_UNAVAILABLE","GATEWAY_TIMEOUT","CACHE_TTL","userInfo","modelAlias","MEMORY_CONFIG","sessionTtlMs","sessionCleanupIntervalMs","dnsCacheTtlMs","proxyDispatchersMaxSize","envMs","name","def","raw","process","env","n","parseInt","Number","isFinite","envUrl","trim","SEARXNG_URL","STREAM_STALL_TIMEOUT_MS","STREAM_FIRST_CHUNK_TIMEOUT_MS","FETCH_CONNECT_TIMEOUT_MS","GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS","DEFAULT_MAX_TOKENS","DEFAULT_MIN_TOKENS","TOKEN_SAVER_HEADER","RETRY_CONFIG","maxAttempts","delayMs","DEFAULT_RETRY_CONFIG","attempts","resolveRetryEntry","entry","SKIP_PATTERNS"],"mappings":"AAAA,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACb,MAAMA,cAAc;IACzBC,aAAa;IACbC,cAAc;IACdC,kBAAkB;IAClBC,WAAW;IACXC,WAAW;IACXC,gBAAgB;IAChBC,iBAAiB;IACjBC,cAAc;IACdC,cAAc;IACdC,aAAa;IACbC,qBAAqB;IACrBC,iBAAiB;AACnB;;AAMO,MAAMC,YAAY;IACvBC,UAAU;IACVC,YAAY,KAAM,SAAS;AAC7B;AAGO,MAAMC,gBAAgB;IAC3BC,cAAc,IAAI,KAAK,KAAK;IAC5BC,0BAA0B,KAAK,KAAK;IACpCC,eAAe,IAAI,KAAK;IACxBC,yBAAyB;AAC3B;AAEA,oEAAoE;AACpE,SAASC,MAAMC,IAAI,EAAEC,GAAG;IACtB,MAAMC,MAAMC,QAAQC,GAAG,CAACJ,KAAK;IAC7B,IAAIE,OAAO,QAAQA,QAAQ,IAAI,OAAOD;IACtC,MAAMI,IAAIC,SAASJ,KAAK;IACxB,OAAOK,OAAOC,QAAQ,CAACH,MAAMA,IAAI,IAAIA,IAAIJ;AAC3C;AAEA,SAASQ,OAAOT,IAAI,EAAEC,GAAG;IACvB,MAAMC,MAAMC,QAAQC,GAAG,CAACJ,KAAK,EAAEU;IAC/B,OAAOR,OAAOD;AAChB;AAIO,MAAMU,cAAcF,OAAO,eAAe;AAI1C,MAAMG,0BAA0Bb,MAAM,2BAA2B,MAAM;AAGvE,MAAMc,gCAAgCd,MAAM,iCAAiC,MAAM;AAGnF,MAAMe,2BAA2Bf,MAAM,4BAA4B,KAAK;AAGxE,MAAMgB,qCAAqChB,MAAM,sCAAsC,KAAK;AAG5F,MAAMiB,qBAAqB;AAC3B,MAAMC,qBAAqB;AAE3B,MAAMC,qBAAqB;AAG3B,MAAMC,eAAe;IAC1BC,aAAa;IACbC,SAAS;AACX;AAIO,MAAMC,uBAAuB;IAClC,KAAK;QAAEC,UAAU;QAAGF,SAAS;IAAE;IAC/B,KAAK;QAAEE,UAAU;QAAGF,SAAS;IAAK;IAClC,KAAK;QAAEE,UAAU;QAAGF,SAAS;IAAK;IAClC,KAAK;QAAEE,UAAU;QAAGF,SAAS;IAAK;AACpC;AAGO,SAASG,kBAAkBC,KAAK;IACrC,IAAIA,SAAS,MAAM,OAAO;QAAEF,UAAU;QAAGF,SAASF,aAAaE,OAAO;IAAC;IACvE,IAAI,OAAOI,UAAU,UAAU,OAAO;QAAEF,UAAUE;QAAOJ,SAASF,aAAaE,OAAO;IAAC;IACvF,OAAO;QACLE,UAAUE,MAAMF,QAAQ,IAAI;QAC5BF,SAASI,MAAMJ,OAAO,IAAI,OAAOI,MAAMJ,OAAO,GAAGF,aAAaE,OAAO;IACvE;AACF;AAGO,MAAMK,gBAAgB;IAC3B;CACD"}},
+ {"offset": {"line": 639, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/config/ttsModels.js"],"sourcesContent":["import { GOOGLE_TTS_LANGUAGES } from \"./googleTtsLanguages.js\";\n\n// ── Voice definitions (DRY — reused across providers) ──────────────────────\nconst VOICES = {\n alloy: { id: \"alloy\", name: \"Alloy\" },\n ash: { id: \"ash\", name: \"Ash\" },\n ballad: { id: \"ballad\", name: \"Ballad\" },\n cedar: { id: \"cedar\", name: \"Cedar\" },\n coral: { id: \"coral\", name: \"Coral\" },\n echo: { id: \"echo\", name: \"Echo\" },\n fable: { id: \"fable\", name: \"Fable\" },\n marin: { id: \"marin\", name: \"Marin\" },\n nova: { id: \"nova\", name: \"Nova\" },\n onyx: { id: \"onyx\", name: \"Onyx\" },\n sage: { id: \"sage\", name: \"Sage\" },\n shimmer: { id: \"shimmer\", name: \"Shimmer\" },\n verse: { id: \"verse\", name: \"Verse\" },\n};\n\nconst v = (...keys) => keys.map((k) => ({ ...VOICES[k], type: \"tts\" }));\n\n// 9 voices for tts-1 / tts-1-hd\nconst VOICES_STANDARD = v(\"alloy\", \"ash\", \"coral\", \"echo\", \"fable\", \"nova\", \"onyx\", \"sage\", \"shimmer\");\n// 13 voices for gpt-4o-mini-tts\nconst VOICES_FULL = v(\"alloy\", \"ash\", \"ballad\", \"cedar\", \"coral\", \"echo\", \"fable\", \"marin\", \"nova\", \"onyx\", \"sage\", \"shimmer\", \"verse\");\n\n// Gemini prebuilt voices (30 voices, multi-language auto-detect)\nconst GEMINI_VOICES = [\n \"Zephyr\", \"Puck\", \"Charon\", \"Kore\", \"Fenrir\", \"Leda\", \"Orus\", \"Aoede\",\n \"Callirrhoe\", \"Autonoe\", \"Enceladus\", \"Iapetus\", \"Umbriel\", \"Algieba\",\n \"Despina\", \"Erinome\", \"Algenib\", \"Rasalgethi\", \"Laomedeia\", \"Achernar\",\n \"Alnilam\", \"Schedar\", \"Gacrux\", \"Pulcherrima\", \"Achird\", \"Zubenelgenubi\",\n \"Vindemiatrix\", \"Sadachbia\", \"Sadaltager\", \"Sulafat\",\n].map((id) => ({ id, name: id, type: \"tts\" }));\n\n// Xiaomi MiMo preset voices (from https://mimo.mi.com/docs/zh-CN/quick-start/usage-guide/audio/speech-synthesis-v2.5).\n// Voice id is passed via `audio.voice`; `mimo_default` = default (冰糖 on CN cluster, Mia elsewhere).\n// Voices are language-independent — the spoken language is a separate hint, not bound to the voice.\nconst MIMO_VOICES = [\n { id: \"mimo_default\", name: \"mimo_default\" },\n { id: \"冰糖\", name: \"冰糖\" },\n { id: \"茉莉\", name: \"茉莉\" },\n { id: \"苏打\", name: \"苏打\" },\n { id: \"白桦\", name: \"白桦\" },\n { id: \"Mia\", name: \"Mia\" },\n { id: \"Chloe\", name: \"Chloe\" },\n { id: \"Milo\", name: \"Milo\" },\n { id: \"Dean\", name: \"Dean\" },\n].map((v) => ({ type: \"tts\", ...v }));\n\n// ── TTS Config (config-driven, single source of truth) ─────────────────────\nexport const TTS_MODELS_CONFIG = {\n openai: {\n models: [\n { id: \"gpt-4o-mini-tts\", name: \"GPT-4o Mini TTS\", type: \"tts\" },\n { id: \"tts-1-hd\", name: \"TTS-1 HD\", type: \"tts\" },\n { id: \"tts-1\", name: \"TTS-1\", type: \"tts\" },\n ],\n voices: {\n \"gpt-4o-mini-tts\": VOICES_FULL,\n \"tts-1\": VOICES_STANDARD,\n \"tts-1-hd\": VOICES_STANDARD,\n },\n // Flat voice list (all unique voices) for backward compat\n allVoices: VOICES_FULL,\n },\n openrouter: {\n models: [\n { id: \"openai/gpt-4o-mini-tts\", name: \"GPT-4o Mini TTS\", type: \"tts\" },\n { id: \"openai/tts-1-hd\", name: \"TTS-1 HD\", type: \"tts\" },\n { id: \"openai/tts-1\", name: \"TTS-1\", type: \"tts\" },\n ],\n voices: {\n \"openai/gpt-4o-mini-tts\": VOICES_FULL,\n \"openai/tts-1\": VOICES_STANDARD,\n \"openai/tts-1-hd\": VOICES_STANDARD,\n },\n allVoices: VOICES_FULL,\n },\n elevenlabs: {\n models: [\n { id: \"eleven_flash_v2_5\", name: \"Flash v2.5 (Fastest)\", type: \"tts\" },\n { id: \"eleven_turbo_v2_5\", name: \"Turbo v2.5 (Fast)\", type: \"tts\" },\n { id: \"eleven_multilingual_v2\", name: \"Multilingual v2 (Quality)\", type: \"tts\" },\n { id: \"eleven_monolingual_v1\", name: \"Monolingual v1 (English)\", type: \"tts\" },\n ],\n // voices come from API, not hardcoded\n },\n \"edge-tts\": {\n defaults: [\n { id: \"en-US-AriaNeural\", name: \"Aria (en-US)\", type: \"tts\" },\n { id: \"en-US-GuyNeural\", name: \"Guy (en-US)\", type: \"tts\" },\n { id: \"en-GB-SoniaNeural\", name: \"Sonia (en-GB)\", type: \"tts\" },\n { id: \"vi-VN-HoaiMyNeural\", name: \"Hoai My (vi-VN)\", type: \"tts\" },\n { id: \"vi-VN-NamMinhNeural\", name: \"Nam Minh (vi-VN)\", type: \"tts\" },\n { id: \"zh-CN-XiaoxiaoNeural\", name: \"Xiaoxiao (zh-CN)\", type: \"tts\" },\n { id: \"zh-CN-YunxiNeural\", name: \"Yunxi (zh-CN)\", type: \"tts\" },\n { id: \"fr-FR-DeniseNeural\", name: \"Denise (fr-FR)\", type: \"tts\" },\n { id: \"de-DE-KatjaNeural\", name: \"Katja (de-DE)\", type: \"tts\" },\n { id: \"ja-JP-NanamiNeural\", name: \"Nanami (ja-JP)\", type: \"tts\" },\n { id: \"ko-KR-SunHiNeural\", name: \"SunHi (ko-KR)\", type: \"tts\" },\n ],\n },\n \"local-device\": {\n defaults: [\n { id: \"default\", name: \"System Default Voice\", type: \"tts\" },\n ],\n },\n \"google-tts\": {\n defaults: GOOGLE_TTS_LANGUAGES,\n },\n gemini: {\n models: [\n { id: \"gemini-3.1-flash-tts-preview\", name: \"Gemini 3.1 Flash TTS\", type: \"tts\" },\n { id: \"gemini-2.5-flash-preview-tts\", name: \"Gemini 2.5 Flash TTS\", type: \"tts\" },\n { id: \"gemini-2.5-pro-preview-tts\", name: \"Gemini 2.5 Pro TTS\", type: \"tts\" },\n ],\n voices: {\n \"gemini-3.1-flash-tts-preview\": GEMINI_VOICES,\n \"gemini-2.5-flash-preview-tts\": GEMINI_VOICES,\n \"gemini-2.5-pro-preview-tts\": GEMINI_VOICES,\n },\n allVoices: GEMINI_VOICES,\n },\n \"xiaomi-mimo\": {\n models: [\n { id: \"mimo-v2.5-tts\", name: \"MiMo V2.5 TTS\", type: \"tts\" },\n ],\n voices: {\n \"mimo-v2.5-tts\": MIMO_VOICES,\n },\n },\n};\n\n// ── Helper: get voices for a specific model ────────────────────────────────\nexport function getTtsVoicesForModel(provider, modelId) {\n const cfg = TTS_MODELS_CONFIG[provider];\n if (!cfg?.voices) return null;\n return cfg.voices[modelId] || cfg.allVoices || null;\n}\n\n// ── Build flat entries for PROVIDER_MODELS backward compat ─────────────────\nexport function buildTtsProviderModels() {\n const entries = {};\n for (const [provider, cfg] of Object.entries(TTS_MODELS_CONFIG)) {\n if (cfg.models) entries[`${provider}-tts-models`] = cfg.models;\n if (cfg.allVoices) entries[`${provider}-tts-voices`] = cfg.allVoices;\n if (cfg.defaults) entries[provider] = cfg.defaults;\n }\n // Keep openai-tts-voices key pointing to full voice list for backward compat\n entries[\"openai-tts-voices\"] = TTS_MODELS_CONFIG.openai.allVoices;\n entries[\"openrouter-tts-voices\"] = TTS_MODELS_CONFIG.openrouter.allVoices;\n return entries;\n}\n"],"names":["VOICES","alloy","id","name","ash","ballad","cedar","coral","echo","fable","marin","nova","onyx","sage","shimmer","verse","v","keys","map","k","type","VOICES_STANDARD","VOICES_FULL","GEMINI_VOICES","MIMO_VOICES","TTS_MODELS_CONFIG","openai","models","voices","allVoices","openrouter","elevenlabs","defaults","gemini","getTtsVoicesForModel","provider","modelId","cfg","buildTtsProviderModels","entries","Object"],"mappings":";;;;;;;;AAAA;;AAEA,8EAA8E;AAC9E,MAAMA,SAAS;IACbC,OAAS;QAAEC,IAAI;QAAWC,MAAM;IAAQ;IACxCC,KAAS;QAAEF,IAAI;QAAWC,MAAM;IAAM;IACtCE,QAAS;QAAEH,IAAI;QAAWC,MAAM;IAAS;IACzCG,OAAS;QAAEJ,IAAI;QAAWC,MAAM;IAAQ;IACxCI,OAAS;QAAEL,IAAI;QAAWC,MAAM;IAAQ;IACxCK,MAAS;QAAEN,IAAI;QAAWC,MAAM;IAAO;IACvCM,OAAS;QAAEP,IAAI;QAAWC,MAAM;IAAQ;IACxCO,OAAS;QAAER,IAAI;QAAWC,MAAM;IAAQ;IACxCQ,MAAS;QAAET,IAAI;QAAWC,MAAM;IAAO;IACvCS,MAAS;QAAEV,IAAI;QAAWC,MAAM;IAAO;IACvCU,MAAS;QAAEX,IAAI;QAAWC,MAAM;IAAO;IACvCW,SAAS;QAAEZ,IAAI;QAAWC,MAAM;IAAU;IAC1CY,OAAS;QAAEb,IAAI;QAAWC,MAAM;IAAQ;AAC1C;AAEA,MAAMa,IAAI,CAAC,GAAGC,OAASA,KAAKC,GAAG,CAAC,CAACC,IAAM,CAAC;YAAE,GAAGnB,MAAM,CAACmB,EAAE;YAAEC,MAAM;QAAM,CAAC;AAErE,gCAAgC;AAChC,MAAMC,kBAAkBL,EAAE,SAAS,OAAO,SAAS,QAAQ,SAAS,QAAQ,QAAQ,QAAQ;AAC5F,gCAAgC;AAChC,MAAMM,cAAcN,EAAE,SAAS,OAAO,UAAU,SAAS,SAAS,QAAQ,SAAS,SAAS,QAAQ,QAAQ,QAAQ,WAAW;AAE/H,iEAAiE;AACjE,MAAMO,gBAAgB;IACpB;IAAU;IAAQ;IAAU;IAAQ;IAAU;IAAQ;IAAQ;IAC9D;IAAc;IAAW;IAAa;IAAW;IAAW;IAC5D;IAAW;IAAW;IAAW;IAAc;IAAa;IAC5D;IAAW;IAAW;IAAU;IAAe;IAAU;IACzD;IAAgB;IAAa;IAAc;CAC5C,CAACL,GAAG,CAAC,CAAChB,KAAO,CAAC;QAAEA;QAAIC,MAAMD;QAAIkB,MAAM;IAAM,CAAC;AAE5C,uHAAuH;AACvH,oGAAoG;AACpG,oGAAoG;AACpG,MAAMI,cAAc;IAClB;QAAEtB,IAAI;QAAgBC,MAAM;IAAe;IAC3C;QAAED,IAAI;QAAgBC,MAAM;IAAK;IACjC;QAAED,IAAI;QAAgBC,MAAM;IAAK;IACjC;QAAED,IAAI;QAAgBC,MAAM;IAAK;IACjC;QAAED,IAAI;QAAgBC,MAAM;IAAK;IACjC;QAAED,IAAI;QAAiBC,MAAM;IAAM;IACnC;QAAED,IAAI;QAAiBC,MAAM;IAAQ;IACrC;QAAED,IAAI;QAAiBC,MAAM;IAAO;IACpC;QAAED,IAAI;QAAiBC,MAAM;IAAO;CACrC,CAACe,GAAG,CAAC,CAACF,IAAM,CAAC;QAAEI,MAAM;QAAO,GAAGJ,CAAC;IAAC,CAAC;AAG5B,MAAMS,oBAAoB;IAC/BC,QAAQ;QACNC,QAAQ;YACN;gBAAEzB,IAAI;gBAAmBC,MAAM;gBAAmBiB,MAAM;YAAM;YAC9D;gBAAElB,IAAI;gBAAmBC,MAAM;gBAAmBiB,MAAM;YAAM;YAC9D;gBAAElB,IAAI;gBAAmBC,MAAM;gBAAmBiB,MAAM;YAAM;SAC/D;QACDQ,QAAQ;YACN,mBAAmBN;YACnB,SAAmBD;YACnB,YAAmBA;QACrB;QACA,0DAA0D;QAC1DQ,WAAWP;IACb;IACAQ,YAAY;QACVH,QAAQ;YACN;gBAAEzB,IAAI;gBAA0BC,MAAM;gBAAmBiB,MAAM;YAAM;YACrE;gBAAElB,IAAI;gBAA0BC,MAAM;gBAAmBiB,MAAM;YAAM;YACrE;gBAAElB,IAAI;gBAA0BC,MAAM;gBAAmBiB,MAAM;YAAM;SACtE;QACDQ,QAAQ;YACN,0BAA0BN;YAC1B,gBAA0BD;YAC1B,mBAA0BA;QAC5B;QACAQ,WAAWP;IACb;IACAS,YAAY;QACVJ,QAAQ;YACN;gBAAEzB,IAAI;gBAA0BC,MAAM;gBAA6BiB,MAAM;YAAM;YAC/E;gBAAElB,IAAI;gBAA0BC,MAAM;gBAA6BiB,MAAM;YAAM;YAC/E;gBAAElB,IAAI;gBAA0BC,MAAM;gBAA8BiB,MAAM;YAAM;YAChF;gBAAElB,IAAI;gBAA0BC,MAAM;gBAA6BiB,MAAM;YAAM;SAChF;IAEH;IACA,YAAY;QACVY,UAAU;YACR;gBAAE9B,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAoBiB,MAAM;YAAM;YACnE;gBAAElB,IAAI;gBAAwBC,MAAM;gBAAoBiB,MAAM;YAAM;YACpE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;YAClE;gBAAElB,IAAI;gBAAuBC,MAAM;gBAAmBiB,MAAM;YAAM;SACnE;IACH;IACA,gBAAgB;QACdY,UAAU;YACR;gBAAE9B,IAAI;gBAAWC,MAAM;gBAAwBiB,MAAM;YAAM;SAC5D;IACH;IACA,cAAc;QACZY,UAAU,wKAAoB;IAChC;IACAC,QAAQ;QACNN,QAAQ;YACN;gBAAEzB,IAAI;gBAAgCC,MAAM;gBAAwBiB,MAAM;YAAM;YAChF;gBAAElB,IAAI;gBAAgCC,MAAM;gBAAwBiB,MAAM;YAAM;YAChF;gBAAElB,IAAI;gBAAgCC,MAAM;gBAAwBiB,MAAM;YAAM;SACjF;QACDQ,QAAQ;YACN,gCAAgCL;YAChC,gCAAgCA;YAChC,8BAAgCA;QAClC;QACAM,WAAWN;IACb;IACA,eAAe;QACbI,QAAQ;YACN;gBAAEzB,IAAI;gBAAiBC,MAAM;gBAAiBiB,MAAM;YAAM;SAC3D;QACDQ,QAAQ;YACN,iBAAiBJ;QACnB;IACF;AACF;AAGO,SAASU,qBAAqBC,QAAQ,EAAEC,OAAO;IACpD,MAAMC,MAAMZ,iBAAiB,CAACU,SAAS;IACvC,IAAI,CAACE,KAAKT,QAAQ,OAAO;IACzB,OAAOS,IAAIT,MAAM,CAACQ,QAAQ,IAAIC,IAAIR,SAAS,IAAI;AACjD;AAGO,SAASS;IACd,MAAMC,UAAU,CAAC;IACjB,KAAK,MAAM,CAACJ,UAAUE,IAAI,IAAIG,OAAOD,OAAO,CAACd,mBAAoB;QAC/D,IAAIY,IAAIV,MAAM,EAAEY,OAAO,CAAC,GAAGJ,SAAS,WAAW,CAAC,CAAC,GAAGE,IAAIV,MAAM;QAC9D,IAAIU,IAAIR,SAAS,EAAEU,OAAO,CAAC,GAAGJ,SAAS,WAAW,CAAC,CAAC,GAAGE,IAAIR,SAAS;QACpE,IAAIQ,IAAIL,QAAQ,EAAEO,OAAO,CAACJ,SAAS,GAAGE,IAAIL,QAAQ;IACpD;IACA,6EAA6E;IAC7EO,OAAO,CAAC,oBAAoB,GAAGd,kBAAkBC,MAAM,CAACG,SAAS;IACjEU,OAAO,CAAC,wBAAwB,GAAGd,kBAAkBK,UAAU,CAACD,SAAS;IACzE,OAAOU;AACT"}},
+ {"offset": {"line": 999, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/index.js"],"sourcesContent":["// Single source: build PROVIDERS + PROVIDER_MODELS from registry/{id}.js (transport + models co-located).\nimport REGISTRY from \"./registry/index.js\";\nimport { PROVIDER_DEFAULTS } from \"./schema.js\";\nimport { normalizeModel } from \"./models/schema.js\";\nimport { buildTtsProviderModels } from \"../config/ttsModels.js\";\n\n// oauth block is canonical for these fields; inject into transport so executors reading\n// this.config.{clientId,clientSecret,tokenUrl} keep working without duplicating in transport\nconst OAUTH_INJECT_FIELDS = [\"clientId\", \"clientSecret\", \"tokenUrl\"];\n\n// transport: re-apply shared default (format:\"openai\") + inject oauth-canonical fields\nfunction buildTransport(transport, oauth) {\n const t = { ...transport };\n if (!t.format) t.format = PROVIDER_DEFAULTS.format;\n if (oauth) {\n for (const f of OAUTH_INJECT_FIELDS) {\n if (t[f] === undefined && oauth[f] !== undefined) t[f] = oauth[f];\n }\n }\n return t;\n}\n\nconst MEDIA_KEYS = new Set([\n \"serviceKinds\", \"ttsConfig\", \"sttConfig\", \"embeddingConfig\",\n \"imageConfig\", \"imageToTextConfig\", \"videoConfig\", \"musicConfig\",\n \"searchViaChat\", \"searchConfig\", \"fetchConfig\",\n \"modelsFetcher\", \"mediaPriority\", \"hiddenKinds\",\n]);\n\nexport const PROVIDERS = {};\nexport const PROVIDER_MODELS = {};\nexport const PROVIDER_OAUTH = {};\nexport const PROVIDER_MEDIA = {};\nfor (const entry of REGISTRY) {\n if (entry.transport) {\n PROVIDERS[entry.id] = buildTransport(entry.transport, entry.oauth);\n if (entry.transports) PROVIDERS[entry.id].transports = entry.transports;\n }\n if (entry.models !== undefined) PROVIDER_MODELS[entry.alias || entry.id] = entry.models.map(normalizeModel);\n if (entry.oauth) PROVIDER_OAUTH[entry.id] = entry.oauth;\n // Build PROVIDER_MEDIA from top-level fields (post-migration) + legacy entry.media\n const mediaFields = {};\n for (const k of MEDIA_KEYS) {\n if (entry[k] !== undefined) mediaFields[k] = entry[k];\n }\n if (entry.media) Object.assign(mediaFields, entry.media);\n if (Object.keys(mediaFields).length) PROVIDER_MEDIA[entry.id] = mediaFields;\n}\n\n// TTS model/voice tables keyed by special names (openai-tts-models, ...), not provider ids\nObject.assign(PROVIDER_MODELS, buildTtsProviderModels());\n"],"names":["OAUTH_INJECT_FIELDS","buildTransport","transport","oauth","t","format","f","undefined","MEDIA_KEYS","Set","PROVIDERS","PROVIDER_MODELS","PROVIDER_OAUTH","PROVIDER_MEDIA","entry","id","transports","models","alias","map","mediaFields","k","media","Object","assign","keys","length"],"mappings":";;;;;;;;;;AAAA,0GAA0G;AAC1G;AACA;AACA;AACA;;;;;AAEA,wFAAwF;AACxF,6FAA6F;AAC7F,MAAMA,sBAAsB;IAAC;IAAY;IAAgB;CAAW;AAEpE,uFAAuF;AACvF,SAASC,eAAeC,SAAS,EAAEC,KAAK;IACtC,MAAMC,IAAI;QAAE,GAAGF,SAAS;IAAC;IACzB,IAAI,CAACE,EAAEC,MAAM,EAAED,EAAEC,MAAM,GAAG,4JAAiB,CAACA,MAAM;IAClD,IAAIF,OAAO;QACT,KAAK,MAAMG,KAAKN,oBAAqB;YACnC,IAAII,CAAC,CAACE,EAAE,KAAKC,aAAaJ,KAAK,CAACG,EAAE,KAAKC,WAAWH,CAAC,CAACE,EAAE,GAAGH,KAAK,CAACG,EAAE;QACnE;IACF;IACA,OAAOF;AACT;AAEA,MAAMI,aAAa,IAAIC,IAAI;IACzB;IAAgB;IAAa;IAAa;IAC1C;IAAe;IAAqB;IAAe;IACnD;IAAiB;IAAgB;IACjC;IAAiB;IAAiB;CACnC;AAEM,MAAMC,YAAY,CAAC;AACnB,MAAMC,kBAAkB,CAAC;AACzB,MAAMC,iBAAiB,CAAC;AACxB,MAAMC,iBAAiB,CAAC;AAC/B,KAAK,MAAMC,SAAS,6JAAQ,CAAE;IAC5B,IAAIA,MAAMZ,SAAS,EAAE;QACnBQ,SAAS,CAACI,MAAMC,EAAE,CAAC,GAAGd,eAAea,MAAMZ,SAAS,EAAEY,MAAMX,KAAK;QACjE,IAAIW,MAAME,UAAU,EAAEN,SAAS,CAACI,MAAMC,EAAE,CAAC,CAACC,UAAU,GAAGF,MAAME,UAAU;IACzE;IACA,IAAIF,MAAMG,MAAM,KAAKV,WAAWI,eAAe,CAACG,MAAMI,KAAK,IAAIJ,MAAMC,EAAE,CAAC,GAAGD,MAAMG,MAAM,CAACE,GAAG,CAAC,mKAAc;IAC1G,IAAIL,MAAMX,KAAK,EAAES,cAAc,CAACE,MAAMC,EAAE,CAAC,GAAGD,MAAMX,KAAK;IACvD,mFAAmF;IACnF,MAAMiB,cAAc,CAAC;IACrB,KAAK,MAAMC,KAAKb,WAAY;QAC1B,IAAIM,KAAK,CAACO,EAAE,KAAKd,WAAWa,WAAW,CAACC,EAAE,GAAGP,KAAK,CAACO,EAAE;IACvD;IACA,IAAIP,MAAMQ,KAAK,EAAEC,OAAOC,MAAM,CAACJ,aAAaN,MAAMQ,KAAK;IACvD,IAAIC,OAAOE,IAAI,CAACL,aAAaM,MAAM,EAAEb,cAAc,CAACC,MAAMC,EAAE,CAAC,GAAGK;AAClE;AAEA,2FAA2F;AAC3FG,OAAOC,MAAM,CAACb,iBAAiB,IAAA,iKAAsB"}},
+ {"offset": {"line": 1079, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/models/helpers.js"],"sourcesContent":["// Codex auto-generates a \"-review\" variant for each llm model (review quota family)\nexport const CODEX_REVIEW_SUFFIX = \"-review\";\n\nexport function withCodexReviewModels(models) {\n return models.flatMap((model) => {\n if ((model.kind || model.type || \"llm\") !== \"llm\" || model.id.endsWith(CODEX_REVIEW_SUFFIX)) {\n return [model];\n }\n return [\n model,\n {\n ...model,\n id: `${model.id}${CODEX_REVIEW_SUFFIX}`,\n name: `${model.name} Review`,\n upstreamModelId: model.upstreamModelId || model.id,\n quotaFamily: \"review\"\n }\n ];\n });\n}\n"],"names":["CODEX_REVIEW_SUFFIX","withCodexReviewModels","models","flatMap","model","kind","type","id","endsWith","name","upstreamModelId","quotaFamily"],"mappings":"AAAA,oFAAoF;;;;;;;AAC7E,MAAMA,sBAAsB;AAE5B,SAASC,sBAAsBC,MAAM;IAC1C,OAAOA,OAAOC,OAAO,CAAC,CAACC;QACrB,IAAI,CAACA,MAAMC,IAAI,IAAID,MAAME,IAAI,IAAI,KAAK,MAAM,SAASF,MAAMG,EAAE,CAACC,QAAQ,CAACR,sBAAsB;YAC3F,OAAO;gBAACI;aAAM;QAChB;QACA,OAAO;YACLA;YACA;gBACE,GAAGA,KAAK;gBACRG,IAAI,GAAGH,MAAMG,EAAE,GAAGP,qBAAqB;gBACvCS,MAAM,GAAGL,MAAMK,IAAI,CAAC,OAAO,CAAC;gBAC5BC,iBAAiBN,MAAMM,eAAe,IAAIN,MAAMG,EAAE;gBAClDI,aAAa;YACf;SACD;IACH;AACF"}},
+ {"offset": {"line": 1110, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/models/namePatterns.js"],"sourcesContent":["// Derive a display name from a model id when the entry omits `name` (mirrors PATTERN_PRICING).\n// Provider entries that ship their own `name` always win; this is only a fallback for terse entries.\n\n// Capitalize a hyphen/space separated token group: \"coder-plus\" → \"Coder Plus\".\nfunction titleCase(s) {\n return s\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((w) => (/^\\d/.test(w) ? w : w.charAt(0).toUpperCase() + w.slice(1)))\n .join(\" \");\n}\n\n// Ordered: first match wins. Keep specific patterns above generic ones.\nexport const NAME_PATTERNS = [\n [/^kimi-k(\\d+(?:\\.\\d+)?)(-thinking)?$/i, (m) => `Kimi K${m[1]}${m[2] ? \" Thinking\" : \"\"}`],\n [/^glm-(\\d+(?:\\.\\d+)?)(v)?$/i, (m) => `GLM ${m[1]}${m[2] ? \"V (Vision)\" : \"\"}`],\n [/^minimax-m(\\d+(?:\\.\\d+)?)$/i, (m) => `MiniMax M${m[1]}`],\n [/^gpt-(.+)$/i, (m) => `GPT ${titleCase(m[1])}`],\n [/^gemini-(.+)$/i, (m) => `Gemini ${titleCase(m[1])}`],\n [/^grok-(.+)$/i, (m) => `Grok ${titleCase(m[1])}`],\n [/^deepseek-(.+)$/i, (m) => `DeepSeek ${titleCase(m[1])}`],\n [/^qwen([\\d.]+.*)$/i, (m) => `Qwen ${titleCase(m[1])}`],\n];\n\n// id → display name (regex fallback → id verbatim)\nexport function deriveModelName(id) {\n if (typeof id !== \"string\") return id;\n for (const [re, fn] of NAME_PATTERNS) {\n const m = id.match(re);\n if (m) return fn(m);\n }\n return id;\n}\n"],"names":["titleCase","s","split","filter","Boolean","map","w","test","charAt","toUpperCase","slice","join","NAME_PATTERNS","m","deriveModelName","id","re","fn","match"],"mappings":";;;;;;AAAA,+FAA+F;AAC/F,qGAAqG;AAErG,gFAAgF;AAChF,SAASA,UAAUC,CAAC;IAClB,OAAOA,EACJC,KAAK,CAAC,WACNC,MAAM,CAACC,SACPC,GAAG,CAAC,CAACC,IAAO,MAAMC,IAAI,CAACD,KAAKA,IAAIA,EAAEE,MAAM,CAAC,GAAGC,WAAW,KAAKH,EAAEI,KAAK,CAAC,IACpEC,IAAI,CAAC;AACV;AAGO,MAAMC,gBAAgB;IAC3B;QAAC;QAAwC,CAACC,IAAM,CAAC,MAAM,EAAEA,CAAC,CAAC,EAAE,GAAGA,CAAC,CAAC,EAAE,GAAG,cAAc,IAAI;KAAC;IAC1F;QAAC;QAA8B,CAACA,IAAM,CAAC,IAAI,EAAEA,CAAC,CAAC,EAAE,GAAGA,CAAC,CAAC,EAAE,GAAG,eAAe,IAAI;KAAC;IAC/E;QAAC;QAA+B,CAACA,IAAM,CAAC,SAAS,EAAEA,CAAC,CAAC,EAAE,EAAE;KAAC;IAC1D;QAAC;QAAe,CAACA,IAAM,CAAC,IAAI,EAAEb,UAAUa,CAAC,CAAC,EAAE,GAAG;KAAC;IAChD;QAAC;QAAkB,CAACA,IAAM,CAAC,OAAO,EAAEb,UAAUa,CAAC,CAAC,EAAE,GAAG;KAAC;IACtD;QAAC;QAAgB,CAACA,IAAM,CAAC,KAAK,EAAEb,UAAUa,CAAC,CAAC,EAAE,GAAG;KAAC;IAClD;QAAC;QAAoB,CAACA,IAAM,CAAC,SAAS,EAAEb,UAAUa,CAAC,CAAC,EAAE,GAAG;KAAC;IAC1D;QAAC;QAAqB,CAACA,IAAM,CAAC,KAAK,EAAEb,UAAUa,CAAC,CAAC,EAAE,GAAG;KAAC;CACxD;AAGM,SAASC,gBAAgBC,EAAE;IAChC,IAAI,OAAOA,OAAO,UAAU,OAAOA;IACnC,KAAK,MAAM,CAACC,IAAIC,GAAG,IAAIL,cAAe;QACpC,MAAMC,IAAIE,GAAGG,KAAK,CAACF;QACnB,IAAIH,GAAG,OAAOI,GAAGJ;IACnB;IACA,OAAOE;AACT"}},
+ {"offset": {"line": 1168, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/models/schema.js"],"sourcesContent":["import { deriveModelName } from \"./namePatterns.js\";\n\n// Normalize version separators in a model id: hyphen between two digits becomes a dot.\n// Registry ids use dots for versions (\"claude-sonnet-4.5\") but clients (CLIs, aliases)\n// often send them with dashes (\"claude-sonnet-4-5\"). Only digit-digit hyphens are\n// touched, so word/suffix hyphens stay intact (\"-thinking\", \"-agentic\", \"qwen3-coder-next\").\nexport function normalizeModelId(modelId) {\n if (typeof modelId !== \"string\") return modelId;\n return modelId.replace(/(\\d)-(\\d)/g, \"$1.$2\");\n}\n\n// Model defaults centralized (was scattered as `m.kind || \"llm\"`, `quotaFamily || \"normal\"`, etc.)\nexport const MODEL_DEFAULTS = {\n kind: \"llm\",\n quotaFamily: \"normal\",\n strip: [],\n targetFormat: null\n};\n\n// Normalize a registry model entry: accept terse \"id\" string, fill name via regex when omitted.\n// Override always wins (raw spread last); name falls back to regex → id.\nexport function normalizeModel(raw) {\n const model = typeof raw === \"string\" ? { id: raw } : raw;\n if (model.name !== undefined) return model;\n return { ...model, name: deriveModelName(model.id) };\n}\n\n// Resolve model kind with default (accepts legacy `type` field)\nexport function modelKind(model) {\n return model?.kind || model?.type || MODEL_DEFAULTS.kind;\n}\nexport function modelQuotaFamily(model) {\n return model?.quotaFamily || MODEL_DEFAULTS.quotaFamily;\n}\nexport function modelStrip(model) {\n return model?.strip || [];\n}\nexport function modelTargetFormat(model) {\n return model?.targetFormat || MODEL_DEFAULTS.targetFormat;\n}\n\n// Per-model declared upstream formats (e.g. [\"openai\", \"claude\"]). Guards the\n// sourceFormat-matched transport for multi-endpoint providers whose models differ\n// in endpoint support (opencode-go: kimi/glm only do /chat/completions, minimax/qwen\n// also do /messages, deepseek also does /responses).\nexport function modelSupportedFormats(model) {\n return model?.supportedFormats || null;\n}\n"],"names":["normalizeModelId","modelId","replace","MODEL_DEFAULTS","kind","quotaFamily","strip","targetFormat","normalizeModel","raw","model","id","name","undefined","modelKind","type","modelQuotaFamily","modelStrip","modelTargetFormat","modelSupportedFormats","supportedFormats"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AAMO,SAASA,iBAAiBC,OAAO;IACtC,IAAI,OAAOA,YAAY,UAAU,OAAOA;IACxC,OAAOA,QAAQC,OAAO,CAAC,cAAc;AACvC;AAGO,MAAMC,iBAAiB;IAC5BC,MAAM;IACNC,aAAa;IACbC,OAAO,EAAE;IACTC,cAAc;AAChB;AAIO,SAASC,eAAeC,GAAG;IAChC,MAAMC,QAAQ,OAAOD,QAAQ,WAAW;QAAEE,IAAIF;IAAI,IAAIA;IACtD,IAAIC,MAAME,IAAI,KAAKC,WAAW,OAAOH;IACrC,OAAO;QAAE,GAAGA,KAAK;QAAEE,MAAM,IAAA,0KAAe,EAACF,MAAMC,EAAE;IAAE;AACrD;AAGO,SAASG,UAAUJ,KAAK;IAC7B,OAAOA,OAAON,QAAQM,OAAOK,QAAQZ,eAAeC,IAAI;AAC1D;AACO,SAASY,iBAAiBN,KAAK;IACpC,OAAOA,OAAOL,eAAeF,eAAeE,WAAW;AACzD;AACO,SAASY,WAAWP,KAAK;IAC9B,OAAOA,OAAOJ,SAAS,EAAE;AAC3B;AACO,SAASY,kBAAkBR,KAAK;IACrC,OAAOA,OAAOH,gBAAgBJ,eAAeI,YAAY;AAC3D;AAMO,SAASY,sBAAsBT,KAAK;IACzC,OAAOA,OAAOU,oBAAoB;AACpC"}},
+ {"offset": {"line": 1227, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/alicode-intl.js"],"sourcesContent":["export default {\n id: \"alicode-intl\",\n priority: 10,\n alias: \"alicode-intl\",\n display: {\n name: \"Alibaba Coding\",\n icon: \"cloud\",\n color: \"#FF6A00\",\n textIcon: \"ALi\",\n website: \"https://www.alibabacloud.com/product/coding\",\n notice: {\n apiKeyUrl: \"https://www.alibabacloud.com/product/coding\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions\",\n headers: {},\n quirks: { preserveCacheControl: true },\n },\n models: [\n { id: \"qwen3.5-plus\", name: \"Qwen3.5 Plus\" },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"qwen3-coder-next\", name: \"Qwen3 Coder Next\" },\n { id: \"qwen3-coder-plus\", name: \"Qwen3 Coder Plus\" },\n { id: \"glm-4.7\", name: \"GLM 4.7\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","headers","quirks","preserveCacheControl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,QAAQ;YAAEC,sBAAsB;QAAK;IACvC;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAaI,MAAM;QAAY;QACrC;YAAEJ,IAAI;YAASI,MAAM;QAAQ;QAC7B;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAoBI,MAAM;QAAmB;QACnD;YAAEJ,IAAI;YAAoBI,MAAM;QAAmB;QACnD;YAAEJ,IAAI;YAAWI,MAAM;QAAU;KAClC;AACH"}},
+ {"offset": {"line": 1288, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/alicode.js"],"sourcesContent":["export default {\n id: \"alicode\",\n priority: 20,\n alias: \"alicode\",\n display: {\n name: \"Alibaba\",\n icon: \"cloud\",\n color: \"#FF6A00\",\n textIcon: \"ALi\",\n website: \"https://bailian.console.aliyun.com\",\n notice: {\n apiKeyUrl: \"https://bailian.console.aliyun.com/?apiKey=1\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://coding.dashscope.aliyuncs.com/v1/chat/completions\",\n headers: {},\n quirks: { preserveCacheControl: true },\n },\n models: [\n { id: \"qwen3.5-plus\", name: \"Qwen3.5 Plus\" },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"qwen3-max-2026-01-23\", name: \"Qwen3 Max\" },\n { id: \"qwen3-coder-next\", name: \"Qwen3 Coder Next\" },\n { id: \"qwen3-coder-plus\", name: \"Qwen3 Coder Plus\" },\n { id: \"glm-4.7\", name: \"GLM 4.7\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","headers","quirks","preserveCacheControl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,QAAQ;YAAEC,sBAAsB;QAAK;IACvC;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAaI,MAAM;QAAY;QACrC;YAAEJ,IAAI;YAASI,MAAM;QAAQ;QAC7B;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAwBI,MAAM;QAAY;QAChD;YAAEJ,IAAI;YAAoBI,MAAM;QAAmB;QACnD;YAAEJ,IAAI;YAAoBI,MAAM;QAAmB;QACnD;YAAEJ,IAAI;YAAWI,MAAM;QAAU;KAClC;AACH"}},
+ {"offset": {"line": 1353, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/alims-intl.js"],"sourcesContent":["// Model Studio Intl — standard DashScope API keys (sk-...), NOT Coding Plan keys.\n// Sibling of alicode-intl (Coding Plan). Two key types use two different hosts.\nexport default {\n id: \"alims-intl\",\n priority: 11,\n alias: \"alims-intl\",\n display: {\n name: \"Alibaba Studio\",\n icon: \"cloud\",\n color: \"#FF6A00\",\n textIcon: \"ALi\",\n website: \"https://modelstudio.console.alibabacloud.com\",\n notice: {\n apiKeyUrl: \"https://modelstudio.console.alibabacloud.com/?apiKey=1\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions\",\n headers: {},\n quirks: { preserveCacheControl: true },\n },\n models: [\n { id: \"qwen3.5-plus\", name: \"Qwen3.5 Plus\" },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"qwen3-coder-next\", name: \"Qwen3 Coder Next\" },\n { id: \"qwen3-coder-plus\", name: \"Qwen3 Coder Plus\" },\n { id: \"glm-4.7\", name: \"GLM 4.7\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","headers","quirks","preserveCacheControl","models"],"mappings":"AAAA,kFAAkF;AAClF,gFAAgF;;;;;uCACjE;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,QAAQ;YAAEC,sBAAsB;QAAK;IACvC;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAaI,MAAM;QAAY;QACrC;YAAEJ,IAAI;YAASI,MAAM;QAAQ;QAC7B;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAoBI,MAAM;QAAmB;QACnD;YAAEJ,IAAI;YAAoBI,MAAM;QAAmB;QACnD;YAAEJ,IAAI;YAAWI,MAAM;QAAU;KAClC;AACH"}},
+ {"offset": {"line": 1416, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/alitp-intl.js"],"sourcesContent":["// Token Plan — credit subscription keys on token-plan..maas.aliyuncs.com.\n// Fourth Alibaba key type: Coding Plan (alicode/alicode-intl) and Model Studio\n// (alims-intl) both reject these keys, and they reject Model Studio keys back.\n// Singapore is the only region that serves the plan; eu-central-1 answers\n// IllegalEndpoint. The Anthropic surface (/apps/anthropic/v1/messages) is not\n// authorized for this plan, so OpenAI-compatible mode is the only transport.\nexport default {\n id: \"alitp-intl\",\n priority: 11,\n alias: \"alitp-intl\",\n display: {\n name: \"Alibaba Token Plan\",\n icon: \"cloud\",\n color: \"#FF6A00\",\n textIcon: \"ATP\",\n website: \"https://www.alibabacloud.com/campaign/ai-landing-page-token\",\n notice: {\n apiKeyUrl: \"https://modelstudio.console.alibabacloud.com/?apiKey=1\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions\",\n headers: {},\n quirks: { preserveCacheControl: true },\n },\n models: [\n { id: \"qwen3.8-max-preview\", name: \"Qwen3.8 Max Preview\" },\n { id: \"qwen3.7-max\", name: \"Qwen3.7 Max\" },\n { id: \"qwen3.7-plus\", name: \"Qwen3.7 Plus\" },\n { id: \"qwen3.6-flash\", name: \"Qwen3.6 Flash\" },\n { id: \"glm-5.2\", name: \"GLM 5.2\" },\n { id: \"deepseek-v4-pro\", name: \"DeepSeek V4 Pro\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","headers","quirks","preserveCacheControl","models"],"mappings":"AAAA,kFAAkF;AAClF,+EAA+E;AAC/E,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;;;;;uCAC9D;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,QAAQ;YAAEC,sBAAsB;QAAK;IACvC;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAuBI,MAAM;QAAsB;QACzD;YAAEJ,IAAI;YAAeI,MAAM;QAAc;QACzC;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAiBI,MAAM;QAAgB;QAC7C;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAmBI,MAAM;QAAkB;KAClD;AACH"}},
+ {"offset": {"line": 1479, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/anthropic.js"],"sourcesContent":["export default {\n id: \"anthropic\",\n priority: 30,\n alias: \"anthropic\",\n display: {\n name: \"Anthropic\",\n icon: \"smart_toy\",\n color: \"#D97757\",\n textIcon: \"AN\",\n website: \"https://console.anthropic.com\",\n notice: {\n apiKeyUrl: \"https://console.anthropic.com/settings/keys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.anthropic.com/v1/messages\",\n format: \"claude\",\n headers: {\n \"anthropic-version\": \"2023-06-01\",\n \"Anthropic-Beta\": \"claude-code-20250219,interleaved-thinking-2025-05-14\",\n },\n },\n models: [\n { id: \"claude-sonnet-4-20250514\", name: \"Claude Sonnet 4\" },\n { id: \"claude-opus-4-20250514\", name: \"Claude Opus 4\" },\n { id: \"claude-3-5-sonnet-20241022\", name: \"Claude 3.5 Sonnet\" },\n ],\n serviceKinds: [\"llm\",\"imageToText\"],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","format","headers","models","serviceKinds"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,SAAS;YACP,qBAAqB;YACrB,kBAAkB;QACpB;IACF;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAA4BI,MAAM;QAAkB;QAC1D;YAAEJ,IAAI;YAA0BI,MAAM;QAAgB;QACtD;YAAEJ,IAAI;YAA8BI,MAAM;QAAoB;KAC/D;IACDa,cAAc;QAAC;QAAM;KAAc;AACrC"}},
+ {"offset": {"line": 1529, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/antigravity.js"],"sourcesContent":["import { ANTIGRAVITY_IDE_BASE_URL, ANTIGRAVITY_IDE_USER_AGENT, ANTIGRAVITY_OAUTH_CLIENT } from \"../shared.js\";\n\nexport default {\n id: \"antigravity\",\n priority: 20,\n alias: \"ag\",\n uiAlias: \"ag\",\n display: {\n name: \"Antigravity\",\n icon: \"rocket_launch\",\n color: \"#F59E0B\",\n website: \"https://antigravity.google\",\n notice: {\n signupUrl: \"https://antigravity.google\",\n },\n deprecated: true,\n deprecationNotice: \"RISK_NOTICE\",\n },\n category: \"oauth\",\n serviceKinds: [\"llm\", \"image\"],\n transport: {\n baseUrls: [ANTIGRAVITY_IDE_BASE_URL],\n format: \"antigravity\",\n headers: {\n \"User-Agent\": ANTIGRAVITY_IDE_USER_AGENT,\n },\n retry: {\n \"429\": {\n attempts: 3,\n },\n \"500\": {\n attempts: 3,\n },\n \"503\": {\n attempts: 3,\n },\n },\n usage: {\n // Discovery (quota/project) on PROD; daily host rejects these.\n quotaApiUrl: \"https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels\",\n loadProjectApiUrl: \"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n },\n clientId: \"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com\",\n clientSecret: \"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\",\n },\n models: [\n { id: \"gemini-3.7-flash-high\", name: \"Gemini 3.7 Flash (High)\", upstreamModelId: \"gemini-3.7-flash-tiered(high)\" },\n { id: \"gemini-3.7-flash-medium\", name: \"Gemini 3.7 Flash (Medium)\", upstreamModelId: \"gemini-3.7-flash-tiered(medium)\" },\n { id: \"gemini-3.7-flash-low\", name: \"Gemini 3.7 Flash (Low)\", upstreamModelId: \"gemini-3.7-flash-tiered(low)\" },\n { id: \"gemini-3.6-flash-high\", name: \"Gemini 3.6 Flash (High)\", upstreamModelId: \"gemini-3.6-flash-tiered(high)\" },\n { id: \"gemini-3.6-flash-medium\", name: \"Gemini 3.6 Flash (Medium)\", upstreamModelId: \"gemini-3.6-flash-tiered(medium)\" },\n { id: \"gemini-3.6-flash-low\", name: \"Gemini 3.6 Flash (Low)\", upstreamModelId: \"gemini-3.6-flash-tiered(low)\" },\n { id: \"gemini-3.5-flash-high\", name: \"Gemini 3.5 Flash (High)\" },\n { id: \"gemini-3-flash-agent\", name: \"Gemini 3.5 Flash (High)\" },\n { id: \"gemini-3.5-flash-low\", name: \"Gemini 3.5 Flash (Medium)\" },\n { id: \"gemini-3.5-flash-extra-low\", name: \"Gemini 3.5 Flash (Low)\" },\n { id: \"gemini-pro-agent\", name: \"Gemini 3.1 Pro (High)\" },\n { id: \"gemini-3.1-pro-low\", name: \"Gemini 3.1 Pro (Low)\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6 (Thinking)\" },\n { id: \"claude-opus-4-6-thinking\", name: \"Claude Opus 4.6 (Thinking)\" },\n { id: \"gpt-oss-120b-medium\", name: \"GPT-OSS 120B (Medium)\" },\n { id: \"gemini-3-flash\", name: \"Gemini 3 Flash\", thinking: false },\n // Image generation models\n { id: \"gemini-3.1-flash-image\", name: \"Gemini 3.1 Flash (Image)\", kind: \"image\", imageGen: true, capabilities: [\"textToImage\"] },\n ],\n oauth: {\n authorizeUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n userInfoUrl: \"https://www.googleapis.com/oauth2/v1/userinfo\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n \"https://www.googleapis.com/auth/userinfo.profile\",\n \"https://www.googleapis.com/auth/cclog\",\n \"https://www.googleapis.com/auth/experimentsandconfigs\",\n ],\n apiEndpoint: \"https://daily-cloudcode-pa.googleapis.com\",\n apiVersion: \"v1internal\",\n loadCodeAssistEndpoint: \"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist\",\n onboardUserEndpoint: \"https://cloudcode-pa.googleapis.com/v1internal:onboardUser\",\n loadCodeAssistUserAgent: ANTIGRAVITY_IDE_USER_AGENT,\n refreshLeadMs: 300000,\n },\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","deprecated","deprecationNotice","category","serviceKinds","transport","baseUrls","format","headers","retry","attempts","usage","quotaApiUrl","loadProjectApiUrl","tokenUrl","clientId","clientSecret","models","upstreamModelId","thinking","kind","imageGen","capabilities","oauth","authorizeUrl","userInfoUrl","scopes","apiEndpoint","apiVersion","loadCodeAssistEndpoint","onboardUserEndpoint","loadCodeAssistUserAgent","refreshLeadMs","features"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;QACAC,YAAY;QACZC,mBAAmB;IACrB;IACAC,UAAU;IACVC,cAAc;QAAC;QAAO;KAAQ;IAC9BC,WAAW;QACTC,UAAU;YAAC,mKAAwB;SAAC;QACpCC,QAAQ;QACRC,SAAS;YACP,cAAc,qKAA0B;QAC1C;QACAC,OAAO;YACL,OAAO;gBACLC,UAAU;YACZ;YACA,OAAO;gBACLA,UAAU;YACZ;YACA,OAAO;gBACLA,UAAU;YACZ;QACF;QACAC,OAAO;YACL,+DAA+D;YAC/DC,aAAa;YACbC,mBAAmB;YACnBC,UAAU;QACZ;QACAC,UAAU;QACVC,cAAc;IAChB;IACAC,QAAQ;QACN;YAAE3B,IAAI;YAAyBK,MAAM;YAA2BuB,iBAAiB;QAAgC;QACjH;YAAE5B,IAAI;YAA2BK,MAAM;YAA6BuB,iBAAiB;QAAkC;QACvH;YAAE5B,IAAI;YAAwBK,MAAM;YAA0BuB,iBAAiB;QAA+B;QAC9G;YAAE5B,IAAI;YAAyBK,MAAM;YAA2BuB,iBAAiB;QAAgC;QACjH;YAAE5B,IAAI;YAA2BK,MAAM;YAA6BuB,iBAAiB;QAAkC;QACvH;YAAE5B,IAAI;YAAwBK,MAAM;YAA0BuB,iBAAiB;QAA+B;QAC9G;YAAE5B,IAAI;YAAyBK,MAAM;QAA0B;QAC/D;YAAEL,IAAI;YAAwBK,MAAM;QAA0B;QAC9D;YAAEL,IAAI;YAAwBK,MAAM;QAA4B;QAChE;YAAEL,IAAI;YAA8BK,MAAM;QAAyB;QACnE;YAAEL,IAAI;YAAoBK,MAAM;QAAwB;QACxD;YAAEL,IAAI;YAAsBK,MAAM;QAAuB;QACzD;YAAEL,IAAI;YAAqBK,MAAM;QAA+B;QAChE;YAAEL,IAAI;YAA4BK,MAAM;QAA6B;QACrE;YAAEL,IAAI;YAAuBK,MAAM;QAAwB;QAC3D;YAAEL,IAAI;YAAkBK,MAAM;YAAkBwB,UAAU;QAAM;QAChE,0BAA0B;QAC1B;YAAE7B,IAAI;YAA0BK,MAAM;YAA4ByB,MAAM;YAASC,UAAU;YAAMC,cAAc;gBAAC;aAAc;QAAC;KAChI;IACDC,OAAO;QACLC,cAAc;QACdV,UAAU;QACVW,aAAa;QACbC,QAAQ;YACN;YACA;YACA;YACA;YACA;SACD;QACDC,aAAa;QACbC,YAAY;QACZC,wBAAwB;QACxBC,qBAAqB;QACrBC,yBAAyB,qKAA0B;QACnDC,eAAe;IACjB;IACAC,UAAU;QACRtB,OAAO;IACT;AACF"}},
+ {"offset": {"line": 1693, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/api-airforce.js"],"sourcesContent":["export default {\n id: \"api-airforce\",\n alias: \"af\",\n aliases: [\n \"airforce\",\n ],\n uiAlias: \"af\",\n display: {\n name: \"API.airforce\",\n icon: \"flight\",\n color: \"#0EA5E9\",\n textIcon: \"AF\",\n website: \"https://api.airforce\",\n notice: {\n apiKeyUrl: \"https://api.airforce\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\n \"apikey\",\n ],\n transport: {\n baseUrl: \"https://api.airforce/v1/chat/completions\",\n validateUrl: \"https://api.airforce/v1/models\",\n headers: {\n \"HTTP-Referer\": \"https://endpoint-proxy.local\",\n \"X-Title\": \"Endpoint Proxy\",\n },\n },\n models: [\n { id: \"anthropic/claude-3.7-sonnet\", name: \"Claude 3.7 Sonnet (Free)\", contextLength: 200000 },\n { id: \"moonshot/kimi-k2.6\", name: \"Kimi K2.6 (Free)\", contextLength: 262144 },\n { id: \"google/gemini-2.5-flash\", name: \"Gemini 2.5 Flash (Free)\", contextLength: 1048576 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","headers","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACT;KACD;IACDC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,SAAS;YACP,gBAAgB;YAChB,WAAW;QACb;IACF;IACAC,QAAQ;QACN;YAAEnB,IAAI;YAA+BK,MAAM;YAA4Be,eAAe;QAAO;QAC7F;YAAEpB,IAAI;YAAsBK,MAAM;YAAoBe,eAAe;QAAO;QAC5E;YAAEpB,IAAI;YAA2BK,MAAM;YAA2Be,eAAe;QAAQ;KAC1F;AACH"}},
+ {"offset": {"line": 1749, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/assemblyai.js"],"sourcesContent":["export default {\n id: \"assemblyai\",\n priority: 30,\n alias: \"assemblyai\",\n aliases: [\n \"aai\",\n ],\n uiAlias: \"aai\",\n display: {\n name: \"AssemblyAI\",\n icon: \"record_voice_over\",\n color: \"#0062FF\",\n textIcon: \"AA\",\n website: \"https://assemblyai.com\",\n notice: {\n apiKeyUrl: \"https://www.assemblyai.com/app/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.assemblyai.com/v1/audio/transcriptions\",\n validateUrl: \"https://api.assemblyai.com/v1/account\",\n },\n models: [\n { id: \"universal-3-pro\", name: \"Universal 3 Pro\", params: [\"language\"], kind: \"stt\" },\n { id: \"universal-2\", name: \"Universal 2\", params: [\"language\"], kind: \"stt\" },\n { id: \"best\", name: \"Best (Nano + Universal)\", kind: \"stt\" },\n { id: \"nano\", name: \"Nano (Fast)\", kind: \"stt\" },\n ],\n serviceKinds: [\"stt\"],\n sttConfig: {\n baseUrl: \"https://api.assemblyai.com/v2/transcript\",\n authType: \"apikey\",\n authHeader: \"authorization\",\n format: \"assemblyai\",\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models","params","kind","serviceKinds","sttConfig","authHeader","format"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAmBM,MAAM;YAAmBa,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;QACpF;YAAEpB,IAAI;YAAeM,MAAM;YAAea,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;QAC5E;YAAEpB,IAAI;YAAQM,MAAM;YAA2Bc,MAAM;QAAM;QAC3D;YAAEpB,IAAI;YAAQM,MAAM;YAAec,MAAM;QAAM;KAChD;IACDC,cAAc;QAAC;KAAM;IACrBC,WAAW;QACTN,SAAS;QACTF,UAAU;QACVS,YAAY;QACZC,QAAQ;IACV;AACF"}},
+ {"offset": {"line": 1819, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/aws-polly.js"],"sourcesContent":["export default {\n id: \"aws-polly\",\n alias: \"polly\",\n display: {\n name: \"AWS Polly\",\n icon: \"record_voice_over\",\n color: \"#FF9900\",\n textIcon: \"PL\",\n website: \"https://aws.amazon.com/polly/\",\n notice: {\n text: \"Use AWS Secret Access Key as API key; set providerSpecificData.accessKeyId and optional region.\",\n apiKeyUrl: \"https://console.aws.amazon.com/iam/home#/security_credentials\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"tts\"\n ],\n ttsConfig: {\n baseUrl: \"https://polly.{region}.amazonaws.com/v1/speech\",\n authType: \"apikey\",\n authHeader: \"aws-sigv4\",\n format: \"aws-polly\",\n models: [\n {\n id: \"standard\",\n name: \"Standard\"\n },\n {\n id: \"neural\",\n name: \"Neural\"\n },\n {\n id: \"long-form\",\n name: \"Long-form\"\n },\n {\n id: \"generative\",\n name: \"Generative\"\n }\n ]\n },\n hasProviderSpecificData: true\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","serviceKinds","ttsConfig","baseUrl","authHeader","format","models","hasProviderSpecificData"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,WAAW;QACTC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACElB,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;SACD;IACH;IACAgB,yBAAyB;AAC3B"}},
+ {"offset": {"line": 1872, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/azure.js"],"sourcesContent":["export default {\n id: \"azure\",\n priority: 40,\n alias: \"azure\",\n display: {\n name: \"Azure OpenAI\",\n icon: \"cloud\",\n color: \"#0078D4\",\n textIcon: \"AZ\",\n website: \"https://azure.microsoft.com/en-us/products/ai-services/openai-service\",\n notice: {\n apiKeyUrl: \"https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI\",\n },\n },\n category: \"apikey\",\n hasProviderSpecificData: true,\n transport: {\n baseUrl: \"\",\n headers: {},\n },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","hasProviderSpecificData","transport","baseUrl","headers"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,yBAAyB;IACzBC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;IACZ;AACF"}},
+ {"offset": {"line": 1901, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/baidu.js"],"sourcesContent":["export default {\n id: \"baidu\",\n alias: \"qianfan\",\n aliases: [\"qianfan\", \"ernie\", \"baidu-qianfan\"],\n uiAlias: \"qianfan\",\n category: \"apikey\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n display: {\n name: \"Baidu Qianfan\",\n icon: \"search\",\n color: \"#2932E1\",\n textIcon: \"BD\",\n website: \"https://cloud.baidu.com/product/qianfan.html\",\n notice: {\n apiKeyUrl:\n \"https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application\",\n },\n },\n transport: {\n baseUrl: \"https://qianfan.baidubce.com/v2/chat/completions\",\n validateUrl: \"https://qianfan.baidubce.com/v2/models\",\n },\n models: [\n { id: \"deepseek-v4-pro\", name: \"DeepSeek V4 Pro\", contextLength: 1048576 },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek V4 Flash\", contextLength: 1048576 },\n { id: \"glm-5.2\", name: \"GLM 5.2\", contextLength: 512000 },\n { id: \"glm-5.1\", name: \"GLM 5.1\", contextLength: 198000 },\n { id: \"kimi-k2.6\", name: \"Kimi K2.6\", contextLength: 262144 },\n { id: \"qwen3.5-397b-a17b\", name: \"Qwen 3.5 397B A17B\", contextLength: 262144 },\n { id: \"qwen3.5-27b\", name: \"Qwen 3.5 27B\", contextLength: 262144 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","category","authType","authModes","display","name","icon","color","textIcon","website","notice","apiKeyUrl","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QAAC;QAAW;QAAS;KAAgB;IAC9CC,SAAS;IACTC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WACE;QACJ;IACF;IACAC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAmBQ,MAAM;YAAmBW,eAAe;QAAQ;QACzE;YAAEnB,IAAI;YAAqBQ,MAAM;YAAqBW,eAAe;QAAQ;QAC7E;YAAEnB,IAAI;YAAWQ,MAAM;YAAWW,eAAe;QAAO;QACxD;YAAEnB,IAAI;YAAWQ,MAAM;YAAWW,eAAe;QAAO;QACxD;YAAEnB,IAAI;YAAaQ,MAAM;YAAaW,eAAe;QAAO;QAC5D;YAAEnB,IAAI;YAAqBQ,MAAM;YAAsBW,eAAe;QAAO;QAC7E;YAAEnB,IAAI;YAAeQ,MAAM;YAAgBW,eAAe;QAAO;KAClE;AACH"}},
+ {"offset": {"line": 1975, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/bazaarlink.js"],"sourcesContent":["export default {\n id: \"bazaarlink\",\n alias: \"bzl\",\n aliases: [\"bazaar-link\"],\n uiAlias: \"bzl\",\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n display: {\n name: \"Bazaarlink\",\n icon: \"storefront\",\n color: \"#DC2626\",\n textIcon: \"BZ\",\n website: \"https://bazaarlink.ai\",\n notice: { apiKeyUrl: \"https://bazaarlink.ai\" },\n },\n transport: {\n baseUrl: \"https://bazaarlink.ai/api/v1/chat/completions\",\n validateUrl: \"https://bazaarlink.ai/api/v1/models\",\n },\n models: [\n { id: \"auto:free\", name: \"Auto Free (Zero Cost)\" },\n { id: \"claude-opus-4.7\", name: \"Claude Opus 4.7\", contextLength: 1000000 },\n { id: \"claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\", contextLength: 1000000 },\n { id: \"claude-haiku-4.5\", name: \"Claude Haiku 4.5\", contextLength: 200000 },\n { id: \"gpt-5.5\", name: \"GPT-5.5\", contextLength: 1050000 },\n { id: \"gpt-5.4\", name: \"GPT-5.4\", contextLength: 1050000 },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\", contextLength: 400000 },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\", contextLength: 400000 },\n { id: \"grok-4.3\", name: \"Grok 4.3\", contextLength: 1000000 },\n { id: \"grok-4.20\", name: \"Grok 4.20\", contextLength: 2000000 },\n { id: \"gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro\", contextLength: 1048576 },\n { id: \"gemini-3-flash-preview\", name: \"Gemini 3 Flash\", contextLength: 1048576 },\n { id: \"gemini-3.1-flash-lite-preview\", name: \"Gemini 3.1 Flash Lite\", contextLength: 1048576 },\n { id: \"kimi-k2.6\", name: \"Kimi K2.6\", contextLength: 262144 },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\", contextLength: 262144 },\n { id: \"glm-5.1\", name: \"GLM 5.1\", contextLength: 204800 },\n { id: \"glm-5\", name: \"GLM 5\", contextLength: 204800 },\n { id: \"mimo-v2.5-pro\", name: \"MiMo-V2.5-Pro\", contextLength: 1050000 },\n { id: \"mimo-v2.5\", name: \"MiMo-V2.5\", contextLength: 1050000 },\n { id: \"minimax-m3\", name: \"MiniMax M3\", contextLength: 1048576 },\n { id: \"minimax-m2.7\", name: \"MiniMax M2.7\", contextLength: 204800 },\n { id: \"minimax-m2.5\", name: \"MiniMax M2.5\", contextLength: 204800 },\n { id: \"qwen3.6-plus\", name: \"Qwen 3.6 Plus\", contextLength: 1000000 },\n { id: \"nemotron-3-super-120b-a12b\", name: \"Nemotron 3 Super\", contextLength: 1000000 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","category","authType","authModes","display","name","icon","color","textIcon","website","notice","apiKeyUrl","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QAAC;KAAc;IACxBC,SAAS;IACTC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YAAEC,WAAW;QAAwB;IAC/C;IACAC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAaQ,MAAM;QAAwB;QACjD;YAAER,IAAI;YAAmBQ,MAAM;YAAmBW,eAAe;QAAQ;QACzE;YAAEnB,IAAI;YAAqBQ,MAAM;YAAqBW,eAAe;QAAQ;QAC7E;YAAEnB,IAAI;YAAoBQ,MAAM;YAAoBW,eAAe;QAAO;QAC1E;YAAEnB,IAAI;YAAWQ,MAAM;YAAWW,eAAe;QAAQ;QACzD;YAAEnB,IAAI;YAAWQ,MAAM;YAAWW,eAAe;QAAQ;QACzD;YAAEnB,IAAI;YAAgBQ,MAAM;YAAgBW,eAAe;QAAO;QAClE;YAAEnB,IAAI;YAAgBQ,MAAM;YAAgBW,eAAe;QAAO;QAClE;YAAEnB,IAAI;YAAYQ,MAAM;YAAYW,eAAe;QAAQ;QAC3D;YAAEnB,IAAI;YAAaQ,MAAM;YAAaW,eAAe;QAAQ;QAC7D;YAAEnB,IAAI;YAA0BQ,MAAM;YAAkBW,eAAe;QAAQ;QAC/E;YAAEnB,IAAI;YAA0BQ,MAAM;YAAkBW,eAAe;QAAQ;QAC/E;YAAEnB,IAAI;YAAiCQ,MAAM;YAAyBW,eAAe;QAAQ;QAC7F;YAAEnB,IAAI;YAAaQ,MAAM;YAAaW,eAAe;QAAO;QAC5D;YAAEnB,IAAI;YAAaQ,MAAM;YAAaW,eAAe;QAAO;QAC5D;YAAEnB,IAAI;YAAWQ,MAAM;YAAWW,eAAe;QAAO;QACxD;YAAEnB,IAAI;YAASQ,MAAM;YAASW,eAAe;QAAO;QACpD;YAAEnB,IAAI;YAAiBQ,MAAM;YAAiBW,eAAe;QAAQ;QACrE;YAAEnB,IAAI;YAAaQ,MAAM;YAAaW,eAAe;QAAQ;QAC7D;YAAEnB,IAAI;YAAcQ,MAAM;YAAcW,eAAe;QAAQ;QAC/D;YAAEnB,IAAI;YAAgBQ,MAAM;YAAgBW,eAAe;QAAO;QAClE;YAAEnB,IAAI;YAAgBQ,MAAM;YAAgBW,eAAe;QAAO;QAClE;YAAEnB,IAAI;YAAgBQ,MAAM;YAAiBW,eAAe;QAAQ;QACpE;YAAEnB,IAAI;YAA8BQ,MAAM;YAAoBW,eAAe;QAAQ;KACtF;AACH"}},
+ {"offset": {"line": 2131, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/black-forest-labs.js"],"sourcesContent":["export default {\n id: \"black-forest-labs\",\n priority: 50,\n alias: \"black-forest-labs\",\n aliases: [\n \"bfl\",\n ],\n uiAlias: \"bfl\",\n display: {\n name: \"Black Forest Labs\",\n icon: \"image\",\n color: \"#111827\",\n textIcon: \"BF\",\n website: \"https://blackforestlabs.ai\",\n notice: {\n apiKeyUrl: \"https://api.bfl.ai\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: null,\n models: [\n { id: \"flux-pro-1.1\", name: \"FLUX Pro 1.1\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"flux-pro-1.1-ultra\", name: \"FLUX Pro 1.1 Ultra\", params: [\"size\"], kind: \"image\" },\n { id: \"flux-pro\", name: \"FLUX Pro\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"flux-dev\", name: \"FLUX Dev\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"flux-kontext-pro\", name: \"FLUX Kontext Pro (Edit)\", params: [\"size\"], capabilities: [\"edit\"], kind: \"image\" },\n { id: \"flux-kontext-max\", name: \"FLUX Kontext Max (Edit)\", params: [\"size\"], capabilities: [\"edit\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"https://api.bfl.ai/v1\" },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","models","params","kind","capabilities","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEhB,IAAI;YAAgBM,MAAM;YAAgBW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QAChF;YAAElB,IAAI;YAAsBM,MAAM;YAAsBW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACxF;YAAElB,IAAI;YAAYM,MAAM;YAAYW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACxE;YAAElB,IAAI;YAAYM,MAAM;YAAYW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACxE;YAAElB,IAAI;YAAoBM,MAAM;YAA2BW,QAAQ;gBAAC;aAAO;YAAEE,cAAc;gBAAC;aAAO;YAAED,MAAM;QAAQ;QACnH;YAAElB,IAAI;YAAoBM,MAAM;YAA2BW,QAAQ;gBAAC;aAAO;YAAEE,cAAc;gBAAC;aAAO;YAAED,MAAM;QAAQ;KACpH;IACDE,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAwB;AAClD"}},
+ {"offset": {"line": 2226, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/blackbox.js"],"sourcesContent":["export default {\n id: \"blackbox\",\n priority: 50,\n alias: \"blackbox\",\n aliases: [\n \"bb\",\n ],\n uiAlias: \"bb\",\n display: {\n name: \"Blackbox AI\",\n icon: \"smart_toy\",\n color: \"#5B5FEF\",\n textIcon: \"BB\",\n website: \"https://blackbox.ai\",\n notice: {\n apiKeyUrl: \"https://www.blackbox.ai/api-management\",\n },\n },\n category: \"apikey\",\n serviceKinds: [\"llm\"],\n thinkingConfig: {\n options: [\"auto\", \"none\", \"low\", \"medium\", \"high\", \"xhigh\"],\n defaultMode: \"auto\",\n },\n transport: {\n baseUrl: \"https://api.blackbox.ai/v1/chat/completions\",\n thinkingFormat: \"openai\",\n },\n models: [\n { id: \"claude-fable-5\", name: \"Claude Fable 5\", upstreamModelId: \"blackboxai/anthropic/claude-fable-5\" },\n { id: \"claude-opus-4.8\", name: \"Claude Opus 4.8\", upstreamModelId: \"blackboxai/anthropic/claude-opus-4.8\" },\n { id: \"claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\", upstreamModelId: \"blackboxai/anthropic/claude-sonnet-4.6\" },\n { id: \"gpt-5.5\", name: \"GPT-5.5\", upstreamModelId: \"blackboxai/openai/gpt-5.5\" },\n { id: \"gpt-5.4-pro\", name: \"GPT-5.4 Pro\", upstreamModelId: \"blackboxai/openai/gpt-5.4-pro\" },\n { id: \"gpt-5.4\", name: \"GPT-5.4\", upstreamModelId: \"blackboxai/openai/gpt-5.4\" },\n { id: \"gpt-5.3-codex\", name: \"GPT-5.3 Codex\", upstreamModelId: \"blackboxai/openai/gpt-5.3-codex\" },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\", upstreamModelId: \"blackboxai/openai/gpt-5.4-nano\" },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek V4 Flash\", upstreamModelId: \"blackboxai/deepseek/deepseek-v4-flash\" },\n { id: \"grok-4.3\", name: \"Grok 4.3\", upstreamModelId: \"blackboxai/x-ai/grok-4.3\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","serviceKinds","thinkingConfig","options","defaultMode","transport","baseUrl","thinkingFormat","models","upstreamModelId"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,cAAc;QAAC;KAAM;IACrBC,gBAAgB;QACdC,SAAS;YAAC;YAAQ;YAAQ;YAAO;YAAU;YAAQ;SAAQ;QAC3DC,aAAa;IACf;IACAC,WAAW;QACTC,SAAS;QACTC,gBAAgB;IAClB;IACAC,QAAQ;QACN;YAAErB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAAsC;QAC7G;YAAEtB,IAAI;YAAqBM,MAAM;YAAoBgB,iBAAiB;QAAuC;QAC7G;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAAyC;QAChH;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAA4B;QACnG;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAAgC;QACvG;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAA4B;QACnG;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAAkC;QACzG;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAAiC;QACxG;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAAwC;QAC/G;YAAEtB,IAAI;YAAqBM,MAAM;YAAqBgB,iBAAiB;QAA2B;KACnG;AACH"}},
+ {"offset": {"line": 2324, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/bluesminds.js"],"sourcesContent":["export default {\n id: \"bluesminds\",\n alias: \"bm\",\n aliases: [\"blue-sminds\"],\n uiAlias: \"bm\",\n hidden: true,\n display: {\n name: \"BluesMinds\",\n icon: \"psychology\",\n color: \"#2563EB\",\n textIcon: \"BM\",\n website: \"https://bluesminds.com\",\n notice: { apiKeyUrl: \"https://bluesminds.com\" },\n },\n category: \"apikey\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://api.bluesminds.com/v1/chat/completions\",\n validateUrl: \"https://api.bluesminds.com/v1/models\",\n },\n models: [\n { id: \"gpt-4.1\", name: \"GPT-4.1\", contextLength: 1048576 },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\", contextLength: 1048576 },\n { id: \"gpt-4.1-nano\", name: \"GPT-4.1 Nano\", contextLength: 1048576 },\n { id: \"claude-sonnet-4-5\", name: \"Claude Sonnet 4.5\", contextLength: 200000 },\n { id: \"claude-haiku-4-5\", name: \"Claude Haiku 4.5\", contextLength: 200000 },\n { id: \"gemini-2.0-flash\", name: \"Gemini 2.0 Flash\", contextLength: 1048576 },\n { id: \"gemini-2.0-flash-exp\", name: \"Gemini 2.0 Flash (Exp)\", contextLength: 1048576 },\n { id: \"qwen-turbo\", name: \"Qwen Turbo\", contextLength: 1000000 },\n { id: \"kimi-k2\", name: \"Kimi K2\", contextLength: 262144 },\n { id: \"kimi-k2-thinking\", name: \"Kimi K2 Thinking\", contextLength: 262144 },\n { id: \"glm-4.7\", name: \"GLM 4.7\", contextLength: 204800 },\n { id: \"minimax-m2.5\", name: \"MiniMax M2.5\", contextLength: 204800 },\n { id: \"claude-opus-4-5\", name: \"Claude Opus 4.5 (VIP)\", contextLength: 200000 },\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro (VIP)\", contextLength: 1048576 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","hidden","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QAAC;KAAc;IACxBC,SAAS;IACTC,QAAQ;IACRC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YAAEC,WAAW;QAAyB;IAChD;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEnB,IAAI;YAAWM,MAAM;YAAWc,eAAe;QAAQ;QACzD;YAAEpB,IAAI;YAAgBM,MAAM;YAAgBc,eAAe;QAAQ;QACnE;YAAEpB,IAAI;YAAgBM,MAAM;YAAgBc,eAAe;QAAQ;QACnE;YAAEpB,IAAI;YAAqBM,MAAM;YAAqBc,eAAe;QAAO;QAC5E;YAAEpB,IAAI;YAAoBM,MAAM;YAAoBc,eAAe;QAAO;QAC1E;YAAEpB,IAAI;YAAoBM,MAAM;YAAoBc,eAAe;QAAQ;QAC3E;YAAEpB,IAAI;YAAwBM,MAAM;YAA0Bc,eAAe;QAAQ;QACrF;YAAEpB,IAAI;YAAcM,MAAM;YAAcc,eAAe;QAAQ;QAC/D;YAAEpB,IAAI;YAAWM,MAAM;YAAWc,eAAe;QAAO;QACxD;YAAEpB,IAAI;YAAoBM,MAAM;YAAoBc,eAAe;QAAO;QAC1E;YAAEpB,IAAI;YAAWM,MAAM;YAAWc,eAAe;QAAO;QACxD;YAAEpB,IAAI;YAAgBM,MAAM;YAAgBc,eAAe;QAAO;QAClE;YAAEpB,IAAI;YAAmBM,MAAM;YAAyBc,eAAe;QAAO;QAC9E;YAAEpB,IAAI;YAAkBM,MAAM;YAAwBc,eAAe;QAAQ;KAC9E;AACH"}},
+ {"offset": {"line": 2432, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/brave-search.js"],"sourcesContent":["export default {\n id: \"brave-search\",\n alias: \"brave\",\n display: {\n name: \"Brave Search\",\n icon: \"travel_explore\",\n color: \"#FB542B\",\n textIcon: \"BR\",\n website: \"https://brave.com/search/api\",\n notice: {\n apiKeyUrl: \"https://api-dashboard.search.brave.com/app/keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\"\n ],\n searchConfig: {\n baseUrl: \"https://api.search.brave.com/res/v1\",\n method: \"GET\",\n authType: \"apikey\",\n authHeader: \"x-subscription-token\",\n costPerQuery: 0.005,\n freeMonthlyQuota: 1000,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 20,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 2475, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/byteplus.js"],"sourcesContent":["export default {\n id: \"byteplus\",\n priority: 70,\n alias: \"byteplus\",\n aliases: [\n \"bpm\",\n ],\n uiAlias: \"bpm\",\n display: {\n name: \"BytePlus ModelArk\",\n icon: \"cloud\",\n color: \"#2563EB\",\n textIcon: \"BP\",\n website: \"https://console.byteplus.com/ark\",\n notice: {\n text: \"Free credits for new accounts. Access to Seed 2.0, Kimi K2 Thinking, GLM 4.7, GPT-OSS-120B models.\",\n apiKeyUrl: \"https://console.byteplus.com/ark/region:ark+ap-southeast-1/apiKey\",\n },\n },\n category: \"freeTier\",\n transport: {\n baseUrl: \"https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions\",\n headers: {},\n },\n models: [\n { id: \"seed-2-0-pro-260328\", name: \"Seed 2.0 Pro\" },\n { id: \"seed-2-0-code-preview-260328\", name: \"Seed 2.0 Code Preview\" },\n { id: \"seed-2-0-mini-260215\", name: \"Seed 2.0 Mini\" },\n { id: \"seed-2-0-lite-260228\", name: \"Seed 2.0 Lite\" },\n { id: \"kimi-k2-thinking-251104\", name: \"Kimi K2 Thinking\" },\n { id: \"glm-4-7-251222\", name: \"GLM 4.7\" },\n { id: \"gpt-oss-120b-250805\", name: \"GPT-OSS-120B\" },\n ],\n serviceKinds: [\"llm\"],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","headers","models","serviceKinds"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;IACZ;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAuBM,MAAM;QAAe;QAClD;YAAEN,IAAI;YAAgCM,MAAM;QAAwB;QACpE;YAAEN,IAAI;YAAwBM,MAAM;QAAgB;QACpD;YAAEN,IAAI;YAAwBM,MAAM;QAAgB;QACpD;YAAEN,IAAI;YAA2BM,MAAM;QAAmB;QAC1D;YAAEN,IAAI;YAAkBM,MAAM;QAAU;QACxC;YAAEN,IAAI;YAAuBM,MAAM;QAAe;KACnD;IACDa,cAAc;QAAC;KAAM;AACvB"}},
+ {"offset": {"line": 2541, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/cartesia.js"],"sourcesContent":["export default {\n id: \"cartesia\",\n alias: \"cartesia\",\n display: {\n name: \"Cartesia\",\n icon: \"spatial_audio\",\n color: \"#FF4F8B\",\n textIcon: \"CA\",\n website: \"https://cartesia.ai\",\n notice: {\n apiKeyUrl: \"https://play.cartesia.ai/keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"tts\"\n ],\n ttsConfig: {\n baseUrl: \"https://api.cartesia.ai/tts/bytes\",\n authType: \"apikey\",\n authHeader: \"x-api-key\",\n format: \"cartesia\",\n models: [\n {\n id: \"sonic-2\",\n name: \"Sonic 2\"\n },\n {\n id: \"sonic-3\",\n name: \"Sonic 3\"\n }\n ]\n },\n hidden: true\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","ttsConfig","baseUrl","authHeader","format","models","hidden"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,WAAW;QACTC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACEjB,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;SACD;IACH;IACAe,QAAQ;AACV"}},
+ {"offset": {"line": 2585, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/cerebras.js"],"sourcesContent":["export default {\n id: \"cerebras\",\n priority: 60,\n alias: \"cerebras\",\n display: {\n name: \"Cerebras\",\n icon: \"memory\",\n color: \"#FF4F00\",\n textIcon: \"CB\",\n website: \"https://www.cerebras.ai\",\n notice: {\n apiKeyUrl: \"https://cloud.cerebras.ai/platform\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.cerebras.ai/v1/chat/completions\",\n validateUrl: \"https://api.cerebras.ai/v1/models\",\n quirks: {\n dropClientMetadata: true,\n },\n },\n models: [\n { id: \"gpt-oss-120b\", name: \"GPT OSS 120B\" },\n { id: \"zai-glm-4.7\", name: \"ZAI GLM 4.7\" },\n { id: \"llama-3.3-70b\", name: \"Llama 3.3 70B\" },\n { id: \"llama-4-scout-17b-16e-instruct\", name: \"Llama 4 Scout\" },\n { id: \"qwen-3-235b-a22b-instruct-2507\", name: \"Qwen3 235B A22B\" },\n { id: \"qwen-3-32b\", name: \"Qwen3 32B\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl","quirks","dropClientMetadata","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,QAAQ;YACNC,oBAAoB;QACtB;IACF;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAeI,MAAM;QAAc;QACzC;YAAEJ,IAAI;YAAiBI,MAAM;QAAgB;QAC7C;YAAEJ,IAAI;YAAkCI,MAAM;QAAgB;QAC9D;YAAEJ,IAAI;YAAkCI,MAAM;QAAkB;QAChE;YAAEJ,IAAI;YAAcI,MAAM;QAAY;KACvC;AACH"}},
+ {"offset": {"line": 2642, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/chutes.js"],"sourcesContent":["export default {\n id: \"chutes\",\n priority: 70,\n alias: \"chutes\",\n aliases: [\n \"ch\",\n ],\n uiAlias: \"ch\",\n display: {\n name: \"Chutes AI\",\n icon: \"water_drop\",\n color: \"#ffffffff\",\n textIcon: \"CH\",\n website: \"https://chutes.ai\",\n notice: {\n apiKeyUrl: \"https://chutes.ai/app/api\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://llm.chutes.ai/v1/chat/completions\",\n validateUrl: \"https://llm.chutes.ai/v1/models\",\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;AACF"}},
+ {"offset": {"line": 2674, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/claude.js"],"sourcesContent":["import { CLAUDE_CLI_SPOOF_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"claude\",\n priority: 10,\n alias: \"cc\",\n uiAlias: \"cc\",\n display: {\n name: \"Claude Code\",\n icon: \"smart_toy\",\n color: \"#D97757\",\n website: \"https://claude.ai\",\n notice: {\n signupUrl: \"https://claude.ai\",\n },\n deprecated: true,\n deprecationNotice: \"RISK_NOTICE\",\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://api.anthropic.com/v1/messages\",\n format: \"claude\",\n urlSuffix: \"?beta=true\",\n headers: {\n \"Anthropic-Version\": \"2023-06-01\",\n \"Anthropic-Beta\": \"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28\",\n \"Anthropic-Dangerous-Direct-Browser-Access\": \"true\",\n \"User-Agent\": \"claude-cli/2.1.92 (external, sdk-cli)\",\n \"X-App\": \"cli\",\n \"X-Stainless-Helper-Method\": \"stream\",\n \"X-Stainless-Retry-Count\": \"0\",\n \"X-Stainless-Runtime-Version\": \"v24.14.0\",\n \"X-Stainless-Package-Version\": \"0.80.0\",\n \"X-Stainless-Runtime\": \"node\",\n \"X-Stainless-Lang\": \"js\",\n \"X-Stainless-Arch\": \"arm64\",\n \"X-Stainless-Os\": \"MacOS\",\n \"X-Stainless-Timeout\": \"600\",\n },\n quirks: {\n cloakToolsOnOAuth: true,\n },\n auth: {\n apiKey: {\n header: \"x-api-key\",\n scheme: \"raw\",\n },\n oauth: {\n header: \"Authorization\",\n scheme: \"bearer\",\n },\n },\n usage: {\n oauthUrl: \"https://api.anthropic.com/api/oauth/usage\",\n orgUrl: \"https://api.anthropic.com/v1/organizations/{org_id}/usage\",\n settingsUrl: \"https://api.anthropic.com/v1/settings\",\n },\n },\n models: [\n { id: \"claude-opus-5\", name: \"Claude Opus 5\" },\n { id: \"claude-fable-5\", name: \"Claude Fable 5\" },\n { id: \"claude-sonnet-5\", name: \"Claude Sonnet 5\" },\n { id: \"claude-haiku-4-5-20251001\", name: \"Claude 4.5 Haiku\" },\n ],\n oauth: {\n clientId: \"9d1c250a-e61b-44d9-88ed-5944d1962f5e\",\n authorizeUrl: \"https://claude.ai/oauth/authorize\",\n tokenUrl: \"https://api.anthropic.com/v1/oauth/token\",\n scopes: [\n \"org:create_api_key\",\n \"user:profile\",\n \"user:inference\",\n ],\n codeChallengeMethod: \"S256\",\n refreshLeadMs: 14400000,\n refresh: {\n encoding: \"json\",\n },\n },\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","deprecated","deprecationNotice","category","transport","baseUrl","format","urlSuffix","headers","quirks","cloakToolsOnOAuth","auth","apiKey","header","scheme","oauth","usage","oauthUrl","orgUrl","settingsUrl","models","clientId","authorizeUrl","tokenUrl","scopes","codeChallengeMethod","refreshLeadMs","refresh","encoding","features"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;QACAC,YAAY;QACZC,mBAAmB;IACrB;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,SAAS;YACP,qBAAqB;YACrB,kBAAkB;YAClB,6CAA6C;YAC7C,cAAc;YACd,SAAS;YACT,6BAA6B;YAC7B,2BAA2B;YAC3B,+BAA+B;YAC/B,+BAA+B;YAC/B,uBAAuB;YACvB,oBAAoB;YACpB,oBAAoB;YACpB,kBAAkB;YAClB,uBAAuB;QACzB;QACAC,QAAQ;YACNC,mBAAmB;QACrB;QACAC,MAAM;YACJC,QAAQ;gBACNC,QAAQ;gBACRC,QAAQ;YACV;YACAC,OAAO;gBACLF,QAAQ;gBACRC,QAAQ;YACV;QACF;QACAE,OAAO;YACLC,UAAU;YACVC,QAAQ;YACRC,aAAa;QACf;IACF;IACAC,QAAQ;QACN;YAAE9B,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAkBK,MAAM;QAAiB;QAC/C;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAA6BK,MAAM;QAAmB;KAC7D;IACDoB,OAAO;QACLM,UAAU;QACVC,cAAc;QACdC,UAAU;QACVC,QAAQ;YACN;YACA;YACA;SACD;QACDC,qBAAqB;QACrBC,eAAe;QACfC,SAAS;YACPC,UAAU;QACZ;IACF;IACAC,UAAU;QACRb,OAAO;IACT;AACF"}},
+ {"offset": {"line": 2777, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/cline.js"],"sourcesContent":["export default {\n id: \"cline\",\n priority: 80,\n alias: \"cl\",\n uiAlias: \"cl\",\n display: {\n name: \"Cline\",\n icon: \"smart_toy\",\n color: \"#5B9BD5\",\n textIcon: \"CL\",\n website: \"https://cline.bot\",\n notice: {\n signupUrl: \"https://cline.bot\",\n },\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://api.cline.bot/api/v1/chat/completions\",\n headers: {\n \"HTTP-Referer\": \"https://cline.bot\",\n \"X-Title\": \"Cline\",\n },\n tokenUrl: \"https://api.cline.bot/api/v1/auth/token\",\n refreshUrl: \"https://api.cline.bot/api/v1/auth/refresh\",\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n hooks: [\n \"clineHeaders\",\n ],\n },\n },\n models: [\n { id: \"anthropic/claude-opus-4.7\", name: \"Claude Opus 4.7\" },\n { id: \"anthropic/claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\" },\n { id: \"anthropic/claude-opus-4.6\", name: \"Claude Opus 4.6\" },\n { id: \"openai/gpt-5.3-codex\", name: \"GPT-5.3 Codex\" },\n { id: \"openai/gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"google/gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro Preview\" },\n { id: \"google/gemini-3.1-flash-lite-preview\", name: \"Gemini 3.1 Flash Lite Preview\" },\n { id: \"kwaipilot/kat-coder-pro\", name: \"KAT Coder Pro\" },\n ],\n oauth: {\n appBaseUrl: \"https://app.cline.bot\",\n apiBaseUrl: \"https://api.cline.bot\",\n authorizeUrl: \"https://api.cline.bot/api/v1/auth/authorize\",\n tokenExchangeUrl: \"https://api.cline.bot/api/v1/auth/token\",\n refreshUrl: \"https://api.cline.bot/api/v1/auth/refresh\",\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","textIcon","website","notice","signupUrl","category","transport","baseUrl","headers","tokenUrl","refreshUrl","auth","combined","header","scheme","hooks","models","oauth","appBaseUrl","apiBaseUrl","authorizeUrl","tokenExchangeUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS;YACP,gBAAgB;YAChB,WAAW;QACb;QACAC,UAAU;QACVC,YAAY;QACZC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,OAAO;gBACL;aACD;QACH;IACF;IACAC,QAAQ;QACN;YAAEvB,IAAI;YAA6BK,MAAM;QAAkB;QAC3D;YAAEL,IAAI;YAA+BK,MAAM;QAAoB;QAC/D;YAAEL,IAAI;YAA6BK,MAAM;QAAkB;QAC3D;YAAEL,IAAI;YAAwBK,MAAM;QAAgB;QACpD;YAAEL,IAAI;YAAkBK,MAAM;QAAU;QACxC;YAAEL,IAAI;YAAiCK,MAAM;QAAyB;QACtE;YAAEL,IAAI;YAAwCK,MAAM;QAAgC;QACpF;YAAEL,IAAI;YAA2BK,MAAM;QAAgB;KACxD;IACDmB,OAAO;QACLC,YAAY;QACZC,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBX,YAAY;IACd;AACF"}},
+ {"offset": {"line": 2860, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/clinepass.js"],"sourcesContent":["export default {\n id: \"clinepass\",\n priority: 85,\n alias: \"clinepass\",\n uiAlias: \"clinepass\",\n display: {\n name: \"ClinePass\",\n icon: \"vpn_key\",\n color: \"#5B9BD5\",\n textIcon: \"CP\",\n website: \"https://cline.bot\",\n notice: {\n signupUrl: \"https://app.cline.bot\",\n },\n },\n category: \"oauth\",\n authModes: [\"oauth\", \"apikey\"],\n hasOAuth: true,\n transport: {\n baseUrl: \"https://api.cline.bot/api/v1/chat/completions\",\n headers: {\n \"HTTP-Referer\": \"https://cline.bot\",\n \"X-Title\": \"Cline\",\n },\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n hooks: [\n \"clineHeaders\",\n ],\n },\n },\n models: [\n { id: \"cline-pass/glm-5.2\", name: \"GLM-5.2 (ClinePass)\" },\n { id: \"cline-pass/kimi-k2.7-code\", name: \"Kimi K2.7 Code (ClinePass)\" },\n { id: \"cline-pass/kimi-k2.6\", name: \"Kimi K2.6 (ClinePass)\" },\n { id: \"cline-pass/deepseek-v4-pro\", name: \"DeepSeek V4 Pro (ClinePass)\" },\n { id: \"cline-pass/deepseek-v4-flash\", name: \"DeepSeek V4 Flash (ClinePass)\" },\n { id: \"cline-pass/mimo-v2.5\", name: \"MiMo-V2.5 (ClinePass)\" },\n { id: \"cline-pass/mimo-v2.5-pro\", name: \"MiMo-V2.5-Pro (ClinePass)\" },\n { id: \"cline-pass/minimax-m3\", name: \"MiniMax M3 (ClinePass)\" },\n { id: \"cline-pass/qwen3.7-max\", name: \"Qwen3.7 Max (ClinePass)\" },\n { id: \"cline-pass/qwen3.7-plus\", name: \"Qwen3.7 Plus (ClinePass)\" },\n ],\n oauth: {\n appBaseUrl: \"https://app.cline.bot\",\n apiBaseUrl: \"https://api.cline.bot\",\n authorizeUrl: \"https://api.cline.bot/api/v1/auth/authorize\",\n tokenUrl: \"https://api.cline.bot/api/v1/auth/token\",\n refreshUrl: \"https://api.cline.bot/api/v1/auth/refresh\",\n },\n thinkingConfig: {\n options: [\"auto\", \"on\", \"off\"],\n defaultMode: \"auto\",\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","textIcon","website","notice","signupUrl","category","authModes","hasOAuth","transport","baseUrl","headers","auth","combined","header","scheme","hooks","models","oauth","appBaseUrl","apiBaseUrl","authorizeUrl","tokenUrl","refreshUrl","thinkingConfig","options","defaultMode"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;QAAS;KAAS;IAC9BC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS;YACP,gBAAgB;YAChB,WAAW;QACb;QACAC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,OAAO;gBACL;aACD;QACH;IACF;IACAC,QAAQ;QACN;YAAEvB,IAAI;YAAsBK,MAAM;QAAsB;QACxD;YAAEL,IAAI;YAA6BK,MAAM;QAA6B;QACtE;YAAEL,IAAI;YAAwBK,MAAM;QAAwB;QAC5D;YAAEL,IAAI;YAA8BK,MAAM;QAA8B;QACxE;YAAEL,IAAI;YAAgCK,MAAM;QAAgC;QAC5E;YAAEL,IAAI;YAAwBK,MAAM;QAAwB;QAC5D;YAAEL,IAAI;YAA4BK,MAAM;QAA4B;QACpE;YAAEL,IAAI;YAAyBK,MAAM;QAAyB;QAC9D;YAAEL,IAAI;YAA0BK,MAAM;QAA0B;QAChE;YAAEL,IAAI;YAA2BK,MAAM;QAA2B;KACnE;IACDmB,OAAO;QACLC,YAAY;QACZC,YAAY;QACZC,cAAc;QACdC,UAAU;QACVC,YAAY;IACd;IACAC,gBAAgB;QACdC,SAAS;YAAC;YAAQ;YAAM;SAAM;QAC9BC,aAAa;IACf;AACF"}},
+ {"offset": {"line": 2962, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/cloudflare-ai.js"],"sourcesContent":["export default {\n id: \"cloudflare-ai\",\n priority: 60,\n hasFree: true,\n alias: \"cloudflare-ai\",\n aliases: [\n \"cf\",\n ],\n uiAlias: \"cf\",\n display: {\n name: \"Cloudflare\",\n icon: \"cloud\",\n color: \"#F38020\",\n textIcon: \"CF\",\n website: \"https://developers.cloudflare.com/workers-ai/\",\n notice: {\n text: \"Workers AI free tier. Requires a Cloudflare API token and Account ID.\",\n apiKeyUrl: \"https://dash.cloudflare.com/profile/api-tokens\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n hasProviderSpecificData: true,\n transport: {\n baseUrl: \"https://api.cloudflare.com/client/v4/accounts/{accountId}/ai/v1/chat/completions\",\n thinkingFormat: \"openai\",\n },\n models: [\n { id: \"@cf/meta/llama-3.2-1b-instruct\", name: \"Llama 3.2 1B Instruct\" },\n { id: \"@cf/meta/llama-3.2-3b-instruct\", name: \"Llama 3.2 3B Instruct\" },\n { id: \"@cf/meta/llama-3.1-8b-instruct-fp8-fast\", name: \"Llama 3.1 8B Instruct FP8 Fast\" },\n { id: \"@cf/meta/llama-3.1-8b-instruct-awq\", name: \"Llama 3.1 8B Instruct AWQ\" },\n { id: \"@cf/mistralai/mistral-small-3.1-24b-instruct\", name: \"Mistral Small 3.1 24B Instruct\" },\n { id: \"@cf/meta/llama-3.1-70b-instruct-fp8-fast\", name: \"Llama 3.1 70B Instruct FP8 Fast\" },\n { id: \"@cf/meta/llama-3.3-70b-instruct-fp8-fast\", name: \"Llama 3.3 70B Instruct FP8 Fast\" },\n { id: \"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b\", name: \"DeepSeek R1 Distill Qwen 32B\" },\n { id: \"@cf/moonshotai/kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"@cf/moonshotai/kimi-k2.6\", name: \"Kimi K2.6\" },\n { id: \"@cf/zai-org/glm-4.7-flash\", name: \"GLM 4.7 Flash\" },\n { id: \"@cf/qwen/qwq-32b\", name: \"QwQ 32B\" },\n { id: \"@cf/qwen/qwen2.5-coder-32b-instruct\", name: \"Qwen 2.5 Coder 32B Instruct\" },\n { id: \"@cf/black-forest-labs/flux-2-klein-9b\", name: \"FLUX.2 Klein 9B\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/black-forest-labs/flux-2-klein-4b\", name: \"FLUX.2 Klein 4B\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/black-forest-labs/flux-2-dev\", name: \"FLUX.2 Dev\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/leonardo/lucid-origin\", name: \"Lucid Origin\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/leonardo/phoenix-1.0\", name: \"Phoenix 1.0\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/black-forest-labs/flux-1-schnell\", name: \"FLUX.1 Schnell\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/bytedance/stable-diffusion-xl-lightning\", name: \"SDXL Lightning\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/lykon/dreamshaper-8-lcm\", name: \"DreamShaper 8 LCM\", params: [\"size\"], kind: \"image\" },\n { id: \"@cf/runwayml/stable-diffusion-v1-5-img2img\", name: \"Stable Diffusion v1.5 Img2Img\", params: [\"size\"], capabilities: [\"edit\"], kind: \"image\" },\n { id: \"@cf/runwayml/stable-diffusion-v1-5-inpainting\", name: \"Stable Diffusion v1.5 Inpainting\", params: [\"size\"], capabilities: [\"edit\",\"mask\"], kind: \"image\" },\n { id: \"@cf/stabilityai/stable-diffusion-xl-base-1.0\", name: \"SDXL Base 1.0\", params: [\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"llm\",\"image\"],\n imageConfig: { baseUrl: \"https://api.cloudflare.com/client/v4/accounts\" },\n};\n"],"names":["id","priority","hasFree","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","authModes","hasProviderSpecificData","transport","baseUrl","thinkingFormat","models","params","kind","capabilities","serviceKinds","imageConfig"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,yBAAyB;IACzBC,WAAW;QACTC,SAAS;QACTC,gBAAgB;IAClB;IACAC,QAAQ;QACN;YAAEtB,IAAI;YAAkCO,MAAM;QAAwB;QACtE;YAAEP,IAAI;YAAkCO,MAAM;QAAwB;QACtE;YAAEP,IAAI;YAA2CO,MAAM;QAAiC;QACxF;YAAEP,IAAI;YAAsCO,MAAM;QAA4B;QAC9E;YAAEP,IAAI;YAAgDO,MAAM;QAAiC;QAC7F;YAAEP,IAAI;YAA4CO,MAAM;QAAkC;QAC1F;YAAEP,IAAI;YAA4CO,MAAM;QAAkC;QAC1F;YAAEP,IAAI;YAAgDO,MAAM;QAA+B;QAC3F;YAAEP,IAAI;YAA4BO,MAAM;QAAY;QACpD;YAAEP,IAAI;YAA4BO,MAAM;QAAY;QACpD;YAAEP,IAAI;YAA6BO,MAAM;QAAgB;QACzD;YAAEP,IAAI;YAAoBO,MAAM;QAAU;QAC1C;YAAEP,IAAI;YAAuCO,MAAM;QAA8B;QACjF;YAAEP,IAAI;YAAyCO,MAAM;YAAmBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACxG;YAAExB,IAAI;YAAyCO,MAAM;YAAmBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACxG;YAAExB,IAAI;YAAoCO,MAAM;YAAcgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QAC9F;YAAExB,IAAI;YAA6BO,MAAM;YAAgBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACzF;YAAExB,IAAI;YAA4BO,MAAM;YAAegB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACvF;YAAExB,IAAI;YAAwCO,MAAM;YAAkBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACtG;YAAExB,IAAI;YAA+CO,MAAM;YAAkBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QAC7G;YAAExB,IAAI;YAA+BO,MAAM;YAAqBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QAChG;YAAExB,IAAI;YAA8CO,MAAM;YAAiCgB,QAAQ;gBAAC;aAAO;YAAEE,cAAc;gBAAC;aAAO;YAAED,MAAM;QAAQ;QACnJ;YAAExB,IAAI;YAAiDO,MAAM;YAAoCgB,QAAQ;gBAAC;aAAO;YAAEE,cAAc;gBAAC;gBAAO;aAAO;YAAED,MAAM;QAAQ;QAChK;YAAExB,IAAI;YAAgDO,MAAM;YAAiBgB,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;KAC9G;IACDE,cAAc;QAAC;QAAM;KAAQ;IAC7BC,aAAa;QAAEP,SAAS;IAAgD;AAC1E"}},
+ {"offset": {"line": 3157, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/codebuddy-cn.js"],"sourcesContent":["export default {\n id: \"codebuddy-cn\",\n // Short model prefix (cbcn/glm-5.2). \"cbcn\" = CodeBuddy CN; reserve \"cbai\"\n // for a future codebuddy-ai (intl) provider. The full id still resolves.\n alias: \"cbcn\",\n uiAlias: \"cbcn\",\n hidden: false,\n priority: 90,\n display: {\n name: \"CodeBuddy CN\",\n icon: \"smart_toy\",\n color: \"#006EFF\",\n website: \"https://copilot.tencent.com\",\n notice: {\n signupUrl: \"https://copilot.tencent.com\",\n },\n },\n category: \"oauth\",\n authModes: [\"oauth\", \"apikey\"],\n hasOAuth: true,\n transport: {\n baseUrl: \"https://copilot.tencent.com/v2/chat/completions\",\n forceStream: true,\n // CodeBuddy is a unified OpenAI-compatible gateway: every model (GLM, Kimi,\n // MiniMax, DeepSeek, Hunyuan) takes reasoning via OpenAI-style reasoning_effort,\n // not its vendor-native thinking shape. Force the openai thinking format.\n thinkingFormat: \"openai\",\n headers: {\n \"User-Agent\": \"CLI/2.108.1 CodeBuddy/2.108.1\",\n \"X-Product\": \"SaaS\",\n \"X-IDE-Type\": \"CLI\",\n \"X-IDE-Name\": \"CLI\",\n \"x-requested-with\": \"XMLHttpRequest\",\n \"x-codebuddy-request\": \"1\",\n },\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n },\n // Quota endpoint differs from the chat gateway: POST returns nested Tencent\n // billing payload (data.Response.Data.Accounts[]). See services/usage/codebuddy-cn.js.\n usage: {\n url: \"https://copilot.tencent.com/v2/billing/meter/get-user-resource\",\n },\n },\n models: [\n { id: \"glm-5.2\", name: \"GLM-5.2\" },\n { id: \"glm-5.1\", name: \"GLM-5.1\" },\n { id: \"glm-5.0\", name: \"GLM-5.0\" },\n { id: \"glm-5.0-turbo\", name: \"GLM-5.0-Turbo\" },\n { id: \"glm-5v-turbo\", name: \"GLM-5v-Turbo\" },\n { id: \"glm-4.7\", name: \"GLM-4.7\" },\n { id: \"minimax-m3\", name: \"MiniMax-M3\" },\n { id: \"minimax-m2.7\", name: \"MiniMax-M2.7\" },\n { id: \"kimi-k2.7\", name: \"Kimi-K2.7-Code\" },\n { id: \"kimi-k2.6\", name: \"Kimi-K2.6\" },\n { id: \"kimi-k2.5\", name: \"Kimi-K2.5\" },\n { id: \"hy3-preview\", name: \"Hy3 Preview\" },\n { id: \"deepseek-v4-pro\", name: \"DeepSeek-V4-Pro\" },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek-V4-Flash\" },\n { id: \"deepseek-v3-2-volc\", name: \"DeepSeek-V3.2\" },\n ],\n oauth: {\n baseUrl: \"https://copilot.tencent.com\",\n stateUrl: \"https://copilot.tencent.com/v2/plugin/auth/state\",\n tokenUrl: \"https://copilot.tencent.com/v2/plugin/auth/token\",\n refreshUrl: \"https://copilot.tencent.com/v2/plugin/auth/token/refresh\",\n userAgent: \"CLI/2.63.2 CodeBuddy/2.63.2\",\n platform: \"CLI\",\n pollInterval: 5000,\n },\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","alias","uiAlias","hidden","priority","display","name","icon","color","website","notice","signupUrl","category","authModes","hasOAuth","transport","baseUrl","forceStream","thinkingFormat","headers","auth","combined","header","scheme","usage","url","models","oauth","stateUrl","tokenUrl","refreshUrl","userAgent","platform","pollInterval","features","usageApikey"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJ,2EAA2E;IAC3E,yEAAyE;IACzEC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACVC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;QAAS;KAAS;IAC9BC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACb,4EAA4E;QAC5E,iFAAiF;QACjF,0EAA0E;QAC1EC,gBAAgB;QAChBC,SAAS;YACP,cAAc;YACd,aAAa;YACb,cAAc;YACd,cAAc;YACd,oBAAoB;YACpB,uBAAuB;QACzB;QACAC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;QACA,4EAA4E;QAC5E,uFAAuF;QACvFC,OAAO;YACLC,KAAK;QACP;IACF;IACAC,QAAQ;QACN;YAAE1B,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAcM,MAAM;QAAa;QACvC;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAaM,MAAM;QAAiB;QAC1C;YAAEN,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAAeM,MAAM;QAAc;QACzC;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAqBM,MAAM;QAAoB;QACrD;YAAEN,IAAI;YAAsBM,MAAM;QAAgB;KACnD;IACDqB,OAAO;QACLX,SAAS;QACTY,UAAU;QACVC,UAAU;QACVC,YAAY;QACZC,WAAW;QACXC,UAAU;QACVC,cAAc;IAChB;IACAC,UAAU;QACRV,OAAO;QACPW,aAAa;IACf;AACF"}},
+ {"offset": {"line": 3290, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/codebuddy-intl.js"],"sourcesContent":["// CodeBuddy international (codebuddy.ai) — mirrors codebuddy-cn registry shape,\n// swapping the Tencent CN domain for the .ai endpoint set. All OAuth/plugin URLs\n// use the /v2/plugin prefix with platform=ide (CN uses platform=CLI).\nexport default {\n id: \"codebuddy-intl\",\n alias: \"cbai\",\n uiAlias: \"cbai\",\n hidden: false,\n priority: 90,\n display: {\n name: \"CodeBuddy\",\n icon: \"smart_toy\",\n color: \"#006EFF\",\n website: \"https://www.codebuddy.ai\",\n notice: {\n signupUrl: \"https://www.codebuddy.ai\",\n },\n },\n category: \"oauth\",\n authModes: [\"oauth\", \"apikey\"],\n hasOAuth: true,\n transport: {\n // Chat gateway is OpenAI-compatible SSE (same /v2/chat/completions path as CN).\n baseUrl: \"https://www.codebuddy.ai/v2/chat/completions\",\n forceStream: true,\n // CodeBuddy intl speaks the same unified OpenAI reasoning_effort shape as CN.\n thinkingFormat: \"openai\",\n headers: {\n \"User-Agent\": \"IDE/2.108.1 CodeBuddy/2.108.1\",\n \"X-Product\": \"SaaS\",\n \"X-IDE-Type\": \"IDE\",\n \"X-IDE-Name\": \"IDE\",\n \"x-requested-with\": \"XMLHttpRequest\",\n \"x-codebuddy-request\": \"1\",\n },\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n },\n // Intl billing endpoint mirrors CN shape (data.Response.Data.Accounts[]).\n usage: {\n url: \"https://www.codebuddy.ai/v2/billing/meter/get-user-resource\",\n },\n },\n // Same model lineup exposed by the CN gateway — intl backend is the same catalog.\n models: [\n { id: \"glm-5.2\", name: \"GLM-5.2\" },\n { id: \"glm-5.1\", name: \"GLM-5.1\" },\n { id: \"glm-5.0\", name: \"GLM-5.0\" },\n { id: \"glm-5.0-turbo\", name: \"GLM-5.0-Turbo\" },\n { id: \"glm-5v-turbo\", name: \"GLM-5v-Turbo\" },\n { id: \"glm-4.7\", name: \"GLM-4.7\" },\n { id: \"minimax-m3\", name: \"MiniMax-M3\" },\n { id: \"minimax-m2.7\", name: \"MiniMax-M2.7\" },\n { id: \"kimi-k2.7\", name: \"Kimi-K2.7-Code\" },\n { id: \"kimi-k2.6\", name: \"Kimi-K2.6\" },\n { id: \"kimi-k2.5\", name: \"Kimi-K2.5\" },\n { id: \"hy3-preview\", name: \"Hy3 Preview\" },\n { id: \"deepseek-v4-pro\", name: \"DeepSeek-V4-Pro\" },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek-V4-Flash\" },\n { id: \"deepseek-v3-2-volc\", name: \"DeepSeek-V3.2\" },\n ],\n oauth: {\n baseUrl: \"https://www.codebuddy.ai\",\n stateUrl: \"https://www.codebuddy.ai/v2/plugin/auth/state\",\n tokenUrl: \"https://www.codebuddy.ai/v2/plugin/auth/token\",\n refreshUrl: \"https://www.codebuddy.ai/v2/plugin/auth/token/refresh\",\n userAgent: \"IDE/2.63.2 CodeBuddy/2.63.2\",\n platform: \"ide\",\n pollInterval: 5000,\n },\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","alias","uiAlias","hidden","priority","display","name","icon","color","website","notice","signupUrl","category","authModes","hasOAuth","transport","baseUrl","forceStream","thinkingFormat","headers","auth","combined","header","scheme","usage","url","models","oauth","stateUrl","tokenUrl","refreshUrl","userAgent","platform","pollInterval","features","usageApikey"],"mappings":"AAAA,gFAAgF;AAChF,iFAAiF;AACjF,sEAAsE;;;;;uCACvD;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACVC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;QAAS;KAAS;IAC9BC,UAAU;IACVC,WAAW;QACT,gFAAgF;QAChFC,SAAS;QACTC,aAAa;QACb,8EAA8E;QAC9EC,gBAAgB;QAChBC,SAAS;YACP,cAAc;YACd,aAAa;YACb,cAAc;YACd,cAAc;YACd,oBAAoB;YACpB,uBAAuB;QACzB;QACAC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;QACA,0EAA0E;QAC1EC,OAAO;YACLC,KAAK;QACP;IACF;IACA,kFAAkF;IAClFC,QAAQ;QACN;YAAE1B,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAcM,MAAM;QAAa;QACvC;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAaM,MAAM;QAAiB;QAC1C;YAAEN,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAAeM,MAAM;QAAc;QACzC;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAqBM,MAAM;QAAoB;QACrD;YAAEN,IAAI;YAAsBM,MAAM;QAAgB;KACnD;IACDqB,OAAO;QACLX,SAAS;QACTY,UAAU;QACVC,UAAU;QACVC,YAAY;QACZC,WAAW;QACXC,UAAU;QACVC,cAAc;IAChB;IACAC,UAAU;QACRV,OAAO;QACPW,aAAa;IACf;AACF"}},
+ {"offset": {"line": 3423, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/codex.js"],"sourcesContent":["import { withCodexReviewModels } from \"../models/helpers.js\";\n\nexport default {\n id: \"codex\",\n priority: 30,\n alias: \"cx\",\n uiAlias: \"cx\",\n display: {\n name: \"OpenAI Codex\",\n icon: \"code\",\n color: \"#3B82F6\",\n website: \"https://chatgpt.com/codex\",\n notice: {\n signupUrl: \"https://chatgpt.com/codex\",\n },\n deprecated: true,\n deprecationNotice: \"RISK_NOTICE\",\n kindNotice: {\n image: \"Requires a ChatGPT Plus (or higher) account. Free accounts are not supported for image generation.\",\n },\n },\n category: \"oauth\",\n thinkingConfig: {\n options: [\n \"auto\",\n \"none\",\n \"low\",\n \"medium\",\n \"high\",\n ],\n defaultMode: \"auto\",\n },\n transport: {\n baseUrl: \"https://chatgpt.com/backend-api/codex/responses\",\n format: \"openai-responses\",\n forceStream: true,\n headers: {\n originator: \"codex_cli_rs\",\n \"User-Agent\": \"codex_cli_rs/0.136.0\",\n },\n usage: {\n url: \"https://chatgpt.com/backend-api/wham/usage\",\n resetCreditsUrl: \"https://chatgpt.com/backend-api/wham/rate-limit-reset-credits\",\n resetCreditsConsumeUrl: \"https://chatgpt.com/backend-api/wham/rate-limit-reset-credits/consume\",\n },\n },\n models: [\n { id: \"gpt-5.6-sol\", name: \"GPT 5.6 Sol\" },\n { id: \"gpt-5.6-sol-review\", name: \"GPT 5.6 Sol Review\", upstreamModelId: \"gpt-5.6-sol\", quotaFamily: \"review\" },\n { id: \"gpt-5.6-terra\", name: \"GPT 5.6 Terra\" },\n { id: \"gpt-5.6-terra-review\", name: \"GPT 5.6 Terra Review\", upstreamModelId: \"gpt-5.6-terra\", quotaFamily: \"review\" },\n { id: \"gpt-5.6-luna\", name: \"GPT 5.6 Luna\" },\n { id: \"gpt-5.6-luna-review\", name: \"GPT 5.6 Luna Review\", upstreamModelId: \"gpt-5.6-luna\", quotaFamily: \"review\" },\n { id: \"gpt-5.5\", name: \"GPT 5.5\" },\n { id: \"gpt-5.5-review\", name: \"GPT 5.5 Review\", upstreamModelId: \"gpt-5.5\", quotaFamily: \"review\" },\n { id: \"gpt-5.4\", name: \"GPT 5.4\" },\n { id: \"gpt-5.4-review\", name: \"GPT 5.4 Review\", upstreamModelId: \"gpt-5.4\", quotaFamily: \"review\" },\n { id: \"gpt-5.4-mini\", name: \"GPT 5.4 Mini\" },\n { id: \"gpt-5.4-mini-review\", name: \"GPT 5.4 Mini Review\", upstreamModelId: \"gpt-5.4-mini\", quotaFamily: \"review\" },\n { id: \"gpt-5.3-codex-spark\", name: \"GPT 5.3 Codex Spark\" },\n { id: \"gpt-5.3-codex-spark-review\", name: \"GPT 5.3 Codex Spark Review\", upstreamModelId: \"gpt-5.3-codex-spark\", quotaFamily: \"review\" },\n { id: \"gpt-5.5-image\", name: \"GPT 5.5 Image\", capabilities: [\"text2img\",\"edit\"], params: [\"size\",\"quality\",\"background\",\"image_detail\",\"output_format\"], kind: \"image\" },\n { id: \"gpt-5.4-image\", name: \"GPT 5.4 Image\", capabilities: [\"text2img\",\"edit\"], params: [\"size\",\"quality\",\"background\",\"image_detail\",\"output_format\"], kind: \"image\" },\n { id: \"gpt-5.3-image\", name: \"GPT 5.3 Image\", capabilities: [\"text2img\",\"edit\"], params: [\"size\",\"quality\",\"background\",\"image_detail\",\"output_format\"], kind: \"image\" },\n ],\n serviceKinds: [\"llm\",\"image\"],\n oauth: {\n clientId: \"app_EMoamEEZ73f0CkXaXp7hrann\",\n authorizeUrl: \"https://auth.openai.com/oauth/authorize\",\n tokenUrl: \"https://auth.openai.com/oauth/token\",\n scope: \"openid profile email offline_access\",\n codeChallengeMethod: \"S256\",\n fixedPort: 1455,\n callbackPath: \"/auth/callback\",\n extraParams: {\n id_token_add_organizations: \"true\",\n codex_cli_simplified_flow: \"true\",\n originator: \"codex_cli_rs\",\n },\n refreshLeadMs: 432000000,\n refresh: {\n encoding: \"form\",\n scope: \"openid profile email offline_access\",\n },\n maxRefreshAgeMs: 691200000,\n trackRefreshAt: true,\n },\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","deprecated","deprecationNotice","kindNotice","image","category","thinkingConfig","options","defaultMode","transport","baseUrl","format","forceStream","headers","originator","usage","url","resetCreditsUrl","resetCreditsConsumeUrl","models","upstreamModelId","quotaFamily","capabilities","params","kind","serviceKinds","oauth","clientId","authorizeUrl","tokenUrl","scope","codeChallengeMethod","fixedPort","callbackPath","extraParams","id_token_add_organizations","codex_cli_simplified_flow","refreshLeadMs","refresh","encoding","maxRefreshAgeMs","trackRefreshAt","features"],"mappings":";;;;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;QACAC,YAAY;QACZC,mBAAmB;QACnBC,YAAY;YACVC,OAAO;QACT;IACF;IACAC,UAAU;IACVC,gBAAgB;QACdC,SAAS;YACP;YACA;YACA;YACA;YACA;SACD;QACDC,aAAa;IACf;IACAC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,aAAa;QACbC,SAAS;YACPC,YAAY;YACZ,cAAc;QAChB;QACAC,OAAO;YACLC,KAAK;YACLC,iBAAiB;YACjBC,wBAAwB;QAC1B;IACF;IACAC,QAAQ;QACN;YAAE7B,IAAI;YAAeK,MAAM;QAAc;QACzC;YAAEL,IAAI;YAAsBK,MAAM;YAAsByB,iBAAiB;YAAeC,aAAa;QAAS;QAC9G;YAAE/B,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAwBK,MAAM;YAAwByB,iBAAiB;YAAiBC,aAAa;QAAS;QACpH;YAAE/B,IAAI;YAAgBK,MAAM;QAAe;QAC3C;YAAEL,IAAI;YAAuBK,MAAM;YAAuByB,iBAAiB;YAAgBC,aAAa;QAAS;QACjH;YAAE/B,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAkBK,MAAM;YAAkByB,iBAAiB;YAAWC,aAAa;QAAS;QAClG;YAAE/B,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAkBK,MAAM;YAAkByB,iBAAiB;YAAWC,aAAa;QAAS;QAClG;YAAE/B,IAAI;YAAgBK,MAAM;QAAe;QAC3C;YAAEL,IAAI;YAAuBK,MAAM;YAAuByB,iBAAiB;YAAgBC,aAAa;QAAS;QACjH;YAAE/B,IAAI;YAAuBK,MAAM;QAAsB;QACzD;YAAEL,IAAI;YAA8BK,MAAM;YAA8ByB,iBAAiB;YAAuBC,aAAa;QAAS;QACtI;YAAE/B,IAAI;YAAiBK,MAAM;YAAiB2B,cAAc;gBAAC;gBAAW;aAAO;YAAEC,QAAQ;gBAAC;gBAAO;gBAAU;gBAAa;gBAAe;aAAgB;YAAEC,MAAM;QAAQ;QACvK;YAAElC,IAAI;YAAiBK,MAAM;YAAiB2B,cAAc;gBAAC;gBAAW;aAAO;YAAEC,QAAQ;gBAAC;gBAAO;gBAAU;gBAAa;gBAAe;aAAgB;YAAEC,MAAM;QAAQ;QACvK;YAAElC,IAAI;YAAiBK,MAAM;YAAiB2B,cAAc;gBAAC;gBAAW;aAAO;YAAEC,QAAQ;gBAAC;gBAAO;gBAAU;gBAAa;gBAAe;aAAgB;YAAEC,MAAM;QAAQ;KACxK;IACDC,cAAc;QAAC;QAAM;KAAQ;IAC7BC,OAAO;QACLC,UAAU;QACVC,cAAc;QACdC,UAAU;QACVC,OAAO;QACPC,qBAAqB;QACrBC,WAAW;QACXC,cAAc;QACdC,aAAa;YACXC,4BAA4B;YAC5BC,2BAA2B;YAC3BtB,YAAY;QACd;QACAuB,eAAe;QACfC,SAAS;YACPC,UAAU;YACVT,OAAO;QACT;QACAU,iBAAiB;QACjBC,gBAAgB;IAClB;IACAC,UAAU;QACR3B,OAAO;IACT;AACF"}},
+ {"offset": {"line": 3625, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/cohere.js"],"sourcesContent":["export default {\n id: \"cohere\",\n priority: 90,\n alias: \"cohere\",\n display: {\n name: \"Cohere\",\n icon: \"hub\",\n color: \"#39594D\",\n textIcon: \"CO\",\n website: \"https://cohere.com\",\n notice: {\n apiKeyUrl: \"https://dashboard.cohere.com/api-keys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.cohere.ai/v1/chat/completions\",\n validateUrl: \"https://api.cohere.ai/v1/models\",\n },\n models: [\n { id: \"command-r-plus-08-2024\", name: \"Command R+ (Aug 2024)\" },\n { id: \"command-r-08-2024\", name: \"Command R (Aug 2024)\" },\n { id: \"command-a-03-2025\", name: \"Command A (Mar 2025)\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEf,IAAI;YAA0BI,MAAM;QAAwB;QAC9D;YAAEJ,IAAI;YAAqBI,MAAM;QAAuB;QACxD;YAAEJ,IAAI;YAAqBI,MAAM;QAAuB;KACzD;AACH"}},
+ {"offset": {"line": 3667, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/comfyui.js"],"sourcesContent":["export default {\n id: \"comfyui\",\n priority: 120,\n alias: \"comfyui\",\n display: {\n name: \"ComfyUI\",\n icon: \"account_tree\",\n color: \"#4CAF50\",\n textIcon: \"CF\",\n website: \"https://github.com/comfyanonymous/ComfyUI\",\n },\n category: \"apikey\",\n transport: null,\n models: [\n { id: \"flux-dev\", name: \"FLUX Dev\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"sdxl\", name: \"SDXL\", params: [\"n\",\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"http://localhost:8188\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","category","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEX,IAAI;YAAYI,MAAM;YAAYQ,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACxE;YAAEb,IAAI;YAAQI,MAAM;YAAQQ,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;KACjE;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAwB;AAClD"}},
+ {"offset": {"line": 3715, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/commandcode.js"],"sourcesContent":["export default {\n id: \"commandcode\",\n priority: 100,\n alias: \"commandcode\",\n aliases: [\n \"cmc\",\n ],\n uiAlias: \"cmc\",\n display: {\n name: \"Command Code\",\n icon: \"smart_toy\",\n color: \"#000000\",\n textIcon: \"CC\",\n website: \"https://commandcode.ai\",\n notice: {\n text: \"Use your CommandCode CLI API key (starts with user_...) from ~/.commandcode/auth.json or commandcode.ai/studio.\",\n apiKeyUrl: \"https://commandcode.ai/studio\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.commandcode.ai/alpha/generate\",\n format: \"commandcode\",\n forceStream: true,\n headers: {\n \"x-command-code-version\": \"1.10.0\",\n \"x-cli-environment\": \"cli\",\n \"User-Agent\": \"cli\",\n },\n // Quota/billing endpoints (same alpha API the official CLI /usage calls).\n // whoami resolves orgId; credits+subscription+usage/summary then report the\n // 5-hour/weekly windows, plan, and period credits. See services/usage/commandcode.js.\n usage: {\n baseUrl: \"https://api.commandcode.ai\",\n whoamiUrl: \"/alpha/whoami\",\n creditsUrl: \"/alpha/billing/credits\",\n subscriptionsUrl: \"/alpha/billing/subscriptions\",\n summaryUrl: \"/alpha/usage/summary\",\n },\n },\n features: {\n usage: true,\n usageApikey: true,\n },\n models: [\n { id: \"deepseek/deepseek-v4-pro\", name: \"DeepSeek V4 Pro\" },\n { id: \"deepseek/deepseek-v4-flash\", name: \"DeepSeek V4 Flash\" },\n { id: \"moonshotai/Kimi-K2.6\", name: \"Kimi K2.6\" },\n { id: \"moonshotai/Kimi-K2.5\", name: \"Kimi K2.5\" },\n { id: \"zai-org/GLM-5.1\", name: \"GLM 5.1\" },\n { id: \"zai-org/GLM-5\", name: \"GLM 5\" },\n { id: \"MiniMaxAI/MiniMax-M2.7\", name: \"MiniMax M2.7\" },\n { id: \"MiniMaxAI/MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"Qwen/Qwen3.6-Max-Preview\", name: \"Qwen 3.6 Max Preview\" },\n { id: \"Qwen/Qwen3.6-Plus\", name: \"Qwen 3.6 Plus\" },\n { id: \"stepfun/Step-3.5-Flash\", name: \"Step 3.5 Flash\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","format","forceStream","headers","usage","whoamiUrl","creditsUrl","subscriptionsUrl","summaryUrl","features","usageApikey","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,aAAa;QACbC,SAAS;YACP,0BAA0B;YAC1B,qBAAqB;YACrB,cAAc;QAChB;QACA,0EAA0E;QAC1E,4EAA4E;QAC5E,sFAAsF;QACtFC,OAAO;YACLJ,SAAS;YACTK,WAAW;YACXC,YAAY;YACZC,kBAAkB;YAClBC,YAAY;QACd;IACF;IACAC,UAAU;QACRL,OAAO;QACPM,aAAa;IACf;IACAC,QAAQ;QACN;YAAE3B,IAAI;YAA4BM,MAAM;QAAkB;QAC1D;YAAEN,IAAI;YAA8BM,MAAM;QAAoB;QAC9D;YAAEN,IAAI;YAAwBM,MAAM;QAAY;QAChD;YAAEN,IAAI;YAAwBM,MAAM;QAAY;QAChD;YAAEN,IAAI;YAAmBM,MAAM;QAAU;QACzC;YAAEN,IAAI;YAAiBM,MAAM;QAAQ;QACrC;YAAEN,IAAI;YAA0BM,MAAM;QAAe;QACrD;YAAEN,IAAI;YAA0BM,MAAM;QAAe;QACrD;YAAEN,IAAI;YAA4BM,MAAM;QAAuB;QAC/D;YAAEN,IAAI;YAAqBM,MAAM;QAAgB;QACjD;YAAEN,IAAI;YAA0BM,MAAM;QAAiB;KACxD;AACH"}},
+ {"offset": {"line": 3814, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/coqui.js"],"sourcesContent":["export default {\n id: \"coqui\",\n alias: \"coqui\",\n display: {\n name: \"Coqui TTS\",\n icon: \"record_voice_over\",\n color: \"#10B981\",\n textIcon: \"CQ\",\n website: \"https://github.com/coqui-ai/TTS\"\n },\n category: \"freeTier\",\n authType: \"none\",\n serviceKinds: [\n \"tts\"\n ],\n noAuth: true,\n ttsConfig: {\n baseUrl: \"http://localhost:5002/api/tts\",\n authType: \"none\",\n authHeader: \"none\",\n format: \"coqui\",\n models: [\n {\n id: \"tts_models/en/ljspeech/tacotron2-DDC\",\n name: \"Tacotron2 DDC (LJSpeech)\"\n }\n ]\n },\n hidden: true\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","category","authType","serviceKinds","noAuth","ttsConfig","baseUrl","authHeader","format","models","hidden"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTJ,UAAU;QACVK,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACEhB,IAAI;gBACJG,MAAM;YACR;SACD;IACH;IACAc,QAAQ;AACV"}},
+ {"offset": {"line": 3852, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/cursor.js"],"sourcesContent":["export default {\n id: \"cursor\",\n priority: 50,\n alias: \"cu\",\n uiAlias: \"cu\",\n display: {\n name: \"Cursor IDE\",\n icon: \"edit_note\",\n color: \"#00D4AA\",\n website: \"https://cursor.com\",\n notice: {\n signupUrl: \"https://cursor.com\",\n },\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://api2.cursor.sh\",\n chatPath: \"/aiserver.v1.ChatService/StreamUnifiedChatWithTools\",\n format: \"cursor\",\n headers: {\n \"connect-accept-encoding\": \"gzip\",\n \"connect-protocol-version\": \"1\",\n \"Content-Type\": \"application/connect+proto\",\n \"User-Agent\": \"connect-es/1.6.1\",\n },\n clientVersion: \"3.12.17\",\n },\n models: [\n { id: \"default\", name: \"Auto (Server Picks)\" },\n { id: \"claude-4.5-opus-high-thinking\", name: \"Claude 4.5 Opus High Thinking\" },\n { id: \"claude-4.5-opus-high\", name: \"Claude 4.5 Opus High\" },\n { id: \"claude-4.5-sonnet-thinking\", name: \"Claude 4.5 Sonnet Thinking\" },\n { id: \"claude-4.5-sonnet\", name: \"Claude 4.5 Sonnet\" },\n { id: \"claude-4.5-haiku\", name: \"Claude 4.5 Haiku\" },\n { id: \"claude-4.5-opus\", name: \"Claude 4.5 Opus\" },\n { id: \"gpt-5.2-codex\", name: \"GPT 5.2 Codex\" },\n { id: \"claude-4.6-opus-max\", name: \"Claude 4.6 Opus Max\" },\n { id: \"claude-4.6-sonnet-medium-thinking\", name: \"Claude 4.6 Sonnet Medium Thinking\" },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"gemini-3-flash-preview\", name: \"Gemini 3 Flash Preview\" },\n { id: \"gpt-5.2\", name: \"GPT 5.2\" },\n { id: \"gpt-5.3-codex\", name: \"GPT 5.3 Codex\" },\n ],\n oauth: {\n apiEndpoint: \"https://api2.cursor.sh\",\n chatEndpoint: \"/aiserver.v1.ChatService/StreamUnifiedChatWithTools\",\n modelsEndpoint: \"/agent.v1.AgentService/GetUsableModels\",\n api3Endpoint: \"https://api3.cursor.sh\",\n agentEndpoint: \"https://agent.api5.cursor.sh\",\n agentNonPrivacyEndpoint: \"https://agentn.api5.cursor.sh\",\n clientVersion: \"3.12.17\",\n clientType: \"ide\",\n dbKeys: {\n accessToken: \"cursorAuth/accessToken\",\n machineId: \"storage.serviceMachineId\",\n },\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","category","transport","baseUrl","chatPath","format","headers","clientVersion","models","oauth","apiEndpoint","chatEndpoint","modelsEndpoint","api3Endpoint","agentEndpoint","agentNonPrivacyEndpoint","clientType","dbKeys","accessToken","machineId"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,UAAU;QACVC,QAAQ;QACRC,SAAS;YACP,2BAA2B;YAC3B,4BAA4B;YAC5B,gBAAgB;YAChB,cAAc;QAChB;QACAC,eAAe;IACjB;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAWK,MAAM;QAAsB;QAC7C;YAAEL,IAAI;YAAiCK,MAAM;QAAgC;QAC7E;YAAEL,IAAI;YAAwBK,MAAM;QAAuB;QAC3D;YAAEL,IAAI;YAA8BK,MAAM;QAA6B;QACvE;YAAEL,IAAI;YAAqBK,MAAM;QAAoB;QACrD;YAAEL,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAuBK,MAAM;QAAsB;QACzD;YAAEL,IAAI;YAAqCK,MAAM;QAAoC;QACrF;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAA0BK,MAAM;QAAyB;QAC/D;YAAEL,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;KAC9C;IACDc,OAAO;QACLC,aAAa;QACbC,cAAc;QACdC,gBAAgB;QAChBC,cAAc;QACdC,eAAe;QACfC,yBAAyB;QACzBR,eAAe;QACfS,YAAY;QACZC,QAAQ;YACNC,aAAa;YACbC,WAAW;QACb;IACF;AACF"}},
+ {"offset": {"line": 3960, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/deepgram.js"],"sourcesContent":["export default {\n id: \"deepgram\",\n priority: 20,\n alias: \"deepgram\",\n aliases: [\n \"dg\",\n ],\n uiAlias: \"dg\",\n display: {\n name: \"Deepgram\",\n icon: \"mic\",\n color: \"#13EF93\",\n textIcon: \"DG\",\n website: \"https://deepgram.com\",\n notice: {\n text: \"$200 free credit on signup (no card required). Aura-1: $0.015/1k chars, Aura-2: $0.030/1k chars (Pay-As-You-Go).\",\n apiKeyUrl: \"https://console.deepgram.com/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.deepgram.com/v1/listen\",\n },\n models: [\n { id: \"nova-3\", name: \"Nova 3\", params: [\"language\"], kind: \"stt\" },\n { id: \"nova-2\", name: \"Nova 2\", params: [\"language\"], kind: \"stt\" },\n { id: \"whisper-large\", name: \"Whisper Large\", params: [\"language\"], kind: \"stt\" },\n { id: \"nova\", name: \"Nova\", kind: \"stt\" },\n ],\n serviceKinds: [\"stt\"],\n sttConfig: { baseUrl: \"https://api.deepgram.com/v1/listen\", authType: \"apikey\", authHeader: \"token\", format: \"deepgram\" },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","transport","baseUrl","models","params","kind","serviceKinds","sttConfig","authHeader","format"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;IACX;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAUM,MAAM;YAAUa,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;QAClE;YAAEpB,IAAI;YAAUM,MAAM;YAAUa,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;QAClE;YAAEpB,IAAI;YAAiBM,MAAM;YAAiBa,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;QAChF;YAAEpB,IAAI;YAAQM,MAAM;YAAQc,MAAM;QAAM;KACzC;IACDC,cAAc;QAAC;KAAM;IACrBC,WAAW;QAAEL,SAAS;QAAsCF,UAAU;QAAUQ,YAAY;QAASC,QAAQ;IAAW;AAC1H"}},
+ {"offset": {"line": 4033, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/deepseek.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"deepseek\",\n priority: 110,\n alias: \"deepseek\",\n aliases: [\n \"ds\",\n ],\n uiAlias: \"ds\",\n display: {\n name: \"DeepSeek\",\n icon: \"bolt\",\n color: \"#4D6BFE\",\n textIcon: \"DS\",\n website: \"https://deepseek.com\",\n notice: {\n apiKeyUrl: \"https://platform.deepseek.com/api_keys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.deepseek.com/chat/completions\",\n validateUrl: \"https://api.deepseek.com/models\",\n reasoningInject: {\n scope: \"all\",\n },\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n transports: [\n {\n format: \"openai\",\n baseUrl: \"https://api.deepseek.com/chat/completions\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" },\n },\n {\n format: \"claude\",\n baseUrl: \"https://api.deepseek.com/anthropic/v1/messages\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\" },\n },\n ],\n models: [\n { id: \"deepseek-v4-pro\", name: \"DeepSeek V4 Pro\" },\n { id: \"deepseek-v4-pro-max\", name: \"DeepSeek V4 Pro Max\", upstreamModelId: \"deepseek-v4-pro\" },\n { id: \"deepseek-v4-pro-none\", name: \"DeepSeek V4 Pro No Thinking\", upstreamModelId: \"deepseek-v4-pro\" },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek V4 Flash\" },\n { id: \"deepseek-chat\", name: \"DeepSeek V3.2 Chat\" },\n { id: \"deepseek-reasoner\", name: \"DeepSeek V3.2 Reasoner\" },\n ],\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl","reasoningInject","scope","transports","format","auth","combined","header","scheme","headers","models","upstreamModelId","features","usage","usageApikey"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,iBAAiB;YACfC,OAAO;QACT;IACF;IACA,uFAAuF;IACvFC,YAAY;QACV;YACEC,QAAQ;YACRL,SAAS;YACTM,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QACpE;QACA;YACEJ,QAAQ;YACRL,SAAS;YACTU,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCJ,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;YAAM;QAC7D;KACD;IACDE,QAAQ;QACN;YAAE1B,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAuBM,MAAM;YAAuBqB,iBAAiB;QAAkB;QAC7F;YAAE3B,IAAI;YAAwBM,MAAM;YAA+BqB,iBAAiB;QAAkB;QACtG;YAAE3B,IAAI;YAAqBM,MAAM;QAAoB;QACrD;YAAEN,IAAI;YAAiBM,MAAM;QAAqB;QAClD;YAAEN,IAAI;YAAqBM,MAAM;QAAyB;KAC3D;IACDsB,UAAU;QACRC,OAAO;QACPC,aAAa;IACf;AACF"}},
+ {"offset": {"line": 4126, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/edge-tts.js"],"sourcesContent":["export default {\n id: \"edge-tts\",\n alias: \"edge-tts\",\n display: {\n name: \"Edge TTS\",\n icon: \"record_voice_over\",\n color: \"#0078D4\",\n textIcon: \"ET\"\n },\n category: \"freeTier\",\n authType: \"none\",\n serviceKinds: [\n \"tts\"\n ],\n mediaPriority: 5,\n noAuth: true,\n ttsConfig: {\n baseUrl: \"edge-tts\",\n authType: \"none\",\n authHeader: \"none\",\n format: \"edge-tts\",\n models: []\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","category","authType","serviceKinds","mediaPriority","noAuth","ttsConfig","baseUrl","authHeader","format","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;IACZ;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,eAAe;IACfC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTL,UAAU;QACVM,YAAY;QACZC,QAAQ;QACRC,QAAQ,EAAE;IACZ;AACF"}},
+ {"offset": {"line": 4158, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/elevenlabs.js"],"sourcesContent":["export default {\n id: \"elevenlabs\",\n alias: \"el\",\n display: {\n name: \"ElevenLabs\",\n icon: \"record_voice_over\",\n color: \"#6C47FF\",\n textIcon: \"EL\",\n website: \"https://elevenlabs.io\",\n notice: {\n apiKeyUrl: \"https://elevenlabs.io/app/settings/api-keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"tts\"\n ],\n ttsConfig: {\n baseUrl: \"https://api.elevenlabs.io/v1/text-to-speech\",\n authType: \"apikey\",\n authHeader: \"xi-api-key\",\n format: \"elevenlabs\",\n models: [\n {\n id: \"eleven_multilingual_v2\",\n name: \"Eleven Multilingual v2\"\n },\n {\n id: \"eleven_turbo_v2_5\",\n name: \"Eleven Turbo v2.5\"\n }\n ]\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","ttsConfig","baseUrl","authHeader","format","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,WAAW;QACTC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACEjB,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;SACD;IACH;AACF"}},
+ {"offset": {"line": 4201, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/exa.js"],"sourcesContent":["export default {\n id: \"exa\",\n alias: \"exa\",\n display: {\n name: \"Exa\",\n icon: \"manage_search\",\n color: \"#2563EB\",\n textIcon: \"EX\",\n website: \"https://exa.ai\",\n notice: {\n apiKeyUrl: \"https://dashboard.exa.ai/api-keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\",\n \"webFetch\"\n ],\n searchConfig: {\n baseUrl: \"https://api.exa.ai/search\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"x-api-key\",\n costPerQuery: 0.007,\n freeMonthlyQuota: 1000,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 100,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n },\n fetchConfig: {\n baseUrl: \"https://api.exa.ai/contents\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"x-api-key\",\n costPerQuery: 0.001,\n freeMonthlyQuota: 1000,\n formats: [\n \"text\",\n \"markdown\"\n ],\n maxCharacters: 100000,\n timeoutMs: 15000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs","fetchConfig","formats","maxCharacters"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;QACA;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;IACAC,aAAa;QACXV,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBO,SAAS;YACP;YACA;SACD;QACDC,eAAe;QACfJ,WAAW;IACb;AACF"}},
+ {"offset": {"line": 4259, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/fal-ai.js"],"sourcesContent":["export default {\n id: \"fal-ai\",\n priority: 90,\n hasFree: true,\n alias: \"fal-ai\",\n aliases: [\n \"fal\",\n ],\n uiAlias: \"fal\",\n display: {\n name: \"Fal.ai\",\n icon: \"image\",\n color: \"#2563EB\",\n textIcon: \"FL\",\n website: \"https://fal.ai\",\n notice: {\n apiKeyUrl: \"https://fal.ai/dashboard/keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: null,\n models: [\n { id: \"fal-ai/flux/schnell\", name: \"FLUX Schnell\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"fal-ai/flux/dev\", name: \"FLUX Dev\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"fal-ai/flux-pro/v1.1\", name: \"FLUX Pro v1.1\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"fal-ai/flux-pro/v1.1-ultra\", name: \"FLUX Pro v1.1 Ultra\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"fal-ai/recraft-v3\", name: \"Recraft V3\", params: [\"n\",\"size\",\"style\"], kind: \"image\" },\n { id: \"fal-ai/ideogram/v2\", name: \"Ideogram V2\", params: [\"n\",\"size\",\"style\"], kind: \"image\" },\n { id: \"fal-ai/stable-diffusion-v35-large\", name: \"SD 3.5 Large\", params: [\"n\",\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"https://queue.fal.run\" },\n};\n"],"names":["id","priority","hasFree","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEjB,IAAI;YAAuBO,MAAM;YAAgBW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACvF;YAAEnB,IAAI;YAAmBO,MAAM;YAAYW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QAC/E;YAAEnB,IAAI;YAAwBO,MAAM;YAAiBW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACzF;YAAEnB,IAAI;YAA8BO,MAAM;YAAuBW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACrG;YAAEnB,IAAI;YAAqBO,MAAM;YAAcW,QAAQ;gBAAC;gBAAI;gBAAO;aAAQ;YAAEC,MAAM;QAAQ;QAC3F;YAAEnB,IAAI;YAAsBO,MAAM;YAAeW,QAAQ;gBAAC;gBAAI;gBAAO;aAAQ;YAAEC,MAAM;QAAQ;QAC7F;YAAEnB,IAAI;YAAqCO,MAAM;YAAgBW,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;KACtG;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAwB;AAClD"}},
+ {"offset": {"line": 4363, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/featherless.js"],"sourcesContent":["export default {\n id: \"featherless\",\n priority: 65,\n alias: \"featherless\",\n aliases: [\n \"fl\",\n ],\n uiAlias: \"fl\",\n display: {\n name: \"Featherless\",\n icon: \"flutter_dash\",\n color: \"#111827\",\n textIcon: \"FL\",\n website: \"https://featherless.ai\",\n notice: {\n apiKeyUrl: \"https://featherless.ai/account/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.featherless.ai/v1/chat/completions\",\n validateUrl: \"https://api.featherless.ai/v1/models\",\n },\n models: [\n { id: \"deepseek-ai/DeepSeek-V4-Pro\", name: \"DeepSeek V4 Pro\" },\n { id: \"deepseek-ai/DeepSeek-V4-Flash\", name: \"DeepSeek V4 Flash\" },\n { id: \"zai-org/GLM-5.2\", name: \"GLM 5.2\" },\n { id: \"zai-org/GLM-5.1\", name: \"GLM 5.1\" },\n { id: \"moonshotai/Kimi-K2.7-Code\", name: \"Kimi K2.7 Code\" },\n { id: \"moonshotai/Kimi-K2.6\", name: \"Kimi K2.6\" },\n { id: \"moonshotai/Kimi-K2.5\", name: \"Kimi K2.5\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAA+BM,MAAM;QAAkB;QAC7D;YAAEN,IAAI;YAAiCM,MAAM;QAAoB;QACjE;YAAEN,IAAI;YAAmBM,MAAM;QAAU;QACzC;YAAEN,IAAI;YAAmBM,MAAM;QAAU;QACzC;YAAEN,IAAI;YAA6BM,MAAM;QAAiB;QAC1D;YAAEN,IAAI;YAAwBM,MAAM;QAAY;QAChD;YAAEN,IAAI;YAAwBM,MAAM;QAAY;KACjD;AACH"}},
+ {"offset": {"line": 4426, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/firecrawl.js"],"sourcesContent":["export default {\n id: \"firecrawl\",\n alias: \"firecrawl\",\n display: {\n name: \"Firecrawl\",\n icon: \"local_fire_department\",\n color: \"#F59E0B\",\n textIcon: \"FC\",\n website: \"https://firecrawl.dev\",\n notice: {\n apiKeyUrl: \"https://www.firecrawl.dev/app/api-keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webFetch\"\n ],\n fetchConfig: {\n baseUrl: \"https://api.firecrawl.dev/v1/scrape\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n costPerQuery: 0.002,\n freeMonthlyQuota: 500,\n formats: [\n \"markdown\",\n \"html\",\n \"text\"\n ],\n maxCharacters: 200000,\n timeoutMs: 30000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","fetchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","formats","maxCharacters","timeoutMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,aAAa;QACXC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,SAAS;YACP;YACA;YACA;SACD;QACDC,eAAe;QACfC,WAAW;IACb;AACF"}},
+ {"offset": {"line": 4468, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/fireworks.js"],"sourcesContent":["export default {\n id: \"fireworks\",\n priority: 50,\n alias: \"fireworks\",\n display: {\n name: \"Fireworks AI\",\n icon: \"local_fire_department\",\n color: \"#7B2EF2\",\n textIcon: \"FW\",\n website: \"https://fireworks.ai\",\n notice: {\n apiKeyUrl: \"https://fireworks.ai/account/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.fireworks.ai/inference/v1/chat/completions\",\n validateUrl: \"https://api.fireworks.ai/inference/v1/models\",\n },\n models: [\n { id: \"accounts/fireworks/models/deepseek-v3p1\", name: \"DeepSeek V3.1\" },\n { id: \"accounts/fireworks/models/llama-v3p3-70b-instruct\", name: \"Llama 3.3 70B\" },\n { id: \"accounts/fireworks/models/qwen3-235b-a22b\", name: \"Qwen3 235B\" },\n { id: \"nomic-ai/nomic-embed-text-v1.5\", name: \"Nomic Embed Text v1.5\", kind: \"embedding\" },\n ],\n serviceKinds: [\"llm\", \"embedding\"],\n embeddingConfig: { baseUrl: \"https://api.fireworks.ai/inference/v1/embeddings\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models","kind","serviceKinds","embeddingConfig"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAA2CI,MAAM;QAAgB;QACvE;YAAEJ,IAAI;YAAqDI,MAAM;QAAgB;QACjF;YAAEJ,IAAI;YAA6CI,MAAM;QAAa;QACtE;YAAEJ,IAAI;YAAkCI,MAAM;YAAyBa,MAAM;QAAY;KAC1F;IACDC,cAAc;QAAC;QAAO;KAAY;IAClCC,iBAAiB;QAAEL,SAAS;IAAmD;AACjF"}},
+ {"offset": {"line": 4523, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/fish-audio.js"],"sourcesContent":["// Fish Audio TTS — the model id travels in an HTTP `model` header rather than the\n// JSON body, and the voice is a reference_id (a cloned or preset voice model).\nexport default {\n id: \"fish-audio\",\n alias: \"fish\",\n display: {\n name: \"Fish Audio\",\n icon: \"record_voice_over\",\n color: \"#1E9BF0\",\n textIcon: \"FA\",\n website: \"https://fish.audio\",\n notice: {\n apiKeyUrl: \"https://fish.audio/app/api-keys/\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\"tts\"],\n ttsConfig: {\n baseUrl: \"https://api.fish.audio/v1/tts\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"fish-audio\",\n models: [\n { id: \"s2.1-pro-free\", name: \"S2.1 Pro Free\" },\n { id: \"s2.1-pro\", name: \"S2.1 Pro\" },\n { id: \"s2-pro\", name: \"S2 Pro\" },\n { id: \"s1\", name: \"S1\" },\n ],\n },\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","ttsConfig","baseUrl","authHeader","format","models"],"mappings":"AAAA,kFAAkF;AAClF,+EAA+E;;;;;uCAChE;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QAAC;KAAM;IACrBC,WAAW;QACTC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBAAEjB,IAAI;gBAAiBG,MAAM;YAAgB;YAC7C;gBAAEH,IAAI;gBAAYG,MAAM;YAAW;YACnC;gBAAEH,IAAI;gBAAUG,MAAM;YAAS;YAC/B;gBAAEH,IAAI;gBAAMG,MAAM;YAAK;SACxB;IACH;AACF"}},
+ {"offset": {"line": 4576, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/gemini-cli.js"],"sourcesContent":["import { GOOGLE_OAUTH_CLIENT } from \"../shared.js\";\n\nexport default {\n id: \"gemini-cli\",\n priority: 20,\n hasFree: true,\n alias: \"gc\",\n uiAlias: \"gc\",\n display: {\n name: \"Gemini CLI\",\n icon: \"terminal\",\n color: \"#4285F4\",\n website: \"https://github.com/google-gemini/gemini-cli\",\n notice: {\n signupUrl: \"https://github.com/google-gemini/gemini-cli\",\n },\n deprecated: true,\n deprecationNotice: \"RISK_NOTICE\",\n },\n category: \"free\",\n transport: {\n baseUrl: \"https://cloudcode-pa.googleapis.com/v1internal\",\n format: \"gemini-cli\",\n cliVersion: \"0.34.0\",\n apiClient: \"google-genai-sdk/1.41.0 gl-node/v22.19.0\",\n usage: {\n quotaUrl: \"https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuota\",\n loadCodeAssistUrl: \"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist\",\n },\n clientId: \"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com\",\n clientSecret: \"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\",\n },\n models: [\n { id: \"gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro Preview\" },\n { id: \"gemini-3-pro-preview\", name: \"Gemini 3 Pro Preview\" },\n { id: \"gemini-3-flash-preview\", name: \"Gemini 3 Flash Preview\" },\n { id: \"gemini-3.1-flash-lite-preview\", name: \"Gemini 3.1 Flash Lite Preview\" },\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"gemini-2.5-flash-lite\", name: \"Gemini 2.5 Flash Lite\" },\n ],\n oauth: {\n authorizeUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n userInfoUrl: \"https://www.googleapis.com/oauth2/v1/userinfo\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n \"https://www.googleapis.com/auth/userinfo.profile\",\n ],\n refresh: {\n encoding: \"form\",\n },\n },\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","hasFree","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","deprecated","deprecationNotice","category","transport","baseUrl","format","cliVersion","apiClient","usage","quotaUrl","loadCodeAssistUrl","clientId","clientSecret","models","oauth","authorizeUrl","tokenUrl","userInfoUrl","scopes","refresh","encoding","features"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;QACAC,YAAY;QACZC,mBAAmB;IACrB;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,YAAY;QACZC,WAAW;QACXC,OAAO;YACLC,UAAU;YACVC,mBAAmB;QACrB;QACAC,UAAU;QACVC,cAAc;IAChB;IACAC,QAAQ;QACN;YAAEzB,IAAI;YAA0BM,MAAM;QAAyB;QAC/D;YAAEN,IAAI;YAAwBM,MAAM;QAAuB;QAC3D;YAAEN,IAAI;YAA0BM,MAAM;QAAyB;QAC/D;YAAEN,IAAI;YAAiCM,MAAM;QAAgC;QAC7E;YAAEN,IAAI;YAAkBM,MAAM;QAAiB;QAC/C;YAAEN,IAAI;YAAoBM,MAAM;QAAmB;QACnD;YAAEN,IAAI;YAAyBM,MAAM;QAAwB;KAC9D;IACDoB,OAAO;QACLC,cAAc;QACdC,UAAU;QACVC,aAAa;QACbC,QAAQ;YACN;YACA;YACA;SACD;QACDC,SAAS;YACPC,UAAU;QACZ;IACF;IACAC,UAAU;QACRb,OAAO;IACT;AACF"}},
+ {"offset": {"line": 4663, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/gemini.js"],"sourcesContent":["import { GOOGLE_OAUTH_CLIENT } from \"../shared.js\";\n\nexport default {\n id: \"gemini\",\n priority: 50,\n hasFree: true,\n alias: \"gemini\",\n display: {\n name: \"Gemini\",\n icon: \"diamond\",\n color: \"#4285F4\",\n textIcon: \"GE\",\n website: \"https://ai.google.dev\",\n notice: {\n apiKeyUrl: \"https://aistudio.google.com/app/apikey\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n mediaPriority: 1,\n transport: {\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/models\",\n format: \"gemini\",\n clientId: \"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com\",\n clientSecret: \"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\",\n auth: {\n apiKey: {\n header: \"x-goog-api-key\",\n scheme: \"raw\",\n },\n oauth: {\n header: \"Authorization\",\n scheme: \"bearer\",\n },\n },\n },\n models: [\n { id: \"gemini-3.7-flash\", name: \"Gemini 3.7 Flash\" },\n { id: \"gemini-3.6-flash\", name: \"Gemini 3.6 Flash\" },\n { id: \"gemini-3.5-flash-lite\", name: \"Gemini 3.5 Flash Lite\" },\n { id: \"gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro Preview\" },\n { id: \"gemini-3.1-flash-lite-preview\", name: \"Gemini 3.1 Flash Lite Preview\" },\n { id: \"gemini-3-flash-preview\", name: \"Gemini 3 Flash Preview\" },\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"gemini-2.5-flash-lite\", name: \"Gemini 2.5 Flash Lite\" },\n { id: \"gemma-4-31b-it\", name: \"Gemma 4 31B IT\" },\n { id: \"gemini-embedding-2-preview\", name: \"Gemini Embedding 2 Preview\", kind: \"embedding\" },\n { id: \"gemini-embedding-001\", name: \"Gemini Embedding 001\", kind: \"embedding\" },\n { id: \"text-embedding-005\", name: \"Text Embedding 005\", kind: \"embedding\" },\n { id: \"text-embedding-004\", name: \"Text Embedding 004 (Legacy)\", kind: \"embedding\" },\n { id: \"gemini-3.1-flash-image-preview\", name: \"Gemini 3.1 Flash Image (Nano Banana 2)\", params: [], kind: \"image\" },\n { id: \"gemini-3-pro-image-preview\", name: \"Gemini 3 Pro Image (Nano Banana Pro)\", params: [], kind: \"image\" },\n { id: \"gemini-2.5-flash-image\", name: \"Gemini 2.5 Flash Image (Nano Banana)\", params: [], kind: \"image\" },\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro (Best)\", params: [\"language\",\"prompt\"], kind: \"stt\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\", params: [\"language\",\"prompt\"], kind: \"stt\" },\n { id: \"gemini-2.5-flash-lite\", name: \"Gemini 2.5 Flash Lite (Cheapest)\", params: [\"language\",\"prompt\"], kind: \"stt\" },\n { id: \"gemini-2.0-flash\", name: \"Gemini 2.0 Flash\", params: [\"language\",\"prompt\"], kind: \"stt\" },\n { id: \"gemini-3.1-flash-tts-preview\", name: \"Gemini 3.1 Flash TTS\", kind: \"tts\" },\n { id: \"gemini-2.5-flash-preview-tts\", name: \"Gemini 2.5 Flash TTS\", kind: \"tts\" },\n { id: \"gemini-2.5-pro-preview-tts\", name: \"Gemini 2.5 Pro TTS\", kind: \"tts\" },\n { id: \"embedding-001\", name: \"Embedding 001\", dimensions: 768, kind: \"embedding\" },\n ],\n serviceKinds: [\"llm\",\"embedding\",\"image\",\"imageToText\",\"webSearch\",\"tts\",\"stt\"],\n ttsConfig: {\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/models\",\n authType: \"apikey\",\n authHeader: \"key\",\n format: \"gemini-tts\",\n },\n sttConfig: {\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/models\",\n authType: \"apikey\",\n authHeader: \"key\",\n format: \"gemini-stt\",\n },\n embeddingConfig: { baseUrl: \"https://generativelanguage.googleapis.com/v1beta/models\", authType: \"apikey\", authHeader: \"key\" },\n imageConfig: { baseUrl: \"https://generativelanguage.googleapis.com/v1beta/models\" },\n searchViaChat: {\n defaultModel: \"gemini-2.5-flash\",\n endpoint: \"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent\",\n pricingUrl: \"https://ai.google.dev/pricing\",\n freeTier: \"Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio.\",\n },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","mediaPriority","transport","baseUrl","format","clientId","clientSecret","auth","apiKey","header","scheme","oauth","models","kind","params","dimensions","serviceKinds","ttsConfig","authHeader","sttConfig","embeddingConfig","imageConfig","searchViaChat","defaultModel","endpoint","pricingUrl","freeTier"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,eAAe;IACfC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,UAAU;QACVC,cAAc;QACdC,MAAM;YACJC,QAAQ;gBACNC,QAAQ;gBACRC,QAAQ;YACV;YACAC,OAAO;gBACLF,QAAQ;gBACRC,QAAQ;YACV;QACF;IACF;IACAE,QAAQ;QACN;YAAE1B,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAyBK,MAAM;QAAwB;QAC7D;YAAEL,IAAI;YAA0BK,MAAM;QAAyB;QAC/D;YAAEL,IAAI;YAAiCK,MAAM;QAAgC;QAC7E;YAAEL,IAAI;YAA0BK,MAAM;QAAyB;QAC/D;YAAEL,IAAI;YAAkBK,MAAM;QAAiB;QAC/C;YAAEL,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAyBK,MAAM;QAAwB;QAC7D;YAAEL,IAAI;YAAkBK,MAAM;QAAiB;QAC/C;YAAEL,IAAI;YAA8BK,MAAM;YAA8BsB,MAAM;QAAY;QAC1F;YAAE3B,IAAI;YAAwBK,MAAM;YAAwBsB,MAAM;QAAY;QAC9E;YAAE3B,IAAI;YAAsBK,MAAM;YAAsBsB,MAAM;QAAY;QAC1E;YAAE3B,IAAI;YAAsBK,MAAM;YAA+BsB,MAAM;QAAY;QACnF;YAAE3B,IAAI;YAAkCK,MAAM;YAA0CuB,QAAQ,EAAE;YAAED,MAAM;QAAQ;QAClH;YAAE3B,IAAI;YAA8BK,MAAM;YAAwCuB,QAAQ,EAAE;YAAED,MAAM;QAAQ;QAC5G;YAAE3B,IAAI;YAA0BK,MAAM;YAAwCuB,QAAQ,EAAE;YAAED,MAAM;QAAQ;QACxG;YAAE3B,IAAI;YAAkBK,MAAM;YAAyBuB,QAAQ;gBAAC;gBAAW;aAAS;YAAED,MAAM;QAAM;QAClG;YAAE3B,IAAI;YAAoBK,MAAM;YAAoBuB,QAAQ;gBAAC;gBAAW;aAAS;YAAED,MAAM;QAAM;QAC/F;YAAE3B,IAAI;YAAyBK,MAAM;YAAoCuB,QAAQ;gBAAC;gBAAW;aAAS;YAAED,MAAM;QAAM;QACpH;YAAE3B,IAAI;YAAoBK,MAAM;YAAoBuB,QAAQ;gBAAC;gBAAW;aAAS;YAAED,MAAM;QAAM;QAC/F;YAAE3B,IAAI;YAAgCK,MAAM;YAAwBsB,MAAM;QAAM;QAChF;YAAE3B,IAAI;YAAgCK,MAAM;YAAwBsB,MAAM;QAAM;QAChF;YAAE3B,IAAI;YAA8BK,MAAM;YAAsBsB,MAAM;QAAM;QAC5E;YAAE3B,IAAI;YAAiBK,MAAM;YAAiBwB,YAAY;YAAKF,MAAM;QAAY;KAClF;IACDG,cAAc;QAAC;QAAM;QAAY;QAAQ;QAAc;QAAY;QAAM;KAAM;IAC/EC,WAAW;QACTd,SAAS;QACTJ,UAAU;QACVmB,YAAY;QACZd,QAAQ;IACV;IACAe,WAAW;QACThB,SAAS;QACTJ,UAAU;QACVmB,YAAY;QACZd,QAAQ;IACV;IACAgB,iBAAiB;QAAEjB,SAAS;QAA2DJ,UAAU;QAAUmB,YAAY;IAAM;IAC7HG,aAAa;QAAElB,SAAS;IAA0D;IAClFmB,eAAe;QACbC,cAAc;QACdC,UAAU;QACVC,YAAY;QACZC,UAAU;IACZ;AACF"}},
+ {"offset": {"line": 4883, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/github.js"],"sourcesContent":["export default {\n id: \"github\",\n priority: 40,\n alias: \"gh\",\n uiAlias: \"gh\",\n display: {\n name: \"GitHub Copilot\",\n icon: \"code\",\n color: \"#333333\",\n website: \"https://github.com/features/copilot\",\n notice: {\n signupUrl: \"https://github.com/features/copilot\",\n },\n deprecated: true,\n deprecationNotice: \"RISK_NOTICE\",\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://api.githubcopilot.com/chat/completions\",\n responsesUrl: \"https://api.githubcopilot.com/responses\",\n messagesUrl: \"https://api.githubcopilot.com/v1/messages\",\n headers: {\n \"copilot-integration-id\": \"vscode-chat\",\n \"editor-version\": \"vscode/1.110.0\",\n \"editor-plugin-version\": \"copilot-chat/0.38.0\",\n \"user-agent\": \"GitHubCopilotChat/0.38.0\",\n \"openai-intent\": \"conversation-panel\",\n \"x-github-api-version\": \"2025-04-01\",\n \"x-vscode-user-agent-library-version\": \"electron-fetch\",\n \"X-Initiator\": \"user\",\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n copilot: {\n vscodeVersion: \"1.110.0\",\n chatVersion: \"0.38.0\",\n userAgent: \"GitHubCopilotChat/0.38.0\",\n apiVersion: \"2025-04-01\",\n },\n usage: {\n url: \"https://api.github.com/copilot_internal/user\",\n },\n },\n models: [\n { id: \"gpt-5.2\", name: \"GPT-5.2\" },\n { id: \"gpt-5.2-codex\", name: \"GPT-5.2 Codex\" },\n { id: \"gpt-5.3-codex\", name: \"GPT-5.3 Codex\" },\n { id: \"gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n // Note: routing to Copilot's Anthropic-native /v1/messages shim (see\n // executors/github.js) is decided by model-NAME pattern at request time, not by\n // a static targetFormat field here — Copilot's live model catalog (see\n // services/copilotModels.js) regularly exposes claude-* models this static list\n // hasn't caught up with yet (e.g. claude-opus-4.8), and a static per-entry\n // targetFormat would silently miss those while also double-translating requests\n // for models that ARE listed here (chatCore.js would pre-translate to Claude\n // shape, then the executor would translate again). Keep these as plain entries.\n { id: \"claude-haiku-4.5\", name: \"Claude Haiku 4.5\" },\n { id: \"claude-opus-4.5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-sonnet-4.5\", name: \"Claude Sonnet 4.5\" },\n { id: \"claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\" },\n { id: \"claude-opus-4.6\", name: \"Claude Opus 4.6\" },\n { id: \"claude-opus-4.7\", name: \"Claude Opus 4.7\" },\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"gemini-3-flash-preview\", name: \"Gemini 3 Flash\" },\n { id: \"gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro\" },\n { id: \"grok-code-fast-1\", name: \"Grok Code Fast 1\" },\n { id: \"oswe-vscode-prime\", name: \"Raptor Mini\" },\n { id: \"goldeneye-free-auto\", name: \"GoldenEye\" },\n { id: \"text-embedding-3-small\", name: \"Text Embedding 3 Small (GitHub)\", kind: \"embedding\" },\n { id: \"text-embedding-3-large\", name: \"Text Embedding 3 Large (GitHub)\", kind: \"embedding\" },\n ],\n serviceKinds: [\"llm\",\"embedding\"],\n embeddingConfig: { baseUrl: \"https://models.github.ai/inference/embeddings\", authType: \"apikey\", authHeader: \"bearer\" },\n oauth: {\n clientId: \"Iv1.b507a08c87ecfe98\",\n authorizeUrl: \"https://github.com/login/oauth/authorize\",\n deviceCodeUrl: \"https://github.com/login/device/code\",\n tokenUrl: \"https://github.com/login/oauth/access_token\",\n userInfoUrl: \"https://api.github.com/user\",\n scopes: \"read:user\",\n apiVersion: \"2022-11-28\",\n copilotTokenUrl: \"https://api.github.com/copilot_internal/v2/token\",\n userAgent: \"GitHubCopilotChat/0.26.7\",\n editorVersion: \"vscode/1.85.0\",\n editorPluginVersion: \"copilot-chat/0.26.7\",\n },\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","deprecated","deprecationNotice","category","transport","baseUrl","responsesUrl","messagesUrl","headers","Accept","copilot","vscodeVersion","chatVersion","userAgent","apiVersion","usage","url","models","kind","serviceKinds","embeddingConfig","authType","authHeader","oauth","clientId","authorizeUrl","deviceCodeUrl","tokenUrl","userInfoUrl","scopes","copilotTokenUrl","editorVersion","editorPluginVersion","features"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;QACAC,YAAY;QACZC,mBAAmB;IACrB;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,cAAc;QACdC,aAAa;QACbC,SAAS;YACP,0BAA0B;YAC1B,kBAAkB;YAClB,yBAAyB;YACzB,cAAc;YACd,iBAAiB;YACjB,wBAAwB;YACxB,uCAAuC;YACvC,eAAe;YACfC,QAAQ;YACR,gBAAgB;QAClB;QACAC,SAAS;YACPC,eAAe;YACfC,aAAa;YACbC,WAAW;YACXC,YAAY;QACd;QACAC,OAAO;YACLC,KAAK;QACP;IACF;IACAC,QAAQ;QACN;YAAE3B,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAgBK,MAAM;QAAe;QAC3C,qEAAqE;QACrE,gFAAgF;QAChF,uEAAuE;QACvE,gFAAgF;QAChF,2EAA2E;QAC3E,gFAAgF;QAChF,6EAA6E;QAC7E,gFAAgF;QAChF;YAAEL,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAAqBK,MAAM;QAAoB;QACrD;YAAEL,IAAI;YAAqBK,MAAM;QAAoB;QACrD;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAAkBK,MAAM;QAAiB;QAC/C;YAAEL,IAAI;YAA0BK,MAAM;QAAiB;QACvD;YAAEL,IAAI;YAA0BK,MAAM;QAAiB;QACvD;YAAEL,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAqBK,MAAM;QAAc;QAC/C;YAAEL,IAAI;YAAuBK,MAAM;QAAY;QAC/C;YAAEL,IAAI;YAA0BK,MAAM;YAAmCuB,MAAM;QAAY;QAC3F;YAAE5B,IAAI;YAA0BK,MAAM;YAAmCuB,MAAM;QAAY;KAC5F;IACDC,cAAc;QAAC;QAAM;KAAY;IACjCC,iBAAiB;QAAEf,SAAS;QAAiDgB,UAAU;QAAUC,YAAY;IAAS;IACtHC,OAAO;QACLC,UAAU;QACVC,cAAc;QACdC,eAAe;QACfC,UAAU;QACVC,aAAa;QACbC,QAAQ;QACRf,YAAY;QACZgB,iBAAiB;QACjBjB,WAAW;QACXkB,eAAe;QACfC,qBAAqB;IACvB;IACAC,UAAU;QACRlB,OAAO;IACT;AACF"}},
+ {"offset": {"line": 5048, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/gitlab.js"],"sourcesContent":["export default {\n id: \"gitlab\",\n hidden: true,\n priority: 100,\n display: {\n name: \"GitLab Duo\",\n icon: \"code\",\n color: \"#FC6D26\",\n textIcon: \"GL\",\n website: \"https://gitlab.com\",\n notice: {\n signupUrl: \"https://gitlab.com\",\n },\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://gitlab.com/api/v4/chat/completions\",\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n },\n },\n oauth: {\n defaultBaseUrl: \"https://gitlab.com\",\n authorizeUrlPath: \"/oauth/authorize\",\n tokenUrlPath: \"/oauth/token\",\n userInfoUrlPath: \"/api/v4/user\",\n scope: \"api read_user\",\n codeChallengeMethod: \"S256\",\n },\n};\n"],"names":["id","hidden","priority","display","name","icon","color","textIcon","website","notice","signupUrl","category","transport","baseUrl","auth","combined","header","scheme","oauth","defaultBaseUrl","authorizeUrlPath","tokenUrlPath","userInfoUrlPath","scope","codeChallengeMethod"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,QAAQ;IACRC,UAAU;IACVC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;IACF;IACAC,OAAO;QACLC,gBAAgB;QAChBC,kBAAkB;QAClBC,cAAc;QACdC,iBAAiB;QACjBC,OAAO;QACPC,qBAAqB;IACvB;AACF"}},
+ {"offset": {"line": 5088, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/glm-cn.js"],"sourcesContent":["export default {\n id: \"glm-cn\",\n priority: 130,\n alias: \"glm-cn\",\n display: {\n name: \"GLM (China)\",\n icon: \"code\",\n color: \"#DC2626\",\n textIcon: \"GC\",\n website: \"https://open.bigmodel.cn\",\n notice: {\n apiKeyUrl: \"https://open.bigmodel.cn/usercenter/apikeys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions\",\n headers: {},\n usage: {\n url: \"https://open.bigmodel.cn/api/monitor/usage/quota/limit\",\n },\n },\n models: [\n { id: \"glm-5.3\", name: \"GLM 5.3\" },\n { id: \"glm-5.2\", name: \"GLM 5.2\" },\n { id: \"glm-5.1\", name: \"GLM 5.1\" },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"glm-4.7\", name: \"GLM-4.7\" },\n { id: \"glm-4.6\", name: \"GLM-4.6\" },\n { id: \"glm-4.5-air\", name: \"GLM-4.5-Air\" },\n ],\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","headers","usage","url","models","features","usageApikey"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,OAAO;YACLC,KAAK;QACP;IACF;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAASI,MAAM;QAAQ;QAC7B;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAeI,MAAM;QAAc;KAC1C;IACDc,UAAU;QACRH,OAAO;QACPI,aAAa;IACf;AACF"}},
+ {"offset": {"line": 5153, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/glm.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"glm\",\n priority: 140,\n alias: \"glm\",\n display: {\n name: \"GLM Coding\",\n icon: \"code\",\n color: \"#2563EB\",\n textIcon: \"GL\",\n website: \"https://open.bigmodel.cn\",\n notice: {\n apiKeyUrl: \"https://open.bigmodel.cn/usercenter/apikeys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.z.ai/api/anthropic/v1/messages\",\n format: \"claude\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: {\n combined: true,\n header: \"x-api-key\",\n scheme: \"raw\",\n },\n usage: {\n url: \"https://api.z.ai/api/monitor/usage/quota/limit\",\n },\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n transports: [\n {\n format: \"openai\",\n baseUrl: \"https://api.z.ai/api/coding/paas/v4/chat/completions\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" },\n },\n {\n format: \"claude\",\n baseUrl: \"https://api.z.ai/api/anthropic/v1/messages\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\" },\n },\n ],\n models: [\n { id: \"glm-5.3\", name: \"GLM 5.3\" },\n { id: \"glm-5.2\", name: \"GLM 5.2\" },\n { id: \"glm-5.1\", name: \"GLM 5.1\" },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"glm-4.7\", name: \"GLM 4.7\" },\n { id: \"glm-4.6v\", name: \"GLM 4.6V (Vision)\" },\n ],\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","format","urlSuffix","headers","auth","combined","header","scheme","usage","url","transports","models","features","usageApikey"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,SAAS;YAAE,GAAG,6JAAkB;QAAC;QACjCC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;QACAC,OAAO;YACLC,KAAK;QACP;IACF;IACA,uFAAuF;IACvFC,YAAY;QACV;YACET,QAAQ;YACRD,SAAS;YACTI,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QACpE;QACA;YACEN,QAAQ;YACRD,SAAS;YACTE,WAAW;YACXC,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCC,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;YAAM;QAC7D;KACD;IACDI,QAAQ;QACN;YAAExB,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAASI,MAAM;QAAQ;QAC7B;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAYI,MAAM;QAAoB;KAC7C;IACDqB,UAAU;QACRJ,OAAO;QACPK,aAAa;IACf;AACF"}},
+ {"offset": {"line": 5250, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/google-pse.js"],"sourcesContent":["export default {\n id: \"google-pse\",\n alias: \"gpse\",\n display: {\n name: \"Google PSE\",\n icon: \"search\",\n color: \"#4285F4\",\n textIcon: \"GP\",\n website: \"https://programmablesearchengine.google.com\",\n notice: {\n apiKeyUrl: \"https://programmablesearchengine.google.com/controlpanel/create\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\"\n ],\n searchConfig: {\n baseUrl: \"https://www.googleapis.com/customsearch/v1\",\n method: \"GET\",\n authType: \"apikey\",\n authHeader: \"key\",\n costPerQuery: 0.005,\n freeMonthlyQuota: 3000,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 10,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 5293, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/google-tts.js"],"sourcesContent":["export default {\n id: \"google-tts\",\n alias: \"google-tts\",\n display: {\n name: \"Google TTS\",\n icon: \"record_voice_over\",\n color: \"#4285F4\",\n textIcon: \"GT\"\n },\n category: \"freeTier\",\n authType: \"none\",\n serviceKinds: [\n \"tts\"\n ],\n mediaPriority: 5,\n noAuth: true,\n ttsConfig: {\n baseUrl: \"google-tts\",\n authType: \"none\",\n authHeader: \"none\",\n format: \"google-tts\",\n models: []\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","category","authType","serviceKinds","mediaPriority","noAuth","ttsConfig","baseUrl","authHeader","format","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;IACZ;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,eAAe;IACfC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTL,UAAU;QACVM,YAAY;QACZC,QAAQ;QACRC,QAAQ,EAAE;IACZ;AACF"}},
+ {"offset": {"line": 5325, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/grok-cli.js"],"sourcesContent":["/**\n * Grok CLI / Grok Build (cli-chat-proxy.grok.com)\n *\n * Source of truth: wire capture of official @xai-official/grok 0.2.99\n * talking to https://cli-chat-proxy.grok.com (OpenAI Responses API).\n *\n * Distinct from:\n * - `xai` → api.x.ai (API key / xAI API OAuth PKCE)\n * - `grok-web` → grok.com web SSO cookie\n */\nimport {\n GROK_CLI_BASE_URL,\n GROK_CLI_CLIENT_IDENTIFIER,\n GROK_CLI_MODEL,\n GROK_CLI_USER_AGENT,\n GROK_CLI_VERSION,\n} from \"../../config/grokCli.js\";\n\nexport default {\n id: \"grok-cli\",\n priority: 275,\n alias: \"gcli\",\n aliases: [\"grok-build\", \"gb\"],\n uiAlias: \"gcli\",\n display: {\n name: \"Grok CLI (Grok Build)\",\n icon: \"auto_awesome\",\n color: \"#1DA1F2\",\n textIcon: \"GC\",\n website: \"https://x.ai\",\n notice: {\n text: \"Sign in with your xAI / Grok account via device code. Uses Grok Build subscription credits (cli-chat-proxy.grok.com).\",\n signupUrl: \"https://grok.com/supergrok\",\n },\n },\n category: \"oauth\",\n authModes: [\"oauth\"],\n hasOAuth: true,\n thinkingConfig: {\n options: [\"low\", \"medium\", \"high\", \"xhigh\"],\n defaultMode: \"high\",\n },\n transport: {\n baseUrl: `${GROK_CLI_BASE_URL}/responses`,\n format: \"openai-responses\",\n forceStream: true,\n modelsUrl: `${GROK_CLI_BASE_URL}/models`,\n userUrl: `${GROK_CLI_BASE_URL}/user`,\n billingUrl: `${GROK_CLI_BASE_URL}/billing`,\n clientVersion: GROK_CLI_VERSION,\n clientIdentifier: GROK_CLI_CLIENT_IDENTIFIER,\n tokenAuth: \"xai-grok-cli\",\n headers: {\n \"User-Agent\": GROK_CLI_USER_AGENT,\n \"x-grok-client-identifier\": GROK_CLI_CLIENT_IDENTIFIER,\n \"x-grok-client-version\": GROK_CLI_VERSION,\n },\n // Quota tracker: official CLI polls billing?format=credits + user?include=subscription\n usage: {\n url: `${GROK_CLI_BASE_URL}/billing?format=credits`,\n userUrl: `${GROK_CLI_BASE_URL}/user?include=subscription`,\n },\n retry: {\n 429: { attempts: 2, delayMs: 2000 },\n 502: { attempts: 2, delayMs: 1500 },\n 503: { attempts: 2, delayMs: 1500 },\n },\n },\n models: [\n {\n id: GROK_CLI_MODEL,\n name: \"Grok Build\",\n contextLength: 500000,\n maxOutputTokens: 64000,\n },\n { id: \"grok-4.5\", name: \"Grok 4.5\" },\n { id: \"grok-4.5-high\", name: \"Grok 4.5 (High)\", upstreamModelId: \"grok-4.5\" },\n { id: \"grok-4.5-medium\", name: \"Grok 4.5 (Medium)\", upstreamModelId: \"grok-4.5\" },\n { id: \"grok-4.5-low\", name: \"Grok 4.5 (Low)\", upstreamModelId: \"grok-4.5\" },\n ],\n features: {\n usage: true,\n },\n oauth: {\n // Same public client_id as Grok CLI / existing xai OAuth\n clientId: \"b1a00492-073a-47ea-816f-4c329264a828\",\n deviceCodeUrl: \"https://auth.x.ai/oauth2/device/code\",\n tokenUrl: \"https://auth.x.ai/oauth2/token\",\n refreshUrl: \"https://auth.x.ai/oauth2/token\",\n // HAR scope includes conversations read/write beyond the api-only xai scope\n scope:\n \"openid profile email offline_access grok-cli:access api:access conversations:read conversations:write\",\n referrer: \"grok-build\",\n refreshLeadMs: 5 * 60 * 1000,\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","signupUrl","category","authModes","hasOAuth","thinkingConfig","options","defaultMode","transport","baseUrl","format","forceStream","modelsUrl","userUrl","billingUrl","clientVersion","clientIdentifier","tokenAuth","headers","usage","url","retry","attempts","delayMs","models","contextLength","maxOutputTokens","upstreamModelId","features","oauth","clientId","deviceCodeUrl","tokenUrl","refreshUrl","scope","referrer","refreshLeadMs"],"mappings":";;;;AAAA;;;;;;;;;CASC,GACD;;uCAQe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QAAC;QAAc;KAAK;IAC7BC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;KAAQ;IACpBC,UAAU;IACVC,gBAAgB;QACdC,SAAS;YAAC;YAAO;YAAU;YAAQ;SAAQ;QAC3CC,aAAa;IACf;IACAC,WAAW;QACTC,SAAS,GAAG,0JAAiB,CAAC,UAAU,CAAC;QACzCC,QAAQ;QACRC,aAAa;QACbC,WAAW,GAAG,0JAAiB,CAAC,OAAO,CAAC;QACxCC,SAAS,GAAG,0JAAiB,CAAC,KAAK,CAAC;QACpCC,YAAY,GAAG,0JAAiB,CAAC,QAAQ,CAAC;QAC1CC,eAAe,yJAAgB;QAC/BC,kBAAkB,mKAA0B;QAC5CC,WAAW;QACXC,SAAS;YACP,cAAc,4JAAmB;YACjC,4BAA4B,mKAA0B;YACtD,yBAAyB,yJAAgB;QAC3C;QACA,uFAAuF;QACvFC,OAAO;YACLC,KAAK,GAAG,0JAAiB,CAAC,uBAAuB,CAAC;YAClDP,SAAS,GAAG,0JAAiB,CAAC,0BAA0B,CAAC;QAC3D;QACAQ,OAAO;YACL,KAAK;gBAAEC,UAAU;gBAAGC,SAAS;YAAK;YAClC,KAAK;gBAAED,UAAU;gBAAGC,SAAS;YAAK;YAClC,KAAK;gBAAED,UAAU;gBAAGC,SAAS;YAAK;QACpC;IACF;IACAC,QAAQ;QACN;YACEpC,IAAI,uJAAc;YAClBM,MAAM;YACN+B,eAAe;YACfC,iBAAiB;QACnB;QACA;YAAEtC,IAAI;YAAYM,MAAM;QAAW;QACnC;YAAEN,IAAI;YAAiBM,MAAM;YAAmBiC,iBAAiB;QAAW;QAC5E;YAAEvC,IAAI;YAAmBM,MAAM;YAAqBiC,iBAAiB;QAAW;QAChF;YAAEvC,IAAI;YAAgBM,MAAM;YAAkBiC,iBAAiB;QAAW;KAC3E;IACDC,UAAU;QACRT,OAAO;IACT;IACAU,OAAO;QACL,yDAAyD;QACzDC,UAAU;QACVC,eAAe;QACfC,UAAU;QACVC,YAAY;QACZ,4EAA4E;QAC5EC,OACE;QACFC,UAAU;QACVC,eAAe,IAAI,KAAK;IAC1B;AACF"}},
+ {"offset": {"line": 5455, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/grok-web.js"],"sourcesContent":["export default {\n id: \"grok-web\",\n priority: 150,\n alias: \"grok-web\",\n aliases: [\n \"gw\",\n ],\n uiAlias: \"gw\",\n display: {\n name: \"Grok Web (Subscription)\",\n icon: \"auto_awesome\",\n color: \"#1DA1F2\",\n textIcon: \"GW\",\n website: \"https://grok.com\",\n },\n category: \"webCookie\",\n authType: \"cookie\",\n authHint: \"Paste your sso= cookie value from grok.com\",\n transport: {\n baseUrl: \"https://grok.com/rest/app-chat/conversations/new\",\n format: \"grok-web\",\n authType: \"cookie\",\n },\n models: [\n { id: \"grok-3\", name: \"Grok 3\" },\n { id: \"grok-3-mini\", name: \"Grok 3 Mini (Thinking)\" },\n { id: \"grok-3-thinking\", name: \"Grok 3 Thinking\" },\n { id: \"grok-4\", name: \"Grok 4\" },\n { id: \"grok-4-mini\", name: \"Grok 4 Mini (Thinking)\" },\n { id: \"grok-4-thinking\", name: \"Grok 4 Thinking\" },\n { id: \"grok-4-heavy\", name: \"Grok 4 Heavy (SuperGrok)\" },\n { id: \"grok-4.1-mini\", name: \"Grok 4.1 Mini (Thinking)\" },\n { id: \"grok-4.1-fast\", name: \"Grok 4.1 Fast\" },\n { id: \"grok-4.1-expert\", name: \"Grok 4.1 Expert\" },\n { id: \"grok-4.1-thinking\", name: \"Grok 4.1 Thinking\" },\n { id: \"grok-4.2\", name: \"Grok 4.2 (4.20 Beta)\" },\n ],\n passthroughModels: true,\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","category","authType","authHint","transport","baseUrl","format","models","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRJ,UAAU;IACZ;IACAK,QAAQ;QACN;YAAEjB,IAAI;YAAUM,MAAM;QAAS;QAC/B;YAAEN,IAAI;YAAeM,MAAM;QAAyB;QACpD;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAUM,MAAM;QAAS;QAC/B;YAAEN,IAAI;YAAeM,MAAM;QAAyB;QACpD;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAgBM,MAAM;QAA2B;QACvD;YAAEN,IAAI;YAAiBM,MAAM;QAA2B;QACxD;YAAEN,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAqBM,MAAM;QAAoB;QACrD;YAAEN,IAAI;YAAYM,MAAM;QAAuB;KAChD;IACDY,mBAAmB;AACrB"}},
+ {"offset": {"line": 5538, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/groq.js"],"sourcesContent":["export default {\n id: \"groq\",\n priority: 60,\n hasFree: true,\n alias: \"groq\",\n display: {\n name: \"Groq\",\n icon: \"speed\",\n color: \"#F55036\",\n textIcon: \"GQ\",\n website: \"https://groq.com\",\n notice: {\n apiKeyUrl: \"https://console.groq.com/keys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.groq.com/openai/v1/chat/completions\",\n validateUrl: \"https://api.groq.com/openai/v1/models\",\n },\n models: [\n { id: \"llama-3.3-70b-versatile\", name: \"Llama 3.3 70B\" },\n { id: \"meta-llama/llama-4-maverick-17b-128e-instruct\", name: \"Llama 4 Maverick\" },\n { id: \"qwen/qwen3-32b\", name: \"Qwen3 32B\" },\n { id: \"openai/gpt-oss-120b\", name: \"GPT-OSS 120B\" },\n { id: \"whisper-large-v3\", name: \"Whisper Large v3\", params: [\"language\",\"response_format\",\"temperature\",\"prompt\"], kind: \"stt\" },\n { id: \"whisper-large-v3-turbo\", name: \"Whisper Large v3 Turbo\", params: [\"language\",\"response_format\",\"temperature\",\"prompt\"], kind: \"stt\" },\n { id: \"distil-whisper-large-v3-en\", name: \"Distil Whisper Large v3 EN\", params: [\"language\",\"response_format\",\"temperature\",\"prompt\"], kind: \"stt\" },\n ],\n serviceKinds: [\"llm\",\"imageToText\",\"stt\"],\n sttConfig: {\n baseUrl: \"https://api.groq.com/openai/v1/audio/transcriptions\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"openai\",\n },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl","models","params","kind","serviceKinds","sttConfig","authType","authHeader","format"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAA2BK,MAAM;QAAgB;QACvD;YAAEL,IAAI;YAAiDK,MAAM;QAAmB;QAChF;YAAEL,IAAI;YAAkBK,MAAM;QAAY;QAC1C;YAAEL,IAAI;YAAuBK,MAAM;QAAe;QAClD;YAAEL,IAAI;YAAoBK,MAAM;YAAoBY,QAAQ;gBAAC;gBAAW;gBAAkB;gBAAc;aAAS;YAAEC,MAAM;QAAM;QAC/H;YAAElB,IAAI;YAA0BK,MAAM;YAA0BY,QAAQ;gBAAC;gBAAW;gBAAkB;gBAAc;aAAS;YAAEC,MAAM;QAAM;QAC3I;YAAElB,IAAI;YAA8BK,MAAM;YAA8BY,QAAQ;gBAAC;gBAAW;gBAAkB;gBAAc;aAAS;YAAEC,MAAM;QAAM;KACpJ;IACDC,cAAc;QAAC;QAAM;QAAc;KAAM;IACzCC,WAAW;QACTN,SAAS;QACTO,UAAU;QACVC,YAAY;QACZC,QAAQ;IACV;AACF"}},
+ {"offset": {"line": 5629, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/huggingface.js"],"sourcesContent":["export default {\n id: \"huggingface\",\n priority: 70,\n hasFree: true,\n alias: \"huggingface\",\n aliases: [\n \"hf\",\n ],\n uiAlias: \"hf\",\n display: {\n name: \"HuggingFace\",\n icon: \"face\",\n color: \"#FFD21E\",\n textIcon: \"HF\",\n website: \"https://huggingface.co\",\n notice: {\n apiKeyUrl: \"https://huggingface.co/settings/tokens\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n hiddenKinds: [\n \"tts\",\n ],\n transport: null,\n models: [\n { id: \"black-forest-labs/FLUX.1-schnell\", name: \"FLUX.1 Schnell\", params: [], kind: \"image\" },\n { id: \"stabilityai/stable-diffusion-xl-base-1.0\", name: \"SDXL Base 1.0\", params: [], kind: \"image\" },\n { id: \"openai/whisper-large-v3\", name: \"Whisper Large v3 (HF)\", params: [\"language\"], kind: \"stt\" },\n { id: \"openai/whisper-small\", name: \"Whisper Small (HF)\", params: [\"language\"], kind: \"stt\" },\n ],\n serviceKinds: [\"image\", \"stt\"],\n imageConfig: { baseUrl: \"https://api-inference.huggingface.co/models\" },\n};\n"],"names":["id","priority","hasFree","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","hiddenKinds","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,aAAa;QACX;KACD;IACDC,WAAW;IACXC,QAAQ;QACN;YAAElB,IAAI;YAAoCO,MAAM;YAAkBY,QAAQ,EAAE;YAAEC,MAAM;QAAQ;QAC5F;YAAEpB,IAAI;YAA4CO,MAAM;YAAiBY,QAAQ,EAAE;YAAEC,MAAM;QAAQ;QACnG;YAAEpB,IAAI;YAA2BO,MAAM;YAAyBY,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;QAClG;YAAEpB,IAAI;YAAwBO,MAAM;YAAsBY,QAAQ;gBAAC;aAAW;YAAEC,MAAM;QAAM;KAC7F;IACDC,cAAc;QAAC;QAAS;KAAM;IAC9BC,aAAa;QAAEC,SAAS;IAA8C;AACxE"}},
+ {"offset": {"line": 5700, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/hyperbolic.js"],"sourcesContent":["export default {\n id: \"hyperbolic\",\n priority: 160,\n alias: \"hyperbolic\",\n aliases: [\n \"hyp\",\n ],\n uiAlias: \"hyp\",\n display: {\n name: \"Hyperbolic\",\n icon: \"bolt\",\n color: \"#00D4FF\",\n textIcon: \"HY\",\n website: \"https://hyperbolic.xyz\",\n notice: {\n apiKeyUrl: \"https://app.hyperbolic.xyz/settings\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.hyperbolic.xyz/v1/chat/completions\",\n validateUrl: \"https://api.hyperbolic.xyz/v1/models\",\n },\n models: [\n { id: \"Qwen/QwQ-32B\", name: \"QwQ 32B\" },\n { id: \"deepseek-ai/DeepSeek-R1\", name: \"DeepSeek R1\" },\n { id: \"deepseek-ai/DeepSeek-V3\", name: \"DeepSeek V3\" },\n { id: \"meta-llama/Llama-3.3-70B-Instruct\", name: \"Llama 3.3 70B\" },\n { id: \"meta-llama/Llama-3.2-3B-Instruct\", name: \"Llama 3.2 3B\" },\n { id: \"Qwen/Qwen2.5-72B-Instruct\", name: \"Qwen 2.5 72B\" },\n { id: \"Qwen/Qwen2.5-Coder-32B-Instruct\", name: \"Qwen 2.5 Coder 32B\" },\n { id: \"NousResearch/Hermes-3-Llama-3.1-70B\", name: \"Hermes 3 70B\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAgBM,MAAM;QAAU;QACtC;YAAEN,IAAI;YAA2BM,MAAM;QAAc;QACrD;YAAEN,IAAI;YAA2BM,MAAM;QAAc;QACrD;YAAEN,IAAI;YAAqCM,MAAM;QAAgB;QACjE;YAAEN,IAAI;YAAoCM,MAAM;QAAe;QAC/D;YAAEN,IAAI;YAA6BM,MAAM;QAAe;QACxD;YAAEN,IAAI;YAAmCM,MAAM;QAAqB;QACpE;YAAEN,IAAI;YAAuCM,MAAM;QAAe;KACnE;AACH"}},
+ {"offset": {"line": 5767, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/iflow.js"],"sourcesContent":["export default {\n id: \"iflow\",\n hidden: true,\n priority: 110,\n alias: \"if\",\n display: {\n name: \"iFlow AI\",\n icon: \"water_drop\",\n color: \"#6366F1\",\n website: \"https://iflow.cn\",\n notice: {\n signupUrl: \"https://iflow.cn\",\n },\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://apis.iflow.cn/v1/chat/completions\",\n thinkingFormat: \"openai\",\n headers: {\n \"User-Agent\": \"iFlow-Cli\",\n },\n },\n models: [\n { id: \"qwen3-coder-plus\", name: \"Qwen3 Coder Plus\" },\n { id: \"qwen3-max\", name: \"Qwen3 Max\" },\n { id: \"qwen3-vl-plus\", name: \"Qwen3 VL Plus\" },\n { id: \"qwen3-max-preview\", name: \"Qwen3 Max Preview\" },\n { id: \"qwen3-235b\", name: \"Qwen3 235B A22B\" },\n { id: \"qwen3-235b-a22b-instruct\", name: \"Qwen3 235B A22B Instruct\" },\n { id: \"qwen3-235b-a22b-thinking-2507\", name: \"Qwen3 235B A22B Thinking\" },\n { id: \"qwen3-32b\", name: \"Qwen3 32B\" },\n { id: \"kimi-k2\", name: \"Kimi K2\" },\n { id: \"deepseek-v3.2\", name: \"DeepSeek V3.2 Exp\" },\n { id: \"deepseek-v3.1\", name: \"DeepSeek V3.1 Terminus\" },\n { id: \"deepseek-v3\", name: \"DeepSeek V3 671B\" },\n { id: \"deepseek-r1\", name: \"DeepSeek R1\" },\n { id: \"glm-4.7\", name: \"GLM 4.7\" },\n { id: \"iflow-rome-30ba3b\", name: \"iFlow ROME\" },\n ],\n oauth: {\n clientId: \"10009311001\",\n clientSecret: \"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW\",\n authorizeUrl: \"https://iflow.cn/oauth\",\n tokenUrl: \"https://iflow.cn/oauth/token\",\n userInfoUrl: \"https://iflow.cn/api/oauth/getUserInfo\",\n extraParams: {\n loginMethod: \"phone\",\n type: \"phone\",\n },\n refreshLeadMs: 86400000,\n },\n};\n"],"names":["id","hidden","priority","alias","display","name","icon","color","website","notice","signupUrl","category","transport","baseUrl","thinkingFormat","headers","models","oauth","clientId","clientSecret","authorizeUrl","tokenUrl","userInfoUrl","extraParams","loginMethod","type","refreshLeadMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,QAAQ;IACRC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,gBAAgB;QAChBC,SAAS;YACP,cAAc;QAChB;IACF;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAAoBK,MAAM;QAAmB;QACnD;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAqBK,MAAM;QAAoB;QACrD;YAAEL,IAAI;YAAcK,MAAM;QAAkB;QAC5C;YAAEL,IAAI;YAA4BK,MAAM;QAA2B;QACnE;YAAEL,IAAI;YAAiCK,MAAM;QAA2B;QACxE;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAiBK,MAAM;QAAoB;QACjD;YAAEL,IAAI;YAAiBK,MAAM;QAAyB;QACtD;YAAEL,IAAI;YAAeK,MAAM;QAAmB;QAC9C;YAAEL,IAAI;YAAeK,MAAM;QAAc;QACzC;YAAEL,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAqBK,MAAM;QAAa;KAC/C;IACDY,OAAO;QACLC,UAAU;QACVC,cAAc;QACdC,cAAc;QACdC,UAAU;QACVC,aAAa;QACbC,aAAa;YACXC,aAAa;YACbC,MAAM;QACR;QACAC,eAAe;IACjB;AACF"}},
+ {"offset": {"line": 5872, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/index.js"],"sourcesContent":["// Auto-generated: static imports for all registry entries\nimport p0 from \"./alicode-intl.js\";\nimport p1 from \"./alicode.js\";\nimport p2 from \"./anthropic.js\";\nimport p3 from \"./antigravity.js\";\nimport p4 from \"./assemblyai.js\";\nimport p5 from \"./aws-polly.js\";\nimport p6 from \"./azure.js\";\nimport p7 from \"./black-forest-labs.js\";\nimport p8 from \"./blackbox.js\";\nimport p9 from \"./brave-search.js\";\nimport p10 from \"./byteplus.js\";\nimport p11 from \"./cartesia.js\";\nimport p12 from \"./cerebras.js\";\nimport p13 from \"./chutes.js\";\nimport p14 from \"./claude.js\";\nimport p15 from \"./cline.js\";\nimport p16 from \"./clinepass.js\";\nimport p17 from \"./cloudflare-ai.js\";\nimport p18 from \"./codebuddy-cn.js\";\nimport p19 from \"./codex.js\";\nimport p20 from \"./cohere.js\";\nimport p21 from \"./comfyui.js\";\nimport p22 from \"./commandcode.js\";\nimport p23 from \"./coqui.js\";\nimport p24 from \"./cursor.js\";\nimport p25 from \"./deepgram.js\";\nimport p26 from \"./deepseek.js\";\nimport p27 from \"./edge-tts.js\";\nimport p28 from \"./elevenlabs.js\";\nimport p29 from \"./exa.js\";\nimport p30 from \"./fal-ai.js\";\nimport p31 from \"./featherless.js\";\nimport p32 from \"./firecrawl.js\";\nimport p33 from \"./fireworks.js\";\nimport p34 from \"./gemini-cli.js\";\nimport p35 from \"./gemini.js\";\nimport p36 from \"./github.js\";\nimport p37 from \"./gitlab.js\";\nimport p38 from \"./glm-cn.js\";\nimport p39 from \"./glm.js\";\nimport p40 from \"./google-pse.js\";\nimport p41 from \"./google-tts.js\";\nimport p42 from \"./grok-cli.js\";\nimport p43 from \"./grok-web.js\";\nimport p44 from \"./groq.js\";\nimport p45 from \"./huggingface.js\";\nimport p46 from \"./hyperbolic.js\";\nimport p47 from \"./iflow.js\";\nimport p48 from \"./inworld.js\";\nimport p49 from \"./jina-ai.js\";\nimport p50 from \"./jina-reader.js\";\nimport p51 from \"./kilocode.js\";\nimport p52 from \"./kimchi.js\";\nimport p53 from \"./kimi.js\";\nimport p54 from \"./kiro.js\";\nimport p55 from \"./linkup.js\";\nimport p56 from \"./local-device.js\";\nimport p57 from \"./mimo-free.js\";\nimport p58 from \"./minimax-cn.js\";\nimport p59 from \"./minimax.js\";\nimport p60 from \"./mistral.js\";\nimport p61 from \"./mmf.js\";\nimport p62 from \"./nanobanana.js\";\nimport p63 from \"./nebius.js\";\nimport p64 from \"./nvidia.js\";\nimport p65 from \"./ollama-local.js\";\nimport p66 from \"./ollama.js\";\nimport p67 from \"./openai.js\";\nimport p68 from \"./opencode-go.js\";\nimport p69 from \"./opencode.js\";\nimport p70 from \"./openrouter.js\";\nimport p71 from \"./perplexity-web.js\";\nimport p72 from \"./perplexity.js\";\nimport p73 from \"./perplexity-agent.js\";\nimport p74 from \"./playht.js\";\nimport p75 from \"./qoder.js\";\nimport p77 from \"./recraft.js\";\nimport p78 from \"./runwayml.js\";\nimport p79 from \"./sdwebui.js\";\nimport p80 from \"./searchapi.js\";\nimport p81 from \"./searxng.js\";\nimport p82 from \"./serper.js\";\nimport p83 from \"./siliconflow.js\";\nimport p84 from \"./stability-ai.js\";\nimport p85 from \"./tavily.js\";\nimport p86 from \"./together.js\";\nimport p87 from \"./topaz.js\";\nimport p88 from \"./tortoise.js\";\nimport p89 from \"./venice.js\";\nimport p90 from \"./vercel-ai-gateway.js\";\nimport p91 from \"./vertex-partner.js\";\nimport p92 from \"./vertex.js\";\nimport p93 from \"./volcengine-ark.js\";\nimport p94 from \"./voyage-ai.js\";\nimport p95 from \"./xai.js\";\nimport p96 from \"./xiaomi-mimo.js\";\nimport p97 from \"./xiaomi-tokenplan.js\";\nimport p98 from \"./youcom.js\";\nimport p99 from \"./alims-intl.js\";\nimport p100 from \"./codebuddy-intl.js\";\n// Temporarily hidden — no tool calling support (trae SOLO agent / windsurf gRPC skip ToolCallChunk).\n// Re-enable by uncommenting both the import and the array entry below.\n// import p102 from \"./trae.js\";\nimport p103 from \"./zed.js\";\nimport p105 from \"./api-airforce.js\";\nimport p106 from \"./baidu.js\";\nimport p107 from \"./bazaarlink.js\";\nimport p108 from \"./bluesminds.js\";\nimport p109 from \"./kilo-gateway.js\";\nimport p110 from \"./llm7.js\";\nimport p111 from \"./sambanova.js\";\nimport p112 from \"./tencent.js\";\nimport p113 from \"./morph.js\";\n// import p114 from \"./devin-cli.js\";\n// import p104 from \"./windsurf.js\";\nimport p115 from \"./poolside.js\";\nimport p116 from \"./tokenrouter.js\";\nimport p117 from \"./selfhosted-stt.js\";\nimport p118 from \"./selfhosted-tts.js\";\nimport p119 from \"./selfhosted-embedding.js\";\nimport p120 from \"./fish-audio.js\";\nimport p121 from \"./alitp-intl.js\";\n\nexport default [\n p0,\n p1,\n p2,\n p3,\n p4,\n p5,\n p6,\n p7,\n p8,\n p9,\n p10,\n p11,\n p12,\n p13,\n p14,\n p15,\n p16,\n p17,\n p18,\n p19,\n p20,\n p21,\n p22,\n p23,\n p24,\n p25,\n p26,\n p27,\n p28,\n p29,\n p30,\n p31,\n p32,\n p33,\n p34,\n p35,\n p36,\n p37,\n p38,\n p39,\n p40,\n p41,\n p42,\n p43,\n p44,\n p45,\n p46,\n p47,\n p48,\n p49,\n p50,\n p51,\n p52,\n p53,\n p54,\n p55,\n p56,\n p57,\n p58,\n p59,\n p60,\n p61,\n p62,\n p63,\n p64,\n p65,\n p66,\n p67,\n p68,\n p69,\n p70,\n p71,\n p72,\n p73,\n p74,\n p75,\n p77,\n p78,\n p79,\n p80,\n p81,\n p82,\n p83,\n p84,\n p85,\n p86,\n p87,\n p88,\n p89,\n p90,\n p91,\n p92,\n p93,\n p94,\n p95,\n p96,\n p97,\n p98,\n p99,\n p100,\n // p102, // trae — hidden, no tool calling\n p103,\n p105,\n p106,\n p107,\n p108,\n p109,\n p110,\n p111,\n p112,\n p113,\n // p114, // devin-cli — hidden, spawns local agent with shell/fs access\n // p104, // windsurf — hidden, no tool calling\n p115,\n p116,\n p117,\n p118,\n p119,\n p120,\n p121,\n];\n"],"names":[],"mappings":";;;;AAAA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qGAAqG;AACrG,uEAAuE;AACvE,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAEe;IACb,uKAAE;IACF,+JAAE;IACF,iKAAE;IACF,mKAAE;IACF,kKAAE;IACF,oKAAE;IACF,6JAAE;IACF,+KAAE;IACF,gKAAE;IACF,uKAAE;IACF,gKAAG;IACH,gKAAG;IACH,gKAAG;IACH,8JAAG;IACH,8JAAG;IACH,6JAAG;IACH,iKAAG;IACH,wKAAG;IACH,uKAAG;IACH,6JAAG;IACH,8JAAG;IACH,+JAAG;IACH,mKAAG;IACH,6JAAG;IACH,8JAAG;IACH,gKAAG;IACH,gKAAG;IACH,mKAAG;IACH,kKAAG;IACH,2JAAG;IACH,iKAAG;IACH,mKAAG;IACH,iKAAG;IACH,iKAAG;IACH,qKAAG;IACH,8JAAG;IACH,8JAAG;IACH,8JAAG;IACH,iKAAG;IACH,2JAAG;IACH,qKAAG;IACH,qKAAG;IACH,mKAAG;IACH,mKAAG;IACH,4JAAG;IACH,mKAAG;IACH,kKAAG;IACH,6JAAG;IACH,+JAAG;IACH,kKAAG;IACH,sKAAG;IACH,gKAAG;IACH,8JAAG;IACH,4JAAG;IACH,4JAAG;IACH,8JAAG;IACH,uKAAG;IACH,oKAAG;IACH,qKAAG;IACH,+JAAG;IACH,+JAAG;IACH,2JAAG;IACH,kKAAG;IACH,8JAAG;IACH,8JAAG;IACH,uKAAG;IACH,8JAAG;IACH,8JAAG;IACH,sKAAG;IACH,gKAAG;IACH,kKAAG;IACH,yKAAG;IACH,kKAAG;IACH,2KAAG;IACH,8JAAG;IACH,6JAAG;IACH,+JAAG;IACH,gKAAG;IACH,+JAAG;IACH,iKAAG;IACH,+JAAG;IACH,8JAAG;IACH,mKAAG;IACH,uKAAG;IACH,8JAAG;IACH,gKAAG;IACH,6JAAG;IACH,gKAAG;IACH,8JAAG;IACH,+KAAG;IACH,yKAAG;IACH,8JAAG;IACH,yKAAG;IACH,oKAAG;IACH,2JAAG;IACH,sKAAG;IACH,2KAAG;IACH,8JAAG;IACH,qKAAG;IACH,yKAAI;IACJ,0CAA0C;IAC1C,2JAAI;IACJ,uKAAI;IACJ,6JAAI;IACJ,kKAAI;IACJ,kKAAI;IACJ,uKAAI;IACJ,4JAAI;IACJ,iKAAI;IACJ,+JAAI;IACJ,6JAAI;IACJ,uEAAuE;IACvE,8CAA8C;IAC9C,gKAAI;IACJ,mKAAI;IACJ,yKAAI;IACJ,yKAAI;IACJ,+KAAI;IACJ,qKAAI;IACJ,qKAAI;CACL"}},
+ {"offset": {"line": 6242, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/inworld.js"],"sourcesContent":["export default {\n id: \"inworld\",\n alias: \"inworld\",\n display: {\n name: \"Inworld TTS\",\n icon: \"record_voice_over\",\n color: \"#FF6B6B\",\n textIcon: \"IW\",\n website: \"https://inworld.ai\",\n notice: {\n text: \"Free tier: 40 minutes/month TTS. Paid: TTS-1.5 Mini $0.01/min ($15/1M chars), TTS-1.5 Max $0.025/min ($30/1M chars). 270+ voices, 15 languages.\",\n apiKeyUrl: \"https://platform.inworld.ai/api-keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"tts\"\n ],\n ttsConfig: {\n baseUrl: \"https://api.inworld.ai/tts/v1/voice\",\n authType: \"apikey\",\n authHeader: \"basic\",\n format: \"inworld\",\n models: [\n {\n id: \"inworld-tts-1.5-mini\",\n name: \"Inworld TTS 1.5 Mini ($0.01/min)\"\n },\n {\n id: \"inworld-tts-1.5-max\",\n name: \"Inworld TTS 1.5 Max ($0.025/min)\"\n }\n ]\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","serviceKinds","ttsConfig","baseUrl","authHeader","format","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,WAAW;QACTC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACElB,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;SACD;IACH;AACF"}},
+ {"offset": {"line": 6286, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/jina-ai.js"],"sourcesContent":["export default {\n id: \"jina-ai\",\n alias: \"jina\",\n display: {\n name: \"Jina AI\",\n icon: \"blur_on\",\n color: \"#2563EB\",\n textIcon: \"JA\",\n website: \"https://jina.ai\",\n notice: {\n text: \"10M free tokens on signup (non-commercial), no credit card required.\",\n apiKeyUrl: \"https://jina.ai/?sui=apikey\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"embedding\"\n ],\n embeddingConfig: {\n baseUrl: \"https://api.jina.ai/v1/embeddings\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n models: [\n {\n id: \"jina-embeddings-v3\",\n name: \"Jina Embeddings v3\",\n dimensions: 1024\n },\n {\n id: \"jina-embeddings-v2-base-en\",\n name: \"Jina Embeddings v2 Base EN\",\n dimensions: 768\n },\n {\n id: \"jina-embeddings-v2-base-code\",\n name: \"Jina Embeddings v2 Base Code\",\n dimensions: 768\n }\n ]\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","serviceKinds","embeddingConfig","baseUrl","authHeader","models","dimensions"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,iBAAiB;QACfC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;YACN;gBACEjB,IAAI;gBACJG,MAAM;gBACNe,YAAY;YACd;YACA;gBACElB,IAAI;gBACJG,MAAM;gBACNe,YAAY;YACd;YACA;gBACElB,IAAI;gBACJG,MAAM;gBACNe,YAAY;YACd;SACD;IACH;AACF"}},
+ {"offset": {"line": 6336, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/jina-reader.js"],"sourcesContent":["export default {\n id: \"jina-reader\",\n alias: \"jina-reader\",\n display: {\n name: \"Jina Reader\",\n icon: \"menu_book\",\n color: \"#000000\",\n textIcon: \"JR\",\n website: \"https://jina.ai/reader\",\n notice: {\n apiKeyUrl: \"https://jina.ai/?sui=apikey\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webFetch\"\n ],\n fetchConfig: {\n baseUrl: \"https://r.jina.ai\",\n method: \"GET\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n costPerQuery: 0,\n freeMonthlyQuota: 1000000,\n formats: [\n \"markdown\",\n \"text\",\n \"html\"\n ],\n maxCharacters: 200000,\n timeoutMs: 30000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","fetchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","formats","maxCharacters","timeoutMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,aAAa;QACXC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,SAAS;YACP;YACA;YACA;SACD;QACDC,eAAe;QACfC,WAAW;IACb;AACF"}},
+ {"offset": {"line": 6378, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/kilo-gateway.js"],"sourcesContent":["export default {\n id: \"kilo-gateway\",\n alias: \"kgw\",\n aliases: [\n \"kilo-gateway\",\n \"kilogateway\",\n ],\n uiAlias: \"kgw\",\n category: \"freeTier\",\n display: {\n name: \"Kilo Gateway\",\n icon: \"login\",\n color: \"#8B5CF6\",\n textIcon: \"KG\",\n website: \"https://kilo.ai\",\n notice: {\n apiKeyUrl: \"https://kilo.ai/dashboard?tab=apiKeys\",\n },\n },\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://api.kilo.ai/api/gateway/chat/completions\",\n validateUrl: \"https://api.kilo.ai/api/gateway/models\",\n },\n models: [\n { id: \"kilo-auto/free\", name: \"Kilo Auto Free\", contextLength: 256000 },\n { id: \"nvidia/nemotron-3-super-120b-a12b:free\", name: \"Nemotron 3 Super 120B (Free)\", contextLength: 262144 },\n { id: \"nvidia/nemotron-3-ultra-550b-a55b:free\", name: \"Nemotron 3 Ultra 550B (Free)\", contextLength: 1000000 },\n { id: \"kwaipilot/kat-coder-pro-v2.5:free\", name: \"Kat Coder Pro v2.5 (Free)\", contextLength: 256000 },\n { id: \"kilo-auto/frontier\", name: \"Kilo Auto Frontier\", contextLength: 1000000 },\n { id: \"kilo-auto/balanced\", name: \"Kilo Auto Balanced\", contextLength: 1000000 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","category","display","name","icon","color","textIcon","website","notice","apiKeyUrl","authType","authModes","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACP;QACA;KACD;IACDC,SAAS;IACTC,UAAU;IACVC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAkBM,MAAM;YAAkBa,eAAe;QAAO;QACtE;YAAEnB,IAAI;YAA0CM,MAAM;YAAgCa,eAAe;QAAO;QAC5G;YAAEnB,IAAI;YAA0CM,MAAM;YAAgCa,eAAe;QAAQ;QAC7G;YAAEnB,IAAI;YAAqCM,MAAM;YAA6Ba,eAAe;QAAO;QACpG;YAAEnB,IAAI;YAAsBM,MAAM;YAAsBa,eAAe;QAAQ;QAC/E;YAAEnB,IAAI;YAAsBM,MAAM;YAAsBa,eAAe;QAAQ;KAChF;AACH"}},
+ {"offset": {"line": 6446, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/kilocode.js"],"sourcesContent":["export default {\n id: \"kilocode\",\n priority: 70,\n alias: \"kc\",\n uiAlias: \"kc\",\n display: {\n name: \"Kilo Code\",\n icon: \"code\",\n color: \"#FF6B35\",\n textIcon: \"KC\",\n website: \"https://kilocode.ai\",\n notice: {\n signupUrl: \"https://kilocode.ai\",\n },\n },\n category: \"oauth\",\n transport: {\n baseUrl: \"https://api.kilo.ai/api/openrouter/chat/completions\",\n headers: {},\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n hooks: [\n \"kilocodeOrg\",\n ],\n },\n },\n models: [\n { id: \"anthropic/claude-sonnet-4-20250514\", name: \"Claude Sonnet 4\" },\n { id: \"anthropic/claude-opus-4-20250514\", name: \"Claude Opus 4\" },\n { id: \"google/gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"google/gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"openai/gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"openai/o3\", name: \"o3\" },\n { id: \"deepseek/deepseek-chat\", name: \"DeepSeek Chat\" },\n { id: \"deepseek/deepseek-reasoner\", name: \"DeepSeek Reasoner\" },\n ],\n // Kilo Code proxies the OpenRouter catalog (334 models at time of writing),\n // so the hardcoded list above is only a fallback. Surfacing the full catalog\n // requires a fetcher + passthroughModels, matching how openrouter.js is set up.\n // Without these, only the 8 hardcoded models appear in the combo model picker,\n // hiding dynamic models like cohere/north-mini-code:free and poolside/laguna-m.1:free.\n modelsFetcher: { url: \"https://api.kilo.ai/api/gateway/models\", type: \"openrouter-free\" },\n passthroughModels: true,\n oauth: {\n apiBaseUrl: \"https://api.kilo.ai\",\n initiateUrl: \"https://api.kilo.ai/api/device-auth/codes\",\n pollUrlBase: \"https://api.kilo.ai/api/device-auth/codes\",\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","textIcon","website","notice","signupUrl","category","transport","baseUrl","headers","auth","combined","header","scheme","hooks","models","modelsFetcher","url","type","passthroughModels","oauth","apiBaseUrl","initiateUrl","pollUrlBase"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,OAAO;gBACL;aACD;QACH;IACF;IACAC,QAAQ;QACN;YAAErB,IAAI;YAAsCK,MAAM;QAAkB;QACpE;YAAEL,IAAI;YAAoCK,MAAM;QAAgB;QAChE;YAAEL,IAAI;YAAyBK,MAAM;QAAiB;QACtD;YAAEL,IAAI;YAA2BK,MAAM;QAAmB;QAC1D;YAAEL,IAAI;YAAkBK,MAAM;QAAU;QACxC;YAAEL,IAAI;YAAaK,MAAM;QAAK;QAC9B;YAAEL,IAAI;YAA0BK,MAAM;QAAgB;QACtD;YAAEL,IAAI;YAA8BK,MAAM;QAAoB;KAC/D;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,gFAAgF;IAChF,+EAA+E;IAC/E,uFAAuF;IACvFiB,eAAe;QAAEC,KAAK;QAA0CC,MAAM;IAAkB;IACxFC,mBAAmB;IACnBC,OAAO;QACLC,YAAY;QACZC,aAAa;QACbC,aAAa;IACf;AACF"}},
+ {"offset": {"line": 6532, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/kimchi.js"],"sourcesContent":["export default {\n id: \"kimchi\",\n priority: 95,\n alias: \"kimchi\",\n uiAlias: \"kimchi\",\n display: {\n name: \"Kimchi\",\n icon: \"restaurant\",\n color: \"#FF521D\",\n textIcon: \"KC\",\n website: \"https://kimchi.dev\",\n notice: {\n signupUrl: \"https://app.kimchi.dev\",\n },\n },\n category: \"freeTier\",\n authModes: [\"oauth\", \"apikey\"],\n hasOAuth: true,\n transport: {\n baseUrl: \"https://llm.kimchi.dev/openai/v1/chat/completions\",\n format: \"openai\",\n headers: {\n \"User-Agent\": \"kimchi/0.1.50\",\n },\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \"bearer\",\n },\n },\n models: [\n { id: \"minimax-m3\", name: \"MiniMax-M3\" },\n { id: \"kimi-k2.7\", name: \"Kimi-K2.7\" },\n { id: \"kimi-k2.6\", name: \"Kimi-K2.6\" },\n { id: \"kimi-k2.5\", name: \"Kimi-K2.5\" },\n { id: \"nemotron-3-ultra-fp4\", name: \"Nemotron 3 Ultra FP4\" },\n { id: \"minimax-m2.7\", name: \"MiniMax-M2.7\" },\n { id: \"claude-opus-4-6\", name: \"Claude Opus 4.6\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n ],\n serviceKinds: [\"llm\", \"imageToText\"],\n oauth: {\n webAppUrl: \"https://app.kimchi.dev\",\n validationUrl: \"https://api.cast.ai/v1/llm/openai/supported-providers\",\n userInfoUrl: \"https://app.kimchi.dev/api/v1/me\",\n modelsUrl: \"https://llm.kimchi.dev/v1/models/metadata?include_in_cli=true\",\n },\n passthroughModels: true,\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","textIcon","website","notice","signupUrl","category","authModes","hasOAuth","transport","baseUrl","format","headers","auth","combined","header","scheme","models","serviceKinds","oauth","webAppUrl","validationUrl","userInfoUrl","modelsUrl","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;QAAS;KAAS;IAC9BC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,SAAS;YACP,cAAc;QAChB;QACAC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;IACF;IACAC,QAAQ;QACN;YAAEvB,IAAI;YAAcK,MAAM;QAAa;QACvC;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAwBK,MAAM;QAAuB;QAC3D;YAAEL,IAAI;YAAgBK,MAAM;QAAe;QAC3C;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAAqBK,MAAM;QAAoB;KACtD;IACDmB,cAAc;QAAC;QAAO;KAAc;IACpCC,OAAO;QACLC,WAAW;QACXC,eAAe;QACfC,aAAa;QACbC,WAAW;IACb;IACAC,mBAAmB;AACrB"}},
+ {"offset": {"line": 6619, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/kimi.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\n// Dual auth (same pattern as xai): OAuth = Kimi Code subscription (device code),\n// API key = platform.moonshot / api.kimi.com. Transport is shared.\n// CLIProxyAPI parity: client_id, auth.kimi.com device+token, X-Msh-* headers, device_id.\nexport default {\n id: \"kimi\",\n priority: 170,\n alias: \"kimi\",\n // Legacy id + short alias from former kimi-coding registry entry\n aliases: [\"kimi-coding\", \"kmc\"],\n display: {\n name: \"Kimi\",\n icon: \"psychology\",\n color: \"#1E3A8A\",\n textIcon: \"KM\",\n website: \"https://kimi.moonshot.cn\",\n notice: {\n apiKeyUrl: \"https://platform.moonshot.ai/console/api-keys\",\n signupUrl: \"https://www.kimi.com/code\",\n },\n },\n category: \"oauth\",\n authModes: [\"oauth\", \"apikey\"],\n hasOAuth: true,\n transport: {\n baseUrl: \"https://api.kimi.com/coding/v1/messages\",\n format: \"claude\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n clientId: \"17e5f671-d194-4dfb-9706-5516cb48c098\",\n tokenUrl: \"https://auth.kimi.com/api/oauth/token\",\n refreshUrl: \"https://auth.kimi.com/api/oauth/token\",\n auth: {\n combined: true,\n header: \"x-api-key\",\n scheme: \"raw\",\n hooks: [\"kimiHeaders\"],\n },\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n transports: [\n {\n format: \"openai\",\n baseUrl: \"https://api.kimi.com/coding/v1/chat/completions\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\", hooks: [\"kimiHeaders\"] },\n },\n {\n format: \"claude\",\n baseUrl: \"https://api.kimi.com/coding/v1/messages\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\", hooks: [\"kimiHeaders\"] },\n },\n ],\n models: [\n // Flagship K3 — platform.kimi.ai id `kimi-k3`, Kimi Code OAuth id `k3` (up to 1M)\n { id: \"kimi-k3\", name: \"Kimi K3\" },\n { id: \"k3\", name: \"Kimi K3 (Code)\" },\n // Kimi Code subscription stable ids (map to K2.7 Code backend)\n { id: \"kimi-for-coding\", name: \"Kimi for Coding\" },\n { id: \"kimi-for-coding-highspeed\", name: \"Kimi for Coding Highspeed\" },\n // Pay-as-you-go platform ids\n { id: \"kimi-k2.7-code\", name: \"Kimi K2.7 Code\" },\n { id: \"kimi-k2.7-code-highspeed\", name: \"Kimi K2.7 Code Highspeed\" },\n { id: \"kimi-k2.6\", name: \"Kimi K2.6\" },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"kimi-k2.5-thinking\", name: \"Kimi K2.5 Thinking\" },\n { id: \"kimi-latest\", name: \"Kimi Latest\" },\n ],\n serviceKinds: [\"llm\", \"webSearch\"],\n searchViaChat: {\n defaultModel: \"kimi-k3\",\n endpoint: \"https://api.moonshot.cn/v1/chat/completions\",\n pricingUrl: \"https://platform.kimi.ai/docs/pricing/chat\",\n },\n oauth: {\n clientId: \"17e5f671-d194-4dfb-9706-5516cb48c098\",\n deviceCodeUrl: \"https://auth.kimi.com/api/oauth/device_authorization\",\n tokenUrl: \"https://auth.kimi.com/api/oauth/token\",\n refreshUrl: \"https://auth.kimi.com/api/oauth/token\",\n // CLIProxyAPI refreshThresholdSeconds = 300\n refreshLeadMs: 300000,\n authorizeDeviceUrl: \"https://www.kimi.com/code/authorize_device\",\n },\n features: {\n usage: true,\n // API-key connections also hit /v1/usages (x-api-key) — need usageApikey\n // so isUsageEligible + /api/usage allow non-oauth authType.\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","aliases","display","name","icon","color","textIcon","website","notice","apiKeyUrl","signupUrl","category","authModes","hasOAuth","transport","baseUrl","format","urlSuffix","headers","clientId","tokenUrl","refreshUrl","auth","combined","header","scheme","hooks","transports","models","serviceKinds","searchViaChat","defaultModel","endpoint","pricingUrl","oauth","deviceCodeUrl","refreshLeadMs","authorizeDeviceUrl","features","usage","usageApikey"],"mappings":";;;;AAAA;;uCAKe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACP,iEAAiE;IACjEC,SAAS;QAAC;QAAe;KAAM;IAC/BC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;YACXC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;QAAS;KAAS;IAC9BC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,SAAS;YAAE,GAAG,6JAAkB;QAAC;QACjCC,UAAU;QACVC,UAAU;QACVC,YAAY;QACZC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,OAAO;gBAAC;aAAc;QACxB;IACF;IACA,uFAAuF;IACvFC,YAAY;QACV;YACEX,QAAQ;YACRD,SAAS;YACTO,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;gBAAUC,OAAO;oBAAC;iBAAc;YAAC;QAC5F;QACA;YACEV,QAAQ;YACRD,SAAS;YACTE,WAAW;YACXC,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCI,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;gBAAOC,OAAO;oBAAC;iBAAc;YAAC;QACrF;KACD;IACDE,QAAQ;QACN,kFAAkF;QAClF;YAAE9B,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAMK,MAAM;QAAiB;QACnC,+DAA+D;QAC/D;YAAEL,IAAI;YAAmBK,MAAM;QAAkB;QACjD;YAAEL,IAAI;YAA6BK,MAAM;QAA4B;QACrE,6BAA6B;QAC7B;YAAEL,IAAI;YAAkBK,MAAM;QAAiB;QAC/C;YAAEL,IAAI;YAA4BK,MAAM;QAA2B;QACnE;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAsBK,MAAM;QAAqB;QACvD;YAAEL,IAAI;YAAeK,MAAM;QAAc;KAC1C;IACD0B,cAAc;QAAC;QAAO;KAAY;IAClCC,eAAe;QACbC,cAAc;QACdC,UAAU;QACVC,YAAY;IACd;IACAC,OAAO;QACLf,UAAU;QACVgB,eAAe;QACff,UAAU;QACVC,YAAY;QACZ,4CAA4C;QAC5Ce,eAAe;QACfC,oBAAoB;IACtB;IACAC,UAAU;QACRC,OAAO;QACP,yEAAyE;QACzE,4DAA4D;QAC5DC,aAAa;IACf;AACF"}},
+ {"offset": {"line": 6775, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/kiro.js"],"sourcesContent":["export default {\n id: \"kiro\",\n priority: 10,\n alias: \"kr\",\n uiAlias: \"kr\",\n display: {\n name: \"Kiro AI\",\n icon: \"psychology_alt\",\n color: \"#FF6B35\",\n website: \"https://kiro.dev\",\n notice: {\n signupUrl: \"https://kiro.dev\",\n },\n deprecated: true,\n deprecationNotice: \"RISK_NOTICE\",\n },\n category: \"free\",\n transport: {\n baseUrl: \"https://runtime.us-east-1.kiro.dev/generateAssistantResponse\",\n baseUrls: [\n \"https://runtime.us-east-1.kiro.dev/generateAssistantResponse\",\n \"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse\",\n \"https://q.us-east-1.amazonaws.com/generateAssistantResponse\",\n ],\n format: \"kiro\",\n retry: {\n \"429\": 0,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/vnd.amazon.eventstream\",\n \"User-Agent\": \"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0\",\n \"X-Amz-User-Agent\": \"aws-sdk-js/3.0.0 kiro-ide/1.0.0\",\n },\n tokenUrl: \"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken\",\n authUrl: \"https://prod.us-east-1.auth.desktop.kiro.dev\",\n usage: {\n cwHost: \"https://codewhisperer.us-east-1.amazonaws.com\",\n qHost: \"https://q.us-east-1.amazonaws.com\",\n limitsPath: \"/getUsageLimits\",\n },\n },\n models: [\n // Opus (added per kiro.dev/changelog/models and kiro.dev/docs/models)\n { id: \"claude-opus-5\", name: \"Claude Opus 5\" },\n { id: \"claude-opus-5-thinking\", name: \"Claude Opus 5 (Thinking)\" },\n { id: \"claude-opus-5-agentic\", name: \"Claude Opus 5 (Agentic)\" },\n { id: \"claude-opus-5-thinking-agentic\", name: \"Claude Opus 5 (Thinking + Agentic)\" },\n { id: \"claude-opus-4.8\", name: \"Claude Opus 4.8\" },\n { id: \"claude-opus-4.8-thinking\", name: \"Claude Opus 4.8 (Thinking)\" },\n { id: \"claude-opus-4.8-agentic\", name: \"Claude Opus 4.8 (Agentic)\" },\n { id: \"claude-opus-4.8-thinking-agentic\", name: \"Claude Opus 4.8 (Thinking + Agentic)\" },\n { id: \"claude-opus-4.7\", name: \"Claude Opus 4.7\" },\n { id: \"claude-opus-4.7-thinking\", name: \"Claude Opus 4.7 (Thinking)\" },\n { id: \"claude-opus-4.7-agentic\", name: \"Claude Opus 4.7 (Agentic)\" },\n { id: \"claude-opus-4.7-thinking-agentic\", name: \"Claude Opus 4.7 (Thinking + Agentic)\" },\n { id: \"claude-opus-4.5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-opus-4.5-thinking\", name: \"Claude Opus 4.5 (Thinking)\" },\n { id: \"claude-opus-4.5-agentic\", name: \"Claude Opus 4.5 (Agentic)\" },\n { id: \"claude-opus-4.5-thinking-agentic\", name: \"Claude Opus 4.5 (Thinking + Agentic)\" },\n // Sonnet\n { id: \"claude-sonnet-5\", name: \"Claude Sonnet 5\" },\n { id: \"claude-sonnet-4.5\", name: \"Claude Sonnet 4.5\" },\n // Haiku\n { id: \"claude-haiku-4.5\", name: \"Claude Haiku 4.5\" },\n // Non-Anthropic\n { id: \"deepseek-3.2\", name: \"DeepSeek 3.2\", strip: [\"image\",\"audio\"] },\n { id: \"qwen3-coder-next\", name: \"Qwen3 Coder Next\", strip: [\"image\",\"audio\"] },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"gpt-5.6-sol\", name: \"GPT 5.6 Sol\", contextLength: 272000, rateMultiplier: 2.4, upstreamModelId: \"gpt-5.6-sol\", description: \"Experimental preview of OpenAI GPT 5.6 Sol with 272k context window\" },\n { id: \"gpt-5.6-terra\", name: \"GPT 5.6 Terra\", contextLength: 272000, rateMultiplier: 1.2, upstreamModelId: \"gpt-5.6-terra\", description: \"Experimental preview of OpenAI GPT 5.6 Terra with 272k context window\" },\n { id: \"gpt-5.6-luna\", name: \"GPT 5.6 Luna\", contextLength: 272000, rateMultiplier: 0.6, upstreamModelId: \"gpt-5.6-luna\", description: \"Experimental preview of OpenAI GPT 5.6 Luna with 272k context window\" },\n // Thinking variants\n { id: \"claude-sonnet-5-thinking\", name: \"Claude Sonnet 5 (Thinking)\" },\n { id: \"claude-sonnet-4.5-thinking\", name: \"Claude Sonnet 4.5 (Thinking)\" },\n { id: \"claude-haiku-4.5-thinking\", name: \"Claude Haiku 4.5 (Thinking)\" },\n { id: \"gpt-5.6-sol-thinking\", name: \"GPT 5.6 Sol (Thinking)\", contextLength: 272000, rateMultiplier: 2.4, upstreamModelId: \"gpt-5.6-sol\", description: \"Experimental preview of OpenAI GPT 5.6 Sol with 272k context window\" },\n { id: \"gpt-5.6-terra-thinking\", name: \"GPT 5.6 Terra (Thinking)\", contextLength: 272000, rateMultiplier: 1.2, upstreamModelId: \"gpt-5.6-terra\", description: \"Experimental preview of OpenAI GPT 5.6 Terra with 272k context window\" },\n { id: \"gpt-5.6-luna-thinking\", name: \"GPT 5.6 Luna (Thinking)\", contextLength: 272000, rateMultiplier: 0.6, upstreamModelId: \"gpt-5.6-luna\", description: \"Experimental preview of OpenAI GPT 5.6 Luna with 272k context window\" },\n // Agentic variants\n { id: \"claude-sonnet-5-agentic\", name: \"Claude Sonnet 5 (Agentic)\" },\n { id: \"claude-sonnet-4.5-agentic\", name: \"Claude Sonnet 4.5 (Agentic)\" },\n { id: \"claude-haiku-4.5-agentic\", name: \"Claude Haiku 4.5 (Agentic)\" },\n { id: \"gpt-5.6-sol-agentic\", name: \"GPT 5.6 Sol (Agentic)\", contextLength: 272000, rateMultiplier: 2.4, upstreamModelId: \"gpt-5.6-sol\", description: \"Experimental preview of OpenAI GPT 5.6 Sol with 272k context window\" },\n { id: \"gpt-5.6-terra-agentic\", name: \"GPT 5.6 Terra (Agentic)\", contextLength: 272000, rateMultiplier: 1.2, upstreamModelId: \"gpt-5.6-terra\", description: \"Experimental preview of OpenAI GPT 5.6 Terra with 272k context window\" },\n { id: \"gpt-5.6-luna-agentic\", name: \"GPT 5.6 Luna (Agentic)\", contextLength: 272000, rateMultiplier: 0.6, upstreamModelId: \"gpt-5.6-luna\", description: \"Experimental preview of OpenAI GPT 5.6 Luna with 272k context window\" },\n // Thinking + Agentic variants\n { id: \"claude-sonnet-5-thinking-agentic\", name: \"Claude Sonnet 5 (Thinking + Agentic)\" },\n { id: \"claude-sonnet-4.5-thinking-agentic\", name: \"Claude Sonnet 4.5 (Thinking + Agentic)\" },\n { id: \"claude-haiku-4.5-thinking-agentic\", name: \"Claude Haiku 4.5 (Thinking + Agentic)\" },\n { id: \"gpt-5.6-sol-thinking-agentic\", name: \"GPT 5.6 Sol (Thinking + Agentic)\", contextLength: 272000, rateMultiplier: 2.4, upstreamModelId: \"gpt-5.6-sol\", description: \"Experimental preview of OpenAI GPT 5.6 Sol with 272k context window\" },\n { id: \"gpt-5.6-terra-thinking-agentic\", name: \"GPT 5.6 Terra (Thinking + Agentic)\", contextLength: 272000, rateMultiplier: 1.2, upstreamModelId: \"gpt-5.6-terra\", description: \"Experimental preview of OpenAI GPT 5.6 Terra with 272k context window\" },\n { id: \"gpt-5.6-luna-thinking-agentic\", name: \"GPT 5.6 Luna (Thinking + Agentic)\", contextLength: 272000, rateMultiplier: 0.6, upstreamModelId: \"gpt-5.6-luna\", description: \"Experimental preview of OpenAI GPT 5.6 Luna with 272k context window\" },\n ],\n oauth: {\n ssoOidcEndpoint: \"https://oidc.us-east-1.amazonaws.com\",\n registerClientUrl: \"https://oidc.us-east-1.amazonaws.com/client/register\",\n deviceAuthUrl: \"https://oidc.us-east-1.amazonaws.com/device_authorization\",\n tokenUrl: \"https://oidc.us-east-1.amazonaws.com/token\",\n startUrl: \"https://view.awsapps.com/start\",\n clientName: \"kiro-oauth-client\",\n clientType: \"public\",\n scopes: [\n \"codewhisperer:completions\",\n \"codewhisperer:analysis\",\n \"codewhisperer:conversations\",\n ],\n grantTypes: [\n \"urn:ietf:params:oauth:grant-type:device_code\",\n \"refresh_token\",\n ],\n issuerUrl: \"https://identitycenter.amazonaws.com/ssoins-722374e8c3c8e6c6\",\n socialAuthEndpoint: \"https://prod.us-east-1.auth.desktop.kiro.dev\",\n socialLoginUrl: \"https://prod.us-east-1.auth.desktop.kiro.dev/login\",\n socialTokenUrl: \"https://prod.us-east-1.auth.desktop.kiro.dev/oauth/token\",\n socialRefreshUrl: \"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken\",\n authMethods: [\n \"builder-id\",\n \"idc\",\n \"google\",\n \"github\",\n \"import\",\n ],\n },\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","deprecated","deprecationNotice","category","transport","baseUrl","baseUrls","format","retry","headers","Accept","tokenUrl","authUrl","usage","cwHost","qHost","limitsPath","models","strip","contextLength","rateMultiplier","upstreamModelId","description","oauth","ssoOidcEndpoint","registerClientUrl","deviceAuthUrl","startUrl","clientName","clientType","scopes","grantTypes","issuerUrl","socialAuthEndpoint","socialLoginUrl","socialTokenUrl","socialRefreshUrl","authMethods","features","usageApikey"],"mappings":"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"}},
+ {"offset": {"line": 7101, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/linkup.js"],"sourcesContent":["export default {\n id: \"linkup\",\n alias: \"linkup\",\n display: {\n name: \"Linkup\",\n icon: \"link\",\n color: \"#0EA5E9\",\n textIcon: \"LK\",\n website: \"https://linkup.so\",\n notice: {\n apiKeyUrl: \"https://app.linkup.so/api-keys\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\"\n ],\n searchConfig: {\n baseUrl: \"https://api.linkup.so/v1/search\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n costPerQuery: 0.005,\n freeMonthlyQuota: 1000,\n searchTypes: [\n \"web\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 50,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 7143, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/llm7.js"],"sourcesContent":["export default {\n id: \"llm7\",\n alias: \"llm7\",\n aliases: [\n \"llm-7\",\n ],\n uiAlias: \"llm7\",\n display: {\n name: \"LLM7\",\n icon: \"pool\",\n color: \"#7C3AED\",\n textIcon: \"L7\",\n website: \"https://llm7.io\",\n notice: {\n apiKeyUrl: \"https://llm7.io\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n authModes: [\n \"apikey\",\n ],\n transport: {\n baseUrl: \"https://api.llm7.io/v1/chat/completions\",\n validateUrl: \"https://api.llm7.io/v1/models\",\n },\n models: [\n { id: \"gpt-5.5\", name: \"GPT-5.5 (LLM7)\", contextLength: 1050000 },\n { id: \"claude-opus-5\", name: \"Claude Opus 5 (LLM7)\", contextLength: 1000000 },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek V4 Flash (LLM7)\", contextLength: 1000000 },\n { id: \"grok-4.5\", name: \"Grok 4.5 (LLM7)\", contextLength: 500000 },\n { id: \"kimi-k3\", name: \"Kimi K3 (LLM7)\", contextLength: 1000000 },\n ],\n passthroughModels: true,\n};\n"],"names":["id","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models","contextLength","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACT;KACD;IACDC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAWK,MAAM;YAAkBc,eAAe;QAAQ;QAChE;YAAEnB,IAAI;YAAiBK,MAAM;YAAwBc,eAAe;QAAQ;QAC5E;YAAEnB,IAAI;YAAqBK,MAAM;YAA4Bc,eAAe;QAAQ;QACpF;YAAEnB,IAAI;YAAYK,MAAM;YAAmBc,eAAe;QAAO;QACjE;YAAEnB,IAAI;YAAWK,MAAM;YAAkBc,eAAe;QAAQ;KACjE;IACDC,mBAAmB;AACrB"}},
+ {"offset": {"line": 7206, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/local-device.js"],"sourcesContent":["export default {\n id: \"local-device\",\n alias: \"local-device\",\n display: {\n name: \"Local Device\",\n icon: \"speaker\",\n color: \"#64748B\",\n textIcon: \"LD\"\n },\n category: \"freeTier\",\n authType: \"none\",\n serviceKinds: [\n \"tts\"\n ],\n mediaPriority: 5,\n noAuth: true,\n ttsConfig: {\n baseUrl: \"local-device\",\n authType: \"none\",\n authHeader: \"none\",\n format: \"local-device\",\n models: []\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","category","authType","serviceKinds","mediaPriority","noAuth","ttsConfig","baseUrl","authHeader","format","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;IACZ;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,eAAe;IACfC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTL,UAAU;QACVM,YAAY;QACZC,QAAQ;QACRC,QAAQ,EAAE;IACZ;AACF"}},
+ {"offset": {"line": 7238, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/mimo-free.js"],"sourcesContent":["// Xiaomi ended the free MiMo channel (\"MiMo free API service has ended\").\n// Hidden until/unless a replacement (OAuth MiMo Platform) is wired.\nexport default {\n id: \"mimo-free\",\n hidden: true,\n priority: 50,\n hasFree: true,\n alias: \"mmf\",\n uiAlias: \"mmf\",\n display: {\n name: \"MiMo Code Free\",\n icon: \"smart_toy\",\n color: \"#FF6900\",\n textIcon: \"MF\",\n },\n category: \"free\",\n noAuth: true,\n transport: {\n baseUrl: \"https://api.xiaomimimo.com/api/free-ai/openai/chat\",\n noAuth: true,\n },\n models: [\n { id: \"mimo-auto\", name: \"MiMo Auto\" },\n ],\n modelsFetcher: { url: \"https://models.dev/api.json\", type: \"mimo-free\" },\n passthroughModels: true,\n};\n"],"names":["id","hidden","priority","hasFree","alias","uiAlias","display","name","icon","color","textIcon","category","noAuth","transport","baseUrl","models","modelsFetcher","url","type","passthroughModels"],"mappings":"AAAA,0EAA0E;AAC1E,oEAAoE;;;;;uCACrD;IACbA,IAAI;IACJC,QAAQ;IACRC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;IACZ;IACAC,UAAU;IACVC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTF,QAAQ;IACV;IACAG,QAAQ;QACN;YAAEf,IAAI;YAAaO,MAAM;QAAY;KACtC;IACDS,eAAe;QAAEC,KAAK;QAA+BC,MAAM;IAAY;IACvEC,mBAAmB;AACrB"}},
+ {"offset": {"line": 7279, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/minimax-cn.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"minimax-cn\",\n priority: 190,\n alias: \"minimax-cn\",\n display: {\n name: \"Minimax (China)\",\n icon: \"memory\",\n color: \"#DC2626\",\n textIcon: \"MC\",\n website: \"https://www.minimaxi.com\",\n notice: {\n apiKeyUrl: \"https://platform.minimaxi.com/user-center/basic-information/interface-key\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.minimaxi.com/anthropic/v1/messages\",\n format: \"claude\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n quirks: {\n dropOutputConfig: true,\n },\n reasoningInject: {\n scope: \"all\",\n },\n auth: {\n combined: true,\n header: \"x-api-key\",\n scheme: \"raw\",\n },\n usage: {\n urls: [\n \"https://www.minimaxi.com/v1/api/openplatform/coding_plan/remains\",\n \"https://api.minimaxi.com/v1/api/openplatform/coding_plan/remains\",\n ],\n },\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n transports: [\n {\n format: \"openai\",\n baseUrl: \"https://api.minimaxi.com/v1/chat/completions\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" },\n },\n {\n format: \"claude\",\n baseUrl: \"https://api.minimaxi.com/anthropic/v1/messages\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\" },\n },\n ],\n models: [\n { id: \"MiniMax-M3\", name: \"MiniMax M3\", targetFormat: \"claude\" },\n { id: \"MiniMax-M2.7\", name: \"MiniMax M2.7\" },\n { id: \"MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"MiniMax-M2.1\", name: \"MiniMax M2.1\" },\n { id: \"speech-2.8-hd\", name: \"Speech 2.8 HD\", kind: \"tts\" },\n { id: \"speech-2.8-turbo\", name: \"Speech 2.8 Turbo\", kind: \"tts\" },\n { id: \"speech-2.6-hd\", name: \"Speech 2.6 HD\", kind: \"tts\" },\n { id: \"speech-2.6-turbo\", name: \"Speech 2.6 Turbo\", kind: \"tts\" },\n { id: \"speech-02-hd\", name: \"Speech 02 HD\", kind: \"tts\" },\n { id: \"speech-02-turbo\", name: \"Speech 02 Turbo\", kind: \"tts\" },\n { id: \"speech-01-hd\", name: \"Speech 01 HD\", kind: \"tts\" },\n { id: \"speech-01-turbo\", name: \"Speech 01 Turbo\", kind: \"tts\" },\n ],\n serviceKinds: [\"llm\",\"tts\"],\n ttsConfig: { baseUrl: \"https://api.minimaxi.com/v1/t2a_v2\", authType: \"apikey\", authHeader: \"bearer\", format: \"minimax-tts\" },\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","format","urlSuffix","headers","quirks","dropOutputConfig","reasoningInject","scope","auth","combined","header","scheme","usage","urls","transports","models","targetFormat","kind","serviceKinds","ttsConfig","authType","authHeader","features","usageApikey"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,SAAS;YAAE,GAAG,6JAAkB;QAAC;QACjCC,QAAQ;YACNC,kBAAkB;QACpB;QACAC,iBAAiB;YACfC,OAAO;QACT;QACAC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;QACAC,OAAO;YACLC,MAAM;gBACJ;gBACA;aACD;QACH;IACF;IACA,uFAAuF;IACvFC,YAAY;QACV;YACEb,QAAQ;YACRD,SAAS;YACTQ,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QACpE;QACA;YACEV,QAAQ;YACRD,SAAS;YACTE,WAAW;YACXC,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCK,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;YAAM;QAC7D;KACD;IACDI,QAAQ;QACN;YAAE5B,IAAI;YAAcI,MAAM;YAAcyB,cAAc;QAAS;QAC/D;YAAE7B,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAiBI,MAAM;YAAiB0B,MAAM;QAAM;QAC1D;YAAE9B,IAAI;YAAoBI,MAAM;YAAoB0B,MAAM;QAAM;QAChE;YAAE9B,IAAI;YAAiBI,MAAM;YAAiB0B,MAAM;QAAM;QAC1D;YAAE9B,IAAI;YAAoBI,MAAM;YAAoB0B,MAAM;QAAM;QAChE;YAAE9B,IAAI;YAAgBI,MAAM;YAAgB0B,MAAM;QAAM;QACxD;YAAE9B,IAAI;YAAmBI,MAAM;YAAmB0B,MAAM;QAAM;QAC9D;YAAE9B,IAAI;YAAgBI,MAAM;YAAgB0B,MAAM;QAAM;QACxD;YAAE9B,IAAI;YAAmBI,MAAM;YAAmB0B,MAAM;QAAM;KAC/D;IACDC,cAAc;QAAC;QAAM;KAAM;IAC3BC,WAAW;QAAEnB,SAAS;QAAsCoB,UAAU;QAAUC,YAAY;QAAUpB,QAAQ;IAAc;IAC5HqB,UAAU;QACRV,OAAO;QACPW,aAAa;IACf;AACF"}},
+ {"offset": {"line": 7428, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/minimax.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"minimax\",\n priority: 90,\n alias: \"minimax\",\n display: {\n name: \"Minimax Coding\",\n icon: \"memory\",\n color: \"#7C3AED\",\n textIcon: \"MM\",\n website: \"https://www.minimaxi.com\",\n notice: {\n apiKeyUrl: \"https://platform.minimaxi.com/user-center/basic-information/interface-key\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.minimax.io/anthropic/v1/messages\",\n format: \"claude\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n quirks: {\n dropOutputConfig: true,\n },\n reasoningInject: {\n scope: \"all\",\n },\n auth: {\n combined: true,\n header: \"x-api-key\",\n scheme: \"raw\",\n },\n usage: {\n urls: [\n \"https://www.minimax.io/v1/token_plan/remains\",\n \"https://api.minimax.io/v1/api/openplatform/coding_plan/remains\",\n ],\n },\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n transports: [\n {\n format: \"openai\",\n baseUrl: \"https://api.minimax.io/v1/chat/completions\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" },\n },\n {\n format: \"claude\",\n baseUrl: \"https://api.minimax.io/anthropic/v1/messages\",\n urlSuffix: \"?beta=true\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\" },\n },\n ],\n models: [\n { id: \"MiniMax-M3\", name: \"MiniMax M3\", targetFormat: \"claude\" },\n { id: \"MiniMax-M2.7\", name: \"MiniMax M2.7\" },\n { id: \"MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"MiniMax-M2.1\", name: \"MiniMax M2.1\" },\n { id: \"minimax-image-01\", name: \"MiniMax Image 01\", params: [\"n\",\"size\",\"response_format\"], kind: \"image\" },\n { id: \"speech-2.8-hd\", name: \"Speech 2.8 HD\", kind: \"tts\" },\n { id: \"speech-2.8-turbo\", name: \"Speech 2.8 Turbo\", kind: \"tts\" },\n { id: \"speech-2.6-hd\", name: \"Speech 2.6 HD\", kind: \"tts\" },\n { id: \"speech-2.6-turbo\", name: \"Speech 2.6 Turbo\", kind: \"tts\" },\n { id: \"speech-02-hd\", name: \"Speech 02 HD\", kind: \"tts\" },\n { id: \"speech-02-turbo\", name: \"Speech 02 Turbo\", kind: \"tts\" },\n { id: \"speech-01-hd\", name: \"Speech 01 HD\", kind: \"tts\" },\n { id: \"speech-01-turbo\", name: \"Speech 01 Turbo\", kind: \"tts\" },\n ],\n serviceKinds: [\"llm\",\"image\",\"imageToText\",\"webSearch\",\"tts\"],\n ttsConfig: { baseUrl: \"https://api.minimax.io/v1/t2a_v2\", authType: \"apikey\", authHeader: \"bearer\", format: \"minimax-tts\" },\n imageConfig: { baseUrl: \"https://api.minimaxi.com/v1/images/generations\" },\n searchViaChat: {\n defaultModel: \"MiniMax-M2.7\",\n endpoint: \"https://api.minimaxi.com/v1/text/chatcompletion_v2\",\n pricingUrl: \"https://www.minimaxi.com/document/price\",\n },\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","format","urlSuffix","headers","quirks","dropOutputConfig","reasoningInject","scope","auth","combined","header","scheme","usage","urls","transports","models","targetFormat","params","kind","serviceKinds","ttsConfig","authType","authHeader","imageConfig","searchViaChat","defaultModel","endpoint","pricingUrl","features","usageApikey"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,SAAS;YAAE,GAAG,6JAAkB;QAAC;QACjCC,QAAQ;YACNC,kBAAkB;QACpB;QACAC,iBAAiB;YACfC,OAAO;QACT;QACAC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;QACAC,OAAO;YACLC,MAAM;gBACJ;gBACA;aACD;QACH;IACF;IACA,uFAAuF;IACvFC,YAAY;QACV;YACEb,QAAQ;YACRD,SAAS;YACTQ,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QACpE;QACA;YACEV,QAAQ;YACRD,SAAS;YACTE,WAAW;YACXC,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCK,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;YAAM;QAC7D;KACD;IACDI,QAAQ;QACN;YAAE5B,IAAI;YAAcI,MAAM;YAAcyB,cAAc;QAAS;QAC/D;YAAE7B,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAoBI,MAAM;YAAoB0B,QAAQ;gBAAC;gBAAI;gBAAO;aAAkB;YAAEC,MAAM;QAAQ;QAC1G;YAAE/B,IAAI;YAAiBI,MAAM;YAAiB2B,MAAM;QAAM;QAC1D;YAAE/B,IAAI;YAAoBI,MAAM;YAAoB2B,MAAM;QAAM;QAChE;YAAE/B,IAAI;YAAiBI,MAAM;YAAiB2B,MAAM;QAAM;QAC1D;YAAE/B,IAAI;YAAoBI,MAAM;YAAoB2B,MAAM;QAAM;QAChE;YAAE/B,IAAI;YAAgBI,MAAM;YAAgB2B,MAAM;QAAM;QACxD;YAAE/B,IAAI;YAAmBI,MAAM;YAAmB2B,MAAM;QAAM;QAC9D;YAAE/B,IAAI;YAAgBI,MAAM;YAAgB2B,MAAM;QAAM;QACxD;YAAE/B,IAAI;YAAmBI,MAAM;YAAmB2B,MAAM;QAAM;KAC/D;IACDC,cAAc;QAAC;QAAM;QAAQ;QAAc;QAAY;KAAM;IAC7DC,WAAW;QAAEpB,SAAS;QAAoCqB,UAAU;QAAUC,YAAY;QAAUrB,QAAQ;IAAc;IAC1HsB,aAAa;QAAEvB,SAAS;IAAiD;IACzEwB,eAAe;QACbC,cAAc;QACdC,UAAU;QACVC,YAAY;IACd;IACAC,UAAU;QACRhB,OAAO;QACPiB,aAAa;IACf;AACF"}},
+ {"offset": {"line": 7598, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/mistral.js"],"sourcesContent":["export default {\n id: \"mistral\",\n priority: 80,\n alias: \"mistral\",\n display: {\n name: \"Mistral\",\n icon: \"air\",\n color: \"#FF7000\",\n textIcon: \"MI\",\n website: \"https://mistral.ai\",\n notice: {\n apiKeyUrl: \"https://console.mistral.ai/api-keys\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.mistral.ai/v1/chat/completions\",\n validateUrl: \"https://api.mistral.ai/v1/models\",\n quirks: {\n dropClientMetadata: true,\n },\n },\n models: [\n { id: \"mistral-large-latest\", name: \"Mistral Large 3\" },\n { id: \"codestral-latest\", name: \"Codestral\" },\n { id: \"mistral-medium-latest\", name: \"Mistral Medium 3\" },\n { id: \"mistral-embed\", name: \"Mistral Embed\", kind: \"embedding\" },\n ],\n serviceKinds: [\"llm\",\"imageToText\",\"embedding\"],\n embeddingConfig: { baseUrl: \"https://api.mistral.ai/v1/embeddings\", authType: \"apikey\", authHeader: \"bearer\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl","quirks","dropClientMetadata","models","kind","serviceKinds","embeddingConfig","authType","authHeader"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,QAAQ;YACNC,oBAAoB;QACtB;IACF;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAwBI,MAAM;QAAkB;QACtD;YAAEJ,IAAI;YAAoBI,MAAM;QAAY;QAC5C;YAAEJ,IAAI;YAAyBI,MAAM;QAAmB;QACxD;YAAEJ,IAAI;YAAiBI,MAAM;YAAiBc,MAAM;QAAY;KACjE;IACDC,cAAc;QAAC;QAAM;QAAc;KAAY;IAC/CC,iBAAiB;QAAEP,SAAS;QAAwCQ,UAAU;QAAUC,YAAY;IAAS;AAC/G"}},
+ {"offset": {"line": 7658, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/mmf.js"],"sourcesContent":["export default {\n id: \"mmf\",\n hidden: true,\n priority: 200,\n display: {\n name: \"MMF\",\n icon: \"hub\",\n color: \"#6366F1\",\n textIcon: \"MF\",\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.xiaomimimo.com/api/free-ai/openai/chat\",\n noAuth: true,\n },\n models: [\n { id: \"mimo-auto\", name: \"MiMo Auto\" },\n ],\n};\n"],"names":["id","hidden","priority","display","name","icon","color","textIcon","category","transport","baseUrl","noAuth","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,QAAQ;IACRC,UAAU;IACVC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;IACZ;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;IACV;IACAC,QAAQ;QACN;YAAEZ,IAAI;YAAaI,MAAM;QAAY;KACtC;AACH"}},
+ {"offset": {"line": 7688, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/morph.js"],"sourcesContent":["export default {\n id: \"morph\",\n alias: \"morph\",\n aliases: [\"morphllm\"],\n uiAlias: \"morph\",\n display: {\n name: \"Morph\",\n icon: \"change_history\",\n color: \"#14B8A6\",\n textIcon: \"MP\",\n website: \"https://morphllm.com\",\n notice: { apiKeyUrl: \"https://morphllm.com\" },\n },\n category: \"apikey\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://api.morphllm.com/v1/chat/completions\",\n validateUrl: \"https://api.morphllm.com/v1/models\",\n },\n models: [\n { id: \"morph-v3-large\", name: \"Morph v3 Large\" },\n { id: \"morph-v3-fast\", name: \"Morph v3 Fast\" },\n { id: \"morph-qwen35-397b\", name: \"Qwen 3.5 397B (Morph)\", contextLength: 262144 },\n { id: \"morph-minimax27-230b\", name: \"MiniMax M2.7 (Morph)\", contextLength: 200704 },\n { id: \"morph-qwen36-27b\", name: \"Qwen 3.6 27B (Morph)\", contextLength: 262144 },\n { id: \"morph-dsv4flash\", name: \"DeepSeek V4 Flash (Morph)\", contextLength: 1048576 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QAAC;KAAW;IACrBC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YAAEC,WAAW;QAAuB;IAC9C;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAkBK,MAAM;QAAiB;QAC/C;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAqBK,MAAM;YAAyBc,eAAe;QAAO;QAChF;YAAEnB,IAAI;YAAwBK,MAAM;YAAwBc,eAAe;QAAO;QAClF;YAAEnB,IAAI;YAAoBK,MAAM;YAAwBc,eAAe;QAAO;QAC9E;YAAEnB,IAAI;YAAmBK,MAAM;YAA6Bc,eAAe;QAAQ;KACpF;AACH"}},
+ {"offset": {"line": 7753, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/nanobanana.js"],"sourcesContent":["export default {\n id: \"nanobanana\",\n priority: 80,\n hasFree: true,\n alias: \"nanobanana\",\n aliases: [\n \"nb\",\n ],\n uiAlias: \"nb\",\n display: {\n name: \"NanoBanana API\",\n icon: \"extension\",\n color: \"#FFD700\",\n textIcon: \"🍌\",\n website: \"https://nanobananaapi.ai\",\n notice: {\n text: \"3rd-party proxy for Google Nano Banana (Gemini 2.5/3 Flash Image). For official, use Gemini provider.\",\n apiKeyUrl: \"https://nanobananaapi.ai/dashboard\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.nanobananaapi.ai/v1/chat/completions\",\n validateUrl: \"https://api.nanobananaapi.ai/v1/models\",\n },\n models: [\n { id: \"nanobanana-flash\", name: \"NanoBanana Flash\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"nanobanana-pro\", name: \"NanoBanana Pro\", params: [\"n\",\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: {\n baseUrl: \"https://api.nanobananaapi.ai/api/v1/nanobanana/generate\",\n pollUrl: \"https://api.nanobananaapi.ai/api/v1/nanobanana/record-info\",\n },\n};\n"],"names":["id","priority","hasFree","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","validateUrl","models","params","kind","serviceKinds","imageConfig","pollUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEnB,IAAI;YAAoBO,MAAM;YAAoBa,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QACxF;YAAErB,IAAI;YAAkBO,MAAM;YAAkBa,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;KACrF;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QACXN,SAAS;QACTO,SAAS;IACX;AACF"}},
+ {"offset": {"line": 7814, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/nebius.js"],"sourcesContent":["export default {\n id: \"nebius\",\n priority: 70,\n alias: \"nebius\",\n display: {\n name: \"Nebius AI\",\n icon: \"cloud\",\n color: \"#6C5CE7\",\n textIcon: \"NB\",\n website: \"https://nebius.com\",\n notice: {\n apiKeyUrl: \"https://studio.nebius.com/settings/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.studio.nebius.ai/v1/chat/completions\",\n validateUrl: \"https://api.studio.nebius.ai/v1/models\",\n },\n models: [\n { id: \"meta-llama/Llama-3.3-70B-Instruct\", name: \"Llama 3.3 70B Instruct\" },\n { id: \"Qwen/Qwen3-Embedding-8B\", name: \"Qwen3 Embedding 8B\", kind: \"embedding\" },\n ],\n serviceKinds: [\"llm\", \"embedding\"],\n embeddingConfig: { baseUrl: \"https://api.tokenfactory.nebius.com/v1/embeddings\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models","kind","serviceKinds","embeddingConfig"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAAqCI,MAAM;QAAyB;QAC1E;YAAEJ,IAAI;YAA2BI,MAAM;YAAsBa,MAAM;QAAY;KAChF;IACDC,cAAc;QAAC;QAAO;KAAY;IAClCC,iBAAiB;QAAEL,SAAS;IAAoD;AAClF"}},
+ {"offset": {"line": 7861, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/nvidia.js"],"sourcesContent":["export default {\n id: \"nvidia\",\n priority: 20,\n hasFree: true,\n alias: \"nvidia\",\n display: {\n name: \"NVIDIA NIM\",\n icon: \"developer_board\",\n color: \"#76B900\",\n textIcon: \"NV\",\n website: \"https://developer.nvidia.com/nim\",\n notice: {\n text: \"Free access for NVIDIA Developer Program members (prototyping & testing).\",\n apiKeyUrl: \"https://build.nvidia.com/settings/api-keys\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://integrate.api.nvidia.com/v1/chat/completions\",\n validateUrl: \"https://integrate.api.nvidia.com/v1/models\",\n },\n models: [\n { id: \"minimaxai/minimax-m2.7\", name: \"MiniMax M2.7\" },\n { id: \"minimaxai/minimax-m3\", name: \"MiniMax M3\" },\n { id: \"z-ai/glm-5.2\", name: \"GLM 5.2\" },\n { id: \"deepseek-ai/deepseek-v4-pro\", name: \"DeepSeek V4 Pro\" },\n { id: \"deepseek-ai/deepseek-v4-flash\", name: \"DeepSeek V4 Flash\" },\n { id: \"moonshotai/kimi-k2.6\", name: \"Kimi K2.6\" },\n { id: \"nvidia/nemotron-3-ultra-550b-a55b\", name: \"Nemotron 3 Ultra\" },\n { id: \"nvidia/nv-embedqa-e5-v5\", name: \"NV EmbedQA E5 v5\", kind: \"embedding\" },\n { id: \"nvidia/parakeet-ctc-1.1b-asr\", name: \"Parakeet CTC 1.1B\", params: [\"language\"], kind: \"stt\" },\n { id: \"fastpitch\", name: \"FastPitch\", kind: \"tts\" },\n { id: \"tacotron2\", name: \"Tacotron2\", kind: \"tts\" },\n ],\n serviceKinds: [\"llm\",\"tts\",\"embedding\"],\n ttsConfig: {\n baseUrl: \"https://integrate.api.nvidia.com/v1/audio/speech\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"nvidia-tts\",\n },\n embeddingConfig: { baseUrl: \"https://integrate.api.nvidia.com/v1/embeddings\", authType: \"apikey\", authHeader: \"bearer\" },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models","kind","params","serviceKinds","ttsConfig","authHeader","format","embeddingConfig"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEnB,IAAI;YAA0BK,MAAM;QAAe;QACrD;YAAEL,IAAI;YAAwBK,MAAM;QAAa;QACjD;YAAEL,IAAI;YAAgBK,MAAM;QAAU;QACtC;YAAEL,IAAI;YAA+BK,MAAM;QAAkB;QAC7D;YAAEL,IAAI;YAAiCK,MAAM;QAAoB;QACjE;YAAEL,IAAI;YAAwBK,MAAM;QAAY;QAChD;YAAEL,IAAI;YAAqCK,MAAM;QAAmB;QACpE;YAAEL,IAAI;YAA2BK,MAAM;YAAoBe,MAAM;QAAY;QAC7E;YAAEpB,IAAI;YAAgCK,MAAM;YAAqBgB,QAAQ;gBAAC;aAAW;YAAED,MAAM;QAAM;QACnG;YAAEpB,IAAI;YAAaK,MAAM;YAAae,MAAM;QAAM;QAClD;YAAEpB,IAAI;YAAaK,MAAM;YAAae,MAAM;QAAM;KACnD;IACDE,cAAc;QAAC;QAAM;QAAM;KAAY;IACvCC,WAAW;QACTN,SAAS;QACTH,UAAU;QACVU,YAAY;QACZC,QAAQ;IACV;IACAC,iBAAiB;QAAET,SAAS;QAAkDH,UAAU;QAAUU,YAAY;IAAS;AACzH"}},
+ {"offset": {"line": 7964, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/ollama-local.js"],"sourcesContent":["export default {\n id: \"ollama-local\",\n priority: 50,\n hasFree: true,\n alias: \"ollama-local\",\n display: {\n name: \"Ollama Local\",\n icon: \"cloud\",\n color: \"#ffffffff\",\n textIcon: \"OL\",\n website: \"https://ollama.com\",\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"http://localhost:11434/api/chat\",\n format: \"ollama\",\n },\n serviceKinds: [\"llm\"],\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","category","transport","baseUrl","format","serviceKinds"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;IACV;IACAC,cAAc;QAAC;KAAM;AACvB"}},
+ {"offset": {"line": 7993, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/ollama.js"],"sourcesContent":["export default {\n id: \"ollama\",\n priority: 30,\n hasFree: true,\n alias: \"ollama\",\n display: {\n name: \"Ollama Cloud\",\n icon: \"cloud\",\n color: \"#ffffffff\",\n textIcon: \"OL\",\n website: \"https://ollama.com\",\n notice: {\n text: \"Free tier: light usage, 1 cloud model at a time (limits reset every 5h & 7d). Pro $20/mo · Max $100/mo.\",\n apiKeyUrl: \"https://ollama.com/settings/keys\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://ollama.com/api/chat\",\n validateUrl: \"https://ollama.com/api/tags\",\n format: \"ollama\",\n },\n models: [\n { id: \"gpt-oss:120b\", name: \"GPT OSS 120B\" },\n { id: \"kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"glm-5\", name: \"GLM 5\" },\n { id: \"minimax-m2.5\", name: \"MiniMax M2.5\" },\n { id: \"glm-4.7-flash\", name: \"GLM 4.7 Flash\" },\n { id: \"qwen3.5\", name: \"Qwen3.5\" },\n { id: \"minimax-m3\", name: \"MiniMax M3\" },\n ],\n serviceKinds: [\"llm\"],\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","format","models","serviceKinds","features","usage","usageApikey"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,QAAQ;IACV;IACAC,QAAQ;QACN;YAAEpB,IAAI;YAAgBK,MAAM;QAAe;QAC3C;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAASK,MAAM;QAAQ;QAC7B;YAAEL,IAAI;YAAgBK,MAAM;QAAe;QAC3C;YAAEL,IAAI;YAAiBK,MAAM;QAAgB;QAC7C;YAAEL,IAAI;YAAWK,MAAM;QAAU;QACjC;YAAEL,IAAI;YAAcK,MAAM;QAAa;KACxC;IACDgB,cAAc;QAAC;KAAM;IACrBC,UAAU;QACRC,OAAO;QACPC,aAAa;IACf;AACF"}},
+ {"offset": {"line": 8065, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/openai.js"],"sourcesContent":["export default {\n id: \"openai\",\n priority: 30,\n alias: \"openai\",\n display: {\n name: \"OpenAI\",\n icon: \"auto_awesome\",\n color: \"#10A37F\",\n textIcon: \"OA\",\n website: \"https://platform.openai.com\",\n notice: {\n apiKeyUrl: \"https://platform.openai.com/api-keys\",\n },\n },\n category: \"apikey\",\n thinkingConfig: {\n options: [\n \"auto\",\n \"none\",\n \"low\",\n \"medium\",\n \"high\",\n ],\n defaultMode: \"auto\",\n },\n transport: {\n baseUrl: \"https://api.openai.com/v1/chat/completions\",\n forceStream: true,\n },\n models: [\n { id: \"gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\" },\n { id: \"gpt-5.2\", name: \"GPT-5.2\" },\n { id: \"gpt-5.1\", name: \"GPT-5.1\" },\n { id: \"gpt-5\", name: \"GPT-5\" },\n { id: \"gpt-5-mini\", name: \"GPT-5 Mini\" },\n { id: \"gpt-5-nano\", name: \"GPT-5 Nano\" },\n { id: \"gpt-4o\", name: \"GPT-4o\" },\n { id: \"gpt-4o-mini\", name: \"GPT-4o Mini\" },\n { id: \"gpt-4-turbo\", name: \"GPT-4 Turbo\" },\n { id: \"gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"gpt-4.1-nano\", name: \"GPT-4.1 Nano\" },\n { id: \"o3\", name: \"O3\" },\n { id: \"o3-mini\", name: \"O3 Mini\" },\n { id: \"o3-pro\", name: \"O3 Pro\" },\n { id: \"o4-mini\", name: \"O4 Mini\" },\n { id: \"o1\", name: \"O1\" },\n { id: \"o1-mini\", name: \"O1 Mini\" },\n { id: \"text-embedding-3-large\", name: \"Text Embedding 3 Large\", kind: \"embedding\" },\n { id: \"text-embedding-3-small\", name: \"Text Embedding 3 Small\", kind: \"embedding\" },\n { id: \"text-embedding-ada-002\", name: \"Text Embedding Ada 002\", kind: \"embedding\" },\n { id: \"tts-1\", name: \"TTS-1\", kind: \"tts\" },\n { id: \"tts-1-hd\", name: \"TTS-1 HD\", kind: \"tts\" },\n { id: \"gpt-4o-mini-tts\", name: \"GPT-4o Mini TTS\", kind: \"tts\" },\n { id: \"whisper-1\", name: \"Whisper 1\", params: [\"language\",\"response_format\",\"temperature\",\"prompt\"], kind: \"stt\" },\n { id: \"gpt-4o-transcribe\", name: \"GPT-4o Transcribe\", params: [\"language\",\"response_format\",\"temperature\",\"prompt\"], kind: \"stt\" },\n { id: \"gpt-4o-mini-transcribe\", name: \"GPT-4o Mini Transcribe\", params: [\"language\",\"response_format\",\"temperature\",\"prompt\"], kind: \"stt\" },\n { id: \"gpt-image-1\", name: \"GPT Image 1\", params: [\"n\",\"size\",\"quality\",\"response_format\"], kind: \"image\" },\n { id: \"dall-e-3\", name: \"DALL-E 3\", params: [\"size\",\"quality\",\"style\",\"response_format\"], kind: \"image\" },\n { id: \"dall-e-2\", name: \"DALL-E 2\", params: [\"n\",\"size\",\"response_format\"], kind: \"image\" },\n ],\n serviceKinds: [\"llm\",\"embedding\",\"tts\",\"stt\",\"image\",\"imageToText\",\"webSearch\"],\n ttsConfig: {\n baseUrl: \"https://api.openai.com/v1/audio/speech\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"openai\",\n defaultModel: \"gpt-4o-mini-tts\",\n },\n sttConfig: {\n baseUrl: \"https://api.openai.com/v1/audio/transcriptions\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"openai\",\n },\n embeddingConfig: { baseUrl: \"https://api.openai.com/v1/embeddings\", authType: \"apikey\", authHeader: \"bearer\" },\n imageConfig: { baseUrl: \"https://api.openai.com/v1/images/generations\" },\n searchViaChat: { defaultModel: \"gpt-4o-mini\", pricingUrl: \"https://openai.com/api/pricing\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","thinkingConfig","options","defaultMode","transport","baseUrl","forceStream","models","kind","params","serviceKinds","ttsConfig","authType","authHeader","format","defaultModel","sttConfig","embeddingConfig","imageConfig","searchViaChat","pricingUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,gBAAgB;QACdC,SAAS;YACP;YACA;YACA;YACA;YACA;SACD;QACDC,aAAa;IACf;IACAC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAASI,MAAM;QAAQ;QAC7B;YAAEJ,IAAI;YAAcI,MAAM;QAAa;QACvC;YAAEJ,IAAI;YAAcI,MAAM;QAAa;QACvC;YAAEJ,IAAI;YAAUI,MAAM;QAAS;QAC/B;YAAEJ,IAAI;YAAeI,MAAM;QAAc;QACzC;YAAEJ,IAAI;YAAeI,MAAM;QAAc;QACzC;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAgBI,MAAM;QAAe;QAC3C;YAAEJ,IAAI;YAAMI,MAAM;QAAK;QACvB;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAUI,MAAM;QAAS;QAC/B;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAAMI,MAAM;QAAK;QACvB;YAAEJ,IAAI;YAAWI,MAAM;QAAU;QACjC;YAAEJ,IAAI;YAA0BI,MAAM;YAA0Be,MAAM;QAAY;QAClF;YAAEnB,IAAI;YAA0BI,MAAM;YAA0Be,MAAM;QAAY;QAClF;YAAEnB,IAAI;YAA0BI,MAAM;YAA0Be,MAAM;QAAY;QAClF;YAAEnB,IAAI;YAASI,MAAM;YAASe,MAAM;QAAM;QAC1C;YAAEnB,IAAI;YAAYI,MAAM;YAAYe,MAAM;QAAM;QAChD;YAAEnB,IAAI;YAAmBI,MAAM;YAAmBe,MAAM;QAAM;QAC9D;YAAEnB,IAAI;YAAaI,MAAM;YAAagB,QAAQ;gBAAC;gBAAW;gBAAkB;gBAAc;aAAS;YAAED,MAAM;QAAM;QACjH;YAAEnB,IAAI;YAAqBI,MAAM;YAAqBgB,QAAQ;gBAAC;gBAAW;gBAAkB;gBAAc;aAAS;YAAED,MAAM;QAAM;QACjI;YAAEnB,IAAI;YAA0BI,MAAM;YAA0BgB,QAAQ;gBAAC;gBAAW;gBAAkB;gBAAc;aAAS;YAAED,MAAM;QAAM;QAC3I;YAAEnB,IAAI;YAAeI,MAAM;YAAegB,QAAQ;gBAAC;gBAAI;gBAAO;gBAAU;aAAkB;YAAED,MAAM;QAAQ;QAC1G;YAAEnB,IAAI;YAAYI,MAAM;YAAYgB,QAAQ;gBAAC;gBAAO;gBAAU;gBAAQ;aAAkB;YAAED,MAAM;QAAQ;QACxG;YAAEnB,IAAI;YAAYI,MAAM;YAAYgB,QAAQ;gBAAC;gBAAI;gBAAO;aAAkB;YAAED,MAAM;QAAQ;KAC3F;IACDE,cAAc;QAAC;QAAM;QAAY;QAAM;QAAM;QAAQ;QAAc;KAAY;IAC/EC,WAAW;QACTN,SAAS;QACTO,UAAU;QACVC,YAAY;QACZC,QAAQ;QACRC,cAAc;IAChB;IACAC,WAAW;QACTX,SAAS;QACTO,UAAU;QACVC,YAAY;QACZC,QAAQ;IACV;IACAG,iBAAiB;QAAEZ,SAAS;QAAwCO,UAAU;QAAUC,YAAY;IAAS;IAC7GK,aAAa;QAAEb,SAAS;IAA+C;IACvEc,eAAe;QAAEJ,cAAc;QAAeK,YAAY;IAAiC;AAC7F"}},
+ {"offset": {"line": 8314, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/opencode-go.js"],"sourcesContent":["export default {\n id: \"opencode-go\",\n priority: 210,\n alias: \"opencode-go\",\n aliases: [\n \"ocg\",\n ],\n uiAlias: \"ocg\",\n display: {\n name: \"OpenCode Go\",\n icon: \"terminal\",\n color: \"#E87040\",\n textIcon: \"OC\",\n website: \"https://opencode.ai/auth\",\n notice: {\n text: \"OpenCode Go subscription: $5/mo (then 0/mo). Access to Kimi, GLM, Qwen, MiMo, MiniMax models.\",\n apiKeyUrl: \"https://opencode.ai/auth\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://opencode.ai/zen/go/v1/chat/completions\",\n headers: {},\n },\n // Multi-endpoint: pick the transport matching the client sourceFormat to skip\n // translation. Guarded per-model by `supportedFormats` (see chatCore) because\n // opencode-go models differ in endpoint support.\n transports: [\n { format: \"openai\", baseUrl: \"https://opencode.ai/zen/go/v1/chat/completions\", auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" } },\n { format: \"claude\", baseUrl: \"https://opencode.ai/zen/go/v1/messages\", auth: { combined: true, header: \"x-api-key\", scheme: \"raw\", anthropicVersion: true } },\n { format: \"openai-responses\", baseUrl: \"https://opencode.ai/zen/go/v1/responses\", auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" } },\n ],\n models: [\n { id: \"glm-5.2\", name: \"GLM 5.2\", supportedFormats: [\"openai\"] },\n { id: \"glm-5.1\", name: \"GLM 5.1\", supportedFormats: [\"openai\"] },\n { id: \"kimi-k2.7-code\", name: \"Kimi K2.7 Code\", supportedFormats: [\"openai\"] },\n { id: \"kimi-k2.6\", name: \"Kimi K2.6\", supportedFormats: [\"openai\"] },\n { id: \"deepseek-v4-pro\", name: \"DeepSeek V4 Pro\", supportedFormats: [\"openai\", \"claude\", \"openai-responses\"] },\n { id: \"deepseek-v4-flash\", name: \"DeepSeek V4 Flash\", supportedFormats: [\"openai\", \"claude\", \"openai-responses\"] },\n { id: \"mimo-v2.5\", name: \"MiMo V2.5\", supportedFormats: [\"openai\"] },\n { id: \"mimo-v2.5-pro\", name: \"MiMo V2.5 Pro\", supportedFormats: [\"openai\"] },\n { id: \"minimax-m3\", name: \"MiniMax M3\", supportedFormats: [\"openai\", \"claude\"] },\n { id: \"minimax-m2.7\", name: \"MiniMax M2.7\", supportedFormats: [\"openai\", \"claude\"] },\n { id: \"minimax-m2.5\", name: \"MiniMax M2.5\", supportedFormats: [\"openai\", \"claude\"] },\n { id: \"qwen3.7-max\", name: \"Qwen 3.7 Max\", supportedFormats: [\"openai\", \"claude\"] },\n { id: \"qwen3.7-plus\", name: \"Qwen 3.7 Plus\", supportedFormats: [\"openai\", \"claude\"] },\n { id: \"qwen3.6-plus\", name: \"Qwen 3.6 Plus\", supportedFormats: [\"openai\", \"claude\"] },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","headers","transports","format","auth","combined","header","scheme","anthropicVersion","models","supportedFormats"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;IACZ;IACA,8EAA8E;IAC9E,8EAA8E;IAC9E,iDAAiD;IACjDC,YAAY;QACV;YAAEC,QAAQ;YAAUH,SAAS;YAAkDI,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QAAE;QACnJ;YAAEJ,QAAQ;YAAUH,SAAS;YAA0CI,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;gBAAOC,kBAAkB;YAAK;QAAE;QAC5J;YAAEL,QAAQ;YAAoBH,SAAS;YAA2CI,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QAAE;KACvJ;IACDE,QAAQ;QACN;YAAEzB,IAAI;YAAWM,MAAM;YAAWoB,kBAAkB;gBAAC;aAAS;QAAC;QAC/D;YAAE1B,IAAI;YAAWM,MAAM;YAAWoB,kBAAkB;gBAAC;aAAS;QAAC;QAC/D;YAAE1B,IAAI;YAAkBM,MAAM;YAAkBoB,kBAAkB;gBAAC;aAAS;QAAC;QAC7E;YAAE1B,IAAI;YAAaM,MAAM;YAAaoB,kBAAkB;gBAAC;aAAS;QAAC;QACnE;YAAE1B,IAAI;YAAmBM,MAAM;YAAmBoB,kBAAkB;gBAAC;gBAAU;gBAAU;aAAmB;QAAC;QAC7G;YAAE1B,IAAI;YAAqBM,MAAM;YAAqBoB,kBAAkB;gBAAC;gBAAU;gBAAU;aAAmB;QAAC;QACjH;YAAE1B,IAAI;YAAaM,MAAM;YAAaoB,kBAAkB;gBAAC;aAAS;QAAC;QACnE;YAAE1B,IAAI;YAAiBM,MAAM;YAAiBoB,kBAAkB;gBAAC;aAAS;QAAC;QAC3E;YAAE1B,IAAI;YAAcM,MAAM;YAAcoB,kBAAkB;gBAAC;gBAAU;aAAS;QAAC;QAC/E;YAAE1B,IAAI;YAAgBM,MAAM;YAAgBoB,kBAAkB;gBAAC;gBAAU;aAAS;QAAC;QACnF;YAAE1B,IAAI;YAAgBM,MAAM;YAAgBoB,kBAAkB;gBAAC;gBAAU;aAAS;QAAC;QACnF;YAAE1B,IAAI;YAAeM,MAAM;YAAgBoB,kBAAkB;gBAAC;gBAAU;aAAS;QAAC;QAClF;YAAE1B,IAAI;YAAgBM,MAAM;YAAiBoB,kBAAkB;gBAAC;gBAAU;aAAS;QAAC;QACpF;YAAE1B,IAAI;YAAgBM,MAAM;YAAiBoB,kBAAkB;gBAAC;gBAAU;aAAS;QAAC;KACrF;AACH"}},
+ {"offset": {"line": 8490, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/opencode.js"],"sourcesContent":["export default {\n id: \"opencode\",\n priority: 40,\n hasFree: true,\n alias: \"oc\",\n uiAlias: \"oc\",\n display: {\n name: \"OpenCode Free\",\n icon: \"terminal\",\n color: \"#E87040\",\n textIcon: \"OC\",\n },\n category: \"free\",\n noAuth: true,\n transport: {\n baseUrl: \"https://opencode.ai\",\n headers: {\n \"x-opencode-client\": \"desktop\",\n },\n noAuth: true,\n },\n models: [],\n modelsFetcher: { url: \"https://opencode.ai/zen/v1/models\", type: \"opencode-free\" },\n passthroughModels: true,\n};\n"],"names":["id","priority","hasFree","alias","uiAlias","display","name","icon","color","textIcon","category","noAuth","transport","baseUrl","headers","models","modelsFetcher","url","type","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;IACZ;IACAC,UAAU;IACVC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTC,SAAS;YACP,qBAAqB;QACvB;QACAH,QAAQ;IACV;IACAI,QAAQ,EAAE;IACVC,eAAe;QAAEC,KAAK;QAAqCC,MAAM;IAAgB;IACjFC,mBAAmB;AACrB"}},
+ {"offset": {"line": 8526, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/openrouter.js"],"sourcesContent":["export default {\n id: \"openrouter\",\n priority: 10,\n hasFree: true,\n alias: \"openrouter\",\n display: {\n name: \"OpenRouter\",\n icon: \"router\",\n color: \"#F97316\",\n textIcon: \"OR\",\n website: \"https://openrouter.ai\",\n notice: {\n text: \"Free tier: 27+ free models, no credit card needed, 200 req/day. After 0 credit: 1,000 req/day.\",\n apiKeyUrl: \"https://openrouter.ai/settings/keys\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://openrouter.ai/api/v1/chat/completions\",\n thinkingFormat: \"openai\",\n headers: {\n \"HTTP-Referer\": \"https://endpoint-proxy.local\",\n \"X-Title\": \"Endpoint Proxy\",\n },\n },\n models: [\n { id: \"openai/text-embedding-3-large\", name: \"OpenAI Text Embedding 3 Large\", kind: \"embedding\" },\n { id: \"openai/text-embedding-3-small\", name: \"OpenAI Text Embedding 3 Small\", kind: \"embedding\" },\n { id: \"openai/text-embedding-ada-002\", name: \"OpenAI Text Embedding Ada 002\", kind: \"embedding\" },\n { id: \"qwen/qwen3-embedding-8b\", name: \"Qwen3 Embedding 8B\", kind: \"embedding\" },\n { id: \"perplexity/pplx-embed-v1-4b\", name: \"Perplexity Embed V1 4B\", kind: \"embedding\" },\n { id: \"perplexity/pplx-embed-v1-0.6b\", name: \"Perplexity Embed V1 0.6B\", kind: \"embedding\" },\n { id: \"nvidia/llama-nemotron-embed-vl-1b-v2:free\", name: \"NVIDIA Nemotron Embed VL 1B V2 (Free)\", kind: \"embedding\" },\n { id: \"openai/gpt-4o-mini-tts\", name: \"GPT-4o Mini TTS\", kind: \"tts\" },\n { id: \"openai/tts-1-hd\", name: \"TTS-1 HD\", kind: \"tts\" },\n { id: \"openai/tts-1\", name: \"TTS-1\", kind: \"tts\" },\n { id: \"openai/dall-e-3\", name: \"DALL-E 3 (via OpenRouter)\", params: [\"size\",\"quality\",\"style\",\"response_format\"], kind: \"image\" },\n { id: \"openai/gpt-image-1\", name: \"GPT Image 1 (via OpenRouter)\", params: [\"n\",\"size\",\"quality\",\"response_format\"], kind: \"image\" },\n { id: \"google/imagen-3.0-generate-002\", name: \"Imagen 3 (via OpenRouter)\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"black-forest-labs/FLUX.1-schnell\", name: \"FLUX.1 Schnell (via OpenRouter)\", params: [\"n\",\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"llm\",\"embedding\",\"tts\",\"imageToText\"],\n ttsConfig: {\n baseUrl: \"https://openrouter.ai/api/v1/chat/completions\",\n defaultModel: \"openai/gpt-4o-mini-tts\",\n headers: {\"HTTP-Referer\":\"https://endpoint-proxy.local\",\"X-Title\":\"Endpoint Proxy\"},\n },\n embeddingConfig: {\n baseUrl: \"https://openrouter.ai/api/v1/embeddings\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n headers: {\"HTTP-Referer\":\"https://endpoint-proxy.local\",\"X-Title\":\"Endpoint Proxy\"},\n },\n imageConfig: {\n baseUrl: \"https://openrouter.ai/api/v1/images/generations\",\n headers: {\"HTTP-Referer\":\"https://endpoint-proxy.local\",\"X-Title\":\"Endpoint Proxy\"},\n },\n modelsFetcher: { url: \"https://openrouter.ai/api/v1/models\", type: \"openrouter-free\" },\n passthroughModels: true,\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","authModes","transport","baseUrl","thinkingFormat","headers","models","kind","params","serviceKinds","ttsConfig","defaultModel","embeddingConfig","authHeader","imageConfig","modelsFetcher","url","type","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,gBAAgB;QAChBC,SAAS;YACP,gBAAgB;YAChB,WAAW;QACb;IACF;IACAC,QAAQ;QACN;YAAEpB,IAAI;YAAiCK,MAAM;YAAiCgB,MAAM;QAAY;QAChG;YAAErB,IAAI;YAAiCK,MAAM;YAAiCgB,MAAM;QAAY;QAChG;YAAErB,IAAI;YAAiCK,MAAM;YAAiCgB,MAAM;QAAY;QAChG;YAAErB,IAAI;YAA2BK,MAAM;YAAsBgB,MAAM;QAAY;QAC/E;YAAErB,IAAI;YAA+BK,MAAM;YAA0BgB,MAAM;QAAY;QACvF;YAAErB,IAAI;YAAiCK,MAAM;YAA4BgB,MAAM;QAAY;QAC3F;YAAErB,IAAI;YAA6CK,MAAM;YAAyCgB,MAAM;QAAY;QACpH;YAAErB,IAAI;YAA0BK,MAAM;YAAmBgB,MAAM;QAAM;QACrE;YAAErB,IAAI;YAAmBK,MAAM;YAAYgB,MAAM;QAAM;QACvD;YAAErB,IAAI;YAAgBK,MAAM;YAASgB,MAAM;QAAM;QACjD;YAAErB,IAAI;YAAmBK,MAAM;YAA6BiB,QAAQ;gBAAC;gBAAO;gBAAU;gBAAQ;aAAkB;YAAED,MAAM;QAAQ;QAChI;YAAErB,IAAI;YAAsBK,MAAM;YAAgCiB,QAAQ;gBAAC;gBAAI;gBAAO;gBAAU;aAAkB;YAAED,MAAM;QAAQ;QAClI;YAAErB,IAAI;YAAkCK,MAAM;YAA6BiB,QAAQ;gBAAC;gBAAI;aAAO;YAAED,MAAM;QAAQ;QAC/G;YAAErB,IAAI;YAAoCK,MAAM;YAAmCiB,QAAQ;gBAAC;gBAAI;aAAO;YAAED,MAAM;QAAQ;KACxH;IACDE,cAAc;QAAC;QAAM;QAAY;QAAM;KAAc;IACrDC,WAAW;QACTP,SAAS;QACTQ,cAAc;QACdN,SAAS;YAAC,gBAAe;YAA+B,WAAU;QAAgB;IACpF;IACAO,iBAAiB;QACfT,SAAS;QACTH,UAAU;QACVa,YAAY;QACZR,SAAS;YAAC,gBAAe;YAA+B,WAAU;QAAgB;IACpF;IACAS,aAAa;QACXX,SAAS;QACTE,SAAS;YAAC,gBAAe;YAA+B,WAAU;QAAgB;IACpF;IACAU,eAAe;QAAEC,KAAK;QAAuCC,MAAM;IAAkB;IACrFC,mBAAmB;AACrB"}},
+ {"offset": {"line": 8691, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/perplexity-agent.js"],"sourcesContent":["export default {\n id: \"perplexity-agent\",\n priority: 181,\n alias: \"perplexity-agent\",\n aliases: [\n \"pplx-agent\",\n \"pplx-responses\",\n ],\n uiAlias: \"pa\",\n display: {\n name: \"Perplexity Agent\",\n icon: \"travel_explore\",\n color: \"#20808D\",\n textIcon: \"PA\",\n website: \"https://www.perplexity.ai\",\n notice: {\n text: \"Perplexity Agent API exposes GPT, Claude, Gemini, Grok, GLM, Kimi, and Sonar models through one OpenAI-compatible Responses API.\",\n apiKeyUrl: \"https://www.perplexity.ai/settings/api\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.perplexity.ai/v1/responses\",\n validateUrl: \"https://api.perplexity.ai/v1/models\",\n format: \"openai-responses\",\n },\n models: [\n { id: \"perplexity/sonar\", name: \"Perplexity Sonar\" },\n { id: \"openai/gpt-5.5\", name: \"GPT-5.5\" },\n { id: \"openai/gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"openai/gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n { id: \"anthropic/claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n { id: \"anthropic/claude-opus-4-8\", name: \"Claude Opus 4.8\" },\n { id: \"google/gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro\" },\n { id: \"xai/grok-4.20-reasoning\", name: \"Grok 4.20 Reasoning\" },\n { id: \"perplexity/glm-5.2\", name: \"GLM 5.2\" },\n { id: \"perplexity/kimi-k2.7-code\", name: \"Kimi K2.7 Code\" },\n { id: \"nvidia/nemotron-3-super-120b-a12b\", name: \"Nemotron 3 Super 120B\" },\n ],\n serviceKinds: [\"llm\", \"webSearch\"],\n searchViaChat: {\n defaultModel: \"perplexity/sonar\",\n endpoint: \"https://api.perplexity.ai/v1/responses\",\n pricingUrl: \"https://docs.perplexity.ai/docs/agent-api/models\",\n },\n modelsFetcher: { url: \"https://api.perplexity.ai/v1/models\", type: \"openai\" },\n passthroughModels: true,\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","format","models","serviceKinds","searchViaChat","defaultModel","endpoint","pricingUrl","modelsFetcher","url","type","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;QACA;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,QAAQ;IACV;IACAC,QAAQ;QACN;YAAEpB,IAAI;YAAoBM,MAAM;QAAmB;QACnD;YAAEN,IAAI;YAAkBM,MAAM;QAAU;QACxC;YAAEN,IAAI;YAAkBM,MAAM;QAAU;QACxC;YAAEN,IAAI;YAAuBM,MAAM;QAAe;QAClD;YAAEN,IAAI;YAA+BM,MAAM;QAAoB;QAC/D;YAAEN,IAAI;YAA6BM,MAAM;QAAkB;QAC3D;YAAEN,IAAI;YAAiCM,MAAM;QAAiB;QAC9D;YAAEN,IAAI;YAA2BM,MAAM;QAAsB;QAC7D;YAAEN,IAAI;YAAsBM,MAAM;QAAU;QAC5C;YAAEN,IAAI;YAA6BM,MAAM;QAAiB;QAC1D;YAAEN,IAAI;YAAqCM,MAAM;QAAwB;KAC1E;IACDe,cAAc;QAAC;QAAO;KAAY;IAClCC,eAAe;QACbC,cAAc;QACdC,UAAU;QACVC,YAAY;IACd;IACAC,eAAe;QAAEC,KAAK;QAAuCC,MAAM;IAAS;IAC5EC,mBAAmB;AACrB"}},
+ {"offset": {"line": 8787, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/perplexity-web.js"],"sourcesContent":["export default {\n id: \"perplexity-web\",\n priority: 220,\n alias: \"perplexity-web\",\n aliases: [\n \"pw\",\n ],\n uiAlias: \"pw\",\n display: {\n name: \"Perplexity Web (Pro/Max)\",\n icon: \"search\",\n color: \"#20808D\",\n textIcon: \"PW\",\n website: \"https://www.perplexity.ai\",\n },\n category: \"webCookie\",\n authType: \"cookie\",\n authHint: \"Paste your __Secure-next-auth.session-token cookie value from perplexity.ai\",\n transport: {\n baseUrl: \"https://www.perplexity.ai/rest/sse/perplexity_ask\",\n format: \"perplexity-web\",\n authType: \"cookie\",\n },\n models: [\n { id: \"pplx-auto\", name: \"Perplexity Auto (Free)\" },\n { id: \"pplx-sonar\", name: \"Perplexity Sonar\" },\n { id: \"pplx-gpt\", name: \"GPT-5.4 (via Perplexity)\" },\n { id: \"pplx-gemini\", name: \"Gemini 3.1 Pro (via Perplexity)\" },\n { id: \"pplx-sonnet\", name: \"Claude Sonnet 4.6 (via Perplexity)\" },\n { id: \"pplx-opus\", name: \"Claude Opus 4.6 (via Perplexity)\" },\n { id: \"pplx-nemotron\", name: \"Nemotron 3 Super (via Perplexity)\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","category","authType","authHint","transport","baseUrl","format","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;QACRJ,UAAU;IACZ;IACAK,QAAQ;QACN;YAAEjB,IAAI;YAAaM,MAAM;QAAyB;QAClD;YAAEN,IAAI;YAAcM,MAAM;QAAmB;QAC7C;YAAEN,IAAI;YAAYM,MAAM;QAA2B;QACnD;YAAEN,IAAI;YAAeM,MAAM;QAAkC;QAC7D;YAAEN,IAAI;YAAeM,MAAM;QAAqC;QAChE;YAAEN,IAAI;YAAaM,MAAM;QAAmC;QAC5D;YAAEN,IAAI;YAAiBM,MAAM;QAAoC;KAClE;AACH"}},
+ {"offset": {"line": 8849, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/perplexity.js"],"sourcesContent":["export default {\n id: \"perplexity\",\n priority: 180,\n alias: \"perplexity\",\n aliases: [\n \"pplx\",\n ],\n uiAlias: \"pplx\",\n display: {\n name: \"Perplexity\",\n icon: \"search\",\n color: \"#20808D\",\n textIcon: \"PP\",\n website: \"https://www.perplexity.ai\",\n notice: {\n apiKeyUrl: \"https://www.perplexity.ai/settings/api\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.perplexity.ai/chat/completions\",\n validateUrl: \"https://api.perplexity.ai/models\",\n },\n models: [\n { id: \"sonar-pro\", name: \"Sonar Pro\" },\n { id: \"sonar\", name: \"Sonar\" },\n ],\n serviceKinds: [\"llm\",\"webSearch\"],\n searchViaChat: {\n defaultModel: \"sonar\",\n endpoint: \"https://api.perplexity.ai/chat/completions\",\n pricingUrl: \"https://docs.perplexity.ai/guides/pricing\",\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models","serviceKinds","searchViaChat","defaultModel","endpoint","pricingUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAASM,MAAM;QAAQ;KAC9B;IACDa,cAAc;QAAC;QAAM;KAAY;IACjCC,eAAe;QACbC,cAAc;QACdC,UAAU;QACVC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 8901, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/playht.js"],"sourcesContent":["export default {\n id: \"playht\",\n alias: \"playht\",\n display: {\n name: \"PlayHT\",\n icon: \"play_circle\",\n color: \"#00B4D8\",\n textIcon: \"PH\",\n website: \"https://play.ht\",\n notice: {\n apiKeyUrl: \"https://play.ht/studio/api-access\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"tts\"\n ],\n ttsConfig: {\n baseUrl: \"https://api.play.ht/api/v2/tts/stream\",\n authType: \"apikey\",\n authHeader: \"playht\",\n format: \"playht\",\n models: [\n {\n id: \"PlayDialog\",\n name: \"PlayDialog\"\n },\n {\n id: \"Play3.0-mini\",\n name: \"Play 3.0 Mini\"\n }\n ]\n },\n hidden: true\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","ttsConfig","baseUrl","authHeader","format","models","hidden"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,WAAW;QACTC,SAAS;QACTH,UAAU;QACVI,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACEjB,IAAI;gBACJG,MAAM;YACR;YACA;gBACEH,IAAI;gBACJG,MAAM;YACR;SACD;IACH;IACAe,QAAQ;AACV"}},
+ {"offset": {"line": 8945, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/poolside.js"],"sourcesContent":["export default {\n id: \"poolside\",\n priority: 60,\n alias: \"poolside\",\n aliases: [\n \"ps\",\n ],\n uiAlias: \"ps\",\n display: {\n name: \"Poolside\",\n icon: \"water_drop\",\n color: \"#0EA5E9\",\n textIcon: \"PS\",\n website: \"https://poolside.ai\",\n notice: {\n apiKeyUrl: \"https://platform.poolside.ai/api-keys\",\n },\n },\n category: \"freeTier\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://inference.poolside.ai/v1/chat/completions\",\n validateUrl: \"https://inference.poolside.ai/v1/models\",\n },\n models: [\n { id: \"poolside/laguna-s-2.1\", name: \"Laguna S 2.1\" },\n { id: \"poolside/laguna-xs-2.1\", name: \"Laguna XS 2.1\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEnB,IAAI;YAAyBM,MAAM;QAAe;QACpD;YAAEN,IAAI;YAA0BM,MAAM;QAAgB;KACvD;AACH"}},
+ {"offset": {"line": 8991, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/qoder.js"],"sourcesContent":["export default {\n id: \"qoder\",\n priority: 30,\n alias: \"qd\",\n uiAlias: \"qd\",\n display: {\n name: \"Qoder\",\n icon: \"water_drop\",\n color: \"#EC4899\",\n website: \"https://qoder.com\",\n notice: {\n signupUrl: \"https://qoder.com\",\n },\n },\n category: \"oauth\",\n authModes: [\"oauth\", \"apikey\"],\n hasOAuth: true,\n authHint: \"Personal Access Token (pt-...) từ https://qoder.com/account/integrations\",\n transport: {\n baseUrl: \"https://api3.qoder.sh/algo/api/v2/service/pro/sse/agent_chat_generation\",\n headers: {},\n timeoutMs: 120000,\n stallTimeoutMs: 120000,\n usage: {\n url: \"https://openapi.qoder.sh/api/v2/quota/usage\",\n },\n },\n models: [\n { id: \"ultimate\", name: \"Ultimate\" },\n { id: \"auto\", name: \"Auto\" },\n { id: \"performance\", name: \"Performance\" },\n { id: \"efficient\", name: \"Efficient\" },\n { id: \"qmodel_preview\", name: \"Qwen3.8-Max-Preview\" },\n { id: \"qmodel_latest\", name: \"Qwen3.7-Max\" },\n { id: \"qmodel\", name: \"Qwen3.7-Plus\" },\n { id: \"kmodel_latest\", name: \"Kimi-K3\" },\n { id: \"kmodel\", name: \"Kimi-K2.7-Code\" },\n { id: \"gm51model\", name: \"GLM-5.2\" },\n { id: \"dmodel\", name: \"DeepSeek-V4-Pro\" },\n { id: \"dfmodel\", name: \"DeepSeek-V4-Flash\" },\n { id: \"mmodel\", name: \"MiniMax-M3\" },\n ],\n oauth: {\n openApiBaseUrl: \"https://openapi.qoder.sh\",\n centerBaseUrl: \"https://center.qoder.sh\",\n chatBaseUrl: \"https://api3.qoder.sh\",\n deviceTokenUrl: \"https://openapi.qoder.sh/api/v1/deviceToken/poll\",\n refreshUrl: \"https://center.qoder.sh/algo/api/v3/user/refresh_token\",\n userInfoUrl: \"https://openapi.qoder.sh/api/v1/userinfo\",\n quotaUsageUrl: \"https://openapi.qoder.sh/api/v2/quota/usage\",\n loginUrl: \"https://qoder.com/device/selectAccounts\",\n },\n features: {\n usage: true,\n // PAT (apikey) connections also carry quota usage (via job-token exchange).\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","website","notice","signupUrl","category","authModes","hasOAuth","authHint","transport","baseUrl","headers","timeoutMs","stallTimeoutMs","usage","url","models","oauth","openApiBaseUrl","centerBaseUrl","chatBaseUrl","deviceTokenUrl","refreshUrl","userInfoUrl","quotaUsageUrl","loginUrl","features","usageApikey"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QAAC;QAAS;KAAS;IAC9BC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;QACVC,WAAW;QACXC,gBAAgB;QAChBC,OAAO;YACLC,KAAK;QACP;IACF;IACAC,QAAQ;QACN;YAAEtB,IAAI;YAAYK,MAAM;QAAW;QACnC;YAAEL,IAAI;YAAQK,MAAM;QAAO;QAC3B;YAAEL,IAAI;YAAeK,MAAM;QAAc;QACzC;YAAEL,IAAI;YAAaK,MAAM;QAAY;QACrC;YAAEL,IAAI;YAAkBK,MAAM;QAAsB;QACpD;YAAEL,IAAI;YAAiBK,MAAM;QAAc;QAC3C;YAAEL,IAAI;YAAUK,MAAM;QAAe;QACrC;YAAEL,IAAI;YAAiBK,MAAM;QAAU;QACvC;YAAEL,IAAI;YAAUK,MAAM;QAAiB;QACvC;YAAEL,IAAI;YAAaK,MAAM;QAAU;QACnC;YAAEL,IAAI;YAAUK,MAAM;QAAkB;QACxC;YAAEL,IAAI;YAAWK,MAAM;QAAoB;QAC3C;YAAEL,IAAI;YAAUK,MAAM;QAAa;KACpC;IACDkB,OAAO;QACLC,gBAAgB;QAChBC,eAAe;QACfC,aAAa;QACbC,gBAAgB;QAChBC,YAAY;QACZC,aAAa;QACbC,eAAe;QACfC,UAAU;IACZ;IACAC,UAAU;QACRZ,OAAO;QACP,4EAA4E;QAC5Ea,aAAa;IACf;AACF"}},
+ {"offset": {"line": 9099, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/recraft.js"],"sourcesContent":["export default {\n id: \"recraft\",\n priority: 70,\n alias: \"recraft\",\n display: {\n name: \"Recraft\",\n icon: \"image\",\n color: \"#EC4899\",\n textIcon: \"RC\",\n website: \"https://recraft.ai\",\n notice: {\n apiKeyUrl: \"https://www.recraft.ai/profile/api\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: null,\n models: [\n { id: \"recraftv3\", name: \"Recraft V3\", params: [\"n\",\"size\",\"style\"], kind: \"image\" },\n { id: \"recraftv2\", name: \"Recraft V2\", params: [\"n\",\"size\",\"style\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"https://external.api.recraft.ai/v1/images/generations\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEd,IAAI;YAAaI,MAAM;YAAcW,QAAQ;gBAAC;gBAAI;gBAAO;aAAQ;YAAEC,MAAM;QAAQ;QACnF;YAAEhB,IAAI;YAAaI,MAAM;YAAcW,QAAQ;gBAAC;gBAAI;gBAAO;aAAQ;YAAEC,MAAM;QAAQ;KACpF;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAwD;AAClF"}},
+ {"offset": {"line": 9153, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/runwayml.js"],"sourcesContent":["export default {\n id: \"runwayml\",\n priority: 80,\n alias: \"runwayml\",\n aliases: [\n \"runway\",\n ],\n uiAlias: \"runway\",\n display: {\n name: \"Runway ML\",\n icon: \"movie\",\n color: \"#000000\",\n textIcon: \"RW\",\n website: \"https://runwayml.com\",\n notice: {\n apiKeyUrl: \"https://dev.runwayml.com\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: null,\n models: [\n { id: \"gen4_image\", name: \"Gen-4 Image\", params: [\"size\"], kind: \"image\" },\n { id: \"gen4_image_turbo\", name: \"Gen-4 Image Turbo\", params: [\"size\"], kind: \"image\" },\n { id: \"gen4_turbo\", name: \"Gen-4 Turbo\", params: [], kind: \"video\" },\n { id: \"gen3a_turbo\", name: \"Gen-3 Alpha Turbo\", params: [], kind: \"video\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"https://api.dev.runwayml.com/v1\" },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEhB,IAAI;YAAcM,MAAM;YAAeW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACzE;YAAElB,IAAI;YAAoBM,MAAM;YAAqBW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACrF;YAAElB,IAAI;YAAcM,MAAM;YAAeW,QAAQ,EAAE;YAAEC,MAAM;QAAQ;QACnE;YAAElB,IAAI;YAAeM,MAAM;YAAqBW,QAAQ,EAAE;YAAEC,MAAM;QAAQ;KAC3E;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAkC;AAC5D"}},
+ {"offset": {"line": 9219, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/sambanova.js"],"sourcesContent":["export default {\n id: \"sambanova\",\n alias: \"samba\",\n aliases: [\"sambanova-ai\"],\n uiAlias: \"samba\",\n hidden: true,\n display: {\n name: \"SambaNova\",\n icon: \"memory\",\n color: \"#F97316\",\n textIcon: \"SN\",\n website: \"https://sambanova.ai\",\n notice: {\n apiKeyUrl: \"https://cloud.sambanova.ai/apis\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://api.sambanova.ai/v1/chat/completions\",\n validateUrl: \"https://api.sambanova.ai/v1/models\",\n },\n models: [\n { id: \"MiniMax-M2.7\", name: \"MiniMax M2.7\", contextLength: 196608 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","hidden","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QAAC;KAAe;IACzBC,SAAS;IACTC,QAAQ;IACRC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEnB,IAAI;YAAgBM,MAAM;YAAgBc,eAAe;QAAO;KACnE;AACH"}},
+ {"offset": {"line": 9262, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/sdwebui.js"],"sourcesContent":["export default {\n id: \"sdwebui\",\n priority: 110,\n alias: \"sdwebui\",\n display: {\n name: \"SD WebUI\",\n icon: \"brush\",\n color: \"#FF7043\",\n textIcon: \"SD\",\n website: \"https://github.com/AUTOMATIC1111/stable-diffusion-webui\",\n },\n category: \"apikey\",\n transport: null,\n models: [\n { id: \"stable-diffusion-v1-5\", name: \"Stable Diffusion v1.5\", params: [\"n\",\"size\"], kind: \"image\" },\n { id: \"sdxl-base-1.0\", name: \"SDXL Base 1.0\", params: [\"n\",\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"http://localhost:7860/sdapi/v1/txt2img\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","category","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEX,IAAI;YAAyBI,MAAM;YAAyBQ,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;QAClG;YAAEb,IAAI;YAAiBI,MAAM;YAAiBQ,QAAQ;gBAAC;gBAAI;aAAO;YAAEC,MAAM;QAAQ;KACnF;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAyC;AACnE"}},
+ {"offset": {"line": 9310, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/searchapi.js"],"sourcesContent":["export default {\n id: \"searchapi\",\n alias: \"searchapi\",\n display: {\n name: \"SearchAPI\",\n icon: \"search\",\n color: \"#0EA5A4\",\n textIcon: \"SA\",\n website: \"https://www.searchapi.io\",\n notice: {\n apiKeyUrl: \"https://www.searchapi.io/dashboard\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\"\n ],\n searchConfig: {\n baseUrl: \"https://www.searchapi.io/api/v1/search\",\n method: \"GET\",\n authType: \"apikey\",\n authHeader: \"api_key\",\n costPerQuery: 0.004,\n freeMonthlyQuota: 100,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 100,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 9353, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/searxng.js"],"sourcesContent":["import { SEARXNG_URL } from \"../../config/runtimeConfig.js\";\n\nexport default {\n id: \"searxng\",\n alias: \"searxng\",\n display: {\n name: \"SearXNG\",\n icon: \"saved_search\",\n color: \"#3B82F6\",\n textIcon: \"SX\",\n website: \"https://docs.searxng.org\"\n },\n category: \"freeTier\",\n authType: \"none\",\n serviceKinds: [\n \"webSearch\"\n ],\n noAuth: true,\n searchConfig: {\n baseUrl: SEARXNG_URL,\n method: \"GET\",\n authType: \"none\",\n authHeader: \"none\",\n costPerQuery: 0,\n freeMonthlyQuota: 999999,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 50,\n timeoutMs: 10000,\n cacheTTLMs: 180000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","category","authType","serviceKinds","noAuth","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,QAAQ;IACRC,cAAc;QACZC,SAAS,0KAAW;QACpBC,QAAQ;QACRL,UAAU;QACVM,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 9396, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/selfhosted-embedding.js"],"sourcesContent":["// Self-hosted, OpenAI-compatible embeddings (llama.cpp / llama-server, vLLM,\n// Infinity, text-embeddings-inference, ...) — the embeddings counterpart of\n// selfhosted-stt and selfhosted-tts.\n//\n// Routing a self-hosted embeddings server already WORKS today, via a custom\n// provider node: getEmbeddingAdapter() matches `openai-compatible-*` and\n// `custom-embedding-*` and returns openaiCompatNode, whose buildUrl reads\n// creds.providerSpecificData.baseUrl. What is missing is a first-class provider,\n// and the gap is visible rather than functional:\n//\n// /v1/embeddings on such a node -> 200, correct vectors\n// the Embedding page in the dashboard -> the node is not listed at all\n//\n// The page renders getProvidersByKind(\"embedding\") plus provider nodes filtered\n// to `type === \"custom-embedding\"`. A node created as `openai-compatible` — the\n// natural choice when ONE endpoint serves chat and embeddings behind the same\n// front door — satisfies neither, so a working self-hosted embeddings endpoint is\n// invisible on the page whose job is to show embeddings providers. Diagnosed on a\n// deployment serving Qwen3-Embedding-8B at 4096 dimensions through exactly that\n// shape (2026-08-04).\n//\n// Declaring it as a provider with serviceKinds: [\"embedding\"] puts it on the page\n// beside Voyage, Jina and the rest, and keeps the per-connection baseUrl that\n// makes self-hosting possible at all.\n//\n// authType is \"apikey\" rather than \"none\" for the same reason as the STT and TTS\n// entries: it is what gives the connection a credentials record, and\n// providerSpecificData.baseUrl lives there. Local servers ignore the key itself;\n// any non-empty value works.\nexport default {\n id: \"selfhosted-embedding\",\n priority: 50,\n hasFree: true,\n alias: \"selfhosted-embedding\",\n display: {\n name: \"Self-hosted Embedding\",\n icon: \"cloud\",\n color: \"#ffffffff\",\n textIcon: \"SE\",\n website: \"https://github.com/ggml-org/llama.cpp\",\n },\n category: \"apikey\",\n auth: {\n apiKey: {\n // Note the /v1: the adapter appends \"/embeddings\" to whatever it is given,\n // so a bare http://host:8080 resolves to http://host:8080/embeddings and\n // misses the OpenAI route entirely. Give it the OpenAI base, the same value\n // an OpenAI client would use. A trailing /embeddings is tolerated.\n text: \"Set providerSpecificData.baseUrl to the OpenAI base URL, e.g. http://host:8080/v1 — /embeddings is appended. The API key is not checked by local servers; any value works.\",\n },\n },\n // A self-hosted server serves whatever model it was started with, so the id\n // here is a placeholder for the UI: the request passes `model` straight\n // through, and llama-server ignores an unknown value rather than rejecting it.\n // Dimensions are deliberately NOT declared — they are a property of the loaded\n // weights, and asserting a number here would be a guess that silently\n // contradicts the server.\n models: [\n { id: \"embedding\", name: \"Self-hosted embedding model\", kind: \"embedding\" },\n ],\n serviceKinds: [\"embedding\"],\n embeddingConfig: {\n // Declared for shape-consistency with the other embedding providers, and\n // read by the UI — but NOT by the request path. openaiCompatNode resolves the\n // URL purely from creds.providerSpecificData.baseUrl (falling back to\n // api.openai.com), so unlike a fixed cloud provider this baseUrl never\n // reaches the wire. Stated plainly because a reader would otherwise\n // reasonably assume it is the default endpoint.\n baseUrl: \"http://localhost:8080/v1/embeddings\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","category","auth","apiKey","text","models","kind","serviceKinds","embeddingConfig","baseUrl","authType","authHeader"],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,qCAAqC;AACrC,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,iFAAiF;AACjF,iDAAiD;AACjD,EAAE;AACF,mEAAmE;AACnE,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,kFAAkF;AAClF,kFAAkF;AAClF,gFAAgF;AAChF,sBAAsB;AACtB,EAAE;AACF,kFAAkF;AAClF,8EAA8E;AAC9E,sCAAsC;AACtC,EAAE;AACF,iFAAiF;AACjF,qEAAqE;AACrE,iFAAiF;AACjF,6BAA6B;;;;;uCACd;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,MAAM;QACJC,QAAQ;YACN,2EAA2E;YAC3E,yEAAyE;YACzE,4EAA4E;YAC5E,mEAAmE;YACnEC,MAAM;QACR;IACF;IACA,4EAA4E;IAC5E,wEAAwE;IACxE,+EAA+E;IAC/E,+EAA+E;IAC/E,sEAAsE;IACtE,0BAA0B;IAC1BC,QAAQ;QACN;YAAEd,IAAI;YAAaK,MAAM;YAA+BU,MAAM;QAAY;KAC3E;IACDC,cAAc;QAAC;KAAY;IAC3BC,iBAAiB;QACf,yEAAyE;QACzE,8EAA8E;QAC9E,sEAAsE;QACtE,uEAAuE;QACvE,oEAAoE;QACpE,gDAAgD;QAChDC,SAAS;QACTC,UAAU;QACVC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 9483, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/selfhosted-stt.js"],"sourcesContent":["// Self-hosted, OpenAI-compatible speech-to-text (whisper.cpp, faster-whisper,\n// Speaches, vLLM-served Whisper, ...).\n//\n// Every other STT provider here is a named cloud service with a fixed endpoint.\n// This one exists so a locally-served /v1/audio/transcriptions can be used at\n// all: set the connection's providerSpecificData.baseUrl to the full URL of the\n// endpoint, exactly as the custom embedding providers already work.\n//\n// sttCore dispatches on `format`; anything that is not one of the five named\n// cloud shapes falls through to transcribeOpenAICompatible, which POSTs the\n// standard multipart body (file, model, and optional language / prompt /\n// response_format / temperature). That is precisely what whisper.cpp's OpenAI\n// endpoint accepts.\n//\n// authType is \"apikey\" rather than \"none\" so the connection carries a\n// credentials record — which is where providerSpecificData.baseUrl lives. Local\n// servers ignore the key itself; any non-empty value works.\nexport default {\n id: \"selfhosted-stt\",\n priority: 50,\n hasFree: true,\n alias: \"selfhosted-stt\",\n display: {\n name: \"Self-hosted STT\",\n icon: \"cloud\",\n color: \"#ffffffff\",\n textIcon: \"ST\",\n website: \"https://github.com/ggml-org/whisper.cpp\",\n },\n category: \"apikey\",\n auth: {\n apiKey: {\n text: \"Set providerSpecificData.baseUrl to the full transcriptions URL, e.g. http://host:8080/v1/audio/transcriptions. The API key is not checked by local servers; any value works.\",\n },\n },\n models: [\n { id: \"whisper-1\", name: \"Whisper (self-hosted)\", params: [\"language\", \"response_format\", \"temperature\", \"prompt\"], kind: \"stt\" },\n ],\n serviceKinds: [\"stt\"],\n sttConfig: {\n // Overridden per connection by providerSpecificData.baseUrl; this default\n // only makes the provider usable out of the box on a same-host deployment.\n baseUrl: \"http://localhost:8080/v1/audio/transcriptions\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"openai\",\n },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","category","auth","apiKey","text","models","params","kind","serviceKinds","sttConfig","baseUrl","authType","authHeader","format"],"mappings":"AAAA,8EAA8E;AAC9E,uCAAuC;AACvC,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,oEAAoE;AACpE,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,8EAA8E;AAC9E,oBAAoB;AACpB,EAAE;AACF,sEAAsE;AACtE,gFAAgF;AAChF,4DAA4D;;;;;uCAC7C;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,MAAM;QACJC,QAAQ;YACNC,MAAM;QACR;IACF;IACAC,QAAQ;QACN;YAAEd,IAAI;YAAaK,MAAM;YAAyBU,QAAQ;gBAAC;gBAAY;gBAAmB;gBAAe;aAAS;YAAEC,MAAM;QAAM;KACjI;IACDC,cAAc;QAAC;KAAM;IACrBC,WAAW;QACT,0EAA0E;QAC1E,2EAA2E;QAC3EC,SAAS;QACTC,UAAU;QACVC,YAAY;QACZC,QAAQ;IACV;AACF"}},
+ {"offset": {"line": 9551, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/selfhosted-tts.js"],"sourcesContent":["// Self-hosted, OpenAI-compatible text-to-speech (Kokoro-FastAPI, openedai-speech,\n// vLLM-served TTS, ...) — the TTS counterpart of selfhosted-stt.\n//\n// Every other self-hostable TTS provider here (coqui, tortoise) carries a FIXED\n// localhost baseUrl in its registry entry and `authType: \"none\"`, and the generic\n// dispatcher reads `ttsConfig.baseUrl` from that entry rather than from the\n// connection. So there was no way to point TTS at a server on another host.\n//\n// `authType: \"apikey\"` is what makes the override possible at all: it gives the\n// connection a credentials record, which is where providerSpecificData.baseUrl\n// lives. Local servers ignore the key; any non-empty value works.\nexport default {\n id: \"selfhosted-tts\",\n priority: 50,\n hasFree: true,\n alias: \"selfhosted-tts\",\n display: {\n name: \"Self-hosted TTS\",\n icon: \"cloud\",\n color: \"#ffffffff\",\n textIcon: \"TT\",\n website: \"https://github.com/remsky/Kokoro-FastAPI\",\n },\n category: \"apikey\",\n auth: {\n apiKey: {\n text: \"Set providerSpecificData.baseUrl to the server root, e.g. http://host:8080 — /v1/audio/speech is appended. The API key is not checked by local servers; any value works.\",\n },\n },\n // Voice is selected as \"/\", the same convention the OpenAI TTS\n // adapter uses, so existing clients need no special casing.\n models: [\n { id: \"kokoro\", name: \"Kokoro (self-hosted)\", params: [\"voice\", \"response_format\", \"speed\"], kind: \"tts\" },\n ],\n serviceKinds: [\"tts\"],\n ttsConfig: {\n // Overridden per connection by providerSpecificData.baseUrl; this default\n // only makes the provider usable on a same-host deployment.\n baseUrl: \"http://localhost:8880\",\n defaultModel: \"kokoro\",\n authType: \"apikey\",\n format: \"openai-speech\",\n },\n};\n"],"names":["id","priority","hasFree","alias","display","name","icon","color","textIcon","website","category","auth","apiKey","text","models","params","kind","serviceKinds","ttsConfig","baseUrl","defaultModel","authType","format"],"mappings":"AAAA,kFAAkF;AAClF,iEAAiE;AACjE,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,kEAAkE;;;;;uCACnD;IACbA,IAAI;IACJC,UAAU;IACVC,SAAS;IACTC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,MAAM;QACJC,QAAQ;YACNC,MAAM;QACR;IACF;IACA,6EAA6E;IAC7E,4DAA4D;IAC5DC,QAAQ;QACN;YAAEd,IAAI;YAAUK,MAAM;YAAwBU,QAAQ;gBAAC;gBAAS;gBAAmB;aAAQ;YAAEC,MAAM;QAAM;KAC1G;IACDC,cAAc;QAAC;KAAM;IACrBC,WAAW;QACT,0EAA0E;QAC1E,4DAA4D;QAC5DC,SAAS;QACTC,cAAc;QACdC,UAAU;QACVC,QAAQ;IACV;AACF"}},
+ {"offset": {"line": 9614, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/serper.js"],"sourcesContent":["export default {\n id: \"serper\",\n alias: \"serper\",\n display: {\n name: \"Serper\",\n icon: \"search\",\n color: \"#4F46E5\",\n textIcon: \"SP\",\n website: \"https://serper.dev\",\n notice: {\n apiKeyUrl: \"https://serper.dev/api-key\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\"\n ],\n searchConfig: {\n baseUrl: \"https://google.serper.dev\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"x-api-key\",\n costPerQuery: 0.001,\n freeMonthlyQuota: 2500,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 100,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 9657, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/siliconflow.js"],"sourcesContent":["export default {\n id: \"siliconflow\",\n priority: 250,\n alias: \"siliconflow\",\n display: {\n name: \"SiliconFlow\",\n icon: \"cloud_queue\",\n color: \"#5B6EF5\",\n textIcon: \"SF\",\n website: \"https://cloud.siliconflow.com\",\n notice: {\n apiKeyUrl: \"https://cloud.siliconflow.com/account/ak\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.siliconflow.com/v1/chat/completions\",\n validateUrl: \"https://api.siliconflow.com/v1/models\",\n thinkingFormat: \"openai\",\n },\n models: [\n { id: \"deepseek-ai/DeepSeek-V4-Pro\", name: \"DeepSeek V4 Pro\" },\n { id: \"deepseek-ai/DeepSeek-V4-Flash\", name: \"DeepSeek V4 Flash\" },\n { id: \"deepseek-ai/DeepSeek-V3.2\", name: \"DeepSeek V3.2\" },\n { id: \"deepseek-ai/DeepSeek-V3.2-Exp\", name: \"DeepSeek V3.2 Exp\" },\n { id: \"deepseek-ai/DeepSeek-V3.1\", name: \"DeepSeek V3.1\" },\n { id: \"deepseek-ai/DeepSeek-V3.1-Terminus\", name: \"DeepSeek V3.1 Terminus\" },\n { id: \"deepseek-ai/DeepSeek-R1\", name: \"DeepSeek R1\" },\n { id: \"Qwen/Qwen3.5-397B-A17B\", name: \"Qwen 3.5 397B A17B\" },\n { id: \"Qwen/Qwen3.5-122B-A10B\", name: \"Qwen 3.5 122B A10B\" },\n { id: \"zai-org/GLM-5.1\", name: \"GLM 5.1\" },\n { id: \"zai-org/GLM-5\", name: \"GLM 5\" },\n { id: \"moonshotai/Kimi-K2.6\", name: \"Kimi K2.6\" },\n { id: \"moonshotai/Kimi-K2.5\", name: \"Kimi K2.5\" },\n { id: \"openai/gpt-oss-120b\", name: \"GPT OSS 120B\" },\n { id: \"MiniMaxAI/MiniMax-M2.5\", name: \"MiniMax M2.5\" },\n { id: \"inclusionAI/Ling-flash-2.0\", name: \"Ling Flash 2.0\" },\n ],\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","validateUrl","thinkingFormat","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,gBAAgB;IAClB;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAA+BI,MAAM;QAAkB;QAC7D;YAAEJ,IAAI;YAAiCI,MAAM;QAAoB;QACjE;YAAEJ,IAAI;YAA6BI,MAAM;QAAgB;QACzD;YAAEJ,IAAI;YAAiCI,MAAM;QAAoB;QACjE;YAAEJ,IAAI;YAA6BI,MAAM;QAAgB;QACzD;YAAEJ,IAAI;YAAsCI,MAAM;QAAyB;QAC3E;YAAEJ,IAAI;YAA2BI,MAAM;QAAc;QACrD;YAAEJ,IAAI;YAA0BI,MAAM;QAAqB;QAC3D;YAAEJ,IAAI;YAA0BI,MAAM;QAAqB;QAC3D;YAAEJ,IAAI;YAAmBI,MAAM;QAAU;QACzC;YAAEJ,IAAI;YAAiBI,MAAM;QAAQ;QACrC;YAAEJ,IAAI;YAAwBI,MAAM;QAAY;QAChD;YAAEJ,IAAI;YAAwBI,MAAM;QAAY;QAChD;YAAEJ,IAAI;YAAuBI,MAAM;QAAe;QAClD;YAAEJ,IAAI;YAA0BI,MAAM;QAAe;QACrD;YAAEJ,IAAI;YAA8BI,MAAM;QAAiB;KAC5D;AACH"}},
+ {"offset": {"line": 9752, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/stability-ai.js"],"sourcesContent":["export default {\n id: \"stability-ai\",\n priority: 60,\n alias: \"stability-ai\",\n aliases: [\n \"stability\",\n ],\n uiAlias: \"stability\",\n display: {\n name: \"Stability AI\",\n icon: \"image\",\n color: \"#8B5CF6\",\n textIcon: \"SA\",\n website: \"https://stability.ai\",\n notice: {\n apiKeyUrl: \"https://platform.stability.ai/account/keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: null,\n models: [\n { id: \"stable-image-ultra\", name: \"Stable Image Ultra\", params: [\"size\"], kind: \"image\" },\n { id: \"stable-image-core\", name: \"Stable Image Core\", params: [\"size\",\"style\"], kind: \"image\" },\n { id: \"sd3.5-large\", name: \"Stable Diffusion 3.5 Large\", params: [\"size\"], kind: \"image\" },\n { id: \"sd3.5-large-turbo\", name: \"Stable Diffusion 3.5 Large Turbo\", params: [\"size\"], kind: \"image\" },\n { id: \"sd3.5-medium\", name: \"Stable Diffusion 3.5 Medium\", params: [\"size\"], kind: \"image\" },\n ],\n serviceKinds: [\"image\"],\n imageConfig: { baseUrl: \"https://api.stability.ai/v2beta/stable-image/generate\" },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","models","params","kind","serviceKinds","imageConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEhB,IAAI;YAAsBM,MAAM;YAAsBW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACxF;YAAElB,IAAI;YAAqBM,MAAM;YAAqBW,QAAQ;gBAAC;gBAAO;aAAQ;YAAEC,MAAM;QAAQ;QAC9F;YAAElB,IAAI;YAAeM,MAAM;YAA8BW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACzF;YAAElB,IAAI;YAAqBM,MAAM;YAAoCW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;QACrG;YAAElB,IAAI;YAAgBM,MAAM;YAA+BW,QAAQ;gBAAC;aAAO;YAAEC,MAAM;QAAQ;KAC5F;IACDC,cAAc;QAAC;KAAQ;IACvBC,aAAa;QAAEC,SAAS;IAAwD;AAClF"}},
+ {"offset": {"line": 9831, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/tavily.js"],"sourcesContent":["export default {\n id: \"tavily\",\n alias: \"tavily\",\n display: {\n name: \"Tavily\",\n icon: \"search\",\n color: \"#5B21B6\",\n textIcon: \"TV\",\n website: \"https://tavily.com\",\n notice: {\n apiKeyUrl: \"https://app.tavily.com/home\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\",\n \"webFetch\"\n ],\n searchConfig: {\n baseUrl: \"https://api.tavily.com/search\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n costPerQuery: 0.008,\n freeMonthlyQuota: 1000,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 20,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n },\n fetchConfig: {\n baseUrl: \"https://api.tavily.com/extract\",\n method: \"POST\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n costPerQuery: 0.008,\n freeMonthlyQuota: 1000,\n formats: [\n \"markdown\",\n \"text\"\n ],\n maxCharacters: 100000,\n timeoutMs: 15000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs","fetchConfig","formats","maxCharacters"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;QACA;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;IACAC,aAAa;QACXV,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBO,SAAS;YACP;YACA;SACD;QACDC,eAAe;QACfJ,WAAW;IACb;AACF"}},
+ {"offset": {"line": 9889, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/tencent.js"],"sourcesContent":["export default {\n id: \"tencent\",\n alias: \"hunyuan\",\n aliases: [\"hunyuan\", \"tencent-hunyuan\"],\n uiAlias: \"hunyuan\",\n display: {\n name: \"Tencent Hunyuan\",\n icon: \"cloud\",\n color: \"#0052D9\",\n textIcon: \"HY\",\n website: \"https://cloud.tencent.com/product/hunyuan\",\n notice: {\n apiKeyUrl: \"https://console.cloud.tencent.com/hunyuan/api-key\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n authModes: [\"apikey\"],\n transport: {\n baseUrl: \"https://api.hunyuan.cloud.tencent.com/v1/chat/completions\",\n validateUrl: \"https://api.hunyuan.cloud.tencent.com/v1/models\",\n },\n models: [\n { id: \"hunyuan-turbos-latest\", name: \"Hunyuan TurboS Latest\", contextLength: 200000 },\n { id: \"hunyuan-t1-latest\", name: \"Hunyuan T1 Latest\", contextLength: 256000 },\n ],\n};\n"],"names":["id","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","authModes","transport","baseUrl","validateUrl","models","contextLength"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QAAC;QAAW;KAAkB;IACvCC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QAAC;KAAS;IACrBC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAElB,IAAI;YAAyBK,MAAM;YAAyBc,eAAe;QAAO;QACpF;YAAEnB,IAAI;YAAqBK,MAAM;YAAqBc,eAAe;QAAO;KAC7E;AACH"}},
+ {"offset": {"line": 9937, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/together.js"],"sourcesContent":["export default {\n id: \"together\",\n priority: 60,\n alias: \"together\",\n display: {\n name: \"Together AI\",\n icon: \"group_work\",\n color: \"#0F6FFF\",\n textIcon: \"TG\",\n website: \"https://www.together.ai\",\n notice: {\n apiKeyUrl: \"https://api.together.xyz/settings/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: {\n baseUrl: \"https://api.together.xyz/v1/chat/completions\",\n validateUrl: \"https://api.together.xyz/v1/models\",\n },\n models: [\n { id: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\", name: \"Llama 3.3 70B Turbo\" },\n { id: \"deepseek-ai/DeepSeek-R1\", name: \"DeepSeek R1\" },\n { id: \"Qwen/Qwen3-235B-A22B\", name: \"Qwen3 235B\" },\n { id: \"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8\", name: \"Llama 4 Maverick\" },\n { id: \"BAAI/bge-large-en-v1.5\", name: \"BGE Large EN v1.5\", kind: \"embedding\" },\n { id: \"togethercomputer/m2-bert-80M-8k-retrieval\", name: \"M2 BERT 80M 8K\", kind: \"embedding\" },\n ],\n serviceKinds: [\"llm\", \"embedding\"],\n embeddingConfig: { baseUrl: \"https://api.together.xyz/v1/embeddings\" },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","baseUrl","validateUrl","models","kind","serviceKinds","embeddingConfig"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAA2CI,MAAM;QAAsB;QAC7E;YAAEJ,IAAI;YAA2BI,MAAM;QAAc;QACrD;YAAEJ,IAAI;YAAwBI,MAAM;QAAa;QACjD;YAAEJ,IAAI;YAAqDI,MAAM;QAAmB;QACpF;YAAEJ,IAAI;YAA0BI,MAAM;YAAqBa,MAAM;QAAY;QAC7E;YAAEjB,IAAI;YAA6CI,MAAM;YAAkBa,MAAM;QAAY;KAC9F;IACDC,cAAc;QAAC;QAAO;KAAY;IAClCC,iBAAiB;QAAEL,SAAS;IAAyC;AACvE"}},
+ {"offset": {"line": 10001, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/tokenrouter.js"],"sourcesContent":["export default {\n id: \"tokenrouter\",\n alias: \"tokenrouter\",\n aliases: [\"tr\"],\n uiAlias: \"tokenrouter\",\n display: {\n name: \"TokenRouter\",\n icon: \"hub\",\n color: \"#0EA5E9\",\n textIcon: \"TR\",\n website: \"https://www.tokenrouter.com\",\n notice: {\n text: \"OpenAI-compatible gateway. 300+ models (OpenAI, Claude, Gemini, Qwen, DeepSeek, Kimi, GLM, dsb).\",\n apiKeyUrl: \"https://www.tokenrouter.com\",\n },\n },\n category: \"apikey\",\n thinkingConfig: {\n options: [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"],\n defaultMode: \"high\",\n },\n transport: {\n baseUrl: \"https://api.tokenrouter.com/v1/chat/completions\",\n validateUrl: \"https://api.tokenrouter.com/v1/models\",\n thinkingFormat: \"tokenrouter\",\n },\n // Seed snapshot from live /v1/models (120 entries). Latest catalogue is\n // fetched via modelsFetcher; other ids still accepted via passthroughModels.\n models: [\n { id: \"MiniMax-Hailuo-2.3\", name: \"Minimax Hailuo 2.3\", kind: \"video\" },\n { id: \"MiniMax-M3\", name: \"Minimax M3\" },\n { id: \"anthropic/claude-fable-5\", name: \"Claude Fable 5\" },\n { id: \"anthropic/claude-haiku-4.5\", name: \"Claude Haiku 4.5\" },\n { id: \"anthropic/claude-opus-4.5\", name: \"Claude Opus 4.5\" },\n { id: \"anthropic/claude-opus-4.6\", name: \"Claude Opus 4.6\" },\n { id: \"anthropic/claude-opus-4.7\", name: \"Claude Opus 4.7\" },\n { id: \"anthropic/claude-opus-4.7-fast\", name: \"Claude Opus 4.7 Fast\" },\n { id: \"anthropic/claude-opus-4.8\", name: \"Claude Opus 4.8\" },\n { id: \"anthropic/claude-opus-4.8-fast\", name: \"Claude Opus 4.8 Fast\" },\n { id: \"anthropic/claude-opus-5\", name: \"Claude Opus 5\" },\n { id: \"anthropic/claude-opus-5-fast\", name: \"Claude Opus 5 Fast\" },\n { id: \"anthropic/claude-sonnet-4\", name: \"Claude Sonnet 4\" },\n { id: \"anthropic/claude-sonnet-4.5\", name: \"Claude Sonnet 4.5\" },\n { id: \"anthropic/claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\" },\n { id: \"anthropic/claude-sonnet-5\", name: \"Claude Sonnet 5\" },\n { id: \"bytedance-seed/seedream-4.5\", name: \"Seedream 4.5\", kind: \"image\" },\n { id: \"bytedance-seed/seedream-5.0-lite\", name: \"Seedream 5.0 Lite\", kind: \"image\" },\n { id: \"bytedance-seed/seedream-5.0-pro\", name: \"Seedream 5.0 Pro\", kind: \"image\" },\n { id: \"claude-haiku-4-5\", name: \"Claude Haiku 4 5\" },\n { id: \"claude-opus-4-8-m-aws\", name: \"Claude Opus 4 8 M Aws\" },\n { id: \"deepseek/deepseek-v3.2\", name: \"Deepseek V3.2\" },\n { id: \"deepseek/deepseek-v4-flash\", name: \"Deepseek V4 Flash\" },\n { id: \"deepseek/deepseek-v4-flash-0731\", name: \"Deepseek V4 Flash 0731\" },\n { id: \"deepseek/deepseek-v4-pro\", name: \"Deepseek V4 Pro\" },\n { id: \"ex/gpt-5.4\", name: \"Gpt 5.4\" },\n { id: \"google/gemini-2.5-flash-image\", name: \"Gemini 2.5 Flash Image\" },\n { id: \"google/gemini-3-flash-preview\", name: \"Gemini 3 Flash Preview\" },\n { id: \"google/gemini-3-pro-image-preview\", name: \"Gemini 3 Pro Image Preview\" },\n { id: \"google/gemini-3.1-flash-image-preview\", name: \"Gemini 3.1 Flash Image Preview\" },\n { id: \"google/gemini-3.1-flash-lite-image\", name: \"Gemini 3.1 Flash Lite Image\" },\n { id: \"google/gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro Preview\" },\n { id: \"google/gemini-3.5-flash\", name: \"Gemini 3.5 Flash\" },\n { id: \"google/gemini-3.5-flash-lite\", name: \"Gemini 3.5 Flash Lite\" },\n { id: \"google/gemini-3.6-flash\", name: \"Gemini 3.6 Flash\" },\n { id: \"google/gemini-embedding-2\", name: \"Gemini Embedding 2\" },\n { id: \"google/gemma-4-26b-a4b-it\", name: \"Gemma 4 26B A4B It\" },\n { id: \"happyhorse-1.0-t2v\", name: \"Happyhorse 1.0 T2V\", kind: \"video\" },\n { id: \"kling-3.0-turbo\", name: \"Kling 3.0 Turbo\", kind: \"video\" },\n { id: \"kling-v2-6\", name: \"Kling V2 6\", kind: \"video\" },\n { id: \"kling-v3\", name: \"Kling V3\", kind: \"video\" },\n { id: \"kling-v3-omni\", name: \"Kling V3 Omni\", kind: \"video\" },\n { id: \"microsoft/mai-image-2.5\", name: \"Mai Image 2.5\" },\n { id: \"minimax/minimax-m2-her\", name: \"Minimax M2 Her\" },\n { id: \"minimax/minimax-m2.1\", name: \"Minimax M2.1\" },\n { id: \"minimax/minimax-m2.1-highspeed\", name: \"Minimax M2.1 Highspeed\" },\n { id: \"minimax/minimax-m2.5\", name: \"Minimax M2.5\" },\n { id: \"minimax/minimax-m2.7\", name: \"Minimax M2.7\" },\n { id: \"minimax/minimax-m2.7-highspeed\", name: \"Minimax M2.7 Highspeed\" },\n { id: \"miromind/mirothinker-1-7-deepresearch\", name: \"Mirothinker 1 7 Deepresearch\" },\n { id: \"miromind/mirothinker-1-7-deepresearch-mini\", name: \"Mirothinker 1 7 Deepresearch Mini\" },\n { id: \"mistralai/devstral-2512\", name: \"Devstral 2512\" },\n { id: \"mistralai/mistral-medium-3-5\", name: \"Mistral Medium 3 5\" },\n { id: \"mistralai/mistral-small-2603\", name: \"Mistral Small 2603\" },\n { id: \"mistralai/voxtral-small-24b-2507\", name: \"Voxtral Small 24B 2507\" },\n { id: \"moonshotai/kimi-k2.5\", name: \"Kimi K2.5\" },\n { id: \"moonshotai/kimi-k2.6\", name: \"Kimi K2.6\" },\n { id: \"moonshotai/kimi-k2.7-code\", name: \"Kimi K2.7 Code\" },\n { id: \"moonshotai/kimi-k3\", name: \"Kimi K3\" },\n { id: \"moonshotai/kimi-k3-free\", name: \"Kimi K3 Free\" },\n { id: \"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\", name: \"Nemotron 3 Nano Omni 30B A3B Reasoning:Free\" },\n { id: \"nvidia/nemotron-3-super-120b-a12b\", name: \"Nemotron 3 Super 120B A12B\" },\n { id: \"openai/gpt-4o-mini\", name: \"Gpt 4O Mini\" },\n { id: \"openai/gpt-5\", name: \"Gpt 5\" },\n { id: \"openai/gpt-5-image\", name: \"Gpt 5 Image\" },\n { id: \"openai/gpt-5-image-mini\", name: \"Gpt 5 Image Mini\" },\n { id: \"openai/gpt-5-mini\", name: \"Gpt 5 Mini\" },\n { id: \"openai/gpt-5.2\", name: \"Gpt 5.2\" },\n { id: \"openai/gpt-5.4\", name: \"Gpt 5.4\" },\n { id: \"openai/gpt-5.4-image-2\", name: \"Gpt 5.4 Image 2\", kind: \"image\" },\n { id: \"openai/gpt-5.4-mini\", name: \"Gpt 5.4 Mini\" },\n { id: \"openai/gpt-5.4-nano\", name: \"Gpt 5.4 Nano\" },\n { id: \"openai/gpt-5.4-pro\", name: \"Gpt 5.4 Pro\" },\n { id: \"openai/gpt-5.5\", name: \"Gpt 5.5\" },\n { id: \"openai/gpt-5.5-pro\", name: \"Gpt 5.5 Pro\" },\n { id: \"openai/gpt-5.6-luna\", name: \"Gpt 5.6 Luna\" },\n { id: \"openai/gpt-5.6-sol\", name: \"Gpt 5.6 Sol\" },\n { id: \"openai/gpt-5.6-terra\", name: \"Gpt 5.6 Terra\" },\n { id: \"openai/gpt-audio\", name: \"Gpt Audio\", kind: \"audio\" },\n { id: \"openai/gpt-audio-mini\", name: \"Gpt Audio Mini\", kind: \"audio\" },\n { id: \"openai/gpt-oss-120b\", name: \"Gpt Oss 120B\" },\n { id: \"qwen/qwen3-coder-next\", name: \"Qwen3 Coder Next\" },\n { id: \"qwen/qwen3.5-122b-a10b\", name: \"Qwen3.5 122B A10B\" },\n { id: \"qwen/qwen3.5-35b-a3b\", name: \"Qwen3.5 35B A3B\" },\n { id: \"qwen/qwen3.5-397b-a17b\", name: \"Qwen3.5 397B A17B\" },\n { id: \"qwen/qwen3.5-9b\", name: \"Qwen3.5 9B\" },\n { id: \"qwen/qwen3.5-flash\", name: \"Qwen3.5 Flash\" },\n { id: \"qwen/qwen3.5-plus-02-15\", name: \"Qwen3.5 Plus 02 15\" },\n { id: \"qwen/qwen3.6-plus\", name: \"Qwen3.6 Plus\" },\n { id: \"qwen/qwen3.7-max\", name: \"Qwen3.7 Max\" },\n { id: \"qwen/qwen3.7-plus\", name: \"Qwen3.7 Plus\" },\n { id: \"qwen/qwen3.8-max\", name: \"Qwen3.8 Max\" },\n { id: \"qwen3.5-omni-plus\", name: \"Qwen3.5 Omni Plus\" },\n { id: \"qwen3.6-flash\", name: \"Qwen3.6 Flash\" },\n { id: \"sakana/fugu-ultra\", name: \"Fugu Ultra\" },\n { id: \"seed-2-0-code-preview-260328\", name: \"Seed 2 0 Code Preview 260328\" },\n { id: \"seed-2-0-lite-260428\", name: \"Seed 2 0 Lite 260428\" },\n { id: \"seed-2-0-mini-260428\", name: \"Seed 2 0 Mini 260428\" },\n { id: \"seed-2-0-pro-260328\", name: \"Seed 2 0 Pro 260328\" },\n { id: \"stepfun/step-3.5-flash\", name: \"Step 3.5 Flash\" },\n { id: \"stepfun/step-3.7-flash\", name: \"Step 3.7 Flash\" },\n { id: \"tencent/hy3-preview\", name: \"Hy3 Preview\" },\n { id: \"x-ai/grok-4.1-fast\", name: \"Grok 4.1 Fast\" },\n { id: \"x-ai/grok-4.20-beta\", name: \"Grok 4.20 Beta\" },\n { id: \"x-ai/grok-4.3\", name: \"Grok 4.3\" },\n { id: \"x-ai/grok-4.5\", name: \"Grok 4.5\" },\n { id: \"x-ai/grok-build-0.1\", name: \"Grok Build 0.1\" },\n { id: \"xiaomi/mimo-v2-flash\", name: \"Mimo V2 Flash\" },\n { id: \"xiaomi/mimo-v2-omni\", name: \"Mimo V2 Omni\" },\n { id: \"xiaomi/mimo-v2-pro\", name: \"Mimo V2 Pro\" },\n { id: \"xiaomi/mimo-v2.5\", name: \"Mimo V2.5\" },\n { id: \"xiaomi/mimo-v2.5-pro\", name: \"Mimo V2.5 Pro\" },\n { id: \"z-ai/glm-4.5-air\", name: \"Glm 4.5 Air\" },\n { id: \"z-ai/glm-4.6\", name: \"Glm 4.6\" },\n { id: \"z-ai/glm-4.6v\", name: \"Glm 4.6V\" },\n { id: \"z-ai/glm-4.7\", name: \"Glm 4.7\" },\n { id: \"z-ai/glm-5\", name: \"Glm 5\" },\n { id: \"z-ai/glm-5-turbo\", name: \"Glm 5 Turbo\" },\n { id: \"z-ai/glm-5.1\", name: \"Glm 5.1\" },\n { id: \"z-ai/glm-5.2\", name: \"Glm 5.2\" },\n ],\n serviceKinds: [\"llm\", \"embedding\", \"image\"],\n embeddingConfig: {\n baseUrl: \"https://api.tokenrouter.com/v1/embeddings\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n },\n imageConfig: {\n baseUrl: \"https://api.tokenrouter.com/v1/images/generations\",\n },\n modelsFetcher: { url: \"https://api.tokenrouter.com/v1/models\", type: \"openai\" },\n passthroughModels: true,\n};\n"],"names":["id","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","thinkingConfig","options","defaultMode","transport","baseUrl","validateUrl","thinkingFormat","models","kind","serviceKinds","embeddingConfig","authType","authHeader","imageConfig","modelsFetcher","url","type","passthroughModels"],"mappings":"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"}},
+ {"offset": {"line": 10558, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/topaz.js"],"sourcesContent":["export default {\n id: \"topaz\",\n alias: \"topaz\",\n display: {\n name: \"Topaz\",\n icon: \"image\",\n color: \"#059669\",\n textIcon: \"TP\",\n website: \"https://topazlabs.com\",\n notice: {\n apiKeyUrl: \"https://topazlabs.com/account\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"image\"\n ]\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;AACH"}},
+ {"offset": {"line": 10585, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/tortoise.js"],"sourcesContent":["export default {\n id: \"tortoise\",\n alias: \"tortoise\",\n display: {\n name: \"Tortoise TTS\",\n icon: \"record_voice_over\",\n color: \"#7C3AED\",\n textIcon: \"TT\",\n website: \"https://github.com/neonbjb/tortoise-tts\"\n },\n category: \"freeTier\",\n authType: \"none\",\n serviceKinds: [\n \"tts\"\n ],\n noAuth: true,\n ttsConfig: {\n baseUrl: \"http://localhost:5000/api/tts\",\n authType: \"none\",\n authHeader: \"none\",\n format: \"tortoise\",\n models: [\n {\n id: \"tortoise-v2\",\n name: \"Tortoise v2\"\n }\n ]\n },\n hidden: true\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","category","authType","serviceKinds","noAuth","ttsConfig","baseUrl","authHeader","format","models","hidden"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;IACX;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,QAAQ;IACRC,WAAW;QACTC,SAAS;QACTJ,UAAU;QACVK,YAAY;QACZC,QAAQ;QACRC,QAAQ;YACN;gBACEhB,IAAI;gBACJG,MAAM;YACR;SACD;IACH;IACAc,QAAQ;AACV"}},
+ {"offset": {"line": 10623, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/venice.js"],"sourcesContent":["export default {\n id: \"venice\",\n priority: 115,\n alias: \"venice\",\n aliases: [\n \"vn\",\n ],\n uiAlias: \"venice\",\n display: {\n name: \"Venice AI\",\n icon: \"shield\",\n color: \"#DC2626\",\n textIcon: \"VE\",\n website: \"https://venice.ai\",\n notice: {\n text: \"OpenAI-compatible. Private inference + uncensored models (Venice Uncensored, GLM, Qwen, DeepSeek, Llama).\",\n apiKeyUrl: \"https://venice.ai/settings/api\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://api.venice.ai/api/v1/chat/completions\",\n validateUrl: \"https://api.venice.ai/api/v1/models\",\n thinkingFormat: \"openai\",\n },\n // Curated seed; the full live catalogue (90+ text models) is fetched via\n // modelsFetcher and any other id is accepted via passthroughModels.\n models: [\n { id: \"venice-uncensored-1-2\", name: \"Venice Uncensored 1.2\" },\n { id: \"zai-org-glm-5\", name: \"GLM-5\" },\n { id: \"qwen3-235b-a22b-instruct-2507\", name: \"Qwen3 235B A22B Instruct\" },\n { id: \"qwen3-coder-480b-a35b-instruct-turbo\", name: \"Qwen3 Coder 480B A35B Turbo\" },\n { id: \"qwen3-vl-235b-a22b\", name: \"Qwen3 VL 235B A22B\" },\n { id: \"deepseek-v4-pro\", name: \"DeepSeek V4 Pro\" },\n { id: \"llama-3.3-70b\", name: \"Llama 3.3 70B\" },\n { id: \"hermes-3-llama-3.1-405b\", name: \"Hermes 3 Llama 3.1 405B\" },\n { id: \"mistral-small-3-2-24b-instruct\", name: \"Mistral Small 3.2 24B\" },\n { id: \"text-embedding-3-large\", name: \"Text Embedding 3 Large\", kind: \"embedding\" },\n { id: \"text-embedding-bge-m3\", name: \"BGE-M3 Embedding\", kind: \"embedding\" },\n { id: \"text-embedding-qwen3-8b\", name: \"Qwen3 8B Embedding\", kind: \"embedding\" },\n { id: \"venice-sd35\", name: \"Venice SD3.5\", params: [\"n\", \"size\"], kind: \"image\" },\n { id: \"flux-2-pro\", name: \"FLUX.2 Pro\", params: [\"n\", \"size\"], kind: \"image\" },\n { id: \"gpt-image-2\", name: \"GPT Image 2 (via Venice)\", params: [\"n\", \"size\", \"quality\"], kind: \"image\" },\n ],\n serviceKinds: [\"llm\", \"embedding\", \"image\"],\n embeddingConfig: {\n baseUrl: \"https://api.venice.ai/api/v1/embeddings\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n },\n imageConfig: {\n baseUrl: \"https://api.venice.ai/api/v1/images/generations\",\n },\n modelsFetcher: { url: \"https://api.venice.ai/api/v1/models\", type: \"openai\" },\n passthroughModels: true,\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","validateUrl","thinkingFormat","models","kind","params","serviceKinds","embeddingConfig","authType","authHeader","imageConfig","modelsFetcher","url","type","passthroughModels"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,gBAAgB;IAClB;IACA,yEAAyE;IACzE,oEAAoE;IACpEC,QAAQ;QACN;YAAEnB,IAAI;YAAyBM,MAAM;QAAwB;QAC7D;YAAEN,IAAI;YAAiBM,MAAM;QAAQ;QACrC;YAAEN,IAAI;YAAiCM,MAAM;QAA2B;QACxE;YAAEN,IAAI;YAAwCM,MAAM;QAA8B;QAClF;YAAEN,IAAI;YAAsBM,MAAM;QAAqB;QACvD;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAA2BM,MAAM;QAA0B;QACjE;YAAEN,IAAI;YAAkCM,MAAM;QAAwB;QACtE;YAAEN,IAAI;YAA0BM,MAAM;YAA0Bc,MAAM;QAAY;QAClF;YAAEpB,IAAI;YAAyBM,MAAM;YAAoBc,MAAM;QAAY;QAC3E;YAAEpB,IAAI;YAA2BM,MAAM;YAAsBc,MAAM;QAAY;QAC/E;YAAEpB,IAAI;YAAeM,MAAM;YAAgBe,QAAQ;gBAAC;gBAAK;aAAO;YAAED,MAAM;QAAQ;QAChF;YAAEpB,IAAI;YAAcM,MAAM;YAAce,QAAQ;gBAAC;gBAAK;aAAO;YAAED,MAAM;QAAQ;QAC7E;YAAEpB,IAAI;YAAeM,MAAM;YAA4Be,QAAQ;gBAAC;gBAAK;gBAAQ;aAAU;YAAED,MAAM;QAAQ;KACxG;IACDE,cAAc;QAAC;QAAO;QAAa;KAAQ;IAC3CC,iBAAiB;QACfP,SAAS;QACTQ,UAAU;QACVC,YAAY;IACd;IACAC,aAAa;QACXV,SAAS;IACX;IACAW,eAAe;QAAEC,KAAK;QAAuCC,MAAM;IAAS;IAC5EC,mBAAmB;AACrB"}},
+ {"offset": {"line": 10758, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/vercel-ai-gateway.js"],"sourcesContent":["export default {\n id: \"vercel-ai-gateway\",\n priority: 160,\n alias: \"vercel-ai-gateway\",\n aliases: [\n \"vercel\",\n ],\n uiAlias: \"vercel\",\n display: {\n name: \"Vercel AI Gateway\",\n icon: \"deployed_code\",\n color: \"#111827\",\n textIcon: \"VG\",\n website: \"https://vercel.com/ai-gateway\",\n notice: {\n text: \"Unified OpenAI-compatible endpoint from Vercel. Use your AI Gateway API key, then pick models with provider/model IDs like anthropic/claude-sonnet-4.6 or openai/gpt-5.4.\",\n apiKeyUrl: \"https://vercel.com/dashboard/~/ai-gateway\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://ai-gateway.vercel.sh/v1/chat/completions\",\n thinkingFormat: \"openai\",\n retry: {\n \"429\": 2,\n },\n usage: {\n url: \"https://ai-gateway.vercel.sh/v1/credits\",\n },\n },\n serviceKinds: [\"llm\",\"embedding\",\"image\",\"imageToText\",\"webSearch\"],\n embeddingConfig: { baseUrl: \"https://ai-gateway.vercel.sh/v1/embeddings\" },\n imageConfig: { baseUrl: \"https://ai-gateway.vercel.sh/v1/images/generations\" },\n searchViaChat: { defaultModel: \"openai/gpt-4o-mini\", pricingUrl: \"https://vercel.com/docs/ai-gateway/pricing\" },\n modelsFetcher: { url: \"https://ai-gateway.vercel.sh/v1/models\", type: \"openai\" },\n passthroughModels: true,\n features: {\n usage: true,\n usageApikey: true,\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","thinkingFormat","retry","usage","url","serviceKinds","embeddingConfig","imageConfig","searchViaChat","defaultModel","pricingUrl","modelsFetcher","type","passthroughModels","features","usageApikey"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,gBAAgB;QAChBC,OAAO;YACL,OAAO;QACT;QACAC,OAAO;YACLC,KAAK;QACP;IACF;IACAC,cAAc;QAAC;QAAM;QAAY;QAAQ;QAAc;KAAY;IACnEC,iBAAiB;QAAEN,SAAS;IAA6C;IACzEO,aAAa;QAAEP,SAAS;IAAqD;IAC7EQ,eAAe;QAAEC,cAAc;QAAsBC,YAAY;IAA6C;IAC9GC,eAAe;QAAEP,KAAK;QAA0CQ,MAAM;IAAS;IAC/EC,mBAAmB;IACnBC,UAAU;QACRX,OAAO;QACPY,aAAa;IACf;AACF"}},
+ {"offset": {"line": 10823, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/vertex-partner.js"],"sourcesContent":["export default {\n id: \"vertex-partner\",\n priority: 260,\n alias: \"vertex-partner\",\n aliases: [\n \"vxp\",\n ],\n uiAlias: \"vxp\",\n display: {\n name: \"Vertex Partner\",\n icon: \"cloud\",\n color: \"#34A853\",\n textIcon: \"VP\",\n website: \"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models\",\n notice: {\n apiKeyUrl: \"https://console.cloud.google.com/iam-admin/serviceaccounts\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://aiplatform.googleapis.com\",\n },\n models: [\n { id: \"deepseek-ai/deepseek-v3.2-maas\", name: \"DeepSeek V3.2 (Vertex)\" },\n { id: \"qwen/qwen3-next-80b-a3b-thinking-maas\", name: \"Qwen3 Next 80B Thinking (Vertex)\" },\n { id: \"qwen/qwen3-next-80b-a3b-instruct-maas\", name: \"Qwen3 Next 80B Instruct (Vertex)\" },\n { id: \"zai-org/glm-5-maas\", name: \"GLM-5 (Vertex)\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;IACX;IACAC,QAAQ;QACN;YAAEhB,IAAI;YAAkCM,MAAM;QAAyB;QACvE;YAAEN,IAAI;YAAyCM,MAAM;QAAmC;QACxF;YAAEN,IAAI;YAAyCM,MAAM;QAAmC;QACxF;YAAEN,IAAI;YAAsBM,MAAM;QAAiB;KACpD;AACH"}},
+ {"offset": {"line": 10872, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/vertex.js"],"sourcesContent":["export default {\n id: \"vertex\",\n priority: 40,\n alias: \"vertex\",\n aliases: [\n \"vx\",\n ],\n uiAlias: \"vx\",\n display: {\n name: \"Vertex AI\",\n icon: \"cloud\",\n color: \"#4285F4\",\n textIcon: \"VX\",\n website: \"https://cloud.google.com/vertex-ai\",\n notice: {\n text: \"New Google Cloud accounts get $300 free credits. Requires GCP project + Service Account with Vertex AI API enabled.\",\n apiKeyUrl: \"https://console.cloud.google.com/iam-admin/serviceaccounts\",\n },\n },\n category: \"freeTier\",\n transport: {\n baseUrl: \"https://aiplatform.googleapis.com\",\n format: \"vertex\",\n },\n models: [\n { id: \"gemini-3.1-pro-preview\", name: \"Gemini 3.1 Pro Preview\" },\n { id: \"gemini-3.1-flash-lite-preview\", name: \"Gemini 3.1 Flash Lite Preview\" },\n { id: \"gemini-3-flash-preview\", name: \"Gemini 3 Flash Preview\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n ],\n serviceKinds: [\"llm\",\"imageToText\"],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","transport","baseUrl","format","models","serviceKinds"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,QAAQ;IACV;IACAC,QAAQ;QACN;YAAElB,IAAI;YAA0BM,MAAM;QAAyB;QAC/D;YAAEN,IAAI;YAAiCM,MAAM;QAAgC;QAC7E;YAAEN,IAAI;YAA0BM,MAAM;QAAyB;QAC/D;YAAEN,IAAI;YAAoBM,MAAM;QAAmB;KACpD;IACDa,cAAc;QAAC;QAAM;KAAc;AACrC"}},
+ {"offset": {"line": 10927, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/volcengine-ark.js"],"sourcesContent":["export default {\n id: \"volcengine-ark\",\n priority: 270,\n alias: \"volcengine-ark\",\n aliases: [\n \"ark\",\n ],\n uiAlias: \"ark\",\n display: {\n name: \"Volcengine Ark\",\n icon: \"cloud\",\n color: \"#1677FF\",\n textIcon: \"ARK\",\n website: \"https://ark.cn-beijing.volces.com\",\n notice: {\n apiKeyUrl: \"https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey\",\n },\n },\n category: \"apikey\",\n transport: {\n baseUrl: \"https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions\",\n headers: {},\n },\n models: [\n { id: \"Doubao-Seed-2.0-Code\", name: \"Doubao-Seed-2.0-Code\" },\n { id: \"Doubao-Seed-2.0-pro\", name: \"Doubao-Seed-2.0-pro\" },\n { id: \"Doubao-Seed-2.0-lite\", name: \"Doubao-Seed-2.0-lite\" },\n { id: \"Doubao-Seed-Code\", name: \"Doubao-Seed-Code\" },\n { id: \"DeepSeek-V4-Flash\", name: \"DeepSeek-V4-Flash\" },\n { id: \"DeepSeek-V4-Pro\", name: \"DeepSeek-V4-Pro\" },\n { id: \"GLM-5.1\", name: \"GLM-5.1\" },\n { id: \"MiniMax-M2.7\", name: \"MiniMax-M2.7\" },\n { id: \"Kimi-K2.6\", name: \"Kimi-K2.6\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","transport","baseUrl","headers","models"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,SAAS,CAAC;IACZ;IACAC,QAAQ;QACN;YAAEjB,IAAI;YAAwBM,MAAM;QAAuB;QAC3D;YAAEN,IAAI;YAAuBM,MAAM;QAAsB;QACzD;YAAEN,IAAI;YAAwBM,MAAM;QAAuB;QAC3D;YAAEN,IAAI;YAAoBM,MAAM;QAAmB;QACnD;YAAEN,IAAI;YAAqBM,MAAM;QAAoB;QACrD;YAAEN,IAAI;YAAmBM,MAAM;QAAkB;QACjD;YAAEN,IAAI;YAAWM,MAAM;QAAU;QACjC;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAaM,MAAM;QAAY;KACtC;AACH"}},
+ {"offset": {"line": 10997, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/voyage-ai.js"],"sourcesContent":["export default {\n id: \"voyage-ai\",\n priority: 40,\n alias: \"voyage-ai\",\n uiAlias: \"voyage\",\n display: {\n name: \"Voyage AI\",\n icon: \"data_array\",\n color: \"#0EA5E9\",\n textIcon: \"VG\",\n website: \"https://www.voyageai.com\",\n notice: {\n apiKeyUrl: \"https://dash.voyageai.com/api-keys\",\n },\n },\n category: \"apikey\",\n authType: \"apikey\",\n transport: null,\n models: [\n { id: \"voyage-3-large\", name: \"Voyage 3 Large\", kind: \"embedding\" },\n { id: \"voyage-3.5\", name: \"Voyage 3.5\", kind: \"embedding\" },\n { id: \"voyage-3.5-lite\", name: \"Voyage 3.5 Lite\", kind: \"embedding\" },\n { id: \"voyage-code-3\", name: \"Voyage Code 3\", kind: \"embedding\" },\n { id: \"voyage-finance-2\", name: \"Voyage Finance 2\", kind: \"embedding\" },\n { id: \"voyage-law-2\", name: \"Voyage Law 2\", kind: \"embedding\" },\n { id: \"voyage-multilingual-2\", name: \"Voyage Multilingual 2\", kind: \"embedding\" },\n ],\n serviceKinds: [\"embedding\"],\n embeddingConfig: { baseUrl: \"https://api.voyageai.com/v1/embeddings\" },\n};\n"],"names":["id","priority","alias","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","transport","models","kind","serviceKinds","embeddingConfig","baseUrl"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,WAAW;IACXC,QAAQ;QACN;YAAEf,IAAI;YAAkBK,MAAM;YAAkBW,MAAM;QAAY;QAClE;YAAEhB,IAAI;YAAcK,MAAM;YAAcW,MAAM;QAAY;QAC1D;YAAEhB,IAAI;YAAmBK,MAAM;YAAmBW,MAAM;QAAY;QACpE;YAAEhB,IAAI;YAAiBK,MAAM;YAAiBW,MAAM;QAAY;QAChE;YAAEhB,IAAI;YAAoBK,MAAM;YAAoBW,MAAM;QAAY;QACtE;YAAEhB,IAAI;YAAgBK,MAAM;YAAgBW,MAAM;QAAY;QAC9D;YAAEhB,IAAI;YAAyBK,MAAM;YAAyBW,MAAM;QAAY;KACjF;IACDC,cAAc;QAAC;KAAY;IAC3BC,iBAAiB;QAAEC,SAAS;IAAyC;AACvE"}},
+ {"offset": {"line": 11067, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/xai.js"],"sourcesContent":["export default {\n id: \"xai\",\n priority: 280,\n alias: \"xai\",\n display: {\n name: \"xAI (Grok)\",\n icon: \"auto_awesome\",\n color: \"#1DA1F2\",\n textIcon: \"XA\",\n website: \"https://x.ai\",\n notice: {\n apiKeyUrl: \"https://console.x.ai\",\n },\n },\n category: \"oauth\",\n authModes: [\n \"oauth\",\n \"apikey\",\n ],\n hasOAuth: true,\n transport: {\n baseUrl: \"https://api.x.ai/v1/chat/completions\",\n validateUrl: \"https://api.x.ai/v1/models\",\n responsesUrl: \"https://api.x.ai/v1/responses\",\n clientId: \"b1a00492-073a-47ea-816f-4c329264a828\",\n tokenUrl: \"https://auth.x.ai/oauth2/token\",\n refreshUrl: \"https://auth.x.ai/oauth2/token\",\n // OAuth-only SuperGrok quota surfaces:\n // - url: monthly API usage allotment (JSON)\n // - creditsUrl: weekly SuperGrok limit (grpc-web)\n // - settingsUrl: plan label (subscription_tier_display)\n usage: {\n url: \"https://cli-chat-proxy.grok.com/v1/billing\",\n creditsUrl: \"https://grok.com/grok_api_v2.GrokBuildBilling/GetGrokCreditsConfig\",\n settingsUrl: \"https://cli-chat-proxy.grok.com/v1/settings\",\n },\n },\n models: [\n { id: \"grok-4\", name: \"Grok 4\" },\n { id: \"grok-4-fast-reasoning\", name: \"Grok 4 Fast Reasoning\" },\n { id: \"grok-code-fast-1\", name: \"Grok Code Fast\" },\n { id: \"grok-3\", name: \"Grok 3\" },\n {\n id: \"grok-imagine-image-quality\",\n name: \"Grok Imagine Image Quality\",\n capabilities: [\"text2img\", \"edit\"],\n params: [\"n\", \"aspect_ratio\", \"resolution\", \"response_format\", \"size\"],\n kind: \"image\",\n },\n {\n id: \"grok-2-image-1212\",\n name: \"Grok 2 Image\",\n capabilities: [\"text2img\", \"edit\"],\n params: [\"n\", \"aspect_ratio\", \"resolution\", \"response_format\", \"size\"],\n kind: \"image\",\n },\n {\n id: \"grok-imagine-video\",\n name: \"Grok Imagine Video\",\n params: [\"duration\", \"aspect_ratio\", \"resolution\"],\n kind: \"video\",\n },\n ],\n serviceKinds: [\"llm\", \"imageToText\", \"webSearch\", \"image\", \"video\"],\n imageConfig: {\n baseUrl: \"https://api.x.ai/v1/images/generations\",\n editsUrl: \"https://api.x.ai/v1/images/edits\",\n bodyFields: [\"model\", \"prompt\", \"n\", \"response_format\", \"aspect_ratio\", \"resolution\", \"image\", \"images\"],\n },\n // Async video jobs (POST returns { request_id }, GET polls until done/failed).\n // Docs: https://docs.x.ai/developers/rest-api-reference/inference/videos\n videoConfig: { baseUrl: \"https://api.x.ai/v1/videos\" },\n searchViaChat: {\n defaultModel: \"grok-4.20-reasoning\",\n endpoint: \"https://api.x.ai/v1/responses\",\n pricingUrl: \"https://x.ai/api#pricing\",\n },\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authModes","hasOAuth","transport","baseUrl","validateUrl","responsesUrl","clientId","tokenUrl","refreshUrl","usage","url","creditsUrl","settingsUrl","models","capabilities","params","kind","serviceKinds","imageConfig","editsUrl","bodyFields","videoConfig","searchViaChat","defaultModel","endpoint","pricingUrl","features"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,WAAW;QACT;QACA;KACD;IACDC,UAAU;IACVC,WAAW;QACTC,SAAS;QACTC,aAAa;QACbC,cAAc;QACdC,UAAU;QACVC,UAAU;QACVC,YAAY;QACZ,uCAAuC;QACvC,4CAA4C;QAC5C,kDAAkD;QAClD,wDAAwD;QACxDC,OAAO;YACLC,KAAK;YACLC,YAAY;YACZC,aAAa;QACf;IACF;IACAC,QAAQ;QACN;YAAEzB,IAAI;YAAUI,MAAM;QAAS;QAC/B;YAAEJ,IAAI;YAAyBI,MAAM;QAAwB;QAC7D;YAAEJ,IAAI;YAAoBI,MAAM;QAAiB;QACjD;YAAEJ,IAAI;YAAUI,MAAM;QAAS;QAC/B;YACEJ,IAAI;YACJI,MAAM;YACNsB,cAAc;gBAAC;gBAAY;aAAO;YAClCC,QAAQ;gBAAC;gBAAK;gBAAgB;gBAAc;gBAAmB;aAAO;YACtEC,MAAM;QACR;QACA;YACE5B,IAAI;YACJI,MAAM;YACNsB,cAAc;gBAAC;gBAAY;aAAO;YAClCC,QAAQ;gBAAC;gBAAK;gBAAgB;gBAAc;gBAAmB;aAAO;YACtEC,MAAM;QACR;QACA;YACE5B,IAAI;YACJI,MAAM;YACNuB,QAAQ;gBAAC;gBAAY;gBAAgB;aAAa;YAClDC,MAAM;QACR;KACD;IACDC,cAAc;QAAC;QAAO;QAAe;QAAa;QAAS;KAAQ;IACnEC,aAAa;QACXf,SAAS;QACTgB,UAAU;QACVC,YAAY;YAAC;YAAS;YAAU;YAAK;YAAmB;YAAgB;YAAc;YAAS;SAAS;IAC1G;IACA,+EAA+E;IAC/E,yEAAyE;IACzEC,aAAa;QAAElB,SAAS;IAA6B;IACrDmB,eAAe;QACbC,cAAc;QACdC,UAAU;QACVC,YAAY;IACd;IACAC,UAAU;QACRjB,OAAO;IACT;AACF"}},
+ {"offset": {"line": 11207, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/xiaomi-mimo.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"xiaomi-mimo\",\n priority: 290,\n alias: \"xiaomi-mimo\",\n aliases: [\n \"mimo\",\n ],\n uiAlias: \"mimo\",\n display: {\n name: \"Xiaomi MiMo\",\n icon: \"smart_toy\",\n color: \"#FF6900\",\n textIcon: \"XM\",\n website: \"https://xiaomimimo.com\",\n notice: {\n apiKeyUrl: \"https://platform.xiaomimimo.com/console/api-keys\",\n },\n },\n category: \"apikey\",\n serviceKinds: [\"llm\", \"tts\"],\n transport: {\n baseUrl: \"https://api.xiaomimimo.com/v1/chat/completions\",\n validateUrl: \"https://api.xiaomimimo.com/v1/models\",\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n transports: [\n {\n format: \"openai\",\n baseUrl: \"https://api.xiaomimimo.com/v1/chat/completions\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" },\n },\n {\n format: \"claude\",\n baseUrl: \"https://api.xiaomimimo.com/anthropic/v1/messages\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\" },\n },\n ],\n models: [\n { id: \"mimo-v2.5-pro\", name: \"MiMo V2.5 Pro\" },\n { id: \"mimo-v2.5\", name: \"MiMo V2.5\" },\n { id: \"mimo-v2-omni\", name: \"MiMo V2 Omni\" },\n { id: \"mimo-v2-flash\", name: \"MiMo V2 Flash\" },\n { id: \"mimo-v2.5-tts\", name: \"MiMo V2.5 TTS\", kind: \"tts\" },\n ],\n ttsConfig: {\n baseUrl: \"https://api.xiaomimimo.com/v1/chat/completions\",\n authType: \"apikey\",\n authHeader: \"bearer\",\n format: \"xiaomi-mimo-tts\",\n },\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","serviceKinds","transport","baseUrl","validateUrl","transports","format","auth","combined","header","scheme","headers","models","kind","ttsConfig","authType","authHeader"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,cAAc;QAAC;QAAO;KAAM;IAC5BC,WAAW;QACTC,SAAS;QACTC,aAAa;IACf;IACA,uFAAuF;IACvFC,YAAY;QACV;YACEC,QAAQ;YACRH,SAAS;YACTI,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QACpE;QACA;YACEJ,QAAQ;YACRH,SAAS;YACTQ,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCJ,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;YAAM;QAC7D;KACD;IACDE,QAAQ;QACN;YAAEzB,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAAiBM,MAAM;YAAiBoB,MAAM;QAAM;KAC3D;IACDC,WAAW;QACTX,SAAS;QACTY,UAAU;QACVC,YAAY;QACZV,QAAQ;IACV;AACF"}},
+ {"offset": {"line": 11298, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/xiaomi-tokenplan.js"],"sourcesContent":["import { CLAUDE_API_HEADERS } from \"../shared.js\";\n\nexport default {\n id: \"xiaomi-tokenplan\",\n priority: 300,\n alias: \"xiaomi-tokenplan\",\n aliases: [\n \"xmtp\",\n ],\n uiAlias: \"xmtp\",\n display: {\n name: \"Xiaomi MiMo (Token Plan)\",\n icon: \"smart_toy\",\n color: \"#FF6700\",\n textIcon: \"XT\",\n website: \"https://mimo.xiaomi.com\",\n notice: {\n text: \"Xiaomi MiMo Token Plan subscription (API key starts with tp-). Token Plan keys are cluster-specific — select the region matching your subscription.\",\n apiKeyUrl: \"https://mimo.xiaomi.com\",\n },\n },\n category: \"apikey\",\n hasProviderSpecificData: true,\n regions: [\n { id: \"sgp\", label: \"Singapore (新加坡)\" },\n { id: \"cn\", label: \"China (中国大陆)\" },\n { id: \"ams\", label: \"Amsterdam (阿姆斯特丹)\" },\n ],\n defaultRegion: \"sgp\",\n transport: {\n baseUrl: \"https://token-plan-sgp.xiaomimimo.com/v1/chat/completions\",\n regions: {\n sgp: \"https://token-plan-sgp.xiaomimimo.com/v1\",\n cn: \"https://token-plan-cn.xiaomimimo.com/v1\",\n ams: \"https://token-plan-ams.xiaomimimo.com/v1\",\n },\n defaultRegion: \"sgp\",\n },\n // Multi-endpoint: pick the transport matching client sourceFormat to skip translation.\n // baseUrl omitted — region-dynamic, resolved in the executor's buildUrl.\n transports: [\n {\n format: \"openai\",\n auth: { combined: true, header: \"Authorization\", scheme: \"bearer\" },\n },\n {\n format: \"claude\",\n headers: { ...CLAUDE_API_HEADERS },\n auth: { combined: true, header: \"x-api-key\", scheme: \"raw\" },\n },\n ],\n models: [\n { id: \"mimo-v2.5-pro\", name: \"MiMo V2.5 Pro\" },\n { id: \"mimo-v2.5-pro-claude\", name: \"MiMo V2.5 Pro (Claude Native)\", targetFormat: \"claude\", upstreamModelId: \"mimo-v2.5-pro\" },\n { id: \"mimo-v2.5\", name: \"MiMo V2.5\" },\n { id: \"mimo-v2-pro\", name: \"MiMo V2 Pro\" },\n { id: \"mimo-v2-omni\", name: \"MiMo V2 Omni\" },\n { id: \"mimo-v2-tts\", name: \"MiMo V2 TTS\" },\n { id: \"mimo-v2.5-tts\", name: \"MiMo V2.5 TTS\" },\n { id: \"mimo-v2.5-tts-voiceclone\", name: \"MiMo V2.5 TTS Voice Clone\" },\n { id: \"mimo-v2.5-tts-voicedesign\", name: \"MiMo V2.5 TTS Voice Design\" },\n ],\n};\n"],"names":["id","priority","alias","aliases","uiAlias","display","name","icon","color","textIcon","website","notice","text","apiKeyUrl","category","hasProviderSpecificData","regions","label","defaultRegion","transport","baseUrl","sgp","cn","ams","transports","format","auth","combined","header","scheme","headers","models","targetFormat","upstreamModelId"],"mappings":";;;;AAAA;;uCAEe;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;QACP;KACD;IACDC,SAAS;IACTC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,MAAM;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,yBAAyB;IACzBC,SAAS;QACP;YAAEhB,IAAI;YAAOiB,OAAO;QAAkB;QACtC;YAAEjB,IAAI;YAAMiB,OAAO;QAAe;QAClC;YAAEjB,IAAI;YAAOiB,OAAO;QAAoB;KACzC;IACDC,eAAe;IACfC,WAAW;QACTC,SAAS;QACTJ,SAAS;YACPK,KAAK;YACLC,IAAI;YACJC,KAAK;QACP;QACAL,eAAe;IACjB;IACA,uFAAuF;IACvF,yEAAyE;IACzEM,YAAY;QACV;YACEC,QAAQ;YACRC,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAiBC,QAAQ;YAAS;QACpE;QACA;YACEJ,QAAQ;YACRK,SAAS;gBAAE,GAAG,6JAAkB;YAAC;YACjCJ,MAAM;gBAAEC,UAAU;gBAAMC,QAAQ;gBAAaC,QAAQ;YAAM;QAC7D;KACD;IACDE,QAAQ;QACN;YAAE/B,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAAwBM,MAAM;YAAiC0B,cAAc;YAAUC,iBAAiB;QAAgB;QAC9H;YAAEjC,IAAI;YAAaM,MAAM;QAAY;QACrC;YAAEN,IAAI;YAAeM,MAAM;QAAc;QACzC;YAAEN,IAAI;YAAgBM,MAAM;QAAe;QAC3C;YAAEN,IAAI;YAAeM,MAAM;QAAc;QACzC;YAAEN,IAAI;YAAiBM,MAAM;QAAgB;QAC7C;YAAEN,IAAI;YAA4BM,MAAM;QAA4B;QACpE;YAAEN,IAAI;YAA6BM,MAAM;QAA6B;KACvE;AACH"}},
+ {"offset": {"line": 11417, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/youcom.js"],"sourcesContent":["export default {\n id: \"youcom\",\n alias: \"youcom\",\n display: {\n name: \"You.com Search\",\n icon: \"search\",\n color: \"#7C3AED\",\n textIcon: \"YC\",\n website: \"https://you.com\",\n notice: {\n apiKeyUrl: \"https://api.you.com\"\n }\n },\n category: \"apikey\",\n authType: \"apikey\",\n serviceKinds: [\n \"webSearch\"\n ],\n searchConfig: {\n baseUrl: \"https://ydc-index.io/v1/search\",\n method: \"GET\",\n authType: \"apikey\",\n authHeader: \"x-api-key\",\n costPerQuery: 0.005,\n freeMonthlyQuota: 0,\n searchTypes: [\n \"web\",\n \"news\"\n ],\n defaultMaxResults: 5,\n maxMaxResults: 100,\n timeoutMs: 10000,\n cacheTTLMs: 300000\n }\n};\n"],"names":["id","alias","display","name","icon","color","textIcon","website","notice","apiKeyUrl","category","authType","serviceKinds","searchConfig","baseUrl","method","authHeader","costPerQuery","freeMonthlyQuota","searchTypes","defaultMaxResults","maxMaxResults","timeoutMs","cacheTTLMs"],"mappings":";;;;uCAAe;IACbA,IAAI;IACJC,OAAO;IACPC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,UAAU;QACVC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,cAAc;QACZ;KACD;IACDC,cAAc;QACZC,SAAS;QACTC,QAAQ;QACRJ,UAAU;QACVK,YAAY;QACZC,cAAc;QACdC,kBAAkB;QAClBC,aAAa;YACX;YACA;SACD;QACDC,mBAAmB;QACnBC,eAAe;QACfC,WAAW;QACXC,YAAY;IACd;AACF"}},
+ {"offset": {"line": 11460, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/registry/zed.js"],"sourcesContent":["// Zed provider — RSA keypair callback auth (NOT standard OAuth).\nexport default {\n id: \"zed\",\n priority: 10,\n alias: \"zd\",\n uiAlias: \"zd\",\n hidden: true,\n display: {\n name: \"Zed\",\n icon: \"code\",\n color: \"#A855F7\",\n website: \"https://zed.dev\",\n notice: {\n signupUrl: \"https://zed.dev/native_app_signin\",\n },\n },\n category: \"oauth\",\n authType: \"oauth\",\n hasOAuth: true,\n\n transport: {\n // Zed hosted LLM aggregator: cloud.zed.dev/completions is a\n // multi-format proxy fronting Anthropic/OpenAI/Google/xAI depending on the model.\n // Wire protocol = NDJSON/SSE-ish stream authenticated with a short-lived LLM bearer\n // token exchanged from the RSA-decrypted access_token (see open-sse/shared/zedAuth).\n baseUrl: \"https://cloud.zed.dev/completions\",\n format: \"openai\",\n forceStream: true,\n headers: {\n \"content-type\": \"application/json\",\n },\n // Auth scheme is non-standard: \"Authorization: \" plus a duplicate\n // x-zed-cloud-token header (verified in zed_account.rs build_authorization_header +\n // cloud fetch). Executor builds both; scheme here is a marker for config-driven tooling.\n auth: {\n combined: true,\n header: \"Authorization\",\n scheme: \" \", // placeholder — real value built in executor\n },\n usage: {\n url: \"https://cloud.zed.dev/client/users/me\", // verified in zed_account.rs\n },\n // Live catalog discovery — Zed's hosted model list changes frequently and is fetched\n // per-connection rather than hardcoded.\n modelsUrl: \"https://cloud.zed.dev/models\",\n },\n\n // Empty static catalog + passthrough: Zed fronts a rotating set of upstream models\n // (Claude/GPT/Gemini/Grok). Resolved live via modelsUrl; any client-sent model id is\n // forwarded as-is rather than validated against a frozen list.\n models: [],\n passthroughModels: true,\n\n oauth: {\n // Zed auth flow is RSA-based, NOT OAuth2/PKCE:\n // 1. App generates RSA-2048 keypair locally (PKCS#1 DER, URL-safe base64).\n // 2. Bind random TCP port on 127.0.0.1.\n // 3. Open https://zed.dev/native_app_signin?native_app_port={port}&native_app_public_key={pub}.\n // 4. After login, browser redirects http://127.0.0.1:{port}/?user_id=...&access_token=...\n // where access_token = base64(RSA-encrypted plaintext token).\n // 5. Decrypt with private key (OAEP-SHA256, fallback PKCS1v15). Store user_id + plaintext token.\n // No clientId/clientSecret/tokenUrl/refreshUrl — long-lived access_token, no refresh.\n authorizeUrl: \"https://zed.dev/native_app_signin\",\n platform: \"zed\",\n rsaKeyExchange: true, // new flag: signals frontend/router this flow needs local RSA + TCP listener.\n },\n\n features: {\n usage: true,\n },\n};\n"],"names":["id","priority","alias","uiAlias","hidden","display","name","icon","color","website","notice","signupUrl","category","authType","hasOAuth","transport","baseUrl","format","forceStream","headers","auth","combined","header","scheme","usage","url","modelsUrl","models","passthroughModels","oauth","authorizeUrl","platform","rsaKeyExchange","features"],"mappings":"AAAA,iEAAiE;;;;;uCAClD;IACbA,IAAI;IACJC,UAAU;IACVC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,SAAS;QACPC,MAAM;QACNC,MAAM;QACNC,OAAO;QACPC,SAAS;QACTC,QAAQ;YACNC,WAAW;QACb;IACF;IACAC,UAAU;IACVC,UAAU;IACVC,UAAU;IAEVC,WAAW;QACT,4DAA4D;QAC5D,kFAAkF;QAClF,oFAAoF;QACpF,qFAAqF;QACrFC,SAAS;QACTC,QAAQ;QACRC,aAAa;QACbC,SAAS;YACP,gBAAgB;QAClB;QACA,0FAA0F;QAC1F,oFAAoF;QACpF,yFAAyF;QACzFC,MAAM;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;QACV;QACAC,OAAO;YACLC,KAAK;QACP;QACA,qFAAqF;QACrF,wCAAwC;QACxCC,WAAW;IACb;IAEA,mFAAmF;IACnF,qFAAqF;IACrF,+DAA+D;IAC/DC,QAAQ,EAAE;IACVC,mBAAmB;IAEnBC,OAAO;QACL,+CAA+C;QAC/C,6EAA6E;QAC7E,0CAA0C;QAC1C,kGAAkG;QAClG,4FAA4F;QAC5F,mEAAmE;QACnE,mGAAmG;QACnG,sFAAsF;QACtFC,cAAc;QACdC,UAAU;QACVC,gBAAgB;IAClB;IAEAC,UAAU;QACRT,OAAO;IACT;AACF"}},
+ {"offset": {"line": 11535, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/schema.js"],"sourcesContent":["// Provider transport schema: shared defaults + endpoint defaults + resolver (skeleton, not wired)\nimport { DEFAULT_RETRY_CONFIG, FETCH_CONNECT_TIMEOUT_MS } from \"../config/runtimeConfig.js\";\n\n/**\n * RegistryEntry shape — full contract for registry/{id}.js. See REGISTRY_TEMPLATE.js for a worked example.\n * Only `id` + `category` are strictly required; everything else is optional/derived.\n *\n * @typedef {Object} RegistryEntry\n * @property {string} id Unique provider id (kebab-case). REQUIRED.\n * @property {string} [alias] Short key for PROVIDER_MODELS (defaults to id).\n * @property {string[]}[aliases] Extra lookup tokens resolving to this provider.\n * @property {string} [uiAlias] Token shown in UI badges.\n * @property {string} category \"apikey\"|\"oauth\"|\"freeTier\"|... drives UI grouping. REQUIRED.\n * @property {string} [authType] \"apikey\"|\"oauth\" auth hint.\n * @property {string[]}[authModes] Allowed auth modes when provider supports both.\n * @property {boolean} [hasOAuth] Provider exposes an OAuth flow.\n * @property {boolean} [noAuth] Provider needs no credentials (local/free).\n * @property {Object} [display] UI: {name,icon,color,textIcon,website,notice,deprecated,deprecationNotice,kindNotice,mediaPriority}.\n * @property {Object} [transport] Runtime HTTP config (see TransportConfig below). Builds PROVIDERS[id].\n * @property {Object} [oauth] OAuth flow config (see OAuthConfig). Builds PROVIDER_OAUTH[id].\n * @property {Object} [media] Non-LLM services (see MediaConfig). Builds PROVIDER_MEDIA[id].\n * @property {Array} [models] Model list; omit = no model key, [] = explicit empty.\n * @property {Object} [features] Feature flags, e.g. {usage:true}.\n * @property {Object} [thinkingConfig] Reasoning UI: {options:[...],defaultMode}.\n * @property {boolean} [passthroughModels] Forward client model id untouched.\n *\n * TransportConfig: { baseUrl, format, headers, auth, forceStream, urlSuffix, quirks, retry, timeoutMs,\n * executor, clientId, clientSecret, tokenUrl, refreshUrl, usage, cliVersion, apiClient, regions,\n * defaultRegion, modelsFetcher, validateUrl, responsesUrl } — clientId/clientSecret/tokenUrl are\n * injected from `oauth` automatically (single source); declare them in `oauth`, not here.\n *\n * OAuthConfig: { clientId, authorizeUrl, tokenUrl, deviceCodeUrl, refreshUrl, scope|scopes, redirectUri,\n * callbackPath, fixedPort, codeChallengeMethod, extraParams, refresh:{encoding,scope}, refreshLeadMs,\n * userInfoUrl }.\n *\n * MediaConfig: { serviceKinds:[...], ttsConfig, sttConfig, embeddingConfig, imageConfig,\n * searchViaChat:{defaultModel,pricingUrl}, hiddenKinds } — each *Config: {baseUrl,authType,authHeader,\n * format,defaultModel,models:[{id,name,dimensions?}]}.\n */\n\n// Shared transport defaults — provider only overrides fields that differ.\n// NOTE: runtime (index.js buildTransport) only re-applies `format`; the rest documents the contract\n// and feeds the (currently unwired) resolveProvider(). Adding keys here does NOT change PROVIDERS.\nexport const PROVIDER_DEFAULTS = {\n baseUrl: \"\",\n format: \"openai\",\n headers: {},\n auth: { header: \"Authorization\", scheme: \"bearer\", source: [\"accessToken\", \"apiKey\"] },\n forceStream: false,\n urlSuffix: \"\",\n quirks: {},\n passthroughModels: false,\n retry: DEFAULT_RETRY_CONFIG,\n timeoutMs: FETCH_CONNECT_TIMEOUT_MS,\n executor: \"default\"\n};\n\n// Default endpoints per format (provider only overrides what differs)\nexport const ENDPOINT_DEFAULTS = {\n openai: { chat: \"/chat/completions\", test: \"/models\", models: \"/models\" },\n claude: { chat: \"/messages\", test: \"/models\", countTokens: \"/messages/count_tokens\" },\n gemini: { chat: \"/{model}:streamGenerateContent\", models: \"/models\", test: \"/models\" }\n};\n\n// Deep-merge a provider entry over PROVIDER_DEFAULTS (defensive for missing transport)\nexport function resolveProvider(entry) {\n const transport = (entry && entry.transport) || {};\n return {\n ...PROVIDER_DEFAULTS,\n ...transport,\n headers: { ...PROVIDER_DEFAULTS.headers, ...transport.headers },\n auth: { ...PROVIDER_DEFAULTS.auth, ...transport.auth },\n quirks: { ...PROVIDER_DEFAULTS.quirks, ...transport.quirks },\n retry: { ...PROVIDER_DEFAULTS.retry, ...transport.retry }\n };\n}\n"],"names":["PROVIDER_DEFAULTS","baseUrl","format","headers","auth","header","scheme","source","forceStream","urlSuffix","quirks","passthroughModels","retry","timeoutMs","executor","ENDPOINT_DEFAULTS","openai","chat","test","models","claude","countTokens","gemini","resolveProvider","entry","transport"],"mappings":";;;;;;;;AAAA,kGAAkG;AAClG;;AA0CO,MAAMA,oBAAoB;IAC/BC,SAAS;IACTC,QAAQ;IACRC,SAAS,CAAC;IACVC,MAAM;QAAEC,QAAQ;QAAiBC,QAAQ;QAAUC,QAAQ;YAAC;YAAe;SAAS;IAAC;IACrFC,aAAa;IACbC,WAAW;IACXC,QAAQ,CAAC;IACTC,mBAAmB;IACnBC,OAAO,mLAAoB;IAC3BC,WAAW,uLAAwB;IACnCC,UAAU;AACZ;AAGO,MAAMC,oBAAoB;IAC/BC,QAAQ;QAAEC,MAAM;QAAqBC,MAAM;QAAWC,QAAQ;IAAU;IACxEC,QAAQ;QAAEH,MAAM;QAAaC,MAAM;QAAWG,aAAa;IAAyB;IACpFC,QAAQ;QAAEL,MAAM;QAAkCE,QAAQ;QAAWD,MAAM;IAAU;AACvF;AAGO,SAASK,gBAAgBC,KAAK;IACnC,MAAMC,YAAY,AAACD,SAASA,MAAMC,SAAS,IAAK,CAAC;IACjD,OAAO;QACL,GAAGzB,iBAAiB;QACpB,GAAGyB,SAAS;QACZtB,SAAS;YAAE,GAAGH,kBAAkBG,OAAO;YAAE,GAAGsB,UAAUtB,OAAO;QAAC;QAC9DC,MAAM;YAAE,GAAGJ,kBAAkBI,IAAI;YAAE,GAAGqB,UAAUrB,IAAI;QAAC;QACrDM,QAAQ;YAAE,GAAGV,kBAAkBU,MAAM;YAAE,GAAGe,UAAUf,MAAM;QAAC;QAC3DE,OAAO;YAAE,GAAGZ,kBAAkBY,KAAK;YAAE,GAAGa,UAAUb,KAAK;QAAC;IAC1D;AACF"}},
+ {"offset": {"line": 11610, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/open-sse/providers/shared.js"],"sourcesContent":["import { platform, arch } from \"os\";\n\n// === OS/Arch helpers (Stainless fingerprint) ===\nexport function mapStainlessOs() {\n switch (platform()) {\n case \"darwin\": return \"MacOS\";\n case \"win32\": return \"Windows\";\n case \"linux\": return \"Linux\";\n case \"freebsd\": return \"FreeBSD\";\n default: return `Other::${platform()}`;\n }\n}\n\nexport function mapStainlessArch() {\n switch (arch()) {\n case \"x64\": return \"x64\";\n case \"arm64\": return \"arm64\";\n case \"ia32\": return \"x86\";\n default: return `other::${arch()}`;\n }\n}\n\n// Anthropic API version (single source — reused across claude-format providers/executors)\nexport const ANTHROPIC_API_VERSION = \"2023-06-01\";\n\n// Shared Claude-compatible API headers (reused across claude-format providers)\nexport const CLAUDE_API_HEADERS = {\n \"Anthropic-Version\": ANTHROPIC_API_VERSION,\n \"Anthropic-Beta\": \"claude-code-20250219,interleaved-thinking-2025-05-14\"\n};\n\n// Full Claude CLI fingerprint — required by providers that gate on client identity (e.g. agentrouter)\nexport const CLAUDE_CLI_SPOOF_HEADERS = {\n \"Anthropic-Version\": ANTHROPIC_API_VERSION,\n \"Anthropic-Beta\": \"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28\",\n \"Anthropic-Dangerous-Direct-Browser-Access\": \"true\",\n \"User-Agent\": \"claude-cli/2.1.92 (external, sdk-cli)\",\n \"X-App\": \"cli\",\n \"X-Stainless-Helper-Method\": \"stream\",\n \"X-Stainless-Retry-Count\": \"0\",\n \"X-Stainless-Runtime-Version\": \"v24.14.0\",\n \"X-Stainless-Package-Version\": \"0.80.0\",\n \"X-Stainless-Runtime\": \"node\",\n \"X-Stainless-Lang\": \"js\",\n \"X-Stainless-Arch\": mapStainlessArch(),\n \"X-Stainless-Os\": mapStainlessOs(),\n \"X-Stainless-Timeout\": \"600\"\n};\n\nconst ANTHROPIC_BETA_BASE = [\n \"claude-code-20250219\",\n \"oauth-2025-04-20\",\n \"interleaved-thinking-2025-05-14\",\n \"context-management-2025-06-27\",\n \"prompt-caching-scope-2026-01-05\",\n \"structured-outputs-2025-12-15\",\n \"fast-mode-2026-02-01\",\n \"redact-thinking-2026-02-12\",\n \"token-efficient-tools-2026-03-28\",\n];\nconst ANTHROPIC_BETA_HEAVY_AGENT = [\"advanced-tool-use-2025-11-20\", \"effort-2025-11-24\"];\n\n// Heavy-agent beta flags are gated to opus/sonnet — cheaper models don't need them.\nexport function selectAnthropicBeta(model = \"\") {\n const flags = [...ANTHROPIC_BETA_BASE];\n if (/^claude-(opus|sonnet)/.test(model)) flags.push(...ANTHROPIC_BETA_HEAVY_AGENT);\n return flags.join(\",\");\n}\n\n// Shared baseUrls\nexport const KIMI_CODING_BASE_URL = \"https://api.kimi.com/coding/v1/messages\";\n\n// Default base for dynamic compat providers (openai-compatible-* / anthropic-compatible-*) when user gives no baseUrl\nexport const OPENAI_COMPAT_BASE = \"https://api.openai.com/v1\";\nexport const ANTHROPIC_COMPAT_BASE = \"https://api.anthropic.com/v1\";\n\n// Official Antigravity IDE Desktop 2.1.1 fingerprint captured from macOS arm64.\n// Keep this static even when 9router runs on Linux: the provider profile is\n// intentionally matching the IDE client, not the server host.\nexport const ANTIGRAVITY_IDE_VERSION = \"2.1.1\";\nexport const ANTIGRAVITY_IDE_BASE_URL = \"https://daily-cloudcode-pa.googleapis.com\";\nexport const ANTIGRAVITY_IDE_USER_AGENT = `antigravity/ide/${ANTIGRAVITY_IDE_VERSION} darwin/arm64`;\n\n// Antigravity OAuth client credentials (public CLI client — duplicated in usage.js + src/lib/oauth)\nexport const ANTIGRAVITY_OAUTH_CLIENT = {\n clientId: \"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com\",\n clientSecret: \"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\"\n};\n\n// Gemini (Google) OAuth client credentials (public CLI client — shared by gemini, gemini-cli, src/lib/oauth)\nexport const GOOGLE_OAUTH_CLIENT = {\n clientId: \"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com\",\n clientSecret: \"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\"\n};\n"],"names":["mapStainlessOs","mapStainlessArch","ANTHROPIC_API_VERSION","CLAUDE_API_HEADERS","CLAUDE_CLI_SPOOF_HEADERS","ANTHROPIC_BETA_BASE","ANTHROPIC_BETA_HEAVY_AGENT","selectAnthropicBeta","model","flags","test","push","join","KIMI_CODING_BASE_URL","OPENAI_COMPAT_BASE","ANTHROPIC_COMPAT_BASE","ANTIGRAVITY_IDE_VERSION","ANTIGRAVITY_IDE_BASE_URL","ANTIGRAVITY_IDE_USER_AGENT","ANTIGRAVITY_OAUTH_CLIENT","clientId","clientSecret","GOOGLE_OAUTH_CLIENT"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAGO,SAASA;IACd,OAAQ,IAAA,yGAAQ;QACd,KAAK;YAAU,OAAO;QACtB,KAAK;YAAS,OAAO;QACrB,KAAK;YAAS,OAAO;QACrB,KAAK;YAAW,OAAO;QACvB;YAAS,OAAO,CAAC,OAAO,EAAE,IAAA,yGAAQ,KAAI;IACxC;AACF;AAEO,SAASC;IACd,OAAQ,IAAA,qGAAI;QACV,KAAK;YAAO,OAAO;QACnB,KAAK;YAAS,OAAO;QACrB,KAAK;YAAQ,OAAO;QACpB;YAAS,OAAO,CAAC,OAAO,EAAE,IAAA,qGAAI,KAAI;IACpC;AACF;AAGO,MAAMC,wBAAwB;AAG9B,MAAMC,qBAAqB;IAChC,qBAAqBD;IACrB,kBAAkB;AACpB;AAGO,MAAME,2BAA2B;IACtC,qBAAqBF;IACrB,kBAAkB;IAClB,6CAA6C;IAC7C,cAAc;IACd,SAAS;IACT,6BAA6B;IAC7B,2BAA2B;IAC3B,+BAA+B;IAC/B,+BAA+B;IAC/B,uBAAuB;IACvB,oBAAoB;IACpB,oBAAoBD;IACpB,kBAAkBD;IAClB,uBAAuB;AACzB;AAEA,MAAMK,sBAAsB;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AACD,MAAMC,6BAA6B;IAAC;IAAgC;CAAoB;AAGjF,SAASC,oBAAoBC,QAAQ,EAAE;IAC5C,MAAMC,QAAQ;WAAIJ;KAAoB;IACtC,IAAI,wBAAwBK,IAAI,CAACF,QAAQC,MAAME,IAAI,IAAIL;IACvD,OAAOG,MAAMG,IAAI,CAAC;AACpB;AAGO,MAAMC,uBAAuB;AAG7B,MAAMC,qBAAqB;AAC3B,MAAMC,wBAAwB;AAK9B,MAAMC,0BAA0B;AAChC,MAAMC,2BAA2B;AACjC,MAAMC,6BAA6B,CAAC,gBAAgB,EAAEF,wBAAwB,aAAa,CAAC;AAG5F,MAAMG,2BAA2B;IACtCC,UAAU;IACVC,cAAc;AAChB;AAGO,MAAMC,sBAAsB;IACjCF,UAAU;IACVC,cAAc;AAChB"}},
+ {"offset": {"line": 11729, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/package.json.[json].mjs/turbopack:/package.json"],"sourcesContent":["{\"name\":\"9router-app\",\"version\":\"0.5.55\",\"description\":\"9Router web dashboard\",\"private\":true,\"scripts\":{\"dev\":\"next dev --port 20127\",\"dev:webpack\":\"next dev --webpack --port 20127\",\"build\":\"next build --webpack\",\"postbuild\":\"node scripts/copy-standalone-assets.mjs\",\"postbuild:bun\":\"node scripts/copy-standalone-assets.mjs\",\"start\":\"node custom-server.js --port 20127\",\"dev:bun\":\"bun --bun next dev --webpack --port 20127\",\"build:bun\":\"bun --bun next build --webpack\",\"start:bun\":\"bun ./.next/standalone/custom-server.js\",\"cli:pack\":\"npm --prefix cli run pack:cli\",\"cli:publish\":\"npm --prefix cli run publish:cli\"},\"dependencies\":{\"@dnd-kit/core\":\"^6.3.1\",\"@dnd-kit/modifiers\":\"^9.0.0\",\"@dnd-kit/sortable\":\"^10.0.0\",\"@dnd-kit/utilities\":\"^3.2.2\",\"@monaco-editor/react\":\"^4.7.0\",\"@next/third-parties\":\"^16.3.1\",\"@node-saml/node-saml\":\"^5.1.0\",\"@xyflow/react\":\"^12.11.3\",\"bcryptjs\":\"^3.0.3\",\"chalk\":\"^5.6.2\",\"confbox\":\"^0.2.4\",\"express\":\"^5.2.1\",\"http-proxy-middleware\":\"^3.0.7\",\"jose\":\"^6.2.9\",\"marked\":\"^18.0.10\",\"material-symbols\":\"^0.44.12\",\"monaco-editor\":\"^0.55.1\",\"next\":\"^16.3.1\",\"node-forge\":\"^1.4.0\",\"node-machine-id\":\"^1.1.12\",\"open\":\"^11.0.1\",\"ora\":\"^9.4.1\",\"prop-types\":\"^15.8.1\",\"react\":\"19.2.4\",\"react-dom\":\"19.2.4\",\"react-is\":\"^16.13.1\",\"recharts\":\"^3.10.1\",\"selfsigned\":\"^5.5.0\",\"socks-proxy-agent\":\"^8.0.5\",\"sql.js\":\"^1.14.2\",\"undici\":\"^7.29.0\",\"uuid\":\"^13.0.2\",\"zustand\":\"^5.0.15\"},\"optionalDependencies\":{\"better-sqlite3\":\"^12.11.1\"},\"comment_better_sqlite3\":\"kept in optionalDependencies so npm install doesn't fail on systems without build tools — sql.js is used as fallback at runtime\",\"devDependencies\":{\"@tailwindcss/postcss\":\"^4.3.3\",\"eslint\":\"^9.39.5\",\"eslint-config-next\":\"16.1.6\",\"postcss\":\"^8.5.26\",\"tailwindcss\":\"^4.3.3\"}}"],"names":[],"mappings":";;;;AAAA"}},
+ {"offset": {"line": 11803, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/lib/consoleLogBuffer.js"],"sourcesContent":["import { EventEmitter } from \"events\";\nimport { CONSOLE_LOG_CONFIG } from \"@/shared/constants/config.js\";\n\nconst consoleLevels = [\"log\", \"info\", \"warn\", \"error\", \"debug\"];\n\nif (!global._consoleLogBufferState) {\n global._consoleLogBufferState = {\n logs: [],\n patched: false,\n originals: {},\n emitter: new EventEmitter(),\n };\n global._consoleLogBufferState.emitter.setMaxListeners(50);\n}\n\nconst state = global._consoleLogBufferState;\n\n// Ensure emitter exists (handles hot reload with stale global)\nif (!state.emitter) {\n state.emitter = new EventEmitter();\n state.emitter.setMaxListeners(50);\n}\n\nif (!state.pendingLines) state.pendingLines = [];\nif (!state.flushTimer) state.flushTimer = null;\n\nconst FLUSH_INTERVAL_MS = 100;\nconst MAX_BATCH_LINES = 50;\n\nfunction flushPendingLines() {\n state.flushTimer = null;\n if (!state.pendingLines.length) return;\n\n const lines = state.pendingLines.splice(0, state.pendingLines.length);\n state.emitter.emit(\"lines\", lines);\n}\n\nfunction scheduleFlush() {\n if (state.flushTimer) return;\n state.flushTimer = setTimeout(flushPendingLines, FLUSH_INTERVAL_MS);\n state.flushTimer?.unref?.();\n}\n\nfunction toLogLine(level, args) {\n return args.map(formatArg).join(\" \");\n}\n\n// Strip ANSI escape codes so terminal colors don't bleed into UI\nconst ANSI_RE = /\\x1b\\[[0-9;]*m/g;\n\nfunction stripAnsi(str) {\n return str.replace(ANSI_RE, \"\");\n}\n\nfunction formatArg(arg) {\n if (typeof arg === \"string\") return stripAnsi(arg);\n if (arg instanceof Error) return stripAnsi(arg.stack || arg.message || String(arg));\n try {\n return stripAnsi(JSON.stringify(arg));\n } catch {\n return stripAnsi(String(arg));\n }\n}\n\nfunction appendLine(line) {\n state.logs.push(line);\n const maxLines = CONSOLE_LOG_CONFIG.maxLines;\n if (state.logs.length > maxLines) {\n state.logs = state.logs.slice(-maxLines);\n }\n state.pendingLines.push(line);\n if (state.pendingLines.length >= MAX_BATCH_LINES) {\n if (state.flushTimer) {\n clearTimeout(state.flushTimer);\n state.flushTimer = null;\n }\n flushPendingLines();\n } else {\n scheduleFlush();\n }\n}\n\nexport function initConsoleLogCapture() {\n if (state.patched) return;\n\n for (const level of consoleLevels) {\n state.originals[level] = console[level];\n console[level] = (...args) => {\n appendLine(toLogLine(level, args));\n state.originals[level](...args);\n };\n }\n\n state.patched = true;\n}\n\nexport function getConsoleLogs() {\n return state.logs;\n}\n\nexport function clearConsoleLogs() {\n state.logs = [];\n state.emitter.emit(\"clear\");\n}\n\nexport function getConsoleEmitter() {\n return state.emitter;\n}\n"],"names":["consoleLevels","_consoleLogBufferState","logs","patched","originals","emitter","setMaxListeners","state","pendingLines","flushTimer","FLUSH_INTERVAL_MS","MAX_BATCH_LINES","flushPendingLines","length","lines","splice","emit","scheduleFlush","setTimeout","unref","toLogLine","level","args","map","formatArg","join","ANSI_RE","stripAnsi","str","replace","arg","Error","stack","message","String","JSON","stringify","appendLine","line","push","maxLines","slice","clearTimeout","initConsoleLogCapture","console","getConsoleLogs","clearConsoleLogs","getConsoleEmitter"],"mappings":"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"}},
+ {"offset": {"line": 11913, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/shared/constants/config.js"],"sourcesContent":["import pkg from \"../../../package.json\" with { type: \"json\" };\n\n// App configuration\nexport const APP_CONFIG = {\n name: \"9Router Proxy\",\n description: \"AI Infrastructure Management\",\n version: pkg.version,\n};\n\n// GitHub configuration\nexport const GITHUB_CONFIG = {\n changelogUrl: \"https://raw.githubusercontent.com/decolua/9router/refs/heads/master/CHANGELOG.md\",\n donateUrl: \"https://9router.com/api/donate\",\n};\n\n// Updater configuration\nexport const UPDATER_CONFIG = {\n npmPackageName: \"9router\",\n installCmd: \"npm i -g 9router\",\n installCmdLatest: \"npm i -g 9router@latest --prefer-online\",\n shutdownCountdownSec: 3,\n exitDelayMs: 500,\n statusPort: 20129,\n statusPollIntervalMs: 1000,\n statusLogTailLines: 8,\n installRetries: 3,\n installRetryDelayMs: 5000,\n lingerAfterDoneMs: 30000,\n waitForExitMinMs: 5000,\n waitForExitMaxMs: 20000,\n waitForExitCheckMs: 500,\n appPort: 20128,\n};\n\n// Theme configuration\nexport const THEME_CONFIG = {\n storageKey: \"theme\",\n defaultTheme: \"system\", // \"light\" | \"dark\" | \"system\"\n};\n\n// Subscription\nexport const SUBSCRIPTION_CONFIG = {\n price: 1.0,\n currency: \"USD\",\n interval: \"month\",\n planName: \"Pro Plan\",\n};\n\n// API endpoints\nexport const API_ENDPOINTS = {\n users: \"/api/users\",\n providers: \"/api/providers\",\n payments: \"/api/payments\",\n auth: \"/api/auth\",\n};\n\nexport const CONSOLE_LOG_CONFIG = {\n maxLines: 200,\n pollIntervalMs: 1000,\n};\n\n// Client-side store TTL: how long fetched data stays fresh before re-fetching\nexport const CLIENT_STORE_TTL_MS = 60000;\n\n// Quota auto-ping: keep 5h windows warm by sending a tiny request right after reset.\nexport const QUOTA_AUTOPING_CONFIG = {\n tickIntervalMs: 60000, // scheduler tick\n pingLeadMs: 5000, // fire once reset passes (within tolerance)\n refreshAheadMs: 300000, // refetch usage when within 5min of reset\n failureCooldownMs: 900000, // avoid failed ping spam while upstream/auth is unhealthy\n providers: {\n claude: {\n settingsKey: \"claudeAutoPing\", // preserve existing settings contract\n quotaKey: \"session (5h)\", // quota key returned by usage handler\n pingModel: \"claude-haiku-4-5-20251001\",\n pingText: \"hi\",\n pingMaxTokens: 1,\n },\n codex: {\n settingsKey: \"codexAutoPing\",\n quotaKey: \"session\",\n pingWhenResetAtSlides: true,\n resetAtDriftMs: 30000,\n minPingIntervalMs: 600000,\n skipWhenBlockingQuotaExhausted: true,\n // Free and Plus Codex accounts both expose gpt-5.5; avoid fallback probes that waste requests.\n pingModel: \"gpt-5.5\",\n pingText: \"hi\",\n pingInstructions: \"Reply with OK.\",\n pingReasoningEffort: \"none\",\n },\n },\n};\n\n// Re-export from providers.js for backward compatibility\nexport {\n FREE_PROVIDERS,\n OAUTH_PROVIDERS,\n APIKEY_PROVIDERS,\n WEB_COOKIE_PROVIDERS,\n AI_PROVIDERS,\n AUTH_METHODS,\n} from \"./providers.js\";\n\n// Re-export from models.js for backward compatibility\nexport {\n PROVIDER_MODELS,\n AI_MODELS,\n} from \"./models.js\";\n"],"names":["APP_CONFIG","name","description","version","GITHUB_CONFIG","changelogUrl","donateUrl","UPDATER_CONFIG","npmPackageName","installCmd","installCmdLatest","shutdownCountdownSec","exitDelayMs","statusPort","statusPollIntervalMs","statusLogTailLines","installRetries","installRetryDelayMs","lingerAfterDoneMs","waitForExitMinMs","waitForExitMaxMs","waitForExitCheckMs","appPort","THEME_CONFIG","storageKey","defaultTheme","SUBSCRIPTION_CONFIG","price","currency","interval","planName","API_ENDPOINTS","users","providers","payments","auth","CONSOLE_LOG_CONFIG","maxLines","pollIntervalMs","CLIENT_STORE_TTL_MS","QUOTA_AUTOPING_CONFIG","tickIntervalMs","pingLeadMs","refreshAheadMs","failureCooldownMs","claude","settingsKey","quotaKey","pingModel","pingText","pingMaxTokens","codex","pingWhenResetAtSlides","resetAtDriftMs","minPingIntervalMs","skipWhenBlockingQuotaExhausted","pingInstructions","pingReasoningEffort"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AA8FA,yDAAyD;AACzD;AASA,sDAAsD;AACtD;;AAtGO,MAAMA,aAAa;IACxBC,MAAM;IACNC,aAAa;IACbC,SAAS,4IAAG,CAACA,OAAO;AACtB;AAGO,MAAMC,gBAAgB;IAC3BC,cAAc;IACdC,WAAW;AACb;AAGO,MAAMC,iBAAiB;IAC5BC,gBAAgB;IAChBC,YAAY;IACZC,kBAAkB;IAClBC,sBAAsB;IACtBC,aAAa;IACbC,YAAY;IACZC,sBAAsB;IACtBC,oBAAoB;IACpBC,gBAAgB;IAChBC,qBAAqB;IACrBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBC,oBAAoB;IACpBC,SAAS;AACX;AAGO,MAAMC,eAAe;IAC1BC,YAAY;IACZC,cAAc;AAChB;AAGO,MAAMC,sBAAsB;IACjCC,OAAO;IACPC,UAAU;IACVC,UAAU;IACVC,UAAU;AACZ;AAGO,MAAMC,gBAAgB;IAC3BC,OAAO;IACPC,WAAW;IACXC,UAAU;IACVC,MAAM;AACR;AAEO,MAAMC,qBAAqB;IAChCC,UAAU;IACVC,gBAAgB;AAClB;AAGO,MAAMC,sBAAsB;AAG5B,MAAMC,wBAAwB;IACnCC,gBAAgB;IAChBC,YAAY;IACZC,gBAAgB;IAChBC,mBAAmB;IACnBX,WAAW;QACTY,QAAQ;YACNC,aAAa;YACbC,UAAU;YACVC,WAAW;YACXC,UAAU;YACVC,eAAe;QACjB;QACAC,OAAO;YACLL,aAAa;YACbC,UAAU;YACVK,uBAAuB;YACvBC,gBAAgB;YAChBC,mBAAmB;YACnBC,gCAAgC;YAChC,+FAA+F;YAC/FP,WAAW;YACXC,UAAU;YACVO,kBAAkB;YAClBC,qBAAqB;QACvB;IACF;AACF"}},
+ {"offset": {"line": 12020, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/shared/constants/models.js"],"sourcesContent":["// Import directly from file to avoid pulling in server-side dependencies via index.js\nexport {\n PROVIDER_MODELS,\n getProviderModels,\n getDefaultModel,\n isValidModel as isValidModelCore,\n findModelName,\n getModelTargetFormat,\n getModelStrip,\n PROVIDER_ID_TO_ALIAS,\n getModelsByProviderId,\n getModelUpstreamId,\n getModelQuotaFamily\n} from \"open-sse/config/providerModels.js\";\n\nimport { AI_PROVIDERS, isOpenAICompatibleProvider } from \"./providers.js\";\nimport { PROVIDER_MODELS as MODELS } from \"open-sse/config/providerModels.js\";\n\n// Providers that accept any model (passthrough)\nconst PASSTHROUGH_PROVIDERS = new Set(\n Object.entries(AI_PROVIDERS)\n .filter(([, p]) => p.passthroughModels)\n .map(([key]) => key)\n);\n\n// Wrap isValidModel with passthrough providers\nexport function isValidModel(aliasOrId, modelId) {\n if (isOpenAICompatibleProvider(aliasOrId)) return true;\n if (PASSTHROUGH_PROVIDERS.has(aliasOrId)) return true;\n const models = MODELS[aliasOrId];\n if (!models) return false;\n return models.some(m => m.id === modelId);\n}\n\n// Legacy AI_MODELS for backward compatibility\nexport const AI_MODELS = Object.entries(MODELS).flatMap(([alias, models]) =>\n models.map(m => ({ provider: alias, model: m.id, name: m.name }))\n);\n\nexport const getModelKind = (m, fallback = null) => m?.kind || m?.type || fallback;\n\n// Capacity metadata for UI badges — icon + label + color per capability.\nexport const CAPACITY_META = {\n vision: { icon: \"visibility\", label: \"Vision\", desc: \"Supports image input\", color: \"text-blue-500\" },\n // search: temporarily hidden (feature not wired yet)\n reasoning: { icon: \"neurology\", label: \"Reasoning\", desc: \"Supports reasoning / thinking\", color: \"text-amber-500\" },\n};\n"],"names":["PASSTHROUGH_PROVIDERS","Set","Object","entries","filter","p","passthroughModels","map","key","isValidModel","aliasOrId","modelId","has","models","some","m","id","AI_MODELS","flatMap","alias","provider","model","name","getModelKind","fallback","kind","type","CAPACITY_META","vision","icon","label","desc","color","reasoning"],"mappings":";;;;;;;;;;AAAA,sFAAsF;AACtF;AAcA;AACA;;;;AAEA,gDAAgD;AAChD,MAAMA,wBAAwB,IAAIC,IAChCC,OAAOC,OAAO,CAAC,4JAAY,EACxBC,MAAM,CAAC,CAAC,GAAGC,EAAE,GAAKA,EAAEC,iBAAiB,EACrCC,GAAG,CAAC,CAAC,CAACC,IAAI,GAAKA;AAIb,SAASC,aAAaC,SAAS,EAAEC,OAAO;IAC7C,IAAI,IAAA,0KAA0B,EAACD,YAAY,OAAO;IAClD,IAAIV,sBAAsBY,GAAG,CAACF,YAAY,OAAO;IACjD,MAAMG,SAAS,yJAAM,CAACH,UAAU;IAChC,IAAI,CAACG,QAAQ,OAAO;IACpB,OAAOA,OAAOC,IAAI,CAACC,CAAAA,IAAKA,EAAEC,EAAE,KAAKL;AACnC;AAGO,MAAMM,YAAYf,OAAOC,OAAO,CAAC,yJAAM,EAAEe,OAAO,CAAC,CAAC,CAACC,OAAON,OAAO,GACtEA,OAAON,GAAG,CAACQ,CAAAA,IAAK,CAAC;YAAEK,UAAUD;YAAOE,OAAON,EAAEC,EAAE;YAAEM,MAAMP,EAAEO,IAAI;QAAC,CAAC;AAG1D,MAAMC,eAAe,CAACR,GAAGS,WAAW,IAAI,GAAKT,GAAGU,QAAQV,GAAGW,QAAQF;AAGnE,MAAMG,gBAAgB;IAC3BC,QAAQ;QAAEC,MAAM;QAAcC,OAAO;QAAUC,MAAM;QAAwBC,OAAO;IAAgB;IACpG,qDAAqD;IACrDC,WAAW;QAAEJ,MAAM;QAAaC,OAAO;QAAaC,MAAM;QAAiCC,OAAO;IAAiB;AACrH"}},
+ {"offset": {"line": 12071, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/shared/constants/providers.js"],"sourcesContent":["// Provider definitions\nimport REGISTRY from \"open-sse/providers/registry/index.js\";\nimport { RISK_NOTICE } from \"@/shared/constants/providersDisplay\";\n\nconst MEDIA_ENTRY_KEYS = [\n \"serviceKinds\", \"ttsConfig\", \"sttConfig\", \"embeddingConfig\",\n \"imageConfig\", \"imageToTextConfig\", \"videoConfig\", \"musicConfig\",\n \"searchViaChat\", \"searchConfig\", \"fetchConfig\",\n \"modelsFetcher\", \"mediaPriority\", \"hiddenKinds\",\n];\n\n// Build provider UI object from registry entry\nfunction buildProviderEntry(r) {\n const mediaFields = {};\n if (r.media) Object.assign(mediaFields, r.media);\n for (const k of MEDIA_ENTRY_KEYS) {\n if (r[k] !== undefined) mediaFields[k] = r[k];\n }\n const display = { ...(r.display || {}) };\n if (display.deprecationNotice === \"RISK_NOTICE\") display.deprecationNotice = RISK_NOTICE;\n return {\n ...display,\n id: r.id,\n alias: r.uiAlias || r.alias,\n ...(r.hidden ? { hidden: true } : {}),\n ...mediaFields,\n ...(r.priority !== undefined ? { priority: r.priority } : {}),\n ...(r.hasFree ? { hasFree: true } : {}),\n ...(r.thinkingConfig ? { thinkingConfig: r.thinkingConfig } : {}),\n ...(r.regions ? { regions: r.regions, defaultRegion: r.defaultRegion } : {}),\n ...(r.hasProviderSpecificData ? { hasProviderSpecificData: true } : {}),\n ...(r.noAuth ? { noAuth: true } : {}),\n ...(r.passthroughModels ? { passthroughModels: true } : {}),\n ...(r.hasOAuth ? { hasOAuth: true } : {}),\n ...(r.authModes ? { authModes: r.authModes } : {}),\n ...(r.authType ? { authType: r.authType } : {}),\n ...(r.authHint ? { authHint: r.authHint } : {}),\n };\n}\n\nconst byCategory = (cat) => Object.fromEntries(\n REGISTRY.filter(r => r.category === cat).map(r => [r.id, buildProviderEntry(r)])\n);\n\nexport const FREE_PROVIDERS = byCategory(\"free\");\nexport const FREE_TIER_PROVIDERS = byCategory(\"freeTier\");\n\n// Thinking config definitions\n// options: list of selectable modes (\"auto\" = no override from server)\n// defaultMode: fallback when user hasn't configured\n// extended: claude-style thinking (thinking.type + budget_tokens) — used by most providers\n// effort: openai-style reasoning_effort — only openai + codex\nexport const THINKING_CONFIG = {\n extended: {\n options: [\"auto\", \"on\", \"off\"],\n defaultMode: \"auto\",\n defaultBudgetTokens: 10000\n },\n effort: {\n options: [\"auto\", \"none\", \"low\", \"medium\", \"high\"],\n defaultMode: \"auto\"\n }\n};\n\nexport const OAUTH_PROVIDERS = byCategory(\"oauth\");\nexport const APIKEY_PROVIDERS = byCategory(\"apikey\");\n\n// Web Cookie Providers (use browser session cookie instead of API key)\nexport const WEB_COOKIE_PROVIDERS = byCategory(\"webCookie\");\n\n// Media provider kinds — each kind maps to a route and endpoint config\nexport const MEDIA_PROVIDER_KINDS = [\n { id: \"embedding\", label: \"Embedding\", icon: \"data_array\", endpoint: { method: \"POST\", path: \"/v1/embeddings\" } },\n { id: \"image\", label: \"Text to Image\", icon: \"brush\", endpoint: { method: \"POST\", path: \"/v1/images/generations\" } },\n { id: \"imageToText\", label: \"Image to Text\", icon: \"image_search\", endpoint: { method: \"POST\", path: \"/v1/images/understanding\" } },\n { id: \"tts\", label: \"Text To Speech\", icon: \"record_voice_over\", endpoint: { method: \"POST\", path: \"/v1/audio/speech\" } },\n { id: \"stt\", label: \"Speech To Text\", icon: \"mic\", endpoint: { method: \"POST\", path: \"/v1/audio/transcriptions\" } },\n { id: \"webSearch\", label: \"Web Search\", icon: \"travel_explore\", endpoint: { method: \"POST\", path: \"/v1/search\" } },\n { id: \"webFetch\", label: \"Web Fetch\", icon: \"language\", endpoint: { method: \"POST\", path: \"/v1/web/fetch\" } },\n { id: \"video\", label: \"Video\", icon: \"movie\", endpoint: { method: \"POST\", path: \"/v1/videos/generations\" } },\n { id: \"music\", label: \"Music\", icon: \"music_note\", endpoint: { method: \"POST\", path: \"/v1/audio/music\" } },\n];\n\nexport const OPENAI_COMPATIBLE_PREFIX = \"openai-compatible-\";\nexport const ANTHROPIC_COMPATIBLE_PREFIX = \"anthropic-compatible-\";\nexport const CUSTOM_EMBEDDING_PREFIX = \"custom-embedding-\";\n\nexport function isOpenAICompatibleProvider(providerId) {\n return typeof providerId === \"string\" && providerId.startsWith(OPENAI_COMPATIBLE_PREFIX);\n}\n\nexport function isAnthropicCompatibleProvider(providerId) {\n return typeof providerId === \"string\" && providerId.startsWith(ANTHROPIC_COMPATIBLE_PREFIX);\n}\n\nexport function isCustomEmbeddingProvider(providerId) {\n return typeof providerId === \"string\" && providerId.startsWith(CUSTOM_EMBEDDING_PREFIX);\n}\n\n// All providers (combined)\nexport const AI_PROVIDERS = { ...FREE_PROVIDERS, ...FREE_TIER_PROVIDERS, ...OAUTH_PROVIDERS, ...APIKEY_PROVIDERS, ...WEB_COOKIE_PROVIDERS };\n\n// Auth methods\nexport const AUTH_METHODS = {\n oauth: { id: \"oauth\" },\n apikey: { id: \"apikey\" },\n cookie: { id: \"cookie\" },\n};\n\n// Helper: Get provider by alias\nexport function getProviderByAlias(alias) {\n for (const provider of Object.values(AI_PROVIDERS)) {\n if (provider.alias === alias || provider.id === alias) {\n return provider;\n }\n }\n return null;\n}\n\n// Helper: Get provider ID from alias\nexport function resolveProviderId(aliasOrId) {\n const provider = getProviderByAlias(aliasOrId);\n return provider?.id || aliasOrId;\n}\n\n// Helper: Get alias from provider ID\nexport function getProviderAlias(providerId) {\n const provider = AI_PROVIDERS[providerId];\n return provider?.alias || providerId;\n}\n\n// Alias to ID mapping (for quick lookup)\nexport const ALIAS_TO_ID = Object.values(AI_PROVIDERS).reduce((acc, p) => {\n acc[p.alias] = p.id;\n return acc;\n}, {});\n\n// ID to Alias mapping\nexport const ID_TO_ALIAS = Object.values(AI_PROVIDERS).reduce((acc, p) => {\n acc[p.id] = p.alias;\n return acc;\n}, {});\n\n// Helper: Get providers by service kind (e.g. \"tts\", \"embedding\", \"image\")\n// Providers without serviceKinds default to [\"llm\"]\nexport function getProvidersByKind(kind) {\n return Object.values(AI_PROVIDERS)\n .filter((p) => {\n const kinds = p.serviceKinds ?? [\"llm\"];\n if (!kinds.includes(kind)) return false;\n if (p.hidden) return false;\n if (p.hiddenKinds?.includes(kind)) return false;\n return true;\n })\n .sort((a, b) => (a.priority ?? a.mediaPriority ?? 999) - (b.priority ?? b.mediaPriority ?? 999));\n}\n\n// Derive từ registry features flags\nexport const USAGE_SUPPORTED_PROVIDERS = REGISTRY\n .filter(r => r.features?.usage)\n .map(r => r.id);\n\nexport const USAGE_APIKEY_PROVIDERS = REGISTRY\n .filter(r => r.features?.usageApikey)\n .map(r => r.id);\n"],"names":["MEDIA_ENTRY_KEYS","buildProviderEntry","r","mediaFields","media","Object","assign","k","undefined","display","deprecationNotice","id","alias","uiAlias","hidden","priority","hasFree","thinkingConfig","regions","defaultRegion","hasProviderSpecificData","noAuth","passthroughModels","hasOAuth","authModes","authType","authHint","byCategory","cat","fromEntries","filter","category","map","FREE_PROVIDERS","FREE_TIER_PROVIDERS","THINKING_CONFIG","extended","options","defaultMode","defaultBudgetTokens","effort","OAUTH_PROVIDERS","APIKEY_PROVIDERS","WEB_COOKIE_PROVIDERS","MEDIA_PROVIDER_KINDS","label","icon","endpoint","method","path","OPENAI_COMPATIBLE_PREFIX","ANTHROPIC_COMPATIBLE_PREFIX","CUSTOM_EMBEDDING_PREFIX","isOpenAICompatibleProvider","providerId","startsWith","isAnthropicCompatibleProvider","isCustomEmbeddingProvider","AI_PROVIDERS","AUTH_METHODS","oauth","apikey","cookie","getProviderByAlias","provider","values","resolveProviderId","aliasOrId","getProviderAlias","ALIAS_TO_ID","reduce","acc","p","ID_TO_ALIAS","getProvidersByKind","kind","kinds","serviceKinds","includes","hiddenKinds","sort","a","b","mediaPriority","USAGE_SUPPORTED_PROVIDERS","features","usage","USAGE_APIKEY_PROVIDERS","usageApikey"],"mappings":"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"}},
+ {"offset": {"line": 12379, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/src/shared/constants/providersDisplay.js"],"sourcesContent":["// UI display config — all providers derive from registry.display.\nimport REGISTRY from \"open-sse/providers/registry/index.js\";\n\nexport const RISK_NOTICE = \"⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.\";\n\n// Resolve \"RISK_NOTICE\" token → real notice text (registry stores token to avoid import cycle)\nconst resolveDisplay = (d) =>\n d.deprecationNotice === \"RISK_NOTICE\" ? { ...d, deprecationNotice: RISK_NOTICE } : d;\n\nexport const PROVIDER_DISPLAY = Object.fromEntries(\n REGISTRY.filter((r) => r.display).map((r) => [r.id, resolveDisplay(r.display)]),\n);\n"],"names":["RISK_NOTICE","resolveDisplay","d","deprecationNotice","PROVIDER_DISPLAY","Object","fromEntries","filter","r","display","map","id"],"mappings":";;;;;;AAAA,kEAAkE;AAClE;;AAEO,MAAMA,cAAc;AAE3B,+FAA+F;AAC/F,MAAMC,iBAAiB,CAACC,IACtBA,EAAEC,iBAAiB,KAAK,gBAAgB;QAAE,GAAGD,CAAC;QAAEC,mBAAmBH;IAAY,IAAIE;AAE9E,MAAME,mBAAmBC,OAAOC,WAAW,CAChD,6JAAQ,CAACC,MAAM,CAAC,CAACC,IAAMA,EAAEC,OAAO,EAAEC,GAAG,CAAC,CAACF,IAAM;QAACA,EAAEG,EAAE;QAAEV,eAAeO,EAAEC,OAAO;KAAE"}}]
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js b/tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js
new file mode 100644
index 00000000..8930bdb6
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js
@@ -0,0 +1,1814 @@
+var RUNTIME_PUBLIC_PATH = "server/chunks/[turbopack]_runtime.js";
+var RELATIVE_ROOT_PATH = "../../..";
+var ASSET_PREFIX = "/";
+// Apply forwarded globals from workerData if running in a worker thread
+if (typeof require !== 'undefined') {
+ try {
+ var { workerData } = require('worker_threads');
+ if (workerData?.__turbopack_globals__) {
+ Object.assign(globalThis, workerData.__turbopack_globals__);
+ // Remove internal data so it's not visible to user code
+ delete workerData.__turbopack_globals__;
+ }
+ } catch (_) {
+ // Not in a worker thread context, ignore
+ }
+}
+/**
+ * This file contains runtime types and functions that are shared between all
+ * TurboPack ECMAScript runtimes.
+ *
+ * It will be prepended to the runtime code of each runtime.
+ */ /* eslint-disable @typescript-eslint/no-unused-vars */ ///
+///
+/**
+ * Describes why a module was instantiated.
+ * Shared between browser and Node.js runtimes.
+ */ var SourceType = /*#__PURE__*/ function(SourceType) {
+ /**
+ * The module was instantiated because it was included in an evaluated chunk's
+ * runtime.
+ * SourceData is a ChunkPath.
+ */ SourceType[SourceType["Runtime"] = 0] = "Runtime";
+ /**
+ * The module was instantiated because a parent module imported it.
+ * SourceData is a ModuleId.
+ */ SourceType[SourceType["Parent"] = 1] = "Parent";
+ /**
+ * The module was instantiated because it was included in a chunk's hot module
+ * update.
+ * SourceData is an array of ModuleIds or undefined.
+ */ SourceType[SourceType["Update"] = 2] = "Update";
+ return SourceType;
+}(SourceType || {});
+/**
+ * Flag indicating which module object type to create when a module is merged. Set to `true`
+ * by each runtime that uses ModuleWithDirection (browser dev-base.ts, nodejs dev-base.ts,
+ * nodejs build-base.ts). Browser production (build-base.ts) leaves it as `false` since it
+ * uses plain Module objects.
+ */ let createModuleWithDirectionFlag = false;
+const REEXPORTED_OBJECTS = new WeakMap();
+/**
+ * Constructs the `__turbopack_context__` object for a module.
+ */ function Context(module, exports) {
+ this.m = module;
+ // We need to store this here instead of accessing it from the module object to:
+ // 1. Make it available to factories directly, since we rewrite `this` to
+ // `__turbopack_context__.e` in CJS modules.
+ // 2. Support async modules which rewrite `module.exports` to a promise, so we
+ // can still access the original exports object from functions like
+ // `esmExport`
+ // Ideally we could find a new approach for async modules and drop this property altogether.
+ this.e = exports;
+}
+const contextPrototype = Context.prototype;
+const hasOwnProperty = Object.prototype.hasOwnProperty;
+const toStringTag = typeof Symbol !== 'undefined' && Symbol.toStringTag;
+function defineProp(obj, name, options) {
+ if (!hasOwnProperty.call(obj, name)) Object.defineProperty(obj, name, options);
+}
+function getOverwrittenModule(moduleCache, id) {
+ let module = moduleCache[id];
+ if (!module) {
+ if (createModuleWithDirectionFlag) {
+ // set in development modes for hmr support
+ module = createModuleWithDirection(id);
+ } else {
+ module = createModuleObject(id);
+ }
+ moduleCache[id] = module;
+ }
+ return module;
+}
+/**
+ * Creates the module object. Only done here to ensure all module objects have the same shape.
+ */ function createModuleObject(id) {
+ return {
+ exports: {},
+ error: undefined,
+ id,
+ namespaceObject: undefined
+ };
+}
+function createModuleWithDirection(id) {
+ return {
+ exports: {},
+ error: undefined,
+ id,
+ namespaceObject: undefined,
+ parents: [],
+ children: []
+ };
+}
+const BindingTag_Value = 0;
+/**
+ * Adds the getters to the exports object.
+ */ function esm(exports, bindings, dynamic) {
+ defineProp(exports, '__esModule', {
+ value: true
+ });
+ if (toStringTag) defineProp(exports, toStringTag, {
+ value: 'Module'
+ });
+ let i = 0;
+ while(i < bindings.length){
+ const propName = bindings[i++];
+ const tagOrFunction = bindings[i++];
+ if (typeof tagOrFunction === 'number') {
+ if (tagOrFunction === BindingTag_Value) {
+ defineProp(exports, propName, {
+ value: bindings[i++],
+ enumerable: true,
+ writable: false
+ });
+ } else {
+ throw new Error(`unexpected tag: ${tagOrFunction}`);
+ }
+ } else {
+ const getterFn = tagOrFunction;
+ if (typeof bindings[i] === 'function') {
+ const setterFn = bindings[i++];
+ defineProp(exports, propName, {
+ get: getterFn,
+ set: setterFn,
+ enumerable: true
+ });
+ } else {
+ defineProp(exports, propName, {
+ get: getterFn,
+ enumerable: true
+ });
+ }
+ }
+ }
+ // The properties defined above are already non-configurable and
+ // non-writable, so the namespace's existing exports are effectively
+ // immutable. Sealing additionally makes the object non-extensible, matching
+ // real ESM-namespace semantics. Modules with dynamic re-exports
+ // (`export *` from a CommonJS module) must stay extensible so the dynamic
+ // export proxy can surface keys discovered at runtime, so skip the seal for
+ // them.
+ if (!dynamic) Object.seal(exports);
+}
+/**
+ * Makes the module an ESM with exports
+ */ function esmExport(bindings, id, dynamic) {
+ let module;
+ let exports;
+ if (id != null) {
+ module = getOverwrittenModule(this.c, id);
+ exports = module.exports;
+ } else {
+ module = this.m;
+ exports = this.e;
+ }
+ module.namespaceObject = exports;
+ esm(exports, bindings, dynamic);
+}
+contextPrototype.s = esmExport;
+function ensureDynamicExports(module, exports) {
+ let reexportedObjects = REEXPORTED_OBJECTS.get(module);
+ if (!reexportedObjects) {
+ REEXPORTED_OBJECTS.set(module, reexportedObjects = []);
+ // Returns the re-exported object that provides `prop` as an own property,
+ // or `undefined` if none does. The traps share this logic so they always
+ // agree on which keys are synthesized from `reexportedObjects`. `default`
+ // is never re-exported by `export *`, so it is never synthesized.
+ const reexportOwning = (prop)=>{
+ if (prop !== 'default') {
+ for (const obj of reexportedObjects){
+ if (hasOwnProperty.call(obj, prop)) return obj;
+ }
+ }
+ return undefined;
+ };
+ // Modules with dynamic re-exports are not sealed by `esm()`, so the
+ // target beneath the namespace stays extensible. That is what lets the
+ // `ownKeys` and `getOwnPropertyDescriptor` traps legally report keys that
+ // exist on `reexportedObjects` but not on the target itself.
+ module.exports = module.namespaceObject = new Proxy(exports, {
+ get (target, prop) {
+ if (hasOwnProperty.call(target, prop) || prop === 'default' || prop === '__esModule') {
+ return Reflect.get(target, prop);
+ }
+ const obj = reexportOwning(prop);
+ return obj && Reflect.get(obj, prop);
+ },
+ // The namespace is read-only, like a real esm namespace object. The
+ // re-exported modules can still mutate their own exports (exposed live
+ // via `get`), but mutating the namespace itself is rejected. Refusing
+ // here, rather than forwarding to the extensible target, also prevents an
+ // assignment/definition from shadowing a dynamic re-export. It also
+ // prevents delete from removing a static export.
+ set () {
+ return false;
+ },
+ defineProperty () {
+ return false;
+ },
+ deleteProperty () {
+ return false;
+ },
+ // The `has` trap ensures that `'exportName' in starImports` will reflect
+ // the truth of whether a key is exported.
+ has (target, prop) {
+ if (Reflect.has(target, prop)) return true;
+ if (prop === 'default' || prop === '__esModule') return false;
+ return reexportOwning(prop) !== undefined;
+ },
+ // ownKeys and getOwnPropertyDescriptor together make the keys enumerable.
+ // If a value is returned from `ownKeys` but its property descriptor is
+ // not enumerable, it will not be visible to iterator methods.
+ // Collectively, they allow code like the following:
+ //
+ // ```
+ // // module.js re-exports dynamic CJS exports
+ // export * from './legacyModule.cjs'
+ //
+ // // from another JS file, reference the re-exported dynamic values
+ // import * as Namespace from './module.js'
+ // Object.keys(Namespace)
+ // ```
+ ownKeys (target) {
+ const keys = Reflect.ownKeys(target);
+ for (const obj of reexportedObjects){
+ for (const key of Reflect.ownKeys(obj)){
+ if (key !== 'default' && !keys.includes(key)) keys.push(key);
+ }
+ }
+ return keys;
+ },
+ getOwnPropertyDescriptor (target, prop) {
+ const own = Reflect.getOwnPropertyDescriptor(target, prop);
+ if (own || prop === 'default' || prop === '__esModule') return own;
+ const obj = reexportOwning(prop);
+ if (obj) {
+ // Synthetic keys don't exist on the target, so they MUST be
+ // reported as configurable. However the set/delete traps above will
+ // prevent them from actually being changed
+ return {
+ enumerable: true,
+ configurable: true,
+ get: ()=>Reflect.get(obj, prop)
+ };
+ }
+ return undefined;
+ }
+ });
+ }
+ return reexportedObjects;
+}
+/**
+ * Dynamically exports properties from an object
+ */ function dynamicExport(object, id) {
+ let module;
+ let exports;
+ if (id != null) {
+ module = getOverwrittenModule(this.c, id);
+ exports = module.exports;
+ } else {
+ module = this.m;
+ exports = this.e;
+ }
+ const reexportedObjects = ensureDynamicExports(module, exports);
+ if (typeof object === 'object' && object !== null) {
+ reexportedObjects.push(object);
+ }
+}
+contextPrototype.j = dynamicExport;
+function exportValue(value, id) {
+ let module;
+ if (id != null) {
+ module = getOverwrittenModule(this.c, id);
+ } else {
+ module = this.m;
+ }
+ module.exports = value;
+}
+contextPrototype.v = exportValue;
+function exportNamespace(namespace, id) {
+ let module;
+ if (id != null) {
+ module = getOverwrittenModule(this.c, id);
+ } else {
+ module = this.m;
+ }
+ module.exports = module.namespaceObject = namespace;
+}
+contextPrototype.n = exportNamespace;
+function createGetter(obj, key) {
+ return ()=>obj[key];
+}
+/**
+ * @returns prototype of the object
+ */ const getProto = Object.getPrototypeOf ? (obj)=>Object.getPrototypeOf(obj) : (obj)=>obj.__proto__;
+/** Prototypes that are not expanded for exports */ const LEAF_PROTOTYPES = [
+ null,
+ getProto({}),
+ getProto([]),
+ getProto(getProto)
+];
+/**
+ * @param raw
+ * @param ns
+ * @param allowExportDefault
+ * * `false`: will have the raw module as default export
+ * * `true`: will have the default property as default export
+ */ function interopEsm(raw, ns, allowExportDefault) {
+ const bindings = [];
+ let defaultLocation = -1;
+ for(let current = raw; (typeof current === 'object' || typeof current === 'function') && !LEAF_PROTOTYPES.includes(current); current = getProto(current)){
+ for (const key of Object.getOwnPropertyNames(current)){
+ bindings.push(key, createGetter(raw, key));
+ if (defaultLocation === -1 && key === 'default') {
+ defaultLocation = bindings.length - 1;
+ }
+ }
+ }
+ // this is not really correct
+ // we should set the `default` getter if the imported module is a `.cjs file`
+ if (!(allowExportDefault && defaultLocation >= 0)) {
+ // Replace the binding with one for the namespace itself in order to preserve iteration order.
+ if (defaultLocation >= 0) {
+ // Replace the getter with the value
+ bindings.splice(defaultLocation, 1, BindingTag_Value, raw);
+ } else {
+ bindings.push('default', BindingTag_Value, raw);
+ }
+ }
+ esm(ns, bindings);
+ return ns;
+}
+function createNS(raw) {
+ if (typeof raw === 'function') {
+ return function(...args) {
+ return raw.apply(this, args);
+ };
+ } else {
+ return Object.create(null);
+ }
+}
+function esmImport(id) {
+ const module = getOrInstantiateModuleFromParent(id, this.m);
+ // any ES module has to have `module.namespaceObject` defined.
+ if (module.namespaceObject) return module.namespaceObject;
+ // only ESM can be an async module, so we don't need to worry about exports being a promise here.
+ const raw = module.exports;
+ return module.namespaceObject = interopEsm(raw, createNS(raw), raw && raw.__esModule);
+}
+contextPrototype.i = esmImport;
+function asyncLoader(moduleId) {
+ const loader = this.r(moduleId);
+ return loader(esmImport.bind(this));
+}
+contextPrototype.A = asyncLoader;
+// Add a simple runtime require so that environments without one can still pass
+// `typeof require` CommonJS checks so that exports are correctly registered.
+const runtimeRequire = // @ts-ignore
+typeof require === 'function' ? require : function require1() {
+ throw new Error('Unexpected use of runtime require');
+};
+contextPrototype.t = runtimeRequire;
+function commonJsRequire(id) {
+ return getOrInstantiateModuleFromParent(id, this.m).exports;
+}
+contextPrototype.r = commonJsRequire;
+/**
+ * Remove fragments and query parameters since they are never part of the context map keys
+ *
+ * This matches how we parse patterns at resolving time. Arguably we should only do this for
+ * strings passed to `import` but the resolve does it for `import` and `require` and so we do
+ * here as well.
+ */ function parseRequest(request) {
+ // Per the URI spec fragments can contain `?` characters, so we should trim it off first
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.5
+ const hashIndex = request.indexOf('#');
+ if (hashIndex !== -1) {
+ request = request.substring(0, hashIndex);
+ }
+ const queryIndex = request.indexOf('?');
+ if (queryIndex !== -1) {
+ request = request.substring(0, queryIndex);
+ }
+ return request;
+}
+/**
+ * `require.context` and require/import expression runtime.
+ */ function moduleContext(map) {
+ function moduleContext(id) {
+ id = parseRequest(id);
+ if (hasOwnProperty.call(map, id)) {
+ return map[id].module();
+ }
+ const e = new Error(`Cannot find module '${id}'`);
+ e.code = 'MODULE_NOT_FOUND';
+ throw e;
+ }
+ moduleContext.keys = ()=>{
+ return Object.keys(map);
+ };
+ moduleContext.resolve = (id)=>{
+ id = parseRequest(id);
+ if (hasOwnProperty.call(map, id)) {
+ return map[id].id();
+ }
+ const e = new Error(`Cannot find module '${id}'`);
+ e.code = 'MODULE_NOT_FOUND';
+ throw e;
+ };
+ moduleContext.import = async (id)=>{
+ return await moduleContext(id);
+ };
+ return moduleContext;
+}
+contextPrototype.f = moduleContext;
+/**
+ * Returns the path of a chunk defined by its data.
+ */ function getChunkPath(chunkData) {
+ return typeof chunkData === 'string' ? chunkData : chunkData.path;
+}
+// Load the CompressedmoduleFactories of a chunk into the `moduleFactories` Map.
+// The CompressedModuleFactories format is
+// - 1 or more module ids
+// - a module factory function
+// So walking this is a little complex but the flat structure is also fast to
+// traverse, we can use `typeof` operators to distinguish the two cases.
+function installCompressedModuleFactories(chunkModules, offset, moduleFactories, newModuleId) {
+ let i = offset;
+ while(i < chunkModules.length){
+ let end = i + 1;
+ // Find our factory function
+ while(end < chunkModules.length && typeof chunkModules[end] !== 'function'){
+ end++;
+ }
+ if (end === chunkModules.length) {
+ throw new Error('malformed chunk format, expected a factory function');
+ }
+ // Install the factory for each module ID that doesn't already have one.
+ // When some IDs in this group already have a factory, reuse that existing
+ // group factory for the missing IDs to keep all IDs in the group consistent.
+ // Otherwise, install the factory from this chunk.
+ const moduleFactoryFn = chunkModules[end];
+ let existingGroupFactory = undefined;
+ for(let j = i; j < end; j++){
+ const id = chunkModules[j];
+ const existingFactory = moduleFactories.get(id);
+ if (existingFactory) {
+ existingGroupFactory = existingFactory;
+ break;
+ }
+ }
+ const factoryToInstall = existingGroupFactory ?? moduleFactoryFn;
+ let didInstallFactory = false;
+ for(let j = i; j < end; j++){
+ const id = chunkModules[j];
+ if (!moduleFactories.has(id)) {
+ if (!didInstallFactory) {
+ if (factoryToInstall === moduleFactoryFn) {
+ applyModuleFactoryName(moduleFactoryFn);
+ }
+ didInstallFactory = true;
+ }
+ moduleFactories.set(id, factoryToInstall);
+ newModuleId?.(id);
+ }
+ }
+ i = end + 1; // end is pointing at the last factory advance to the next id or the end of the array.
+ }
+}
+/**
+ * A pseudo "fake" URL object to resolve to its relative path.
+ *
+ * When UrlRewriteBehavior is set to relative, calls to the `new URL()` will construct url without base using this
+ * runtime function to generate context-agnostic urls between different rendering context, i.e ssr / client to avoid
+ * hydration mismatch.
+ *
+ * This is based on webpack's existing implementation:
+ * https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/lib/runtime/RelativeUrlRuntimeModule.js
+ */ const relativeURL = function relativeURL(inputUrl) {
+ const realUrl = new URL(inputUrl, 'x:/');
+ const values = {};
+ for(const key in realUrl)values[key] = realUrl[key];
+ values.href = inputUrl;
+ values.pathname = inputUrl.replace(/[?#].*/, '');
+ values.origin = values.protocol = '';
+ values.toString = values.toJSON = (..._args)=>inputUrl;
+ for(const key in values)Object.defineProperty(this, key, {
+ enumerable: true,
+ configurable: true,
+ value: values[key]
+ });
+};
+relativeURL.prototype = URL.prototype;
+contextPrototype.U = relativeURL;
+/**
+ * Utility function to ensure all variants of an enum are handled.
+ */ function invariant(never, computeMessage) {
+ throw new Error(`Invariant: ${computeMessage(never)}`);
+}
+/**
+ * Constructs an error message for when a module factory is not available.
+ */ function factoryNotAvailableMessage(moduleId, sourceType, sourceData) {
+ let instantiationReason;
+ switch(sourceType){
+ case 0:
+ instantiationReason = `as a runtime entry of chunk ${sourceData}`;
+ break;
+ case 1:
+ instantiationReason = `because it was required from module ${sourceData}`;
+ break;
+ case 2:
+ instantiationReason = 'because of an HMR update';
+ break;
+ default:
+ invariant(sourceType, (sourceType)=>`Unknown source type: ${sourceType}`);
+ }
+ return `Module ${moduleId} was instantiated ${instantiationReason}, but the module factory is not available.`;
+}
+/**
+ * A stub function to make `require` available but non-functional in ESM.
+ */ function requireStub(_moduleId) {
+ throw new Error('dynamic usage of require is not supported');
+}
+contextPrototype.z = requireStub;
+// Make `globalThis` available to the module in a way that cannot be shadowed by a local variable.
+contextPrototype.g = globalThis;
+function applyModuleFactoryName(factory) {
+ // Give the module factory a nice name to improve stack traces.
+ Object.defineProperty(factory, 'name', {
+ value: 'module evaluation'
+ });
+}
+///
+///
+/**
+ * Top-level-await / async-module machinery. This is only included in the runtime
+ * when the module graph actually contains an async module (a module with
+ * top-level await, or one that transitively depends on one). When no async
+ * module is present, the chunk items never reference `__turbopack_context__.a`,
+ * so this whole file can be omitted.
+ *
+ * everything below is adapted from webpack
+ * https://github.com/webpack/webpack/blob/6be4065ade1e252c1d8dcba4af0f43e32af1bdc1/lib/runtime/AsyncModuleRuntimeModule.js#L13
+ */ const turbopackQueues = Symbol('turbopack queues');
+const turbopackExports = Symbol('turbopack exports');
+const turbopackError = Symbol('turbopack error');
+function isPromise(maybePromise) {
+ return maybePromise != null && typeof maybePromise === 'object' && 'then' in maybePromise && typeof maybePromise.then === 'function';
+}
+function isAsyncModuleExt(obj) {
+ return turbopackQueues in obj;
+}
+function createPromise() {
+ let resolve;
+ let reject;
+ const promise = new Promise((res, rej)=>{
+ reject = rej;
+ resolve = res;
+ });
+ return {
+ promise,
+ resolve: resolve,
+ reject: reject
+ };
+}
+function resolveQueue(queue) {
+ if (queue && queue.status !== 1) {
+ queue.status = 1;
+ queue.forEach((fn)=>fn.queueCount--);
+ queue.forEach((fn)=>fn.queueCount-- ? fn.queueCount++ : fn());
+ }
+}
+function wrapDeps(deps) {
+ return deps.map((dep)=>{
+ if (dep !== null && typeof dep === 'object') {
+ if (isAsyncModuleExt(dep)) return dep;
+ if (isPromise(dep)) {
+ const queue = Object.assign([], {
+ status: 0
+ });
+ const obj = {
+ [turbopackExports]: {},
+ [turbopackQueues]: (fn)=>fn(queue)
+ };
+ dep.then((res)=>{
+ obj[turbopackExports] = res;
+ resolveQueue(queue);
+ }, (err)=>{
+ obj[turbopackError] = err;
+ resolveQueue(queue);
+ });
+ return obj;
+ }
+ }
+ return {
+ [turbopackExports]: dep,
+ [turbopackQueues]: ()=>{}
+ };
+ });
+}
+function asyncModule(body, hasAwait) {
+ const module = this.m;
+ const queue = hasAwait ? Object.assign([], {
+ status: -1
+ }) : undefined;
+ const depQueues = new Set();
+ const { resolve, reject, promise: rawPromise } = createPromise();
+ const promise = Object.assign(rawPromise, {
+ [turbopackExports]: module.exports,
+ [turbopackQueues]: (fn)=>{
+ queue && fn(queue);
+ depQueues.forEach(fn);
+ promise['catch'](()=>{});
+ }
+ });
+ const attributes = {
+ get () {
+ return promise;
+ },
+ set (v) {
+ // Calling `esmExport` leads to this.
+ if (v !== promise) {
+ promise[turbopackExports] = v;
+ }
+ }
+ };
+ Object.defineProperty(module, 'exports', attributes);
+ Object.defineProperty(module, 'namespaceObject', attributes);
+ function handleAsyncDependencies(deps) {
+ const currentDeps = wrapDeps(deps);
+ const getResult = ()=>currentDeps.map((d)=>{
+ if (d[turbopackError]) throw d[turbopackError];
+ return d[turbopackExports];
+ });
+ const { promise, resolve } = createPromise();
+ const fn = Object.assign(()=>resolve(getResult), {
+ queueCount: 0
+ });
+ function fnQueue(q) {
+ if (q !== queue && !depQueues.has(q)) {
+ depQueues.add(q);
+ if (q && q.status === 0) {
+ fn.queueCount++;
+ q.push(fn);
+ }
+ }
+ }
+ currentDeps.map((dep)=>dep[turbopackQueues](fnQueue));
+ return fn.queueCount ? promise : getResult();
+ }
+ function asyncResult(err) {
+ if (err) {
+ reject(promise[turbopackError] = err);
+ } else {
+ resolve(promise[turbopackExports]);
+ }
+ resolveQueue(queue);
+ }
+ body(handleAsyncDependencies, asyncResult);
+ if (queue && queue.status === -1) {
+ queue.status = 0;
+ }
+}
+contextPrototype.a = asyncModule;
+///
+/// A 'base' utilities to support runtime can have externals.
+/// Currently this is for node.js / edge runtime both.
+/// If a fn requires node.js specific behavior, it should be placed in `node-external-utils` instead.
+async function externalImport(id) {
+ let raw;
+ try {
+ raw = await import(id);
+ } catch (err) {
+ // TODO(alexkirsz) This can happen when a client-side module tries to load
+ // an external module we don't provide a shim for (e.g. querystring, url).
+ // For now, we fail semi-silently, but in the future this should be a
+ // compilation error.
+ throw new Error(`Failed to load external module ${id}: ${err}`);
+ }
+ if (raw && raw.__esModule && raw.default && 'default' in raw.default) {
+ return interopEsm(raw.default, createNS(raw), true);
+ }
+ return raw;
+}
+contextPrototype.y = externalImport;
+function externalRequire(id, thunk, esm = false) {
+ let raw;
+ try {
+ raw = thunk();
+ } catch (err) {
+ // TODO(alexkirsz) This can happen when a client-side module tries to load
+ // an external module we don't provide a shim for (e.g. querystring, url).
+ // For now, we fail semi-silently, but in the future this should be a
+ // compilation error.
+ throw new Error(`Failed to load external module ${id}: ${err}`);
+ }
+ if (!esm || raw.__esModule) {
+ return raw;
+ }
+ return interopEsm(raw, createNS(raw), true);
+}
+externalRequire.resolve = (id, options)=>{
+ return require.resolve(id, options);
+};
+contextPrototype.x = externalRequire;
+/* eslint-disable @typescript-eslint/no-unused-vars */ const path = require('path');
+const relativePathToRuntimeRoot = path.relative(RUNTIME_PUBLIC_PATH, '.');
+// Compute the relative path to the `distDir`.
+const relativePathToDistRoot = path.join(relativePathToRuntimeRoot, RELATIVE_ROOT_PATH);
+const RUNTIME_ROOT = path.resolve(__filename, relativePathToRuntimeRoot);
+// Compute the absolute path to the root, by stripping distDir from the absolute path to this file.
+const ABSOLUTE_ROOT = path.resolve(__filename, relativePathToDistRoot);
+/**
+ * Returns an absolute path to the given module path.
+ * Module path should be relative, either path to a file or a directory.
+ *
+ * This fn allows to calculate an absolute path for some global static values, such as
+ * `__dirname` or `import.meta.url` that Turbopack will not embeds in compile time.
+ * See ImportMetaBinding::code_generation for the usage.
+ */ function resolveAbsolutePath(modulePath) {
+ if (modulePath) {
+ return path.join(ABSOLUTE_ROOT, modulePath);
+ }
+ return ABSOLUTE_ROOT;
+}
+Context.prototype.P = resolveAbsolutePath;
+/**
+ * Returns an absolute `file://` URL for the given module path.
+ *
+ * Uses `url.pathToFileURL` so that the resulting URL is a valid file URI on
+ * all platforms (forward slashes on Windows, drive letters handled
+ * correctly, path segments URL-encoded).
+ */ function resolveFileUrl(modulePath) {
+ return require('url').pathToFileURL(resolveAbsolutePath(modulePath)).href;
+}
+Context.prototype.F = resolveFileUrl;
+/* eslint-disable @typescript-eslint/no-unused-vars */ ///
+///
+///
+///
+/**
+ * Base Node.js runtime shared between production and development.
+ * Contains chunk loading, module caching, and other non-HMR functionality.
+ */ process.env.TURBOPACK = '1';
+const url = require('url');
+const moduleFactories = new Map();
+const moduleCache = Object.create(null);
+/**
+ * Returns an absolute path to the given module's id.
+ */ function resolvePathFromModule(moduleId) {
+ const exported = this.r(moduleId);
+ const exportedPath = exported?.default ?? exported;
+ if (typeof exportedPath !== 'string') {
+ return exported;
+ }
+ const strippedAssetPrefix = exportedPath.slice(ASSET_PREFIX.length);
+ const resolved = path.resolve(RUNTIME_ROOT, strippedAssetPrefix);
+ return url.pathToFileURL(resolved).href;
+}
+/**
+ * Exports a URL value. No suffix is added in Node.js runtime.
+ */ function exportUrl(urlValue, id) {
+ exportValue.call(this, urlValue, id);
+}
+function loadRuntimeChunk(sourcePath, chunkData) {
+ if (typeof chunkData === 'string') {
+ loadRuntimeChunkPath(sourcePath, chunkData);
+ } else {
+ loadRuntimeChunkPath(sourcePath, chunkData.path);
+ }
+}
+const loadedChunks = new Set();
+const unsupportedLoadChunk = Promise.resolve(undefined);
+const loadedChunk = Promise.resolve(undefined);
+const chunkCache = new Map();
+function clearChunkCache() {
+ chunkCache.clear();
+ loadedChunks.clear();
+}
+function loadRuntimeChunkPath(sourcePath, chunkPath) {
+ if (!isJs(chunkPath)) {
+ // We only support loading JS chunks in Node.js.
+ // This branch can be hit when trying to load a CSS chunk.
+ return;
+ }
+ if (loadedChunks.has(chunkPath)) {
+ return;
+ }
+ try {
+ const resolved = path.resolve(RUNTIME_ROOT, chunkPath);
+ const chunkModules = require(resolved);
+ installCompressedModuleFactories(chunkModules, 0, moduleFactories);
+ loadedChunks.add(chunkPath);
+ } catch (cause) {
+ let errorMessage = `Failed to load chunk ${chunkPath}`;
+ if (sourcePath) {
+ errorMessage += ` from runtime for chunk ${sourcePath}`;
+ }
+ const error = new Error(errorMessage, {
+ cause
+ });
+ error.name = 'ChunkLoadError';
+ throw error;
+ }
+}
+function loadChunkAsync(chunkData) {
+ const chunkPath = typeof chunkData === 'string' ? chunkData : chunkData.path;
+ if (!isJs(chunkPath)) {
+ // We only support loading JS chunks in Node.js.
+ // This branch can be hit when trying to load a CSS chunk.
+ return unsupportedLoadChunk;
+ }
+ let entry = chunkCache.get(chunkPath);
+ if (entry === undefined) {
+ try {
+ // resolve to an absolute path to simplify `require` handling
+ const resolved = path.resolve(RUNTIME_ROOT, chunkPath);
+ // TODO: consider switching to `import()` to enable concurrent chunk loading and async file io
+ // However this is incompatible with hot reloading (since `import` doesn't use the require cache)
+ const chunkModules = require(resolved);
+ installCompressedModuleFactories(chunkModules, 0, moduleFactories);
+ entry = loadedChunk;
+ } catch (cause) {
+ const errorMessage = `Failed to load chunk ${chunkPath} from module ${this.m.id}`;
+ const error = new Error(errorMessage, {
+ cause
+ });
+ error.name = 'ChunkLoadError';
+ // Cache the failure promise, future requests will also get this same rejection
+ entry = Promise.reject(error);
+ }
+ chunkCache.set(chunkPath, entry);
+ }
+ // TODO: Return an instrumented Promise that React can use instead of relying on referential equality.
+ return entry;
+}
+contextPrototype.l = loadChunkAsync;
+function loadChunkAsyncByUrl(chunkUrl) {
+ const path1 = url.fileURLToPath(new URL(chunkUrl, RUNTIME_ROOT));
+ return loadChunkAsync.call(this, path1);
+}
+contextPrototype.L = loadChunkAsyncByUrl;
+// Shared runtime primitive: the root that on-disk chunk paths are resolved
+// against. Used by the bundled wasm helper (exposed as `__turbopack_runtime_root__`).
+contextPrototype.w = RUNTIME_ROOT;
+const regexJsUrl = /\.js(?:\?[^#]*)?(?:#.*)?$/;
+/**
+ * Checks if a given path/URL ends with .js, optionally followed by ?query or #fragment.
+ */ function isJs(chunkUrlOrPath) {
+ return regexJsUrl.test(chunkUrlOrPath);
+}
+///
+///
+///
+///
+/**
+ * Shared HMR (Hot Module Replacement) implementation.
+ *
+ * This file contains the complete HMR implementation that's shared between
+ * browser and Node.js runtimes. It manages module hot state, dependency
+ * tracking, the module.hot API, and the full HMR update flow.
+ */ /**
+ * The development module cache shared across the runtime.
+ * Browser runtime declares this directly.
+ * Node.js runtime assigns globalThis.__turbopack_module_cache__ to this.
+ */ let devModuleCache;
+/**
+ * Module IDs that are instantiated as part of the runtime of a chunk.
+ */ let runtimeModules;
+/**
+ * Maps module IDs to persisted data between executions of their hot module
+ * implementation (`hot.data`).
+ */ const moduleHotData = new Map();
+/**
+ * Maps module instances to their hot module state.
+ * Uses WeakMap so it works with both HotModule and ModuleWithDirection.
+ */ const moduleHotState = new WeakMap();
+/**
+ * Modules that call `module.hot.invalidate()` (while being updated).
+ */ const queuedInvalidatedModules = new Set();
+class UpdateApplyError extends Error {
+ name = 'UpdateApplyError';
+ dependencyChain;
+ constructor(message, dependencyChain){
+ super(message);
+ this.dependencyChain = dependencyChain;
+ }
+}
+/**
+ * Records parent-child relationship when a module imports another.
+ * Should be called during module instantiation.
+ */ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+function trackModuleImport(parentModule, childModuleId, childModule) {
+ // Record that parent imports child
+ if (parentModule.children.indexOf(childModuleId) === -1) {
+ parentModule.children.push(childModuleId);
+ }
+ // Record that child is imported by parent
+ if (childModule && childModule.parents.indexOf(parentModule.id) === -1) {
+ childModule.parents.push(parentModule.id);
+ }
+}
+function formatDependencyChain(dependencyChain) {
+ return `Dependency chain: ${dependencyChain.join(' -> ')}`;
+}
+/**
+ * Walks the dependency tree to find all modules affected by a change.
+ * Returns information about whether the update can be accepted and which
+ * modules need to be invalidated.
+ *
+ * @param moduleId - The module that changed
+ * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept().
+ * This is used for server-side HMR where pages auto-accept at the top level.
+ */ function getAffectedModuleEffects(moduleId, autoAcceptRootModules) {
+ const outdatedModules = new Set();
+ const outdatedDependencies = new Map();
+ const queue = [
+ {
+ moduleId,
+ dependencyChain: []
+ }
+ ];
+ let queueIndex = 0;
+ while(queueIndex < queue.length){
+ const { moduleId, dependencyChain } = queue[queueIndex];
+ // Release copied dependency chains as soon as their queue item is consumed.
+ queue[queueIndex++] = undefined;
+ if (moduleId != null) {
+ if (outdatedModules.has(moduleId)) {
+ continue;
+ }
+ outdatedModules.add(moduleId);
+ }
+ // We've arrived at the runtime of the chunk, which means that nothing
+ // else above can accept this update.
+ if (moduleId === undefined) {
+ if (autoAcceptRootModules) {
+ return {
+ type: 'accepted',
+ moduleId,
+ outdatedModules,
+ outdatedDependencies
+ };
+ }
+ return {
+ type: 'unaccepted',
+ dependencyChain
+ };
+ }
+ const module = devModuleCache[moduleId];
+ const hotState = moduleHotState.get(module);
+ if (// The module is not in the cache. Since this is a "modified" update,
+ // it means that the module was never instantiated before.
+ !module || hotState.selfAccepted && !hotState.selfInvalidated) {
+ continue;
+ }
+ if (hotState.selfDeclined) {
+ return {
+ type: 'self-declined',
+ dependencyChain,
+ moduleId
+ };
+ }
+ if (runtimeModules.has(moduleId)) {
+ if (autoAcceptRootModules) {
+ continue;
+ }
+ queue.push({
+ moduleId: undefined,
+ dependencyChain: [
+ ...dependencyChain,
+ moduleId
+ ]
+ });
+ continue;
+ }
+ for (const parentId of module.parents){
+ const parent = devModuleCache[parentId];
+ if (!parent) {
+ continue;
+ }
+ const parentHotState = moduleHotState.get(parent);
+ // Check if parent declined this dependency
+ if (parentHotState?.declinedDependencies[moduleId]) {
+ return {
+ type: 'declined',
+ dependencyChain: [
+ ...dependencyChain,
+ moduleId
+ ],
+ moduleId,
+ parentId
+ };
+ }
+ // Skip if parent is already outdated
+ if (outdatedModules.has(parentId)) {
+ continue;
+ }
+ // Check if parent accepts this dependency
+ if (parentHotState?.acceptedDependencies[moduleId]) {
+ if (!outdatedDependencies.has(parentId)) {
+ outdatedDependencies.set(parentId, new Set());
+ }
+ outdatedDependencies.get(parentId).add(moduleId);
+ continue;
+ }
+ // Neither accepted nor declined — propagate to parent
+ queue.push({
+ moduleId: parentId,
+ dependencyChain: [
+ ...dependencyChain,
+ moduleId
+ ]
+ });
+ }
+ // If no parents and we're at a root module, auto-accept if configured
+ if (module.parents.length === 0 && autoAcceptRootModules) {
+ continue;
+ }
+ }
+ return {
+ type: 'accepted',
+ moduleId,
+ outdatedModules,
+ outdatedDependencies
+ };
+}
+/**
+ * Merges source dependency map into target dependency map.
+ */ function mergeDependencies(target, source) {
+ for (const [parentId, deps] of source){
+ const existing = target.get(parentId);
+ if (existing) {
+ for (const dep of deps){
+ existing.add(dep);
+ }
+ } else {
+ target.set(parentId, new Set(deps));
+ }
+ }
+}
+/**
+ * Computes all modules that need to be invalidated based on which modules changed.
+ *
+ * @param invalidated - The modules that have been invalidated
+ * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()
+ */ function computedInvalidatedModules(invalidated, autoAcceptRootModules) {
+ const outdatedModules = new Set();
+ const outdatedDependencies = new Map();
+ for (const moduleId of invalidated){
+ const effect = getAffectedModuleEffects(moduleId, autoAcceptRootModules);
+ switch(effect.type){
+ case 'unaccepted':
+ throw new UpdateApplyError(`cannot apply update: unaccepted module. ${formatDependencyChain(effect.dependencyChain)}.`, effect.dependencyChain);
+ case 'self-declined':
+ throw new UpdateApplyError(`cannot apply update: self-declined module. ${formatDependencyChain(effect.dependencyChain)}.`, effect.dependencyChain);
+ case 'declined':
+ throw new UpdateApplyError(`cannot apply update: declined dependency. ${formatDependencyChain(effect.dependencyChain)}. Declined by ${effect.parentId}.`, effect.dependencyChain);
+ case 'accepted':
+ for (const outdatedModuleId of effect.outdatedModules){
+ outdatedModules.add(outdatedModuleId);
+ }
+ mergeDependencies(outdatedDependencies, effect.outdatedDependencies);
+ break;
+ default:
+ invariant(effect, (effect)=>`Unknown effect type: ${effect?.type}`);
+ }
+ }
+ return {
+ outdatedModules,
+ outdatedDependencies
+ };
+}
+/**
+ * Creates the module.hot API object and its internal state.
+ * This provides the HMR API that user code calls (module.hot.accept(), etc.)
+ */ function createModuleHot(moduleId, hotData) {
+ const hotState = {
+ selfAccepted: false,
+ selfDeclined: false,
+ selfInvalidated: false,
+ disposeHandlers: [],
+ acceptedDependencies: {},
+ acceptedErrorHandlers: {},
+ declinedDependencies: {}
+ };
+ const hot = {
+ // TODO(alexkirsz) This is not defined in the HMR API. It was used to
+ // decide whether to warn whenever an HMR-disposed module required other
+ // modules. We might want to remove it.
+ active: true,
+ data: hotData ?? {},
+ accept: (modules, callback, errorHandler)=>{
+ if (modules === undefined) {
+ hotState.selfAccepted = true;
+ } else if (typeof modules === 'function') {
+ hotState.selfAccepted = modules;
+ } else if (typeof modules === 'object' && modules !== null) {
+ for(let i = 0; i < modules.length; i++){
+ hotState.acceptedDependencies[modules[i]] = callback || function() {};
+ hotState.acceptedErrorHandlers[modules[i]] = errorHandler;
+ }
+ } else {
+ hotState.acceptedDependencies[modules] = callback || function() {};
+ hotState.acceptedErrorHandlers[modules] = errorHandler;
+ }
+ },
+ decline: (dep)=>{
+ if (dep === undefined) {
+ hotState.selfDeclined = true;
+ } else if (typeof dep === 'object' && dep !== null) {
+ for(let i = 0; i < dep.length; i++){
+ hotState.declinedDependencies[dep[i]] = true;
+ }
+ } else {
+ hotState.declinedDependencies[dep] = true;
+ }
+ },
+ dispose: (callback)=>{
+ hotState.disposeHandlers.push(callback);
+ },
+ addDisposeHandler: (callback)=>{
+ hotState.disposeHandlers.push(callback);
+ },
+ removeDisposeHandler: (callback)=>{
+ const idx = hotState.disposeHandlers.indexOf(callback);
+ if (idx >= 0) {
+ hotState.disposeHandlers.splice(idx, 1);
+ }
+ },
+ invalidate: ()=>{
+ hotState.selfInvalidated = true;
+ queuedInvalidatedModules.add(moduleId);
+ },
+ // NOTE(alexkirsz) This is part of the management API, which we don't
+ // implement, but the Next.js React Refresh runtime uses this to decide
+ // whether to schedule an update.
+ status: ()=>'idle',
+ // NOTE(alexkirsz) Since we always return "idle" for now, these are no-ops.
+ addStatusHandler: (_handler)=>{},
+ removeStatusHandler: (_handler)=>{},
+ // NOTE(jridgewell) Check returns the list of updated modules, but we don't
+ // want the webpack code paths to ever update (the turbopack paths handle
+ // this already).
+ check: ()=>Promise.resolve(null)
+ };
+ return {
+ hot,
+ hotState
+ };
+}
+/**
+ * Processes queued invalidated modules and adds them to the outdated modules set.
+ * Modules that call module.hot.invalidate() are queued and processed here.
+ *
+ * @param outdatedModules - The current set of outdated modules
+ * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()
+ */ function applyInvalidatedModules(outdatedModules, outdatedDependencies, autoAcceptRootModules) {
+ if (queuedInvalidatedModules.size > 0) {
+ const result = computedInvalidatedModules(queuedInvalidatedModules, autoAcceptRootModules);
+ for (const moduleId of result.outdatedModules){
+ outdatedModules.add(moduleId);
+ }
+ mergeDependencies(outdatedDependencies, result.outdatedDependencies);
+ queuedInvalidatedModules.clear();
+ }
+ return {
+ outdatedModules,
+ outdatedDependencies
+ };
+}
+/**
+ * Computes which outdated modules have self-accepted and can be hot reloaded.
+ */ function computeOutdatedSelfAcceptedModules(outdatedModules) {
+ const outdatedSelfAcceptedModules = [];
+ for (const moduleId of outdatedModules){
+ const module = devModuleCache[moduleId];
+ const hotState = moduleHotState.get(module);
+ if (module && hotState?.selfAccepted && !hotState.selfInvalidated) {
+ outdatedSelfAcceptedModules.push({
+ moduleId,
+ errorHandler: hotState.selfAccepted
+ });
+ }
+ }
+ return outdatedSelfAcceptedModules;
+}
+/**
+ * Disposes of an instance of a module.
+ * Runs hot.dispose handlers and manages persistent hot data.
+ *
+ * NOTE: mode = "replace" will not remove modules from devModuleCache.
+ * This must be done in a separate step afterwards.
+ */ function disposeModule(moduleId, mode) {
+ const module = devModuleCache[moduleId];
+ if (!module) {
+ return;
+ }
+ const hotState = moduleHotState.get(module);
+ if (!hotState) {
+ return;
+ }
+ const data = {};
+ // Run the `hot.dispose` handler, if any, passing in the persistent
+ // `hot.data` object.
+ for (const disposeHandler of hotState.disposeHandlers){
+ disposeHandler(data);
+ }
+ // This used to warn in `getOrInstantiateModuleFromParent` when a disposed
+ // module is still importing other modules.
+ if (module.hot) {
+ module.hot.active = false;
+ }
+ moduleHotState.delete(module);
+ // Remove the disposed module from its children's parent list.
+ // It will be added back once the module re-instantiates and imports its
+ // children again.
+ for (const childId of module.children){
+ const child = devModuleCache[childId];
+ if (!child) {
+ continue;
+ }
+ const idx = child.parents.indexOf(module.id);
+ if (idx >= 0) {
+ child.parents.splice(idx, 1);
+ }
+ }
+ switch(mode){
+ case 'clear':
+ delete devModuleCache[module.id];
+ moduleHotData.delete(module.id);
+ break;
+ case 'replace':
+ moduleHotData.set(module.id, data);
+ break;
+ default:
+ invariant(mode, (mode)=>`invalid mode: ${mode}`);
+ }
+}
+/**
+ * Dispose phase: runs dispose handlers and cleans up outdated/disposed modules.
+ * Returns the parent modules of outdated modules for use in the apply phase.
+ */ function disposePhase(outdatedModules, disposedModules, outdatedDependencies) {
+ for (const moduleId of outdatedModules){
+ disposeModule(moduleId, 'replace');
+ }
+ for (const moduleId of disposedModules){
+ disposeModule(moduleId, 'clear');
+ }
+ // Removing modules from the module cache is a separate step.
+ // We also want to keep track of previous parents of the outdated modules.
+ const outdatedModuleParents = new Map();
+ for (const moduleId of outdatedModules){
+ const oldModule = devModuleCache[moduleId];
+ outdatedModuleParents.set(moduleId, oldModule?.parents);
+ delete devModuleCache[moduleId];
+ }
+ // Remove outdated dependencies from parent module's children list.
+ // When a parent accepts a child's update, the child is re-instantiated
+ // but the parent stays alive. We remove the old child reference so it
+ // gets re-added when the child re-imports.
+ for (const [parentId, deps] of outdatedDependencies){
+ const module = devModuleCache[parentId];
+ if (module) {
+ for (const dep of deps){
+ const idx = module.children.indexOf(dep);
+ if (idx >= 0) {
+ module.children.splice(idx, 1);
+ }
+ }
+ }
+ }
+ return {
+ outdatedModuleParents
+ };
+}
+/* eslint-disable @typescript-eslint/no-unused-vars */ /**
+ * Shared module instantiation logic.
+ * This handles the full module instantiation flow for both browser and Node.js.
+ * Only React Refresh hooks differ between platforms (passed as callback).
+ */ function instantiateModuleShared(moduleId, sourceType, sourceData, moduleFactories, devModuleCache, runtimeModules, createModuleObjectFn, createContextFn, runModuleExecutionHooksFn) {
+ // 1. Factory validation (same in both browser and Node.js)
+ const id = moduleId;
+ const moduleFactory = moduleFactories.get(id);
+ if (typeof moduleFactory !== 'function') {
+ throw new Error(factoryNotAvailableMessage(moduleId, sourceType, sourceData) + `\nThis is often caused by a stale browser cache, misconfigured Cache-Control headers, or a service worker serving outdated responses.` + `\nTo fix this, make sure your Cache-Control headers allow revalidation of chunks and review your service worker configuration. ` + `As an immediate workaround, try hard-reloading the page, clearing the browser cache, or unregistering any service workers.`);
+ }
+ // 2. Hot API setup (same in both - works for browser, included for Node.js)
+ const hotData = moduleHotData.get(id);
+ const { hot, hotState } = createModuleHot(id, hotData);
+ // 3. Parent assignment logic (same in both)
+ let parents;
+ switch(sourceType){
+ case SourceType.Runtime:
+ runtimeModules.add(id);
+ parents = [];
+ break;
+ case SourceType.Parent:
+ parents = [
+ sourceData
+ ];
+ break;
+ case SourceType.Update:
+ parents = sourceData || [];
+ break;
+ default:
+ throw new Error(`Unknown source type: ${sourceType}`);
+ }
+ // 4. Module creation (platform creates base module object)
+ const module = createModuleObjectFn(id);
+ const exports = module.exports;
+ module.parents = parents;
+ module.children = [];
+ module.hot = hot;
+ devModuleCache[id] = module;
+ moduleHotState.set(module, hotState);
+ // 5. Module execution (React Refresh hooks are platform-specific)
+ try {
+ runModuleExecutionHooksFn(module, (refresh)=>{
+ const context = createContextFn(module, exports, refresh);
+ moduleFactory.call(exports, context, module, exports);
+ });
+ } catch (error) {
+ module.error = error;
+ throw error;
+ }
+ // 6. ESM interop (same in both)
+ if (module.namespaceObject && module.exports !== module.namespaceObject) {
+ // in case of a circular dependency: cjs1 -> esm2 -> cjs1
+ interopEsm(module.exports, module.namespaceObject);
+ }
+ return module;
+}
+/**
+ * Analyzes update entries and chunks to determine which modules were added, modified, or deleted.
+ * This is pure logic that doesn't depend on the runtime environment.
+ */ function computeChangedModules(entries, updates, chunkModulesMap) {
+ const chunksAdded = new Map();
+ const chunksDeleted = new Map();
+ const added = new Map();
+ const modified = new Map();
+ const deleted = new Set();
+ for (const [chunkPath, mergedChunkUpdate] of Object.entries(updates)){
+ switch(mergedChunkUpdate.type){
+ case 'added':
+ {
+ const updateAdded = new Set(mergedChunkUpdate.modules);
+ for (const moduleId of updateAdded){
+ added.set(moduleId, entries[moduleId]);
+ }
+ chunksAdded.set(chunkPath, updateAdded);
+ break;
+ }
+ case 'deleted':
+ {
+ const updateDeleted = chunkModulesMap ? new Set(chunkModulesMap.get(chunkPath)) : new Set();
+ for (const moduleId of updateDeleted){
+ deleted.add(moduleId);
+ }
+ chunksDeleted.set(chunkPath, updateDeleted);
+ break;
+ }
+ case 'partial':
+ {
+ const updateAdded = new Set(mergedChunkUpdate.added);
+ const updateDeleted = new Set(mergedChunkUpdate.deleted);
+ for (const moduleId of updateAdded){
+ added.set(moduleId, entries[moduleId]);
+ }
+ for (const moduleId of updateDeleted){
+ deleted.add(moduleId);
+ }
+ chunksAdded.set(chunkPath, updateAdded);
+ chunksDeleted.set(chunkPath, updateDeleted);
+ break;
+ }
+ default:
+ throw new Error('Unknown merged chunk update type');
+ }
+ }
+ // If a module was added from one chunk and deleted from another in the same update,
+ // consider it to be modified, as it means the module was moved from one chunk to another
+ // AND has new code in a single update.
+ for (const moduleId of added.keys()){
+ if (deleted.has(moduleId)) {
+ added.delete(moduleId);
+ deleted.delete(moduleId);
+ }
+ }
+ for (const [moduleId, entry] of Object.entries(entries)){
+ // Modules that haven't been added to any chunk but have new code are considered
+ // to be modified.
+ // This needs to be under the previous loop, as we need it to get rid of modules
+ // that were added and deleted in the same update.
+ if (!added.has(moduleId)) {
+ modified.set(moduleId, entry);
+ }
+ }
+ return {
+ added,
+ deleted,
+ modified,
+ chunksAdded,
+ chunksDeleted
+ };
+}
+/**
+ * Compiles new module code and walks the dependency tree to find all outdated modules.
+ * Uses the evalModuleEntry function to compile code (platform-specific).
+ *
+ * @param added - Map of added modules
+ * @param modified - Map of modified modules
+ * @param evalModuleEntry - Function to compile module code
+ * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()
+ */ function computeOutdatedModules(added, modified, evalModuleEntry, autoAcceptRootModules) {
+ const newModuleFactories = new Map();
+ // Compile added modules
+ for (const [moduleId, entry] of added){
+ if (entry != null) {
+ newModuleFactories.set(moduleId, evalModuleEntry(entry));
+ }
+ }
+ // Walk dependency tree to find all modules affected by modifications
+ const { outdatedModules, outdatedDependencies } = computedInvalidatedModules(modified.keys(), autoAcceptRootModules);
+ // Compile modified modules
+ for (const [moduleId, entry] of modified){
+ newModuleFactories.set(moduleId, evalModuleEntry(entry));
+ }
+ return {
+ outdatedModules,
+ outdatedDependencies,
+ newModuleFactories
+ };
+}
+/**
+ * Updates module factories and re-instantiates self-accepted modules.
+ * Uses the instantiateModule function (platform-specific via callback).
+ */ function applyPhase(outdatedSelfAcceptedModules, newModuleFactories, outdatedModuleParents, outdatedDependencies, moduleFactories, devModuleCache, instantiateModuleFn, applyModuleFactoryNameFn, reportError) {
+ // Update module factories
+ for (const [moduleId, factory] of newModuleFactories.entries()){
+ applyModuleFactoryNameFn(factory);
+ moduleFactories.set(moduleId, factory);
+ }
+ // TODO(alexkirsz) Run new runtime entries here.
+ // Call accept handlers for outdated dependencies.
+ // This runs BEFORE re-instantiating self-accepted modules, matching
+ // webpack's behavior.
+ for (const [parentId, deps] of outdatedDependencies){
+ const module = devModuleCache[parentId];
+ if (!module) continue;
+ const hotState = moduleHotState.get(module);
+ if (!hotState) continue;
+ // Group deps by callback, deduplicating callbacks that handle multiple deps.
+ // Each callback receives only the deps it was registered for.
+ const callbackDeps = new Map();
+ const callbackErrorHandlers = new Map();
+ for (const dep of deps){
+ const acceptCallback = hotState.acceptedDependencies[dep];
+ if (acceptCallback) {
+ let depList = callbackDeps.get(acceptCallback);
+ if (!depList) {
+ depList = [];
+ callbackDeps.set(acceptCallback, depList);
+ callbackErrorHandlers.set(acceptCallback, hotState.acceptedErrorHandlers[dep]);
+ }
+ depList.push(dep);
+ }
+ }
+ for (const [callback, cbDeps] of callbackDeps){
+ try {
+ callback.call(null, cbDeps);
+ } catch (err) {
+ const errorHandler = callbackErrorHandlers.get(callback);
+ if (typeof errorHandler === 'function') {
+ try {
+ errorHandler(err, {
+ moduleId: parentId,
+ dependencyId: cbDeps[0]
+ });
+ } catch (err2) {
+ reportError(err2);
+ reportError(err);
+ }
+ } else {
+ reportError(err);
+ }
+ }
+ }
+ }
+ // Re-instantiate all outdated self-accepted modules
+ for (const { moduleId, errorHandler } of outdatedSelfAcceptedModules){
+ try {
+ instantiateModuleFn(moduleId, SourceType.Update, outdatedModuleParents.get(moduleId));
+ } catch (err) {
+ if (typeof errorHandler === 'function') {
+ try {
+ errorHandler(err, {
+ moduleId,
+ module: devModuleCache[moduleId]
+ });
+ } catch (err2) {
+ reportError(err2);
+ reportError(err);
+ }
+ } else {
+ reportError(err);
+ }
+ }
+ }
+}
+/**
+ * Internal implementation that orchestrates the full HMR update flow:
+ * invalidation, disposal, and application of new modules.
+ *
+ * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()
+ */ function applyInternal(outdatedModules, outdatedDependencies, disposedModules, newModuleFactories, moduleFactories, devModuleCache, instantiateModuleFn, applyModuleFactoryNameFn, autoAcceptRootModules) {
+ ;
+ ({ outdatedModules, outdatedDependencies } = applyInvalidatedModules(outdatedModules, outdatedDependencies, autoAcceptRootModules));
+ // Find self-accepted modules to re-instantiate
+ const outdatedSelfAcceptedModules = computeOutdatedSelfAcceptedModules(outdatedModules);
+ // Run dispose handlers, save hot.data, clear caches
+ const { outdatedModuleParents } = disposePhase(outdatedModules, disposedModules, outdatedDependencies);
+ let error;
+ function reportError(err) {
+ if (!error) error = err; // Keep first error
+ }
+ applyPhase(outdatedSelfAcceptedModules, newModuleFactories, outdatedModuleParents, outdatedDependencies, moduleFactories, devModuleCache, instantiateModuleFn, applyModuleFactoryNameFn, reportError);
+ if (error) {
+ throw error;
+ }
+ // Recursively apply any queued invalidations from new module execution
+ if (queuedInvalidatedModules.size > 0) {
+ applyInternal(new Set(), new Map(), [], new Map(), moduleFactories, devModuleCache, instantiateModuleFn, applyModuleFactoryNameFn, autoAcceptRootModules);
+ }
+}
+/**
+ * Main entry point for applying an ECMAScript merged update.
+ * This is called by both browser and Node.js runtimes with platform-specific callbacks.
+ *
+ * @param options.autoAcceptRootModules - If true, root modules auto-accept updates without explicit
+ * module.hot.accept(). Used for server-side HMR where pages
+ * auto-accept at the top level.
+ */ function applyEcmascriptMergedUpdateShared(options) {
+ const { added, modified, disposedModules, evalModuleEntry, instantiateModule, applyModuleFactoryName, moduleFactories, devModuleCache, autoAcceptRootModules } = options;
+ const { outdatedModules, outdatedDependencies, newModuleFactories } = computeOutdatedModules(added, modified, evalModuleEntry, autoAcceptRootModules);
+ applyInternal(outdatedModules, outdatedDependencies, disposedModules, newModuleFactories, moduleFactories, devModuleCache, instantiateModule, applyModuleFactoryName, autoAcceptRootModules);
+}
+/* eslint-disable @typescript-eslint/no-unused-vars */ ///
+///
+///
+/**
+ * Development Node.js runtime.
+ * Uses HotModule and shared HMR logic for hot module replacement support.
+ */ // Cast the module cache to HotModule for development mode
+// (hmr-runtime.ts declares devModuleCache as `let` variable expecting assignment)
+// This is safe because HotModule extends Module
+devModuleCache = moduleCache;
+// this is read in runtime-utils.ts so it creates a module with direction for hmr
+createModuleWithDirectionFlag = true;
+if (!globalThis.__turbopack_runtime_modules__) {
+ globalThis.__turbopack_runtime_modules__ = new Set();
+}
+runtimeModules = globalThis.__turbopack_runtime_modules__;
+const nodeDevContextPrototype = Context.prototype;
+nodeDevContextPrototype.q = exportUrl;
+nodeDevContextPrototype.M = moduleFactories;
+nodeDevContextPrototype.c = devModuleCache;
+nodeDevContextPrototype.R = resolvePathFromModule;
+nodeDevContextPrototype.C = clearChunkCache;
+/**
+ * Instantiates a module in development mode using shared HMR logic.
+ */ function instantiateModule(id, sourceType, sourceData) {
+ // Node.js: creates base module object (hot API added by shared code)
+ const createModuleObjectFn = (moduleId)=>{
+ return createModuleWithDirection(moduleId);
+ };
+ // Node.js: creates Context (no refresh parameter)
+ const createContext = (module1, exports, _refresh)=>{
+ return new Context(module1, exports);
+ };
+ // Node.js: no hooks wrapper, just execute directly
+ const runWithHooks = (module1, exec)=>{
+ exec(undefined); // no refresh context
+ };
+ // Use shared instantiation logic (includes hot API setup)
+ const newModule = instantiateModuleShared(id, sourceType, sourceData, moduleFactories, devModuleCache, runtimeModules, createModuleObjectFn, createContext, runWithHooks);
+ newModule.loaded = true;
+ return newModule;
+}
+/**
+ * Instantiates a runtime module in development mode.
+ */ function instantiateRuntimeModule(chunkPath, moduleId) {
+ return instantiateModule(moduleId, SourceType.Runtime, chunkPath);
+}
+/**
+ * Retrieves a module from the cache, or instantiate it as a runtime module if it is not cached.
+ */ // @ts-ignore TypeScript doesn't separate this module space from the browser runtime
+function getOrInstantiateRuntimeModule(chunkPath, moduleId) {
+ const module1 = devModuleCache[moduleId];
+ if (module1) {
+ if (module1.error) {
+ throw module1.error;
+ }
+ return module1;
+ }
+ return instantiateRuntimeModule(chunkPath, moduleId);
+}
+/**
+ * Retrieves a module from the cache, or instantiate it if it is not cached.
+ * Also tracks parent-child relationships for HMR dependency tracking.
+ */ // @ts-ignore
+function getOrInstantiateModuleFromParent(id, sourceModule) {
+ // Track parent-child relationship
+ trackModuleImport(sourceModule, id, devModuleCache[id]);
+ const module1 = devModuleCache[id];
+ if (module1) {
+ if (module1.error) {
+ throw module1.error;
+ }
+ return module1;
+ }
+ const newModule = instantiateModule(id, SourceType.Parent, sourceModule.id);
+ // Track again after instantiation to ensure the relationship is recorded
+ trackModuleImport(sourceModule, id, newModule);
+ return newModule;
+}
+module.exports = (sourcePath)=>({
+ m: (id)=>getOrInstantiateRuntimeModule(sourcePath, id),
+ c: (chunkData)=>loadRuntimeChunk(sourcePath, chunkData)
+ });
+///
+///
+/* eslint-disable @typescript-eslint/no-unused-vars */ /**
+ * Appends the module code with //# sourceURL and //# sourceMappingURL so
+ * that Node.js can resolve stack frames from `eval`ed server HMR modules back to
+ * their original source files. Mirrors the browser's _eval in dev-backend-dom.ts.
+ */ function inlineSourcemaps(entry) {
+ const [chunkPath, moduleId] = entry.url.split('?', 2);
+ const absolutePath = path.resolve(RUNTIME_ROOT, chunkPath);
+ const fileHref = url.pathToFileURL(absolutePath).href;
+ const sourceURL = moduleId ? `${fileHref}?${moduleId}` : fileHref;
+ let code = entry.code + '\n\n//# sourceURL=' + sourceURL;
+ if (entry.map) {
+ code += '\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,' + Buffer.from(entry.map).toString('base64');
+ }
+ return code;
+}
+let serverHmrUpdateHandler = null;
+function initializeServerHmr(moduleFactories, devModuleCache) {
+ if (serverHmrUpdateHandler != null) {
+ throw new Error('[Server HMR] Server HMR client is already initialized');
+ }
+ // Register the update handler for the server runtime
+ serverHmrUpdateHandler = (msg)=>{
+ handleNodejsUpdate(msg, moduleFactories, devModuleCache);
+ };
+}
+/**
+ * Emits an HMR message to the registered update handler.
+ * Node uses a simpler listener pattern than the browser's websocket connection.
+ *
+ * Note: This is only called via __turbopack_server_hmr_apply__ which ensures
+ * the handler is initialized first via ensureHmrClientInitialized().
+ */ function emitMessage(msg) {
+ if (serverHmrUpdateHandler == null) {
+ throw new Error('[Server HMR] No update handler registered to receive message');
+ }
+ serverHmrUpdateHandler(msg.data);
+}
+/**
+ * Handles server message updates and applies them to the Node.js runtime.
+ * Uses shared HMR update logic from hmr-runtime.ts.
+ */ function handleNodejsUpdate(msg, moduleFactories, devModuleCache) {
+ if (msg.type !== 'partial') {
+ return;
+ }
+ const instruction = msg.instruction;
+ try {
+ if (instruction.type === 'ChunkListUpdate') {
+ // All node ecmascript chunks are mergeable, so a `total`/`partial` here
+ // means a non-mergeable asset changed in an unsupported way. Escalate
+ // to a full clear() rather than leave stale factories in memory.
+ for (const [chunkPath, chunkUpdate] of Object.entries(instruction.chunks ?? {})){
+ if (chunkUpdate.type === 'total' || chunkUpdate.type === 'partial') {
+ throw new Error(`unsupported '${chunkUpdate.type}' update for chunk ${chunkPath}`);
+ }
+ }
+ if (instruction.merged) {
+ for (const merged of instruction.merged){
+ applyEcmascriptMergedUpdate(merged, moduleFactories, devModuleCache);
+ }
+ }
+ return;
+ }
+ if (instruction.type === 'EcmascriptMergedUpdate') {
+ applyEcmascriptMergedUpdate(instruction, moduleFactories, devModuleCache);
+ return;
+ }
+ } catch (e) {
+ console.error('[Server HMR] Update failed, full reload needed:', e);
+ throw e;
+ }
+}
+function applyEcmascriptMergedUpdate(instruction, moduleFactories, devModuleCache) {
+ const { entries = {}, chunks = {} } = instruction;
+ const evalModuleEntry = (entry)=>{
+ const code = entry.map ? inlineSourcemaps(entry) : entry.code;
+ // eslint-disable-next-line no-eval
+ return (0, eval)(`(require) => ${code}`)(require);
+ };
+ const { added, modified } = computeChangedModules(entries, chunks, undefined // no chunkModulesMap for Node.js
+ );
+ // Modules that appear in an "added" chunk but already exist in the cache
+ // were moved to a renamed chunk. Treat them as modified so the dependency
+ // walk runs and they get re-instantiated with the new factory.
+ for (const [moduleId, entry] of added){
+ if (entry != null && devModuleCache[moduleId] != null) {
+ added.delete(moduleId);
+ modified.set(moduleId, entry);
+ }
+ }
+ // Use shared HMR update implementation
+ applyEcmascriptMergedUpdateShared({
+ added,
+ modified,
+ disposedModules: [],
+ evalModuleEntry,
+ instantiateModule,
+ applyModuleFactoryName: ()=>{},
+ moduleFactories,
+ devModuleCache,
+ autoAcceptRootModules: true
+ });
+}
+///
+///
+/**
+ * Note: hmr-runtime.ts is embedded before this file, so its functions
+ * (initializeServerHmr, emitMessage) are available in the same scope.
+ */ // Initialize server HMR client (connects to shared HMR infrastructure)
+let hmrClientInitialized = false;
+function ensureHmrClientInitialized() {
+ if (hmrClientInitialized) return;
+ hmrClientInitialized = true;
+ // initializeServerHmr is from hmr-client.ts (embedded before this file)
+ // moduleFactories is from dev-runtime.ts
+ // devModuleCache is the HotModule-typed cache from dev-runtime.ts
+ initializeServerHmr(moduleFactories, devModuleCache);
+}
+function __turbopack_server_hmr_apply__(update) {
+ ensureHmrClientInitialized();
+ // Throws if the update can't be applied in-process; the consumer catches it
+ // and falls back to evicting require.cache.
+ emitMessage({
+ type: 'turbopack-message',
+ data: update
+ });
+}
+const handlers = globalThis.__turbopack_server_hmr_handlers__ ?? new Map();
+// Normalize to forward slashes so it matches the virtual chunk paths in
+// `update.instruction.chunks`, which always use `/` regardless of OS.
+const chunkPrefix = path.relative(RUNTIME_ROOT, path.dirname(__filename)).replaceAll(path.sep, '/');
+if (handlers.size === 0) {
+ // First registration in this generation: install the routing dispatcher.
+ globalThis.__turbopack_server_hmr_apply__ = (update)=>{
+ const registry = globalThis.__turbopack_server_hmr_handlers__ ?? new Map();
+ // Chunk paths can appear either directly on the instruction (single-chunk
+ // updates) or nested inside `merged` entries (chunks covered by a
+ // merger). Collect both so routing isn't skipped just because a mergeable
+ // chunk's update only reports its paths inside `merged`.
+ const updateChunkPaths = new Set([
+ ...Object.keys(update.instruction?.chunks ?? {}),
+ ...(update.instruction?.merged ?? []).flatMap((merged)=>Object.keys(merged.chunks ?? {}))
+ ]);
+ const toCall = [];
+ if (updateChunkPaths.size === 0) {
+ for (const entry of registry.values())toCall.push(entry);
+ } else {
+ const seen = new Set();
+ for (const chunkPath of updateChunkPaths){
+ const dir = path.dirname(chunkPath);
+ for (const [key, entry] of registry){
+ if (dir === entry.chunkPrefix && !seen.has(key)) {
+ seen.add(key);
+ toCall.push(entry);
+ }
+ }
+ }
+ }
+ // No matching runtime loaded (e.g. editing a route not required yet this
+ // session): nothing live to patch, so this is a no-op. A handler that
+ // throws propagates to the consumer, which evicts require.cache.
+ for (const { handler } of toCall){
+ handler(update);
+ }
+ };
+}
+globalThis.__turbopack_server_hmr_handlers__ = handlers;
+handlers.set(__filename, {
+ handler: __turbopack_server_hmr_apply__,
+ chunkPrefix
+});
+
+
+//# sourceMappingURL=%5Bturbopack%5D_runtime.js.map
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js.map b/tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js.map
new file mode 100644
index 00000000..6dbe7bb8
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js.map
@@ -0,0 +1,14 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": [
+ {"offset": {"line": 16, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/shared/runtime/runtime-utils.ts"],"sourcesContent":["/**\n * This file contains runtime types and functions that are shared between all\n * TurboPack ECMAScript runtimes.\n *\n * It will be prepended to the runtime code of each runtime.\n */\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/// \n/// \n\ntype EsmNamespaceObject = Record\n\n/**\n * Describes why a module was instantiated.\n * Shared between browser and Node.js runtimes.\n */\nenum SourceType {\n /**\n * The module was instantiated because it was included in an evaluated chunk's\n * runtime.\n * SourceData is a ChunkPath.\n */\n Runtime = 0,\n /**\n * The module was instantiated because a parent module imported it.\n * SourceData is a ModuleId.\n */\n Parent = 1,\n /**\n * The module was instantiated because it was included in a chunk's hot module\n * update.\n * SourceData is an array of ModuleIds or undefined.\n */\n Update = 2,\n}\n\ntype SourceData = ChunkPath | ModuleId | ModuleId[] | undefined\n\n// @ts-ignore Defined in `dev-base.ts`\ndeclare function getOrInstantiateModuleFromParent(\n id: ModuleId,\n sourceModule: M\n): M\n\n// @ts-ignore Defined in `hmr-runtime.ts` (dev mode only)\ndeclare let devModuleCache: Record | undefined\n\n/**\n * Flag indicating which module object type to create when a module is merged. Set to `true`\n * by each runtime that uses ModuleWithDirection (browser dev-base.ts, nodejs dev-base.ts,\n * nodejs build-base.ts). Browser production (build-base.ts) leaves it as `false` since it\n * uses plain Module objects.\n */\nlet createModuleWithDirectionFlag = false\n\nconst REEXPORTED_OBJECTS = new WeakMap()\n\n/**\n * Constructs the `__turbopack_context__` object for a module.\n */\nfunction Context(\n this: TurbopackBaseContext,\n module: Module,\n exports: Exports\n) {\n this.m = module\n // We need to store this here instead of accessing it from the module object to:\n // 1. Make it available to factories directly, since we rewrite `this` to\n // `__turbopack_context__.e` in CJS modules.\n // 2. Support async modules which rewrite `module.exports` to a promise, so we\n // can still access the original exports object from functions like\n // `esmExport`\n // Ideally we could find a new approach for async modules and drop this property altogether.\n this.e = exports\n}\nconst contextPrototype = Context.prototype as TurbopackBaseContext\n\ntype ModuleContextMap = Record\n\ninterface ModuleContextEntry {\n id: () => ModuleId\n module: () => any\n}\n\ninterface ModuleContext {\n // require call\n (moduleId: string): Exports | EsmNamespaceObject\n\n // async import call\n import(moduleId: string): Promise\n\n keys(): ModuleId[]\n\n resolve(moduleId: string): ModuleId\n}\n\ntype GetOrInstantiateModuleFromParent = (\n moduleId: M['id'],\n parentModule: M\n) => M\n\ndeclare function getOrInstantiateRuntimeModule(\n chunkPath: ChunkPath,\n moduleId: ModuleId\n): Module\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nconst toStringTag = typeof Symbol !== 'undefined' && Symbol.toStringTag\n\nfunction defineProp(\n obj: any,\n name: PropertyKey,\n options: PropertyDescriptor & ThisType\n) {\n if (!hasOwnProperty.call(obj, name)) Object.defineProperty(obj, name, options)\n}\n\nfunction getOverwrittenModule(\n moduleCache: ModuleCache,\n id: ModuleId\n): Module {\n let module = moduleCache[id]\n if (!module) {\n if (createModuleWithDirectionFlag) {\n // set in development modes for hmr support\n module = createModuleWithDirection(id)\n } else {\n module = createModuleObject(id)\n }\n moduleCache[id] = module\n }\n return module\n}\n\n/**\n * Creates the module object. Only done here to ensure all module objects have the same shape.\n */\nfunction createModuleObject(id: ModuleId): Module {\n return {\n exports: {},\n error: undefined,\n id,\n namespaceObject: undefined,\n }\n}\n\nfunction createModuleWithDirection(id: ModuleId): ModuleWithDirection {\n return {\n exports: {},\n error: undefined,\n id,\n namespaceObject: undefined,\n parents: [],\n children: [],\n }\n}\n\ntype BindingTag = 0\nconst BindingTag_Value = 0 as BindingTag\n\n// an arbitrary sequence of bindings as\n// - a prop name\n// - BindingTag_Value, a value to be bound directly, or\n// - 1 or 2 functions to bind as getters and sdetters\ntype EsmBindings = Array<\n string | BindingTag | (() => unknown) | ((v: unknown) => void) | unknown\n>\n\n/**\n * Adds the getters to the exports object.\n */\nfunction esm(exports: Exports, bindings: EsmBindings, dynamic?: boolean) {\n defineProp(exports, '__esModule', { value: true })\n if (toStringTag) defineProp(exports, toStringTag, { value: 'Module' })\n let i = 0\n while (i < bindings.length) {\n const propName = bindings[i++] as string\n const tagOrFunction = bindings[i++]\n if (typeof tagOrFunction === 'number') {\n if (tagOrFunction === BindingTag_Value) {\n defineProp(exports, propName, {\n value: bindings[i++],\n enumerable: true,\n writable: false,\n })\n } else {\n throw new Error(`unexpected tag: ${tagOrFunction}`)\n }\n } else {\n const getterFn = tagOrFunction as () => unknown\n if (typeof bindings[i] === 'function') {\n const setterFn = bindings[i++] as (v: unknown) => void\n defineProp(exports, propName, {\n get: getterFn,\n set: setterFn,\n enumerable: true,\n })\n } else {\n defineProp(exports, propName, {\n get: getterFn,\n enumerable: true,\n })\n }\n }\n }\n // The properties defined above are already non-configurable and\n // non-writable, so the namespace's existing exports are effectively\n // immutable. Sealing additionally makes the object non-extensible, matching\n // real ESM-namespace semantics. Modules with dynamic re-exports\n // (`export *` from a CommonJS module) must stay extensible so the dynamic\n // export proxy can surface keys discovered at runtime, so skip the seal for\n // them.\n if (!dynamic) Object.seal(exports)\n}\n\n/**\n * Makes the module an ESM with exports\n */\nfunction esmExport(\n this: TurbopackBaseContext,\n bindings: EsmBindings,\n id: ModuleId | undefined,\n dynamic?: boolean\n) {\n let module: Module\n let exports: Module['exports']\n if (id != null) {\n module = getOverwrittenModule(this.c, id)\n exports = module.exports\n } else {\n module = this.m\n exports = this.e\n }\n module.namespaceObject = exports\n esm(exports, bindings, dynamic)\n}\ncontextPrototype.s = esmExport\n\ntype ReexportedObjects = Record[]\nfunction ensureDynamicExports(\n module: Module,\n exports: Exports\n): ReexportedObjects {\n let reexportedObjects: ReexportedObjects | undefined =\n REEXPORTED_OBJECTS.get(module)\n\n if (!reexportedObjects) {\n REEXPORTED_OBJECTS.set(module, (reexportedObjects = []))\n // Returns the re-exported object that provides `prop` as an own property,\n // or `undefined` if none does. The traps share this logic so they always\n // agree on which keys are synthesized from `reexportedObjects`. `default`\n // is never re-exported by `export *`, so it is never synthesized.\n const reexportOwning = (prop: PropertyKey) => {\n if (prop !== 'default') {\n for (const obj of reexportedObjects!) {\n if (hasOwnProperty.call(obj, prop)) return obj\n }\n }\n return undefined\n }\n // Modules with dynamic re-exports are not sealed by `esm()`, so the\n // target beneath the namespace stays extensible. That is what lets the\n // `ownKeys` and `getOwnPropertyDescriptor` traps legally report keys that\n // exist on `reexportedObjects` but not on the target itself.\n module.exports = module.namespaceObject = new Proxy(exports, {\n get(target, prop) {\n if (\n hasOwnProperty.call(target, prop) ||\n prop === 'default' ||\n prop === '__esModule'\n ) {\n return Reflect.get(target, prop)\n }\n const obj = reexportOwning(prop)\n return obj && Reflect.get(obj, prop)\n },\n // The namespace is read-only, like a real esm namespace object. The\n // re-exported modules can still mutate their own exports (exposed live\n // via `get`), but mutating the namespace itself is rejected. Refusing\n // here, rather than forwarding to the extensible target, also prevents an\n // assignment/definition from shadowing a dynamic re-export. It also\n // prevents delete from removing a static export.\n set() {\n return false\n },\n defineProperty() {\n return false\n },\n deleteProperty() {\n return false\n },\n // The `has` trap ensures that `'exportName' in starImports` will reflect\n // the truth of whether a key is exported.\n has(target, prop) {\n if (Reflect.has(target, prop)) return true\n if (prop === 'default' || prop === '__esModule') return false\n return reexportOwning(prop) !== undefined\n },\n // ownKeys and getOwnPropertyDescriptor together make the keys enumerable.\n // If a value is returned from `ownKeys` but its property descriptor is\n // not enumerable, it will not be visible to iterator methods.\n // Collectively, they allow code like the following:\n //\n // ```\n // // module.js re-exports dynamic CJS exports\n // export * from './legacyModule.cjs'\n //\n // // from another JS file, reference the re-exported dynamic values\n // import * as Namespace from './module.js'\n // Object.keys(Namespace)\n // ```\n ownKeys(target) {\n const keys = Reflect.ownKeys(target)\n for (const obj of reexportedObjects!) {\n for (const key of Reflect.ownKeys(obj)) {\n if (key !== 'default' && !keys.includes(key)) keys.push(key)\n }\n }\n return keys\n },\n getOwnPropertyDescriptor(target, prop) {\n const own = Reflect.getOwnPropertyDescriptor(target, prop)\n if (own || prop === 'default' || prop === '__esModule') return own\n const obj = reexportOwning(prop)\n if (obj) {\n // Synthetic keys don't exist on the target, so they MUST be\n // reported as configurable. However the set/delete traps above will\n // prevent them from actually being changed\n return {\n enumerable: true,\n configurable: true,\n get: () => Reflect.get(obj, prop),\n }\n }\n return undefined\n },\n })\n }\n return reexportedObjects\n}\n\n/**\n * Dynamically exports properties from an object\n */\nfunction dynamicExport(\n this: TurbopackBaseContext,\n object: Record,\n id: ModuleId | undefined\n) {\n let module: Module\n let exports: Exports\n if (id != null) {\n module = getOverwrittenModule(this.c, id)\n exports = module.exports\n } else {\n module = this.m\n exports = this.e\n }\n const reexportedObjects = ensureDynamicExports(module, exports)\n\n if (typeof object === 'object' && object !== null) {\n reexportedObjects.push(object)\n }\n}\ncontextPrototype.j = dynamicExport\n\nfunction exportValue(\n this: TurbopackBaseContext,\n value: any,\n id: ModuleId | undefined\n) {\n let module: Module\n if (id != null) {\n module = getOverwrittenModule(this.c, id)\n } else {\n module = this.m\n }\n module.exports = value\n}\ncontextPrototype.v = exportValue\n\nfunction exportNamespace(\n this: TurbopackBaseContext,\n namespace: any,\n id: ModuleId | undefined\n) {\n let module: Module\n if (id != null) {\n module = getOverwrittenModule(this.c, id)\n } else {\n module = this.m\n }\n module.exports = module.namespaceObject = namespace\n}\ncontextPrototype.n = exportNamespace\n\nfunction createGetter(obj: Record, key: string | symbol) {\n return () => obj[key]\n}\n\n/**\n * @returns prototype of the object\n */\nconst getProto: (obj: any) => any = Object.getPrototypeOf\n ? (obj) => Object.getPrototypeOf(obj)\n : (obj) => obj.__proto__\n\n/** Prototypes that are not expanded for exports */\nconst LEAF_PROTOTYPES = [null, getProto({}), getProto([]), getProto(getProto)]\n\n/**\n * @param raw\n * @param ns\n * @param allowExportDefault\n * * `false`: will have the raw module as default export\n * * `true`: will have the default property as default export\n */\nfunction interopEsm(\n raw: Exports,\n ns: EsmNamespaceObject,\n allowExportDefault?: boolean\n) {\n const bindings: EsmBindings = []\n let defaultLocation = -1\n for (\n let current = raw;\n (typeof current === 'object' || typeof current === 'function') &&\n !LEAF_PROTOTYPES.includes(current);\n current = getProto(current)\n ) {\n for (const key of Object.getOwnPropertyNames(current)) {\n bindings.push(key, createGetter(raw, key))\n if (defaultLocation === -1 && key === 'default') {\n defaultLocation = bindings.length - 1\n }\n }\n }\n\n // this is not really correct\n // we should set the `default` getter if the imported module is a `.cjs file`\n if (!(allowExportDefault && defaultLocation >= 0)) {\n // Replace the binding with one for the namespace itself in order to preserve iteration order.\n if (defaultLocation >= 0) {\n // Replace the getter with the value\n bindings.splice(defaultLocation, 1, BindingTag_Value, raw)\n } else {\n bindings.push('default', BindingTag_Value, raw)\n }\n }\n\n esm(ns, bindings)\n return ns\n}\n\nfunction createNS(raw: Module['exports']): EsmNamespaceObject {\n if (typeof raw === 'function') {\n return function (this: any, ...args: any[]) {\n return raw.apply(this, args)\n }\n } else {\n return Object.create(null)\n }\n}\n\nfunction esmImport(\n this: TurbopackBaseContext,\n id: ModuleId\n): Exclude {\n const module = getOrInstantiateModuleFromParent(id, this.m)\n\n // any ES module has to have `module.namespaceObject` defined.\n if (module.namespaceObject) return module.namespaceObject\n\n // only ESM can be an async module, so we don't need to worry about exports being a promise here.\n const raw = module.exports\n return (module.namespaceObject = interopEsm(\n raw,\n createNS(raw),\n raw && (raw as any).__esModule\n ))\n}\ncontextPrototype.i = esmImport\n\nfunction asyncLoader(\n this: TurbopackBaseContext,\n moduleId: ModuleId\n): Promise {\n const loader = this.r(moduleId) as (\n importFunction: EsmImport\n ) => Promise\n return loader(esmImport.bind(this))\n}\ncontextPrototype.A = asyncLoader\n\n// Add a simple runtime require so that environments without one can still pass\n// `typeof require` CommonJS checks so that exports are correctly registered.\nconst runtimeRequire =\n // @ts-ignore\n typeof require === 'function'\n ? // @ts-ignore\n require\n : function require() {\n throw new Error('Unexpected use of runtime require')\n }\ncontextPrototype.t = runtimeRequire\n\nfunction commonJsRequire(\n this: TurbopackBaseContext,\n id: ModuleId\n): Exports {\n return getOrInstantiateModuleFromParent(id, this.m).exports\n}\ncontextPrototype.r = commonJsRequire\n\n/**\n * Remove fragments and query parameters since they are never part of the context map keys\n *\n * This matches how we parse patterns at resolving time. Arguably we should only do this for\n * strings passed to `import` but the resolve does it for `import` and `require` and so we do\n * here as well.\n */\nfunction parseRequest(request: string): string {\n // Per the URI spec fragments can contain `?` characters, so we should trim it off first\n // https://datatracker.ietf.org/doc/html/rfc3986#section-3.5\n const hashIndex = request.indexOf('#')\n if (hashIndex !== -1) {\n request = request.substring(0, hashIndex)\n }\n\n const queryIndex = request.indexOf('?')\n if (queryIndex !== -1) {\n request = request.substring(0, queryIndex)\n }\n\n return request\n}\n/**\n * `require.context` and require/import expression runtime.\n */\nfunction moduleContext(map: ModuleContextMap): ModuleContext {\n function moduleContext(id: string): Exports {\n id = parseRequest(id)\n if (hasOwnProperty.call(map, id)) {\n return map[id].module()\n }\n\n const e = new Error(`Cannot find module '${id}'`)\n ;(e as any).code = 'MODULE_NOT_FOUND'\n throw e\n }\n\n moduleContext.keys = (): string[] => {\n return Object.keys(map)\n }\n\n moduleContext.resolve = (id: string): ModuleId => {\n id = parseRequest(id)\n if (hasOwnProperty.call(map, id)) {\n return map[id].id()\n }\n\n const e = new Error(`Cannot find module '${id}'`)\n ;(e as any).code = 'MODULE_NOT_FOUND'\n throw e\n }\n\n moduleContext.import = async (id: string) => {\n return await (moduleContext(id) as Promise)\n }\n\n return moduleContext\n}\ncontextPrototype.f = moduleContext\n\n/**\n * Returns the path of a chunk defined by its data.\n */\nfunction getChunkPath(chunkData: ChunkData): ChunkPath {\n return typeof chunkData === 'string' ? chunkData : chunkData.path\n}\n\n// Load the CompressedmoduleFactories of a chunk into the `moduleFactories` Map.\n// The CompressedModuleFactories format is\n// - 1 or more module ids\n// - a module factory function\n// So walking this is a little complex but the flat structure is also fast to\n// traverse, we can use `typeof` operators to distinguish the two cases.\nfunction installCompressedModuleFactories(\n chunkModules: CompressedModuleFactories,\n offset: number,\n moduleFactories: ModuleFactories,\n newModuleId?: (id: ModuleId) => void\n) {\n let i = offset\n while (i < chunkModules.length) {\n let end = i + 1\n // Find our factory function\n while (\n end < chunkModules.length &&\n typeof chunkModules[end] !== 'function'\n ) {\n end++\n }\n if (end === chunkModules.length) {\n throw new Error('malformed chunk format, expected a factory function')\n }\n\n // Install the factory for each module ID that doesn't already have one.\n // When some IDs in this group already have a factory, reuse that existing\n // group factory for the missing IDs to keep all IDs in the group consistent.\n // Otherwise, install the factory from this chunk.\n const moduleFactoryFn = chunkModules[end] as Function\n let existingGroupFactory: Function | undefined = undefined\n for (let j = i; j < end; j++) {\n const id = chunkModules[j] as ModuleId\n const existingFactory = moduleFactories.get(id)\n if (existingFactory) {\n existingGroupFactory = existingFactory\n break\n }\n }\n const factoryToInstall = existingGroupFactory ?? moduleFactoryFn\n\n let didInstallFactory = false\n for (let j = i; j < end; j++) {\n const id = chunkModules[j] as ModuleId\n if (!moduleFactories.has(id)) {\n if (!didInstallFactory) {\n if (factoryToInstall === moduleFactoryFn) {\n applyModuleFactoryName(moduleFactoryFn)\n }\n didInstallFactory = true\n }\n moduleFactories.set(id, factoryToInstall)\n newModuleId?.(id)\n }\n }\n i = end + 1 // end is pointing at the last factory advance to the next id or the end of the array.\n }\n}\n\n/**\n * A pseudo \"fake\" URL object to resolve to its relative path.\n *\n * When UrlRewriteBehavior is set to relative, calls to the `new URL()` will construct url without base using this\n * runtime function to generate context-agnostic urls between different rendering context, i.e ssr / client to avoid\n * hydration mismatch.\n *\n * This is based on webpack's existing implementation:\n * https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/lib/runtime/RelativeUrlRuntimeModule.js\n */\nconst relativeURL = function relativeURL(this: any, inputUrl: string) {\n const realUrl = new URL(inputUrl, 'x:/')\n const values: Record = {}\n for (const key in realUrl) values[key] = (realUrl as any)[key]\n values.href = inputUrl\n values.pathname = inputUrl.replace(/[?#].*/, '')\n values.origin = values.protocol = ''\n values.toString = values.toJSON = (..._args: Array) => inputUrl\n for (const key in values)\n Object.defineProperty(this, key, {\n enumerable: true,\n configurable: true,\n value: values[key],\n })\n}\nrelativeURL.prototype = URL.prototype\ncontextPrototype.U = relativeURL\n\n/**\n * Utility function to ensure all variants of an enum are handled.\n */\nfunction invariant(never: never, computeMessage: (arg: any) => string): never {\n throw new Error(`Invariant: ${computeMessage(never)}`)\n}\n\n/**\n * Constructs an error message for when a module factory is not available.\n */\nfunction factoryNotAvailableMessage(\n moduleId: ModuleId,\n sourceType: SourceType,\n sourceData: SourceData\n): string {\n let instantiationReason: string\n switch (sourceType) {\n case SourceType.Runtime:\n instantiationReason = `as a runtime entry of chunk ${sourceData}`\n break\n case SourceType.Parent:\n instantiationReason = `because it was required from module ${sourceData}`\n break\n case SourceType.Update:\n instantiationReason = 'because of an HMR update'\n break\n default:\n invariant(\n sourceType,\n (sourceType) => `Unknown source type: ${sourceType}`\n )\n }\n return `Module ${moduleId} was instantiated ${instantiationReason}, but the module factory is not available.`\n}\n\n/**\n * A stub function to make `require` available but non-functional in ESM.\n */\nfunction requireStub(_moduleId: ModuleId): never {\n throw new Error('dynamic usage of require is not supported')\n}\ncontextPrototype.z = requireStub\n\n// Make `globalThis` available to the module in a way that cannot be shadowed by a local variable.\ncontextPrototype.g = globalThis\n\ntype ContextConstructor = {\n new (module: Module, exports: Exports): TurbopackBaseContext\n}\n\nfunction applyModuleFactoryName(factory: Function) {\n // Give the module factory a nice name to improve stack traces.\n Object.defineProperty(factory, 'name', {\n value: 'module evaluation',\n })\n}\n"],"names":["SourceType","createModuleWithDirectionFlag","REEXPORTED_OBJECTS","WeakMap","Context","module","exports","m","e","contextPrototype","prototype","hasOwnProperty","Object","toStringTag","Symbol","defineProp","obj","name","options","call","defineProperty","getOverwrittenModule","moduleCache","id","createModuleWithDirection","createModuleObject","error","undefined","namespaceObject","parents","children","BindingTag_Value","esm","bindings","dynamic","value","i","length","propName","tagOrFunction","enumerable","writable","Error","getterFn","setterFn","get","set","seal","esmExport","c","s","ensureDynamicExports","reexportedObjects","reexportOwning","prop","Proxy","target","Reflect","deleteProperty","has","ownKeys","keys","key","includes","push","getOwnPropertyDescriptor","own","configurable","dynamicExport","object","j","exportValue","v","exportNamespace","namespace","n","createGetter","getProto","getPrototypeOf","__proto__","LEAF_PROTOTYPES","interopEsm","raw","ns","allowExportDefault","defaultLocation","current","getOwnPropertyNames","splice","createNS","args","apply","create","esmImport","getOrInstantiateModuleFromParent","__esModule","asyncLoader","moduleId","loader","r","bind","A","runtimeRequire","require","require1","t","commonJsRequire","parseRequest","request","hashIndex","indexOf","substring","queryIndex","moduleContext","map","code","resolve","import","f","getChunkPath","chunkData","path","installCompressedModuleFactories","chunkModules","offset","moduleFactories","newModuleId","end","moduleFactoryFn","existingGroupFactory","existingFactory","factoryToInstall","didInstallFactory","applyModuleFactoryName","relativeURL","inputUrl","realUrl","URL","values","href","pathname","replace","origin","protocol","toString","toJSON","_args","U","invariant","never","computeMessage","factoryNotAvailableMessage","sourceType","sourceData","instantiationReason","requireStub","_moduleId","z","g","globalThis","factory"],"mappings":"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","ignoreList":[0]}},
+ {"offset": {"line": 541, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/shared/runtime/async-module.ts"],"sourcesContent":["/// \n/// \n\n/**\n * Top-level-await / async-module machinery. This is only included in the runtime\n * when the module graph actually contains an async module (a module with\n * top-level await, or one that transitively depends on one). When no async\n * module is present, the chunk items never reference `__turbopack_context__.a`,\n * so this whole file can be omitted.\n *\n * everything below is adapted from webpack\n * https://github.com/webpack/webpack/blob/6be4065ade1e252c1d8dcba4af0f43e32af1bdc1/lib/runtime/AsyncModuleRuntimeModule.js#L13\n */\n\nconst turbopackQueues = Symbol('turbopack queues')\nconst turbopackExports = Symbol('turbopack exports')\nconst turbopackError = Symbol('turbopack error')\n\nconst enum QueueStatus {\n Unknown = -1,\n Unresolved = 0,\n Resolved = 1,\n}\n\ntype AsyncQueueFn = (() => void) & { queueCount: number }\ntype AsyncQueue = AsyncQueueFn[] & {\n status: QueueStatus\n}\n\ntype Dep = Exports | AsyncModulePromise | Promise\n\ntype AsyncModuleExt = {\n [turbopackQueues]: (fn: (queue: AsyncQueue) => void) => void\n [turbopackExports]: Exports\n [turbopackError]?: any\n}\n\ntype AsyncModulePromise = Promise & AsyncModuleExt\n\nfunction isPromise(maybePromise: any): maybePromise is Promise {\n return (\n maybePromise != null &&\n typeof maybePromise === 'object' &&\n 'then' in maybePromise &&\n typeof maybePromise.then === 'function'\n )\n}\n\nfunction isAsyncModuleExt(obj: T): obj is AsyncModuleExt & T {\n return turbopackQueues in obj\n}\n\nfunction createPromise() {\n let resolve: (value: T | PromiseLike) => void\n let reject: (reason?: any) => void\n\n const promise = new Promise((res, rej) => {\n reject = rej\n resolve = res\n })\n\n return {\n promise,\n resolve: resolve!,\n reject: reject!,\n }\n}\n\nfunction resolveQueue(queue?: AsyncQueue) {\n if (queue && queue.status !== QueueStatus.Resolved) {\n queue.status = QueueStatus.Resolved\n queue.forEach((fn) => fn.queueCount--)\n queue.forEach((fn) => (fn.queueCount-- ? fn.queueCount++ : fn()))\n }\n}\n\nfunction wrapDeps(deps: Dep[]): AsyncModuleExt[] {\n return deps.map((dep): AsyncModuleExt => {\n if (dep !== null && typeof dep === 'object') {\n if (isAsyncModuleExt(dep)) return dep\n if (isPromise(dep)) {\n const queue: AsyncQueue = Object.assign([], {\n status: QueueStatus.Unresolved,\n })\n\n const obj: AsyncModuleExt = {\n [turbopackExports]: {},\n [turbopackQueues]: (fn: (queue: AsyncQueue) => void) => fn(queue),\n }\n\n dep.then(\n (res) => {\n obj[turbopackExports] = res\n resolveQueue(queue)\n },\n (err) => {\n obj[turbopackError] = err\n resolveQueue(queue)\n }\n )\n\n return obj\n }\n }\n\n return {\n [turbopackExports]: dep,\n [turbopackQueues]: () => {},\n }\n })\n}\n\nfunction asyncModule(\n this: TurbopackBaseContext,\n body: (\n handleAsyncDependencies: (\n deps: Dep[]\n ) => Exports[] | Promise<() => Exports[]>,\n asyncResult: (err?: any) => void\n ) => void,\n hasAwait: boolean\n) {\n const module = this.m\n const queue: AsyncQueue | undefined = hasAwait\n ? Object.assign([], { status: QueueStatus.Unknown })\n : undefined\n\n const depQueues: Set = new Set()\n\n const { resolve, reject, promise: rawPromise } = createPromise()\n\n const promise: AsyncModulePromise = Object.assign(rawPromise, {\n [turbopackExports]: module.exports,\n [turbopackQueues]: (fn) => {\n queue && fn(queue)\n depQueues.forEach(fn)\n promise['catch'](() => {})\n },\n } satisfies AsyncModuleExt)\n\n const attributes: PropertyDescriptor = {\n get(): any {\n return promise\n },\n set(v: any) {\n // Calling `esmExport` leads to this.\n if (v !== promise) {\n promise[turbopackExports] = v\n }\n },\n }\n\n Object.defineProperty(module, 'exports', attributes)\n Object.defineProperty(module, 'namespaceObject', attributes)\n\n function handleAsyncDependencies(deps: Dep[]) {\n const currentDeps = wrapDeps(deps)\n\n const getResult = () =>\n currentDeps.map((d) => {\n if (d[turbopackError]) throw d[turbopackError]\n return d[turbopackExports]\n })\n\n const { promise, resolve } = createPromise<() => Exports[]>()\n\n const fn: AsyncQueueFn = Object.assign(() => resolve(getResult), {\n queueCount: 0,\n })\n\n function fnQueue(q: AsyncQueue) {\n if (q !== queue && !depQueues.has(q)) {\n depQueues.add(q)\n if (q && q.status === QueueStatus.Unresolved) {\n fn.queueCount++\n q.push(fn)\n }\n }\n }\n\n currentDeps.map((dep) => dep[turbopackQueues](fnQueue))\n\n return fn.queueCount ? promise : getResult()\n }\n\n function asyncResult(err?: any) {\n if (err) {\n reject((promise[turbopackError] = err))\n } else {\n resolve(promise[turbopackExports])\n }\n\n resolveQueue(queue)\n }\n\n body(handleAsyncDependencies, asyncResult)\n\n if (queue && queue.status === QueueStatus.Unknown) {\n queue.status = QueueStatus.Unresolved\n }\n}\ncontextPrototype.a = asyncModule\n"],"names":["turbopackQueues","Symbol","turbopackExports","turbopackError","isPromise","maybePromise","then","isAsyncModuleExt","obj","createPromise","resolve","reject","promise","Promise","res","rej","resolveQueue","queue","status","forEach","fn","queueCount","wrapDeps","deps","map","dep","Object","assign","err","asyncModule","body","hasAwait","module","m","undefined","depQueues","Set","rawPromise","exports","attributes","get","set","v","defineProperty","handleAsyncDependencies","currentDeps","getResult","d","fnQueue","q","has","add","push","asyncResult","contextPrototype","a"],"mappings":"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","ignoreList":[0]}},
+ {"offset": {"line": 673, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/shared-node/base-externals-utils.ts"],"sourcesContent":["/// \n\n/// A 'base' utilities to support runtime can have externals.\n/// Currently this is for node.js / edge runtime both.\n/// If a fn requires node.js specific behavior, it should be placed in `node-external-utils` instead.\n\nasync function externalImport(id: DependencySpecifier) {\n let raw\n try {\n raw = await import(id)\n } catch (err) {\n // TODO(alexkirsz) This can happen when a client-side module tries to load\n // an external module we don't provide a shim for (e.g. querystring, url).\n // For now, we fail semi-silently, but in the future this should be a\n // compilation error.\n throw new Error(`Failed to load external module ${id}: ${err}`)\n }\n\n if (raw && raw.__esModule && raw.default && 'default' in raw.default) {\n return interopEsm(raw.default, createNS(raw), true)\n }\n\n return raw\n}\ncontextPrototype.y = externalImport\n\nfunction externalRequire(\n id: ModuleId,\n thunk: () => any,\n esm: boolean = false\n): Exports | EsmNamespaceObject {\n let raw\n try {\n raw = thunk()\n } catch (err) {\n // TODO(alexkirsz) This can happen when a client-side module tries to load\n // an external module we don't provide a shim for (e.g. querystring, url).\n // For now, we fail semi-silently, but in the future this should be a\n // compilation error.\n throw new Error(`Failed to load external module ${id}: ${err}`)\n }\n\n if (!esm || raw.__esModule) {\n return raw\n }\n\n return interopEsm(raw, createNS(raw), true)\n}\n\nexternalRequire.resolve = (\n id: string,\n options?: {\n paths?: string[]\n }\n) => {\n return require.resolve(id, options)\n}\ncontextPrototype.x = externalRequire\n"],"names":["externalImport","id","raw","err","Error","__esModule","default","interopEsm","createNS","contextPrototype","y","externalRequire","thunk","esm","resolve","options","require","x"],"mappings":"AAAA,2DAA2D;AAE3D,6DAA6D;AAC7D,sDAAsD;AACtD,qGAAqG;AAErG,eAAeA,eAAeC,EAAuB;IACnD,IAAIC;IACJ,IAAI;QACFA,MAAM,MAAM,MAAM,CAACD;IACrB,EAAE,OAAOE,KAAK;QACZ,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,qBAAqB;QACrB,MAAM,IAAIC,MAAM,CAAC,+BAA+B,EAAEH,GAAG,EAAE,EAAEE,KAAK;IAChE;IAEA,IAAID,OAAOA,IAAIG,UAAU,IAAIH,IAAII,OAAO,IAAI,aAAaJ,IAAII,OAAO,EAAE;QACpE,OAAOC,WAAWL,IAAII,OAAO,EAAEE,SAASN,MAAM;IAChD;IAEA,OAAOA;AACT;AACAO,iBAAiBC,CAAC,GAAGV;AAErB,SAASW,gBACPV,EAAY,EACZW,KAAgB,EAChBC,MAAe,KAAK;IAEpB,IAAIX;IACJ,IAAI;QACFA,MAAMU;IACR,EAAE,OAAOT,KAAK;QACZ,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,qBAAqB;QACrB,MAAM,IAAIC,MAAM,CAAC,+BAA+B,EAAEH,GAAG,EAAE,EAAEE,KAAK;IAChE;IAEA,IAAI,CAACU,OAAOX,IAAIG,UAAU,EAAE;QAC1B,OAAOH;IACT;IAEA,OAAOK,WAAWL,KAAKM,SAASN,MAAM;AACxC;AAEAS,gBAAgBG,OAAO,GAAG,CACxBb,IACAc;IAIA,OAAOC,QAAQF,OAAO,CAACb,IAAIc;AAC7B;AACAN,iBAAiBQ,CAAC,GAAGN","ignoreList":[0]}},
+ {"offset": {"line": 714, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/shared-node/node-externals-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\ndeclare var RUNTIME_PUBLIC_PATH: string\ndeclare var RELATIVE_ROOT_PATH: string\ndeclare var ASSET_PREFIX: string\n\nconst path = require('path')\n\nconst relativePathToRuntimeRoot = path.relative(RUNTIME_PUBLIC_PATH, '.')\n// Compute the relative path to the `distDir`.\nconst relativePathToDistRoot = path.join(\n relativePathToRuntimeRoot,\n RELATIVE_ROOT_PATH\n)\nconst RUNTIME_ROOT = path.resolve(__filename, relativePathToRuntimeRoot)\n// Compute the absolute path to the root, by stripping distDir from the absolute path to this file.\nconst ABSOLUTE_ROOT = path.resolve(__filename, relativePathToDistRoot)\n\n/**\n * Returns an absolute path to the given module path.\n * Module path should be relative, either path to a file or a directory.\n *\n * This fn allows to calculate an absolute path for some global static values, such as\n * `__dirname` or `import.meta.url` that Turbopack will not embeds in compile time.\n * See ImportMetaBinding::code_generation for the usage.\n */\nfunction resolveAbsolutePath(modulePath?: string): string {\n if (modulePath) {\n return path.join(ABSOLUTE_ROOT, modulePath)\n }\n return ABSOLUTE_ROOT\n}\nContext.prototype.P = resolveAbsolutePath\n\n/**\n * Returns an absolute `file://` URL for the given module path.\n *\n * Uses `url.pathToFileURL` so that the resulting URL is a valid file URI on\n * all platforms (forward slashes on Windows, drive letters handled\n * correctly, path segments URL-encoded).\n */\nfunction resolveFileUrl(modulePath?: string): string {\n return require('url').pathToFileURL(resolveAbsolutePath(modulePath)).href\n}\nContext.prototype.F = resolveFileUrl\n"],"names":["path","require","relativePathToRuntimeRoot","relative","RUNTIME_PUBLIC_PATH","relativePathToDistRoot","join","RELATIVE_ROOT_PATH","RUNTIME_ROOT","resolve","__filename","ABSOLUTE_ROOT","resolveAbsolutePath","modulePath","Context","prototype","P","resolveFileUrl","pathToFileURL","href","F"],"mappings":"AAAA,oDAAoD,GAMpD,MAAMA,OAAOC,QAAQ;AAErB,MAAMC,4BAA4BF,KAAKG,QAAQ,CAACC,qBAAqB;AACrE,8CAA8C;AAC9C,MAAMC,yBAAyBL,KAAKM,IAAI,CACtCJ,2BACAK;AAEF,MAAMC,eAAeR,KAAKS,OAAO,CAACC,YAAYR;AAC9C,mGAAmG;AACnG,MAAMS,gBAAgBX,KAAKS,OAAO,CAACC,YAAYL;AAE/C;;;;;;;CAOC,GACD,SAASO,oBAAoBC,UAAmB;IAC9C,IAAIA,YAAY;QACd,OAAOb,KAAKM,IAAI,CAACK,eAAeE;IAClC;IACA,OAAOF;AACT;AACAG,QAAQC,SAAS,CAACC,CAAC,GAAGJ;AAEtB;;;;;;CAMC,GACD,SAASK,eAAeJ,UAAmB;IACzC,OAAOZ,QAAQ,OAAOiB,aAAa,CAACN,oBAAoBC,aAAaM,IAAI;AAC3E;AACAL,QAAQC,SAAS,CAACK,CAAC,GAAGH","ignoreList":[0]}},
+ {"offset": {"line": 745, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/nodejs/runtime/runtime-base.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/// \n/// \n/// \n/// \n\n/**\n * Base Node.js runtime shared between production and development.\n * Contains chunk loading, module caching, and other non-HMR functionality.\n */\n\nprocess.env.TURBOPACK = '1'\n\nconst url = require('url') as typeof import('url')\n\nconst moduleFactories: ModuleFactories = new Map()\nconst moduleCache: ModuleCache = Object.create(null)\n\n/**\n * Returns an absolute path to the given module's id.\n */\nfunction resolvePathFromModule(\n this: TurbopackBaseContext,\n moduleId: string\n): string {\n const exported = this.r(moduleId)\n const exportedPath = exported?.default ?? exported\n if (typeof exportedPath !== 'string') {\n return exported as any\n }\n\n const strippedAssetPrefix = exportedPath.slice(ASSET_PREFIX.length)\n const resolved = path.resolve(RUNTIME_ROOT, strippedAssetPrefix)\n\n return url.pathToFileURL(resolved).href\n}\n\n/**\n * Exports a URL value. No suffix is added in Node.js runtime.\n */\nfunction exportUrl(\n this: TurbopackBaseContext,\n urlValue: string,\n id: ModuleId | undefined\n) {\n exportValue.call(this, urlValue, id)\n}\n\nfunction loadRuntimeChunk(sourcePath: ChunkPath, chunkData: ChunkData): void {\n if (typeof chunkData === 'string') {\n loadRuntimeChunkPath(sourcePath, chunkData)\n } else {\n loadRuntimeChunkPath(sourcePath, chunkData.path)\n }\n}\n\nconst loadedChunks = new Set()\nconst unsupportedLoadChunk = Promise.resolve(undefined)\nconst loadedChunk: Promise = Promise.resolve(undefined)\nconst chunkCache = new Map>()\n\nfunction clearChunkCache() {\n chunkCache.clear()\n loadedChunks.clear()\n}\n\nfunction loadRuntimeChunkPath(\n sourcePath: ChunkPath,\n chunkPath: ChunkPath\n): void {\n if (!isJs(chunkPath)) {\n // We only support loading JS chunks in Node.js.\n // This branch can be hit when trying to load a CSS chunk.\n return\n }\n\n if (loadedChunks.has(chunkPath)) {\n return\n }\n\n try {\n const resolved = path.resolve(RUNTIME_ROOT, chunkPath)\n const chunkModules: CompressedModuleFactories = require(resolved)\n installCompressedModuleFactories(chunkModules, 0, moduleFactories)\n loadedChunks.add(chunkPath)\n } catch (cause) {\n let errorMessage = `Failed to load chunk ${chunkPath}`\n\n if (sourcePath) {\n errorMessage += ` from runtime for chunk ${sourcePath}`\n }\n\n const error = new Error(errorMessage, { cause })\n error.name = 'ChunkLoadError'\n throw error\n }\n}\n\nfunction loadChunkAsync(\n this: TurbopackBaseContext,\n chunkData: ChunkData\n): Promise {\n const chunkPath = typeof chunkData === 'string' ? chunkData : chunkData.path\n if (!isJs(chunkPath)) {\n // We only support loading JS chunks in Node.js.\n // This branch can be hit when trying to load a CSS chunk.\n return unsupportedLoadChunk\n }\n\n let entry = chunkCache.get(chunkPath)\n if (entry === undefined) {\n try {\n // resolve to an absolute path to simplify `require` handling\n const resolved = path.resolve(RUNTIME_ROOT, chunkPath)\n // TODO: consider switching to `import()` to enable concurrent chunk loading and async file io\n // However this is incompatible with hot reloading (since `import` doesn't use the require cache)\n const chunkModules: CompressedModuleFactories = require(resolved)\n installCompressedModuleFactories(chunkModules, 0, moduleFactories)\n entry = loadedChunk\n } catch (cause) {\n const errorMessage = `Failed to load chunk ${chunkPath} from module ${this.m.id}`\n const error = new Error(errorMessage, { cause })\n error.name = 'ChunkLoadError'\n\n // Cache the failure promise, future requests will also get this same rejection\n entry = Promise.reject(error)\n }\n chunkCache.set(chunkPath, entry)\n }\n // TODO: Return an instrumented Promise that React can use instead of relying on referential equality.\n return entry\n}\ncontextPrototype.l = loadChunkAsync\n\nfunction loadChunkAsyncByUrl(\n this: TurbopackBaseContext,\n chunkUrl: string\n) {\n const path = url.fileURLToPath(new URL(chunkUrl, RUNTIME_ROOT)) as ChunkPath\n return loadChunkAsync.call(this, path)\n}\ncontextPrototype.L = loadChunkAsyncByUrl\n\n// Shared runtime primitive: the root that on-disk chunk paths are resolved\n// against. Used by the bundled wasm helper (exposed as `__turbopack_runtime_root__`).\ncontextPrototype.w = RUNTIME_ROOT\n\nconst regexJsUrl = /\\.js(?:\\?[^#]*)?(?:#.*)?$/\n/**\n * Checks if a given path/URL ends with .js, optionally followed by ?query or #fragment.\n */\nfunction isJs(chunkUrlOrPath: ChunkUrl | ChunkPath): boolean {\n return regexJsUrl.test(chunkUrlOrPath)\n}\n"],"names":["process","env","TURBOPACK","url","require","moduleFactories","Map","moduleCache","Object","create","resolvePathFromModule","moduleId","exported","r","exportedPath","default","strippedAssetPrefix","slice","ASSET_PREFIX","length","resolved","path","resolve","RUNTIME_ROOT","pathToFileURL","href","exportUrl","urlValue","id","exportValue","call","loadRuntimeChunk","sourcePath","chunkData","loadRuntimeChunkPath","loadedChunks","Set","unsupportedLoadChunk","Promise","undefined","loadedChunk","chunkCache","clearChunkCache","clear","chunkPath","isJs","has","chunkModules","installCompressedModuleFactories","add","cause","errorMessage","error","Error","name","loadChunkAsync","entry","get","m","reject","set","contextPrototype","l","loadChunkAsyncByUrl","chunkUrl","path1","fileURLToPath","URL","L","w","regexJsUrl","chunkUrlOrPath","test"],"mappings":"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","ignoreList":[0]}},
+ {"offset": {"line": 860, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/shared/runtime/hmr-runtime.ts"],"sourcesContent":["/// \n/// \n/// \n/// \n\ntype HotModuleFactoryFunction = ModuleFactoryFunction<\n HotModule,\n TurbopackBaseContext\n>\n\n/**\n * Shared HMR (Hot Module Replacement) implementation.\n *\n * This file contains the complete HMR implementation that's shared between\n * browser and Node.js runtimes. It manages module hot state, dependency\n * tracking, the module.hot API, and the full HMR update flow.\n */\n\n/**\n * The development module cache shared across the runtime.\n * Browser runtime declares this directly.\n * Node.js runtime assigns globalThis.__turbopack_module_cache__ to this.\n */\nlet devModuleCache: Record\n\n/**\n * Module IDs that are instantiated as part of the runtime of a chunk.\n */\nlet runtimeModules: Set\n\n/**\n * Maps module IDs to persisted data between executions of their hot module\n * implementation (`hot.data`).\n */\nconst moduleHotData: Map = new Map()\n\n/**\n * Maps module instances to their hot module state.\n * Uses WeakMap so it works with both HotModule and ModuleWithDirection.\n */\nconst moduleHotState: WeakMap = new WeakMap()\n\n/**\n * Modules that call `module.hot.invalidate()` (while being updated).\n */\nconst queuedInvalidatedModules: Set = new Set()\n\nclass UpdateApplyError extends Error {\n name = 'UpdateApplyError'\n\n dependencyChain: ModuleId[]\n\n constructor(message: string, dependencyChain: ModuleId[]) {\n super(message)\n this.dependencyChain = dependencyChain\n }\n}\n\ntype ModuleEffect =\n | {\n type: 'unaccepted'\n dependencyChain: ModuleId[]\n }\n | {\n type: 'self-declined'\n dependencyChain: ModuleId[]\n moduleId: ModuleId\n }\n | {\n type: 'declined'\n dependencyChain: ModuleId[]\n moduleId: ModuleId\n parentId: ModuleId\n }\n | {\n type: 'accepted'\n moduleId: ModuleId\n outdatedModules: Set\n outdatedDependencies: Map>\n }\n\n/**\n * Records parent-child relationship when a module imports another.\n * Should be called during module instantiation.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction trackModuleImport(\n parentModule: ModuleWithDirection,\n childModuleId: ModuleId,\n childModule: ModuleWithDirection | undefined\n): void {\n // Record that parent imports child\n if (parentModule.children.indexOf(childModuleId) === -1) {\n parentModule.children.push(childModuleId)\n }\n\n // Record that child is imported by parent\n if (childModule && childModule.parents.indexOf(parentModule.id) === -1) {\n childModule.parents.push(parentModule.id)\n }\n}\n\nfunction formatDependencyChain(dependencyChain: ModuleId[]): string {\n return `Dependency chain: ${dependencyChain.join(' -> ')}`\n}\n\n/**\n * Walks the dependency tree to find all modules affected by a change.\n * Returns information about whether the update can be accepted and which\n * modules need to be invalidated.\n *\n * @param moduleId - The module that changed\n * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept().\n * This is used for server-side HMR where pages auto-accept at the top level.\n */\nfunction getAffectedModuleEffects(\n moduleId: ModuleId,\n autoAcceptRootModules: boolean\n): ModuleEffect {\n const outdatedModules: Set = new Set()\n const outdatedDependencies: Map> = new Map()\n\n type QueueItem = { moduleId?: ModuleId; dependencyChain: ModuleId[] }\n\n const queue: Array = [\n {\n moduleId,\n dependencyChain: [],\n },\n ]\n\n let queueIndex = 0\n while (queueIndex < queue.length) {\n const { moduleId, dependencyChain } = queue[queueIndex]!\n // Release copied dependency chains as soon as their queue item is consumed.\n queue[queueIndex++] = undefined\n\n if (moduleId != null) {\n if (outdatedModules.has(moduleId)) {\n // Avoid infinite loops caused by cycles between modules in the dependency chain.\n continue\n }\n\n outdatedModules.add(moduleId)\n }\n\n // We've arrived at the runtime of the chunk, which means that nothing\n // else above can accept this update.\n if (moduleId === undefined) {\n if (autoAcceptRootModules) {\n return {\n type: 'accepted',\n moduleId,\n outdatedModules,\n outdatedDependencies,\n }\n }\n return {\n type: 'unaccepted',\n dependencyChain,\n }\n }\n\n const module = devModuleCache[moduleId]\n const hotState = moduleHotState.get(module)!\n\n if (\n // The module is not in the cache. Since this is a \"modified\" update,\n // it means that the module was never instantiated before.\n !module || // The module accepted itself without invalidating globalThis.\n // TODO is that right?\n (hotState.selfAccepted && !hotState.selfInvalidated)\n ) {\n continue\n }\n\n if (hotState.selfDeclined) {\n return {\n type: 'self-declined',\n dependencyChain,\n moduleId,\n }\n }\n\n if (runtimeModules.has(moduleId)) {\n if (autoAcceptRootModules) {\n continue\n }\n queue.push({\n moduleId: undefined,\n dependencyChain: [...dependencyChain, moduleId],\n })\n continue\n }\n\n for (const parentId of module.parents) {\n const parent = devModuleCache[parentId]\n\n if (!parent) {\n continue\n }\n\n const parentHotState = moduleHotState.get(parent)\n\n // Check if parent declined this dependency\n if (parentHotState?.declinedDependencies[moduleId]) {\n return {\n type: 'declined',\n dependencyChain: [...dependencyChain, moduleId],\n moduleId,\n parentId,\n }\n }\n\n // Skip if parent is already outdated\n if (outdatedModules.has(parentId)) {\n continue\n }\n\n // Check if parent accepts this dependency\n if (parentHotState?.acceptedDependencies[moduleId]) {\n if (!outdatedDependencies.has(parentId)) {\n outdatedDependencies.set(parentId, new Set())\n }\n outdatedDependencies.get(parentId)!.add(moduleId)\n continue\n }\n\n // Neither accepted nor declined — propagate to parent\n queue.push({\n moduleId: parentId,\n dependencyChain: [...dependencyChain, moduleId],\n })\n }\n\n // If no parents and we're at a root module, auto-accept if configured\n if (module.parents.length === 0 && autoAcceptRootModules) {\n continue\n }\n }\n\n return {\n type: 'accepted',\n moduleId,\n outdatedModules,\n outdatedDependencies,\n }\n}\n\n/**\n * Merges source dependency map into target dependency map.\n */\nfunction mergeDependencies(\n target: Map>,\n source: Map>\n): void {\n for (const [parentId, deps] of source) {\n const existing = target.get(parentId)\n if (existing) {\n for (const dep of deps) {\n existing.add(dep)\n }\n } else {\n target.set(parentId, new Set(deps))\n }\n }\n}\n\n/**\n * Computes all modules that need to be invalidated based on which modules changed.\n *\n * @param invalidated - The modules that have been invalidated\n * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()\n */\nfunction computedInvalidatedModules(\n invalidated: Iterable,\n autoAcceptRootModules: boolean\n): {\n outdatedModules: Set\n outdatedDependencies: Map>\n} {\n const outdatedModules = new Set()\n const outdatedDependencies = new Map>()\n\n for (const moduleId of invalidated) {\n const effect = getAffectedModuleEffects(moduleId, autoAcceptRootModules)\n\n switch (effect.type) {\n case 'unaccepted':\n throw new UpdateApplyError(\n `cannot apply update: unaccepted module. ${formatDependencyChain(\n effect.dependencyChain\n )}.`,\n effect.dependencyChain\n )\n case 'self-declined':\n throw new UpdateApplyError(\n `cannot apply update: self-declined module. ${formatDependencyChain(\n effect.dependencyChain\n )}.`,\n effect.dependencyChain\n )\n case 'declined':\n throw new UpdateApplyError(\n `cannot apply update: declined dependency. ${formatDependencyChain(\n effect.dependencyChain\n )}. Declined by ${effect.parentId}.`,\n effect.dependencyChain\n )\n case 'accepted':\n for (const outdatedModuleId of effect.outdatedModules) {\n outdatedModules.add(outdatedModuleId)\n }\n mergeDependencies(outdatedDependencies, effect.outdatedDependencies)\n break\n default:\n invariant(effect, (effect) => `Unknown effect type: ${effect?.type}`)\n }\n }\n\n return { outdatedModules, outdatedDependencies }\n}\n\n/**\n * Creates the module.hot API object and its internal state.\n * This provides the HMR API that user code calls (module.hot.accept(), etc.)\n */\n\nfunction createModuleHot(\n moduleId: ModuleId,\n hotData: HotData\n): { hot: Hot; hotState: HotState } {\n const hotState: HotState = {\n selfAccepted: false,\n selfDeclined: false,\n selfInvalidated: false,\n disposeHandlers: [],\n acceptedDependencies: {},\n acceptedErrorHandlers: {},\n declinedDependencies: {},\n }\n\n const hot: Hot = {\n // TODO(alexkirsz) This is not defined in the HMR API. It was used to\n // decide whether to warn whenever an HMR-disposed module required other\n // modules. We might want to remove it.\n active: true,\n\n data: hotData ?? {},\n\n accept: (\n modules?: string | string[] | AcceptErrorHandler,\n callback?: AcceptCallback,\n errorHandler?: AcceptErrorHandler\n ) => {\n if (modules === undefined) {\n hotState.selfAccepted = true\n } else if (typeof modules === 'function') {\n hotState.selfAccepted = modules\n } else if (typeof modules === 'object' && modules !== null) {\n for (let i = 0; i < modules.length; i++) {\n hotState.acceptedDependencies[modules[i]] = callback || function () {}\n hotState.acceptedErrorHandlers[modules[i]] = errorHandler\n }\n } else {\n hotState.acceptedDependencies[modules] = callback || function () {}\n hotState.acceptedErrorHandlers[modules] = errorHandler\n }\n },\n\n decline: (dep?: string | string[]) => {\n if (dep === undefined) {\n hotState.selfDeclined = true\n } else if (typeof dep === 'object' && dep !== null) {\n for (let i = 0; i < dep.length; i++) {\n hotState.declinedDependencies[dep[i]] = true\n }\n } else {\n hotState.declinedDependencies[dep] = true\n }\n },\n\n dispose: (callback) => {\n hotState.disposeHandlers.push(callback)\n },\n\n addDisposeHandler: (callback) => {\n hotState.disposeHandlers.push(callback)\n },\n\n removeDisposeHandler: (callback) => {\n const idx = hotState.disposeHandlers.indexOf(callback)\n if (idx >= 0) {\n hotState.disposeHandlers.splice(idx, 1)\n }\n },\n\n invalidate: () => {\n hotState.selfInvalidated = true\n queuedInvalidatedModules.add(moduleId)\n },\n\n // NOTE(alexkirsz) This is part of the management API, which we don't\n // implement, but the Next.js React Refresh runtime uses this to decide\n // whether to schedule an update.\n status: () => 'idle',\n\n // NOTE(alexkirsz) Since we always return \"idle\" for now, these are no-ops.\n addStatusHandler: (_handler) => {},\n removeStatusHandler: (_handler) => {},\n\n // NOTE(jridgewell) Check returns the list of updated modules, but we don't\n // want the webpack code paths to ever update (the turbopack paths handle\n // this already).\n check: () => Promise.resolve(null),\n }\n\n return { hot, hotState }\n}\n\n/**\n * Processes queued invalidated modules and adds them to the outdated modules set.\n * Modules that call module.hot.invalidate() are queued and processed here.\n *\n * @param outdatedModules - The current set of outdated modules\n * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()\n */\nfunction applyInvalidatedModules(\n outdatedModules: Set,\n outdatedDependencies: Map>,\n autoAcceptRootModules: boolean\n): {\n outdatedModules: Set\n outdatedDependencies: Map>\n} {\n if (queuedInvalidatedModules.size > 0) {\n const result = computedInvalidatedModules(\n queuedInvalidatedModules,\n autoAcceptRootModules\n )\n for (const moduleId of result.outdatedModules) {\n outdatedModules.add(moduleId)\n }\n mergeDependencies(outdatedDependencies, result.outdatedDependencies)\n\n queuedInvalidatedModules.clear()\n }\n\n return { outdatedModules, outdatedDependencies }\n}\n\n/**\n * Computes which outdated modules have self-accepted and can be hot reloaded.\n */\n\nfunction computeOutdatedSelfAcceptedModules(\n outdatedModules: Iterable\n): { moduleId: ModuleId; errorHandler: true | Function }[] {\n const outdatedSelfAcceptedModules: {\n moduleId: ModuleId\n errorHandler: true | Function\n }[] = []\n for (const moduleId of outdatedModules) {\n const module = devModuleCache[moduleId]\n const hotState = moduleHotState.get(module)\n if (module && hotState?.selfAccepted && !hotState.selfInvalidated) {\n outdatedSelfAcceptedModules.push({\n moduleId,\n errorHandler: hotState.selfAccepted,\n })\n }\n }\n return outdatedSelfAcceptedModules\n}\n\n/**\n * Disposes of an instance of a module.\n * Runs hot.dispose handlers and manages persistent hot data.\n *\n * NOTE: mode = \"replace\" will not remove modules from devModuleCache.\n * This must be done in a separate step afterwards.\n */\nfunction disposeModule(moduleId: ModuleId, mode: 'clear' | 'replace') {\n const module = devModuleCache[moduleId]\n if (!module) {\n return\n }\n\n const hotState = moduleHotState.get(module)\n if (!hotState) {\n return\n }\n\n const data: HotData = {}\n\n // Run the `hot.dispose` handler, if any, passing in the persistent\n // `hot.data` object.\n for (const disposeHandler of hotState.disposeHandlers) {\n disposeHandler(data)\n }\n\n // This used to warn in `getOrInstantiateModuleFromParent` when a disposed\n // module is still importing other modules.\n if (module.hot) {\n module.hot.active = false\n }\n\n moduleHotState.delete(module)\n\n // Remove the disposed module from its children's parent list.\n // It will be added back once the module re-instantiates and imports its\n // children again.\n for (const childId of module.children) {\n const child = devModuleCache[childId]\n if (!child) {\n continue\n }\n\n const idx = child.parents.indexOf(module.id)\n if (idx >= 0) {\n child.parents.splice(idx, 1)\n }\n }\n\n switch (mode) {\n case 'clear':\n delete devModuleCache[module.id]\n moduleHotData.delete(module.id)\n break\n case 'replace':\n moduleHotData.set(module.id, data)\n break\n default:\n invariant(mode, (mode) => `invalid mode: ${mode}`)\n }\n}\n\n/**\n * Dispose phase: runs dispose handlers and cleans up outdated/disposed modules.\n * Returns the parent modules of outdated modules for use in the apply phase.\n */\n\nfunction disposePhase(\n outdatedModules: Iterable,\n disposedModules: Iterable,\n outdatedDependencies: Map>\n): { outdatedModuleParents: Map> } {\n for (const moduleId of outdatedModules) {\n disposeModule(moduleId, 'replace')\n }\n\n for (const moduleId of disposedModules) {\n disposeModule(moduleId, 'clear')\n }\n\n // Removing modules from the module cache is a separate step.\n // We also want to keep track of previous parents of the outdated modules.\n const outdatedModuleParents = new Map>()\n for (const moduleId of outdatedModules) {\n const oldModule = devModuleCache[moduleId]\n outdatedModuleParents.set(moduleId, oldModule?.parents)\n delete devModuleCache[moduleId]\n }\n\n // Remove outdated dependencies from parent module's children list.\n // When a parent accepts a child's update, the child is re-instantiated\n // but the parent stays alive. We remove the old child reference so it\n // gets re-added when the child re-imports.\n for (const [parentId, deps] of outdatedDependencies) {\n const module = devModuleCache[parentId]\n if (module) {\n for (const dep of deps) {\n const idx = module.children.indexOf(dep)\n if (idx >= 0) {\n module.children.splice(idx, 1)\n }\n }\n }\n }\n\n return { outdatedModuleParents }\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/**\n * Shared module instantiation logic.\n * This handles the full module instantiation flow for both browser and Node.js.\n * Only React Refresh hooks differ between platforms (passed as callback).\n */\nfunction instantiateModuleShared(\n moduleId: ModuleId,\n sourceType: SourceType,\n sourceData: SourceData,\n moduleFactories: ModuleFactories,\n devModuleCache: ModuleCache,\n runtimeModules: Set,\n createModuleObjectFn: (id: ModuleId) => HotModule,\n createContextFn: (module: HotModule, exports: Exports, refresh?: any) => any,\n runModuleExecutionHooksFn: (\n module: HotModule,\n exec: (refresh: any) => void\n ) => void\n): HotModule {\n // 1. Factory validation (same in both browser and Node.js)\n const id = moduleId\n const moduleFactory = moduleFactories.get(id)\n if (typeof moduleFactory !== 'function') {\n throw new Error(\n factoryNotAvailableMessage(moduleId, sourceType, sourceData) +\n `\\nThis is often caused by a stale browser cache, misconfigured Cache-Control headers, or a service worker serving outdated responses.` +\n `\\nTo fix this, make sure your Cache-Control headers allow revalidation of chunks and review your service worker configuration. ` +\n `As an immediate workaround, try hard-reloading the page, clearing the browser cache, or unregistering any service workers.`\n )\n }\n\n // 2. Hot API setup (same in both - works for browser, included for Node.js)\n const hotData = moduleHotData.get(id)!\n const { hot, hotState } = createModuleHot(id, hotData)\n\n // 3. Parent assignment logic (same in both)\n let parents: ModuleId[]\n switch (sourceType) {\n case SourceType.Runtime:\n runtimeModules.add(id)\n parents = []\n break\n case SourceType.Parent:\n parents = [sourceData as ModuleId]\n break\n case SourceType.Update:\n parents = (sourceData as ModuleId[]) || []\n break\n default:\n throw new Error(`Unknown source type: ${sourceType}`)\n }\n\n // 4. Module creation (platform creates base module object)\n const module = createModuleObjectFn(id)\n const exports = module.exports\n module.parents = parents\n module.children = []\n module.hot = hot\n\n devModuleCache[id] = module\n moduleHotState.set(module, hotState)\n\n // 5. Module execution (React Refresh hooks are platform-specific)\n try {\n runModuleExecutionHooksFn(module, (refresh) => {\n const context = createContextFn(module, exports, refresh)\n moduleFactory.call(exports, context, module, exports)\n })\n } catch (error) {\n module.error = error as any\n throw error\n }\n\n // 6. ESM interop (same in both)\n if (module.namespaceObject && module.exports !== module.namespaceObject) {\n // in case of a circular dependency: cjs1 -> esm2 -> cjs1\n interopEsm(module.exports, module.namespaceObject)\n }\n\n return module\n}\n\n/**\n * Analyzes update entries and chunks to determine which modules were added, modified, or deleted.\n * This is pure logic that doesn't depend on the runtime environment.\n */\nfunction computeChangedModules(\n entries: Record,\n updates: Record,\n chunkModulesMap?: Map>\n): {\n added: Map\n modified: Map\n deleted: Set\n chunksAdded: Map>\n chunksDeleted: Map>\n} {\n const chunksAdded = new Map()\n const chunksDeleted = new Map()\n const added: Map = new Map()\n const modified = new Map()\n const deleted: Set = new Set()\n\n for (const [chunkPath, mergedChunkUpdate] of Object.entries(updates) as Array<\n [ChunkPath, EcmascriptMergedChunkUpdate]\n >) {\n switch (mergedChunkUpdate.type) {\n case 'added': {\n const updateAdded = new Set(mergedChunkUpdate.modules)\n for (const moduleId of updateAdded) {\n added.set(moduleId, entries[moduleId])\n }\n chunksAdded.set(chunkPath, updateAdded)\n break\n }\n case 'deleted': {\n const updateDeleted = chunkModulesMap\n ? new Set(chunkModulesMap.get(chunkPath))\n : new Set()\n for (const moduleId of updateDeleted) {\n deleted.add(moduleId)\n }\n chunksDeleted.set(chunkPath, updateDeleted)\n break\n }\n case 'partial': {\n const updateAdded = new Set(mergedChunkUpdate.added)\n const updateDeleted = new Set(mergedChunkUpdate.deleted)\n for (const moduleId of updateAdded) {\n added.set(moduleId, entries[moduleId])\n }\n for (const moduleId of updateDeleted) {\n deleted.add(moduleId)\n }\n chunksAdded.set(chunkPath, updateAdded)\n chunksDeleted.set(chunkPath, updateDeleted)\n break\n }\n default:\n throw new Error('Unknown merged chunk update type')\n }\n }\n\n // If a module was added from one chunk and deleted from another in the same update,\n // consider it to be modified, as it means the module was moved from one chunk to another\n // AND has new code in a single update.\n for (const moduleId of added.keys()) {\n if (deleted.has(moduleId)) {\n added.delete(moduleId)\n deleted.delete(moduleId)\n }\n }\n\n for (const [moduleId, entry] of Object.entries(entries)) {\n // Modules that haven't been added to any chunk but have new code are considered\n // to be modified.\n // This needs to be under the previous loop, as we need it to get rid of modules\n // that were added and deleted in the same update.\n if (!added.has(moduleId)) {\n modified.set(moduleId, entry)\n }\n }\n\n return { added, deleted, modified, chunksAdded, chunksDeleted }\n}\n\n/**\n * Compiles new module code and walks the dependency tree to find all outdated modules.\n * Uses the evalModuleEntry function to compile code (platform-specific).\n *\n * @param added - Map of added modules\n * @param modified - Map of modified modules\n * @param evalModuleEntry - Function to compile module code\n * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()\n */\nfunction computeOutdatedModules(\n added: Map,\n modified: Map,\n evalModuleEntry: (entry: EcmascriptModuleEntry) => HotModuleFactoryFunction,\n autoAcceptRootModules: boolean\n): {\n outdatedModules: Set\n outdatedDependencies: Map>\n newModuleFactories: Map\n} {\n const newModuleFactories = new Map()\n\n // Compile added modules\n for (const [moduleId, entry] of added) {\n if (entry != null) {\n newModuleFactories.set(moduleId, evalModuleEntry(entry))\n }\n }\n\n // Walk dependency tree to find all modules affected by modifications\n const { outdatedModules, outdatedDependencies } = computedInvalidatedModules(\n modified.keys(),\n autoAcceptRootModules\n )\n\n // Compile modified modules\n for (const [moduleId, entry] of modified) {\n newModuleFactories.set(moduleId, evalModuleEntry(entry))\n }\n\n return { outdatedModules, outdatedDependencies, newModuleFactories }\n}\n\n/**\n * Updates module factories and re-instantiates self-accepted modules.\n * Uses the instantiateModule function (platform-specific via callback).\n */\nfunction applyPhase(\n outdatedSelfAcceptedModules: {\n moduleId: ModuleId\n errorHandler: true | Function\n }[],\n newModuleFactories: Map,\n outdatedModuleParents: Map>,\n outdatedDependencies: Map>,\n moduleFactories: ModuleFactories,\n devModuleCache: ModuleCache,\n instantiateModuleFn: (\n moduleId: ModuleId,\n sourceType: SourceType,\n sourceData: SourceData\n ) => HotModule,\n applyModuleFactoryNameFn: (factory: HotModuleFactoryFunction) => void,\n reportError: (err: any) => void\n) {\n // Update module factories\n for (const [moduleId, factory] of newModuleFactories.entries()) {\n applyModuleFactoryNameFn(factory)\n moduleFactories.set(moduleId, factory)\n }\n\n // TODO(alexkirsz) Run new runtime entries here.\n\n // Call accept handlers for outdated dependencies.\n // This runs BEFORE re-instantiating self-accepted modules, matching\n // webpack's behavior.\n for (const [parentId, deps] of outdatedDependencies) {\n const module = devModuleCache[parentId]\n if (!module) continue\n\n const hotState = moduleHotState.get(module)\n if (!hotState) continue\n\n // Group deps by callback, deduplicating callbacks that handle multiple deps.\n // Each callback receives only the deps it was registered for.\n const callbackDeps = new Map void), ModuleId[]>()\n const callbackErrorHandlers = new Map<\n AcceptCallback | (() => void),\n AcceptErrorHandler | undefined\n >()\n\n for (const dep of deps) {\n const acceptCallback = hotState.acceptedDependencies[dep]\n if (acceptCallback) {\n let depList = callbackDeps.get(acceptCallback)\n if (!depList) {\n depList = []\n callbackDeps.set(acceptCallback, depList)\n callbackErrorHandlers.set(\n acceptCallback,\n hotState.acceptedErrorHandlers[dep]\n )\n }\n depList.push(dep)\n }\n }\n\n for (const [callback, cbDeps] of callbackDeps) {\n try {\n callback.call(null, cbDeps)\n } catch (err: any) {\n const errorHandler = callbackErrorHandlers.get(callback)\n if (typeof errorHandler === 'function') {\n try {\n errorHandler(err, {\n moduleId: parentId,\n dependencyId: cbDeps[0],\n })\n } catch (err2) {\n reportError(err2)\n reportError(err)\n }\n } else {\n reportError(err)\n }\n }\n }\n }\n\n // Re-instantiate all outdated self-accepted modules\n for (const { moduleId, errorHandler } of outdatedSelfAcceptedModules) {\n try {\n instantiateModuleFn(\n moduleId,\n SourceType.Update,\n outdatedModuleParents.get(moduleId)\n )\n } catch (err) {\n if (typeof errorHandler === 'function') {\n try {\n errorHandler(err, { moduleId, module: devModuleCache[moduleId] })\n } catch (err2) {\n reportError(err2)\n reportError(err)\n }\n } else {\n reportError(err)\n }\n }\n }\n}\n\n/**\n * Internal implementation that orchestrates the full HMR update flow:\n * invalidation, disposal, and application of new modules.\n *\n * @param autoAcceptRootModules - If true, root modules auto-accept updates without explicit module.hot.accept()\n */\nfunction applyInternal(\n outdatedModules: Set,\n outdatedDependencies: Map>,\n disposedModules: Iterable,\n newModuleFactories: Map,\n moduleFactories: ModuleFactories,\n devModuleCache: ModuleCache,\n instantiateModuleFn: (\n moduleId: ModuleId,\n sourceType: SourceType,\n sourceData: SourceData\n ) => HotModule,\n applyModuleFactoryNameFn: (factory: HotModuleFactoryFunction) => void,\n autoAcceptRootModules: boolean\n) {\n ;({ outdatedModules, outdatedDependencies } = applyInvalidatedModules(\n outdatedModules,\n outdatedDependencies,\n autoAcceptRootModules\n ))\n\n // Find self-accepted modules to re-instantiate\n const outdatedSelfAcceptedModules =\n computeOutdatedSelfAcceptedModules(outdatedModules)\n\n // Run dispose handlers, save hot.data, clear caches\n const { outdatedModuleParents } = disposePhase(\n outdatedModules,\n disposedModules,\n outdatedDependencies\n )\n\n let error: any\n\n function reportError(err: any) {\n if (!error) error = err // Keep first error\n }\n\n applyPhase(\n outdatedSelfAcceptedModules,\n newModuleFactories,\n outdatedModuleParents,\n outdatedDependencies,\n moduleFactories,\n devModuleCache,\n instantiateModuleFn,\n applyModuleFactoryNameFn,\n reportError\n )\n\n if (error) {\n throw error\n }\n\n // Recursively apply any queued invalidations from new module execution\n if (queuedInvalidatedModules.size > 0) {\n applyInternal(\n new Set(),\n new Map(),\n [],\n new Map(),\n moduleFactories,\n devModuleCache,\n instantiateModuleFn,\n applyModuleFactoryNameFn,\n autoAcceptRootModules\n )\n }\n}\n\n/**\n * Main entry point for applying an ECMAScript merged update.\n * This is called by both browser and Node.js runtimes with platform-specific callbacks.\n *\n * @param options.autoAcceptRootModules - If true, root modules auto-accept updates without explicit\n * module.hot.accept(). Used for server-side HMR where pages\n * auto-accept at the top level.\n */\nfunction applyEcmascriptMergedUpdateShared(options: {\n added: Map\n modified: Map\n disposedModules: Iterable\n evalModuleEntry: (entry: EcmascriptModuleEntry) => HotModuleFactoryFunction\n instantiateModule: (\n moduleId: ModuleId,\n sourceType: SourceType,\n sourceData: SourceData\n ) => HotModule\n applyModuleFactoryName: (factory: HotModuleFactoryFunction) => void\n moduleFactories: ModuleFactories\n devModuleCache: ModuleCache\n autoAcceptRootModules: boolean\n}) {\n const {\n added,\n modified,\n disposedModules,\n evalModuleEntry,\n instantiateModule,\n applyModuleFactoryName,\n moduleFactories,\n devModuleCache,\n autoAcceptRootModules,\n } = options\n\n const { outdatedModules, outdatedDependencies, newModuleFactories } =\n computeOutdatedModules(\n added,\n modified,\n evalModuleEntry,\n autoAcceptRootModules\n )\n\n applyInternal(\n outdatedModules,\n outdatedDependencies,\n disposedModules,\n newModuleFactories,\n moduleFactories,\n devModuleCache,\n instantiateModule,\n applyModuleFactoryName,\n autoAcceptRootModules\n )\n}\n"],"names":["devModuleCache","runtimeModules","moduleHotData","Map","moduleHotState","WeakMap","queuedInvalidatedModules","Set","UpdateApplyError","Error","name","dependencyChain","message","trackModuleImport","parentModule","childModuleId","childModule","children","indexOf","push","parents","id","formatDependencyChain","join","getAffectedModuleEffects","moduleId","autoAcceptRootModules","outdatedModules","outdatedDependencies","queue","queueIndex","length","undefined","has","add","type","module","hotState","get","selfAccepted","selfInvalidated","selfDeclined","parentId","parent","parentHotState","declinedDependencies","acceptedDependencies","set","mergeDependencies","target","source","deps","existing","dep","computedInvalidatedModules","invalidated","effect","outdatedModuleId","invariant","createModuleHot","hotData","disposeHandlers","acceptedErrorHandlers","hot","active","data","accept","modules","callback","errorHandler","i","decline","dispose","addDisposeHandler","removeDisposeHandler","idx","splice","invalidate","status","addStatusHandler","_handler","removeStatusHandler","check","Promise","resolve","applyInvalidatedModules","size","result","clear","computeOutdatedSelfAcceptedModules","outdatedSelfAcceptedModules","disposeModule","mode","disposeHandler","delete","childId","child","disposePhase","disposedModules","outdatedModuleParents","oldModule","instantiateModuleShared","sourceType","sourceData","moduleFactories","createModuleObjectFn","createContextFn","runModuleExecutionHooksFn","moduleFactory","factoryNotAvailableMessage","SourceType","Runtime","Parent","Update","exports","refresh","context","call","error","namespaceObject","interopEsm","computeChangedModules","entries","updates","chunkModulesMap","chunksAdded","chunksDeleted","added","modified","deleted","chunkPath","mergedChunkUpdate","Object","updateAdded","updateDeleted","keys","entry","computeOutdatedModules","evalModuleEntry","newModuleFactories","applyPhase","instantiateModuleFn","applyModuleFactoryNameFn","reportError","factory","callbackDeps","callbackErrorHandlers","acceptCallback","depList","cbDeps","err","dependencyId","err2","applyInternal","applyEcmascriptMergedUpdateShared","options","instantiateModule","applyModuleFactoryName"],"mappings":"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","ignoreList":[0]}},
+ {"offset": {"line": 1556, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/nodejs/runtime/dev-base.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/// \n/// \n/// \n\n/**\n * Development Node.js runtime.\n * Uses HotModule and shared HMR logic for hot module replacement support.\n */\n\n// Cast the module cache to HotModule for development mode\n// (hmr-runtime.ts declares devModuleCache as `let` variable expecting assignment)\n// This is safe because HotModule extends Module\ndevModuleCache = moduleCache as ModuleCache\n\n// this is read in runtime-utils.ts so it creates a module with direction for hmr\ncreateModuleWithDirectionFlag = true\n\nif (!globalThis.__turbopack_runtime_modules__) {\n globalThis.__turbopack_runtime_modules__ = new Set()\n}\nruntimeModules = globalThis.__turbopack_runtime_modules__\n\ninterface TurbopackNodeDevBuildContext extends TurbopackBaseContext {\n R: ResolvePathFromModule\n x: ExternalRequire\n y: ExternalImport\n C: typeof clearChunkCache\n}\n\nconst nodeDevContextPrototype =\n Context.prototype as TurbopackNodeDevBuildContext\n\nnodeDevContextPrototype.q = exportUrl\nnodeDevContextPrototype.M = moduleFactories\nnodeDevContextPrototype.c = devModuleCache\nnodeDevContextPrototype.R = resolvePathFromModule\nnodeDevContextPrototype.C = clearChunkCache\n\n/**\n * Instantiates a module in development mode using shared HMR logic.\n */\nfunction instantiateModule(\n id: ModuleId,\n sourceType: SourceType,\n sourceData: SourceData\n): HotModule {\n // Node.js: creates base module object (hot API added by shared code)\n const createModuleObjectFn = (moduleId: ModuleId) => {\n return createModuleWithDirection(moduleId) as HotModule\n }\n\n // Node.js: creates Context (no refresh parameter)\n const createContext = (\n module: HotModule,\n exports: Exports,\n _refresh?: any\n ) => {\n return new (Context as any as ContextConstructor)(\n module,\n exports\n )\n }\n\n // Node.js: no hooks wrapper, just execute directly\n const runWithHooks = (module: HotModule, exec: (refresh: any) => void) => {\n exec(undefined) // no refresh context\n }\n\n // Use shared instantiation logic (includes hot API setup)\n const newModule = instantiateModuleShared(\n id,\n sourceType,\n sourceData,\n moduleFactories,\n devModuleCache,\n runtimeModules,\n createModuleObjectFn,\n createContext,\n runWithHooks\n )\n\n // Node.js-specific: mark module as loaded\n ;(newModule as any).loaded = true\n\n return newModule\n}\n\n/**\n * Instantiates a runtime module in development mode.\n */\nfunction instantiateRuntimeModule(\n chunkPath: ChunkPath,\n moduleId: ModuleId\n): HotModule {\n return instantiateModule(moduleId, SourceType.Runtime, chunkPath)\n}\n\n/**\n * Retrieves a module from the cache, or instantiate it as a runtime module if it is not cached.\n */\n// @ts-ignore TypeScript doesn't separate this module space from the browser runtime\nfunction getOrInstantiateRuntimeModule(\n chunkPath: ChunkPath,\n moduleId: ModuleId\n): HotModule {\n const module = devModuleCache[moduleId]\n\n if (module) {\n if (module.error) {\n throw module.error\n }\n return module\n }\n\n return instantiateRuntimeModule(chunkPath, moduleId)\n}\n\n/**\n * Retrieves a module from the cache, or instantiate it if it is not cached.\n * Also tracks parent-child relationships for HMR dependency tracking.\n */\n// @ts-ignore\nfunction getOrInstantiateModuleFromParent(\n id: ModuleId,\n sourceModule: HotModule\n): HotModule {\n // Track parent-child relationship\n trackModuleImport(sourceModule, id, devModuleCache[id])\n\n const module = devModuleCache[id]\n\n if (module) {\n if (module.error) {\n throw module.error\n }\n\n return module\n }\n\n const newModule = instantiateModule(id, SourceType.Parent, sourceModule.id)\n\n // Track again after instantiation to ensure the relationship is recorded\n trackModuleImport(sourceModule, id, newModule)\n\n return newModule\n}\n\nmodule.exports = (sourcePath: ChunkPath) => ({\n m: (id: ModuleId) => getOrInstantiateRuntimeModule(sourcePath, id),\n c: (chunkData: ChunkData) => loadRuntimeChunk(sourcePath, chunkData),\n})\n"],"names":["devModuleCache","moduleCache","createModuleWithDirectionFlag","globalThis","__turbopack_runtime_modules__","Set","runtimeModules","nodeDevContextPrototype","Context","prototype","q","exportUrl","M","moduleFactories","c","R","resolvePathFromModule","C","clearChunkCache","instantiateModule","id","sourceType","sourceData","createModuleObjectFn","moduleId","createModuleWithDirection","createContext","module1","exports","_refresh","runWithHooks","exec","undefined","newModule","instantiateModuleShared","loaded","instantiateRuntimeModule","chunkPath","SourceType","Runtime","getOrInstantiateRuntimeModule","error","getOrInstantiateModuleFromParent","sourceModule","trackModuleImport","Parent","module","sourcePath","m","chunkData","loadRuntimeChunk"],"mappings":"AAAA,oDAAoD,GAEpD,0CAA0C;AAC1C,+DAA+D;AAC/D,4DAA4D;AAE5D;;;CAGC,GAED,0DAA0D;AAC1D,kFAAkF;AAClF,gDAAgD;AAChDA,iBAAiBC;AAEjB,iFAAiF;AACjFC,gCAAgC;AAEhC,IAAI,CAACC,WAAWC,6BAA6B,EAAE;IAC7CD,WAAWC,6BAA6B,GAAG,IAAIC;AACjD;AACAC,iBAAiBH,WAAWC,6BAA6B;AASzD,MAAMG,0BACJC,QAAQC,SAAS;AAEnBF,wBAAwBG,CAAC,GAAGC;AAC5BJ,wBAAwBK,CAAC,GAAGC;AAC5BN,wBAAwBO,CAAC,GAAGd;AAC5BO,wBAAwBQ,CAAC,GAAGC;AAC5BT,wBAAwBU,CAAC,GAAGC;AAE5B;;CAEC,GACD,SAASC,kBACPC,EAAY,EACZC,UAAsB,EACtBC,UAAsB;IAEtB,qEAAqE;IACrE,MAAMC,uBAAuB,CAACC;QAC5B,OAAOC,0BAA0BD;IACnC;IAEA,kDAAkD;IAClD,MAAME,gBAAgB,CACpBC,SACAC,SACAC;QAEA,OAAO,IAAKrB,QACVmB,SACAC;IAEJ;IAEA,mDAAmD;IACnD,MAAME,eAAe,CAACH,SAAmBI;QACvCA,KAAKC,YAAW,qBAAqB;IACvC;IAEA,0DAA0D;IAC1D,MAAMC,YAAYC,wBAChBd,IACAC,YACAC,YACAT,iBACAb,gBACAM,gBACAiB,sBACAG,eACAI;IAIAG,UAAkBE,MAAM,GAAG;IAE7B,OAAOF;AACT;AAEA;;CAEC,GACD,SAASG,yBACPC,SAAoB,EACpBb,QAAkB;IAElB,OAAOL,kBAAkBK,UAAUc,WAAWC,OAAO,EAAEF;AACzD;AAEA;;CAEC,GACD,oFAAoF;AACpF,SAASG,8BACPH,SAAoB,EACpBb,QAAkB;IAElB,MAAMG,UAAS3B,cAAc,CAACwB,SAAS;IAEvC,IAAIG,SAAQ;QACV,IAAIA,QAAOc,KAAK,EAAE;YAChB,MAAMd,QAAOc,KAAK;QACpB;QACA,OAAOd;IACT;IAEA,OAAOS,yBAAyBC,WAAWb;AAC7C;AAEA;;;CAGC,GACD,aAAa;AACb,SAASkB,iCACPtB,EAAY,EACZuB,YAAuB;IAEvB,kCAAkC;IAClCC,kBAAkBD,cAAcvB,IAAIpB,cAAc,CAACoB,GAAG;IAEtD,MAAMO,UAAS3B,cAAc,CAACoB,GAAG;IAEjC,IAAIO,SAAQ;QACV,IAAIA,QAAOc,KAAK,EAAE;YAChB,MAAMd,QAAOc,KAAK;QACpB;QAEA,OAAOd;IACT;IAEA,MAAMM,YAAYd,kBAAkBC,IAAIkB,WAAWO,MAAM,EAAEF,aAAavB,EAAE;IAE1E,yEAAyE;IACzEwB,kBAAkBD,cAAcvB,IAAIa;IAEpC,OAAOA;AACT;AAEAa,OAAOlB,OAAO,GAAG,CAACmB,aAA0B,CAAC;QAC3CC,GAAG,CAAC5B,KAAiBoB,8BAA8BO,YAAY3B;QAC/DN,GAAG,CAACmC,YAAyBC,iBAAiBH,YAAYE;IAC5D,CAAC","ignoreList":[0]}},
+ {"offset": {"line": 1639, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/nodejs/dev/hmr-client.ts"],"sourcesContent":["/// \n/// \n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\ntype NodeJsHmrPayload = {\n resource: {\n path: string\n headers?: Record\n }\n issues: Issue[]\n type: 'partial'\n instruction: NodeJsEcmascriptMergedUpdate | NodeJsChunkListUpdate\n}\n\n/**\n * Appends the module code with //# sourceURL and //# sourceMappingURL so\n * that Node.js can resolve stack frames from `eval`ed server HMR modules back to\n * their original source files. Mirrors the browser's _eval in dev-backend-dom.ts.\n */\nfunction inlineSourcemaps(entry: EcmascriptModuleEntry): string {\n const [chunkPath, moduleId] = entry.url.split('?', 2)\n const absolutePath = path.resolve(RUNTIME_ROOT, chunkPath)\n const fileHref = url.pathToFileURL(absolutePath).href\n const sourceURL = moduleId ? `${fileHref}?${moduleId}` : fileHref\n let code = entry.code + '\\n\\n//# sourceURL=' + sourceURL\n if (entry.map) {\n code +=\n '\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,' +\n Buffer.from(entry.map).toString('base64')\n }\n return code\n}\n\nlet serverHmrUpdateHandler: ((msg: NodeJsHmrPayload) => void) | null = null\n\nfunction initializeServerHmr(\n moduleFactories: ModuleFactories,\n devModuleCache: ModuleCache\n): void {\n if (serverHmrUpdateHandler != null) {\n throw new Error('[Server HMR] Server HMR client is already initialized')\n }\n\n // Register the update handler for the server runtime\n serverHmrUpdateHandler = (msg: NodeJsHmrPayload) => {\n handleNodejsUpdate(msg, moduleFactories, devModuleCache)\n }\n}\n\n/**\n * Emits an HMR message to the registered update handler.\n * Node uses a simpler listener pattern than the browser's websocket connection.\n *\n * Note: This is only called via __turbopack_server_hmr_apply__ which ensures\n * the handler is initialized first via ensureHmrClientInitialized().\n */\nfunction emitMessage(msg: { type: string; data: any }): void {\n if (serverHmrUpdateHandler == null) {\n throw new Error(\n '[Server HMR] No update handler registered to receive message'\n )\n }\n\n serverHmrUpdateHandler(msg.data)\n}\n\n/**\n * Handles server message updates and applies them to the Node.js runtime.\n * Uses shared HMR update logic from hmr-runtime.ts.\n */\nfunction handleNodejsUpdate(\n msg: NodeJsHmrPayload,\n moduleFactories: ModuleFactories,\n devModuleCache: ModuleCache\n): void {\n if (msg.type !== 'partial') {\n return\n }\n\n const instruction = msg.instruction\n\n try {\n if (instruction.type === 'ChunkListUpdate') {\n // All node ecmascript chunks are mergeable, so a `total`/`partial` here\n // means a non-mergeable asset changed in an unsupported way. Escalate\n // to a full clear() rather than leave stale factories in memory.\n for (const [chunkPath, chunkUpdate] of Object.entries(\n instruction.chunks ?? {}\n )) {\n if (chunkUpdate.type === 'total' || chunkUpdate.type === 'partial') {\n throw new Error(\n `unsupported '${chunkUpdate.type}' update for chunk ${chunkPath}`\n )\n }\n }\n\n if (instruction.merged) {\n for (const merged of instruction.merged) {\n applyEcmascriptMergedUpdate(merged, moduleFactories, devModuleCache)\n }\n }\n return\n }\n\n if (instruction.type === 'EcmascriptMergedUpdate') {\n applyEcmascriptMergedUpdate(instruction, moduleFactories, devModuleCache)\n return\n }\n } catch (e) {\n console.error('[Server HMR] Update failed, full reload needed:', e)\n throw e\n }\n}\n\nfunction applyEcmascriptMergedUpdate(\n instruction: NodeJsEcmascriptMergedUpdate,\n moduleFactories: ModuleFactories,\n devModuleCache: ModuleCache\n): void {\n const { entries = {}, chunks = {} } = instruction\n\n const evalModuleEntry = (entry: EcmascriptModuleEntry) => {\n const code = entry.map ? inlineSourcemaps(entry) : entry.code\n // eslint-disable-next-line no-eval\n return (0, eval)(`(require) => ${code}`)(require)\n }\n\n const { added, modified } = computeChangedModules(\n entries,\n chunks,\n undefined // no chunkModulesMap for Node.js\n )\n\n // Modules that appear in an \"added\" chunk but already exist in the cache\n // were moved to a renamed chunk. Treat them as modified so the dependency\n // walk runs and they get re-instantiated with the new factory.\n for (const [moduleId, entry] of added) {\n if (entry != null && devModuleCache[moduleId] != null) {\n added.delete(moduleId)\n modified.set(moduleId, entry)\n }\n }\n\n // Use shared HMR update implementation\n applyEcmascriptMergedUpdateShared({\n added,\n modified,\n disposedModules: [], // no disposedModules for Node.js (no chunk management)\n evalModuleEntry,\n instantiateModule,\n applyModuleFactoryName: () => {}, // Node doesn't use this\n moduleFactories,\n devModuleCache,\n autoAcceptRootModules: true,\n })\n}\n"],"names":["inlineSourcemaps","entry","chunkPath","moduleId","url","split","absolutePath","path","resolve","RUNTIME_ROOT","fileHref","pathToFileURL","href","sourceURL","code","map","Buffer","from","toString","serverHmrUpdateHandler","initializeServerHmr","moduleFactories","devModuleCache","Error","msg","handleNodejsUpdate","emitMessage","data","type","instruction","chunkUpdate","Object","entries","chunks","merged","applyEcmascriptMergedUpdate","e","console","error","evalModuleEntry","eval","require","added","modified","computeChangedModules","undefined","delete","set","applyEcmascriptMergedUpdateShared","disposedModules","instantiateModule","applyModuleFactoryName","autoAcceptRootModules"],"mappings":"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","ignoreList":[0]}},
+ {"offset": {"line": 1743, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/nodejs/dev/dev-nodejs.ts"],"sourcesContent":["/// \n/// \n\n/**\n * Note: hmr-runtime.ts is embedded before this file, so its functions\n * (initializeServerHmr, emitMessage) are available in the same scope.\n */\n\n// Initialize server HMR client (connects to shared HMR infrastructure)\nlet hmrClientInitialized = false\nfunction ensureHmrClientInitialized() {\n if (hmrClientInitialized) return\n hmrClientInitialized = true\n\n // initializeServerHmr is from hmr-client.ts (embedded before this file)\n // moduleFactories is from dev-runtime.ts\n // devModuleCache is the HotModule-typed cache from dev-runtime.ts\n initializeServerHmr(moduleFactories, devModuleCache)\n}\n\nfunction __turbopack_server_hmr_apply__(update: NodeJsHmrPayload): void {\n ensureHmrClientInitialized()\n // Throws if the update can't be applied in-process; the consumer catches it\n // and falls back to evicting require.cache.\n emitMessage({\n type: 'turbopack-message',\n data: update,\n })\n}\n\n// Turbopack produces one server runtime per chunking context (e.g.\n// server/chunks/ssr/ for pages, server/chunks/ for route handlers), each with\n// its own moduleFactories. We keep a globalThis Map from __filename to handler\n// so updates are routed only to runtimes whose chunkPrefix matches the update's\n// chunk paths, skipping unnecessary eval() calls. Map.set() naturally replaces\n// stale entries when a runtime file is re-evaluated after require.cache eviction.\n\ntype HmrHandlerEntry = {\n handler: (update: NodeJsHmrPayload) => void\n /** Output directory relative to RUNTIME_ROOT, e.g. \"server/chunks/ssr\". */\n chunkPrefix: string\n}\n\nconst handlers: Map =\n globalThis.__turbopack_server_hmr_handlers__ ?? new Map()\n\n// Normalize to forward slashes so it matches the virtual chunk paths in\n// `update.instruction.chunks`, which always use `/` regardless of OS.\nconst chunkPrefix = path\n .relative(RUNTIME_ROOT, path.dirname(__filename))\n .replaceAll(path.sep, '/')\n\nif (handlers.size === 0) {\n // First registration in this generation: install the routing dispatcher.\n globalThis.__turbopack_server_hmr_apply__ = (\n update: NodeJsHmrPayload\n ): void => {\n const registry: Map =\n globalThis.__turbopack_server_hmr_handlers__ ?? new Map()\n\n // Chunk paths can appear either directly on the instruction (single-chunk\n // updates) or nested inside `merged` entries (chunks covered by a\n // merger). Collect both so routing isn't skipped just because a mergeable\n // chunk's update only reports its paths inside `merged`.\n const updateChunkPaths = new Set([\n ...Object.keys(update.instruction?.chunks ?? {}),\n ...(update.instruction?.merged ?? []).flatMap((merged) =>\n Object.keys(merged.chunks ?? {})\n ),\n ])\n\n const toCall: HmrHandlerEntry[] = []\n if (updateChunkPaths.size === 0) {\n for (const entry of registry.values()) toCall.push(entry)\n } else {\n const seen = new Set()\n for (const chunkPath of updateChunkPaths) {\n const dir = path.dirname(chunkPath)\n for (const [key, entry] of registry) {\n if (dir === entry.chunkPrefix && !seen.has(key)) {\n seen.add(key)\n toCall.push(entry)\n }\n }\n }\n }\n\n // No matching runtime loaded (e.g. editing a route not required yet this\n // session): nothing live to patch, so this is a no-op. A handler that\n // throws propagates to the consumer, which evicts require.cache.\n for (const { handler } of toCall) {\n handler(update)\n }\n }\n}\n\nglobalThis.__turbopack_server_hmr_handlers__ = handlers\n\nhandlers.set(__filename, {\n handler: __turbopack_server_hmr_apply__,\n chunkPrefix,\n})\n"],"names":["hmrClientInitialized","ensureHmrClientInitialized","initializeServerHmr","moduleFactories","devModuleCache","__turbopack_server_hmr_apply__","update","emitMessage","type","data","handlers","globalThis","__turbopack_server_hmr_handlers__","Map","chunkPrefix","path","relative","RUNTIME_ROOT","dirname","__filename","replaceAll","sep","size","registry","updateChunkPaths","Set","Object","keys","instruction","chunks","merged","flatMap","toCall","entry","values","push","seen","chunkPath","dir","key","has","add","handler","set"],"mappings":"AAAA,+DAA+D;AAC/D,wCAAwC;AAExC;;;CAGC,GAED,uEAAuE;AACvE,IAAIA,uBAAuB;AAC3B,SAASC;IACP,IAAID,sBAAsB;IAC1BA,uBAAuB;IAEvB,wEAAwE;IACxE,yCAAyC;IACzC,kEAAkE;IAClEE,oBAAoBC,iBAAiBC;AACvC;AAEA,SAASC,+BAA+BC,MAAwB;IAC9DL;IACA,4EAA4E;IAC5E,4CAA4C;IAC5CM,YAAY;QACVC,MAAM;QACNC,MAAMH;IACR;AACF;AAeA,MAAMI,WACJC,WAAWC,iCAAiC,IAAI,IAAIC;AAEtD,wEAAwE;AACxE,sEAAsE;AACtE,MAAMC,cAAcC,KACjBC,QAAQ,CAACC,cAAcF,KAAKG,OAAO,CAACC,aACpCC,UAAU,CAACL,KAAKM,GAAG,EAAE;AAExB,IAAIX,SAASY,IAAI,KAAK,GAAG;IACvB,yEAAyE;IACzEX,WAAWN,8BAA8B,GAAG,CAC1CC;QAEA,MAAMiB,WACJZ,WAAWC,iCAAiC,IAAI,IAAIC;QAEtD,0EAA0E;QAC1E,kEAAkE;QAClE,0EAA0E;QAC1E,yDAAyD;QACzD,MAAMW,mBAAmB,IAAIC,IAAY;eACpCC,OAAOC,IAAI,CAACrB,OAAOsB,WAAW,EAAEC,UAAU,CAAC;eAC3C,CAACvB,OAAOsB,WAAW,EAAEE,UAAU,EAAE,EAAEC,OAAO,CAAC,CAACD,SAC7CJ,OAAOC,IAAI,CAACG,OAAOD,MAAM,IAAI,CAAC;SAEjC;QAED,MAAMG,SAA4B,EAAE;QACpC,IAAIR,iBAAiBF,IAAI,KAAK,GAAG;YAC/B,KAAK,MAAMW,SAASV,SAASW,MAAM,GAAIF,OAAOG,IAAI,CAACF;QACrD,OAAO;YACL,MAAMG,OAAO,IAAIX;YACjB,KAAK,MAAMY,aAAab,iBAAkB;gBACxC,MAAMc,MAAMvB,KAAKG,OAAO,CAACmB;gBACzB,KAAK,MAAM,CAACE,KAAKN,MAAM,IAAIV,SAAU;oBACnC,IAAIe,QAAQL,MAAMnB,WAAW,IAAI,CAACsB,KAAKI,GAAG,CAACD,MAAM;wBAC/CH,KAAKK,GAAG,CAACF;wBACTP,OAAOG,IAAI,CAACF;oBACd;gBACF;YACF;QACF;QAEA,yEAAyE;QACzE,sEAAsE;QACtE,iEAAiE;QACjE,KAAK,MAAM,EAAES,OAAO,EAAE,IAAIV,OAAQ;YAChCU,QAAQpC;QACV;IACF;AACF;AAEAK,WAAWC,iCAAiC,GAAGF;AAE/CA,SAASiC,GAAG,CAACxB,YAAY;IACvBuB,SAASrC;IACTS;AACF","ignoreList":[0]}}]
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js b/tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js
new file mode 100644
index 00000000..f1d47d40
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js
@@ -0,0 +1,113 @@
+module.exports = [
+"[project]/open-sse/providers/pricing.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/open-sse_providers_pricing_078i37x.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/open-sse/providers/pricing.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/adapters/betterSqliteAdapter.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/[root-of-the-server]__16a8kp1._.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/src/lib/db/adapters/betterSqliteAdapter.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/adapters/bunSqliteAdapter.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/[externals]_bun_sqlite_1xsgfj6._.js",
+ "server/chunks/src_lib_db_04-1tv7._.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/src/lib/db/adapters/bunSqliteAdapter.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/adapters/nodeSqliteAdapter.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/src_lib_db_1rn2qxk._.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/src/lib/db/adapters/nodeSqliteAdapter.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/adapters/sqljsAdapter.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/[root-of-the-server]__1_pghx_._.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/src/lib/db/adapters/sqljsAdapter.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/migrate.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/src_lib_db_1jtxnmd._.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/src/lib/db/migrate.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/repos/apiKeysRepo.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.resolve().then(() => {
+ return parentImport("[project]/src/lib/db/repos/apiKeysRepo.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.resolve().then(() => {
+ return parentImport("[project]/src/lib/db/repos/connectionsRepo.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/repos/nodesRepo.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.resolve().then(() => {
+ return parentImport("[project]/src/lib/db/repos/nodesRepo.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/repos/pricingRepo.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.resolve().then(() => {
+ return parentImport("[project]/src/lib/db/repos/pricingRepo.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.resolve().then(() => {
+ return parentImport("[project]/src/lib/db/repos/settingsRepo.js [middleware] (ecmascript)");
+ });
+});
+}),
+"[project]/src/shared/utils/apiKey.js [middleware] (ecmascript, async loader)", ((__turbopack_context__) => {
+
+__turbopack_context__.v((parentImport) => {
+ return Promise.all([
+ "server/chunks/src_shared_utils_apiKey_0dq53wj.js"
+].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
+ return parentImport("[project]/src/shared/utils/apiKey.js [middleware] (ecmascript)");
+ });
+});
+}),
+];
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js.map b/tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js.map
new file mode 100644
index 00000000..c15d7ec0
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js.map
@@ -0,0 +1,5 @@
+{
+ "version": 3,
+ "sources": [],
+ "sections": []
+}
\ No newline at end of file
diff --git a/tmp/9r-smoke-dist/dev/server/chunks/node_modules_0j-238y._.js b/tmp/9r-smoke-dist/dev/server/chunks/node_modules_0j-238y._.js
new file mode 100644
index 00000000..d6d78195
--- /dev/null
+++ b/tmp/9r-smoke-dist/dev/server/chunks/node_modules_0j-238y._.js
@@ -0,0 +1,25749 @@
+module.exports = [
+"[project]/node_modules/bcryptjs/index.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "compare",
+ ()=>compare,
+ "compareSync",
+ ()=>compareSync,
+ "decodeBase64",
+ ()=>decodeBase64,
+ "default",
+ ()=>__TURBOPACK__default__export__,
+ "encodeBase64",
+ ()=>encodeBase64,
+ "genSalt",
+ ()=>genSalt,
+ "genSaltSync",
+ ()=>genSaltSync,
+ "getRounds",
+ ()=>getRounds,
+ "getSalt",
+ ()=>getSalt,
+ "hash",
+ ()=>hash,
+ "hashSync",
+ ()=>hashSync,
+ "setRandomFallback",
+ ()=>setRandomFallback,
+ "truncates",
+ ()=>truncates
+]);
+/*
+ Copyright (c) 2012 Nevins Bartolomeo
+ Copyright (c) 2012 Shane Girish
+ Copyright (c) 2025 Daniel Wirtz
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */ // The Node.js crypto module is used as a fallback for the Web Crypto API. When
+// building for the browser, inclusion of the crypto module should be disabled,
+// which the package hints at in its package.json for bundlers that support it.
+var __TURBOPACK__imported__module__$5b$externals$5d2f$crypto__$5b$external$5d$__$28$crypto$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/crypto [external] (crypto, cjs)");
+;
+/**
+ * The random implementation to use as a fallback.
+ * @type {?function(number):!Array.}
+ * @inner
+ */ var randomFallback = null;
+/**
+ * Generates cryptographically secure random bytes.
+ * @function
+ * @param {number} len Bytes length
+ * @returns {!Array.} Random bytes
+ * @throws {Error} If no random implementation is available
+ * @inner
+ */ function randomBytes(len) {
+ // Web Crypto API. Globally available in the browser and in Node.js >=23.
+ try {
+ return crypto.getRandomValues(new Uint8Array(len));
+ } catch {}
+ // Node.js crypto module for non-browser environments.
+ try {
+ return __TURBOPACK__imported__module__$5b$externals$5d2f$crypto__$5b$external$5d$__$28$crypto$2c$__cjs$29$__["default"].randomBytes(len);
+ } catch {}
+ // Custom fallback specified with `setRandomFallback`.
+ if (!randomFallback) {
+ throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
+ }
+ return randomFallback(len);
+}
+function setRandomFallback(random) {
+ randomFallback = random;
+}
+function genSaltSync(rounds, seed_length) {
+ rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;
+ if (typeof rounds !== "number") throw Error("Illegal arguments: " + typeof rounds + ", " + typeof seed_length);
+ if (rounds < 4) rounds = 4;
+ else if (rounds > 31) rounds = 31;
+ var salt = [];
+ salt.push("$2b$");
+ if (rounds < 10) salt.push("0");
+ salt.push(rounds.toString());
+ salt.push("$");
+ salt.push(base64_encode(randomBytes(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw
+ return salt.join("");
+}
+function genSalt(rounds, seed_length, callback) {
+ if (typeof seed_length === "function") callback = seed_length, seed_length = undefined; // Not supported.
+ if (typeof rounds === "function") callback = rounds, rounds = undefined;
+ if (typeof rounds === "undefined") rounds = GENSALT_DEFAULT_LOG2_ROUNDS;
+ else if (typeof rounds !== "number") throw Error("illegal arguments: " + typeof rounds);
+ function _async(callback) {
+ nextTick(function() {
+ // Pretty thin, but salting is fast enough
+ try {
+ callback(null, genSaltSync(rounds));
+ } catch (err) {
+ callback(err);
+ }
+ });
+ }
+ if (callback) {
+ if (typeof callback !== "function") throw Error("Illegal callback: " + typeof callback);
+ _async(callback);
+ } else return new Promise(function(resolve, reject) {
+ _async(function(err, res) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(res);
+ });
+ });
+}
+function hashSync(password, salt) {
+ if (typeof salt === "undefined") salt = GENSALT_DEFAULT_LOG2_ROUNDS;
+ if (typeof salt === "number") salt = genSaltSync(salt);
+ if (typeof password !== "string" || typeof salt !== "string") throw Error("Illegal arguments: " + typeof password + ", " + typeof salt);
+ return _hash(password, salt);
+}
+function hash(password, salt, callback, progressCallback) {
+ function _async(callback) {
+ if (typeof password === "string" && typeof salt === "number") genSalt(salt, function(err, salt) {
+ _hash(password, salt, callback, progressCallback);
+ });
+ else if (typeof password === "string" && typeof salt === "string") _hash(password, salt, callback, progressCallback);
+ else nextTick(callback.bind(this, Error("Illegal arguments: " + typeof password + ", " + typeof salt)));
+ }
+ if (callback) {
+ if (typeof callback !== "function") throw Error("Illegal callback: " + typeof callback);
+ _async(callback);
+ } else return new Promise(function(resolve, reject) {
+ _async(function(err, res) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(res);
+ });
+ });
+}
+/**
+ * Compares two strings of the same length in constant time.
+ * @param {string} known Must be of the correct length
+ * @param {string} unknown Must be the same length as `known`
+ * @returns {boolean}
+ * @inner
+ */ function safeStringCompare(known, unknown) {
+ var diff = known.length ^ unknown.length;
+ for(var i = 0; i < known.length; ++i){
+ diff |= known.charCodeAt(i) ^ unknown.charCodeAt(i);
+ }
+ return diff === 0;
+}
+function compareSync(password, hash) {
+ if (typeof password !== "string" || typeof hash !== "string") throw Error("Illegal arguments: " + typeof password + ", " + typeof hash);
+ if (hash.length !== 60) return false;
+ return safeStringCompare(hashSync(password, hash.substring(0, hash.length - 31)), hash);
+}
+function compare(password, hashValue, callback, progressCallback) {
+ function _async(callback) {
+ if (typeof password !== "string" || typeof hashValue !== "string") {
+ nextTick(callback.bind(this, Error("Illegal arguments: " + typeof password + ", " + typeof hashValue)));
+ return;
+ }
+ if (hashValue.length !== 60) {
+ nextTick(callback.bind(this, null, false));
+ return;
+ }
+ hash(password, hashValue.substring(0, 29), function(err, comp) {
+ if (err) callback(err);
+ else callback(null, safeStringCompare(comp, hashValue));
+ }, progressCallback);
+ }
+ if (callback) {
+ if (typeof callback !== "function") throw Error("Illegal callback: " + typeof callback);
+ _async(callback);
+ } else return new Promise(function(resolve, reject) {
+ _async(function(err, res) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(res);
+ });
+ });
+}
+function getRounds(hash) {
+ if (typeof hash !== "string") throw Error("Illegal arguments: " + typeof hash);
+ return parseInt(hash.split("$")[2], 10);
+}
+function getSalt(hash) {
+ if (typeof hash !== "string") throw Error("Illegal arguments: " + typeof hash);
+ if (hash.length !== 60) throw Error("Illegal hash length: " + hash.length + " != 60");
+ return hash.substring(0, 29);
+}
+function truncates(password) {
+ if (typeof password !== "string") throw Error("Illegal arguments: " + typeof password);
+ return utf8Length(password) > 72;
+}
+/**
+ * Continues with the callback after yielding to the event loop.
+ * @function
+ * @param {function(...[*])} callback Callback to execute
+ * @inner
+ */ var nextTick = typeof setImmediate === "function" ? setImmediate : typeof scheduler === "object" && typeof scheduler.postTask === "function" ? scheduler.postTask.bind(scheduler) : setTimeout;
+/** Calculates the byte length of a string encoded as UTF8. */ function utf8Length(string) {
+ var len = 0, c = 0;
+ for(var i = 0; i < string.length; ++i){
+ c = string.charCodeAt(i);
+ if (c < 128) len += 1;
+ else if (c < 2048) len += 2;
+ else if ((c & 0xfc00) === 0xd800 && (string.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
+ ++i;
+ len += 4;
+ } else len += 3;
+ }
+ return len;
+}
+/** Converts a string to an array of UTF8 bytes. */ function utf8Array(string) {
+ var offset = 0, c1, c2;
+ var buffer = new Array(utf8Length(string));
+ for(var i = 0, k = string.length; i < k; ++i){
+ c1 = string.charCodeAt(i);
+ if (c1 < 128) {
+ buffer[offset++] = c1;
+ } else if (c1 < 2048) {
+ buffer[offset++] = c1 >> 6 | 192;
+ buffer[offset++] = c1 & 63 | 128;
+ } else if ((c1 & 0xfc00) === 0xd800 && ((c2 = string.charCodeAt(i + 1)) & 0xfc00) === 0xdc00) {
+ c1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);
+ ++i;
+ buffer[offset++] = c1 >> 18 | 240;
+ buffer[offset++] = c1 >> 12 & 63 | 128;
+ buffer[offset++] = c1 >> 6 & 63 | 128;
+ buffer[offset++] = c1 & 63 | 128;
+ } else {
+ buffer[offset++] = c1 >> 12 | 224;
+ buffer[offset++] = c1 >> 6 & 63 | 128;
+ buffer[offset++] = c1 & 63 | 128;
+ }
+ }
+ return buffer;
+}
+// A base64 implementation for the bcrypt algorithm. This is partly non-standard.
+/**
+ * bcrypt's own non-standard base64 dictionary.
+ * @type {!Array.}
+ * @const
+ * @inner
+ **/ var BASE64_CODE = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");
+/**
+ * @type {!Array.}
+ * @const
+ * @inner
+ **/ var BASE64_INDEX = [
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ 0,
+ 1,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1
+];
+/**
+ * Encodes a byte array to base64 with up to len bytes of input.
+ * @param {!Array.} b Byte array
+ * @param {number} len Maximum input length
+ * @returns {string}
+ * @inner
+ */ function base64_encode(b, len) {
+ var off = 0, rs = [], c1, c2;
+ if (len <= 0 || len > b.length) throw Error("Illegal len: " + len);
+ while(off < len){
+ c1 = b[off++] & 0xff;
+ rs.push(BASE64_CODE[c1 >> 2 & 0x3f]);
+ c1 = (c1 & 0x03) << 4;
+ if (off >= len) {
+ rs.push(BASE64_CODE[c1 & 0x3f]);
+ break;
+ }
+ c2 = b[off++] & 0xff;
+ c1 |= c2 >> 4 & 0x0f;
+ rs.push(BASE64_CODE[c1 & 0x3f]);
+ c1 = (c2 & 0x0f) << 2;
+ if (off >= len) {
+ rs.push(BASE64_CODE[c1 & 0x3f]);
+ break;
+ }
+ c2 = b[off++] & 0xff;
+ c1 |= c2 >> 6 & 0x03;
+ rs.push(BASE64_CODE[c1 & 0x3f]);
+ rs.push(BASE64_CODE[c2 & 0x3f]);
+ }
+ return rs.join("");
+}
+/**
+ * Decodes a base64 encoded string to up to len bytes of output.
+ * @param {string} s String to decode
+ * @param {number} len Maximum output length
+ * @returns {!Array.}
+ * @inner
+ */ function base64_decode(s, len) {
+ var off = 0, slen = s.length, olen = 0, rs = [], c1, c2, c3, c4, o, code;
+ if (len <= 0) throw Error("Illegal len: " + len);
+ while(off < slen - 1 && olen < len){
+ code = s.charCodeAt(off++);
+ c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
+ code = s.charCodeAt(off++);
+ c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
+ if (c1 == -1 || c2 == -1) break;
+ o = c1 << 2 >>> 0;
+ o |= (c2 & 0x30) >> 4;
+ rs.push(String.fromCharCode(o));
+ if (++olen >= len || off >= slen) break;
+ code = s.charCodeAt(off++);
+ c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
+ if (c3 == -1) break;
+ o = (c2 & 0x0f) << 4 >>> 0;
+ o |= (c3 & 0x3c) >> 2;
+ rs.push(String.fromCharCode(o));
+ if (++olen >= len || off >= slen) break;
+ code = s.charCodeAt(off++);
+ c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
+ o = (c3 & 0x03) << 6 >>> 0;
+ o |= c4;
+ rs.push(String.fromCharCode(o));
+ ++olen;
+ }
+ var res = [];
+ for(off = 0; off < olen; off++)res.push(rs[off].charCodeAt(0));
+ return res;
+}
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */ var BCRYPT_SALT_LEN = 16;
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */ var GENSALT_DEFAULT_LOG2_ROUNDS = 10;
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */ var BLOWFISH_NUM_ROUNDS = 16;
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */ var MAX_EXECUTION_TIME = 100;
+/**
+ * @type {Array.}
+ * @const
+ * @inner
+ */ var P_ORIG = [
+ 0x243f6a88,
+ 0x85a308d3,
+ 0x13198a2e,
+ 0x03707344,
+ 0xa4093822,
+ 0x299f31d0,
+ 0x082efa98,
+ 0xec4e6c89,
+ 0x452821e6,
+ 0x38d01377,
+ 0xbe5466cf,
+ 0x34e90c6c,
+ 0xc0ac29b7,
+ 0xc97c50dd,
+ 0x3f84d5b5,
+ 0xb5470917,
+ 0x9216d5d9,
+ 0x8979fb1b
+];
+/**
+ * @type {Array.}
+ * @const
+ * @inner
+ */ var S_ORIG = [
+ 0xd1310ba6,
+ 0x98dfb5ac,
+ 0x2ffd72db,
+ 0xd01adfb7,
+ 0xb8e1afed,
+ 0x6a267e96,
+ 0xba7c9045,
+ 0xf12c7f99,
+ 0x24a19947,
+ 0xb3916cf7,
+ 0x0801f2e2,
+ 0x858efc16,
+ 0x636920d8,
+ 0x71574e69,
+ 0xa458fea3,
+ 0xf4933d7e,
+ 0x0d95748f,
+ 0x728eb658,
+ 0x718bcd58,
+ 0x82154aee,
+ 0x7b54a41d,
+ 0xc25a59b5,
+ 0x9c30d539,
+ 0x2af26013,
+ 0xc5d1b023,
+ 0x286085f0,
+ 0xca417918,
+ 0xb8db38ef,
+ 0x8e79dcb0,
+ 0x603a180e,
+ 0x6c9e0e8b,
+ 0xb01e8a3e,
+ 0xd71577c1,
+ 0xbd314b27,
+ 0x78af2fda,
+ 0x55605c60,
+ 0xe65525f3,
+ 0xaa55ab94,
+ 0x57489862,
+ 0x63e81440,
+ 0x55ca396a,
+ 0x2aab10b6,
+ 0xb4cc5c34,
+ 0x1141e8ce,
+ 0xa15486af,
+ 0x7c72e993,
+ 0xb3ee1411,
+ 0x636fbc2a,
+ 0x2ba9c55d,
+ 0x741831f6,
+ 0xce5c3e16,
+ 0x9b87931e,
+ 0xafd6ba33,
+ 0x6c24cf5c,
+ 0x7a325381,
+ 0x28958677,
+ 0x3b8f4898,
+ 0x6b4bb9af,
+ 0xc4bfe81b,
+ 0x66282193,
+ 0x61d809cc,
+ 0xfb21a991,
+ 0x487cac60,
+ 0x5dec8032,
+ 0xef845d5d,
+ 0xe98575b1,
+ 0xdc262302,
+ 0xeb651b88,
+ 0x23893e81,
+ 0xd396acc5,
+ 0x0f6d6ff3,
+ 0x83f44239,
+ 0x2e0b4482,
+ 0xa4842004,
+ 0x69c8f04a,
+ 0x9e1f9b5e,
+ 0x21c66842,
+ 0xf6e96c9a,
+ 0x670c9c61,
+ 0xabd388f0,
+ 0x6a51a0d2,
+ 0xd8542f68,
+ 0x960fa728,
+ 0xab5133a3,
+ 0x6eef0b6c,
+ 0x137a3be4,
+ 0xba3bf050,
+ 0x7efb2a98,
+ 0xa1f1651d,
+ 0x39af0176,
+ 0x66ca593e,
+ 0x82430e88,
+ 0x8cee8619,
+ 0x456f9fb4,
+ 0x7d84a5c3,
+ 0x3b8b5ebe,
+ 0xe06f75d8,
+ 0x85c12073,
+ 0x401a449f,
+ 0x56c16aa6,
+ 0x4ed3aa62,
+ 0x363f7706,
+ 0x1bfedf72,
+ 0x429b023d,
+ 0x37d0d724,
+ 0xd00a1248,
+ 0xdb0fead3,
+ 0x49f1c09b,
+ 0x075372c9,
+ 0x80991b7b,
+ 0x25d479d8,
+ 0xf6e8def7,
+ 0xe3fe501a,
+ 0xb6794c3b,
+ 0x976ce0bd,
+ 0x04c006ba,
+ 0xc1a94fb6,
+ 0x409f60c4,
+ 0x5e5c9ec2,
+ 0x196a2463,
+ 0x68fb6faf,
+ 0x3e6c53b5,
+ 0x1339b2eb,
+ 0x3b52ec6f,
+ 0x6dfc511f,
+ 0x9b30952c,
+ 0xcc814544,
+ 0xaf5ebd09,
+ 0xbee3d004,
+ 0xde334afd,
+ 0x660f2807,
+ 0x192e4bb3,
+ 0xc0cba857,
+ 0x45c8740f,
+ 0xd20b5f39,
+ 0xb9d3fbdb,
+ 0x5579c0bd,
+ 0x1a60320a,
+ 0xd6a100c6,
+ 0x402c7279,
+ 0x679f25fe,
+ 0xfb1fa3cc,
+ 0x8ea5e9f8,
+ 0xdb3222f8,
+ 0x3c7516df,
+ 0xfd616b15,
+ 0x2f501ec8,
+ 0xad0552ab,
+ 0x323db5fa,
+ 0xfd238760,
+ 0x53317b48,
+ 0x3e00df82,
+ 0x9e5c57bb,
+ 0xca6f8ca0,
+ 0x1a87562e,
+ 0xdf1769db,
+ 0xd542a8f6,
+ 0x287effc3,
+ 0xac6732c6,
+ 0x8c4f5573,
+ 0x695b27b0,
+ 0xbbca58c8,
+ 0xe1ffa35d,
+ 0xb8f011a0,
+ 0x10fa3d98,
+ 0xfd2183b8,
+ 0x4afcb56c,
+ 0x2dd1d35b,
+ 0x9a53e479,
+ 0xb6f84565,
+ 0xd28e49bc,
+ 0x4bfb9790,
+ 0xe1ddf2da,
+ 0xa4cb7e33,
+ 0x62fb1341,
+ 0xcee4c6e8,
+ 0xef20cada,
+ 0x36774c01,
+ 0xd07e9efe,
+ 0x2bf11fb4,
+ 0x95dbda4d,
+ 0xae909198,
+ 0xeaad8e71,
+ 0x6b93d5a0,
+ 0xd08ed1d0,
+ 0xafc725e0,
+ 0x8e3c5b2f,
+ 0x8e7594b7,
+ 0x8ff6e2fb,
+ 0xf2122b64,
+ 0x8888b812,
+ 0x900df01c,
+ 0x4fad5ea0,
+ 0x688fc31c,
+ 0xd1cff191,
+ 0xb3a8c1ad,
+ 0x2f2f2218,
+ 0xbe0e1777,
+ 0xea752dfe,
+ 0x8b021fa1,
+ 0xe5a0cc0f,
+ 0xb56f74e8,
+ 0x18acf3d6,
+ 0xce89e299,
+ 0xb4a84fe0,
+ 0xfd13e0b7,
+ 0x7cc43b81,
+ 0xd2ada8d9,
+ 0x165fa266,
+ 0x80957705,
+ 0x93cc7314,
+ 0x211a1477,
+ 0xe6ad2065,
+ 0x77b5fa86,
+ 0xc75442f5,
+ 0xfb9d35cf,
+ 0xebcdaf0c,
+ 0x7b3e89a0,
+ 0xd6411bd3,
+ 0xae1e7e49,
+ 0x00250e2d,
+ 0x2071b35e,
+ 0x226800bb,
+ 0x57b8e0af,
+ 0x2464369b,
+ 0xf009b91e,
+ 0x5563911d,
+ 0x59dfa6aa,
+ 0x78c14389,
+ 0xd95a537f,
+ 0x207d5ba2,
+ 0x02e5b9c5,
+ 0x83260376,
+ 0x6295cfa9,
+ 0x11c81968,
+ 0x4e734a41,
+ 0xb3472dca,
+ 0x7b14a94a,
+ 0x1b510052,
+ 0x9a532915,
+ 0xd60f573f,
+ 0xbc9bc6e4,
+ 0x2b60a476,
+ 0x81e67400,
+ 0x08ba6fb5,
+ 0x571be91f,
+ 0xf296ec6b,
+ 0x2a0dd915,
+ 0xb6636521,
+ 0xe7b9f9b6,
+ 0xff34052e,
+ 0xc5855664,
+ 0x53b02d5d,
+ 0xa99f8fa1,
+ 0x08ba4799,
+ 0x6e85076a,
+ 0x4b7a70e9,
+ 0xb5b32944,
+ 0xdb75092e,
+ 0xc4192623,
+ 0xad6ea6b0,
+ 0x49a7df7d,
+ 0x9cee60b8,
+ 0x8fedb266,
+ 0xecaa8c71,
+ 0x699a17ff,
+ 0x5664526c,
+ 0xc2b19ee1,
+ 0x193602a5,
+ 0x75094c29,
+ 0xa0591340,
+ 0xe4183a3e,
+ 0x3f54989a,
+ 0x5b429d65,
+ 0x6b8fe4d6,
+ 0x99f73fd6,
+ 0xa1d29c07,
+ 0xefe830f5,
+ 0x4d2d38e6,
+ 0xf0255dc1,
+ 0x4cdd2086,
+ 0x8470eb26,
+ 0x6382e9c6,
+ 0x021ecc5e,
+ 0x09686b3f,
+ 0x3ebaefc9,
+ 0x3c971814,
+ 0x6b6a70a1,
+ 0x687f3584,
+ 0x52a0e286,
+ 0xb79c5305,
+ 0xaa500737,
+ 0x3e07841c,
+ 0x7fdeae5c,
+ 0x8e7d44ec,
+ 0x5716f2b8,
+ 0xb03ada37,
+ 0xf0500c0d,
+ 0xf01c1f04,
+ 0x0200b3ff,
+ 0xae0cf51a,
+ 0x3cb574b2,
+ 0x25837a58,
+ 0xdc0921bd,
+ 0xd19113f9,
+ 0x7ca92ff6,
+ 0x94324773,
+ 0x22f54701,
+ 0x3ae5e581,
+ 0x37c2dadc,
+ 0xc8b57634,
+ 0x9af3dda7,
+ 0xa9446146,
+ 0x0fd0030e,
+ 0xecc8c73e,
+ 0xa4751e41,
+ 0xe238cd99,
+ 0x3bea0e2f,
+ 0x3280bba1,
+ 0x183eb331,
+ 0x4e548b38,
+ 0x4f6db908,
+ 0x6f420d03,
+ 0xf60a04bf,
+ 0x2cb81290,
+ 0x24977c79,
+ 0x5679b072,
+ 0xbcaf89af,
+ 0xde9a771f,
+ 0xd9930810,
+ 0xb38bae12,
+ 0xdccf3f2e,
+ 0x5512721f,
+ 0x2e6b7124,
+ 0x501adde6,
+ 0x9f84cd87,
+ 0x7a584718,
+ 0x7408da17,
+ 0xbc9f9abc,
+ 0xe94b7d8c,
+ 0xec7aec3a,
+ 0xdb851dfa,
+ 0x63094366,
+ 0xc464c3d2,
+ 0xef1c1847,
+ 0x3215d908,
+ 0xdd433b37,
+ 0x24c2ba16,
+ 0x12a14d43,
+ 0x2a65c451,
+ 0x50940002,
+ 0x133ae4dd,
+ 0x71dff89e,
+ 0x10314e55,
+ 0x81ac77d6,
+ 0x5f11199b,
+ 0x043556f1,
+ 0xd7a3c76b,
+ 0x3c11183b,
+ 0x5924a509,
+ 0xf28fe6ed,
+ 0x97f1fbfa,
+ 0x9ebabf2c,
+ 0x1e153c6e,
+ 0x86e34570,
+ 0xeae96fb1,
+ 0x860e5e0a,
+ 0x5a3e2ab3,
+ 0x771fe71c,
+ 0x4e3d06fa,
+ 0x2965dcb9,
+ 0x99e71d0f,
+ 0x803e89d6,
+ 0x5266c825,
+ 0x2e4cc978,
+ 0x9c10b36a,
+ 0xc6150eba,
+ 0x94e2ea78,
+ 0xa5fc3c53,
+ 0x1e0a2df4,
+ 0xf2f74ea7,
+ 0x361d2b3d,
+ 0x1939260f,
+ 0x19c27960,
+ 0x5223a708,
+ 0xf71312b6,
+ 0xebadfe6e,
+ 0xeac31f66,
+ 0xe3bc4595,
+ 0xa67bc883,
+ 0xb17f37d1,
+ 0x018cff28,
+ 0xc332ddef,
+ 0xbe6c5aa5,
+ 0x65582185,
+ 0x68ab9802,
+ 0xeecea50f,
+ 0xdb2f953b,
+ 0x2aef7dad,
+ 0x5b6e2f84,
+ 0x1521b628,
+ 0x29076170,
+ 0xecdd4775,
+ 0x619f1510,
+ 0x13cca830,
+ 0xeb61bd96,
+ 0x0334fe1e,
+ 0xaa0363cf,
+ 0xb5735c90,
+ 0x4c70a239,
+ 0xd59e9e0b,
+ 0xcbaade14,
+ 0xeecc86bc,
+ 0x60622ca7,
+ 0x9cab5cab,
+ 0xb2f3846e,
+ 0x648b1eaf,
+ 0x19bdf0ca,
+ 0xa02369b9,
+ 0x655abb50,
+ 0x40685a32,
+ 0x3c2ab4b3,
+ 0x319ee9d5,
+ 0xc021b8f7,
+ 0x9b540b19,
+ 0x875fa099,
+ 0x95f7997e,
+ 0x623d7da8,
+ 0xf837889a,
+ 0x97e32d77,
+ 0x11ed935f,
+ 0x16681281,
+ 0x0e358829,
+ 0xc7e61fd6,
+ 0x96dedfa1,
+ 0x7858ba99,
+ 0x57f584a5,
+ 0x1b227263,
+ 0x9b83c3ff,
+ 0x1ac24696,
+ 0xcdb30aeb,
+ 0x532e3054,
+ 0x8fd948e4,
+ 0x6dbc3128,
+ 0x58ebf2ef,
+ 0x34c6ffea,
+ 0xfe28ed61,
+ 0xee7c3c73,
+ 0x5d4a14d9,
+ 0xe864b7e3,
+ 0x42105d14,
+ 0x203e13e0,
+ 0x45eee2b6,
+ 0xa3aaabea,
+ 0xdb6c4f15,
+ 0xfacb4fd0,
+ 0xc742f442,
+ 0xef6abbb5,
+ 0x654f3b1d,
+ 0x41cd2105,
+ 0xd81e799e,
+ 0x86854dc7,
+ 0xe44b476a,
+ 0x3d816250,
+ 0xcf62a1f2,
+ 0x5b8d2646,
+ 0xfc8883a0,
+ 0xc1c7b6a3,
+ 0x7f1524c3,
+ 0x69cb7492,
+ 0x47848a0b,
+ 0x5692b285,
+ 0x095bbf00,
+ 0xad19489d,
+ 0x1462b174,
+ 0x23820e00,
+ 0x58428d2a,
+ 0x0c55f5ea,
+ 0x1dadf43e,
+ 0x233f7061,
+ 0x3372f092,
+ 0x8d937e41,
+ 0xd65fecf1,
+ 0x6c223bdb,
+ 0x7cde3759,
+ 0xcbee7460,
+ 0x4085f2a7,
+ 0xce77326e,
+ 0xa6078084,
+ 0x19f8509e,
+ 0xe8efd855,
+ 0x61d99735,
+ 0xa969a7aa,
+ 0xc50c06c2,
+ 0x5a04abfc,
+ 0x800bcadc,
+ 0x9e447a2e,
+ 0xc3453484,
+ 0xfdd56705,
+ 0x0e1e9ec9,
+ 0xdb73dbd3,
+ 0x105588cd,
+ 0x675fda79,
+ 0xe3674340,
+ 0xc5c43465,
+ 0x713e38d8,
+ 0x3d28f89e,
+ 0xf16dff20,
+ 0x153e21e7,
+ 0x8fb03d4a,
+ 0xe6e39f2b,
+ 0xdb83adf7,
+ 0xe93d5a68,
+ 0x948140f7,
+ 0xf64c261c,
+ 0x94692934,
+ 0x411520f7,
+ 0x7602d4f7,
+ 0xbcf46b2e,
+ 0xd4a20068,
+ 0xd4082471,
+ 0x3320f46a,
+ 0x43b7d4b7,
+ 0x500061af,
+ 0x1e39f62e,
+ 0x97244546,
+ 0x14214f74,
+ 0xbf8b8840,
+ 0x4d95fc1d,
+ 0x96b591af,
+ 0x70f4ddd3,
+ 0x66a02f45,
+ 0xbfbc09ec,
+ 0x03bd9785,
+ 0x7fac6dd0,
+ 0x31cb8504,
+ 0x96eb27b3,
+ 0x55fd3941,
+ 0xda2547e6,
+ 0xabca0a9a,
+ 0x28507825,
+ 0x530429f4,
+ 0x0a2c86da,
+ 0xe9b66dfb,
+ 0x68dc1462,
+ 0xd7486900,
+ 0x680ec0a4,
+ 0x27a18dee,
+ 0x4f3ffea2,
+ 0xe887ad8c,
+ 0xb58ce006,
+ 0x7af4d6b6,
+ 0xaace1e7c,
+ 0xd3375fec,
+ 0xce78a399,
+ 0x406b2a42,
+ 0x20fe9e35,
+ 0xd9f385b9,
+ 0xee39d7ab,
+ 0x3b124e8b,
+ 0x1dc9faf7,
+ 0x4b6d1856,
+ 0x26a36631,
+ 0xeae397b2,
+ 0x3a6efa74,
+ 0xdd5b4332,
+ 0x6841e7f7,
+ 0xca7820fb,
+ 0xfb0af54e,
+ 0xd8feb397,
+ 0x454056ac,
+ 0xba489527,
+ 0x55533a3a,
+ 0x20838d87,
+ 0xfe6ba9b7,
+ 0xd096954b,
+ 0x55a867bc,
+ 0xa1159a58,
+ 0xcca92963,
+ 0x99e1db33,
+ 0xa62a4a56,
+ 0x3f3125f9,
+ 0x5ef47e1c,
+ 0x9029317c,
+ 0xfdf8e802,
+ 0x04272f70,
+ 0x80bb155c,
+ 0x05282ce3,
+ 0x95c11548,
+ 0xe4c66d22,
+ 0x48c1133f,
+ 0xc70f86dc,
+ 0x07f9c9ee,
+ 0x41041f0f,
+ 0x404779a4,
+ 0x5d886e17,
+ 0x325f51eb,
+ 0xd59bc0d1,
+ 0xf2bcc18f,
+ 0x41113564,
+ 0x257b7834,
+ 0x602a9c60,
+ 0xdff8e8a3,
+ 0x1f636c1b,
+ 0x0e12b4c2,
+ 0x02e1329e,
+ 0xaf664fd1,
+ 0xcad18115,
+ 0x6b2395e0,
+ 0x333e92e1,
+ 0x3b240b62,
+ 0xeebeb922,
+ 0x85b2a20e,
+ 0xe6ba0d99,
+ 0xde720c8c,
+ 0x2da2f728,
+ 0xd0127845,
+ 0x95b794fd,
+ 0x647d0862,
+ 0xe7ccf5f0,
+ 0x5449a36f,
+ 0x877d48fa,
+ 0xc39dfd27,
+ 0xf33e8d1e,
+ 0x0a476341,
+ 0x992eff74,
+ 0x3a6f6eab,
+ 0xf4f8fd37,
+ 0xa812dc60,
+ 0xa1ebddf8,
+ 0x991be14c,
+ 0xdb6e6b0d,
+ 0xc67b5510,
+ 0x6d672c37,
+ 0x2765d43b,
+ 0xdcd0e804,
+ 0xf1290dc7,
+ 0xcc00ffa3,
+ 0xb5390f92,
+ 0x690fed0b,
+ 0x667b9ffb,
+ 0xcedb7d9c,
+ 0xa091cf0b,
+ 0xd9155ea3,
+ 0xbb132f88,
+ 0x515bad24,
+ 0x7b9479bf,
+ 0x763bd6eb,
+ 0x37392eb3,
+ 0xcc115979,
+ 0x8026e297,
+ 0xf42e312d,
+ 0x6842ada7,
+ 0xc66a2b3b,
+ 0x12754ccc,
+ 0x782ef11c,
+ 0x6a124237,
+ 0xb79251e7,
+ 0x06a1bbe6,
+ 0x4bfb6350,
+ 0x1a6b1018,
+ 0x11caedfa,
+ 0x3d25bdd8,
+ 0xe2e1c3c9,
+ 0x44421659,
+ 0x0a121386,
+ 0xd90cec6e,
+ 0xd5abea2a,
+ 0x64af674e,
+ 0xda86a85f,
+ 0xbebfe988,
+ 0x64e4c3fe,
+ 0x9dbc8057,
+ 0xf0f7c086,
+ 0x60787bf8,
+ 0x6003604d,
+ 0xd1fd8346,
+ 0xf6381fb0,
+ 0x7745ae04,
+ 0xd736fccc,
+ 0x83426b33,
+ 0xf01eab71,
+ 0xb0804187,
+ 0x3c005e5f,
+ 0x77a057be,
+ 0xbde8ae24,
+ 0x55464299,
+ 0xbf582e61,
+ 0x4e58f48f,
+ 0xf2ddfda2,
+ 0xf474ef38,
+ 0x8789bdc2,
+ 0x5366f9c3,
+ 0xc8b38e74,
+ 0xb475f255,
+ 0x46fcd9b9,
+ 0x7aeb2661,
+ 0x8b1ddf84,
+ 0x846a0e79,
+ 0x915f95e2,
+ 0x466e598e,
+ 0x20b45770,
+ 0x8cd55591,
+ 0xc902de4c,
+ 0xb90bace1,
+ 0xbb8205d0,
+ 0x11a86248,
+ 0x7574a99e,
+ 0xb77f19b6,
+ 0xe0a9dc09,
+ 0x662d09a1,
+ 0xc4324633,
+ 0xe85a1f02,
+ 0x09f0be8c,
+ 0x4a99a025,
+ 0x1d6efe10,
+ 0x1ab93d1d,
+ 0x0ba5a4df,
+ 0xa186f20f,
+ 0x2868f169,
+ 0xdcb7da83,
+ 0x573906fe,
+ 0xa1e2ce9b,
+ 0x4fcd7f52,
+ 0x50115e01,
+ 0xa70683fa,
+ 0xa002b5c4,
+ 0x0de6d027,
+ 0x9af88c27,
+ 0x773f8641,
+ 0xc3604c06,
+ 0x61a806b5,
+ 0xf0177a28,
+ 0xc0f586e0,
+ 0x006058aa,
+ 0x30dc7d62,
+ 0x11e69ed7,
+ 0x2338ea63,
+ 0x53c2dd94,
+ 0xc2c21634,
+ 0xbbcbee56,
+ 0x90bcb6de,
+ 0xebfc7da1,
+ 0xce591d76,
+ 0x6f05e409,
+ 0x4b7c0188,
+ 0x39720a3d,
+ 0x7c927c24,
+ 0x86e3725f,
+ 0x724d9db9,
+ 0x1ac15bb4,
+ 0xd39eb8fc,
+ 0xed545578,
+ 0x08fca5b5,
+ 0xd83d7cd3,
+ 0x4dad0fc4,
+ 0x1e50ef5e,
+ 0xb161e6f8,
+ 0xa28514d9,
+ 0x6c51133c,
+ 0x6fd5c7e7,
+ 0x56e14ec4,
+ 0x362abfce,
+ 0xddc6c837,
+ 0xd79a3234,
+ 0x92638212,
+ 0x670efa8e,
+ 0x406000e0,
+ 0x3a39ce37,
+ 0xd3faf5cf,
+ 0xabc27737,
+ 0x5ac52d1b,
+ 0x5cb0679e,
+ 0x4fa33742,
+ 0xd3822740,
+ 0x99bc9bbe,
+ 0xd5118e9d,
+ 0xbf0f7315,
+ 0xd62d1c7e,
+ 0xc700c47b,
+ 0xb78c1b6b,
+ 0x21a19045,
+ 0xb26eb1be,
+ 0x6a366eb4,
+ 0x5748ab2f,
+ 0xbc946e79,
+ 0xc6a376d2,
+ 0x6549c2c8,
+ 0x530ff8ee,
+ 0x468dde7d,
+ 0xd5730a1d,
+ 0x4cd04dc6,
+ 0x2939bbdb,
+ 0xa9ba4650,
+ 0xac9526e8,
+ 0xbe5ee304,
+ 0xa1fad5f0,
+ 0x6a2d519a,
+ 0x63ef8ce2,
+ 0x9a86ee22,
+ 0xc089c2b8,
+ 0x43242ef6,
+ 0xa51e03aa,
+ 0x9cf2d0a4,
+ 0x83c061ba,
+ 0x9be96a4d,
+ 0x8fe51550,
+ 0xba645bd6,
+ 0x2826a2f9,
+ 0xa73a3ae1,
+ 0x4ba99586,
+ 0xef5562e9,
+ 0xc72fefd3,
+ 0xf752f7da,
+ 0x3f046f69,
+ 0x77fa0a59,
+ 0x80e4a915,
+ 0x87b08601,
+ 0x9b09e6ad,
+ 0x3b3ee593,
+ 0xe990fd5a,
+ 0x9e34d797,
+ 0x2cf0b7d9,
+ 0x022b8b51,
+ 0x96d5ac3a,
+ 0x017da67d,
+ 0xd1cf3ed6,
+ 0x7c7d2d28,
+ 0x1f9f25cf,
+ 0xadf2b89b,
+ 0x5ad6b472,
+ 0x5a88f54c,
+ 0xe029ac71,
+ 0xe019a5e6,
+ 0x47b0acfd,
+ 0xed93fa9b,
+ 0xe8d3c48d,
+ 0x283b57cc,
+ 0xf8d56629,
+ 0x79132e28,
+ 0x785f0191,
+ 0xed756055,
+ 0xf7960e44,
+ 0xe3d35e8c,
+ 0x15056dd4,
+ 0x88f46dba,
+ 0x03a16125,
+ 0x0564f0bd,
+ 0xc3eb9e15,
+ 0x3c9057a2,
+ 0x97271aec,
+ 0xa93a072a,
+ 0x1b3f6d9b,
+ 0x1e6321f5,
+ 0xf59c66fb,
+ 0x26dcf319,
+ 0x7533d928,
+ 0xb155fdf5,
+ 0x03563482,
+ 0x8aba3cbb,
+ 0x28517711,
+ 0xc20ad9f8,
+ 0xabcc5167,
+ 0xccad925f,
+ 0x4de81751,
+ 0x3830dc8e,
+ 0x379d5862,
+ 0x9320f991,
+ 0xea7a90c2,
+ 0xfb3e7bce,
+ 0x5121ce64,
+ 0x774fbe32,
+ 0xa8b6e37e,
+ 0xc3293d46,
+ 0x48de5369,
+ 0x6413e680,
+ 0xa2ae0810,
+ 0xdd6db224,
+ 0x69852dfd,
+ 0x09072166,
+ 0xb39a460a,
+ 0x6445c0dd,
+ 0x586cdecf,
+ 0x1c20c8ae,
+ 0x5bbef7dd,
+ 0x1b588d40,
+ 0xccd2017f,
+ 0x6bb4e3bb,
+ 0xdda26a7e,
+ 0x3a59ff45,
+ 0x3e350a44,
+ 0xbcb4cdd5,
+ 0x72eacea8,
+ 0xfa6484bb,
+ 0x8d6612ae,
+ 0xbf3c6f47,
+ 0xd29be463,
+ 0x542f5d9e,
+ 0xaec2771b,
+ 0xf64e6370,
+ 0x740e0d8d,
+ 0xe75b1357,
+ 0xf8721671,
+ 0xaf537d5d,
+ 0x4040cb08,
+ 0x4eb4e2cc,
+ 0x34d2466a,
+ 0x0115af84,
+ 0xe1b00428,
+ 0x95983a1d,
+ 0x06b89fb4,
+ 0xce6ea048,
+ 0x6f3f3b82,
+ 0x3520ab82,
+ 0x011a1d4b,
+ 0x277227f8,
+ 0x611560b1,
+ 0xe7933fdc,
+ 0xbb3a792b,
+ 0x344525bd,
+ 0xa08839e1,
+ 0x51ce794b,
+ 0x2f32c9b7,
+ 0xa01fbac9,
+ 0xe01cc87e,
+ 0xbcc7d1f6,
+ 0xcf0111c3,
+ 0xa1e8aac7,
+ 0x1a908749,
+ 0xd44fbd9a,
+ 0xd0dadecb,
+ 0xd50ada38,
+ 0x0339c32a,
+ 0xc6913667,
+ 0x8df9317c,
+ 0xe0b12b4f,
+ 0xf79e59b7,
+ 0x43f5bb3a,
+ 0xf2d519ff,
+ 0x27d9459c,
+ 0xbf97222c,
+ 0x15e6fc2a,
+ 0x0f91fc71,
+ 0x9b941525,
+ 0xfae59361,
+ 0xceb69ceb,
+ 0xc2a86459,
+ 0x12baa8d1,
+ 0xb6c1075e,
+ 0xe3056a0c,
+ 0x10d25065,
+ 0xcb03a442,
+ 0xe0ec6e0e,
+ 0x1698db3b,
+ 0x4c98a0be,
+ 0x3278e964,
+ 0x9f1f9532,
+ 0xe0d392df,
+ 0xd3a0342b,
+ 0x8971f21e,
+ 0x1b0a7441,
+ 0x4ba3348c,
+ 0xc5be7120,
+ 0xc37632d8,
+ 0xdf359f8d,
+ 0x9b992f2e,
+ 0xe60b6f47,
+ 0x0fe3f11d,
+ 0xe54cda54,
+ 0x1edad891,
+ 0xce6279cf,
+ 0xcd3e7e6f,
+ 0x1618b166,
+ 0xfd2c1d05,
+ 0x848fd2c5,
+ 0xf6fb2299,
+ 0xf523f357,
+ 0xa6327623,
+ 0x93a83531,
+ 0x56cccd02,
+ 0xacf08162,
+ 0x5a75ebb5,
+ 0x6e163697,
+ 0x88d273cc,
+ 0xde966292,
+ 0x81b949d0,
+ 0x4c50901b,
+ 0x71c65614,
+ 0xe6c6c7bd,
+ 0x327a140a,
+ 0x45e1d006,
+ 0xc3f27b9a,
+ 0xc9aa53fd,
+ 0x62a80f00,
+ 0xbb25bfe2,
+ 0x35bdd2f6,
+ 0x71126905,
+ 0xb2040222,
+ 0xb6cbcf7c,
+ 0xcd769c2b,
+ 0x53113ec0,
+ 0x1640e3d3,
+ 0x38abbd60,
+ 0x2547adf0,
+ 0xba38209c,
+ 0xf746ce76,
+ 0x77afa1c5,
+ 0x20756060,
+ 0x85cbfe4e,
+ 0x8ae88dd8,
+ 0x7aaaf9b0,
+ 0x4cf9aa7e,
+ 0x1948c25c,
+ 0x02fb8a8c,
+ 0x01c36ae4,
+ 0xd6ebe1f9,
+ 0x90d4f869,
+ 0xa65cdea0,
+ 0x3f09252d,
+ 0xc208e69f,
+ 0xb74e6132,
+ 0xce77e25b,
+ 0x578fdfe3,
+ 0x3ac372e6
+];
+/**
+ * @type {Array.}
+ * @const
+ * @inner
+ */ var C_ORIG = [
+ 0x4f727068,
+ 0x65616e42,
+ 0x65686f6c,
+ 0x64657253,
+ 0x63727944,
+ 0x6f756274
+];
+/**
+ * @param {Array.} lr
+ * @param {number} off
+ * @param {Array.} P
+ * @param {Array.} S
+ * @returns {Array.}
+ * @inner
+ */ function _encipher(lr, off, P, S) {
+ // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
+ var n, l = lr[off], r = lr[off + 1];
+ l ^= P[0];
+ /*
+ for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
+ // Feistel substitution on left word
+ n = S[l >>> 24],
+ n += S[0x100 | ((l >> 16) & 0xff)],
+ n ^= S[0x200 | ((l >> 8) & 0xff)],
+ n += S[0x300 | (l & 0xff)],
+ r ^= n ^ P[++i],
+ // Feistel substitution on right word
+ n = S[r >>> 24],
+ n += S[0x100 | ((r >> 16) & 0xff)],
+ n ^= S[0x200 | ((r >> 8) & 0xff)],
+ n += S[0x300 | (r & 0xff)],
+ l ^= n ^ P[++i];
+ */ //The following is an unrolled version of the above loop.
+ //Iteration 0
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[1];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[2];
+ //Iteration 1
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[3];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[4];
+ //Iteration 2
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[5];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[6];
+ //Iteration 3
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[7];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[8];
+ //Iteration 4
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[9];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[10];
+ //Iteration 5
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[11];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[12];
+ //Iteration 6
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[13];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[14];
+ //Iteration 7
+ n = S[l >>> 24];
+ n += S[0x100 | l >> 16 & 0xff];
+ n ^= S[0x200 | l >> 8 & 0xff];
+ n += S[0x300 | l & 0xff];
+ r ^= n ^ P[15];
+ n = S[r >>> 24];
+ n += S[0x100 | r >> 16 & 0xff];
+ n ^= S[0x200 | r >> 8 & 0xff];
+ n += S[0x300 | r & 0xff];
+ l ^= n ^ P[16];
+ lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];
+ lr[off + 1] = l;
+ return lr;
+}
+/**
+ * @param {Array.} data
+ * @param {number} offp
+ * @returns {{key: number, offp: number}}
+ * @inner
+ */ function _streamtoword(data, offp) {
+ for(var i = 0, word = 0; i < 4; ++i)word = word << 8 | data[offp] & 0xff, offp = (offp + 1) % data.length;
+ return {
+ key: word,
+ offp: offp
+ };
+}
+/**
+ * @param {Array.} key
+ * @param {Array.} P
+ * @param {Array.} S
+ * @inner
+ */ function _key(key, P, S) {
+ var offset = 0, lr = [
+ 0,
+ 0
+ ], plen = P.length, slen = S.length, sw;
+ for(var i = 0; i < plen; i++)sw = _streamtoword(key, offset), offset = sw.offp, P[i] = P[i] ^ sw.key;
+ for(i = 0; i < plen; i += 2)lr = _encipher(lr, 0, P, S), P[i] = lr[0], P[i + 1] = lr[1];
+ for(i = 0; i < slen; i += 2)lr = _encipher(lr, 0, P, S), S[i] = lr[0], S[i + 1] = lr[1];
+}
+/**
+ * Expensive key schedule Blowfish.
+ * @param {Array.} data
+ * @param {Array.} key
+ * @param {Array.} P
+ * @param {Array.} S
+ * @inner
+ */ function _ekskey(data, key, P, S) {
+ var offp = 0, lr = [
+ 0,
+ 0
+ ], plen = P.length, slen = S.length, sw;
+ for(var i = 0; i < plen; i++)sw = _streamtoword(key, offp), offp = sw.offp, P[i] = P[i] ^ sw.key;
+ offp = 0;
+ for(i = 0; i < plen; i += 2)sw = _streamtoword(data, offp), offp = sw.offp, lr[0] ^= sw.key, sw = _streamtoword(data, offp), offp = sw.offp, lr[1] ^= sw.key, lr = _encipher(lr, 0, P, S), P[i] = lr[0], P[i + 1] = lr[1];
+ for(i = 0; i < slen; i += 2)sw = _streamtoword(data, offp), offp = sw.offp, lr[0] ^= sw.key, sw = _streamtoword(data, offp), offp = sw.offp, lr[1] ^= sw.key, lr = _encipher(lr, 0, P, S), S[i] = lr[0], S[i + 1] = lr[1];
+}
+/**
+ * Internaly crypts a string.
+ * @param {Array.} b Bytes to crypt
+ * @param {Array.} salt Salt bytes to use
+ * @param {number} rounds Number of rounds
+ * @param {function(Error, Array.=)=} callback Callback receiving the error, if any, and the resulting bytes. If
+ * omitted, the operation will be performed synchronously.
+ * @param {function(number)=} progressCallback Callback called with the current progress
+ * @returns {!Array.|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`
+ * @inner
+ */ function _crypt(b, salt, rounds, callback, progressCallback) {
+ var cdata = C_ORIG.slice(), clen = cdata.length, err;
+ // Validate
+ if (rounds < 4 || rounds > 31) {
+ err = Error("Illegal number of rounds (4-31): " + rounds);
+ if (callback) {
+ nextTick(callback.bind(this, err));
+ return;
+ } else throw err;
+ }
+ if (salt.length !== BCRYPT_SALT_LEN) {
+ err = Error("Illegal salt length: " + salt.length + " != " + BCRYPT_SALT_LEN);
+ if (callback) {
+ nextTick(callback.bind(this, err));
+ return;
+ } else throw err;
+ }
+ rounds = 1 << rounds >>> 0;
+ var P, S, i = 0, j;
+ //Use typed arrays when available - huge speedup!
+ if (typeof Int32Array === "function") {
+ P = new Int32Array(P_ORIG);
+ S = new Int32Array(S_ORIG);
+ } else {
+ P = P_ORIG.slice();
+ S = S_ORIG.slice();
+ }
+ _ekskey(salt, b, P, S);
+ /**
+ * Calcualtes the next round.
+ * @returns {Array.|undefined} Resulting array if callback has been omitted, otherwise `undefined`
+ * @inner
+ */ function next() {
+ if (progressCallback) progressCallback(i / rounds);
+ if (i < rounds) {
+ var start = Date.now();
+ for(; i < rounds;){
+ i = i + 1;
+ _key(b, P, S);
+ _key(salt, P, S);
+ if (Date.now() - start > MAX_EXECUTION_TIME) break;
+ }
+ } else {
+ for(i = 0; i < 64; i++)for(j = 0; j < clen >> 1; j++)_encipher(cdata, j << 1, P, S);
+ var ret = [];
+ for(i = 0; i < clen; i++)ret.push((cdata[i] >> 24 & 0xff) >>> 0), ret.push((cdata[i] >> 16 & 0xff) >>> 0), ret.push((cdata[i] >> 8 & 0xff) >>> 0), ret.push((cdata[i] & 0xff) >>> 0);
+ if (callback) {
+ callback(null, ret);
+ return;
+ } else return ret;
+ }
+ if (callback) nextTick(next);
+ }
+ // Async
+ if (typeof callback !== "undefined") {
+ next();
+ // Sync
+ } else {
+ var res;
+ while(true)if (typeof (res = next()) !== "undefined") return res || [];
+ }
+}
+/**
+ * Internally hashes a password.
+ * @param {string} password Password to hash
+ * @param {?string} salt Salt to use, actually never null
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,
+ * hashing is performed synchronously.
+ * @param {function(number)=} progressCallback Callback called with the current progress
+ * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`
+ * @inner
+ */ function _hash(password, salt, callback, progressCallback) {
+ var err;
+ if (typeof password !== "string" || typeof salt !== "string") {
+ err = Error("Invalid string / salt: Not a string");
+ if (callback) {
+ nextTick(callback.bind(this, err));
+ return;
+ } else throw err;
+ }
+ // Validate the salt
+ var minor, offset;
+ if (salt.charAt(0) !== "$" || salt.charAt(1) !== "2") {
+ err = Error("Invalid salt version: " + salt.substring(0, 2));
+ if (callback) {
+ nextTick(callback.bind(this, err));
+ return;
+ } else throw err;
+ }
+ if (salt.charAt(2) === "$") minor = String.fromCharCode(0), offset = 3;
+ else {
+ minor = salt.charAt(2);
+ if (minor !== "a" && minor !== "b" && minor !== "y" || salt.charAt(3) !== "$") {
+ err = Error("Invalid salt revision: " + salt.substring(2, 4));
+ if (callback) {
+ nextTick(callback.bind(this, err));
+ return;
+ } else throw err;
+ }
+ offset = 4;
+ }
+ // Extract number of rounds
+ if (salt.charAt(offset + 2) > "$") {
+ err = Error("Missing salt rounds");
+ if (callback) {
+ nextTick(callback.bind(this, err));
+ return;
+ } else throw err;
+ }
+ var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10, r2 = parseInt(salt.substring(offset + 1, offset + 2), 10), rounds = r1 + r2, real_salt = salt.substring(offset + 3, offset + 25);
+ password += minor >= "a" ? "\x00" : "";
+ var passwordb = utf8Array(password), saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);
+ /**
+ * Finishes hashing.
+ * @param {Array.} bytes Byte array
+ * @returns {string}
+ * @inner
+ */ function finish(bytes) {
+ var res = [];
+ res.push("$2");
+ if (minor >= "a") res.push(minor);
+ res.push("$");
+ if (rounds < 10) res.push("0");
+ res.push(rounds.toString());
+ res.push("$");
+ res.push(base64_encode(saltb, saltb.length));
+ res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));
+ return res.join("");
+ }
+ // Sync
+ if (typeof callback == "undefined") return finish(_crypt(passwordb, saltb, rounds));
+ else {
+ _crypt(passwordb, saltb, rounds, function(err, bytes) {
+ if (err) callback(err, null);
+ else callback(null, finish(bytes));
+ }, progressCallback);
+ }
+}
+function encodeBase64(bytes, length) {
+ return base64_encode(bytes, length);
+}
+function decodeBase64(string, length) {
+ return base64_decode(string, length);
+}
+const __TURBOPACK__default__export__ = {
+ setRandomFallback,
+ genSaltSync,
+ genSalt,
+ hashSync,
+ hash,
+ compareSync,
+ compare,
+ getRounds,
+ getSalt,
+ truncates,
+ encodeBase64,
+ decodeBase64
+};
+}),
+"[project]/node_modules/jose/dist/webapi/jws/compact/sign.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "CompactSign",
+ ()=>CompactSign
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jws$2f$flattened$2f$sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/jws/flattened/sign.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jws_sign.js [middleware] (ecmascript)");
+;
+;
+class CompactSign {
+ #flattened;
+ #protectedHeader;
+ constructor(payload){
+ this.#flattened = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jws$2f$flattened$2f$sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["FlattenedSign"](payload);
+ }
+ setProtectedHeader(protectedHeader) {
+ this.#flattened.setProtectedHeader(protectedHeader);
+ this.#protectedHeader = protectedHeader;
+ return this;
+ }
+ async sign(key, options) {
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["unencodedPayload"])(this.#protectedHeader)) {
+ throw new TypeError('use the flattened module for creating JWS with b64: false');
+ }
+ const jws = await this.#flattened.sign(key, options);
+ return `${jws.protected}.${jws.payload}.${jws.signature}`;
+ }
+}
+}),
+"[project]/node_modules/jose/dist/webapi/jws/flattened/sign.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "FlattenedSign",
+ ()=>FlattenedSign
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jws_sign.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/helpers.js [middleware] (ecmascript)");
+;
+;
+class FlattenedSign {
+ #payload;
+ #protectedHeader;
+ #unprotectedHeader;
+ constructor(payload){
+ if (!(payload instanceof Uint8Array)) {
+ throw new TypeError('payload must be an instance of Uint8Array');
+ }
+ this.#payload = payload;
+ }
+ setProtectedHeader(protectedHeader) {
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["assertNotSet"])(this.#protectedHeader, 'setProtectedHeader');
+ this.#protectedHeader = protectedHeader;
+ return this;
+ }
+ setUnprotectedHeader(unprotectedHeader) {
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["assertNotSet"])(this.#unprotectedHeader, 'setUnprotectedHeader');
+ this.#unprotectedHeader = unprotectedHeader;
+ return this;
+ }
+ async sign(key, options) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createSignature"])({
+ payload: this.#payload,
+ protectedHeader: this.#protectedHeader,
+ unprotectedHeader: this.#unprotectedHeader,
+ crit: options?.crit
+ }, key);
+ }
+}
+}),
+"[project]/node_modules/jose/dist/webapi/jwt/sign.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "SignJWT",
+ ()=>SignJWT
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jws$2f$compact$2f$sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/jws/compact/sign.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jws_sign.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jwt_claims_set$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jwt_claims_set.js [middleware] (ecmascript)");
+;
+;
+;
+;
+class SignJWT {
+ #protectedHeader;
+ #jwt;
+ constructor(payload = {}){
+ this.#jwt = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jwt_claims_set$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimsBuilder"](payload);
+ }
+ setIssuer(issuer) {
+ this.#jwt.iss = issuer;
+ return this;
+ }
+ setSubject(subject) {
+ this.#jwt.sub = subject;
+ return this;
+ }
+ setAudience(audience) {
+ this.#jwt.aud = audience;
+ return this;
+ }
+ setJti(jwtId) {
+ this.#jwt.jti = jwtId;
+ return this;
+ }
+ setNotBefore(input) {
+ this.#jwt.nbf = input;
+ return this;
+ }
+ setExpirationTime(input) {
+ this.#jwt.exp = input;
+ return this;
+ }
+ setIssuedAt(input) {
+ this.#jwt.iat = input;
+ return this;
+ }
+ setProtectedHeader(protectedHeader) {
+ this.#protectedHeader = protectedHeader;
+ return this;
+ }
+ async sign(key, options) {
+ const sig = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$jws$2f$compact$2f$sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CompactSign"](this.#jwt.data());
+ sig.setProtectedHeader(this.#protectedHeader);
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_sign$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["unencodedPayload"])(this.#protectedHeader)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTInvalid"]('JWTs MUST NOT use unencoded payload');
+ }
+ return sig.sign(key, options);
+ }
+}
+}),
+"[project]/node_modules/jose/dist/webapi/jwt/verify.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "jwtVerify",
+ ()=>jwtVerify
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_verify$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jws_verify.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jwt_claims_set$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jwt_claims_set.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+;
+;
+;
+async function jwtVerify(jwt, key, options) {
+ const verified = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_verify$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["verifyCompact"])(jwt, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_verify$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["prepareVerify"])(options), key);
+ if (!verified[2]) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTInvalid"]('JWTs MUST NOT use unencoded payload');
+ }
+ const payload = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jwt_claims_set$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["validateClaimsSet"])(verified[1], verified[0], options);
+ const result = {
+ payload,
+ protectedHeader: verified[1]
+ };
+ if (typeof key === 'function') {
+ return {
+ ...result,
+ key: verified[3]
+ };
+ }
+ return result;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/base64.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "decodeBase64",
+ ()=>decodeBase64,
+ "encodeBase64",
+ ()=>encodeBase64
+]);
+function encodeBase64(input) {
+ if (Uint8Array.prototype.toBase64) {
+ return input.toBase64();
+ }
+ const CHUNK_SIZE = 0x8000;
+ const arr = [];
+ for(let i = 0; i < input.length; i += CHUNK_SIZE){
+ arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));
+ }
+ return btoa(arr.join(''));
+}
+function decodeBase64(encoded) {
+ if (Uint8Array.fromBase64) {
+ return Uint8Array.fromBase64(encoded);
+ }
+ const binary = atob(encoded);
+ const bytes = new Uint8Array(binary.length);
+ for(let i = 0; i < binary.length; i++){
+ bytes[i] = binary.charCodeAt(i);
+ }
+ return bytes;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/buffer_utils.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "concat",
+ ()=>concat,
+ "decoder",
+ ()=>decoder,
+ "encode",
+ ()=>encode,
+ "encoder",
+ ()=>encoder,
+ "strictDecoder",
+ ()=>strictDecoder,
+ "uint32be",
+ ()=>uint32be,
+ "uint64be",
+ ()=>uint64be
+]);
+const encoder = new TextEncoder();
+const decoder = new TextDecoder();
+const strictDecoder = new TextDecoder('utf-8', {
+ fatal: true
+});
+const MAX_INT32 = 2 ** 32;
+function concat(...buffers) {
+ const size = buffers.reduce((acc, { length })=>acc + length, 0);
+ const buf = new Uint8Array(size);
+ let i = 0;
+ for (const buffer of buffers){
+ buf.set(buffer, i);
+ i += buffer.length;
+ }
+ return buf;
+}
+function writeUInt32BE(buf, value, offset) {
+ if (value < 0 || value >= MAX_INT32) {
+ throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);
+ }
+ buf.set([
+ value >>> 24,
+ value >>> 16,
+ value >>> 8,
+ value & 0xff
+ ], offset);
+}
+function uint64be(value) {
+ const high = Math.floor(value / MAX_INT32);
+ const low = value % MAX_INT32;
+ const buf = new Uint8Array(8);
+ writeUInt32BE(buf, high, 0);
+ writeUInt32BE(buf, low, 4);
+ return buf;
+}
+function uint32be(value) {
+ const buf = new Uint8Array(4);
+ writeUInt32BE(buf, value);
+ return buf;
+}
+function encode(string) {
+ const bytes = new Uint8Array(string.length);
+ for(let i = 0; i < string.length; i++){
+ const code = string.charCodeAt(i);
+ if (code > 127) {
+ throw new TypeError('non-ASCII string encountered in encode()');
+ }
+ bytes[i] = code;
+ }
+ return bytes;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/crypto_key.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "checkCryptoKey",
+ ()=>checkCryptoKey,
+ "checkModulusLength",
+ ()=>checkModulusLength,
+ "checkUsage",
+ ()=>checkUsage
+]);
+const unusable = (name, prop = 'algorithm.name')=>new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);
+function checkUsage(key, usage) {
+ if (usage && !key.usages.includes(usage)) {
+ throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);
+ }
+}
+function checkModulusLength(alg, key) {
+ const { modulusLength } = key.algorithm;
+ if (typeof modulusLength !== 'number' || modulusLength < 2048) {
+ throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
+ }
+}
+function checkCryptoKey(key, expected, usage) {
+ const algorithm = key.algorithm;
+ if (algorithm.name !== expected.name) {
+ throw unusable(expected.name);
+ }
+ if (expected.hash && algorithm.hash?.name !== expected.hash) {
+ throw unusable(expected.hash, 'algorithm.hash');
+ }
+ if (expected.namedCurve && algorithm.namedCurve !== expected.namedCurve) {
+ throw unusable(expected.namedCurve, 'algorithm.namedCurve');
+ }
+ if (expected.length !== undefined && algorithm.length !== expected.length) {
+ throw unusable(expected.length, 'algorithm.length');
+ }
+ checkUsage(key, usage);
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/helpers.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "assertNotSet",
+ ()=>assertNotSet,
+ "decodeBase64url",
+ ()=>decodeBase64url,
+ "digest",
+ ()=>digest,
+ "encodeBase64url",
+ ()=>encodeBase64url,
+ "parseJoseHeader",
+ ()=>parseJoseHeader,
+ "unprotected",
+ ()=>unprotected
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/base64url.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/buffer_utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/type_checks.js [middleware] (ecmascript)");
+;
+;
+;
+const unprotected = Symbol();
+function assertNotSet(value, name) {
+ if (value) {
+ throw new TypeError(`${name} can only be called once`);
+ }
+}
+function decodeBase64url(value, label, ErrorClass) {
+ try {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decode"])(value);
+ } catch {
+ throw new ErrorClass(`Failed to base64url decode the ${label}`);
+ }
+}
+function encodeBase64url(value, label, ErrorClass) {
+ try {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(value);
+ } catch {
+ throw new ErrorClass(`The ${label} is not a valid base64url string`);
+ }
+}
+async function digest(algorithm, data) {
+ const subtleDigest = `SHA-${algorithm.slice(-3)}`;
+ return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));
+}
+function parseJoseHeader(b64, ErrorClass, message) {
+ let parsed;
+ try {
+ parsed = JSON.parse(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["strictDecoder"].decode((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decode"])(b64)));
+ } catch {
+ throw new ErrorClass(message);
+ }
+ if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isObject"])(parsed)) {
+ throw new ErrorClass(message);
+ }
+ return parsed;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/invalid_key_input.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "invalidKeyInput",
+ ()=>invalidKeyInput,
+ "withAlg",
+ ()=>withAlg
+]);
+function message(msg, actual, ...types) {
+ if (types.length > 2) {
+ const last = types.pop();
+ msg += `one of type ${types.join(', ')}, or ${last}.`;
+ } else if (types.length === 2) {
+ msg += `one of type ${types[0]} or ${types[1]}.`;
+ } else {
+ msg += `of type ${types[0]}.`;
+ }
+ if (actual == null) {
+ msg += ` Received ${actual}`;
+ } else if (typeof actual === 'function' && actual.name) {
+ msg += ` Received function ${actual.name}`;
+ } else if (typeof actual === 'object' && actual != null) {
+ if (actual.constructor?.name) {
+ msg += ` Received an instance of ${actual.constructor.name}`;
+ }
+ }
+ return msg;
+}
+const invalidKeyInput = (actual, ...types)=>message('Key must be ', actual, ...types);
+const withAlg = (alg, actual, ...types)=>message(`Key for the ${alg} algorithm must be `, actual, ...types);
+}),
+"[project]/node_modules/jose/dist/webapi/lib/is_key_like.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "assertCryptoKey",
+ ()=>assertCryptoKey,
+ "isCryptoKey",
+ ()=>isCryptoKey,
+ "isKeyLike",
+ ()=>isKeyLike,
+ "isKeyObject",
+ ()=>isKeyObject
+]);
+function assertCryptoKey(key) {
+ if (!isCryptoKey(key)) {
+ throw new Error('CryptoKey instance expected');
+ }
+}
+const isCryptoKey = (key)=>{
+ if (key?.[Symbol.toStringTag] === 'CryptoKey') return true;
+ try {
+ return key instanceof CryptoKey;
+ } catch {
+ return false;
+ }
+};
+const isKeyObject = (key)=>key?.[Symbol.toStringTag] === 'KeyObject';
+const isKeyLike = (key)=>isCryptoKey(key) || isKeyObject(key);
+}),
+"[project]/node_modules/jose/dist/webapi/lib/jwk_to_key.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "jwkToKey",
+ ()=>jwkToKey
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+;
+async function jwkToKey(entry, jwk) {
+ if (jwk.kty === 'RSA' && 'oth' in jwk && jwk.oth !== undefined) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JOSENotSupported"]('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');
+ }
+ if (!entry.kty.includes(jwk.kty)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JOSENotSupported"]('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
+ }
+ const algorithm = entry.resolve?.({
+ kty: jwk.kty,
+ crv: jwk.crv
+ }) ?? entry.subtle;
+ const isPrivate = !!(jwk.d || jwk.priv);
+ const keyData = {
+ ...jwk
+ };
+ if (keyData.kty !== 'AKP') {
+ delete keyData.alg;
+ }
+ delete keyData.use;
+ return crypto.subtle.importKey('jwk', keyData, algorithm, jwk.ext ?? !isPrivate, jwk.key_ops ?? entry.usages[isPrivate ? 1 : 0]);
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/jws_algorithms.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "JWS",
+ ()=>JWS,
+ "jwsAlgorithm",
+ ()=>jwsAlgorithm
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$key_descriptor$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/key_descriptor.js [middleware] (ecmascript)");
+;
+;
+const sig = [
+ [
+ 'verify'
+ ],
+ [
+ 'sign'
+ ]
+];
+function hmac(bits) {
+ const subtle = {
+ name: 'HMAC',
+ hash: `SHA-${bits}`
+ };
+ return {
+ kty: [
+ 'oct'
+ ],
+ secret: true,
+ subtle,
+ signing: subtle,
+ usages: sig
+ };
+}
+function rsa(bits, saltLength) {
+ const name = saltLength ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5';
+ const subtle = {
+ name,
+ hash: `SHA-${bits}`
+ };
+ return {
+ kty: [
+ 'RSA'
+ ],
+ subtle,
+ signing: saltLength ? {
+ ...subtle,
+ saltLength
+ } : subtle,
+ usages: sig,
+ minRsaBits: 2048
+ };
+}
+function ecdsa(crv, bits) {
+ return {
+ kty: [
+ 'EC'
+ ],
+ crv,
+ subtle: {
+ name: 'ECDSA',
+ namedCurve: crv
+ },
+ signing: {
+ name: 'ECDSA',
+ hash: `SHA-${bits}`
+ },
+ usages: sig
+ };
+}
+function eddsa() {
+ const subtle = {
+ name: 'Ed25519'
+ };
+ return {
+ kty: [
+ 'OKP'
+ ],
+ crv: 'Ed25519',
+ subtle,
+ signing: subtle,
+ usages: sig
+ };
+}
+function mldsa(bits) {
+ const name = `ML-DSA-${bits}`;
+ const subtle = {
+ name
+ };
+ return {
+ kty: [
+ 'AKP'
+ ],
+ subtle,
+ signing: subtle,
+ usages: sig
+ };
+}
+const JWS = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$key_descriptor$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["table"])({
+ HS256: hmac(256),
+ HS384: hmac(384),
+ HS512: hmac(512),
+ RS256: rsa(256),
+ RS384: rsa(384),
+ RS512: rsa(512),
+ PS256: rsa(256, 32),
+ PS384: rsa(384, 48),
+ PS512: rsa(512, 64),
+ ES256: ecdsa('P-256', 256),
+ ES384: ecdsa('P-384', 384),
+ ES512: ecdsa('P-521', 512),
+ EdDSA: eddsa(),
+ Ed25519: eddsa(),
+ 'ML-DSA-44': mldsa(44),
+ 'ML-DSA-65': mldsa(65),
+ 'ML-DSA-87': mldsa(87)
+});
+function jwsAlgorithm(alg) {
+ const entry = typeof alg === 'string' ? JWS[alg] : undefined;
+ if (!entry) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JOSENotSupported"](`alg ${alg} is not supported either by JOSE or your javascript runtime`);
+ }
+ return entry;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/jws_sign.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createSignature",
+ ()=>createSignature,
+ "unencodedPayload",
+ ()=>unencodedPayload
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/base64url.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$signing$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/signing.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_algorithms$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jws_algorithms.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/type_checks.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/buffer_utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/options.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/key.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+;
+function unencodedPayload(protectedHeader) {
+ return protectedHeader?.b64 === false && Array.isArray(protectedHeader.crit) && protectedHeader.crit.includes('b64');
+}
+async function createSignature(input, key) {
+ const { protectedHeader, unprotectedHeader } = input;
+ if (!protectedHeader && !unprotectedHeader) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');
+ }
+ if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isDisjoint"])(protectedHeader, unprotectedHeader)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');
+ }
+ const joseHeader = {
+ ...protectedHeader,
+ ...unprotectedHeader
+ };
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["validateCritDuplicates"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"], protectedHeader);
+ const extensions = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["validateCrit"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"], __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWS_RECOGNIZED"], input.crit, protectedHeader, joseHeader);
+ let b64 = true;
+ if (extensions.includes('b64')) {
+ b64 = protectedHeader.b64;
+ if (typeof b64 !== 'boolean') {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
+ }
+ }
+ const { alg } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('JWS "alg" (Algorithm) Header Parameter missing or invalid');
+ }
+ const entry = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_algorithms$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["jwsAlgorithm"])(alg);
+ let payloadS;
+ let payloadB;
+ if (b64) {
+ const encoded = input.encoded ??= [];
+ encoded[0] ??= (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(input.payload);
+ encoded[1] ??= (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(encoded[0]);
+ payloadS = encoded[0];
+ payloadB = encoded[1];
+ } else {
+ payloadB = input.payload;
+ payloadS = '';
+ }
+ let protectedHeaderString;
+ let protectedHeaderBytes;
+ if (protectedHeader) {
+ protectedHeaderString = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(JSON.stringify(protectedHeader));
+ protectedHeaderBytes = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(protectedHeaderString);
+ } else {
+ protectedHeaderString = '';
+ protectedHeaderBytes = new Uint8Array();
+ }
+ const data = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["concat"])(protectedHeaderBytes, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])('.'), payloadB);
+ const k = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["prepareKey"])(entry, key, 'sign');
+ const signature = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$signing$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["sign"])(entry, k, data);
+ const jws = {
+ signature: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(signature),
+ payload: payloadS
+ };
+ if (protectedHeader) {
+ jws.protected = protectedHeaderString;
+ }
+ if (unprotectedHeader) {
+ jws.header = unprotectedHeader;
+ }
+ return jws;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/jws_verify.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "prepareVerify",
+ ()=>prepareVerify,
+ "verifyCompact",
+ ()=>verifyCompact,
+ "verifyResult",
+ ()=>verifyResult,
+ "verifySignature",
+ ()=>verifySignature
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$signing$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/signing.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_algorithms$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jws_algorithms.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/buffer_utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/helpers.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/type_checks.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/options.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/key.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+;
+function verifyResult(jws, verified) {
+ const [payload, parsedProt, , key, resolvedKey] = verified;
+ const result = {
+ payload
+ };
+ if (jws.protected !== undefined) {
+ result.protectedHeader = parsedProt;
+ }
+ if (jws.header !== undefined) {
+ result.unprotectedHeader = jws.header;
+ }
+ if (resolvedKey) {
+ return {
+ ...result,
+ key
+ };
+ }
+ return result;
+}
+function prepareVerify(options) {
+ return [
+ options && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["validateAlgorithms"])('algorithms', options.algorithms),
+ options?.crit
+ ];
+}
+async function verifySignature(jws, shared, key) {
+ const { protected: encodedProtected, header, payload: inputPayload } = jws;
+ let parsedProt = {};
+ if (encodedProtected) {
+ parsedProt = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseJoseHeader"])(encodedProtected, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"], 'JWS Protected Header is invalid');
+ }
+ let joseHeader;
+ if (header !== undefined) {
+ if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isDisjoint"])(parsedProt, header)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');
+ }
+ joseHeader = {
+ ...parsedProt,
+ ...header
+ };
+ } else {
+ joseHeader = parsedProt;
+ }
+ const extensions = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["validateCrit"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"], __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$options$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWS_RECOGNIZED"], shared[1], parsedProt, joseHeader);
+ let b64 = true;
+ if (extensions.includes('b64')) {
+ b64 = parsedProt.b64;
+ if (typeof b64 !== 'boolean') {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
+ }
+ }
+ const { alg } = joseHeader;
+ if (typeof alg !== 'string' || !alg) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('JWS "alg" (Algorithm) Header Parameter missing or invalid');
+ }
+ if (shared[0] && !shared[0].has(alg)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JOSEAlgNotAllowed"]('"alg" (Algorithm) Header Parameter value not allowed');
+ }
+ if (b64) {
+ if (typeof inputPayload !== 'string') {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('JWS Payload must be a string');
+ }
+ } else if (typeof inputPayload !== 'string' && !(inputPayload instanceof Uint8Array)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('JWS Payload must be a string or an Uint8Array instance');
+ }
+ let resolvedKey = false;
+ if (typeof key === 'function') {
+ key = await key(parsedProt, jws);
+ resolvedKey = true;
+ }
+ const entry = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jws_algorithms$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["jwsAlgorithm"])(alg);
+ const data = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["concat"])(encodedProtected !== undefined ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])(encodedProtected) : new Uint8Array(), (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encode"])('.'), typeof inputPayload === 'string' ? b64 ? shared[2] ??= (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encodeBase64url"])(inputPayload, 'payload', __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]) : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encoder"].encode(inputPayload) : inputPayload);
+ const signature = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decodeBase64url"])(jws.signature, 'signature', __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]);
+ const k = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["prepareKey"])(entry, key, 'verify');
+ const verified = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$signing$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["verify"])(entry, k, signature, data);
+ if (!verified) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSSignatureVerificationFailed"]();
+ }
+ let payload;
+ if (b64) {
+ payload = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decodeBase64url"])(inputPayload, 'payload', __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]);
+ } else if (typeof inputPayload === 'string') {
+ payload = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encoder"].encode(inputPayload);
+ } else {
+ payload = inputPayload;
+ }
+ return [
+ payload,
+ parsedProt,
+ b64,
+ k,
+ resolvedKey
+ ];
+}
+async function verifyCompact(jws, shared, key) {
+ if (jws instanceof Uint8Array) {
+ jws = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decoder"].decode(jws);
+ }
+ if (typeof jws !== 'string') {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('Compact JWS must be a string or Uint8Array');
+ }
+ const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');
+ if (length !== 3) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWSInvalid"]('Invalid Compact JWS');
+ }
+ return verifySignature({
+ payload,
+ protected: protectedHeader,
+ signature
+ }, shared, key);
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/jwt_claims_set.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "JWTClaimsBuilder",
+ ()=>JWTClaimsBuilder,
+ "secs",
+ ()=>secs,
+ "validateClaimsSet",
+ ()=>validateClaimsSet
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/buffer_utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/type_checks.js [middleware] (ecmascript)");
+;
+;
+;
+const epoch = (date)=>Math.floor(date.getTime() / 1000);
+const multipliers = {
+ s: 1,
+ m: 60,
+ h: 3600,
+ d: 86400,
+ w: 604800,
+ y: 31557600
+};
+const REGEX = /^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;
+const checkFailed = 'check_failed';
+function secs(str) {
+ const matched = REGEX.exec(str);
+ if (!matched || matched[4] && matched[1]) {
+ throw new TypeError('Invalid time period format');
+ }
+ const value = parseFloat(matched[2]);
+ const numericDate = Math.round(value * multipliers[matched[3][0].toLowerCase()]);
+ if (matched[1] === '-' || matched[4] === 'ago') {
+ return -numericDate;
+ }
+ return numericDate;
+}
+function validateInput(label, input) {
+ if (!Number.isFinite(input)) {
+ throw new TypeError(`Invalid ${label} input`);
+ }
+ return input;
+}
+function numericDate(value, label) {
+ if (typeof value === 'number') return validateInput(label, value);
+ if (value instanceof Date) return validateInput(label, epoch(value));
+ return epoch(new Date()) + secs(value);
+}
+const normalizeTyp = (value)=>{
+ if (value.includes('/')) {
+ return value.toLowerCase();
+ }
+ return `application/${value.toLowerCase()}`;
+};
+const checkAudiencePresence = (audPayload, audOption)=>{
+ if (typeof audPayload === 'string') {
+ return audOption.includes(audPayload);
+ }
+ if (Array.isArray(audPayload)) {
+ return audOption.some((aud)=>audPayload.includes(aud));
+ }
+ return false;
+};
+function validateNumericDate(payload, claim, required = false) {
+ const value = payload[claim];
+ if (value === undefined && !required) return undefined;
+ if (typeof value !== 'number') {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimValidationFailed"](`"${claim}" claim must be a number`, payload, claim, 'invalid');
+ }
+ return value;
+}
+function unexpectedClaim(payload, claim) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimValidationFailed"](`unexpected "${claim}" claim value`, payload, claim, checkFailed);
+}
+function validateClaimsSet(protectedHeader, encodedPayload, options = {}) {
+ let payload;
+ try {
+ payload = JSON.parse(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["strictDecoder"].decode(encodedPayload));
+ } catch {}
+ if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isObject"])(payload)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTInvalid"]('JWT Claims Set must be a top-level JSON object');
+ }
+ const { typ } = options;
+ if (typ && (typeof protectedHeader.typ !== 'string' || normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimValidationFailed"]('unexpected "typ" JWT header value', payload, 'typ', checkFailed);
+ }
+ const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;
+ const presenceCheck = [
+ ...requiredClaims
+ ];
+ if (maxTokenAge !== undefined) presenceCheck.push('iat');
+ if (audience !== undefined) presenceCheck.push('aud');
+ if (subject !== undefined) presenceCheck.push('sub');
+ if (issuer !== undefined) presenceCheck.push('iss');
+ for (const claim of new Set(presenceCheck.reverse())){
+ if (!Object.hasOwn(payload, claim)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimValidationFailed"](`missing required "${claim}" claim`, payload, claim, 'missing');
+ }
+ }
+ if (issuer !== undefined && !(Array.isArray(issuer) ? issuer : [
+ issuer
+ ]).includes(payload.iss)) {
+ unexpectedClaim(payload, 'iss');
+ }
+ if (subject !== undefined && payload.sub !== subject) {
+ unexpectedClaim(payload, 'sub');
+ }
+ if (audience !== undefined && !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [
+ audience
+ ] : audience)) {
+ unexpectedClaim(payload, 'aud');
+ }
+ const { clockTolerance } = options;
+ let tolerance = 0;
+ if (typeof clockTolerance === 'string') {
+ tolerance = secs(clockTolerance);
+ } else if (clockTolerance !== undefined) {
+ if (typeof clockTolerance !== 'number') {
+ throw new TypeError('Invalid clockTolerance option type');
+ }
+ tolerance = clockTolerance;
+ }
+ validateInput('clockTolerance option', tolerance);
+ const { currentDate } = options;
+ const now = validateInput('currentDate option', epoch(currentDate || new Date()));
+ const iat = validateNumericDate(payload, 'iat', maxTokenAge !== undefined);
+ const nbf = validateNumericDate(payload, 'nbf');
+ if (nbf !== undefined) {
+ if (nbf > now + tolerance) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimValidationFailed"]('"nbf" claim timestamp check failed', payload, 'nbf', checkFailed);
+ }
+ }
+ const exp = validateNumericDate(payload, 'exp');
+ if (exp !== undefined) {
+ if (exp <= now - tolerance) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTExpired"]('"exp" claim timestamp check failed', payload, 'exp', checkFailed);
+ }
+ }
+ if (maxTokenAge !== undefined) {
+ const age = now - iat;
+ const max = typeof maxTokenAge === 'number' ? maxTokenAge : secs(maxTokenAge);
+ if (age - tolerance > max) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTExpired"]('"iat" claim timestamp check failed (too far in the past)', payload, 'iat', checkFailed);
+ }
+ if (age < 0 - tolerance) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JWTClaimValidationFailed"]('"iat" claim timestamp check failed (it should be in the past)', payload, 'iat', checkFailed);
+ }
+ }
+ return payload;
+}
+class JWTClaimsBuilder {
+ #payload;
+ constructor(payload){
+ if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isObject"])(payload)) {
+ throw new TypeError('JWT Claims Set MUST be an object');
+ }
+ this.#payload = structuredClone(payload);
+ }
+ data() {
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encoder"].encode(JSON.stringify(this.#payload));
+ }
+ get iss() {
+ return this.#payload.iss;
+ }
+ set iss(value) {
+ this.#payload.iss = value;
+ }
+ get sub() {
+ return this.#payload.sub;
+ }
+ set sub(value) {
+ this.#payload.sub = value;
+ }
+ get aud() {
+ return this.#payload.aud;
+ }
+ set aud(value) {
+ this.#payload.aud = value;
+ }
+ set jti(value) {
+ this.#payload.jti = value;
+ }
+ set nbf(value) {
+ this.#payload.nbf = numericDate(value, 'setNotBefore');
+ }
+ set exp(value) {
+ this.#payload.exp = numericDate(value, 'setExpirationTime');
+ }
+ set iat(value) {
+ if (value === undefined) {
+ this.#payload.iat = epoch(new Date());
+ } else if (typeof value === 'string') {
+ this.#payload.iat = validateInput('setIssuedAt', epoch(new Date()) + secs(value));
+ } else {
+ this.#payload.iat = numericDate(value, 'setIssuedAt');
+ }
+ }
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/key.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "checkKeyType",
+ ()=>checkKeyType,
+ "prepareKey",
+ ()=>prepareKey
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$invalid_key_input$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/invalid_key_input.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$is_key_like$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/is_key_like.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/type_checks.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/base64url.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jwk_to_key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/jwk_to_key.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+const tag = (key)=>key[Symbol.toStringTag];
+const jwkMatchesOp = (entry, key, usage)=>{
+ const { alg } = entry;
+ if (key.use !== undefined) {
+ const expected = usage === 'sign' || usage === 'verify' ? 'sig' : 'enc';
+ if (key.use !== expected) {
+ throw new TypeError(`Invalid key for this operation, its "use" must be "${expected}" when present`);
+ }
+ }
+ if (key.alg !== undefined && key.alg !== alg) {
+ throw new TypeError(`Invalid key for this operation, its "alg" must be "${alg}" when present`);
+ }
+ if (Array.isArray(key.key_ops)) {
+ const expectedKeyOp = usage === 'encrypt' || usage === 'decrypt' ? entry.ops?.[usage === 'encrypt' ? 0 : 1] : usage;
+ if (expectedKeyOp && !key.key_ops.includes(expectedKeyOp)) {
+ throw new TypeError(`Invalid key for this operation, its "key_ops" must include "${expectedKeyOp}" when present`);
+ }
+ }
+};
+function checkKeyType(entry, key, usage) {
+ const { alg, secret } = entry;
+ const privateKey = usage === 'decrypt' || usage === 'sign';
+ if (secret && key instanceof Uint8Array) return [
+ BYTES,
+ key
+ ];
+ if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isJWK"](key)) {
+ if (secret ? !__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isSecretJWK"](key) : !(privateKey ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isPrivateJWK"](key) : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$type_checks$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isPublicJWK"](key))) {
+ throw new TypeError(secret ? `JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present` : `JSON Web Key for this operation must be a ${privateKey ? 'private' : 'public'} JWK`);
+ }
+ jwkMatchesOp(entry, key, usage);
+ return [
+ JWK,
+ key
+ ];
+ }
+ if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$is_key_like$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isKeyLike"])(key)) {
+ throw new TypeError(secret ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$invalid_key_input$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["withAlg"])(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key', 'Uint8Array') : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$invalid_key_input$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["withAlg"])(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));
+ }
+ if (secret) {
+ if (key.type !== 'secret') {
+ throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type "secret"`);
+ }
+ } else {
+ if (key.type === 'secret') {
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type "secret"`);
+ }
+ const expectedType = privateKey ? 'private' : 'public';
+ if ((key.type === 'public' || key.type === 'private') && key.type !== expectedType) {
+ const operation = usage === 'sign' ? 'signing' : usage === 'verify' ? 'verifying' : `${usage.slice(0, -1)}tion`;
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithm ${operation} must be of type "${expectedType}"`);
+ }
+ }
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$is_key_like$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isCryptoKey"])(key) ? [
+ CRYPTO,
+ key
+ ] : [
+ KEYOBJECT,
+ key
+ ];
+}
+const BYTES = 0;
+const CRYPTO = 1;
+const KEYOBJECT = 2;
+const JWK = 3;
+let cache;
+const nist = {
+ __proto__: null,
+ prime256v1: 'P-256',
+ secp384r1: 'P-384',
+ secp521r1: 'P-521'
+};
+function cached(key, alg, value) {
+ cache ||= new WeakMap();
+ const entry = cache.get(key);
+ if (value) {
+ if (entry) {
+ entry[alg] = value;
+ } else {
+ cache.set(key, {
+ __proto__: null,
+ [alg]: value
+ });
+ }
+ }
+ return value ?? entry?.[alg];
+}
+const handleJWK = async (key, jwk, entry)=>cached(key, entry.alg) ?? cached(key, entry.alg, await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$jwk_to_key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["jwkToKey"])(entry, {
+ ...jwk,
+ alg: entry.alg
+ }));
+const handleKeyObject = (keyObject, entry)=>{
+ const hit = cached(keyObject, entry.alg);
+ if (hit) return hit;
+ const isPublic = keyObject.type === 'public';
+ const usages = entry.usages[isPublic ? 0 : 1];
+ const { asymmetricKeyType } = keyObject;
+ const crv = nist[keyObject.asymmetricKeyDetails?.namedCurve];
+ const params = entry.resolve?.({
+ crv,
+ asymmetricKeyType
+ }) ?? entry.subtle;
+ return cached(keyObject, entry.alg, keyObject.toCryptoKey(params, isPublic, usages));
+};
+async function prepareKey(entry, key, usage) {
+ const tagged = checkKeyType(entry, key, usage);
+ switch(tagged[0]){
+ case BYTES:
+ case CRYPTO:
+ return tagged[1];
+ case JWK:
+ {
+ const key = tagged[1];
+ if (key.k) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$base64url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decode"])(key.k);
+ }
+ if (!Object.isFrozen(key)) {
+ const { key_ops } = key;
+ if (Array.isArray(key_ops)) Object.freeze(key_ops);
+ Object.freeze(key);
+ }
+ return handleJWK(key, key, entry);
+ }
+ case KEYOBJECT:
+ {
+ const keyObject = tagged[1];
+ if (keyObject.type === 'secret') {
+ return keyObject.export();
+ }
+ if ('toCryptoKey' in keyObject && typeof keyObject.toCryptoKey === 'function') {
+ return handleKeyObject(keyObject, entry);
+ }
+ return handleJWK(keyObject, keyObject.export({
+ format: 'jwk'
+ }), entry);
+ }
+ }
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/key_descriptor.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "table",
+ ()=>table
+]);
+function table(entries) {
+ const out = {
+ __proto__: null
+ };
+ for(const alg in entries){
+ out[alg] = {
+ ...entries[alg],
+ alg
+ };
+ }
+ return out;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/options.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "JWE_RECOGNIZED",
+ ()=>JWE_RECOGNIZED,
+ "JWS_RECOGNIZED",
+ ()=>JWS_RECOGNIZED,
+ "validateAlgorithms",
+ ()=>validateAlgorithms,
+ "validateCrit",
+ ()=>validateCrit,
+ "validateCritDuplicates",
+ ()=>validateCritDuplicates
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)");
+;
+const JWS_RECOGNIZED = {
+ __proto__: null,
+ b64: true
+};
+const JWE_RECOGNIZED = {
+ __proto__: null
+};
+function validateAlgorithms(option, algorithms) {
+ if (algorithms !== undefined && (!Array.isArray(algorithms) || algorithms.some((s)=>typeof s !== 'string'))) {
+ throw new TypeError(`"${option}" option must be an array of strings`);
+ }
+ if (!algorithms) {
+ return undefined;
+ }
+ return new Set(algorithms);
+}
+function validateCritDuplicates(Err, protectedHeader) {
+ const { crit } = protectedHeader ?? {};
+ if (Array.isArray(crit) && new Set(crit).size !== crit.length) {
+ throw new Err('"crit" (Critical) Header Parameter MUST NOT contain duplicate values');
+ }
+}
+function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {
+ if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {
+ throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
+ }
+ if (!protectedHeader || protectedHeader.crit === undefined) {
+ return [];
+ }
+ if (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input)=>typeof input !== 'string' || input.length === 0)) {
+ throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
+ }
+ const recognized = recognizedOption === undefined ? recognizedDefault : {
+ __proto__: null,
+ ...recognizedOption,
+ ...recognizedDefault
+ };
+ for (const parameter of protectedHeader.crit){
+ if (!(parameter in recognized)) {
+ throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$util$2f$errors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["JOSENotSupported"](`Extension Header Parameter "${parameter}" is not recognized`);
+ }
+ if (!Object.hasOwn(joseHeader, parameter) || joseHeader[parameter] === undefined) {
+ throw new Err(`Extension Header Parameter "${parameter}" is missing`);
+ }
+ if (recognized[parameter] && (!Object.hasOwn(protectedHeader, parameter) || protectedHeader[parameter] === undefined)) {
+ throw new Err(`Extension Header Parameter "${parameter}" MUST be integrity protected`);
+ }
+ }
+ return protectedHeader.crit;
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/signing.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "sign",
+ ()=>sign,
+ "verify",
+ ()=>verify
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$crypto_key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/crypto_key.js [middleware] (ecmascript)");
+;
+async function getSigKey(entry, key, usage) {
+ if (key instanceof Uint8Array) {
+ return crypto.subtle.importKey('raw', key, entry.subtle, false, [
+ usage
+ ]);
+ }
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$crypto_key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["checkCryptoKey"])(key, entry.subtle, usage);
+ if (entry.minRsaBits) (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$crypto_key$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["checkModulusLength"])(entry.alg, key);
+ return key;
+}
+async function sign(entry, key, data) {
+ const cryptoKey = await getSigKey(entry, key, 'sign');
+ const signature = await crypto.subtle.sign(entry.signing, cryptoKey, data);
+ return new Uint8Array(signature);
+}
+async function verify(entry, key, signature, data) {
+ const cryptoKey = await getSigKey(entry, key, 'verify');
+ try {
+ return await crypto.subtle.verify(entry.signing, cryptoKey, signature, data);
+ } catch {
+ return false;
+ }
+}
+}),
+"[project]/node_modules/jose/dist/webapi/lib/type_checks.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "isDisjoint",
+ ()=>isDisjoint,
+ "isJWK",
+ ()=>isJWK,
+ "isObject",
+ ()=>isObject,
+ "isPrivateJWK",
+ ()=>isPrivateJWK,
+ "isPublicJWK",
+ ()=>isPublicJWK,
+ "isSecretJWK",
+ ()=>isSecretJWK
+]);
+function isObject(input) {
+ if (typeof input !== 'object' || input === null || Object.prototype.toString.call(input) !== '[object Object]') {
+ return false;
+ }
+ const prototype = Object.getPrototypeOf(input);
+ if (prototype === null) {
+ return true;
+ }
+ let proto = prototype;
+ while(Object.getPrototypeOf(proto) !== null){
+ proto = Object.getPrototypeOf(proto);
+ }
+ return prototype === proto;
+}
+function isDisjoint(...headers) {
+ const parameters = new Set();
+ for (const header of headers){
+ if (!header) continue;
+ for (const parameter of Object.keys(header)){
+ if (parameters.has(parameter)) {
+ return false;
+ }
+ parameters.add(parameter);
+ }
+ }
+ return true;
+}
+const isJWK = (key)=>isObject(key) && typeof key.kty === 'string';
+const isPrivateJWK = (key)=>key.kty !== 'oct' && (key.kty === 'AKP' && typeof key.priv === 'string' || typeof key.d === 'string');
+const isPublicJWK = (key)=>key.kty !== 'oct' && key.d === undefined && key.priv === undefined;
+const isSecretJWK = (key)=>key.kty === 'oct' && typeof key.k === 'string';
+}),
+"[project]/node_modules/jose/dist/webapi/util/base64url.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "decode",
+ ()=>decode,
+ "encode",
+ ()=>encode
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/buffer_utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$base64$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jose/dist/webapi/lib/base64.js [middleware] (ecmascript)");
+;
+;
+const invalid = 'The input to be decoded is not correctly encoded.';
+function decode(input) {
+ if (Uint8Array.fromBase64) {
+ try {
+ return Uint8Array.fromBase64(typeof input === 'string' ? input : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decoder"].decode(input), {
+ alphabet: 'base64url'
+ });
+ } catch (cause) {
+ throw new TypeError(invalid, {
+ cause
+ });
+ }
+ }
+ let encoded = input;
+ if (encoded instanceof Uint8Array) {
+ encoded = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decoder"].decode(encoded);
+ }
+ if (encoded.includes('+') || encoded.includes('/')) {
+ throw new TypeError(invalid);
+ }
+ encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
+ try {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$base64$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decodeBase64"])(encoded);
+ } catch {
+ throw new TypeError(invalid);
+ }
+}
+function encode(input) {
+ let unencoded = input;
+ if (typeof unencoded === 'string') {
+ unencoded = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$buffer_utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encoder"].encode(unencoded);
+ }
+ if (Uint8Array.prototype.toBase64) {
+ return unencoded.toBase64({
+ alphabet: 'base64url',
+ omitPadding: true
+ });
+ }
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jose$2f$dist$2f$webapi$2f$lib$2f$base64$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encodeBase64"])(unencoded).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
+}
+}),
+"[project]/node_modules/jose/dist/webapi/util/errors.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "JOSEAlgNotAllowed",
+ ()=>JOSEAlgNotAllowed,
+ "JOSEError",
+ ()=>JOSEError,
+ "JOSENotSupported",
+ ()=>JOSENotSupported,
+ "JWEDecryptionFailed",
+ ()=>JWEDecryptionFailed,
+ "JWEInvalid",
+ ()=>JWEInvalid,
+ "JWKInvalid",
+ ()=>JWKInvalid,
+ "JWKSInvalid",
+ ()=>JWKSInvalid,
+ "JWKSMultipleMatchingKeys",
+ ()=>JWKSMultipleMatchingKeys,
+ "JWKSNoMatchingKey",
+ ()=>JWKSNoMatchingKey,
+ "JWKSTimeout",
+ ()=>JWKSTimeout,
+ "JWSInvalid",
+ ()=>JWSInvalid,
+ "JWSSignatureVerificationFailed",
+ ()=>JWSSignatureVerificationFailed,
+ "JWTClaimValidationFailed",
+ ()=>JWTClaimValidationFailed,
+ "JWTExpired",
+ ()=>JWTExpired,
+ "JWTInvalid",
+ ()=>JWTInvalid
+]);
+class JOSEError extends Error {
+ static code = 'ERR_JOSE_GENERIC';
+ code = 'ERR_JOSE_GENERIC';
+ constructor(message, options){
+ super(message, options);
+ this.name = this.constructor.name;
+ Error.captureStackTrace?.(this, this.constructor);
+ }
+}
+class JWTClaimValidationFailed extends JOSEError {
+ static code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';
+ code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';
+ claim;
+ reason;
+ payload;
+ constructor(message, payload, claim = 'unspecified', reason = 'unspecified'){
+ super(message, {
+ cause: {
+ claim,
+ reason,
+ payload
+ }
+ });
+ this.claim = claim;
+ this.reason = reason;
+ this.payload = payload;
+ }
+}
+class JWTExpired extends JOSEError {
+ static code = 'ERR_JWT_EXPIRED';
+ code = 'ERR_JWT_EXPIRED';
+ claim;
+ reason;
+ payload;
+ constructor(message, payload, claim = 'unspecified', reason = 'unspecified'){
+ super(message, {
+ cause: {
+ claim,
+ reason,
+ payload
+ }
+ });
+ this.claim = claim;
+ this.reason = reason;
+ this.payload = payload;
+ }
+}
+class JOSEAlgNotAllowed extends JOSEError {
+ static code = 'ERR_JOSE_ALG_NOT_ALLOWED';
+ code = 'ERR_JOSE_ALG_NOT_ALLOWED';
+}
+class JOSENotSupported extends JOSEError {
+ static code = 'ERR_JOSE_NOT_SUPPORTED';
+ code = 'ERR_JOSE_NOT_SUPPORTED';
+}
+class JWEDecryptionFailed extends JOSEError {
+ static code = 'ERR_JWE_DECRYPTION_FAILED';
+ code = 'ERR_JWE_DECRYPTION_FAILED';
+ constructor(message = 'decryption operation failed', options){
+ super(message, options);
+ }
+}
+class JWEInvalid extends JOSEError {
+ static code = 'ERR_JWE_INVALID';
+ code = 'ERR_JWE_INVALID';
+}
+class JWSInvalid extends JOSEError {
+ static code = 'ERR_JWS_INVALID';
+ code = 'ERR_JWS_INVALID';
+}
+class JWTInvalid extends JOSEError {
+ static code = 'ERR_JWT_INVALID';
+ code = 'ERR_JWT_INVALID';
+}
+class JWKInvalid extends JOSEError {
+ static code = 'ERR_JWK_INVALID';
+ code = 'ERR_JWK_INVALID';
+}
+class JWKSInvalid extends JOSEError {
+ static code = 'ERR_JWKS_INVALID';
+ code = 'ERR_JWKS_INVALID';
+}
+class JWKSNoMatchingKey extends JOSEError {
+ static code = 'ERR_JWKS_NO_MATCHING_KEY';
+ code = 'ERR_JWKS_NO_MATCHING_KEY';
+ constructor(message = 'no applicable key found in the JSON Web Key Set', options){
+ super(message, options);
+ }
+}
+class JWKSMultipleMatchingKeys extends JOSEError {
+ [Symbol.asyncIterator] = async function*() {};
+ static code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';
+ code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';
+ constructor(message = 'multiple matching keys found in the JSON Web Key Set', options){
+ super(message, options);
+ }
+}
+class JWKSTimeout extends JOSEError {
+ static code = 'ERR_JWKS_TIMEOUT';
+ code = 'ERR_JWKS_TIMEOUT';
+ constructor(message = 'request timed out', options){
+ super(message, options);
+ }
+}
+class JWSSignatureVerificationFailed extends JOSEError {
+ static code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';
+ code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';
+ constructor(message = 'signature verification failed', options){
+ super(message, options);
+ }
+}
+}),
+"[project]/node_modules/next/dist/client/components/hooks-server-context.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+0 && (module.exports = {
+ DynamicServerError: null,
+ isDynamicServerError: null
+});
+function _export(target, all) {
+ for(var name in all)Object.defineProperty(target, name, {
+ enumerable: true,
+ get: all[name]
+ });
+}
+_export(exports, {
+ DynamicServerError: function() {
+ return DynamicServerError;
+ },
+ isDynamicServerError: function() {
+ return isDynamicServerError;
+ }
+});
+const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE';
+class DynamicServerError extends Error {
+ constructor(description){
+ super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE;
+ }
+}
+function isDynamicServerError(err) {
+ if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') {
+ return false;
+ }
+ return err.digest === DYNAMIC_ERROR_CODE;
+}
+if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
+ Object.defineProperty(exports.default, '__esModule', {
+ value: true
+ });
+ Object.assign(exports.default, exports);
+ module.exports = exports.default;
+}
+}),
+"[project]/node_modules/next/dist/client/components/static-generation-bailout.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+0 && (module.exports = {
+ StaticGenBailoutError: null,
+ isStaticGenBailoutError: null
+});
+function _export(target, all) {
+ for(var name in all)Object.defineProperty(target, name, {
+ enumerable: true,
+ get: all[name]
+ });
+}
+_export(exports, {
+ StaticGenBailoutError: function() {
+ return StaticGenBailoutError;
+ },
+ isStaticGenBailoutError: function() {
+ return isStaticGenBailoutError;
+ }
+});
+const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT';
+class StaticGenBailoutError extends Error {
+ constructor(...args){
+ super(...args), this.code = NEXT_STATIC_GEN_BAILOUT;
+ }
+}
+function isStaticGenBailoutError(error) {
+ if (typeof error !== 'object' || error === null || !('code' in error)) {
+ return false;
+ }
+ return error.code === NEXT_STATIC_GEN_BAILOUT;
+}
+if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
+ Object.defineProperty(exports.default, '__esModule', {
+ value: true
+ });
+ Object.assign(exports.default, exports);
+ module.exports = exports.default;
+}
+}),
+"[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all)=>{
+ for(var name in all)__defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+};
+var __copyProps = (to, from, except, desc)=>{
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
+ get: ()=>from[key],
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
+ });
+ }
+ return to;
+};
+var __toCommonJS = (mod)=>__copyProps(__defProp({}, "__esModule", {
+ value: true
+ }), mod);
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+ RequestCookies: ()=>RequestCookies,
+ ResponseCookies: ()=>ResponseCookies,
+ parseCookie: ()=>parseCookie,
+ parseSetCookie: ()=>parseSetCookie,
+ stringifyCookie: ()=>stringifyCookie
+});
+module.exports = __toCommonJS(src_exports);
+// src/serialize.ts
+function stringifyCookie(c) {
+ var _a;
+ const attrs = [
+ "path" in c && c.path && `Path=${c.path}`,
+ "expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`,
+ "maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`,
+ "domain" in c && c.domain && `Domain=${c.domain}`,
+ "secure" in c && c.secure && "Secure",
+ "httpOnly" in c && c.httpOnly && "HttpOnly",
+ "sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`,
+ "partitioned" in c && c.partitioned && "Partitioned",
+ "priority" in c && c.priority && `Priority=${c.priority}`
+ ].filter(Boolean);
+ const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`;
+ return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`;
+}
+function parseCookie(cookie) {
+ const map = /* @__PURE__ */ new Map();
+ for (const pair of cookie.split(/; */)){
+ if (!pair) continue;
+ const splitAt = pair.indexOf("=");
+ if (splitAt === -1) {
+ map.set(pair, "true");
+ continue;
+ }
+ const [key, value] = [
+ pair.slice(0, splitAt),
+ pair.slice(splitAt + 1)
+ ];
+ try {
+ map.set(key, decodeURIComponent(value != null ? value : "true"));
+ } catch {}
+ }
+ return map;
+}
+function parseSetCookie(setCookie) {
+ if (!setCookie) {
+ return void 0;
+ }
+ const [[name, value], ...attributes] = parseCookie(setCookie);
+ const { domain, expires, httponly, maxage, path, samesite, secure, partitioned, priority } = Object.fromEntries(attributes.map(([key, value2])=>[
+ key.toLowerCase().replace(/-/g, ""),
+ value2
+ ]));
+ const cookie = {
+ name,
+ value: decodeURIComponent(value),
+ domain,
+ ...expires && {
+ expires: new Date(expires)
+ },
+ ...httponly && {
+ httpOnly: true
+ },
+ ...typeof maxage === "string" && {
+ maxAge: Number(maxage)
+ },
+ path,
+ ...samesite && {
+ sameSite: parseSameSite(samesite)
+ },
+ ...secure && {
+ secure: true
+ },
+ ...priority && {
+ priority: parsePriority(priority)
+ },
+ ...partitioned && {
+ partitioned: true
+ }
+ };
+ return compact(cookie);
+}
+function compact(t) {
+ const newT = {};
+ for(const key in t){
+ if (t[key]) {
+ newT[key] = t[key];
+ }
+ }
+ return newT;
+}
+var SAME_SITE = [
+ "strict",
+ "lax",
+ "none"
+];
+function parseSameSite(string) {
+ string = string.toLowerCase();
+ return SAME_SITE.includes(string) ? string : void 0;
+}
+var PRIORITY = [
+ "low",
+ "medium",
+ "high"
+];
+function parsePriority(string) {
+ string = string.toLowerCase();
+ return PRIORITY.includes(string) ? string : void 0;
+}
+function splitCookiesString(cookiesString) {
+ if (!cookiesString) return [];
+ var cookiesStrings = [];
+ var pos = 0;
+ var start;
+ var ch;
+ var lastComma;
+ var nextStart;
+ var cookiesSeparatorFound;
+ function skipWhitespace() {
+ while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){
+ pos += 1;
+ }
+ return pos < cookiesString.length;
+ }
+ function notSpecialChar() {
+ ch = cookiesString.charAt(pos);
+ return ch !== "=" && ch !== ";" && ch !== ",";
+ }
+ while(pos < cookiesString.length){
+ start = pos;
+ cookiesSeparatorFound = false;
+ while(skipWhitespace()){
+ ch = cookiesString.charAt(pos);
+ if (ch === ",") {
+ lastComma = pos;
+ pos += 1;
+ skipWhitespace();
+ nextStart = pos;
+ while(pos < cookiesString.length && notSpecialChar()){
+ pos += 1;
+ }
+ if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
+ cookiesSeparatorFound = true;
+ pos = nextStart;
+ cookiesStrings.push(cookiesString.substring(start, lastComma));
+ start = pos;
+ } else {
+ pos = lastComma + 1;
+ }
+ } else {
+ pos += 1;
+ }
+ }
+ if (!cookiesSeparatorFound || pos >= cookiesString.length) {
+ cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
+ }
+ }
+ return cookiesStrings;
+}
+// src/request-cookies.ts
+var RequestCookies = class {
+ constructor(requestHeaders){
+ /** @internal */ this._parsed = /* @__PURE__ */ new Map();
+ this._headers = requestHeaders;
+ const header = requestHeaders.get("cookie");
+ if (header) {
+ const parsed = parseCookie(header);
+ for (const [name, value] of parsed){
+ this._parsed.set(name, {
+ name,
+ value
+ });
+ }
+ }
+ }
+ [Symbol.iterator]() {
+ return this._parsed[Symbol.iterator]();
+ }
+ /**
+ * The amount of cookies received from the client
+ */ get size() {
+ return this._parsed.size;
+ }
+ get(...args) {
+ const name = typeof args[0] === "string" ? args[0] : args[0].name;
+ return this._parsed.get(name);
+ }
+ getAll(...args) {
+ var _a;
+ const all = Array.from(this._parsed);
+ if (!args.length) {
+ return all.map(([_, value])=>value);
+ }
+ const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;
+ return all.filter(([n])=>n === name).map(([_, value])=>value);
+ }
+ has(name) {
+ return this._parsed.has(name);
+ }
+ set(...args) {
+ const [name, value] = args.length === 1 ? [
+ args[0].name,
+ args[0].value
+ ] : args;
+ const map = this._parsed;
+ map.set(name, {
+ name,
+ value
+ });
+ this._headers.set("cookie", Array.from(map).map(([_, value2])=>stringifyCookie(value2)).join("; "));
+ return this;
+ }
+ /**
+ * Delete the cookies matching the passed name or names in the request.
+ */ delete(names) {
+ const map = this._parsed;
+ const result = !Array.isArray(names) ? map.delete(names) : names.map((name)=>map.delete(name));
+ this._headers.set("cookie", Array.from(map).map(([_, value])=>stringifyCookie(value)).join("; "));
+ return result;
+ }
+ /**
+ * Delete all the cookies in the cookies in the request.
+ */ clear() {
+ this.delete(Array.from(this._parsed.keys()));
+ return this;
+ }
+ /**
+ * Format the cookies in the request as a string for logging
+ */ [Symbol.for("edge-runtime.inspect.custom")]() {
+ return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;
+ }
+ toString() {
+ return [
+ ...this._parsed.values()
+ ].map((v)=>`${v.name}=${encodeURIComponent(v.value)}`).join("; ");
+ }
+};
+// src/response-cookies.ts
+var ResponseCookies = class {
+ constructor(responseHeaders){
+ /** @internal */ this._parsed = /* @__PURE__ */ new Map();
+ var _a, _b, _c;
+ this._headers = responseHeaders;
+ const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : [];
+ const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);
+ for (const cookieString of cookieStrings){
+ const parsed = parseSetCookie(cookieString);
+ if (parsed) this._parsed.set(parsed.name, parsed);
+ }
+ }
+ /**
+ * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.
+ */ get(...args) {
+ const key = typeof args[0] === "string" ? args[0] : args[0].name;
+ return this._parsed.get(key);
+ }
+ /**
+ * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.
+ */ getAll(...args) {
+ var _a;
+ const all = Array.from(this._parsed.values());
+ if (!args.length) {
+ return all;
+ }
+ const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;
+ return all.filter((c)=>c.name === key);
+ }
+ has(name) {
+ return this._parsed.has(name);
+ }
+ /**
+ * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.
+ */ set(...args) {
+ const [name, value, cookie] = args.length === 1 ? [
+ args[0].name,
+ args[0].value,
+ args[0]
+ ] : args;
+ const map = this._parsed;
+ map.set(name, normalizeCookie({
+ name,
+ value,
+ ...cookie
+ }));
+ replace(map, this._headers);
+ return this;
+ }
+ /**
+ * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.
+ */ delete(...args) {
+ const [name, options] = typeof args[0] === "string" ? [
+ args[0]
+ ] : [
+ args[0].name,
+ args[0]
+ ];
+ return this.set({
+ ...options,
+ name,
+ value: "",
+ expires: /* @__PURE__ */ new Date(0)
+ });
+ }
+ [Symbol.for("edge-runtime.inspect.custom")]() {
+ return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;
+ }
+ toString() {
+ return [
+ ...this._parsed.values()
+ ].map(stringifyCookie).join("; ");
+ }
+};
+function replace(bag, headers) {
+ headers.delete("set-cookie");
+ for (const [, value] of bag){
+ const serialized = stringifyCookie(value);
+ headers.append("set-cookie", serialized);
+ }
+}
+function normalizeCookie(cookie = {
+ name: "",
+ value: ""
+}) {
+ if (typeof cookie.expires === "number") {
+ cookie.expires = new Date(cookie.expires);
+ }
+ if (cookie.maxAge) {
+ cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);
+ }
+ if (cookie.path === null || cookie.path === void 0) {
+ cookie.path = "/";
+ }
+ return cookie;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+ RequestCookies,
+ ResponseCookies,
+ parseCookie,
+ parseSetCookie,
+ stringifyCookie
+});
+}),
+"[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+
+(()=>{
+ "use strict";
+ var e = {
+ 912: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.ContextAPI = void 0;
+ const n = r(108);
+ const a = r(221);
+ const o = r(44);
+ const i = "context";
+ const c = new n.NoopContextManager;
+ class ContextAPI {
+ constructor(){}
+ static getInstance() {
+ if (!this._instance) {
+ this._instance = new ContextAPI;
+ }
+ return this._instance;
+ }
+ setGlobalContextManager(e) {
+ return (0, a.registerGlobal)(i, e, o.DiagAPI.instance());
+ }
+ active() {
+ return this._getContextManager().active();
+ }
+ with(e, t, r, ...n) {
+ return this._getContextManager().with(e, t, r, ...n);
+ }
+ bind(e, t) {
+ return this._getContextManager().bind(e, t);
+ }
+ _getContextManager() {
+ return (0, a.getGlobal)(i) || c;
+ }
+ disable() {
+ this._getContextManager().disable();
+ (0, a.unregisterGlobal)(i, o.DiagAPI.instance());
+ }
+ }
+ t.ContextAPI = ContextAPI;
+ },
+ 44: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.DiagAPI = void 0;
+ const n = r(757);
+ const a = r(412);
+ const o = r(711);
+ const i = r(221);
+ const c = "diag";
+ class DiagAPI {
+ constructor(){
+ function _logProxy(e) {
+ return function(...t) {
+ const r = (0, i.getGlobal)("diag");
+ if (!r) return;
+ return r[e](...t);
+ };
+ }
+ const e = this;
+ const setLogger = (t, r = {
+ logLevel: o.DiagLogLevel.INFO
+ })=>{
+ var n, c, s;
+ if (t === e) {
+ const t = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");
+ e.error((n = t.stack) !== null && n !== void 0 ? n : t.message);
+ return false;
+ }
+ if (typeof r === "number") {
+ r = {
+ logLevel: r
+ };
+ }
+ const u = (0, i.getGlobal)("diag");
+ const l = (0, a.createLogLevelDiagLogger)((c = r.logLevel) !== null && c !== void 0 ? c : o.DiagLogLevel.INFO, t);
+ if (u && !r.suppressOverrideMessage) {
+ const e = (s = (new Error).stack) !== null && s !== void 0 ? s : "";
+ u.warn(`Current logger will be overwritten from ${e}`);
+ l.warn(`Current logger will overwrite one already registered from ${e}`);
+ }
+ return (0, i.registerGlobal)("diag", l, e, true);
+ };
+ e.setLogger = setLogger;
+ e.disable = ()=>{
+ (0, i.unregisterGlobal)(c, e);
+ };
+ e.createComponentLogger = (e)=>new n.DiagComponentLogger(e);
+ e.verbose = _logProxy("verbose");
+ e.debug = _logProxy("debug");
+ e.info = _logProxy("info");
+ e.warn = _logProxy("warn");
+ e.error = _logProxy("error");
+ }
+ static instance() {
+ if (!this._instance) {
+ this._instance = new DiagAPI;
+ }
+ return this._instance;
+ }
+ }
+ t.DiagAPI = DiagAPI;
+ },
+ 262: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.MetricsAPI = void 0;
+ const n = r(586);
+ const a = r(221);
+ const o = r(44);
+ const i = "metrics";
+ class MetricsAPI {
+ constructor(){}
+ static getInstance() {
+ if (!this._instance) {
+ this._instance = new MetricsAPI;
+ }
+ return this._instance;
+ }
+ setGlobalMeterProvider(e) {
+ return (0, a.registerGlobal)(i, e, o.DiagAPI.instance());
+ }
+ getMeterProvider() {
+ return (0, a.getGlobal)(i) || n.NOOP_METER_PROVIDER;
+ }
+ getMeter(e, t, r) {
+ return this.getMeterProvider().getMeter(e, t, r);
+ }
+ disable() {
+ (0, a.unregisterGlobal)(i, o.DiagAPI.instance());
+ }
+ }
+ t.MetricsAPI = MetricsAPI;
+ },
+ 25: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.PropagationAPI = void 0;
+ const n = r(221);
+ const a = r(19);
+ const o = r(92);
+ const i = r(398);
+ const c = r(504);
+ const s = r(44);
+ const u = "propagation";
+ const l = new a.NoopTextMapPropagator;
+ class PropagationAPI {
+ constructor(){
+ this.createBaggage = c.createBaggage;
+ this.getBaggage = i.getBaggage;
+ this.getActiveBaggage = i.getActiveBaggage;
+ this.setBaggage = i.setBaggage;
+ this.deleteBaggage = i.deleteBaggage;
+ }
+ static getInstance() {
+ if (!this._instance) {
+ this._instance = new PropagationAPI;
+ }
+ return this._instance;
+ }
+ setGlobalPropagator(e) {
+ return (0, n.registerGlobal)(u, e, s.DiagAPI.instance());
+ }
+ inject(e, t, r = o.defaultTextMapSetter) {
+ return this._getGlobalPropagator().inject(e, t, r);
+ }
+ extract(e, t, r = o.defaultTextMapGetter) {
+ return this._getGlobalPropagator().extract(e, t, r);
+ }
+ fields() {
+ return this._getGlobalPropagator().fields();
+ }
+ disable() {
+ (0, n.unregisterGlobal)(u, s.DiagAPI.instance());
+ }
+ _getGlobalPropagator() {
+ return (0, n.getGlobal)(u) || l;
+ }
+ }
+ t.PropagationAPI = PropagationAPI;
+ },
+ 397: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.TraceAPI = void 0;
+ const n = r(221);
+ const a = r(498);
+ const o = r(477);
+ const i = r(793);
+ const c = r(44);
+ const s = "trace";
+ class TraceAPI {
+ constructor(){
+ this._proxyTracerProvider = new a.ProxyTracerProvider;
+ this.wrapSpanContext = o.wrapSpanContext;
+ this.isSpanContextValid = o.isSpanContextValid;
+ this.deleteSpan = i.deleteSpan;
+ this.getSpan = i.getSpan;
+ this.getActiveSpan = i.getActiveSpan;
+ this.getSpanContext = i.getSpanContext;
+ this.setSpan = i.setSpan;
+ this.setSpanContext = i.setSpanContext;
+ }
+ static getInstance() {
+ if (!this._instance) {
+ this._instance = new TraceAPI;
+ }
+ return this._instance;
+ }
+ setGlobalTracerProvider(e) {
+ const t = (0, n.registerGlobal)(s, this._proxyTracerProvider, c.DiagAPI.instance());
+ if (t) {
+ this._proxyTracerProvider.setDelegate(e);
+ }
+ return t;
+ }
+ getTracerProvider() {
+ return (0, n.getGlobal)(s) || this._proxyTracerProvider;
+ }
+ getTracer(e, t) {
+ return this.getTracerProvider().getTracer(e, t);
+ }
+ disable() {
+ (0, n.unregisterGlobal)(s, c.DiagAPI.instance());
+ this._proxyTracerProvider = new a.ProxyTracerProvider;
+ }
+ }
+ t.TraceAPI = TraceAPI;
+ },
+ 398: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.deleteBaggage = t.setBaggage = t.getActiveBaggage = t.getBaggage = void 0;
+ const n = r(912);
+ const a = r(23);
+ const o = (0, a.createContextKey)("OpenTelemetry Baggage Key");
+ function getBaggage(e) {
+ return e.getValue(o) || undefined;
+ }
+ t.getBaggage = getBaggage;
+ function getActiveBaggage() {
+ return getBaggage(n.ContextAPI.getInstance().active());
+ }
+ t.getActiveBaggage = getActiveBaggage;
+ function setBaggage(e, t) {
+ return e.setValue(o, t);
+ }
+ t.setBaggage = setBaggage;
+ function deleteBaggage(e) {
+ return e.deleteValue(o);
+ }
+ t.deleteBaggage = deleteBaggage;
+ },
+ 152: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.BaggageImpl = void 0;
+ class BaggageImpl {
+ constructor(e){
+ this._entries = e ? new Map(e) : new Map;
+ }
+ getEntry(e) {
+ const t = this._entries.get(e);
+ if (!t) {
+ return undefined;
+ }
+ return Object.assign({}, t);
+ }
+ getAllEntries() {
+ return Array.from(this._entries.entries()).map(([e, t])=>[
+ e,
+ t
+ ]);
+ }
+ setEntry(e, t) {
+ const r = new BaggageImpl(this._entries);
+ r._entries.set(e, t);
+ return r;
+ }
+ removeEntry(e) {
+ const t = new BaggageImpl(this._entries);
+ t._entries.delete(e);
+ return t;
+ }
+ removeEntries(...e) {
+ const t = new BaggageImpl(this._entries);
+ for (const r of e){
+ t._entries.delete(r);
+ }
+ return t;
+ }
+ clear() {
+ return new BaggageImpl;
+ }
+ }
+ t.BaggageImpl = BaggageImpl;
+ },
+ 647: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.baggageEntryMetadataSymbol = void 0;
+ t.baggageEntryMetadataSymbol = Symbol("BaggageEntryMetadata");
+ },
+ 504: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.baggageEntryMetadataFromString = t.createBaggage = void 0;
+ const n = r(44);
+ const a = r(152);
+ const o = r(647);
+ const i = n.DiagAPI.instance();
+ function createBaggage(e = {}) {
+ return new a.BaggageImpl(new Map(Object.entries(e)));
+ }
+ t.createBaggage = createBaggage;
+ function baggageEntryMetadataFromString(e) {
+ if (typeof e !== "string") {
+ i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);
+ e = "";
+ }
+ return {
+ __TYPE__: o.baggageEntryMetadataSymbol,
+ toString () {
+ return e;
+ }
+ };
+ }
+ t.baggageEntryMetadataFromString = baggageEntryMetadataFromString;
+ },
+ 778: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.context = void 0;
+ const n = r(912);
+ t.context = n.ContextAPI.getInstance();
+ },
+ 108: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.NoopContextManager = void 0;
+ const n = r(23);
+ class NoopContextManager {
+ active() {
+ return n.ROOT_CONTEXT;
+ }
+ with(e, t, r, ...n) {
+ return t.call(r, ...n);
+ }
+ bind(e, t) {
+ return t;
+ }
+ enable() {
+ return this;
+ }
+ disable() {
+ return this;
+ }
+ }
+ t.NoopContextManager = NoopContextManager;
+ },
+ 23: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.ROOT_CONTEXT = t.createContextKey = void 0;
+ function createContextKey(e) {
+ return Symbol.for(e);
+ }
+ t.createContextKey = createContextKey;
+ class BaseContext {
+ constructor(e){
+ const t = this;
+ t._currentContext = e ? new Map(e) : new Map;
+ t.getValue = (e)=>t._currentContext.get(e);
+ t.setValue = (e, r)=>{
+ const n = new BaseContext(t._currentContext);
+ n._currentContext.set(e, r);
+ return n;
+ };
+ t.deleteValue = (e)=>{
+ const r = new BaseContext(t._currentContext);
+ r._currentContext.delete(e);
+ return r;
+ };
+ }
+ }
+ t.ROOT_CONTEXT = new BaseContext;
+ },
+ 304: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.diag = void 0;
+ const n = r(44);
+ t.diag = n.DiagAPI.instance();
+ },
+ 757: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.DiagComponentLogger = void 0;
+ const n = r(221);
+ class DiagComponentLogger {
+ constructor(e){
+ this._namespace = e.namespace || "DiagComponentLogger";
+ }
+ debug(...e) {
+ return logProxy("debug", this._namespace, e);
+ }
+ error(...e) {
+ return logProxy("error", this._namespace, e);
+ }
+ info(...e) {
+ return logProxy("info", this._namespace, e);
+ }
+ warn(...e) {
+ return logProxy("warn", this._namespace, e);
+ }
+ verbose(...e) {
+ return logProxy("verbose", this._namespace, e);
+ }
+ }
+ t.DiagComponentLogger = DiagComponentLogger;
+ function logProxy(e, t, r) {
+ const a = (0, n.getGlobal)("diag");
+ if (!a) {
+ return;
+ }
+ r.unshift(t);
+ return a[e](...r);
+ }
+ },
+ 83: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.DiagConsoleLogger = void 0;
+ const r = [
+ {
+ n: "error",
+ c: "error"
+ },
+ {
+ n: "warn",
+ c: "warn"
+ },
+ {
+ n: "info",
+ c: "info"
+ },
+ {
+ n: "debug",
+ c: "debug"
+ },
+ {
+ n: "verbose",
+ c: "trace"
+ }
+ ];
+ class DiagConsoleLogger {
+ constructor(){
+ function _consoleFunc(e) {
+ return function(...t) {
+ if (console) {
+ let r = console[e];
+ if (typeof r !== "function") {
+ r = console.log;
+ }
+ if (typeof r === "function") {
+ return r.apply(console, t);
+ }
+ }
+ };
+ }
+ for(let e = 0; e < r.length; e++){
+ this[r[e].n] = _consoleFunc(r[e].c);
+ }
+ }
+ }
+ t.DiagConsoleLogger = DiagConsoleLogger;
+ },
+ 412: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.createLogLevelDiagLogger = void 0;
+ const n = r(711);
+ function createLogLevelDiagLogger(e, t) {
+ if (e < n.DiagLogLevel.NONE) {
+ e = n.DiagLogLevel.NONE;
+ } else if (e > n.DiagLogLevel.ALL) {
+ e = n.DiagLogLevel.ALL;
+ }
+ t = t || {};
+ function _filterFunc(r, n) {
+ const a = t[r];
+ if (typeof a === "function" && e >= n) {
+ return a.bind(t);
+ }
+ return function() {};
+ }
+ return {
+ error: _filterFunc("error", n.DiagLogLevel.ERROR),
+ warn: _filterFunc("warn", n.DiagLogLevel.WARN),
+ info: _filterFunc("info", n.DiagLogLevel.INFO),
+ debug: _filterFunc("debug", n.DiagLogLevel.DEBUG),
+ verbose: _filterFunc("verbose", n.DiagLogLevel.VERBOSE)
+ };
+ }
+ t.createLogLevelDiagLogger = createLogLevelDiagLogger;
+ },
+ 711: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.DiagLogLevel = void 0;
+ var r;
+ (function(e) {
+ e[e["NONE"] = 0] = "NONE";
+ e[e["ERROR"] = 30] = "ERROR";
+ e[e["WARN"] = 50] = "WARN";
+ e[e["INFO"] = 60] = "INFO";
+ e[e["DEBUG"] = 70] = "DEBUG";
+ e[e["VERBOSE"] = 80] = "VERBOSE";
+ e[e["ALL"] = 9999] = "ALL";
+ })(r = t.DiagLogLevel || (t.DiagLogLevel = {}));
+ },
+ 221: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.unregisterGlobal = t.getGlobal = t.registerGlobal = void 0;
+ const n = r(678);
+ const a = r(652);
+ const o = r(662);
+ const i = a.VERSION.split(".")[0];
+ const c = Symbol.for(`opentelemetry.js.api.${i}`);
+ const s = n._globalThis;
+ function registerGlobal(e, t, r, n = false) {
+ var o;
+ const i = s[c] = (o = s[c]) !== null && o !== void 0 ? o : {
+ version: a.VERSION
+ };
+ if (!n && i[e]) {
+ const t = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);
+ r.error(t.stack || t.message);
+ return false;
+ }
+ if (i.version !== a.VERSION) {
+ const t = new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);
+ r.error(t.stack || t.message);
+ return false;
+ }
+ i[e] = t;
+ r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);
+ return true;
+ }
+ t.registerGlobal = registerGlobal;
+ function getGlobal(e) {
+ var t, r;
+ const n = (t = s[c]) === null || t === void 0 ? void 0 : t.version;
+ if (!n || !(0, o.isCompatible)(n)) {
+ return;
+ }
+ return (r = s[c]) === null || r === void 0 ? void 0 : r[e];
+ }
+ t.getGlobal = getGlobal;
+ function unregisterGlobal(e, t) {
+ t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);
+ const r = s[c];
+ if (r) {
+ delete r[e];
+ }
+ }
+ t.unregisterGlobal = unregisterGlobal;
+ },
+ 662: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.isCompatible = t._makeCompatibilityCheck = void 0;
+ const n = r(652);
+ const a = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
+ function _makeCompatibilityCheck(e) {
+ const t = new Set([
+ e
+ ]);
+ const r = new Set;
+ const n = e.match(a);
+ if (!n) {
+ return ()=>false;
+ }
+ const o = {
+ major: +n[1],
+ minor: +n[2],
+ patch: +n[3],
+ prerelease: n[4]
+ };
+ if (o.prerelease != null) {
+ return function isExactmatch(t) {
+ return t === e;
+ };
+ }
+ function _reject(e) {
+ r.add(e);
+ return false;
+ }
+ function _accept(e) {
+ t.add(e);
+ return true;
+ }
+ return function isCompatible(e) {
+ if (t.has(e)) {
+ return true;
+ }
+ if (r.has(e)) {
+ return false;
+ }
+ const n = e.match(a);
+ if (!n) {
+ return _reject(e);
+ }
+ const i = {
+ major: +n[1],
+ minor: +n[2],
+ patch: +n[3],
+ prerelease: n[4]
+ };
+ if (i.prerelease != null) {
+ return _reject(e);
+ }
+ if (o.major !== i.major) {
+ return _reject(e);
+ }
+ if (o.major === 0) {
+ if (o.minor === i.minor && o.patch <= i.patch) {
+ return _accept(e);
+ }
+ return _reject(e);
+ }
+ if (o.minor <= i.minor) {
+ return _accept(e);
+ }
+ return _reject(e);
+ };
+ }
+ t._makeCompatibilityCheck = _makeCompatibilityCheck;
+ t.isCompatible = _makeCompatibilityCheck(n.VERSION);
+ },
+ 120: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.metrics = void 0;
+ const n = r(262);
+ t.metrics = n.MetricsAPI.getInstance();
+ },
+ 532: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.ValueType = void 0;
+ var r;
+ (function(e) {
+ e[e["INT"] = 0] = "INT";
+ e[e["DOUBLE"] = 1] = "DOUBLE";
+ })(r = t.ValueType || (t.ValueType = {}));
+ },
+ 440: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.createNoopMeter = t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = t.NOOP_OBSERVABLE_GAUGE_METRIC = t.NOOP_OBSERVABLE_COUNTER_METRIC = t.NOOP_UP_DOWN_COUNTER_METRIC = t.NOOP_HISTOGRAM_METRIC = t.NOOP_COUNTER_METRIC = t.NOOP_METER = t.NoopObservableUpDownCounterMetric = t.NoopObservableGaugeMetric = t.NoopObservableCounterMetric = t.NoopObservableMetric = t.NoopHistogramMetric = t.NoopUpDownCounterMetric = t.NoopCounterMetric = t.NoopMetric = t.NoopMeter = void 0;
+ class NoopMeter {
+ constructor(){}
+ createHistogram(e, r) {
+ return t.NOOP_HISTOGRAM_METRIC;
+ }
+ createCounter(e, r) {
+ return t.NOOP_COUNTER_METRIC;
+ }
+ createUpDownCounter(e, r) {
+ return t.NOOP_UP_DOWN_COUNTER_METRIC;
+ }
+ createObservableGauge(e, r) {
+ return t.NOOP_OBSERVABLE_GAUGE_METRIC;
+ }
+ createObservableCounter(e, r) {
+ return t.NOOP_OBSERVABLE_COUNTER_METRIC;
+ }
+ createObservableUpDownCounter(e, r) {
+ return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;
+ }
+ addBatchObservableCallback(e, t) {}
+ removeBatchObservableCallback(e) {}
+ }
+ t.NoopMeter = NoopMeter;
+ class NoopMetric {
+ }
+ t.NoopMetric = NoopMetric;
+ class NoopCounterMetric extends NoopMetric {
+ add(e, t) {}
+ }
+ t.NoopCounterMetric = NoopCounterMetric;
+ class NoopUpDownCounterMetric extends NoopMetric {
+ add(e, t) {}
+ }
+ t.NoopUpDownCounterMetric = NoopUpDownCounterMetric;
+ class NoopHistogramMetric extends NoopMetric {
+ record(e, t) {}
+ }
+ t.NoopHistogramMetric = NoopHistogramMetric;
+ class NoopObservableMetric {
+ addCallback(e) {}
+ removeCallback(e) {}
+ }
+ t.NoopObservableMetric = NoopObservableMetric;
+ class NoopObservableCounterMetric extends NoopObservableMetric {
+ }
+ t.NoopObservableCounterMetric = NoopObservableCounterMetric;
+ class NoopObservableGaugeMetric extends NoopObservableMetric {
+ }
+ t.NoopObservableGaugeMetric = NoopObservableGaugeMetric;
+ class NoopObservableUpDownCounterMetric extends NoopObservableMetric {
+ }
+ t.NoopObservableUpDownCounterMetric = NoopObservableUpDownCounterMetric;
+ t.NOOP_METER = new NoopMeter;
+ t.NOOP_COUNTER_METRIC = new NoopCounterMetric;
+ t.NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric;
+ t.NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric;
+ t.NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric;
+ t.NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric;
+ t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric;
+ function createNoopMeter() {
+ return t.NOOP_METER;
+ }
+ t.createNoopMeter = createNoopMeter;
+ },
+ 586: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.NOOP_METER_PROVIDER = t.NoopMeterProvider = void 0;
+ const n = r(440);
+ class NoopMeterProvider {
+ getMeter(e, t, r) {
+ return n.NOOP_METER;
+ }
+ }
+ t.NoopMeterProvider = NoopMeterProvider;
+ t.NOOP_METER_PROVIDER = new NoopMeterProvider;
+ },
+ 678: function(e, t, r) {
+ var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) {
+ if (n === undefined) n = r;
+ Object.defineProperty(e, n, {
+ enumerable: true,
+ get: function() {
+ return t[r];
+ }
+ });
+ } : function(e, t, r, n) {
+ if (n === undefined) n = r;
+ e[n] = t[r];
+ });
+ var a = this && this.__exportStar || function(e, t) {
+ for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r);
+ };
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ a(r(59), t);
+ },
+ 460: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t._globalThis = void 0;
+ t._globalThis = typeof globalThis === "object" ? globalThis : /*TURBOPACK member replacement*/ __turbopack_context__.g;
+ },
+ 59: function(e, t, r) {
+ var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) {
+ if (n === undefined) n = r;
+ Object.defineProperty(e, n, {
+ enumerable: true,
+ get: function() {
+ return t[r];
+ }
+ });
+ } : function(e, t, r, n) {
+ if (n === undefined) n = r;
+ e[n] = t[r];
+ });
+ var a = this && this.__exportStar || function(e, t) {
+ for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r);
+ };
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ a(r(460), t);
+ },
+ 27: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.propagation = void 0;
+ const n = r(25);
+ t.propagation = n.PropagationAPI.getInstance();
+ },
+ 19: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.NoopTextMapPropagator = void 0;
+ class NoopTextMapPropagator {
+ inject(e, t) {}
+ extract(e, t) {
+ return e;
+ }
+ fields() {
+ return [];
+ }
+ }
+ t.NoopTextMapPropagator = NoopTextMapPropagator;
+ },
+ 92: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.defaultTextMapSetter = t.defaultTextMapGetter = void 0;
+ t.defaultTextMapGetter = {
+ get (e, t) {
+ if (e == null) {
+ return undefined;
+ }
+ return e[t];
+ },
+ keys (e) {
+ if (e == null) {
+ return [];
+ }
+ return Object.keys(e);
+ }
+ };
+ t.defaultTextMapSetter = {
+ set (e, t, r) {
+ if (e == null) {
+ return;
+ }
+ e[t] = r;
+ }
+ };
+ },
+ 816: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.trace = void 0;
+ const n = r(397);
+ t.trace = n.TraceAPI.getInstance();
+ },
+ 374: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.NonRecordingSpan = void 0;
+ const n = r(546);
+ class NonRecordingSpan {
+ constructor(e = n.INVALID_SPAN_CONTEXT){
+ this._spanContext = e;
+ }
+ spanContext() {
+ return this._spanContext;
+ }
+ setAttribute(e, t) {
+ return this;
+ }
+ setAttributes(e) {
+ return this;
+ }
+ addEvent(e, t) {
+ return this;
+ }
+ setStatus(e) {
+ return this;
+ }
+ updateName(e) {
+ return this;
+ }
+ end(e) {}
+ isRecording() {
+ return false;
+ }
+ recordException(e, t) {}
+ }
+ t.NonRecordingSpan = NonRecordingSpan;
+ },
+ 637: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.NoopTracer = void 0;
+ const n = r(912);
+ const a = r(793);
+ const o = r(374);
+ const i = r(477);
+ const c = n.ContextAPI.getInstance();
+ class NoopTracer {
+ startSpan(e, t, r = c.active()) {
+ const n = Boolean(t === null || t === void 0 ? void 0 : t.root);
+ if (n) {
+ return new o.NonRecordingSpan;
+ }
+ const s = r && (0, a.getSpanContext)(r);
+ if (isSpanContext(s) && (0, i.isSpanContextValid)(s)) {
+ return new o.NonRecordingSpan(s);
+ } else {
+ return new o.NonRecordingSpan;
+ }
+ }
+ startActiveSpan(e, t, r, n) {
+ let o;
+ let i;
+ let s;
+ if (arguments.length < 2) {
+ return;
+ } else if (arguments.length === 2) {
+ s = t;
+ } else if (arguments.length === 3) {
+ o = t;
+ s = r;
+ } else {
+ o = t;
+ i = r;
+ s = n;
+ }
+ const u = i !== null && i !== void 0 ? i : c.active();
+ const l = this.startSpan(e, o, u);
+ const g = (0, a.setSpan)(u, l);
+ return c.with(g, s, undefined, l);
+ }
+ }
+ t.NoopTracer = NoopTracer;
+ function isSpanContext(e) {
+ return typeof e === "object" && typeof e["spanId"] === "string" && typeof e["traceId"] === "string" && typeof e["traceFlags"] === "number";
+ }
+ },
+ 76: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.NoopTracerProvider = void 0;
+ const n = r(637);
+ class NoopTracerProvider {
+ getTracer(e, t, r) {
+ return new n.NoopTracer;
+ }
+ }
+ t.NoopTracerProvider = NoopTracerProvider;
+ },
+ 779: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.ProxyTracer = void 0;
+ const n = r(637);
+ const a = new n.NoopTracer;
+ class ProxyTracer {
+ constructor(e, t, r, n){
+ this._provider = e;
+ this.name = t;
+ this.version = r;
+ this.options = n;
+ }
+ startSpan(e, t, r) {
+ return this._getTracer().startSpan(e, t, r);
+ }
+ startActiveSpan(e, t, r, n) {
+ const a = this._getTracer();
+ return Reflect.apply(a.startActiveSpan, a, arguments);
+ }
+ _getTracer() {
+ if (this._delegate) {
+ return this._delegate;
+ }
+ const e = this._provider.getDelegateTracer(this.name, this.version, this.options);
+ if (!e) {
+ return a;
+ }
+ this._delegate = e;
+ return this._delegate;
+ }
+ }
+ t.ProxyTracer = ProxyTracer;
+ },
+ 498: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.ProxyTracerProvider = void 0;
+ const n = r(779);
+ const a = r(76);
+ const o = new a.NoopTracerProvider;
+ class ProxyTracerProvider {
+ getTracer(e, t, r) {
+ var a;
+ return (a = this.getDelegateTracer(e, t, r)) !== null && a !== void 0 ? a : new n.ProxyTracer(this, e, t, r);
+ }
+ getDelegate() {
+ var e;
+ return (e = this._delegate) !== null && e !== void 0 ? e : o;
+ }
+ setDelegate(e) {
+ this._delegate = e;
+ }
+ getDelegateTracer(e, t, r) {
+ var n;
+ return (n = this._delegate) === null || n === void 0 ? void 0 : n.getTracer(e, t, r);
+ }
+ }
+ t.ProxyTracerProvider = ProxyTracerProvider;
+ },
+ 312: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.SamplingDecision = void 0;
+ var r;
+ (function(e) {
+ e[e["NOT_RECORD"] = 0] = "NOT_RECORD";
+ e[e["RECORD"] = 1] = "RECORD";
+ e[e["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED";
+ })(r = t.SamplingDecision || (t.SamplingDecision = {}));
+ },
+ 793: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.getSpanContext = t.setSpanContext = t.deleteSpan = t.setSpan = t.getActiveSpan = t.getSpan = void 0;
+ const n = r(23);
+ const a = r(374);
+ const o = r(912);
+ const i = (0, n.createContextKey)("OpenTelemetry Context Key SPAN");
+ function getSpan(e) {
+ return e.getValue(i) || undefined;
+ }
+ t.getSpan = getSpan;
+ function getActiveSpan() {
+ return getSpan(o.ContextAPI.getInstance().active());
+ }
+ t.getActiveSpan = getActiveSpan;
+ function setSpan(e, t) {
+ return e.setValue(i, t);
+ }
+ t.setSpan = setSpan;
+ function deleteSpan(e) {
+ return e.deleteValue(i);
+ }
+ t.deleteSpan = deleteSpan;
+ function setSpanContext(e, t) {
+ return setSpan(e, new a.NonRecordingSpan(t));
+ }
+ t.setSpanContext = setSpanContext;
+ function getSpanContext(e) {
+ var t;
+ return (t = getSpan(e)) === null || t === void 0 ? void 0 : t.spanContext();
+ }
+ t.getSpanContext = getSpanContext;
+ },
+ 285: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.TraceStateImpl = void 0;
+ const n = r(240);
+ const a = 32;
+ const o = 512;
+ const i = ",";
+ const c = "=";
+ class TraceStateImpl {
+ constructor(e){
+ this._internalState = new Map;
+ if (e) this._parse(e);
+ }
+ set(e, t) {
+ const r = this._clone();
+ if (r._internalState.has(e)) {
+ r._internalState.delete(e);
+ }
+ r._internalState.set(e, t);
+ return r;
+ }
+ unset(e) {
+ const t = this._clone();
+ t._internalState.delete(e);
+ return t;
+ }
+ get(e) {
+ return this._internalState.get(e);
+ }
+ serialize() {
+ return this._keys().reduce((e, t)=>{
+ e.push(t + c + this.get(t));
+ return e;
+ }, []).join(i);
+ }
+ _parse(e) {
+ if (e.length > o) return;
+ this._internalState = e.split(i).reverse().reduce((e, t)=>{
+ const r = t.trim();
+ const a = r.indexOf(c);
+ if (a !== -1) {
+ const o = r.slice(0, a);
+ const i = r.slice(a + 1, t.length);
+ if ((0, n.validateKey)(o) && (0, n.validateValue)(i)) {
+ e.set(o, i);
+ } else {}
+ }
+ return e;
+ }, new Map);
+ if (this._internalState.size > a) {
+ this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, a));
+ }
+ }
+ _keys() {
+ return Array.from(this._internalState.keys()).reverse();
+ }
+ _clone() {
+ const e = new TraceStateImpl;
+ e._internalState = new Map(this._internalState);
+ return e;
+ }
+ }
+ t.TraceStateImpl = TraceStateImpl;
+ },
+ 240: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.validateValue = t.validateKey = void 0;
+ const r = "[_0-9a-z-*/]";
+ const n = `[a-z]${r}{0,255}`;
+ const a = `[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;
+ const o = new RegExp(`^(?:${n}|${a})$`);
+ const i = /^[ -~]{0,255}[!-~]$/;
+ const c = /,|=/;
+ function validateKey(e) {
+ return o.test(e);
+ }
+ t.validateKey = validateKey;
+ function validateValue(e) {
+ return i.test(e) && !c.test(e);
+ }
+ t.validateValue = validateValue;
+ },
+ 87: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.createTraceState = void 0;
+ const n = r(285);
+ function createTraceState(e) {
+ return new n.TraceStateImpl(e);
+ }
+ t.createTraceState = createTraceState;
+ },
+ 546: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.INVALID_SPAN_CONTEXT = t.INVALID_TRACEID = t.INVALID_SPANID = void 0;
+ const n = r(731);
+ t.INVALID_SPANID = "0000000000000000";
+ t.INVALID_TRACEID = "00000000000000000000000000000000";
+ t.INVALID_SPAN_CONTEXT = {
+ traceId: t.INVALID_TRACEID,
+ spanId: t.INVALID_SPANID,
+ traceFlags: n.TraceFlags.NONE
+ };
+ },
+ 613: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.SpanKind = void 0;
+ var r;
+ (function(e) {
+ e[e["INTERNAL"] = 0] = "INTERNAL";
+ e[e["SERVER"] = 1] = "SERVER";
+ e[e["CLIENT"] = 2] = "CLIENT";
+ e[e["PRODUCER"] = 3] = "PRODUCER";
+ e[e["CONSUMER"] = 4] = "CONSUMER";
+ })(r = t.SpanKind || (t.SpanKind = {}));
+ },
+ 477: (e, t, r)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.wrapSpanContext = t.isSpanContextValid = t.isValidSpanId = t.isValidTraceId = void 0;
+ const n = r(546);
+ const a = r(374);
+ const o = /^([0-9a-f]{32})$/i;
+ const i = /^[0-9a-f]{16}$/i;
+ function isValidTraceId(e) {
+ return o.test(e) && e !== n.INVALID_TRACEID;
+ }
+ t.isValidTraceId = isValidTraceId;
+ function isValidSpanId(e) {
+ return i.test(e) && e !== n.INVALID_SPANID;
+ }
+ t.isValidSpanId = isValidSpanId;
+ function isSpanContextValid(e) {
+ return isValidTraceId(e.traceId) && isValidSpanId(e.spanId);
+ }
+ t.isSpanContextValid = isSpanContextValid;
+ function wrapSpanContext(e) {
+ return new a.NonRecordingSpan(e);
+ }
+ t.wrapSpanContext = wrapSpanContext;
+ },
+ 854: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.SpanStatusCode = void 0;
+ var r;
+ (function(e) {
+ e[e["UNSET"] = 0] = "UNSET";
+ e[e["OK"] = 1] = "OK";
+ e[e["ERROR"] = 2] = "ERROR";
+ })(r = t.SpanStatusCode || (t.SpanStatusCode = {}));
+ },
+ 731: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.TraceFlags = void 0;
+ var r;
+ (function(e) {
+ e[e["NONE"] = 0] = "NONE";
+ e[e["SAMPLED"] = 1] = "SAMPLED";
+ })(r = t.TraceFlags || (t.TraceFlags = {}));
+ },
+ 652: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ t.VERSION = void 0;
+ t.VERSION = "1.6.0";
+ }
+ };
+ var t = {};
+ function __nccwpck_require__(r) {
+ var n = t[r];
+ if (n !== undefined) {
+ return n.exports;
+ }
+ var a = t[r] = {
+ exports: {}
+ };
+ var o = true;
+ try {
+ e[r].call(a.exports, a, a.exports, __nccwpck_require__);
+ o = false;
+ } finally{
+ if (o) delete t[r];
+ }
+ return a.exports;
+ }
+ if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/@opentelemetry/api") + "/";
+ var r = {};
+ (()=>{
+ var e = r;
+ Object.defineProperty(e, "__esModule", {
+ value: true
+ });
+ e.trace = e.propagation = e.metrics = e.diag = e.context = e.INVALID_SPAN_CONTEXT = e.INVALID_TRACEID = e.INVALID_SPANID = e.isValidSpanId = e.isValidTraceId = e.isSpanContextValid = e.createTraceState = e.TraceFlags = e.SpanStatusCode = e.SpanKind = e.SamplingDecision = e.ProxyTracerProvider = e.ProxyTracer = e.defaultTextMapSetter = e.defaultTextMapGetter = e.ValueType = e.createNoopMeter = e.DiagLogLevel = e.DiagConsoleLogger = e.ROOT_CONTEXT = e.createContextKey = e.baggageEntryMetadataFromString = void 0;
+ var t = __nccwpck_require__(504);
+ Object.defineProperty(e, "baggageEntryMetadataFromString", {
+ enumerable: true,
+ get: function() {
+ return t.baggageEntryMetadataFromString;
+ }
+ });
+ var n = __nccwpck_require__(23);
+ Object.defineProperty(e, "createContextKey", {
+ enumerable: true,
+ get: function() {
+ return n.createContextKey;
+ }
+ });
+ Object.defineProperty(e, "ROOT_CONTEXT", {
+ enumerable: true,
+ get: function() {
+ return n.ROOT_CONTEXT;
+ }
+ });
+ var a = __nccwpck_require__(83);
+ Object.defineProperty(e, "DiagConsoleLogger", {
+ enumerable: true,
+ get: function() {
+ return a.DiagConsoleLogger;
+ }
+ });
+ var o = __nccwpck_require__(711);
+ Object.defineProperty(e, "DiagLogLevel", {
+ enumerable: true,
+ get: function() {
+ return o.DiagLogLevel;
+ }
+ });
+ var i = __nccwpck_require__(440);
+ Object.defineProperty(e, "createNoopMeter", {
+ enumerable: true,
+ get: function() {
+ return i.createNoopMeter;
+ }
+ });
+ var c = __nccwpck_require__(532);
+ Object.defineProperty(e, "ValueType", {
+ enumerable: true,
+ get: function() {
+ return c.ValueType;
+ }
+ });
+ var s = __nccwpck_require__(92);
+ Object.defineProperty(e, "defaultTextMapGetter", {
+ enumerable: true,
+ get: function() {
+ return s.defaultTextMapGetter;
+ }
+ });
+ Object.defineProperty(e, "defaultTextMapSetter", {
+ enumerable: true,
+ get: function() {
+ return s.defaultTextMapSetter;
+ }
+ });
+ var u = __nccwpck_require__(779);
+ Object.defineProperty(e, "ProxyTracer", {
+ enumerable: true,
+ get: function() {
+ return u.ProxyTracer;
+ }
+ });
+ var l = __nccwpck_require__(498);
+ Object.defineProperty(e, "ProxyTracerProvider", {
+ enumerable: true,
+ get: function() {
+ return l.ProxyTracerProvider;
+ }
+ });
+ var g = __nccwpck_require__(312);
+ Object.defineProperty(e, "SamplingDecision", {
+ enumerable: true,
+ get: function() {
+ return g.SamplingDecision;
+ }
+ });
+ var p = __nccwpck_require__(613);
+ Object.defineProperty(e, "SpanKind", {
+ enumerable: true,
+ get: function() {
+ return p.SpanKind;
+ }
+ });
+ var d = __nccwpck_require__(854);
+ Object.defineProperty(e, "SpanStatusCode", {
+ enumerable: true,
+ get: function() {
+ return d.SpanStatusCode;
+ }
+ });
+ var _ = __nccwpck_require__(731);
+ Object.defineProperty(e, "TraceFlags", {
+ enumerable: true,
+ get: function() {
+ return _.TraceFlags;
+ }
+ });
+ var f = __nccwpck_require__(87);
+ Object.defineProperty(e, "createTraceState", {
+ enumerable: true,
+ get: function() {
+ return f.createTraceState;
+ }
+ });
+ var b = __nccwpck_require__(477);
+ Object.defineProperty(e, "isSpanContextValid", {
+ enumerable: true,
+ get: function() {
+ return b.isSpanContextValid;
+ }
+ });
+ Object.defineProperty(e, "isValidTraceId", {
+ enumerable: true,
+ get: function() {
+ return b.isValidTraceId;
+ }
+ });
+ Object.defineProperty(e, "isValidSpanId", {
+ enumerable: true,
+ get: function() {
+ return b.isValidSpanId;
+ }
+ });
+ var v = __nccwpck_require__(546);
+ Object.defineProperty(e, "INVALID_SPANID", {
+ enumerable: true,
+ get: function() {
+ return v.INVALID_SPANID;
+ }
+ });
+ Object.defineProperty(e, "INVALID_TRACEID", {
+ enumerable: true,
+ get: function() {
+ return v.INVALID_TRACEID;
+ }
+ });
+ Object.defineProperty(e, "INVALID_SPAN_CONTEXT", {
+ enumerable: true,
+ get: function() {
+ return v.INVALID_SPAN_CONTEXT;
+ }
+ });
+ const O = __nccwpck_require__(778);
+ Object.defineProperty(e, "context", {
+ enumerable: true,
+ get: function() {
+ return O.context;
+ }
+ });
+ const P = __nccwpck_require__(304);
+ Object.defineProperty(e, "diag", {
+ enumerable: true,
+ get: function() {
+ return P.diag;
+ }
+ });
+ const N = __nccwpck_require__(120);
+ Object.defineProperty(e, "metrics", {
+ enumerable: true,
+ get: function() {
+ return N.metrics;
+ }
+ });
+ const S = __nccwpck_require__(27);
+ Object.defineProperty(e, "propagation", {
+ enumerable: true,
+ get: function() {
+ return S.propagation;
+ }
+ });
+ const C = __nccwpck_require__(816);
+ Object.defineProperty(e, "trace", {
+ enumerable: true,
+ get: function() {
+ return C.trace;
+ }
+ });
+ e["default"] = {
+ context: O.context,
+ diag: P.diag,
+ metrics: N.metrics,
+ propagation: S.propagation,
+ trace: C.trace
+ };
+ })();
+ module.exports = r;
+})();
+}),
+"[project]/node_modules/next/dist/compiled/cookie/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+
+(()=>{
+ "use strict";
+ if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/cookie") + "/";
+ var e = {};
+ (()=>{
+ var r = e;
+ /*!
+ * cookie
+ * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */ r.parse = parse;
+ r.serialize = serialize;
+ var i = decodeURIComponent;
+ var t = encodeURIComponent;
+ var a = /; */;
+ var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
+ function parse(e, r) {
+ if (typeof e !== "string") {
+ throw new TypeError("argument str must be a string");
+ }
+ var t = {};
+ var n = r || {};
+ var o = e.split(a);
+ var s = n.decode || i;
+ for(var p = 0; p < o.length; p++){
+ var f = o[p];
+ var u = f.indexOf("=");
+ if (u < 0) {
+ continue;
+ }
+ var v = f.substr(0, u).trim();
+ var c = f.substr(++u, f.length).trim();
+ if ('"' == c[0]) {
+ c = c.slice(1, -1);
+ }
+ if (undefined == t[v]) {
+ t[v] = tryDecode(c, s);
+ }
+ }
+ return t;
+ }
+ function serialize(e, r, i) {
+ var a = i || {};
+ var o = a.encode || t;
+ if (typeof o !== "function") {
+ throw new TypeError("option encode is invalid");
+ }
+ if (!n.test(e)) {
+ throw new TypeError("argument name is invalid");
+ }
+ var s = o(r);
+ if (s && !n.test(s)) {
+ throw new TypeError("argument val is invalid");
+ }
+ var p = e + "=" + s;
+ if (null != a.maxAge) {
+ var f = a.maxAge - 0;
+ if (isNaN(f) || !isFinite(f)) {
+ throw new TypeError("option maxAge is invalid");
+ }
+ p += "; Max-Age=" + Math.floor(f);
+ }
+ if (a.domain) {
+ if (!n.test(a.domain)) {
+ throw new TypeError("option domain is invalid");
+ }
+ p += "; Domain=" + a.domain;
+ }
+ if (a.path) {
+ if (!n.test(a.path)) {
+ throw new TypeError("option path is invalid");
+ }
+ p += "; Path=" + a.path;
+ }
+ if (a.expires) {
+ if (typeof a.expires.toUTCString !== "function") {
+ throw new TypeError("option expires is invalid");
+ }
+ p += "; Expires=" + a.expires.toUTCString();
+ }
+ if (a.httpOnly) {
+ p += "; HttpOnly";
+ }
+ if (a.secure) {
+ p += "; Secure";
+ }
+ if (a.sameSite) {
+ var u = typeof a.sameSite === "string" ? a.sameSite.toLowerCase() : a.sameSite;
+ switch(u){
+ case true:
+ p += "; SameSite=Strict";
+ break;
+ case "lax":
+ p += "; SameSite=Lax";
+ break;
+ case "strict":
+ p += "; SameSite=Strict";
+ break;
+ case "none":
+ p += "; SameSite=None";
+ break;
+ default:
+ throw new TypeError("option sameSite is invalid");
+ }
+ }
+ return p;
+ }
+ function tryDecode(e, r) {
+ try {
+ return r(e);
+ } catch (r) {
+ return e;
+ }
+ }
+ })();
+ module.exports = e;
+})();
+}),
+"[project]/node_modules/next/dist/compiled/p-queue/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+
+(()=>{
+ "use strict";
+ var e = {
+ 234: (e)=>{
+ var t = Object.prototype.hasOwnProperty, n = "~";
+ function Events() {}
+ if (Object.create) {
+ Events.prototype = Object.create(null);
+ if (!(new Events).__proto__) n = false;
+ }
+ function EE(e, t, n) {
+ this.fn = e;
+ this.context = t;
+ this.once = n || false;
+ }
+ function addListener(e, t, r, i, s) {
+ if (typeof r !== "function") {
+ throw new TypeError("The listener must be a function");
+ }
+ var o = new EE(r, i || e, s), u = n ? n + t : t;
+ if (!e._events[u]) e._events[u] = o, e._eventsCount++;
+ else if (!e._events[u].fn) e._events[u].push(o);
+ else e._events[u] = [
+ e._events[u],
+ o
+ ];
+ return e;
+ }
+ function clearEvent(e, t) {
+ if (--e._eventsCount === 0) e._events = new Events;
+ else delete e._events[t];
+ }
+ function EventEmitter() {
+ this._events = new Events;
+ this._eventsCount = 0;
+ }
+ EventEmitter.prototype.eventNames = function eventNames() {
+ var e = [], r, i;
+ if (this._eventsCount === 0) return e;
+ for(i in r = this._events){
+ if (t.call(r, i)) e.push(n ? i.slice(1) : i);
+ }
+ if (Object.getOwnPropertySymbols) {
+ return e.concat(Object.getOwnPropertySymbols(r));
+ }
+ return e;
+ };
+ EventEmitter.prototype.listeners = function listeners(e) {
+ var t = n ? n + e : e, r = this._events[t];
+ if (!r) return [];
+ if (r.fn) return [
+ r.fn
+ ];
+ for(var i = 0, s = r.length, o = new Array(s); i < s; i++){
+ o[i] = r[i].fn;
+ }
+ return o;
+ };
+ EventEmitter.prototype.listenerCount = function listenerCount(e) {
+ var t = n ? n + e : e, r = this._events[t];
+ if (!r) return 0;
+ if (r.fn) return 1;
+ return r.length;
+ };
+ EventEmitter.prototype.emit = function emit(e, t, r, i, s, o) {
+ var u = n ? n + e : e;
+ if (!this._events[u]) return false;
+ var a = this._events[u], l = arguments.length, c, h;
+ if (a.fn) {
+ if (a.once) this.removeListener(e, a.fn, undefined, true);
+ switch(l){
+ case 1:
+ return a.fn.call(a.context), true;
+ case 2:
+ return a.fn.call(a.context, t), true;
+ case 3:
+ return a.fn.call(a.context, t, r), true;
+ case 4:
+ return a.fn.call(a.context, t, r, i), true;
+ case 5:
+ return a.fn.call(a.context, t, r, i, s), true;
+ case 6:
+ return a.fn.call(a.context, t, r, i, s, o), true;
+ }
+ for(h = 1, c = new Array(l - 1); h < l; h++){
+ c[h - 1] = arguments[h];
+ }
+ a.fn.apply(a.context, c);
+ } else {
+ var _ = a.length, f;
+ for(h = 0; h < _; h++){
+ if (a[h].once) this.removeListener(e, a[h].fn, undefined, true);
+ switch(l){
+ case 1:
+ a[h].fn.call(a[h].context);
+ break;
+ case 2:
+ a[h].fn.call(a[h].context, t);
+ break;
+ case 3:
+ a[h].fn.call(a[h].context, t, r);
+ break;
+ case 4:
+ a[h].fn.call(a[h].context, t, r, i);
+ break;
+ default:
+ if (!c) for(f = 1, c = new Array(l - 1); f < l; f++){
+ c[f - 1] = arguments[f];
+ }
+ a[h].fn.apply(a[h].context, c);
+ }
+ }
+ }
+ return true;
+ };
+ EventEmitter.prototype.on = function on(e, t, n) {
+ return addListener(this, e, t, n, false);
+ };
+ EventEmitter.prototype.once = function once(e, t, n) {
+ return addListener(this, e, t, n, true);
+ };
+ EventEmitter.prototype.removeListener = function removeListener(e, t, r, i) {
+ var s = n ? n + e : e;
+ if (!this._events[s]) return this;
+ if (!t) {
+ clearEvent(this, s);
+ return this;
+ }
+ var o = this._events[s];
+ if (o.fn) {
+ if (o.fn === t && (!i || o.once) && (!r || o.context === r)) {
+ clearEvent(this, s);
+ }
+ } else {
+ for(var u = 0, a = [], l = o.length; u < l; u++){
+ if (o[u].fn !== t || i && !o[u].once || r && o[u].context !== r) {
+ a.push(o[u]);
+ }
+ }
+ if (a.length) this._events[s] = a.length === 1 ? a[0] : a;
+ else clearEvent(this, s);
+ }
+ return this;
+ };
+ EventEmitter.prototype.removeAllListeners = function removeAllListeners(e) {
+ var t;
+ if (e) {
+ t = n ? n + e : e;
+ if (this._events[t]) clearEvent(this, t);
+ } else {
+ this._events = new Events;
+ this._eventsCount = 0;
+ }
+ return this;
+ };
+ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+ EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+ EventEmitter.prefixed = n;
+ EventEmitter.EventEmitter = EventEmitter;
+ if ("TURBOPACK compile-time truthy", 1) {
+ e.exports = EventEmitter;
+ }
+ },
+ 274: (e)=>{
+ e.exports = (e, t)=>{
+ t = t || (()=>{});
+ return e.then((e)=>new Promise((e)=>{
+ e(t());
+ }).then(()=>e), (e)=>new Promise((e)=>{
+ e(t());
+ }).then(()=>{
+ throw e;
+ }));
+ };
+ },
+ 294: (e, t)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ function lowerBound(e, t, n) {
+ let r = 0;
+ let i = e.length;
+ while(i > 0){
+ const s = i / 2 | 0;
+ let o = r + s;
+ if (n(e[o], t) <= 0) {
+ r = ++o;
+ i -= s + 1;
+ } else {
+ i = s;
+ }
+ }
+ return r;
+ }
+ t["default"] = lowerBound;
+ },
+ 838: (e, t, n)=>{
+ Object.defineProperty(t, "__esModule", {
+ value: true
+ });
+ const r = n(294);
+ class PriorityQueue {
+ constructor(){
+ this._queue = [];
+ }
+ enqueue(e, t) {
+ t = Object.assign({
+ priority: 0
+ }, t);
+ const n = {
+ priority: t.priority,
+ run: e
+ };
+ if (this.size && this._queue[this.size - 1].priority >= t.priority) {
+ this._queue.push(n);
+ return;
+ }
+ const i = r.default(this._queue, n, (e, t)=>t.priority - e.priority);
+ this._queue.splice(i, 0, n);
+ }
+ dequeue() {
+ const e = this._queue.shift();
+ return e === null || e === void 0 ? void 0 : e.run;
+ }
+ filter(e) {
+ return this._queue.filter((t)=>t.priority === e.priority).map((e)=>e.run);
+ }
+ get size() {
+ return this._queue.length;
+ }
+ }
+ t["default"] = PriorityQueue;
+ },
+ 138: (e, t, n)=>{
+ const r = n(274);
+ class TimeoutError extends Error {
+ constructor(e){
+ super(e);
+ this.name = "TimeoutError";
+ }
+ }
+ const pTimeout = (e, t, n)=>new Promise((i, s)=>{
+ if (typeof t !== "number" || t < 0) {
+ throw new TypeError("Expected `milliseconds` to be a positive number");
+ }
+ if (t === Infinity) {
+ i(e);
+ return;
+ }
+ const o = setTimeout(()=>{
+ if (typeof n === "function") {
+ try {
+ i(n());
+ } catch (e) {
+ s(e);
+ }
+ return;
+ }
+ const r = typeof n === "string" ? n : `Promise timed out after ${t} milliseconds`;
+ const o = n instanceof Error ? n : new TimeoutError(r);
+ if (typeof e.cancel === "function") {
+ e.cancel();
+ }
+ s(o);
+ }, t);
+ r(e.then(i, s), ()=>{
+ clearTimeout(o);
+ });
+ });
+ e.exports = pTimeout;
+ e.exports["default"] = pTimeout;
+ e.exports.TimeoutError = TimeoutError;
+ }
+ };
+ var t = {};
+ function __nccwpck_require__(n) {
+ var r = t[n];
+ if (r !== undefined) {
+ return r.exports;
+ }
+ var i = t[n] = {
+ exports: {}
+ };
+ var s = true;
+ try {
+ e[n](i, i.exports, __nccwpck_require__);
+ s = false;
+ } finally{
+ if (s) delete t[n];
+ }
+ return i.exports;
+ }
+ if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/p-queue") + "/";
+ var n = {};
+ (()=>{
+ var e = n;
+ Object.defineProperty(e, "__esModule", {
+ value: true
+ });
+ const t = __nccwpck_require__(234);
+ const r = __nccwpck_require__(138);
+ const i = __nccwpck_require__(838);
+ const empty = ()=>{};
+ const s = new r.TimeoutError;
+ class PQueue extends t {
+ constructor(e){
+ var t, n, r, s;
+ super();
+ this._intervalCount = 0;
+ this._intervalEnd = 0;
+ this._pendingCount = 0;
+ this._resolveEmpty = empty;
+ this._resolveIdle = empty;
+ e = Object.assign({
+ carryoverConcurrencyCount: false,
+ intervalCap: Infinity,
+ interval: 0,
+ concurrency: Infinity,
+ autoStart: true,
+ queueClass: i.default
+ }, e);
+ if (!(typeof e.intervalCap === "number" && e.intervalCap >= 1)) {
+ throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(n = (t = e.intervalCap) === null || t === void 0 ? void 0 : t.toString()) !== null && n !== void 0 ? n : ""}\` (${typeof e.intervalCap})`);
+ }
+ if (e.interval === undefined || !(Number.isFinite(e.interval) && e.interval >= 0)) {
+ throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s = (r = e.interval) === null || r === void 0 ? void 0 : r.toString()) !== null && s !== void 0 ? s : ""}\` (${typeof e.interval})`);
+ }
+ this._carryoverConcurrencyCount = e.carryoverConcurrencyCount;
+ this._isIntervalIgnored = e.intervalCap === Infinity || e.interval === 0;
+ this._intervalCap = e.intervalCap;
+ this._interval = e.interval;
+ this._queue = new e.queueClass;
+ this._queueClass = e.queueClass;
+ this.concurrency = e.concurrency;
+ this._timeout = e.timeout;
+ this._throwOnTimeout = e.throwOnTimeout === true;
+ this._isPaused = e.autoStart === false;
+ }
+ get _doesIntervalAllowAnother() {
+ return this._isIntervalIgnored || this._intervalCount < this._intervalCap;
+ }
+ get _doesConcurrentAllowAnother() {
+ return this._pendingCount < this._concurrency;
+ }
+ _next() {
+ this._pendingCount--;
+ this._tryToStartAnother();
+ this.emit("next");
+ }
+ _resolvePromises() {
+ this._resolveEmpty();
+ this._resolveEmpty = empty;
+ if (this._pendingCount === 0) {
+ this._resolveIdle();
+ this._resolveIdle = empty;
+ this.emit("idle");
+ }
+ }
+ _onResumeInterval() {
+ this._onInterval();
+ this._initializeIntervalIfNeeded();
+ this._timeoutId = undefined;
+ }
+ _isIntervalPaused() {
+ const e = Date.now();
+ if (this._intervalId === undefined) {
+ const t = this._intervalEnd - e;
+ if (t < 0) {
+ this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0;
+ } else {
+ if (this._timeoutId === undefined) {
+ this._timeoutId = setTimeout(()=>{
+ this._onResumeInterval();
+ }, t);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ _tryToStartAnother() {
+ if (this._queue.size === 0) {
+ if (this._intervalId) {
+ clearInterval(this._intervalId);
+ }
+ this._intervalId = undefined;
+ this._resolvePromises();
+ return false;
+ }
+ if (!this._isPaused) {
+ const e = !this._isIntervalPaused();
+ if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) {
+ const t = this._queue.dequeue();
+ if (!t) {
+ return false;
+ }
+ this.emit("active");
+ t();
+ if (e) {
+ this._initializeIntervalIfNeeded();
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ _initializeIntervalIfNeeded() {
+ if (this._isIntervalIgnored || this._intervalId !== undefined) {
+ return;
+ }
+ this._intervalId = setInterval(()=>{
+ this._onInterval();
+ }, this._interval);
+ this._intervalEnd = Date.now() + this._interval;
+ }
+ _onInterval() {
+ if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) {
+ clearInterval(this._intervalId);
+ this._intervalId = undefined;
+ }
+ this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0;
+ this._processQueue();
+ }
+ _processQueue() {
+ while(this._tryToStartAnother()){}
+ }
+ get concurrency() {
+ return this._concurrency;
+ }
+ set concurrency(e) {
+ if (!(typeof e === "number" && e >= 1)) {
+ throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);
+ }
+ this._concurrency = e;
+ this._processQueue();
+ }
+ async add(e, t = {}) {
+ return new Promise((n, i)=>{
+ const run = async ()=>{
+ this._pendingCount++;
+ this._intervalCount++;
+ try {
+ const o = this._timeout === undefined && t.timeout === undefined ? e() : r.default(Promise.resolve(e()), t.timeout === undefined ? this._timeout : t.timeout, ()=>{
+ if (t.throwOnTimeout === undefined ? this._throwOnTimeout : t.throwOnTimeout) {
+ i(s);
+ }
+ return undefined;
+ });
+ n(await o);
+ } catch (e) {
+ i(e);
+ }
+ this._next();
+ };
+ this._queue.enqueue(run, t);
+ this._tryToStartAnother();
+ this.emit("add");
+ });
+ }
+ async addAll(e, t) {
+ return Promise.all(e.map(async (e)=>this.add(e, t)));
+ }
+ start() {
+ if (!this._isPaused) {
+ return this;
+ }
+ this._isPaused = false;
+ this._processQueue();
+ return this;
+ }
+ pause() {
+ this._isPaused = true;
+ }
+ clear() {
+ this._queue = new this._queueClass;
+ }
+ async onEmpty() {
+ if (this._queue.size === 0) {
+ return;
+ }
+ return new Promise((e)=>{
+ const t = this._resolveEmpty;
+ this._resolveEmpty = ()=>{
+ t();
+ e();
+ };
+ });
+ }
+ async onIdle() {
+ if (this._pendingCount === 0 && this._queue.size === 0) {
+ return;
+ }
+ return new Promise((e)=>{
+ const t = this._resolveIdle;
+ this._resolveIdle = ()=>{
+ t();
+ e();
+ };
+ });
+ }
+ get size() {
+ return this._queue.size;
+ }
+ sizeBy(e) {
+ return this._queue.filter(e).length;
+ }
+ get pending() {
+ return this._pendingCount;
+ }
+ get isPaused() {
+ return this._isPaused;
+ }
+ get timeout() {
+ return this._timeout;
+ }
+ set timeout(e) {
+ this._timeout = e;
+ }
+ }
+ e["default"] = PQueue;
+ })();
+ module.exports = n;
+})();
+}),
+"[project]/node_modules/next/dist/compiled/path-to-regexp/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+
+(()=>{
+ "use strict";
+ if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/path-to-regexp") + "/";
+ var e = {};
+ (()=>{
+ var n = e;
+ Object.defineProperty(n, "__esModule", {
+ value: true
+ });
+ n.pathToRegexp = n.tokensToRegexp = n.regexpToFunction = n.match = n.tokensToFunction = n.compile = n.parse = void 0;
+ function lexer(e) {
+ var n = [];
+ var r = 0;
+ while(r < e.length){
+ var t = e[r];
+ if (t === "*" || t === "+" || t === "?") {
+ n.push({
+ type: "MODIFIER",
+ index: r,
+ value: e[r++]
+ });
+ continue;
+ }
+ if (t === "\\") {
+ n.push({
+ type: "ESCAPED_CHAR",
+ index: r++,
+ value: e[r++]
+ });
+ continue;
+ }
+ if (t === "{") {
+ n.push({
+ type: "OPEN",
+ index: r,
+ value: e[r++]
+ });
+ continue;
+ }
+ if (t === "}") {
+ n.push({
+ type: "CLOSE",
+ index: r,
+ value: e[r++]
+ });
+ continue;
+ }
+ if (t === ":") {
+ var a = "";
+ var i = r + 1;
+ while(i < e.length){
+ var o = e.charCodeAt(i);
+ if (o >= 48 && o <= 57 || o >= 65 && o <= 90 || o >= 97 && o <= 122 || o === 95) {
+ a += e[i++];
+ continue;
+ }
+ break;
+ }
+ if (!a) throw new TypeError("Missing parameter name at ".concat(r));
+ n.push({
+ type: "NAME",
+ index: r,
+ value: a
+ });
+ r = i;
+ continue;
+ }
+ if (t === "(") {
+ var c = 1;
+ var f = "";
+ var i = r + 1;
+ if (e[i] === "?") {
+ throw new TypeError('Pattern cannot start with "?" at '.concat(i));
+ }
+ while(i < e.length){
+ if (e[i] === "\\") {
+ f += e[i++] + e[i++];
+ continue;
+ }
+ if (e[i] === ")") {
+ c--;
+ if (c === 0) {
+ i++;
+ break;
+ }
+ } else if (e[i] === "(") {
+ c++;
+ if (e[i + 1] !== "?") {
+ throw new TypeError("Capturing groups are not allowed at ".concat(i));
+ }
+ }
+ f += e[i++];
+ }
+ if (c) throw new TypeError("Unbalanced pattern at ".concat(r));
+ if (!f) throw new TypeError("Missing pattern at ".concat(r));
+ n.push({
+ type: "PATTERN",
+ index: r,
+ value: f
+ });
+ r = i;
+ continue;
+ }
+ n.push({
+ type: "CHAR",
+ index: r,
+ value: e[r++]
+ });
+ }
+ n.push({
+ type: "END",
+ index: r,
+ value: ""
+ });
+ return n;
+ }
+ function parse(e, n) {
+ if (n === void 0) {
+ n = {};
+ }
+ var r = lexer(e);
+ var t = n.prefixes, a = t === void 0 ? "./" : t, i = n.delimiter, o = i === void 0 ? "/#?" : i;
+ var c = [];
+ var f = 0;
+ var u = 0;
+ var p = "";
+ var tryConsume = function(e) {
+ if (u < r.length && r[u].type === e) return r[u++].value;
+ };
+ var mustConsume = function(e) {
+ var n = tryConsume(e);
+ if (n !== undefined) return n;
+ var t = r[u], a = t.type, i = t.index;
+ throw new TypeError("Unexpected ".concat(a, " at ").concat(i, ", expected ").concat(e));
+ };
+ var consumeText = function() {
+ var e = "";
+ var n;
+ while(n = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR")){
+ e += n;
+ }
+ return e;
+ };
+ var isSafe = function(e) {
+ for(var n = 0, r = o; n < r.length; n++){
+ var t = r[n];
+ if (e.indexOf(t) > -1) return true;
+ }
+ return false;
+ };
+ var safePattern = function(e) {
+ var n = c[c.length - 1];
+ var r = e || (n && typeof n === "string" ? n : "");
+ if (n && !r) {
+ throw new TypeError('Must have text between two parameters, missing text after "'.concat(n.name, '"'));
+ }
+ if (!r || isSafe(r)) return "[^".concat(escapeString(o), "]+?");
+ return "(?:(?!".concat(escapeString(r), ")[^").concat(escapeString(o), "])+?");
+ };
+ while(u < r.length){
+ var v = tryConsume("CHAR");
+ var s = tryConsume("NAME");
+ var d = tryConsume("PATTERN");
+ if (s || d) {
+ var g = v || "";
+ if (a.indexOf(g) === -1) {
+ p += g;
+ g = "";
+ }
+ if (p) {
+ c.push(p);
+ p = "";
+ }
+ c.push({
+ name: s || f++,
+ prefix: g,
+ suffix: "",
+ pattern: d || safePattern(g),
+ modifier: tryConsume("MODIFIER") || ""
+ });
+ continue;
+ }
+ var x = v || tryConsume("ESCAPED_CHAR");
+ if (x) {
+ p += x;
+ continue;
+ }
+ if (p) {
+ c.push(p);
+ p = "";
+ }
+ var h = tryConsume("OPEN");
+ if (h) {
+ var g = consumeText();
+ var l = tryConsume("NAME") || "";
+ var m = tryConsume("PATTERN") || "";
+ var T = consumeText();
+ mustConsume("CLOSE");
+ c.push({
+ name: l || (m ? f++ : ""),
+ pattern: l && !m ? safePattern(g) : m,
+ prefix: g,
+ suffix: T,
+ modifier: tryConsume("MODIFIER") || ""
+ });
+ continue;
+ }
+ mustConsume("END");
+ }
+ return c;
+ }
+ n.parse = parse;
+ function compile(e, n) {
+ return tokensToFunction(parse(e, n), n);
+ }
+ n.compile = compile;
+ function tokensToFunction(e, n) {
+ if (n === void 0) {
+ n = {};
+ }
+ var r = flags(n);
+ var t = n.encode, a = t === void 0 ? function(e) {
+ return e;
+ } : t, i = n.validate, o = i === void 0 ? true : i;
+ var c = e.map(function(e) {
+ if (typeof e === "object") {
+ return new RegExp("^(?:".concat(e.pattern, ")$"), r);
+ }
+ });
+ return function(n) {
+ var r = "";
+ for(var t = 0; t < e.length; t++){
+ var i = e[t];
+ if (typeof i === "string") {
+ r += i;
+ continue;
+ }
+ var f = n ? n[i.name] : undefined;
+ var u = i.modifier === "?" || i.modifier === "*";
+ var p = i.modifier === "*" || i.modifier === "+";
+ if (Array.isArray(f)) {
+ if (!p) {
+ throw new TypeError('Expected "'.concat(i.name, '" to not repeat, but got an array'));
+ }
+ if (f.length === 0) {
+ if (u) continue;
+ throw new TypeError('Expected "'.concat(i.name, '" to not be empty'));
+ }
+ for(var v = 0; v < f.length; v++){
+ var s = a(f[v], i);
+ if (o && !c[t].test(s)) {
+ throw new TypeError('Expected all "'.concat(i.name, '" to match "').concat(i.pattern, '", but got "').concat(s, '"'));
+ }
+ r += i.prefix + s + i.suffix;
+ }
+ continue;
+ }
+ if (typeof f === "string" || typeof f === "number") {
+ var s = a(String(f), i);
+ if (o && !c[t].test(s)) {
+ throw new TypeError('Expected "'.concat(i.name, '" to match "').concat(i.pattern, '", but got "').concat(s, '"'));
+ }
+ r += i.prefix + s + i.suffix;
+ continue;
+ }
+ if (u) continue;
+ var d = p ? "an array" : "a string";
+ throw new TypeError('Expected "'.concat(i.name, '" to be ').concat(d));
+ }
+ return r;
+ };
+ }
+ n.tokensToFunction = tokensToFunction;
+ function match(e, n) {
+ var r = [];
+ var t = pathToRegexp(e, r, n);
+ return regexpToFunction(t, r, n);
+ }
+ n.match = match;
+ function regexpToFunction(e, n, r) {
+ if (r === void 0) {
+ r = {};
+ }
+ var t = r.decode, a = t === void 0 ? function(e) {
+ return e;
+ } : t;
+ return function(r) {
+ var t = e.exec(r);
+ if (!t) return false;
+ var i = t[0], o = t.index;
+ var c = Object.create(null);
+ var _loop_1 = function(e) {
+ if (t[e] === undefined) return "continue";
+ var r = n[e - 1];
+ if (r.modifier === "*" || r.modifier === "+") {
+ c[r.name] = t[e].split(r.prefix + r.suffix).map(function(e) {
+ return a(e, r);
+ });
+ } else {
+ c[r.name] = a(t[e], r);
+ }
+ };
+ for(var f = 1; f < t.length; f++){
+ _loop_1(f);
+ }
+ return {
+ path: i,
+ index: o,
+ params: c
+ };
+ };
+ }
+ n.regexpToFunction = regexpToFunction;
+ function escapeString(e) {
+ return e.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1");
+ }
+ function flags(e) {
+ return e && e.sensitive ? "" : "i";
+ }
+ function regexpToRegexp(e, n) {
+ if (!n) return e;
+ var r = /\((?:\?<(.*?)>)?(?!\?)/g;
+ var t = 0;
+ var a = r.exec(e.source);
+ while(a){
+ n.push({
+ name: a[1] || t++,
+ prefix: "",
+ suffix: "",
+ modifier: "",
+ pattern: ""
+ });
+ a = r.exec(e.source);
+ }
+ return e;
+ }
+ function arrayToRegexp(e, n, r) {
+ var t = e.map(function(e) {
+ return pathToRegexp(e, n, r).source;
+ });
+ return new RegExp("(?:".concat(t.join("|"), ")"), flags(r));
+ }
+ function stringToRegexp(e, n, r) {
+ return tokensToRegexp(parse(e, r), n, r);
+ }
+ function tokensToRegexp(e, n, r) {
+ if (r === void 0) {
+ r = {};
+ }
+ var t = r.strict, a = t === void 0 ? false : t, i = r.start, o = i === void 0 ? true : i, c = r.end, f = c === void 0 ? true : c, u = r.encode, p = u === void 0 ? function(e) {
+ return e;
+ } : u, v = r.delimiter, s = v === void 0 ? "/#?" : v, d = r.endsWith, g = d === void 0 ? "" : d;
+ var x = "[".concat(escapeString(g), "]|$");
+ var h = "[".concat(escapeString(s), "]");
+ var l = o ? "^" : "";
+ for(var m = 0, T = e; m < T.length; m++){
+ var E = T[m];
+ if (typeof E === "string") {
+ l += escapeString(p(E));
+ } else {
+ var w = escapeString(p(E.prefix));
+ var y = escapeString(p(E.suffix));
+ if (E.pattern) {
+ if (n) n.push(E);
+ if (w || y) {
+ if (E.modifier === "+" || E.modifier === "*") {
+ var R = E.modifier === "*" ? "?" : "";
+ l += "(?:".concat(w, "((?:").concat(E.pattern, ")(?:").concat(y).concat(w, "(?:").concat(E.pattern, "))*)").concat(y, ")").concat(R);
+ } else {
+ l += "(?:".concat(w, "(").concat(E.pattern, ")").concat(y, ")").concat(E.modifier);
+ }
+ } else {
+ if (E.modifier === "+" || E.modifier === "*") {
+ throw new TypeError('Can not repeat "'.concat(E.name, '" without a prefix and suffix'));
+ }
+ l += "(".concat(E.pattern, ")").concat(E.modifier);
+ }
+ } else {
+ l += "(?:".concat(w).concat(y, ")").concat(E.modifier);
+ }
+ }
+ }
+ if (f) {
+ if (!a) l += "".concat(h, "?");
+ l += !r.endsWith ? "$" : "(?=".concat(x, ")");
+ } else {
+ var A = e[e.length - 1];
+ var _ = typeof A === "string" ? h.indexOf(A[A.length - 1]) > -1 : A === undefined;
+ if (!a) {
+ l += "(?:".concat(h, "(?=").concat(x, "))?");
+ }
+ if (!_) {
+ l += "(?=".concat(h, "|").concat(x, ")");
+ }
+ }
+ return new RegExp(l, flags(r));
+ }
+ n.tokensToRegexp = tokensToRegexp;
+ function pathToRegexp(e, n, r) {
+ if (e instanceof RegExp) return regexpToRegexp(e, n);
+ if (Array.isArray(e)) return arrayToRegexp(e, n, r);
+ return stringToRegexp(e, n, r);
+ }
+ n.pathToRegexp = pathToRegexp;
+ })();
+ module.exports = e;
+})();
+}),
+"[project]/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => {
+
+(()=>{
+ var i = {
+ 943: function(i, e) {
+ (function(o, a) {
+ "use strict";
+ var r = "1.0.35", t = "", n = "?", s = "function", b = "undefined", w = "object", l = "string", d = "major", c = "model", u = "name", p = "type", m = "vendor", f = "version", h = "architecture", v = "console", g = "mobile", k = "tablet", x = "smarttv", _ = "wearable", y = "embedded", q = 350;
+ var T = "Amazon", S = "Apple", z = "ASUS", N = "BlackBerry", A = "Browser", C = "Chrome", E = "Edge", O = "Firefox", U = "Google", j = "Huawei", P = "LG", R = "Microsoft", M = "Motorola", B = "Opera", V = "Samsung", D = "Sharp", I = "Sony", W = "Viera", F = "Xiaomi", G = "Zebra", H = "Facebook", L = "Chromium OS", Z = "Mac OS";
+ var extend = function(i, e) {
+ var o = {};
+ for(var a in i){
+ if (e[a] && e[a].length % 2 === 0) {
+ o[a] = e[a].concat(i[a]);
+ } else {
+ o[a] = i[a];
+ }
+ }
+ return o;
+ }, enumerize = function(i) {
+ var e = {};
+ for(var o = 0; o < i.length; o++){
+ e[i[o].toUpperCase()] = i[o];
+ }
+ return e;
+ }, has = function(i, e) {
+ return typeof i === l ? lowerize(e).indexOf(lowerize(i)) !== -1 : false;
+ }, lowerize = function(i) {
+ return i.toLowerCase();
+ }, majorize = function(i) {
+ return typeof i === l ? i.replace(/[^\d\.]/g, t).split(".")[0] : a;
+ }, trim = function(i, e) {
+ if (typeof i === l) {
+ i = i.replace(/^\s\s*/, t);
+ return typeof e === b ? i : i.substring(0, q);
+ }
+ };
+ var rgxMapper = function(i, e) {
+ var o = 0, r, t, n, b, l, d;
+ while(o < e.length && !l){
+ var c = e[o], u = e[o + 1];
+ r = t = 0;
+ while(r < c.length && !l){
+ if (!c[r]) {
+ break;
+ }
+ l = c[r++].exec(i);
+ if (!!l) {
+ for(n = 0; n < u.length; n++){
+ d = l[++t];
+ b = u[n];
+ if (typeof b === w && b.length > 0) {
+ if (b.length === 2) {
+ if (typeof b[1] == s) {
+ this[b[0]] = b[1].call(this, d);
+ } else {
+ this[b[0]] = b[1];
+ }
+ } else if (b.length === 3) {
+ if (typeof b[1] === s && !(b[1].exec && b[1].test)) {
+ this[b[0]] = d ? b[1].call(this, d, b[2]) : a;
+ } else {
+ this[b[0]] = d ? d.replace(b[1], b[2]) : a;
+ }
+ } else if (b.length === 4) {
+ this[b[0]] = d ? b[3].call(this, d.replace(b[1], b[2])) : a;
+ }
+ } else {
+ this[b] = d ? d : a;
+ }
+ }
+ }
+ }
+ o += 2;
+ }
+ }, strMapper = function(i, e) {
+ for(var o in e){
+ if (typeof e[o] === w && e[o].length > 0) {
+ for(var r = 0; r < e[o].length; r++){
+ if (has(e[o][r], i)) {
+ return o === n ? a : o;
+ }
+ }
+ } else if (has(e[o], i)) {
+ return o === n ? a : o;
+ }
+ }
+ return i;
+ };
+ var $ = {
+ "1.0": "/8",
+ 1.2: "/1",
+ 1.3: "/3",
+ "2.0": "/412",
+ "2.0.2": "/416",
+ "2.0.3": "/417",
+ "2.0.4": "/419",
+ "?": "/"
+ }, X = {
+ ME: "4.90",
+ "NT 3.11": "NT3.51",
+ "NT 4.0": "NT4.0",
+ 2e3: "NT 5.0",
+ XP: [
+ "NT 5.1",
+ "NT 5.2"
+ ],
+ Vista: "NT 6.0",
+ 7: "NT 6.1",
+ 8: "NT 6.2",
+ 8.1: "NT 6.3",
+ 10: [
+ "NT 6.4",
+ "NT 10.0"
+ ],
+ RT: "ARM"
+ };
+ var K = {
+ browser: [
+ [
+ /\b(?:crmo|crios)\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Chrome"
+ ]
+ ],
+ [
+ /edg(?:e|ios|a)?\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Edge"
+ ]
+ ],
+ [
+ /(opera mini)\/([-\w\.]+)/i,
+ /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
+ /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /opios[\/ ]+([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ B + " Mini"
+ ]
+ ],
+ [
+ /\bopr\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ B
+ ]
+ ],
+ [
+ /(kindle)\/([\w\.]+)/i,
+ /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,
+ /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,
+ /(ba?idubrowser)[\/ ]?([\w\.]+)/i,
+ /(?:ms|\()(ie) ([\w\.]+)/i,
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
+ /(heytap|ovi)browser\/([\d\.]+)/i,
+ /(weibo)__([\d\.]+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "UC" + A
+ ]
+ ],
+ [
+ /microm.+\bqbcore\/([\w\.]+)/i,
+ /\bqbcore\/([\w\.]+).+microm/i
+ ],
+ [
+ f,
+ [
+ u,
+ "WeChat(Win) Desktop"
+ ]
+ ],
+ [
+ /micromessenger\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "WeChat"
+ ]
+ ],
+ [
+ /konqueror\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Konqueror"
+ ]
+ ],
+ [
+ /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
+ ],
+ [
+ f,
+ [
+ u,
+ "IE"
+ ]
+ ],
+ [
+ /ya(?:search)?browser\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Yandex"
+ ]
+ ],
+ [
+ /(avast|avg)\/([\w\.]+)/i
+ ],
+ [
+ [
+ u,
+ /(.+)/,
+ "$1 Secure " + A
+ ],
+ f
+ ],
+ [
+ /\bfocus\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ O + " Focus"
+ ]
+ ],
+ [
+ /\bopt\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ B + " Touch"
+ ]
+ ],
+ [
+ /coc_coc\w+\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Coc Coc"
+ ]
+ ],
+ [
+ /dolfin\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Dolphin"
+ ]
+ ],
+ [
+ /coast\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ B + " Coast"
+ ]
+ ],
+ [
+ /miuibrowser\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "MIUI " + A
+ ]
+ ],
+ [
+ /fxios\/([-\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ O
+ ]
+ ],
+ [
+ /\bqihu|(qi?ho?o?|360)browser/i
+ ],
+ [
+ [
+ u,
+ "360 " + A
+ ]
+ ],
+ [
+ /(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i
+ ],
+ [
+ [
+ u,
+ /(.+)/,
+ "$1 " + A
+ ],
+ f
+ ],
+ [
+ /(comodo_dragon)\/([\w\.]+)/i
+ ],
+ [
+ [
+ u,
+ /_/g,
+ " "
+ ],
+ f
+ ],
+ [
+ /(electron)\/([\w\.]+) safari/i,
+ /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
+ /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /(metasr)[\/ ]?([\w\.]+)/i,
+ /(lbbrowser)/i,
+ /\[(linkedin)app\]/i
+ ],
+ [
+ u
+ ],
+ [
+ /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
+ ],
+ [
+ [
+ u,
+ H
+ ],
+ f
+ ],
+ [
+ /(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
+ /(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
+ /safari (line)\/([\w\.]+)/i,
+ /\b(line)\/([\w\.]+)\/iab/i,
+ /(chromium|instagram)[\/ ]([-\w\.]+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /\bgsa\/([\w\.]+) .*safari\//i
+ ],
+ [
+ f,
+ [
+ u,
+ "GSA"
+ ]
+ ],
+ [
+ /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "TikTok"
+ ]
+ ],
+ [
+ /headlesschrome(?:\/([\w\.]+)| )/i
+ ],
+ [
+ f,
+ [
+ u,
+ C + " Headless"
+ ]
+ ],
+ [
+ / wv\).+(chrome)\/([\w\.]+)/i
+ ],
+ [
+ [
+ u,
+ C + " WebView"
+ ],
+ f
+ ],
+ [
+ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Android " + A
+ ]
+ ],
+ [
+ /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Mobile Safari"
+ ]
+ ],
+ [
+ /version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i
+ ],
+ [
+ f,
+ u
+ ],
+ [
+ /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
+ ],
+ [
+ u,
+ [
+ f,
+ strMapper,
+ $
+ ]
+ ],
+ [
+ /(webkit|khtml)\/([\w\.]+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /(navigator|netscape\d?)\/([-\w\.]+)/i
+ ],
+ [
+ [
+ u,
+ "Netscape"
+ ],
+ f
+ ],
+ [
+ /mobile vr; rv:([\w\.]+)\).+firefox/i
+ ],
+ [
+ f,
+ [
+ u,
+ O + " Reality"
+ ]
+ ],
+ [
+ /ekiohf.+(flow)\/([\w\.]+)/i,
+ /(swiftfox)/i,
+ /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
+ /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
+ /(firefox)\/([\w\.]+)/i,
+ /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
+ /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
+ /(links) \(([\w\.]+)/i,
+ /panasonic;(viera)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /(cobalt)\/([\w\.]+)/i
+ ],
+ [
+ u,
+ [
+ f,
+ /master.|lts./,
+ ""
+ ]
+ ]
+ ],
+ cpu: [
+ [
+ /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i
+ ],
+ [
+ [
+ h,
+ "amd64"
+ ]
+ ],
+ [
+ /(ia32(?=;))/i
+ ],
+ [
+ [
+ h,
+ lowerize
+ ]
+ ],
+ [
+ /((?:i[346]|x)86)[;\)]/i
+ ],
+ [
+ [
+ h,
+ "ia32"
+ ]
+ ],
+ [
+ /\b(aarch64|arm(v?8e?l?|_?64))\b/i
+ ],
+ [
+ [
+ h,
+ "arm64"
+ ]
+ ],
+ [
+ /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i
+ ],
+ [
+ [
+ h,
+ "armhf"
+ ]
+ ],
+ [
+ /windows (ce|mobile); ppc;/i
+ ],
+ [
+ [
+ h,
+ "arm"
+ ]
+ ],
+ [
+ /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i
+ ],
+ [
+ [
+ h,
+ /ower/,
+ t,
+ lowerize
+ ]
+ ],
+ [
+ /(sun4\w)[;\)]/i
+ ],
+ [
+ [
+ h,
+ "sparc"
+ ]
+ ],
+ [
+ /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
+ ],
+ [
+ [
+ h,
+ lowerize
+ ]
+ ]
+ ],
+ device: [
+ [
+ /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
+ ],
+ [
+ c,
+ [
+ m,
+ V
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
+ /samsung[- ]([-\w]+)/i,
+ /sec-(sgh\w+)/i
+ ],
+ [
+ c,
+ [
+ m,
+ V
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i
+ ],
+ [
+ c,
+ [
+ m,
+ S
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\((ipad);[-\w\),; ]+apple/i,
+ /applecoremedia\/[\w\.]+ \((ipad)/i,
+ /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
+ ],
+ [
+ c,
+ [
+ m,
+ S
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(macintosh);/i
+ ],
+ [
+ c,
+ [
+ m,
+ S
+ ]
+ ],
+ [
+ /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
+ ],
+ [
+ c,
+ [
+ m,
+ D
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
+ ],
+ [
+ c,
+ [
+ m,
+ j
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(?:huawei|honor)([-\w ]+)[;\)]/i,
+ /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
+ ],
+ [
+ c,
+ [
+ m,
+ j
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(poco[\w ]+)(?: bui|\))/i,
+ /\b; (\w+) build\/hm\1/i,
+ /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
+ /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i
+ ],
+ [
+ [
+ c,
+ /_/g,
+ " "
+ ],
+ [
+ m,
+ F
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i
+ ],
+ [
+ [
+ c,
+ /_/g,
+ " "
+ ],
+ [
+ m,
+ F
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /; (\w+) bui.+ oppo/i,
+ /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "OPPO"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /vivo (\w+)(?: bui|\))/i,
+ /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Vivo"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(rmx[12]\d{3})(?: bui|;|\))/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Realme"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
+ /\bmot(?:orola)?[- ](\w*)/i,
+ /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
+ ],
+ [
+ c,
+ [
+ m,
+ M
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(mz60\d|xoom[2 ]{0,2}) build\//i
+ ],
+ [
+ c,
+ [
+ m,
+ M
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
+ ],
+ [
+ c,
+ [
+ m,
+ P
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
+ /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
+ /\blg-?([\d\w]+) bui/i
+ ],
+ [
+ c,
+ [
+ m,
+ P
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(ideatab[-\w ]+)/i,
+ /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Lenovo"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(?:maemo|nokia).*(n900|lumia \d+)/i,
+ /nokia[-_ ]?([-\w\.]*)/i
+ ],
+ [
+ [
+ c,
+ /_/g,
+ " "
+ ],
+ [
+ m,
+ "Nokia"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(pixel c)\b/i
+ ],
+ [
+ c,
+ [
+ m,
+ U
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i
+ ],
+ [
+ c,
+ [
+ m,
+ U
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
+ ],
+ [
+ c,
+ [
+ m,
+ I
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /sony tablet [ps]/i,
+ /\b(?:sony)?sgp\w+(?: bui|\))/i
+ ],
+ [
+ [
+ c,
+ "Xperia Tablet"
+ ],
+ [
+ m,
+ I
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ / (kb2005|in20[12]5|be20[12][59])\b/i,
+ /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
+ ],
+ [
+ c,
+ [
+ m,
+ "OnePlus"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(alexa)webm/i,
+ /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,
+ /(kf[a-z]+)( bui|\)).+silk\//i
+ ],
+ [
+ c,
+ [
+ m,
+ T
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
+ ],
+ [
+ [
+ c,
+ /(.+)/g,
+ "Fire Phone $1"
+ ],
+ [
+ m,
+ T
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(playbook);[-\w\),; ]+(rim)/i
+ ],
+ [
+ c,
+ m,
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b((?:bb[a-f]|st[hv])100-\d)/i,
+ /\(bb10; (\w+)/i
+ ],
+ [
+ c,
+ [
+ m,
+ N
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
+ ],
+ [
+ c,
+ [
+ m,
+ z
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
+ ],
+ [
+ c,
+ [
+ m,
+ z
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(nexus 9)/i
+ ],
+ [
+ c,
+ [
+ m,
+ "HTC"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
+ /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
+ /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
+ ],
+ [
+ m,
+ [
+ c,
+ /_/g,
+ " "
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Acer"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /droid.+; (m[1-5] note) bui/i,
+ /\bmz-([-\w]{2,})/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Meizu"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
+ /(hp) ([\w ]+\w)/i,
+ /(asus)-?(\w+)/i,
+ /(microsoft); (lumia[\w ]+)/i,
+ /(lenovo)[-_ ]?([-\w]+)/i,
+ /(jolla)/i,
+ /(oppo) ?([\w ]+) bui/i
+ ],
+ [
+ m,
+ c,
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(kobo)\s(ereader|touch)/i,
+ /(archos) (gamepad2?)/i,
+ /(hp).+(touchpad(?!.+tablet)|tablet)/i,
+ /(kindle)\/([\w\.]+)/i,
+ /(nook)[\w ]+build\/(\w+)/i,
+ /(dell) (strea[kpr\d ]*[\dko])/i,
+ /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
+ /(trinity)[- ]*(t\d{3}) bui/i,
+ /(gigaset)[- ]+(q\w{1,9}) bui/i,
+ /(vodafone) ([\w ]+)(?:\)| bui)/i
+ ],
+ [
+ m,
+ c,
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(surface duo)/i
+ ],
+ [
+ c,
+ [
+ m,
+ R
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /droid [\d\.]+; (fp\du?)(?: b|\))/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Fairphone"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(u304aa)/i
+ ],
+ [
+ c,
+ [
+ m,
+ "AT&T"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\bsie-(\w*)/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Siemens"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(rct\w+) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "RCA"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(venue[\d ]{2,7}) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Dell"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(q(?:mv|ta)\w+) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Verizon"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Barnes & Noble"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(tm\d{3}\w+) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "NuVision"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(k88) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "ZTE"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(nx\d{3}j) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "ZTE"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(gen\d{3}) b.+49h/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Swiss"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(zur\d{3}) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Swiss"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b((zeki)?tb.*\b) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Zeki"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b([yr]\d{2}) b/i,
+ /\b(dragon[- ]+touch |dt)(\w{5}) b/i
+ ],
+ [
+ [
+ m,
+ "Dragon Touch"
+ ],
+ c,
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(ns-?\w{0,9}) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Insignia"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b((nxa|next)-?\w{0,9}) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "NextBook"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
+ ],
+ [
+ [
+ m,
+ "Voice"
+ ],
+ c,
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(lvtel\-)?(v1[12]) b/i
+ ],
+ [
+ [
+ m,
+ "LvTel"
+ ],
+ c,
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(ph-1) /i
+ ],
+ [
+ c,
+ [
+ m,
+ "Essential"
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /\b(v(100md|700na|7011|917g).*\b) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Envizen"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b(trio[-\w\. ]+) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "MachSpeed"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\btu_(1491) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Rotor"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(shield[\w ]+) b/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Nvidia"
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(sprint) (\w+)/i
+ ],
+ [
+ m,
+ c,
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(kin\.[onetw]{3})/i
+ ],
+ [
+ [
+ c,
+ /\./g,
+ " "
+ ],
+ [
+ m,
+ R
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
+ ],
+ [
+ c,
+ [
+ m,
+ G
+ ],
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
+ ],
+ [
+ c,
+ [
+ m,
+ G
+ ],
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /smart-tv.+(samsung)/i
+ ],
+ [
+ m,
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /hbbtv.+maple;(\d+)/i
+ ],
+ [
+ [
+ c,
+ /^/,
+ "SmartTV"
+ ],
+ [
+ m,
+ V
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
+ ],
+ [
+ [
+ m,
+ P
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /(apple) ?tv/i
+ ],
+ [
+ m,
+ [
+ c,
+ S + " TV"
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /crkey/i
+ ],
+ [
+ [
+ c,
+ C + "cast"
+ ],
+ [
+ m,
+ U
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /droid.+aft(\w)( bui|\))/i
+ ],
+ [
+ c,
+ [
+ m,
+ T
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /\(dtv[\);].+(aquos)/i,
+ /(aquos-tv[\w ]+)\)/i
+ ],
+ [
+ c,
+ [
+ m,
+ D
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /(bravia[\w ]+)( bui|\))/i
+ ],
+ [
+ c,
+ [
+ m,
+ I
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /(mitv-\w{5}) bui/i
+ ],
+ [
+ c,
+ [
+ m,
+ F
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /Hbbtv.*(technisat) (.*);/i
+ ],
+ [
+ m,
+ c,
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
+ /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
+ ],
+ [
+ [
+ m,
+ trim
+ ],
+ [
+ c,
+ trim
+ ],
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
+ ],
+ [
+ [
+ p,
+ x
+ ]
+ ],
+ [
+ /(ouya)/i,
+ /(nintendo) ([wids3utch]+)/i
+ ],
+ [
+ m,
+ c,
+ [
+ p,
+ v
+ ]
+ ],
+ [
+ /droid.+; (shield) bui/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Nvidia"
+ ],
+ [
+ p,
+ v
+ ]
+ ],
+ [
+ /(playstation [345portablevi]+)/i
+ ],
+ [
+ c,
+ [
+ m,
+ I
+ ],
+ [
+ p,
+ v
+ ]
+ ],
+ [
+ /\b(xbox(?: one)?(?!; xbox))[\); ]/i
+ ],
+ [
+ c,
+ [
+ m,
+ R
+ ],
+ [
+ p,
+ v
+ ]
+ ],
+ [
+ /((pebble))app/i
+ ],
+ [
+ m,
+ c,
+ [
+ p,
+ _
+ ]
+ ],
+ [
+ /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
+ ],
+ [
+ c,
+ [
+ m,
+ S
+ ],
+ [
+ p,
+ _
+ ]
+ ],
+ [
+ /droid.+; (glass) \d/i
+ ],
+ [
+ c,
+ [
+ m,
+ U
+ ],
+ [
+ p,
+ _
+ ]
+ ],
+ [
+ /droid.+; (wt63?0{2,3})\)/i
+ ],
+ [
+ c,
+ [
+ m,
+ G
+ ],
+ [
+ p,
+ _
+ ]
+ ],
+ [
+ /(quest( 2| pro)?)/i
+ ],
+ [
+ c,
+ [
+ m,
+ H
+ ],
+ [
+ p,
+ _
+ ]
+ ],
+ [
+ /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
+ ],
+ [
+ m,
+ [
+ p,
+ y
+ ]
+ ],
+ [
+ /(aeobc)\b/i
+ ],
+ [
+ c,
+ [
+ m,
+ T
+ ],
+ [
+ p,
+ y
+ ]
+ ],
+ [
+ /droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i
+ ],
+ [
+ c,
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i
+ ],
+ [
+ c,
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
+ ],
+ [
+ [
+ p,
+ k
+ ]
+ ],
+ [
+ /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
+ ],
+ [
+ [
+ p,
+ g
+ ]
+ ],
+ [
+ /(android[-\w\. ]{0,9});.+buil/i
+ ],
+ [
+ c,
+ [
+ m,
+ "Generic"
+ ]
+ ]
+ ],
+ engine: [
+ [
+ /windows.+ edge\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ E + "HTML"
+ ]
+ ],
+ [
+ /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Blink"
+ ]
+ ],
+ [
+ /(presto)\/([\w\.]+)/i,
+ /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
+ /ekioh(flow)\/([\w\.]+)/i,
+ /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
+ /(icab)[\/ ]([23]\.[\d\.]+)/i,
+ /\b(libweb)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /rv\:([\w\.]{1,9})\b.+(gecko)/i
+ ],
+ [
+ f,
+ u
+ ]
+ ],
+ os: [
+ [
+ /microsoft (windows) (vista|xp)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /(windows) nt 6\.2; (arm)/i,
+ /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,
+ /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i
+ ],
+ [
+ u,
+ [
+ f,
+ strMapper,
+ X
+ ]
+ ],
+ [
+ /(win(?=3|9|n)|win 9x )([nt\d\.]+)/i
+ ],
+ [
+ [
+ u,
+ "Windows"
+ ],
+ [
+ f,
+ strMapper,
+ X
+ ]
+ ],
+ [
+ /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
+ /ios;fbsv\/([\d\.]+)/i,
+ /cfnetwork\/.+darwin/i
+ ],
+ [
+ [
+ f,
+ /_/g,
+ "."
+ ],
+ [
+ u,
+ "iOS"
+ ]
+ ],
+ [
+ /(mac os x) ?([\w\. ]*)/i,
+ /(macintosh|mac_powerpc\b)(?!.+haiku)/i
+ ],
+ [
+ [
+ u,
+ Z
+ ],
+ [
+ f,
+ /_/g,
+ "."
+ ]
+ ],
+ [
+ /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i
+ ],
+ [
+ f,
+ u
+ ],
+ [
+ /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
+ /(blackberry)\w*\/([\w\.]*)/i,
+ /(tizen|kaios)[\/ ]([\w\.]+)/i,
+ /\((series40);/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /\(bb(10);/i
+ ],
+ [
+ f,
+ [
+ u,
+ N
+ ]
+ ],
+ [
+ /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "Symbian"
+ ]
+ ],
+ [
+ /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ O + " OS"
+ ]
+ ],
+ [
+ /web0s;.+rt(tv)/i,
+ /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "webOS"
+ ]
+ ],
+ [
+ /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ "watchOS"
+ ]
+ ],
+ [
+ /crkey\/([\d\.]+)/i
+ ],
+ [
+ f,
+ [
+ u,
+ C + "cast"
+ ]
+ ],
+ [
+ /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
+ ],
+ [
+ [
+ u,
+ L
+ ],
+ f
+ ],
+ [
+ /panasonic;(viera)/i,
+ /(netrange)mmh/i,
+ /(nettv)\/(\d+\.[\w\.]+)/i,
+ /(nintendo|playstation) ([wids345portablevuch]+)/i,
+ /(xbox); +xbox ([^\);]+)/i,
+ /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
+ /(mint)[\/\(\) ]?(\w*)/i,
+ /(mageia|vectorlinux)[; ]/i,
+ /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
+ /(hurd|linux) ?([\w\.]*)/i,
+ /(gnu) ?([\w\.]*)/i,
+ /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
+ /(haiku) (\w+)/i
+ ],
+ [
+ u,
+ f
+ ],
+ [
+ /(sunos) ?([\w\.\d]*)/i
+ ],
+ [
+ [
+ u,
+ "Solaris"
+ ],
+ f
+ ],
+ [
+ /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
+ /(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
+ /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
+ /(unix) ?([\w\.]*)/i
+ ],
+ [
+ u,
+ f
+ ]
+ ]
+ };
+ var UAParser = function(i, e) {
+ if (typeof i === w) {
+ e = i;
+ i = a;
+ }
+ if (!(this instanceof UAParser)) {
+ return new UAParser(i, e).getResult();
+ }
+ var r = typeof o !== b && o.navigator ? o.navigator : a;
+ var n = i || (r && r.userAgent ? r.userAgent : t);
+ var v = r && r.userAgentData ? r.userAgentData : a;
+ var x = e ? extend(K, e) : K;
+ var _ = r && r.userAgent == n;
+ this.getBrowser = function() {
+ var i = {};
+ i[u] = a;
+ i[f] = a;
+ rgxMapper.call(i, n, x.browser);
+ i[d] = majorize(i[f]);
+ if (_ && r && r.brave && typeof r.brave.isBrave == s) {
+ i[u] = "Brave";
+ }
+ return i;
+ };
+ this.getCPU = function() {
+ var i = {};
+ i[h] = a;
+ rgxMapper.call(i, n, x.cpu);
+ return i;
+ };
+ this.getDevice = function() {
+ var i = {};
+ i[m] = a;
+ i[c] = a;
+ i[p] = a;
+ rgxMapper.call(i, n, x.device);
+ if (_ && !i[p] && v && v.mobile) {
+ i[p] = g;
+ }
+ if (_ && i[c] == "Macintosh" && r && typeof r.standalone !== b && r.maxTouchPoints && r.maxTouchPoints > 2) {
+ i[c] = "iPad";
+ i[p] = k;
+ }
+ return i;
+ };
+ this.getEngine = function() {
+ var i = {};
+ i[u] = a;
+ i[f] = a;
+ rgxMapper.call(i, n, x.engine);
+ return i;
+ };
+ this.getOS = function() {
+ var i = {};
+ i[u] = a;
+ i[f] = a;
+ rgxMapper.call(i, n, x.os);
+ if (_ && !i[u] && v && v.platform != "Unknown") {
+ i[u] = v.platform.replace(/chrome os/i, L).replace(/macos/i, Z);
+ }
+ return i;
+ };
+ this.getResult = function() {
+ return {
+ ua: this.getUA(),
+ browser: this.getBrowser(),
+ engine: this.getEngine(),
+ os: this.getOS(),
+ device: this.getDevice(),
+ cpu: this.getCPU()
+ };
+ };
+ this.getUA = function() {
+ return n;
+ };
+ this.setUA = function(i) {
+ n = typeof i === l && i.length > q ? trim(i, q) : i;
+ return this;
+ };
+ this.setUA(n);
+ return this;
+ };
+ UAParser.VERSION = r;
+ UAParser.BROWSER = enumerize([
+ u,
+ f,
+ d
+ ]);
+ UAParser.CPU = enumerize([
+ h
+ ]);
+ UAParser.DEVICE = enumerize([
+ c,
+ m,
+ p,
+ v,
+ g,
+ x,
+ k,
+ _,
+ y
+ ]);
+ UAParser.ENGINE = UAParser.OS = enumerize([
+ u,
+ f
+ ]);
+ if (typeof e !== b) {
+ if ("object" !== b && i.exports) {
+ e = i.exports = UAParser;
+ }
+ e.UAParser = UAParser;
+ } else {
+ if (typeof define === s && define.amd) {
+ ((r)=>r !== undefined && __turbopack_context__.v(r))(function() {
+ return UAParser;
+ }(__turbopack_context__.r, exports, module));
+ } else if (typeof o !== b) {
+ o.UAParser = UAParser;
+ }
+ }
+ var Q = typeof o !== b && (o.jQuery || o.Zepto);
+ if (Q && !Q.ua) {
+ var Y = new UAParser;
+ Q.ua = Y.getResult();
+ Q.ua.get = function() {
+ return Y.getUA();
+ };
+ Q.ua.set = function(i) {
+ Y.setUA(i);
+ var e = Y.getResult();
+ for(var o in e){
+ Q.ua[o] = e[o];
+ }
+ };
+ }
+ })(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : this);
+ }
+ };
+ var e = {};
+ function __nccwpck_require__(o) {
+ var a = e[o];
+ if (a !== undefined) {
+ return a.exports;
+ }
+ var r = e[o] = {
+ exports: {}
+ };
+ var t = true;
+ try {
+ i[o].call(r.exports, r, r.exports, __nccwpck_require__);
+ t = false;
+ } finally{
+ if (t) delete e[o];
+ }
+ return r.exports;
+ }
+ if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/ua-parser-js") + "/";
+ var o = __nccwpck_require__(943);
+ module.exports = o;
+})();
+}),
+"[project]/node_modules/next/dist/esm/build/output/log.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "bootstrap",
+ ()=>bootstrap,
+ "error",
+ ()=>error,
+ "errorOnce",
+ ()=>errorOnce,
+ "event",
+ ()=>event,
+ "info",
+ ()=>info,
+ "prefixes",
+ ()=>prefixes,
+ "ready",
+ ()=>ready,
+ "trace",
+ ()=>trace,
+ "wait",
+ ()=>wait,
+ "warn",
+ ()=>warn,
+ "warnOnce",
+ ()=>warnOnce
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/picocolors.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [middleware] (ecmascript)");
+;
+;
+const prefixes = {
+ wait: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bold"])('○')),
+ error: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["red"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bold"])('⨯')),
+ warn: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["yellow"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bold"])('⚠')),
+ ready: '▲',
+ info: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bold"])(' ')),
+ event: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["green"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bold"])('✓')),
+ trace: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["magenta"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bold"])('»'))
+};
+const LOGGING_METHOD = {
+ log: 'log',
+ warn: 'warn',
+ error: 'error'
+};
+function prefixedLog(prefixType, ...message) {
+ if ((message[0] === '' || message[0] === undefined) && message.length === 1) {
+ message.shift();
+ }
+ const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : 'log';
+ const prefix = prefixes[prefixType];
+ // If there's no message, don't print the prefix but a new line
+ if (message.length === 0) {
+ console[consoleMethod]('');
+ } else {
+ // Ensure if there's ANSI escape codes it's concatenated into one string.
+ // Chrome DevTool can only handle color if it's in one string.
+ if (message.length === 1 && typeof message[0] === 'string') {
+ console[consoleMethod](prefix + ' ' + message[0]);
+ } else {
+ console[consoleMethod](prefix, ...message);
+ }
+ }
+}
+function bootstrap(message) {
+ console.log(message);
+}
+function wait(...message) {
+ prefixedLog('wait', ...message);
+}
+function error(...message) {
+ prefixedLog('error', ...message);
+}
+function warn(...message) {
+ prefixedLog('warn', ...message);
+}
+function ready(...message) {
+ prefixedLog('ready', ...message);
+}
+function info(...message) {
+ prefixedLog('info', ...message);
+}
+function event(...message) {
+ prefixedLog('event', ...message);
+}
+function trace(...message) {
+ prefixedLog('trace', ...message);
+}
+const warnOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length);
+function warnOnce(...message) {
+ const key = message.join(' ');
+ if (!warnOnceCache.has(key)) {
+ warnOnceCache.set(key, key);
+ warn(...message);
+ }
+}
+const errorOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length);
+function errorOnce(...message) {
+ const key = message.join(' ');
+ if (!errorOnceCache.has(key)) {
+ errorOnceCache.set(key, key);
+ error(...message);
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/build/templates/middleware.js { INNER_MIDDLEWARE_MODULE => \"[project]/src/proxy.js [middleware] (ecmascript)\" } [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>__TURBOPACK__default__export__,
+ "handler",
+ ()=>handler
+]);
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$build$2f$adapter$2f$setup$2d$node$2d$env$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$build$2f$adapter$2f$setup$2d$node$2d$env$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/build/adapter/setup-node-env.external.js [external] (next/dist/build/adapter/setup-node-env.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$globals$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/globals.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$adapter$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/adapter.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$incremental$2d$cache$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/incremental-cache/index.js [middleware] (ecmascript)");
+// Import the userland code.
+var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$proxy$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/proxy.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$is$2d$next$2d$router$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/is-next-router-error.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [middleware] (ecmascript)");
+;
+;
+;
+;
+const incrementalCacheHandler = null;
+;
+;
+;
+;
+const mod = {
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$proxy$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__
+};
+const page = "/proxy";
+const isProxy = page === '/proxy' || page === '/src/proxy';
+const handlerUserland = (("TURBOPACK compile-time truthy", 1) ? mod.proxy : "TURBOPACK unreachable") || mod.default;
+class ProxyMissingExportError extends Error {
+ constructor(message){
+ super(message);
+ Object.defineProperty(this, "__NEXT_ERROR_CODE", {
+ value: "E394",
+ enumerable: false,
+ configurable: true
+ });
+ // Stack isn't useful here, remove it considering it spams logs during development.
+ this.stack = '';
+ }
+}
+// TODO: This spams logs during development. Find a better way to handle this.
+// Removing this will spam "fn is not a function" logs which is worse.
+if (typeof handlerUserland !== 'function') {
+ throw new ProxyMissingExportError(`The ${("TURBOPACK compile-time truthy", 1) ? 'Proxy' : "TURBOPACK unreachable"} file "${page}" must export a function named \`${("TURBOPACK compile-time truthy", 1) ? 'proxy' : "TURBOPACK unreachable"}\` or a default function.`);
+}
+// Proxy will only sent out the FetchEvent to next server,
+// so load instrumentation module here and track the error inside proxy module.
+function errorHandledHandler(fn) {
+ return async (...args)=>{
+ try {
+ return await fn(...args);
+ } catch (err) {
+ // In development, error the navigation API usage in runtime,
+ // since it's not allowed to be used in proxy as it's outside of react component tree.
+ if ("TURBOPACK compile-time truthy", 1) {
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$is$2d$next$2d$router$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isNextRouterError"])(err)) {
+ err.message = `Next.js navigation API is not allowed to be used in ${("TURBOPACK compile-time truthy", 1) ? 'Proxy' : "TURBOPACK unreachable"}.`;
+ throw err;
+ }
+ }
+ const req = args[0];
+ const url = new URL(req.url);
+ const resource = url.pathname + url.search;
+ await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$globals$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["edgeInstrumentationOnRequestError"])(err, {
+ path: resource,
+ method: req.method,
+ headers: Object.fromEntries(req.headers.entries())
+ }, {
+ routerKind: 'Pages Router',
+ routePath: '/proxy',
+ routeType: 'proxy',
+ revalidateReason: undefined
+ });
+ throw err;
+ }
+ };
+}
+const internalHandler = async (opts)=>{
+ if ("TURBOPACK compile-time truthy", 1) {
+ var _opts_request_requestMeta, _opts_request_requestMeta1;
+ // This mirrors what `RouteModule#prepare` does for routes
+ // edge runtime handles loading instrumentation at the edge adapter level
+ const { join, relative } = __turbopack_context__.r("[externals]/node:path [external] (node:path, cjs)");
+ const { ensureInstrumentationRegistered } = __turbopack_context__.r("[externals]/next/dist/server/lib/router-utils/instrumentation-globals.external.js [external] (next/dist/server/lib/router-utils/instrumentation-globals.external.js, cjs)");
+ const absoluteProjectDir = join(/* turbopackIgnore: true */ process.cwd(), ((_opts_request_requestMeta = opts.request.requestMeta) == null ? void 0 : _opts_request_requestMeta.relativeProjectDir) || '');
+ const absoluteDistDir = (_opts_request_requestMeta1 = opts.request.requestMeta) == null ? void 0 : _opts_request_requestMeta1.distDir;
+ const distDir = absoluteDistDir ? relative(absoluteProjectDir, absoluteDistDir) : '.next';
+ await ensureInstrumentationRegistered(absoluteProjectDir, distDir);
+ }
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$adapter$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["adapter"])({
+ ...opts,
+ IncrementalCache: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$incremental$2d$cache$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCache"],
+ incrementalCacheHandler,
+ page,
+ handler: errorHandledHandler(handlerUserland)
+ });
+};
+async function handler(request, ctx) {
+ const result = await internalHandler({
+ request: {
+ url: request.url,
+ method: request.method,
+ headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(request.headers),
+ nextConfig: {
+ basePath: ("TURBOPACK compile-time value", ""),
+ i18n: ("TURBOPACK compile-time value", ""),
+ trailingSlash: Boolean(("TURBOPACK compile-time value", false)),
+ experimental: {
+ cacheLife: ("TURBOPACK compile-time value", {
+ "default": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 300),
+ "revalidate": ("TURBOPACK compile-time value", 900),
+ "expire": ("TURBOPACK compile-time value", 4294967294)
+ }),
+ "seconds": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 30),
+ "revalidate": ("TURBOPACK compile-time value", 1),
+ "expire": ("TURBOPACK compile-time value", 60)
+ }),
+ "minutes": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 300),
+ "revalidate": ("TURBOPACK compile-time value", 60),
+ "expire": ("TURBOPACK compile-time value", 3600)
+ }),
+ "hours": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 300),
+ "revalidate": ("TURBOPACK compile-time value", 3600),
+ "expire": ("TURBOPACK compile-time value", 86400)
+ }),
+ "days": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 300),
+ "revalidate": ("TURBOPACK compile-time value", 86400),
+ "expire": ("TURBOPACK compile-time value", 604800)
+ }),
+ "weeks": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 300),
+ "revalidate": ("TURBOPACK compile-time value", 604800),
+ "expire": ("TURBOPACK compile-time value", 2592000)
+ }),
+ "max": ("TURBOPACK compile-time value", {
+ "stale": ("TURBOPACK compile-time value", 300),
+ "revalidate": ("TURBOPACK compile-time value", 2592000),
+ "expire": ("TURBOPACK compile-time value", 31536000)
+ })
+ }),
+ authInterrupts: Boolean(("TURBOPACK compile-time value", false)),
+ clientParamParsingOrigins: ("TURBOPACK compile-time value", [])
+ }
+ },
+ page: {
+ name: page
+ },
+ body: request.method !== 'GET' && request.method !== 'HEAD' ? request.body ?? undefined : undefined,
+ waitUntil: ctx.waitUntil,
+ requestMeta: ctx.requestMeta,
+ signal: ctx.signal || new AbortController().signal
+ }
+ });
+ ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, result.waitUntil);
+ return result.response;
+}
+const __TURBOPACK__default__export__ = internalHandler;
+}),
+"[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "ACTION_HEADER",
+ ()=>ACTION_HEADER,
+ "FLIGHT_HEADERS",
+ ()=>FLIGHT_HEADERS,
+ "NEXT_ACTION_NOT_FOUND_HEADER",
+ ()=>NEXT_ACTION_NOT_FOUND_HEADER,
+ "NEXT_ACTION_REVALIDATED_HEADER",
+ ()=>NEXT_ACTION_REVALIDATED_HEADER,
+ "NEXT_DID_POSTPONE_HEADER",
+ ()=>NEXT_DID_POSTPONE_HEADER,
+ "NEXT_HMR_REFRESH_HEADER",
+ ()=>NEXT_HMR_REFRESH_HEADER,
+ "NEXT_HTML_REQUEST_ID_HEADER",
+ ()=>NEXT_HTML_REQUEST_ID_HEADER,
+ "NEXT_INSTANT_TEST_COOKIE",
+ ()=>NEXT_INSTANT_TEST_COOKIE,
+ "NEXT_IS_PRERENDER_HEADER",
+ ()=>NEXT_IS_PRERENDER_HEADER,
+ "NEXT_REQUEST_ID_HEADER",
+ ()=>NEXT_REQUEST_ID_HEADER,
+ "NEXT_REWRITTEN_PATH_HEADER",
+ ()=>NEXT_REWRITTEN_PATH_HEADER,
+ "NEXT_REWRITTEN_QUERY_HEADER",
+ ()=>NEXT_REWRITTEN_QUERY_HEADER,
+ "NEXT_ROUTER_PREFETCH_HEADER",
+ ()=>NEXT_ROUTER_PREFETCH_HEADER,
+ "NEXT_ROUTER_SEGMENT_PREFETCH_HEADER",
+ ()=>NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,
+ "NEXT_ROUTER_STALE_TIME_HEADER",
+ ()=>NEXT_ROUTER_STALE_TIME_HEADER,
+ "NEXT_ROUTER_STATE_TREE_HEADER",
+ ()=>NEXT_ROUTER_STATE_TREE_HEADER,
+ "NEXT_RSC_UNION_QUERY",
+ ()=>NEXT_RSC_UNION_QUERY,
+ "NEXT_URL",
+ ()=>NEXT_URL,
+ "RSC_CONTENT_TYPE_HEADER",
+ ()=>RSC_CONTENT_TYPE_HEADER,
+ "RSC_HEADER",
+ ()=>RSC_HEADER
+]);
+const RSC_HEADER = 'rsc';
+const ACTION_HEADER = 'next-action';
+const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree';
+const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch';
+const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch';
+const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh';
+const NEXT_URL = 'next-url';
+const RSC_CONTENT_TYPE_HEADER = 'text/x-component';
+const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing';
+const FLIGHT_HEADERS = [
+ RSC_HEADER,
+ NEXT_ROUTER_STATE_TREE_HEADER,
+ NEXT_ROUTER_PREFETCH_HEADER,
+ NEXT_HMR_REFRESH_HEADER,
+ NEXT_ROUTER_SEGMENT_PREFETCH_HEADER
+];
+const NEXT_RSC_UNION_QUERY = '_rsc';
+const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time';
+const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed';
+const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path';
+const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query';
+const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender';
+const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found';
+const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id';
+const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id';
+const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated';
+}),
+"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/http-access-fallback.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "HTTPAccessErrorStatus",
+ ()=>HTTPAccessErrorStatus,
+ "HTTP_ERROR_FALLBACK_ERROR_CODE",
+ ()=>HTTP_ERROR_FALLBACK_ERROR_CODE,
+ "getAccessFallbackErrorTypeByStatus",
+ ()=>getAccessFallbackErrorTypeByStatus,
+ "getAccessFallbackHTTPStatus",
+ ()=>getAccessFallbackHTTPStatus,
+ "isHTTPAccessFallbackError",
+ ()=>isHTTPAccessFallbackError
+]);
+const HTTPAccessErrorStatus = {
+ NOT_FOUND: 404,
+ FORBIDDEN: 403,
+ UNAUTHORIZED: 401
+};
+const ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus));
+const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK';
+function isHTTPAccessFallbackError(error) {
+ if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {
+ return false;
+ }
+ const [prefix, httpStatus] = error.digest.split(';');
+ return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus));
+}
+function getAccessFallbackHTTPStatus(error) {
+ const httpStatus = error.digest.split(';')[1];
+ return Number(httpStatus);
+}
+function getAccessFallbackErrorTypeByStatus(status) {
+ switch(status){
+ case 401:
+ return 'unauthorized';
+ case 403:
+ return 'forbidden';
+ case 404:
+ return 'not-found';
+ default:
+ return;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/client/components/is-next-router-error.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "isNextRouterError",
+ ()=>isNextRouterError
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$http$2d$access$2d$fallback$2f$http$2d$access$2d$fallback$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/http-access-fallback/http-access-fallback.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-error.js [middleware] (ecmascript)");
+;
+;
+function isNextRouterError(error) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isRedirectError"])(error) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$http$2d$access$2d$fallback$2f$http$2d$access$2d$fallback$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isHTTPAccessFallbackError"])(error);
+}
+}),
+"[project]/node_modules/next/dist/esm/client/components/redirect-error.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "REDIRECT_ERROR_CODE",
+ ()=>REDIRECT_ERROR_CODE,
+ "isRedirectError",
+ ()=>isRedirectError
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [middleware] (ecmascript)");
+;
+const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT';
+function isRedirectError(error) {
+ if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {
+ return false;
+ }
+ const digest = error.digest.split(';');
+ const [errorCode, type] = digest;
+ const destination = digest.slice(2, -2).join(';');
+ const status = digest.at(-2);
+ const statusCode = Number(status);
+ return errorCode === REDIRECT_ERROR_CODE && (type === 'replace' || type === 'push') && typeof destination === 'string' && !isNaN(statusCode) && statusCode in __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RedirectStatusCode"];
+}
+}),
+"[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "RedirectStatusCode",
+ ()=>RedirectStatusCode
+]);
+var RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) {
+ RedirectStatusCode[RedirectStatusCode["SeeOther"] = 303] = "SeeOther";
+ RedirectStatusCode[RedirectStatusCode["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ RedirectStatusCode[RedirectStatusCode["PermanentRedirect"] = 308] = "PermanentRedirect";
+ return RedirectStatusCode;
+}({});
+}),
+"[project]/node_modules/next/dist/esm/lib/batcher.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "Batcher",
+ ()=>Batcher
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [middleware] (ecmascript)");
+;
+class Batcher {
+ constructor(cacheKeyFn, /**
+ * A function that will be called to schedule the wrapped function to be
+ * executed. This defaults to a function that will execute the function
+ * immediately.
+ */ schedulerFn = (fn)=>fn()){
+ this.cacheKeyFn = cacheKeyFn;
+ this.schedulerFn = schedulerFn;
+ this.pending = new Map();
+ }
+ static create(options) {
+ return new Batcher(options == null ? void 0 : options.cacheKeyFn, options == null ? void 0 : options.schedulerFn);
+ }
+ /**
+ * Wraps a function in a promise that will be resolved or rejected only once
+ * for a given key. This will allow multiple calls to the function to be
+ * made, but only one will be executed at a time. The result of the first
+ * call will be returned to all callers.
+ *
+ * @param key the key to use for the cache
+ * @param fn the function to wrap
+ * @returns a promise that resolves to the result of the function
+ */ async batch(key, fn) {
+ const cacheKey = this.cacheKeyFn ? await this.cacheKeyFn(key) : key;
+ if (cacheKey === null) {
+ return fn({
+ resolve: (value)=>Promise.resolve(value),
+ key
+ });
+ }
+ const pending = this.pending.get(cacheKey);
+ if (pending) return pending;
+ const { promise, resolve, reject } = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DetachedPromise"]();
+ this.pending.set(cacheKey, promise);
+ this.schedulerFn(async ()=>{
+ try {
+ const result = await fn({
+ resolve,
+ key
+ });
+ // Resolving a promise multiple times is a no-op, so we can safely
+ // resolve all pending promises with the same result.
+ resolve(result);
+ } catch (err) {
+ reject(err);
+ } finally{
+ this.pending.delete(cacheKey);
+ }
+ });
+ return promise;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "ACTION_SUFFIX",
+ ()=>ACTION_SUFFIX,
+ "APP_DIR_ALIAS",
+ ()=>APP_DIR_ALIAS,
+ "CACHE_ONE_YEAR_SECONDS",
+ ()=>CACHE_ONE_YEAR_SECONDS,
+ "DOT_NEXT_ALIAS",
+ ()=>DOT_NEXT_ALIAS,
+ "ESLINT_DEFAULT_DIRS",
+ ()=>ESLINT_DEFAULT_DIRS,
+ "GSP_NO_RETURNED_VALUE",
+ ()=>GSP_NO_RETURNED_VALUE,
+ "GSSP_COMPONENT_MEMBER_ERROR",
+ ()=>GSSP_COMPONENT_MEMBER_ERROR,
+ "GSSP_NO_RETURNED_VALUE",
+ ()=>GSSP_NO_RETURNED_VALUE,
+ "HTML_CONTENT_TYPE_HEADER",
+ ()=>HTML_CONTENT_TYPE_HEADER,
+ "INFINITE_CACHE",
+ ()=>INFINITE_CACHE,
+ "INSTRUMENTATION_HOOK_FILENAME",
+ ()=>INSTRUMENTATION_HOOK_FILENAME,
+ "JSON_CONTENT_TYPE_HEADER",
+ ()=>JSON_CONTENT_TYPE_HEADER,
+ "MATCHED_PATH_HEADER",
+ ()=>MATCHED_PATH_HEADER,
+ "MIDDLEWARE_FILENAME",
+ ()=>MIDDLEWARE_FILENAME,
+ "MIDDLEWARE_LOCATION_REGEXP",
+ ()=>MIDDLEWARE_LOCATION_REGEXP,
+ "NEXT_BODY_SUFFIX",
+ ()=>NEXT_BODY_SUFFIX,
+ "NEXT_CACHE_IMPLICIT_TAG_ID",
+ ()=>NEXT_CACHE_IMPLICIT_TAG_ID,
+ "NEXT_CACHE_REVALIDATED_TAGS_HEADER",
+ ()=>NEXT_CACHE_REVALIDATED_TAGS_HEADER,
+ "NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER",
+ ()=>NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER,
+ "NEXT_CACHE_ROOT_PARAM_TAG_ID",
+ ()=>NEXT_CACHE_ROOT_PARAM_TAG_ID,
+ "NEXT_CACHE_SOFT_TAG_MAX_LENGTH",
+ ()=>NEXT_CACHE_SOFT_TAG_MAX_LENGTH,
+ "NEXT_CACHE_TAGS_HEADER",
+ ()=>NEXT_CACHE_TAGS_HEADER,
+ "NEXT_CACHE_TAG_MAX_ITEMS",
+ ()=>NEXT_CACHE_TAG_MAX_ITEMS,
+ "NEXT_CACHE_TAG_MAX_LENGTH",
+ ()=>NEXT_CACHE_TAG_MAX_LENGTH,
+ "NEXT_DATA_SUFFIX",
+ ()=>NEXT_DATA_SUFFIX,
+ "NEXT_INTERCEPTION_MARKER_PREFIX",
+ ()=>NEXT_INTERCEPTION_MARKER_PREFIX,
+ "NEXT_META_SUFFIX",
+ ()=>NEXT_META_SUFFIX,
+ "NEXT_NAV_DEPLOYMENT_ID_HEADER",
+ ()=>NEXT_NAV_DEPLOYMENT_ID_HEADER,
+ "NEXT_QUERY_PARAM_PREFIX",
+ ()=>NEXT_QUERY_PARAM_PREFIX,
+ "NEXT_RESUME_HEADER",
+ ()=>NEXT_RESUME_HEADER,
+ "NEXT_RESUME_STATE_LENGTH_HEADER",
+ ()=>NEXT_RESUME_STATE_LENGTH_HEADER,
+ "NON_STANDARD_NODE_ENV",
+ ()=>NON_STANDARD_NODE_ENV,
+ "PAGES_DIR_ALIAS",
+ ()=>PAGES_DIR_ALIAS,
+ "PRERENDER_REVALIDATE_HEADER",
+ ()=>PRERENDER_REVALIDATE_HEADER,
+ "PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER",
+ ()=>PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,
+ "PROXY_FILENAME",
+ ()=>PROXY_FILENAME,
+ "PROXY_LOCATION_REGEXP",
+ ()=>PROXY_LOCATION_REGEXP,
+ "PUBLIC_DIR_MIDDLEWARE_CONFLICT",
+ ()=>PUBLIC_DIR_MIDDLEWARE_CONFLICT,
+ "ROOT_DIR_ALIAS",
+ ()=>ROOT_DIR_ALIAS,
+ "RSC_ACTION_CLIENT_WRAPPER_ALIAS",
+ ()=>RSC_ACTION_CLIENT_WRAPPER_ALIAS,
+ "RSC_ACTION_ENCRYPTION_ALIAS",
+ ()=>RSC_ACTION_ENCRYPTION_ALIAS,
+ "RSC_ACTION_PROXY_ALIAS",
+ ()=>RSC_ACTION_PROXY_ALIAS,
+ "RSC_ACTION_VALIDATE_ALIAS",
+ ()=>RSC_ACTION_VALIDATE_ALIAS,
+ "RSC_CACHE_WRAPPER_ALIAS",
+ ()=>RSC_CACHE_WRAPPER_ALIAS,
+ "RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS",
+ ()=>RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS,
+ "RSC_MOD_REF_PROXY_ALIAS",
+ ()=>RSC_MOD_REF_PROXY_ALIAS,
+ "RSC_SEGMENTS_DIR_SUFFIX",
+ ()=>RSC_SEGMENTS_DIR_SUFFIX,
+ "RSC_SEGMENT_SUFFIX",
+ ()=>RSC_SEGMENT_SUFFIX,
+ "RSC_SUFFIX",
+ ()=>RSC_SUFFIX,
+ "SERVER_PROPS_EXPORT_ERROR",
+ ()=>SERVER_PROPS_EXPORT_ERROR,
+ "SERVER_PROPS_GET_INIT_PROPS_CONFLICT",
+ ()=>SERVER_PROPS_GET_INIT_PROPS_CONFLICT,
+ "SERVER_PROPS_SSG_CONFLICT",
+ ()=>SERVER_PROPS_SSG_CONFLICT,
+ "SERVER_RUNTIME",
+ ()=>SERVER_RUNTIME,
+ "SSG_FALLBACK_EXPORT_ERROR",
+ ()=>SSG_FALLBACK_EXPORT_ERROR,
+ "SSG_GET_INITIAL_PROPS_CONFLICT",
+ ()=>SSG_GET_INITIAL_PROPS_CONFLICT,
+ "STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR",
+ ()=>STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR,
+ "TEXT_PLAIN_CONTENT_TYPE_HEADER",
+ ()=>TEXT_PLAIN_CONTENT_TYPE_HEADER,
+ "UNSTABLE_REVALIDATE_RENAME_ERROR",
+ ()=>UNSTABLE_REVALIDATE_RENAME_ERROR,
+ "WEBPACK_LAYERS",
+ ()=>WEBPACK_LAYERS,
+ "WEBPACK_RESOURCE_QUERIES",
+ ()=>WEBPACK_RESOURCE_QUERIES,
+ "WEB_SOCKET_MAX_RECONNECTIONS",
+ ()=>WEB_SOCKET_MAX_RECONNECTIONS
+]);
+const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain';
+const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8';
+const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8';
+const NEXT_QUERY_PARAM_PREFIX = 'nxtP';
+const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI';
+const MATCHED_PATH_HEADER = 'x-matched-path';
+const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate';
+const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated';
+const RSC_SEGMENTS_DIR_SUFFIX = '.segments';
+const RSC_SEGMENT_SUFFIX = '.segment.rsc';
+const RSC_SUFFIX = '.rsc';
+const ACTION_SUFFIX = '.action';
+const NEXT_DATA_SUFFIX = '.json';
+const NEXT_META_SUFFIX = '.meta';
+const NEXT_BODY_SUFFIX = '.body';
+const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id';
+const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags';
+const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags';
+const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token';
+const NEXT_RESUME_HEADER = 'next-resume';
+const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length';
+const NEXT_CACHE_TAG_MAX_ITEMS = 128;
+const NEXT_CACHE_TAG_MAX_LENGTH = 256;
+const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024;
+const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_';
+const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_';
+const CACHE_ONE_YEAR_SECONDS = 31536000;
+const INFINITE_CACHE = 0xfffffffe;
+const MIDDLEWARE_FILENAME = 'middleware';
+const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`;
+const PROXY_FILENAME = 'proxy';
+const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`;
+const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation';
+const PAGES_DIR_ALIAS = 'private-next-pages';
+const DOT_NEXT_ALIAS = 'private-dot-next';
+const ROOT_DIR_ALIAS = 'private-next-root-dir';
+const APP_DIR_ALIAS = 'private-next-app-dir';
+const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy';
+const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate';
+const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference';
+const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper';
+const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import';
+const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption';
+const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper';
+const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`;
+const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`;
+const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`;
+const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`;
+const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`;
+const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`;
+const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?';
+const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?';
+const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.';
+const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`;
+const NON_STANDARD_NODE_ENV = `You are using a non-standard "NODE_ENV" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`;
+const SSG_FALLBACK_EXPORT_ERROR = `Pages with \`fallback\` enabled in \`getStaticPaths\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`;
+const ESLINT_DEFAULT_DIRS = [
+ 'app',
+ 'pages',
+ 'components',
+ 'lib',
+ 'src'
+];
+const SERVER_RUNTIME = {
+ edge: 'edge',
+ experimentalEdge: 'experimental-edge',
+ nodejs: 'nodejs'
+};
+const WEB_SOCKET_MAX_RECONNECTIONS = 12;
+/**
+ * The names of the webpack layers. These layers are the primitives for the
+ * webpack chunks.
+ */ const WEBPACK_LAYERS_NAMES = {
+ /**
+ * The layer for the shared code between the client and server bundles.
+ */ shared: 'shared',
+ /**
+ * The layer for server-only runtime and picking up `react-server` export conditions.
+ * Including app router RSC pages and app router custom routes and metadata routes.
+ */ reactServerComponents: 'rsc',
+ /**
+ * Server Side Rendering layer for app (ssr).
+ */ serverSideRendering: 'ssr',
+ /**
+ * The browser client bundle layer for actions.
+ */ actionBrowser: 'action-browser',
+ /**
+ * The Node.js bundle layer for the API routes.
+ */ apiNode: 'api-node',
+ /**
+ * The Edge Lite bundle layer for the API routes.
+ */ apiEdge: 'api-edge',
+ /**
+ * The layer for the middleware code.
+ */ middleware: 'middleware',
+ /**
+ * The layer for the instrumentation hooks.
+ */ instrument: 'instrument',
+ /**
+ * The layer for assets on the edge.
+ */ edgeAsset: 'edge-asset',
+ /**
+ * The browser client bundle layer for App directory.
+ */ appPagesBrowser: 'app-pages-browser',
+ /**
+ * The browser client bundle layer for Pages directory.
+ */ pagesDirBrowser: 'pages-dir-browser',
+ /**
+ * The Edge Lite bundle layer for Pages directory.
+ */ pagesDirEdge: 'pages-dir-edge',
+ /**
+ * The Node.js bundle layer for Pages directory.
+ */ pagesDirNode: 'pages-dir-node'
+};
+const WEBPACK_LAYERS = {
+ ...WEBPACK_LAYERS_NAMES,
+ GROUP: {
+ builtinReact: [
+ WEBPACK_LAYERS_NAMES.reactServerComponents,
+ WEBPACK_LAYERS_NAMES.actionBrowser
+ ],
+ serverOnly: [
+ WEBPACK_LAYERS_NAMES.reactServerComponents,
+ WEBPACK_LAYERS_NAMES.actionBrowser,
+ WEBPACK_LAYERS_NAMES.instrument,
+ WEBPACK_LAYERS_NAMES.middleware
+ ],
+ neutralTarget: [
+ // pages api
+ WEBPACK_LAYERS_NAMES.apiNode,
+ WEBPACK_LAYERS_NAMES.apiEdge
+ ],
+ clientOnly: [
+ WEBPACK_LAYERS_NAMES.serverSideRendering,
+ WEBPACK_LAYERS_NAMES.appPagesBrowser
+ ],
+ bundled: [
+ WEBPACK_LAYERS_NAMES.reactServerComponents,
+ WEBPACK_LAYERS_NAMES.actionBrowser,
+ WEBPACK_LAYERS_NAMES.serverSideRendering,
+ WEBPACK_LAYERS_NAMES.appPagesBrowser,
+ WEBPACK_LAYERS_NAMES.shared,
+ WEBPACK_LAYERS_NAMES.instrument,
+ WEBPACK_LAYERS_NAMES.middleware
+ ],
+ appPages: [
+ // app router pages and layouts
+ WEBPACK_LAYERS_NAMES.reactServerComponents,
+ WEBPACK_LAYERS_NAMES.serverSideRendering,
+ WEBPACK_LAYERS_NAMES.appPagesBrowser,
+ WEBPACK_LAYERS_NAMES.actionBrowser
+ ]
+ }
+};
+const WEBPACK_RESOURCE_QUERIES = {
+ edgeSSREntry: '__next_edge_ssr_entry__',
+ metadata: '__next_metadata__',
+ metadataRoute: '__next_metadata_route__',
+ metadataImageMeta: '__next_metadata_image_meta__'
+};
+;
+}),
+"[project]/node_modules/next/dist/esm/lib/detached-promise.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * A `Promise.withResolvers` implementation that exposes the `resolve` and
+ * `reject` functions on a `Promise`.
+ *
+ * @see https://tc39.es/proposal-promise-with-resolvers/
+ */ __turbopack_context__.s([
+ "DetachedPromise",
+ ()=>DetachedPromise
+]);
+class DetachedPromise {
+ constructor(){
+ let resolve;
+ let reject;
+ // Create the promise and assign the resolvers to the object.
+ this.promise = new Promise((res, rej)=>{
+ resolve = res;
+ reject = rej;
+ });
+ // We know that resolvers is defined because the Promise constructor runs
+ // synchronously.
+ this.resolve = resolve;
+ this.reject = reject;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/lib/multi-file-writer.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "MultiFileWriter",
+ ()=>MultiFileWriter
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$isomorphic$2f$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/isomorphic/path.js [middleware] (ecmascript)");
+;
+class MultiFileWriter {
+ constructor(/**
+ * The file system methods to use.
+ */ fs){
+ this.fs = fs;
+ this.tasks = [];
+ }
+ /**
+ * Finds or creates a task for a directory.
+ *
+ * @param directory - The directory to find or create a task for.
+ * @returns The task for the directory.
+ */ findOrCreateTask(directory) {
+ // See if this directory already has a task to create it.
+ for (const task of this.tasks){
+ if (task[0] === directory) {
+ return task;
+ }
+ }
+ const promise = this.fs.mkdir(directory);
+ // Attach a catch handler so that it doesn't throw an unhandled promise
+ // rejection warning.
+ promise.catch(()=>{});
+ // Otherwise, create a new task for this directory.
+ const task = [
+ directory,
+ promise,
+ []
+ ];
+ this.tasks.push(task);
+ return task;
+ }
+ /**
+ * Appends a file to the writer to be written after its containing directory
+ * is created. The file writer should be awaited after all the files have been
+ * appended. Any async operation that occurs between appending and awaiting
+ * may cause an unhandled promise rejection warning and potentially crash the
+ * process.
+ *
+ * @param filePath - The path to the file to write.
+ * @param data - The data to write to the file.
+ */ append(filePath, data) {
+ // Find or create a task for the directory that contains the file.
+ const task = this.findOrCreateTask(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$isomorphic$2f$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].dirname(filePath));
+ const promise = task[1].then(()=>this.fs.writeFile(filePath, data));
+ // Attach a catch handler so that it doesn't throw an unhandled promise
+ // rejection warning.
+ promise.catch(()=>{});
+ // Add the file write to the task AFTER the directory promise has resolved.
+ task[2].push(promise);
+ }
+ /**
+ * Returns a promise that resolves when all the files have been written.
+ */ wait() {
+ return Promise.all(this.tasks.flatMap((task)=>task[2]));
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/lib/picocolors.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "bgBlack",
+ ()=>bgBlack,
+ "bgBlue",
+ ()=>bgBlue,
+ "bgCyan",
+ ()=>bgCyan,
+ "bgGreen",
+ ()=>bgGreen,
+ "bgMagenta",
+ ()=>bgMagenta,
+ "bgRed",
+ ()=>bgRed,
+ "bgWhite",
+ ()=>bgWhite,
+ "bgYellow",
+ ()=>bgYellow,
+ "black",
+ ()=>black,
+ "blue",
+ ()=>blue,
+ "bold",
+ ()=>bold,
+ "cyan",
+ ()=>cyan,
+ "dim",
+ ()=>dim,
+ "gray",
+ ()=>gray,
+ "green",
+ ()=>green,
+ "hidden",
+ ()=>hidden,
+ "inverse",
+ ()=>inverse,
+ "italic",
+ ()=>italic,
+ "magenta",
+ ()=>magenta,
+ "purple",
+ ()=>purple,
+ "red",
+ ()=>red,
+ "reset",
+ ()=>reset,
+ "strikethrough",
+ ()=>strikethrough,
+ "underline",
+ ()=>underline,
+ "white",
+ ()=>white,
+ "yellow",
+ ()=>yellow
+]);
+// ISC License
+// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1
+var _globalThis;
+const { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {};
+const enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== 'dumb');
+const replaceClose = (str, close, replace, index)=>{
+ const start = str.substring(0, index) + replace;
+ const end = str.substring(index + close.length);
+ const nextIndex = end.indexOf(close);
+ return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
+};
+const formatter = (open, close, replace = open)=>{
+ if (!enabled) return String;
+ return (input)=>{
+ const string = '' + input;
+ const index = string.indexOf(close, open.length);
+ return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
+ };
+};
+const reset = enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String;
+const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m');
+const dim = formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m');
+const italic = formatter('\x1b[3m', '\x1b[23m');
+const underline = formatter('\x1b[4m', '\x1b[24m');
+const inverse = formatter('\x1b[7m', '\x1b[27m');
+const hidden = formatter('\x1b[8m', '\x1b[28m');
+const strikethrough = formatter('\x1b[9m', '\x1b[29m');
+const black = formatter('\x1b[30m', '\x1b[39m');
+const red = formatter('\x1b[31m', '\x1b[39m');
+const green = formatter('\x1b[32m', '\x1b[39m');
+const yellow = formatter('\x1b[33m', '\x1b[39m');
+const blue = formatter('\x1b[34m', '\x1b[39m');
+const magenta = formatter('\x1b[35m', '\x1b[39m');
+const purple = formatter('\x1b[38;2;173;127;168m', '\x1b[39m');
+const cyan = formatter('\x1b[36m', '\x1b[39m');
+const white = formatter('\x1b[37m', '\x1b[39m');
+const gray = formatter('\x1b[90m', '\x1b[39m');
+const bgBlack = formatter('\x1b[40m', '\x1b[49m');
+const bgRed = formatter('\x1b[41m', '\x1b[49m');
+const bgGreen = formatter('\x1b[42m', '\x1b[49m');
+const bgYellow = formatter('\x1b[43m', '\x1b[49m');
+const bgBlue = formatter('\x1b[44m', '\x1b[49m');
+const bgMagenta = formatter('\x1b[45m', '\x1b[49m');
+const bgCyan = formatter('\x1b[46m', '\x1b[49m');
+const bgWhite = formatter('\x1b[47m', '\x1b[49m');
+}),
+"[project]/node_modules/next/dist/esm/lib/route-pattern-normalizer.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * Route pattern normalization utilities for path-to-regexp compatibility.
+ *
+ * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain
+ * patterns commonly used in Next.js interception routes. This module provides
+ * normalization functions to make Next.js route patterns compatible with the
+ * updated library while preserving all functionality.
+ */ /**
+ * Internal separator used to normalize adjacent parameter patterns.
+ * This unique marker is inserted between adjacent parameters and stripped out
+ * during parameter extraction to avoid conflicts with real URL content.
+ */ __turbopack_context__.s([
+ "PARAM_SEPARATOR",
+ ()=>PARAM_SEPARATOR,
+ "hasAdjacentParameterIssues",
+ ()=>hasAdjacentParameterIssues,
+ "normalizeAdjacentParameters",
+ ()=>normalizeAdjacentParameters,
+ "normalizeTokensForRegexp",
+ ()=>normalizeTokensForRegexp,
+ "stripNormalizedSeparators",
+ ()=>stripNormalizedSeparators,
+ "stripParameterSeparators",
+ ()=>stripParameterSeparators
+]);
+const PARAM_SEPARATOR = '_NEXTSEP_';
+function hasAdjacentParameterIssues(route) {
+ if (typeof route !== 'string') return false;
+ // Check for interception route markers followed immediately by parameters
+ // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.
+ // These patterns cause "Must have text between two parameters" errors
+ if (/\/\(\.{1,3}\):[^/\s]+/.test(route)) {
+ return true;
+ }
+ // Check for basic adjacent parameters without separators
+ // Pattern: :param1:param2 (but not :param* or other URL patterns)
+ if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {
+ return true;
+ }
+ return false;
+}
+function normalizeAdjacentParameters(route) {
+ let normalized = route;
+ // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param
+ normalized = normalized.replace(/(\([^)]*\)):([^/\s]+)/g, `$1${PARAM_SEPARATOR}:$2`);
+ // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2
+ normalized = normalized.replace(/:([^:/\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`);
+ return normalized;
+}
+function normalizeTokensForRegexp(tokens) {
+ return tokens.map((token)=>{
+ // Token union type: Token = string | TokenObject
+ // Literal path segments are strings, parameters/wildcards are objects
+ if (typeof token === 'object' && token !== null && // Not all token objects have 'modifier' property (e.g., simple text tokens)
+ 'modifier' in token && // Only repeating modifiers (* or +) cause the validation error
+ // Other modifiers like '?' (optional) are fine
+ (token.modifier === '*' || token.modifier === '+') && // Token objects can have different shapes depending on route pattern
+ 'prefix' in token && 'suffix' in token && // Both prefix and suffix must be empty strings
+ // This is what causes the validation error in path-to-regexp
+ token.prefix === '' && token.suffix === '') {
+ // Add minimal prefix to satisfy path-to-regexp validation
+ // We use '/' as it's the most common path delimiter and won't break route matching
+ // The prefix gets used in regex generation but doesn't affect parameter extraction
+ return {
+ ...token,
+ prefix: '/'
+ };
+ }
+ return token;
+ });
+}
+function stripNormalizedSeparators(pathname) {
+ // Remove separator after interception route markers
+ // Pattern: (.)_NEXTSEP_ -> (.), (..)_NEXTSEP_ -> (..), etc.
+ // The separator appears after the closing paren of interception markers
+ return pathname.replace(new RegExp(`\\)${PARAM_SEPARATOR}`, 'g'), ')');
+}
+function stripParameterSeparators(params) {
+ const cleaned = {};
+ for (const [key, value] of Object.entries(params)){
+ if (typeof value === 'string') {
+ // Remove the separator if it appears at the start of parameter values
+ cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '');
+ } else if (Array.isArray(value)) {
+ // Handle array parameters (from repeated route segments)
+ cleaned[key] = value.map((item)=>typeof item === 'string' ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '') : item);
+ } else {
+ cleaned[key] = value;
+ }
+ }
+ return cleaned;
+}
+}),
+"[project]/node_modules/next/dist/esm/lib/scheduler.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * Schedules a function to be called on the next tick after the other promises
+ * have been resolved.
+ *
+ * @param cb the function to schedule
+ */ __turbopack_context__.s([
+ "atLeastOneTask",
+ ()=>atLeastOneTask,
+ "scheduleImmediate",
+ ()=>scheduleImmediate,
+ "scheduleOnNextTick",
+ ()=>scheduleOnNextTick,
+ "waitAtLeastOneReactRenderTask",
+ ()=>waitAtLeastOneReactRenderTask
+]);
+const scheduleOnNextTick = (cb)=>{
+ // We use Promise.resolve().then() here so that the operation is scheduled at
+ // the end of the promise job queue, we then add it to the next process tick
+ // to ensure it's evaluated afterwards.
+ //
+ // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255
+ //
+ Promise.resolve().then(()=>{
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ else {
+ process.nextTick(cb);
+ }
+ });
+};
+const scheduleImmediate = (cb)=>{
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ else {
+ setImmediate(cb);
+ }
+};
+function atLeastOneTask() {
+ return new Promise((resolve)=>scheduleImmediate(resolve));
+}
+function waitAtLeastOneReactRenderTask() {
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ else {
+ return new Promise((r)=>setImmediate(r));
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/lib/url.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "isFullStringUrl",
+ ()=>isFullStringUrl,
+ "parseReqUrl",
+ ()=>parseReqUrl,
+ "parseUrl",
+ ()=>parseUrl,
+ "stripNextRscUnionQuery",
+ ()=>stripNextRscUnionQuery
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [middleware] (ecmascript)");
+;
+const DUMMY_ORIGIN = 'http://n';
+function isFullStringUrl(url) {
+ return /https?:\/\//.test(url);
+}
+function parseUrl(url) {
+ let parsed = undefined;
+ try {
+ parsed = new URL(url, DUMMY_ORIGIN);
+ } catch {}
+ return parsed;
+}
+function parseReqUrl(url) {
+ const parsedUrl = parseUrl(url);
+ if (!parsedUrl) {
+ return;
+ }
+ const query = {};
+ for (const key of parsedUrl.searchParams.keys()){
+ const values = parsedUrl.searchParams.getAll(key);
+ query[key] = values.length > 1 ? values : values[0];
+ }
+ const legacyUrl = {
+ query,
+ hash: parsedUrl.hash,
+ search: parsedUrl.search,
+ path: parsedUrl.pathname,
+ pathname: parsedUrl.pathname,
+ href: `${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`,
+ host: '',
+ hostname: '',
+ auth: '',
+ protocol: '',
+ slashes: null,
+ port: ''
+ };
+ return legacyUrl;
+}
+function stripNextRscUnionQuery(relativeUrl) {
+ const urlInstance = new URL(relativeUrl, DUMMY_ORIGIN);
+ urlInstance.searchParams.delete(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]);
+ return urlInstance.pathname + urlInstance.search;
+}
+}),
+"[project]/node_modules/next/dist/esm/server/after/after-context.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "AfterContext",
+ ()=>AfterContext
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$p$2d$queue$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/p-queue/index.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$revalidation$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/revalidation-utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$after$2d$task$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$after$2d$task$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+;
+class AfterContext {
+ constructor({ waitUntil, onClose, onTaskError }){
+ this.isRequestClosed = false;
+ this.initialOnCloseError = null;
+ this.workUnitStores = new Set();
+ this.waitUntil = waitUntil;
+ this.onClose = onClose;
+ this.onTaskError = onTaskError;
+ this.callbackQueue = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$p$2d$queue$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"]();
+ this.callbackQueue.pause();
+ try {
+ onClose(()=>{
+ this.isRequestClosed = true;
+ // TODO(after): it's not ideal that we'll only switch the `phase` of a WorkUnitStore
+ // if `after()` was called inside it. We should probably track this whenever a store is created
+ for (const workUnitStore of this.workUnitStores){
+ workUnitStore.phase = 'after';
+ }
+ });
+ } catch (err) {
+ // If onClose is broken, report errors lazily, when after() is called.
+ this.initialOnCloseError = {
+ error: err
+ };
+ }
+ }
+ after(task, workUnitStore) {
+ if (this.initialOnCloseError) {
+ throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["InvariantError"](`An onClose call failed, which means after() can't work correctly.`, {
+ cause: this.initialOnCloseError.error
+ }), "__NEXT_ERROR_CODE", {
+ value: "E1376",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ // Save the workUnitStore so we can switch its phase later.
+ this.workUnitStores.add(workUnitStore);
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isThenable"])(task)) {
+ this.addThenable(task);
+ } else if (typeof task === 'function') {
+ // TODO(after): implement tracing
+ this.addCallback(task, workUnitStore);
+ } else {
+ throw Object.defineProperty(new Error('`after()`: Argument must be a promise or a function'), "__NEXT_ERROR_CODE", {
+ value: "E50",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ }
+ addThenable(thenable) {
+ if (!this.waitUntil) {
+ errorWaitUntilNotAvailable();
+ }
+ this.waitUntil(new Promise((resolve)=>{
+ thenable.then(()=>{
+ resolve();
+ }, (error)=>{
+ resolve();
+ this.reportTaskError('promise', error);
+ });
+ }));
+ }
+ addCallback(callback, workUnitStore) {
+ // if something is wrong, throw synchronously, bubbling up to the `after` callsite.
+ if (!this.waitUntil) {
+ errorWaitUntilNotAvailable();
+ }
+ const afterTaskStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$after$2d$task$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$after$2d$task$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["afterTaskAsyncStorage"].getStore();
+ // This is used for checking if request APIs can be called inside `after`.
+ // Note that we need to check the phase in which the *topmost* `after` was called (which should be "action"),
+ // not the current phase (which might be "after" if we're in a nested after).
+ // Otherwise, we might allow `after(() => headers())`, but not `after(() => after(() => headers()))`.
+ const rootTaskSpawnPhase = afterTaskStore ? afterTaskStore.rootTaskSpawnPhase // nested after
+ : workUnitStore.phase // topmost after
+ ;
+ // this should only happen once.
+ if (!this.runCallbacksOnClosePromise) {
+ this.runCallbacksOnClosePromise = this.runCallbacksOnClose();
+ this.waitUntil(this.runCallbacksOnClosePromise);
+ }
+ // Bind the callback to the current execution context (i.e. preserve all currently available ALS-es).
+ // We do this because we want all of these to be equivalent in every regard except timing:
+ // after(() => x())
+ // after(x())
+ // await x()
+ const wrappedCallback = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["bindSnapshot"])(// See: https://github.com/facebook/react/pull/34911
+ async ()=>{
+ try {
+ await __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$after$2d$task$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$after$2d$task$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["afterTaskAsyncStorage"].run({
+ rootTaskSpawnPhase
+ }, ()=>callback());
+ } catch (error) {
+ this.reportTaskError('function', error);
+ }
+ });
+ this.callbackQueue.add(wrappedCallback);
+ }
+ async runCallbacksOnClose() {
+ if (!this.isRequestClosed) {
+ await new Promise((resolve)=>this.onClose(resolve));
+ } else {
+ // The request is already closed.
+ // Avoid running the callbacks too quickly to prevent userspace from
+ // e.g. relying on `after` being microtasky somewhere.
+ await new Promise((resolve)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["scheduleImmediate"])(resolve));
+ }
+ return this.runCallbacks();
+ }
+ async runCallbacks() {
+ if (this.callbackQueue.size === 0) return;
+ const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
+ if (!workStore) {
+ throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["InvariantError"]('Missing workStore in AfterContext.runCallbacks'), "__NEXT_ERROR_CODE", {
+ value: "E547",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$revalidation$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["withExecuteRevalidates"])(workStore, ()=>{
+ this.callbackQueue.start();
+ return this.callbackQueue.onIdle();
+ });
+ }
+ reportTaskError(taskKind, error) {
+ // TODO(after): this is fine for now, but will need better intergration with our error reporting.
+ // TODO(after): should we log this if we have a onTaskError callback?
+ console.error(taskKind === 'promise' ? `A promise passed to \`after()\` rejected:` : `An error occurred in a function passed to \`after()\`:`, error);
+ if (this.onTaskError) {
+ // this is very defensive, but we really don't want anything to blow up in an error handler
+ try {
+ this.onTaskError == null ? void 0 : this.onTaskError.call(this, error);
+ } catch (handlerError) {
+ console.error(Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["InvariantError"]('`onTaskError` threw while handling an error thrown from an `after` task', {
+ cause: handlerError
+ }), "__NEXT_ERROR_CODE", {
+ value: "E569",
+ enumerable: false,
+ configurable: true
+ }));
+ }
+ }
+ }
+}
+function errorWaitUntilNotAvailable() {
+ throw Object.defineProperty(new Error('`after()` will not work correctly, because `waitUntil` is not available in the current environment.'), "__NEXT_ERROR_CODE", {
+ value: "E91",
+ enumerable: false,
+ configurable: true
+ });
+}
+}),
+"[project]/node_modules/next/dist/esm/server/after/builtin-request-context.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createLocalRequestContext",
+ ()=>createLocalRequestContext,
+ "getBuiltinRequestContext",
+ ()=>getBuiltinRequestContext
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [middleware] (ecmascript)");
+;
+function getBuiltinRequestContext() {
+ const _globalThis = globalThis;
+ const ctx = _globalThis[NEXT_REQUEST_CONTEXT_SYMBOL];
+ return ctx == null ? void 0 : ctx.get();
+}
+const NEXT_REQUEST_CONTEXT_SYMBOL = Symbol.for('@next/request-context');
+function createLocalRequestContext() {
+ const storage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createAsyncLocalStorage"])();
+ return {
+ get: ()=>storage.getStore(),
+ run: (value, callback)=>storage.run(value, callback)
+ };
+}
+}),
+"[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * Parse cookies from the `headers` of request
+ * @param req request object
+ */ __turbopack_context__.s([
+ "getCookieParser",
+ ()=>getCookieParser
+]);
+function getCookieParser(headers) {
+ return function parseCookie() {
+ const { cookie } = headers;
+ if (!cookie) {
+ return {};
+ }
+ const { parse: parseCookieFn } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [middleware] (ecmascript)");
+ return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie);
+ };
+}
+}),
+"[project]/node_modules/next/dist/esm/server/api-utils/index.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "ApiError",
+ ()=>ApiError,
+ "COOKIE_NAME_PRERENDER_BYPASS",
+ ()=>COOKIE_NAME_PRERENDER_BYPASS,
+ "COOKIE_NAME_PRERENDER_DATA",
+ ()=>COOKIE_NAME_PRERENDER_DATA,
+ "RESPONSE_LIMIT_DEFAULT",
+ ()=>RESPONSE_LIMIT_DEFAULT,
+ "SYMBOL_CLEARED_COOKIES",
+ ()=>SYMBOL_CLEARED_COOKIES,
+ "SYMBOL_PREVIEW_DATA",
+ ()=>SYMBOL_PREVIEW_DATA,
+ "checkIsOnDemandRevalidate",
+ ()=>checkIsOnDemandRevalidate,
+ "clearPreviewData",
+ ()=>clearPreviewData,
+ "redirect",
+ ()=>redirect,
+ "sendError",
+ ()=>sendError,
+ "sendStatusCode",
+ ()=>sendStatusCode,
+ "setLazyProp",
+ ()=>setLazyProp,
+ "wrapApiHandler",
+ ()=>wrapApiHandler
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [middleware] (ecmascript)");
+;
+;
+;
+;
+function wrapApiHandler(page, handler) {
+ return (...args)=>{
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getTracer"])().setRootSpanAttribute('next.route', page);
+ // Call API route method
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NodeSpan"].runHandler, {
+ spanName: `executing api route (pages) ${page}`
+ }, ()=>handler(...args));
+ };
+}
+function sendStatusCode(res, statusCode) {
+ res.statusCode = statusCode;
+ return res;
+}
+function redirect(res, statusOrUrl, url) {
+ if (typeof statusOrUrl === 'string') {
+ url = statusOrUrl;
+ statusOrUrl = 307;
+ }
+ if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {
+ throw Object.defineProperty(new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`), "__NEXT_ERROR_CODE", {
+ value: "E389",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ res.writeHead(statusOrUrl, {
+ Location: url
+ });
+ res.write(url);
+ res.end();
+ return res;
+}
+function checkIsOnDemandRevalidate(rawHeaders, previewProps) {
+ // Headers is a plain object for Node.js, Headers object in Edge runtime
+ if (typeof rawHeaders.get === 'function') {
+ const headers = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(rawHeaders);
+ const previewModeId = headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]);
+ const isOnDemandRevalidate = previewModeId === previewProps.previewModeId;
+ const revalidateOnlyGenerated = headers.has(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]);
+ return {
+ isOnDemandRevalidate,
+ revalidateOnlyGenerated
+ };
+ }
+ const headers = rawHeaders;
+ const previewModeId = headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]];
+ const isOnDemandRevalidate = previewModeId === previewProps.previewModeId;
+ const revalidateOnlyGenerated = headers.hasOwnProperty(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]);
+ return {
+ isOnDemandRevalidate,
+ revalidateOnlyGenerated
+ };
+}
+const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`;
+const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`;
+const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024;
+const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA);
+const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS);
+function clearPreviewData(res, options = {}) {
+ if (SYMBOL_CLEARED_COOKIES in res) {
+ return res;
+ }
+ const { serialize } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [middleware] (ecmascript)");
+ const previous = res.getHeader('Set-Cookie');
+ res.setHeader(`Set-Cookie`, [
+ ...typeof previous === 'string' ? [
+ previous
+ ] : Array.isArray(previous) ? previous : [],
+ serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {
+ // To delete a cookie, set `expires` to a date in the past:
+ // https://tools.ietf.org/html/rfc6265#section-4.1.1
+ // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
+ expires: new Date(0),
+ httpOnly: true,
+ sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax',
+ secure: ("TURBOPACK compile-time value", "development") !== 'development',
+ path: '/',
+ ...options.path !== undefined ? {
+ path: options.path
+ } : undefined
+ }),
+ serialize(COOKIE_NAME_PRERENDER_DATA, '', {
+ // To delete a cookie, set `expires` to a date in the past:
+ // https://tools.ietf.org/html/rfc6265#section-4.1.1
+ // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
+ expires: new Date(0),
+ httpOnly: true,
+ sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax',
+ secure: ("TURBOPACK compile-time value", "development") !== 'development',
+ path: '/',
+ ...options.path !== undefined ? {
+ path: options.path
+ } : undefined
+ })
+ ]);
+ Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {
+ value: true,
+ enumerable: false
+ });
+ return res;
+}
+class ApiError extends Error {
+ constructor(statusCode, message){
+ super(message);
+ Object.defineProperty(this, "__NEXT_ERROR_CODE", {
+ value: "E394",
+ enumerable: false,
+ configurable: true
+ });
+ this.statusCode = statusCode;
+ }
+}
+function sendError(res, statusCode, message) {
+ res.statusCode = statusCode;
+ res.statusMessage = message;
+ res.end(message);
+}
+function setLazyProp({ req }, prop, getter) {
+ const opts = {
+ configurable: true,
+ enumerable: true
+ };
+ const optsReset = {
+ ...opts,
+ writable: true
+ };
+ Object.defineProperty(req, prop, {
+ ...opts,
+ get: ()=>{
+ const value = getter();
+ // we set the property on the object to avoid recalculating it
+ Object.defineProperty(req, prop, {
+ ...optsReset,
+ value
+ });
+ return value;
+ },
+ set: (value)=>{
+ Object.defineProperty(req, prop, {
+ ...optsReset,
+ value
+ });
+ }
+ });
+}
+}),
+"[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "bindSnapshot",
+ ()=>bindSnapshot,
+ "createAsyncLocalStorage",
+ ()=>createAsyncLocalStorage,
+ "createSnapshot",
+ ()=>createSnapshot
+]);
+const sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'), "__NEXT_ERROR_CODE", {
+ value: "E504",
+ enumerable: false,
+ configurable: true
+});
+class FakeAsyncLocalStorage {
+ disable() {
+ throw sharedAsyncLocalStorageNotAvailableError;
+ }
+ getStore() {
+ // This fake implementation of AsyncLocalStorage always returns `undefined`.
+ return undefined;
+ }
+ run() {
+ throw sharedAsyncLocalStorageNotAvailableError;
+ }
+ exit() {
+ throw sharedAsyncLocalStorageNotAvailableError;
+ }
+ enterWith() {
+ throw sharedAsyncLocalStorageNotAvailableError;
+ }
+ static bind(fn) {
+ return fn;
+ }
+}
+const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage;
+function createAsyncLocalStorage() {
+ if (maybeGlobalAsyncLocalStorage) {
+ return new maybeGlobalAsyncLocalStorage();
+ }
+ return new FakeAsyncLocalStorage();
+}
+function bindSnapshot(fn) {
+ if (maybeGlobalAsyncLocalStorage) {
+ return maybeGlobalAsyncLocalStorage.bind(fn);
+ }
+ return FakeAsyncLocalStorage.bind(fn);
+}
+function createSnapshot() {
+ if (maybeGlobalAsyncLocalStorage) {
+ return maybeGlobalAsyncLocalStorage.snapshot();
+ }
+ return function(fn, ...args) {
+ return fn(...args);
+ };
+}
+}),
+"[project]/node_modules/next/dist/esm/server/async-storage/draft-mode-provider.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "DraftModeProvider",
+ ()=>DraftModeProvider
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/index.js [middleware] (ecmascript)");
+;
+class DraftModeProvider {
+ constructor(previewProps, headers, cookies, mutableCookies){
+ var _cookies_get;
+ // The logic for draftMode() is very similar to tryGetPreviewData()
+ // but Draft Mode does not have any data associated with it.
+ const isOnDemandRevalidate = previewProps && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["checkIsOnDemandRevalidate"])(headers, previewProps).isOnDemandRevalidate;
+ const cookieValue = (_cookies_get = cookies.get(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["COOKIE_NAME_PRERENDER_BYPASS"])) == null ? void 0 : _cookies_get.value;
+ this._isEnabled = Boolean(!isOnDemandRevalidate && cookieValue && previewProps && (cookieValue === previewProps.previewModeId || // In dev mode, the cookie can be actual hash value preview id but the preview props can still be `development-id`.
+ ("TURBOPACK compile-time value", "development") !== 'production' && previewProps.previewModeId === 'development-id'));
+ this._previewModeId = previewProps == null ? void 0 : previewProps.previewModeId;
+ this._mutableCookies = mutableCookies;
+ }
+ get isEnabled() {
+ return this._isEnabled;
+ }
+ enable() {
+ if (!this._previewModeId) {
+ throw Object.defineProperty(new Error('Invariant: previewProps missing previewModeId this should never happen'), "__NEXT_ERROR_CODE", {
+ value: "E93",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ this._mutableCookies.set({
+ name: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["COOKIE_NAME_PRERENDER_BYPASS"],
+ value: this._previewModeId,
+ httpOnly: true,
+ sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax',
+ secure: ("TURBOPACK compile-time value", "development") !== 'development',
+ path: '/'
+ });
+ this._isEnabled = true;
+ }
+ disable() {
+ // To delete a cookie, set `expires` to a date in the past:
+ // https://tools.ietf.org/html/rfc6265#section-4.1.1
+ // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
+ this._mutableCookies.set({
+ name: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["COOKIE_NAME_PRERENDER_BYPASS"],
+ value: '',
+ httpOnly: true,
+ sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax',
+ secure: ("TURBOPACK compile-time value", "development") !== 'development',
+ path: '/',
+ expires: new Date(0)
+ });
+ this._isEnabled = false;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/async-storage/request-store.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createRequestStore",
+ ()=>createRequestStore,
+ "createRequestStoreForAPI",
+ ()=>createRequestStoreForAPI,
+ "createRequestStoreForRender",
+ ()=>createRequestStoreForRender,
+ "synchronizeMutableCookies",
+ ()=>synchronizeMutableCookies
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$request$2d$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/request-cookies.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$async$2d$storage$2f$draft$2d$mode$2d$provider$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/async-storage/draft-mode-provider.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+/**
+ * Internal request headers that userland `headers()` must not expose. They stay
+ * on the shared request headers for framework plumbing.
+ *
+ * Every internal header that the client can send must be listed here. The
+ * sealed userland view reads through to the shared request headers, so an
+ * omission leaks the header to userland.
+ *
+ * The names are lowercased because `HeadersAdapter.seal` matches them in
+ * lowercase.
+ */ const HIDDEN_REQUEST_HEADERS = new Set([
+ ...__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["FLIGHT_HEADERS"],
+ // The client sends these dev-only request IDs so the server can route debug
+ // information back to the originating request. Like the flight headers,
+ // they are internal plumbing.
+ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_REQUEST_ID_HEADER"],
+ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_HTML_REQUEST_ID_HEADER"]
+].map((header)=>header.toLowerCase()));
+function getHeaders(headers) {
+ // The sealed userland view must not copy the request headers.
+ // `HeadersAdapter.from` returns a `Headers` instance unchanged, so the view
+ // reads through to `NextRequest.headers`. A copy detaches `headers()` from
+ // the writes that Proxy makes to `NextRequest.headers` afterwards.
+ //
+ // The view must also not delete the internal headers. Because
+ // `HeadersAdapter.from` does not copy, a delete removes them from the shared
+ // `req.headers`. The dev server reads the request-id headers from the raw
+ // request again, for example when it renders a redirect target after a server
+ // action. Their removal breaks the dev debug channel routing.
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HeadersAdapter"].seal(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(headers), HIDDEN_REQUEST_HEADERS);
+}
+function getMutableCookies(headers, onUpdateCookies) {
+ const cookies = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RequestCookies"](__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(headers));
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$request$2d$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["MutableRequestCookiesAdapter"].wrap(cookies, onUpdateCookies);
+}
+/**
+ * If middleware set cookies in this request (indicated by `x-middleware-set-cookie`),
+ * then merge those into the existing cookie object, so that when `cookies()` is accessed
+ * it's able to read the newly set cookies.
+ */ function mergeMiddlewareCookies(headers, existingCookies) {
+ // TODO: this only fires for `IncomingHttpHeaders`; `Headers` instances
+ // silently fall through (the `in` check and bracket access don't reach header
+ // values stored in internal slots). Confirm whether edge / Web `Headers`
+ // callers need this merge or already handle it elsewhere.
+ if ('x-middleware-set-cookie' in headers && typeof headers['x-middleware-set-cookie'] === 'string') {
+ const setCookieValue = headers['x-middleware-set-cookie'];
+ const responseHeaders = new Headers();
+ for (const cookie of (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["splitCookiesString"])(setCookieValue)){
+ responseHeaders.append('set-cookie', cookie);
+ }
+ const responseCookies = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ResponseCookies"](responseHeaders);
+ // Transfer cookies from ResponseCookies to RequestCookies
+ for (const cookie of responseCookies.getAll()){
+ existingCookies.set(cookie);
+ }
+ }
+}
+function createRequestStoreForRender(req, res, url, rootParams, implicitTags, onUpdateCookies, previewProps, isHmrRefresh, serverComponentsHmrCache, resumeDataCache, fallbackParams, hmrRefreshHash) {
+ return createRequestStore({
+ // Pages start in render phase by default
+ phase: 'render',
+ headers: req.headers,
+ onUpdateCookies: onUpdateCookies ?? (res ? (cookies)=>{
+ res.setHeader('Set-Cookie', cookies);
+ } : undefined),
+ url,
+ rootParams,
+ implicitTags,
+ resumeDataCache,
+ previewProps,
+ isHmrRefresh,
+ serverComponentsHmrCache,
+ hmrRefreshHash,
+ fallbackParams
+ });
+}
+function createRequestStoreForAPI(req, url, implicitTags, onUpdateCookies, previewProps, hmrRefreshHash) {
+ return createRequestStore({
+ // API routes start in action phase by default
+ phase: 'action',
+ headers: req.headers,
+ onUpdateCookies,
+ url,
+ rootParams: {},
+ implicitTags,
+ resumeDataCache: null,
+ previewProps,
+ isHmrRefresh: false,
+ serverComponentsHmrCache: undefined,
+ hmrRefreshHash,
+ fallbackParams: null
+ });
+}
+function createRequestStore(inputs) {
+ const { phase, headers, onUpdateCookies, url, rootParams, implicitTags, resumeDataCache, previewProps, isHmrRefresh, serverComponentsHmrCache, hmrRefreshHash, fallbackParams } = inputs;
+ const cache = {};
+ return {
+ type: 'request',
+ phase,
+ implicitTags,
+ // Rather than just using the whole `url` here, we pull the parts we want
+ // to ensure we don't use parts of the URL that we shouldn't. This also
+ // lets us avoid requiring an empty string for `search` in the type.
+ url: {
+ pathname: url.pathname,
+ search: url.search ?? ''
+ },
+ rootParams,
+ get headers () {
+ if (!cache.headers) {
+ // Seal the headers object that'll freeze out any methods that could
+ // mutate the underlying data.
+ cache.headers = getHeaders(headers);
+ }
+ return cache.headers;
+ },
+ get cookies () {
+ if (!cache.cookies) {
+ // if middleware is setting cookie(s), then include those in
+ // the initial cached cookies so they can be read in render
+ const requestCookies = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RequestCookies"](__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(headers));
+ mergeMiddlewareCookies(headers, requestCookies);
+ // Seal the cookies object that'll freeze out any methods that could
+ // mutate the underlying data.
+ cache.cookies = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$request$2d$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RequestCookiesAdapter"].seal(requestCookies);
+ }
+ return cache.cookies;
+ },
+ set cookies (value){
+ cache.cookies = value;
+ },
+ get mutableCookies () {
+ if (!cache.mutableCookies) {
+ const mutableCookies = getMutableCookies(headers, onUpdateCookies);
+ mergeMiddlewareCookies(headers, mutableCookies);
+ cache.mutableCookies = mutableCookies;
+ }
+ return cache.mutableCookies;
+ },
+ get userspaceMutableCookies () {
+ if (!cache.userspaceMutableCookies) {
+ const userspaceMutableCookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$request$2d$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createCookiesWithMutableAccessCheck"])(this);
+ cache.userspaceMutableCookies = userspaceMutableCookies;
+ }
+ return cache.userspaceMutableCookies;
+ },
+ get draftMode () {
+ if (!cache.draftMode) {
+ cache.draftMode = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$async$2d$storage$2f$draft$2d$mode$2d$provider$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DraftModeProvider"](previewProps, headers, this.cookies, this.mutableCookies);
+ }
+ return cache.draftMode;
+ },
+ resumeDataCache: resumeDataCache ?? null,
+ isHmrRefresh,
+ serverComponentsHmrCache: serverComponentsHmrCache || globalThis.__serverComponentsHmrCache,
+ hmrRefreshHash,
+ fallbackParams
+ };
+}
+function synchronizeMutableCookies(store) {
+ // TODO: does this need to update headers as well?
+ store.cookies = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$request$2d$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RequestCookiesAdapter"].seal((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$request$2d$cookies$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["responseCookiesToRequestCookies"])(store.mutableCookies));
+}
+}),
+"[project]/node_modules/next/dist/esm/server/async-storage/work-store.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createWorkStore",
+ ()=>createWorkStore
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$after$2f$after$2d$context$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/after/after-context.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lazy$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lazy-result.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$handlers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/use-cache/handlers.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+function createWorkStore({ page, renderOpts, isPrefetchRequest, buildId, deploymentId, previouslyRevalidatedTags, nonce }) {
+ /**
+ * Rules of Static & Dynamic HTML:
+ *
+ * 1.) We must generate static HTML unless the caller explicitly opts
+ * in to dynamic HTML support.
+ *
+ * 2.) If dynamic HTML support is requested, we must honor that request
+ * or throw an error. It is the sole responsibility of the caller to
+ * ensure they aren't e.g. requesting dynamic HTML for a static page.
+ *
+ * 3.) If the request is in draft mode, we must generate dynamic HTML.
+ *
+ * 4.) If the request is a server action, we must generate dynamic HTML.
+ *
+ * These rules help ensure that other existing features like request caching,
+ * coalescing, and ISR continue working as intended.
+ */ const isStaticGeneration = !renderOpts.supportsDynamicResponse && !renderOpts.isDraftMode && !renderOpts.isPossibleServerAction;
+ const shouldTrackFetchMetrics = !!("TURBOPACK compile-time value", "1") || // The only times we want to track fetch metrics outside of development is
+ // when we are performing a static generation and we either are in debug
+ // mode, or tracking fetch metrics was specifically opted into.
+ isStaticGeneration && (!!process.env.NEXT_DEBUG_BUILD || process.env.NEXT_SSG_FETCH_METRICS === '1');
+ const store = {
+ isStaticGeneration,
+ page,
+ route: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeAppPath"])(page),
+ incrementalCache: // so that it can access the fs cache without mocks
+ renderOpts.incrementalCache || globalThis.__incrementalCache,
+ cacheLifeProfiles: renderOpts.cacheLifeProfiles,
+ useCacheTimeout: renderOpts.experimental.useCacheTimeout,
+ staticPageGenerationTimeout: renderOpts.staticPageGenerationTimeout,
+ isBuildTimePrerendering: renderOpts.isBuildTimePrerendering,
+ fetchCache: renderOpts.fetchCache,
+ isOnDemandRevalidate: renderOpts.isOnDemandRevalidate,
+ requestId: undefined,
+ htmlRequestId: undefined,
+ isDraftMode: renderOpts.isDraftMode,
+ isPrefetchRequest,
+ buildId,
+ deploymentId,
+ reactLoadableManifest: (renderOpts == null ? void 0 : renderOpts.reactLoadableManifest) || {},
+ assetPrefix: (renderOpts == null ? void 0 : renderOpts.assetPrefix) || '',
+ nonce,
+ afterContext: createAfterContext(renderOpts),
+ cacheComponentsEnabled: renderOpts.cacheComponents,
+ validationLevel: renderOpts.validationLevel,
+ previouslyRevalidatedTags,
+ requestStartTime: performance.timeOrigin + performance.now(),
+ refreshTagsByCacheKind: createRefreshTagsByCacheKind(),
+ runInCleanSnapshot: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createSnapshot"])(),
+ shouldTrackFetchMetrics,
+ reactServerErrorsByDigest: new Map()
+ };
+ // TODO: remove this when we resolve accessing the store outside the execution context
+ renderOpts.store = store;
+ return store;
+}
+function createAfterContext(renderOpts) {
+ const { waitUntil, onClose, onAfterTaskError } = renderOpts;
+ return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$after$2f$after$2d$context$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["AfterContext"]({
+ waitUntil,
+ onClose,
+ onTaskError: onAfterTaskError
+ });
+}
+/**
+ * Creates a map with lazy results that refresh tags for the respective cache
+ * kind when they're awaited for the first time.
+ */ function createRefreshTagsByCacheKind() {
+ const refreshTagsByCacheKind = new Map();
+ const cacheHandlers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$handlers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getCacheHandlerEntries"])();
+ if (cacheHandlers) {
+ for (const [kind, cacheHandler] of cacheHandlers){
+ if ('refreshTags' in cacheHandler) {
+ refreshTagsByCacheKind.set(kind, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lazy$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createLazyResult"])(async ()=>cacheHandler.refreshTags()));
+ }
+ }
+ }
+ return refreshTagsByCacheKind;
+}
+}),
+"[project]/node_modules/next/dist/esm/server/base-http/helpers.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * This file provides some helpers that should be used in conjunction with
+ * explicit environment checks. When combined with the environment checks, it
+ * will ensure that the correct typings are used as well as enable code
+ * elimination.
+ */ /**
+ * Type guard to determine if a request is a WebNextRequest. This does not
+ * actually check the type of the request, but rather the runtime environment.
+ * It's expected that when the runtime environment is the edge runtime, that any
+ * base request is a WebNextRequest.
+ */ __turbopack_context__.s([
+ "isNodeNextRequest",
+ ()=>isNodeNextRequest,
+ "isNodeNextResponse",
+ ()=>isNodeNextResponse,
+ "isWebNextRequest",
+ ()=>isWebNextRequest,
+ "isWebNextResponse",
+ ()=>isWebNextResponse
+]);
+const isWebNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") === 'edge';
+const isWebNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") === 'edge';
+const isNodeNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") !== 'edge';
+const isNodeNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") !== 'edge';
+}),
+"[project]/node_modules/next/dist/esm/server/client-component-renderer-logger.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getClientComponentLoaderMetrics",
+ ()=>getClientComponentLoaderMetrics,
+ "wrapClientComponentLoader",
+ ()=>wrapClientComponentLoader
+]);
+// Combined load times for loading client components
+let clientComponentLoadStart = 0;
+let clientComponentLoadTimes = 0;
+let clientComponentLoadCount = 0;
+function wrapClientComponentLoader(ComponentMod, isTracingEnabled) {
+ if (!('performance' in globalThis) || !process.env.NEXT_OTEL_PERFORMANCE_PREFIX && !isTracingEnabled) {
+ return ComponentMod.__next_app__;
+ }
+ return {
+ require: (...args)=>{
+ const startTime = performance.now();
+ if (clientComponentLoadStart === 0) {
+ clientComponentLoadStart = startTime;
+ }
+ try {
+ clientComponentLoadCount += 1;
+ return ComponentMod.__next_app__.require(...args);
+ } finally{
+ clientComponentLoadTimes += performance.now() - startTime;
+ }
+ },
+ loadChunk: (...args)=>{
+ const startTime = performance.now();
+ const result = ComponentMod.__next_app__.loadChunk(...args);
+ // Avoid wrapping `loadChunk`'s result in an extra promise in case something like React depends on its identity.
+ // We only need to know when it's settled.
+ result.finally(()=>{
+ clientComponentLoadTimes += performance.now() - startTime;
+ });
+ return result;
+ }
+ };
+}
+function getClientComponentLoaderMetrics(options = {}) {
+ const metrics = clientComponentLoadStart === 0 ? undefined : {
+ clientComponentLoadStart,
+ clientComponentLoadTimes,
+ clientComponentLoadCount
+ };
+ if (options.reset) {
+ clientComponentLoadStart = 0;
+ clientComponentLoadTimes = 0;
+ clientComponentLoadCount = 0;
+ }
+ return metrics;
+}
+}),
+"[project]/node_modules/next/dist/esm/server/internal-utils.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "stripInternalQueries",
+ ()=>stripInternalQueries,
+ "stripInternalSearchParams",
+ ()=>stripInternalSearchParams
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [middleware] (ecmascript)");
+;
+const INTERNAL_QUERY_NAMES = [
+ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]
+];
+function stripInternalQueries(query) {
+ for (const name of INTERNAL_QUERY_NAMES){
+ delete query[name];
+ }
+}
+function stripInternalSearchParams(url) {
+ const isStringUrl = typeof url === 'string';
+ const instance = isStringUrl ? new URL(url) : url;
+ instance.searchParams.delete(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]);
+ return isStringUrl ? instance.toString() : instance;
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/cache-handlers/default.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "createDefaultCacheHandler",
+ ()=>createDefaultCacheHandler
+]);
+/**
+ * This is the default "use cache" handler it defaults to an in-memory store.
+ * In-memory caches are fragile and should not use stale-while-revalidate
+ * semantics on the caches because it's not worth warming up an entry that's
+ * likely going to get evicted before we get to use it anyway. However, we also
+ * don't want to reuse a stale entry for too long so stale entries should be
+ * considered expired/missing in such cache handlers.
+ *
+ * The dev server (`next dev`) is the exception: to keep reloads fast it serves
+ * stale entries until they expire, relying on the wrapper's
+ * stale-while-revalidate path to warm a fresh entry in the background. See
+ * `get` for where this branches.
+ */ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/lib/incremental-cache/tags-manifest.external.js [external] (next/dist/server/lib/incremental-cache/tags-manifest.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/use-cache/constants.js [middleware] (ecmascript)");
+;
+;
+;
+function createDefaultCacheHandler(maxSize) {
+ // If the max size is 0, return a cache handler that doesn't cache anything,
+ // this avoids an unnecessary LRUCache instance and potential memory
+ // allocation.
+ if (maxSize === 0) {
+ return {
+ get: ()=>Promise.resolve(undefined),
+ set: ()=>Promise.resolve(),
+ refreshTags: ()=>Promise.resolve(),
+ getExpiration: ()=>Promise.resolve(0),
+ updateTags: ()=>Promise.resolve()
+ };
+ }
+ const memoryCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["LRUCache"](maxSize, (entry, cacheKey)=>entry.size + cacheKey.length);
+ const pendingSets = new Map();
+ const debug = process.env.NEXT_PRIVATE_DEBUG_CACHE ? console.debug.bind(console, 'DefaultCacheHandler:') : undefined;
+ return {
+ async get (cacheKey) {
+ const pendingPromise = pendingSets.get(cacheKey);
+ if (pendingPromise) {
+ debug == null ? void 0 : debug('get', cacheKey, 'pending');
+ await pendingPromise;
+ }
+ const privateEntry = memoryCache.get(cacheKey);
+ if (!privateEntry) {
+ debug == null ? void 0 : debug('get', cacheKey, 'not found');
+ return undefined;
+ }
+ const entry = privateEntry.entry;
+ // A negative `expire` is an eviction sentinel: the tiered cache handler
+ // (dev-only) marks a front entry for deletion by overwriting it with a
+ // negative `expire`, since the cache-handler interface has no per-key
+ // delete. Treat it as missing here, independently of the minimum
+ // retention below (which would otherwise keep it alive). This is distinct
+ // from `revalidate = -1` below, which keeps serving the entry but forces
+ // a revalidation.
+ if (entry.expire < 0) {
+ debug == null ? void 0 : debug('get', cacheKey, 'evicted');
+ return undefined;
+ }
+ // The dev server serves stale entries until they expire (see the file
+ // overview); production drops them once past the revalidate time. In dev,
+ // an entry is retained for at least `MIN_PRERENDERABLE_EXPIRE` so that
+ // entries with a short `expire` (for example a `cacheLife({ expire: 0 })`
+ // client-only cache) still linger long enough that a reload hits the
+ // cache. That minimum is the same threshold below which the "use cache"
+ // wrapper treats an entry as dynamic, so it only extends the retention of
+ // entries that are dynamic anyway. It affects retention only; the
+ // returned entry keeps its real `expire`, so staging decisions are
+ // unchanged.
+ const maxAgeSeconds = ("TURBOPACK compile-time truthy", 1) ? Math.max(entry.expire, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["MIN_PRERENDERABLE_EXPIRE"]) : "TURBOPACK unreachable";
+ if (performance.timeOrigin + performance.now() > entry.timestamp + maxAgeSeconds * 1000) {
+ debug == null ? void 0 : debug('get', cacheKey, 'expired');
+ return undefined;
+ }
+ let revalidate = entry.revalidate;
+ if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsExpired"])(entry.tags, entry.timestamp)) {
+ debug == null ? void 0 : debug('get', cacheKey, 'had expired tag');
+ return undefined;
+ }
+ if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsStale"])(entry.tags, entry.timestamp)) {
+ debug == null ? void 0 : debug('get', cacheKey, 'had stale tag');
+ revalidate = -1;
+ }
+ const [returnStream, newSaved] = entry.value.tee();
+ entry.value = newSaved;
+ debug == null ? void 0 : debug('get', cacheKey, 'found', {
+ tags: entry.tags,
+ timestamp: entry.timestamp,
+ expire: entry.expire,
+ revalidate
+ });
+ return {
+ ...entry,
+ revalidate,
+ value: returnStream
+ };
+ },
+ async set (cacheKey, pendingEntry) {
+ debug == null ? void 0 : debug('set', cacheKey, 'start');
+ let resolvePending = ()=>{};
+ const pendingPromise = new Promise((resolve)=>{
+ resolvePending = resolve;
+ });
+ pendingSets.set(cacheKey, pendingPromise);
+ const entry = await pendingEntry;
+ let size = 0;
+ try {
+ // In production an `expire: 0` entry is dynamic: the "use cache"
+ // wrapper regenerates it on every read instead of serving the stored
+ // copy, so persisting it would be a wasted write of a value that is
+ // never served back. Skip storing it so the next read is a plain miss.
+ // The dev server keeps it, because its minimum retention serves the
+ // previously cached value across reloads. The `finally` below still
+ // resolves the pending set.
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ const [value, clonedValue] = entry.value.tee();
+ entry.value = value;
+ const reader = clonedValue.getReader();
+ for(let chunk; !(chunk = await reader.read()).done;){
+ size += Buffer.from(chunk.value).byteLength;
+ }
+ memoryCache.set(cacheKey, {
+ entry,
+ isErrored: false,
+ errorRetryCount: 0,
+ size
+ });
+ debug == null ? void 0 : debug('set', cacheKey, 'done');
+ } catch (err) {
+ // TODO: store partial buffer with error after we retry 3 times
+ debug == null ? void 0 : debug('set', cacheKey, 'failed', err);
+ } finally{
+ resolvePending();
+ pendingSets.delete(cacheKey);
+ }
+ },
+ async refreshTags () {
+ // Nothing to do for an in-memory cache handler.
+ },
+ async getExpiration (tags) {
+ const expirations = tags.map((tag)=>{
+ const entry = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].get(tag);
+ if (!entry) return 0;
+ // Return the most recent timestamp (either expired or stale)
+ return entry.expired || 0;
+ });
+ const expiration = Math.max(...expirations, 0);
+ debug == null ? void 0 : debug('getExpiration', {
+ tags,
+ expiration
+ });
+ return expiration;
+ },
+ async updateTags (tags, durations) {
+ const now = Math.round(performance.timeOrigin + performance.now());
+ debug == null ? void 0 : debug('updateTags', {
+ tags,
+ timestamp: now
+ });
+ for (const tag of tags){
+ // TODO: update file-system-cache?
+ const existingEntry = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].get(tag) || {};
+ if (durations) {
+ // Use provided durations directly
+ const updates = {
+ ...existingEntry
+ };
+ // mark as stale immediately
+ updates.stale = now;
+ if (durations.expire !== undefined) {
+ updates.expired = now + durations.expire * 1000 // Convert seconds to ms
+ ;
+ }
+ __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].set(tag, updates);
+ } else {
+ // Update expired field for immediate expiration (default behavior when no durations provided)
+ __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].set(tag, {
+ ...existingEntry,
+ expired: now
+ });
+ }
+ }
+ }
+ };
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/decode-query-path-parameter.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * Decodes a query path parameter.
+ *
+ * @param value - The value to decode.
+ * @returns The decoded value.
+ */ __turbopack_context__.s([
+ "decodeQueryPathParameter",
+ ()=>decodeQueryPathParameter
+]);
+function decodeQueryPathParameter(value) {
+ // When deployed to Vercel, the value may be encoded, so this attempts to
+ // decode it and returns the original value if it fails.
+ try {
+ return decodeURIComponent(value);
+ } catch {
+ return value;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "encodeHeaderSafe",
+ ()=>encodeHeaderSafe
+]);
+/**
+ * Percent-encode every character other than horizontal tab and printable ASCII
+ * so a value can be safely serialized into an HTTP header.
+ *
+ * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept
+ * different character ranges. Restricting values to `\t\x20-\x7e` produces a
+ * conservative representation that both can serialize. Characters outside a
+ * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would
+ * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or
+ * fails a cache read on every affected request.
+ *
+ * Cache tags are encoded at the public boundaries — tag construction
+ * (`getImplicitTags`, `validateTags`) and invalidation input
+ * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison,
+ * and the wire all see the same canonical form.
+ *
+ * The class is narrower than either transport accepts. Everything inside it
+ * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and
+ * `\t`, which preserves the comma-separated header format and the
+ * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`).
+ *
+ * Properties:
+ * - Fast-path: input that already fits the class is returned unchanged. This
+ * makes the encoder idempotent on already-encoded `%xx` sequences.
+ * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an
+ * emoji) are handed to `encodeURIComponent` as a complete code point — a
+ * per-code-unit regex would split the pair and throw `URIError`.
+ */ const OUT_OF_CLASS_CHAR = /[^\t\x20-\x7e]/;
+const OUT_OF_CLASS_RUN = /[^\t\x20-\x7e]+/g;
+function encodeHeaderSafe(value) {
+ return OUT_OF_CLASS_CHAR.test(value) ? value.replace(OUT_OF_CLASS_RUN, (run)=>encodeURIComponent(run)) : value;
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/implicit-tags.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getImplicitTags",
+ ()=>getImplicitTags
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$handlers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/use-cache/handlers.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lazy$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lazy-result.js [middleware] (ecmascript)");
+;
+;
+;
+;
+const getDerivedTags = (pathname)=>{
+ const derivedTags = [
+ `/layout`
+ ];
+ // we automatically add the current path segments as tags
+ // for revalidatePath handling
+ if (pathname.startsWith('/')) {
+ let end = pathname.indexOf('/', 1);
+ while(true){
+ if (end === -1) {
+ end = pathname.length;
+ }
+ let curPathname = pathname.slice(0, end);
+ if (curPathname) {
+ // all derived tags other than the page are layout tags
+ if (!curPathname.endsWith('/page') && !curPathname.endsWith('/route')) {
+ curPathname = `${curPathname}${!curPathname.endsWith('/') ? '/' : ''}layout`;
+ }
+ derivedTags.push(curPathname);
+ }
+ if (end === pathname.length) {
+ break;
+ }
+ end = pathname.indexOf('/', end + 1);
+ }
+ }
+ return derivedTags;
+};
+/**
+ * Creates a map with lazy results that fetch the expiration value for the given
+ * tags and respective cache kind when they're awaited for the first time.
+ */ function createTagsExpirationsByCacheKind(tags) {
+ const expirationsByCacheKind = new Map();
+ const cacheHandlers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$handlers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getCacheHandlerEntries"])();
+ if (cacheHandlers) {
+ for (const [kind, cacheHandler] of cacheHandlers){
+ if ('getExpiration' in cacheHandler) {
+ expirationsByCacheKind.set(kind, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lazy$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createLazyResult"])(async ()=>cacheHandler.getExpiration(tags)));
+ }
+ }
+ }
+ return expirationsByCacheKind;
+}
+async function getImplicitTags(page, pathname, fallbackRouteParams) {
+ const tags = new Set();
+ // Add the derived tags from the page. Encode each tag so a non-ASCII
+ // pathname doesn't trip header validation when written to
+ // `x-next-cache-tags`. Idempotent on already-ASCII input.
+ const derivedTags = getDerivedTags(page);
+ for (let tag of derivedTags){
+ tag = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encodeHeaderSafe"])(`${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_IMPLICIT_TAG_ID"]}${tag}`);
+ tags.add(tag);
+ }
+ // Add the tags from the pathname. If the route has unknown params, we don't
+ // want to add the pathname as a tag, as it will be invalid.
+ if (pathname && (!fallbackRouteParams || fallbackRouteParams.size === 0)) {
+ const tag = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["encodeHeaderSafe"])(`${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_IMPLICIT_TAG_ID"]}${pathname}`);
+ tags.add(tag);
+ }
+ if (tags.has(`${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_IMPLICIT_TAG_ID"]}/`)) {
+ tags.add(`${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_IMPLICIT_TAG_ID"]}/index`);
+ }
+ if (tags.has(`${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_IMPLICIT_TAG_ID"]}/index`)) {
+ tags.add(`${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_IMPLICIT_TAG_ID"]}/`);
+ }
+ const tagsArray = Array.from(tags);
+ return {
+ tags: tagsArray,
+ expirationsByCacheKind: createTagsExpirationsByCacheKind(tagsArray)
+ };
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/incremental-cache/file-system-cache.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>FileSystemCache
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$isomorphic$2f$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/isomorphic/path.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/lib/incremental-cache/tags-manifest.external.js [external] (next/dist/server/lib/incremental-cache/tags-manifest.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$multi$2d$file$2d$writer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/multi-file-writer.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$memory$2d$cache$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$memory$2d$cache$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/lib/incremental-cache/memory-cache.external.js [external] (next/dist/server/lib/incremental-cache/memory-cache.external.js, cjs)");
+;
+;
+;
+;
+;
+;
+class FileSystemCache {
+ static #_ = this.debug = !!process.env.NEXT_PRIVATE_DEBUG_CACHE;
+ constructor(ctx){
+ this.fs = ctx.fs;
+ this.flushToDisk = ctx.flushToDisk;
+ this.serverDistDir = ctx.serverDistDir;
+ this.revalidatedTags = ctx.revalidatedTags;
+ if (ctx.maxMemoryCacheSize) {
+ if (!FileSystemCache.memoryCache) {
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: using memory store for fetch cache');
+ }
+ FileSystemCache.memoryCache = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$memory$2d$cache$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$memory$2d$cache$2e$external$2e$js$2c$__cjs$29$__["getMemoryCache"])(ctx.maxMemoryCacheSize);
+ } else if (FileSystemCache.debug) {
+ console.log('FileSystemCache: memory store already initialized');
+ }
+ } else if (FileSystemCache.debug) {
+ console.log('FileSystemCache: not using memory store for fetch cache');
+ }
+ }
+ resetRequestCache() {}
+ async revalidateTag(tags, durations) {
+ tags = typeof tags === 'string' ? [
+ tags
+ ] : tags;
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: revalidateTag', tags, durations);
+ }
+ if (tags.length === 0) {
+ return;
+ }
+ const now = Date.now();
+ for (const tag of tags){
+ const existingEntry = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].get(tag) || {};
+ if (durations) {
+ // Use provided durations directly
+ const updates = {
+ ...existingEntry
+ };
+ // mark as stale immediately
+ updates.stale = now;
+ if (durations.expire !== undefined) {
+ updates.expired = now + durations.expire * 1000 // Convert seconds to ms
+ ;
+ }
+ __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].set(tag, updates);
+ } else {
+ // Update expired field for immediate expiration (default behavior when no durations provided)
+ __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["tagsManifest"].set(tag, {
+ ...existingEntry,
+ expired: now
+ });
+ }
+ }
+ }
+ async get(...args) {
+ var _FileSystemCache_memoryCache, _data_value, _data_value1, _data_value2, _data_value3;
+ const [key, ctx] = args;
+ const { kind } = ctx;
+ let data = (_FileSystemCache_memoryCache = FileSystemCache.memoryCache) == null ? void 0 : _FileSystemCache_memoryCache.get(key);
+ if (FileSystemCache.debug) {
+ if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH) {
+ console.log('FileSystemCache: get', key, ctx.tags, kind, !!data);
+ } else {
+ console.log('FileSystemCache: get', key, kind, !!data);
+ }
+ }
+ // let's check the disk for seed data
+ if (!data && ("TURBOPACK compile-time value", "nodejs") !== 'edge') {
+ try {
+ if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE) {
+ const filePath = this.getFilePath(`${key}.body`, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE);
+ const fileData = await this.fs.readFile(filePath);
+ const { mtime } = await this.fs.stat(filePath);
+ const meta = JSON.parse(await this.fs.readFile(filePath.replace(/\.body$/, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_META_SUFFIX"]), 'utf8'));
+ data = {
+ lastModified: mtime.getTime(),
+ value: {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE,
+ body: fileData,
+ headers: meta.headers,
+ status: meta.status
+ }
+ };
+ } else {
+ const filePath = this.getFilePath(kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH ? key : `${key}.html`, kind);
+ const fileData = await this.fs.readFile(filePath, 'utf8');
+ const { mtime } = await this.fs.stat(filePath);
+ if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH) {
+ var _data_value4;
+ const { tags, fetchIdx, fetchUrl } = ctx;
+ if (!this.flushToDisk) return null;
+ const lastModified = mtime.getTime();
+ const parsedData = JSON.parse(fileData);
+ data = {
+ lastModified,
+ value: parsedData
+ };
+ if (((_data_value4 = data.value) == null ? void 0 : _data_value4.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ var _data_value5;
+ const storedTags = (_data_value5 = data.value) == null ? void 0 : _data_value5.tags;
+ // update stored tags if a new one is being added
+ // TODO: remove this when we can send the tags
+ // via header on GET same as SET
+ if (!(tags == null ? void 0 : tags.every((tag)=>storedTags == null ? void 0 : storedTags.includes(tag)))) {
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: tags vs storedTags mismatch', tags, storedTags);
+ }
+ await this.set(key, data.value, {
+ fetchCache: true,
+ tags,
+ fetchIdx,
+ fetchUrl
+ });
+ }
+ }
+ } else if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE) {
+ // We try to load the metadata file, but if it fails, we don't
+ // error. We also don't load it if this is a fallback.
+ let meta;
+ try {
+ meta = JSON.parse(await this.fs.readFile(filePath.replace(/\.html$/, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_META_SUFFIX"]), 'utf8'));
+ } catch {}
+ let maybeSegmentData;
+ if (meta == null ? void 0 : meta.segmentPaths) {
+ // Collect all the segment data for this page.
+ // TODO: To optimize file system reads, we should consider creating
+ // separate cache entries for each segment, rather than storing them
+ // all on the page's entry. Though the behavior is
+ // identical regardless.
+ const segmentData = new Map();
+ maybeSegmentData = segmentData;
+ const segmentsDir = key + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RSC_SEGMENTS_DIR_SUFFIX"];
+ await Promise.all(meta.segmentPaths.map(async (segmentPath)=>{
+ const segmentDataFilePath = this.getFilePath(segmentsDir + segmentPath + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RSC_SEGMENT_SUFFIX"], __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE);
+ try {
+ segmentData.set(segmentPath, await this.fs.readFile(segmentDataFilePath));
+ } catch {
+ // This shouldn't happen, but if for some reason we fail to
+ // load a segment from the filesystem, treat it the same as if
+ // the segment is dynamic and does not have a prefetch.
+ }
+ }));
+ }
+ let rscData;
+ if (!ctx.isFallback && (!ctx.isRoutePPREnabled || (meta == null ? void 0 : meta.postponed) == null)) {
+ rscData = await this.fs.readFile(this.getFilePath(`${key}${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RSC_SUFFIX"]}`, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE));
+ }
+ data = {
+ lastModified: mtime.getTime(),
+ value: {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE,
+ html: fileData,
+ rscData,
+ postponed: meta == null ? void 0 : meta.postponed,
+ headers: meta == null ? void 0 : meta.headers,
+ status: meta == null ? void 0 : meta.status,
+ segmentData: maybeSegmentData
+ }
+ };
+ } else if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES) {
+ let meta;
+ let pageData = {};
+ if (!ctx.isFallback) {
+ pageData = JSON.parse(await this.fs.readFile(this.getFilePath(`${key}${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_DATA_SUFFIX"]}`, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES), 'utf8'));
+ }
+ data = {
+ lastModified: mtime.getTime(),
+ value: {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
+ html: fileData,
+ pageData,
+ headers: meta == null ? void 0 : meta.headers,
+ status: meta == null ? void 0 : meta.status
+ }
+ };
+ } else {
+ throw Object.defineProperty(new Error(`Invariant: Unexpected route kind ${kind} in file system cache.`), "__NEXT_ERROR_CODE", {
+ value: "E445",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ }
+ if (data) {
+ var _FileSystemCache_memoryCache1;
+ (_FileSystemCache_memoryCache1 = FileSystemCache.memoryCache) == null ? void 0 : _FileSystemCache_memoryCache1.set(key, data);
+ }
+ } catch {
+ return null;
+ }
+ }
+ if ((data == null ? void 0 : (_data_value = data.value) == null ? void 0 : _data_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE || (data == null ? void 0 : (_data_value1 = data.value) == null ? void 0 : _data_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE || (data == null ? void 0 : (_data_value2 = data.value) == null ? void 0 : _data_value2.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES) {
+ var _data_value_headers;
+ const tagsHeader = (_data_value_headers = data.value.headers) == null ? void 0 : _data_value_headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]];
+ if (typeof tagsHeader === 'string') {
+ const cacheTags = tagsHeader.split(',');
+ // we trigger a blocking validation if an ISR page
+ // had a tag revalidated, if we want to be a background
+ // revalidation instead we return data.lastModified = -1
+ if (cacheTags.length > 0 && (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsExpired"])(cacheTags, data.lastModified)) {
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: expired tags', cacheTags);
+ }
+ return null;
+ }
+ }
+ } else if ((data == null ? void 0 : (_data_value3 = data.value) == null ? void 0 : _data_value3.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ const combinedTags = ctx.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH ? [
+ ...ctx.tags || [],
+ ...ctx.softTags || []
+ ] : [];
+ // When revalidate tag is called we don't return stale data so it's
+ // updated right away.
+ if (combinedTags.some((tag)=>this.revalidatedTags.includes(tag))) {
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: was revalidated', combinedTags);
+ }
+ return null;
+ }
+ if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsExpired"])(combinedTags, data.lastModified)) {
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: expired tags', combinedTags);
+ }
+ return null;
+ }
+ }
+ return data ?? null;
+ }
+ async set(key, data, ctx) {
+ var _FileSystemCache_memoryCache;
+ (_FileSystemCache_memoryCache = FileSystemCache.memoryCache) == null ? void 0 : _FileSystemCache_memoryCache.set(key, {
+ value: data,
+ lastModified: Date.now()
+ });
+ if (FileSystemCache.debug) {
+ console.log('FileSystemCache: set', key);
+ }
+ if (!this.flushToDisk || !data) return;
+ // Create a new writer that will prepare to write all the files to disk
+ // after their containing directory is created.
+ const writer = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$multi$2d$file$2d$writer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["MultiFileWriter"](this.fs);
+ if (data.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE) {
+ const filePath = this.getFilePath(`${key}.body`, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE);
+ writer.append(filePath, data.body);
+ const meta = {
+ headers: data.headers,
+ status: data.status,
+ postponed: undefined,
+ segmentPaths: undefined,
+ prefetchHints: undefined
+ };
+ writer.append(filePath.replace(/\.body$/, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_META_SUFFIX"]), JSON.stringify(meta, null, 2));
+ } else if (data.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES || data.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE) {
+ const isAppPath = data.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE;
+ const htmlPath = this.getFilePath(`${key}.html`, isAppPath ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES);
+ writer.append(htmlPath, data.html);
+ // Fallbacks don't generate a data file.
+ if (!ctx.fetchCache && !ctx.isFallback && !ctx.isRoutePPREnabled) {
+ writer.append(this.getFilePath(`${key}${isAppPath ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RSC_SUFFIX"] : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_DATA_SUFFIX"]}`, isAppPath ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES), isAppPath ? data.rscData : JSON.stringify(data.pageData));
+ }
+ if ((data == null ? void 0 : data.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE) {
+ let segmentPaths;
+ if (data.segmentData) {
+ segmentPaths = [];
+ const segmentsDir = htmlPath.replace(/\.html$/, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RSC_SEGMENTS_DIR_SUFFIX"]);
+ for (const [segmentPath, buffer] of data.segmentData){
+ segmentPaths.push(segmentPath);
+ const segmentDataFilePath = segmentsDir + segmentPath + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RSC_SEGMENT_SUFFIX"];
+ writer.append(segmentDataFilePath, buffer);
+ }
+ }
+ const meta = {
+ headers: data.headers,
+ status: data.status,
+ postponed: data.postponed,
+ segmentPaths,
+ prefetchHints: undefined
+ };
+ writer.append(htmlPath.replace(/\.html$/, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_META_SUFFIX"]), JSON.stringify(meta));
+ }
+ } else if (data.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ const filePath = this.getFilePath(key, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH);
+ writer.append(filePath, JSON.stringify({
+ ...data,
+ tags: ctx.fetchCache ? ctx.tags : []
+ }));
+ }
+ // Wait for all FS operations to complete.
+ await writer.wait();
+ }
+ getFilePath(pathname, kind) {
+ switch(kind){
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH:
+ // we store in .next/cache/fetch-cache so it can be persisted
+ // across deploys
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$isomorphic$2f$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].join(this.serverDistDir, '..', 'cache', 'fetch-cache', pathname);
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES:
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$isomorphic$2f$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].join(this.serverDistDir, 'pages', pathname);
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE:
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE:
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE:
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$isomorphic$2f$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].join(this.serverDistDir, 'app', pathname);
+ default:
+ throw Object.defineProperty(new Error(`Unexpected file path kind: ${kind}`), "__NEXT_ERROR_CODE", {
+ value: "E479",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/incremental-cache/index.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "CacheHandler",
+ ()=>CacheHandler,
+ "IncrementalCache",
+ ()=>IncrementalCache
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [middleware] (ecmascript) ");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$incremental$2d$cache$2f$file$2d$system$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/incremental-cache/file-system-cache.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$to$2d$route$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/to-route.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$shared$2d$cache$2d$controls$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$shared$2d$cache$2d$controls$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js [external] (next/dist/server/lib/incremental-cache/shared-cache-controls.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$server$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/server-utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/lib/incremental-cache/tags-manifest.external.js [external] (next/dist/server/lib/incremental-cache/tags-manifest.external.js, cjs)");
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+function toHex(buffer) {
+ // Hex-encode body bytes losslessly: decoding as UTF-8 would collapse
+ // distinct bytes (0xff/0xfe to U+FFFD) and collide; Buffer isn't on edge.
+ const bytes = isArrayBuffer(buffer) ? new Uint8Array(buffer) : new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
+ let hex = '';
+ for (const byte of bytes){
+ hex += byte.toString(16).padStart(2, '0');
+ }
+ return hex;
+}
+// Duck typing to support Edge runtime
+// TODO: Switch to instanceof checks once Edge runtime is removed.
+function isArrayBuffer(buffer) {
+ return !('buffer' in buffer);
+}
+function isBodyByteSequence(body) {
+ return typeof body === 'object' && 'byteLength' in body;
+}
+function isBodyReadableStream(body) {
+ return typeof body.getReader === 'function';
+}
+function isBodyFormDataOrURLSearchParams(body) {
+ return typeof body.keys === 'function';
+}
+function isBodyBlob(body) {
+ return typeof body.arrayBuffer === 'function';
+}
+class CacheHandler {
+ // eslint-disable-next-line
+ constructor(_ctx){}
+ async get(_cacheKey, _ctx) {
+ return {};
+ }
+ async set(_cacheKey, _data, _ctx) {}
+ async revalidateTag(_tags, _durations) {}
+ resetRequestCache() {}
+}
+async function hashString(cacheString) {
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ else {
+ const crypto1 = __turbopack_context__.r("[externals]/crypto [external] (crypto, cjs)");
+ return crypto1.createHash('sha256').update(cacheString).digest('hex');
+ }
+}
+// this should be bumped anytime a fix is made to cache entries
+// that should bust the cache
+const MAIN_KEY_PREFIX = 'v4';
+class IncrementalCache {
+ static #_ = this.debug = !!process.env.NEXT_PRIVATE_DEBUG_CACHE;
+ constructor({ fs, dev, flushToDisk, minimalMode, serverDistDir, requestHeaders, maxMemoryCacheSize, getPrerenderManifest, fetchCacheKeyPrefix, CurCacheHandler, allowedRevalidateHeaderKeys }){
+ var _this_prerenderManifest_preview, _this_prerenderManifest;
+ this.locks = new Map();
+ this.hasCustomCacheHandler = Boolean(CurCacheHandler);
+ const cacheHandlersSymbol = Symbol.for('@next/cache-handlers');
+ const _globalThis = globalThis;
+ if (!CurCacheHandler) {
+ // if we have a global cache handler available leverage it
+ const globalCacheHandler = _globalThis[cacheHandlersSymbol];
+ if (globalCacheHandler == null ? void 0 : globalCacheHandler.FetchCache) {
+ CurCacheHandler = globalCacheHandler.FetchCache;
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: using global FetchCache cache handler');
+ }
+ } else {
+ if (fs && serverDistDir) {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: using filesystem cache handler');
+ }
+ CurCacheHandler = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$incremental$2d$cache$2f$file$2d$system$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"];
+ }
+ }
+ } else if (IncrementalCache.debug) {
+ console.log('IncrementalCache: using custom cache handler', CurCacheHandler.name);
+ }
+ if (process.env.__NEXT_TEST_MAX_ISR_CACHE) {
+ // Allow cache size to be overridden for testing purposes
+ maxMemoryCacheSize = parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE, 10);
+ }
+ this.dev = dev;
+ this.disableForTestmode = process.env.NEXT_PRIVATE_TEST_PROXY === 'true';
+ // this is a hack to avoid Webpack knowing this is equal to this.minimalMode
+ // because we replace this.minimalMode to true in production bundles.
+ const minimalModeKey = 'minimalMode';
+ this[minimalModeKey] = minimalMode;
+ this.requestHeaders = requestHeaders;
+ this.allowedRevalidateHeaderKeys = allowedRevalidateHeaderKeys;
+ this.prerenderManifest = getPrerenderManifest();
+ this.cacheControls = new __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$shared$2d$cache$2d$controls$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$shared$2d$cache$2d$controls$2e$external$2e$js$2c$__cjs$29$__["SharedCacheControls"](this.prerenderManifest);
+ this.fetchCacheKeyPrefix = fetchCacheKeyPrefix;
+ let revalidatedTags = [];
+ if (requestHeaders[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]] === ((_this_prerenderManifest = this.prerenderManifest) == null ? void 0 : (_this_prerenderManifest_preview = _this_prerenderManifest.preview) == null ? void 0 : _this_prerenderManifest_preview.previewModeId)) {
+ this.isOnDemandRevalidate = true;
+ }
+ if (minimalMode) {
+ var _this_prerenderManifest_preview1, _this_prerenderManifest1;
+ revalidatedTags = this.revalidatedTags = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$server$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getPreviouslyRevalidatedTags"])(requestHeaders, (_this_prerenderManifest1 = this.prerenderManifest) == null ? void 0 : (_this_prerenderManifest_preview1 = _this_prerenderManifest1.preview) == null ? void 0 : _this_prerenderManifest_preview1.previewModeId);
+ }
+ if (CurCacheHandler) {
+ this.cacheHandler = new CurCacheHandler({
+ dev,
+ fs,
+ flushToDisk,
+ serverDistDir,
+ revalidatedTags,
+ maxMemoryCacheSize,
+ _requestHeaders: requestHeaders,
+ fetchCacheKeyPrefix
+ });
+ }
+ }
+ calculateRevalidate(pathname, fromTime, dev, isFallback) {
+ // in development we don't have a prerender-manifest
+ // and default to always revalidating to allow easier debugging
+ if (dev) return Math.floor(performance.timeOrigin + performance.now() - 1000);
+ const cacheControl = this.cacheControls.get((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$to$2d$route$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toRoute"])(pathname));
+ // if an entry isn't present in routes we fallback to a default
+ // of revalidating after 1 second unless it's a fallback request.
+ const initialRevalidateSeconds = cacheControl ? cacheControl.revalidate : isFallback ? false : 1;
+ const revalidateAfter = typeof initialRevalidateSeconds === 'number' ? initialRevalidateSeconds * 1000 + fromTime : initialRevalidateSeconds;
+ return revalidateAfter;
+ }
+ _getPathname(pathname, fetchCache) {
+ return fetchCache ? pathname : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizePagePath"])(pathname);
+ }
+ resetRequestCache() {
+ var _this_cacheHandler_resetRequestCache, _this_cacheHandler;
+ (_this_cacheHandler = this.cacheHandler) == null ? void 0 : (_this_cacheHandler_resetRequestCache = _this_cacheHandler.resetRequestCache) == null ? void 0 : _this_cacheHandler_resetRequestCache.call(_this_cacheHandler);
+ }
+ async lock(cacheKey) {
+ // Wait for any existing lock on this cache key to be released
+ // This implements a simple queue-based locking mechanism
+ while(true){
+ const lock = this.locks.get(cacheKey);
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: lock get', cacheKey, !!lock);
+ }
+ // If no lock exists, we can proceed to acquire it
+ if (!lock) break;
+ // Wait for the existing lock to be released before trying again
+ await lock;
+ }
+ // Create a new detached promise that will represent this lock
+ // The resolve function (unlock) will be returned to the caller
+ const { resolve, promise } = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DetachedPromise"]();
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: successfully locked', cacheKey);
+ }
+ // Store the lock promise in the locks map
+ this.locks.set(cacheKey, promise);
+ return ()=>{
+ // Resolve the promise to release the lock.
+ resolve();
+ // Remove the lock from the map once it's released so that future gets
+ // can acquire the lock.
+ this.locks.delete(cacheKey);
+ };
+ }
+ async revalidateTag(tags, durations) {
+ var _this_cacheHandler;
+ return (_this_cacheHandler = this.cacheHandler) == null ? void 0 : _this_cacheHandler.revalidateTag(tags, durations);
+ }
+ async generateSimpleCacheKey(input) {
+ const cacheString = JSON.stringify([
+ MAIN_KEY_PREFIX,
+ this.fetchCacheKeyPrefix || '',
+ input
+ ]);
+ return hashString(cacheString);
+ }
+ // x-ref: https://github.com/facebook/react/blob/2655c9354d8e1c54ba888444220f63e836925caa/packages/react/src/ReactFetch.js#L23
+ async generateCacheKey(url, init = {}) {
+ const bodyChunks = [];
+ const encoder = new TextEncoder();
+ // Will be set implementing https://fetch.spec.whatwg.org/#concept-bodyinit-extract
+ let bodyType = null;
+ const body = init.body;
+ if (body) {
+ if (isBodyByteSequence(body)) {
+ bodyChunks.push(`bytes:${toHex(body)}`);
+ init._ogBody = body;
+ } else if (isBodyReadableStream(body)) {
+ const readableBody = body;
+ const chunks = [];
+ try {
+ await readableBody.pipeTo(new WritableStream({
+ write (chunk) {
+ chunks.push(typeof chunk === 'string' ? encoder.encode(chunk) : chunk);
+ }
+ }));
+ // Create a new buffer with all the chunks.
+ const length = chunks.reduce((total, arr)=>total + arr.length, 0);
+ const arrayBuffer = new Uint8Array(length);
+ // Push each of the chunks into the new array buffer.
+ let offset = 0;
+ for (const chunk of chunks){
+ arrayBuffer.set(chunk, offset);
+ offset += chunk.length;
+ }
+ bodyChunks.push(`bytes:${toHex(arrayBuffer)}`);
+ init._ogBody = arrayBuffer;
+ } catch (err) {
+ console.error('Problem reading body', err);
+ }
+ } else if (isBodyFormDataOrURLSearchParams(body)) {
+ bodyType = String(body) === '[object FormData]' ? 'multipart/form-data; boundary=' : 'application/x-www-form-urlencoded;charset=UTF-8';
+ const iterable = body;
+ init._ogBody = body;
+ // Separate, tagged chunks so `["a","b"]` can't collide with `["a,b"]`.
+ for (const [key, val] of iterable.entries()){
+ bodyChunks.push(`key:${key}`);
+ if (typeof val === 'string') {
+ bodyChunks.push(`str:${val}`);
+ } else {
+ bodyChunks.push('file', val.name, val.type, `bytes:${toHex(await val.arrayBuffer())}`);
+ }
+ }
+ // handle blob body
+ } else if (isBodyBlob(body)) {
+ const blob = body;
+ const arrayBuffer = await blob.arrayBuffer();
+ bodyChunks.push('blob', blob.type, `bytes:${toHex(arrayBuffer)}`);
+ init._ogBody = new Blob([
+ arrayBuffer
+ ], {
+ type: blob.type
+ });
+ bodyType = blob.type;
+ } else if (typeof body === 'string') {
+ bodyChunks.push(`str:${body}`);
+ init._ogBody = body;
+ bodyType = 'text/plain;charset=UTF-8';
+ } else {
+ body;
+ throw Object.defineProperty(new Error(`Unsupported body type: ${typeof body}`), "__NEXT_ERROR_CODE", {
+ value: "E1443",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ }
+ const headers = typeof (init.headers || {}).keys === 'function' ? Object.fromEntries(init.headers) : Object.assign({}, init.headers);
+ // w3c trace context headers can break request caching and deduplication
+ // so we remove them from the cache key
+ if ('traceparent' in headers) delete headers['traceparent'];
+ if ('tracestate' in headers) delete headers['tracestate'];
+ const cacheString = JSON.stringify([
+ MAIN_KEY_PREFIX,
+ this.fetchCacheKeyPrefix || '',
+ url,
+ init.method,
+ // Ensures default Content-Type is part of the cache key
+ // TODO: Only necessary when headers are not used from the Request instance
+ bodyType,
+ headers,
+ init.mode,
+ init.redirect,
+ init.credentials,
+ init.referrer,
+ init.referrerPolicy,
+ init.integrity,
+ init.cache,
+ bodyChunks
+ ]);
+ return hashString(cacheString);
+ }
+ async get(cacheKey, ctx) {
+ var _this_cacheHandler, _cacheData_value;
+ // Unlike other caches if we have a resume data cache, we use it even if
+ // testmode would normally disable it or if requestHeaders say 'no-cache'.
+ if (ctx.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH) {
+ const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore();
+ const resumeDataCache = workUnitStore ? (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getResumeDataCache"])(workUnitStore) : null;
+ if (resumeDataCache) {
+ const memoryCacheData = resumeDataCache.fetch.get(cacheKey);
+ if ((memoryCacheData == null ? void 0 : memoryCacheData.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ // Check if any tags were recently revalidated before returning RDC entry.
+ // When a server action calls updateTag(), the re-render should see fresh
+ // data instead of stale RDC data.
+ const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
+ const combinedTags = [
+ ...ctx.tags || [],
+ ...ctx.softTags || []
+ ];
+ const hasRevalidatedTag = combinedTags.some((tag)=>{
+ var _this_revalidatedTags, _workStore_pendingRevalidatedTags;
+ return ((_this_revalidatedTags = this.revalidatedTags) == null ? void 0 : _this_revalidatedTags.includes(tag)) || (workStore == null ? void 0 : (_workStore_pendingRevalidatedTags = workStore.pendingRevalidatedTags) == null ? void 0 : _workStore_pendingRevalidatedTags.some((item)=>item.tag === tag));
+ });
+ if (hasRevalidatedTag) {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: rdc:revalidated-tag', cacheKey);
+ }
+ // Fall through to cacheHandler lookup
+ } else {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: rdc:hit', cacheKey);
+ }
+ return {
+ isStale: false,
+ value: memoryCacheData
+ };
+ }
+ } else if (IncrementalCache.debug) {
+ console.log('IncrementalCache: rdc:miss', cacheKey);
+ }
+ } else {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: rdc:no-resume-data');
+ }
+ }
+ }
+ // we don't leverage the prerender cache in dev mode
+ // so that getStaticProps is always called for easier debugging
+ if (this.disableForTestmode || this.dev && (ctx.kind !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH || this.requestHeaders['cache-control'] === 'no-cache')) {
+ return null;
+ }
+ cacheKey = this._getPathname(cacheKey, ctx.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH);
+ const cacheData = await ((_this_cacheHandler = this.cacheHandler) == null ? void 0 : _this_cacheHandler.get(cacheKey, ctx));
+ if (ctx.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH) {
+ var _cacheData_value1;
+ if (!cacheData) {
+ return null;
+ }
+ if (((_cacheData_value1 = cacheData.value) == null ? void 0 : _cacheData_value1.kind) !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ var _cacheData_value2;
+ throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["InvariantError"](`Expected cached value for cache key ${JSON.stringify(cacheKey)} to be a "FETCH" kind, got ${JSON.stringify((_cacheData_value2 = cacheData.value) == null ? void 0 : _cacheData_value2.kind)} instead.`), "__NEXT_ERROR_CODE", {
+ value: "E653",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
+ const combinedTags = [
+ ...ctx.tags || [],
+ ...ctx.softTags || []
+ ];
+ // if a tag was revalidated we don't return stale data
+ if (combinedTags.some((tag)=>{
+ var _this_revalidatedTags, _workStore_pendingRevalidatedTags;
+ return ((_this_revalidatedTags = this.revalidatedTags) == null ? void 0 : _this_revalidatedTags.includes(tag)) || (workStore == null ? void 0 : (_workStore_pendingRevalidatedTags = workStore.pendingRevalidatedTags) == null ? void 0 : _workStore_pendingRevalidatedTags.some((item)=>item.tag === tag));
+ })) {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: expired tag', cacheKey);
+ }
+ return null;
+ }
+ // As we're able to get the cache entry for this fetch, and the prerender
+ // resume data cache (RDC) is available, it must have been populated by a
+ // previous fetch, but was not yet present in the in-memory cache. This
+ // could be the case when performing multiple renders in parallel during
+ // build time where we de-duplicate the fetch calls.
+ //
+ // We add it to the RDC so that the next fetch call will be able to use it
+ // and it won't have to reach into the fetch cache implementation.
+ const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore();
+ if (workUnitStore) {
+ const resumeDataCache = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getResumeDataCache"])(workUnitStore);
+ if (resumeDataCache == null ? void 0 : resumeDataCache.mutable) {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: rdc:set', cacheKey);
+ }
+ resumeDataCache.fetch.set(cacheKey, cacheData.value);
+ }
+ }
+ const revalidate = ctx.revalidate || cacheData.value.revalidate;
+ const age = (performance.timeOrigin + performance.now() - (cacheData.lastModified || 0)) / 1000;
+ let isStale = age > revalidate;
+ const data = cacheData.value.data;
+ if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsExpired"])(combinedTags, cacheData.lastModified)) {
+ return null;
+ } else if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsStale"])(combinedTags, cacheData.lastModified)) {
+ isStale = true;
+ }
+ return {
+ isStale,
+ value: {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH,
+ data,
+ revalidate
+ }
+ };
+ } else if ((cacheData == null ? void 0 : (_cacheData_value = cacheData.value) == null ? void 0 : _cacheData_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["InvariantError"](`Expected cached value for cache key ${JSON.stringify(cacheKey)} not to be a ${JSON.stringify(ctx.kind)} kind, got "FETCH" instead.`), "__NEXT_ERROR_CODE", {
+ value: "E652",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ let entry = null;
+ const { isFallback } = ctx;
+ const cacheControl = this.cacheControls.get((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$to$2d$route$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toRoute"])(cacheKey));
+ let isStale;
+ let revalidateAfter;
+ if ((cacheData == null ? void 0 : cacheData.lastModified) === -1) {
+ isStale = -1;
+ revalidateAfter = -1 * __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"] * 1000;
+ } else {
+ const now = performance.timeOrigin + performance.now();
+ const lastModified = (cacheData == null ? void 0 : cacheData.lastModified) || now;
+ revalidateAfter = this.calculateRevalidate(cacheKey, lastModified, this.dev ?? false, ctx.isFallback);
+ // If the route's `expire` time has passed, force a blocking revalidation
+ // by signalling `isStale = -1`. The response cache treats `-1` as "skip
+ // the early SWR resolve" and awaits a fresh render before the user sees a
+ // response.
+ const expireAfter = typeof (cacheControl == null ? void 0 : cacheControl.expire) === 'number' ? cacheControl.expire * 1000 + lastModified : undefined;
+ if (expireAfter !== undefined && expireAfter < now) {
+ isStale = -1;
+ } else {
+ var _cacheData_value3, _cacheData_value4;
+ isStale = revalidateAfter !== false && revalidateAfter < now ? true : undefined;
+ // If the stale time couldn't be determined based on the revalidation
+ // time, we check if the tags are expired or stale.
+ if (isStale === undefined && ((cacheData == null ? void 0 : (_cacheData_value3 = cacheData.value) == null ? void 0 : _cacheData_value3.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE || (cacheData == null ? void 0 : (_cacheData_value4 = cacheData.value) == null ? void 0 : _cacheData_value4.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE)) {
+ var _cacheData_value_headers;
+ const tagsHeader = (_cacheData_value_headers = cacheData.value.headers) == null ? void 0 : _cacheData_value_headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]];
+ if (typeof tagsHeader === 'string') {
+ const cacheTags = tagsHeader.split(',');
+ if (cacheTags.length > 0) {
+ if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsExpired"])(cacheTags, lastModified)) {
+ isStale = -1;
+ } else if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$lib$2f$incremental$2d$cache$2f$tags$2d$manifest$2e$external$2e$js$2c$__cjs$29$__["areTagsStale"])(cacheTags, lastModified)) {
+ isStale = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (cacheData) {
+ entry = {
+ isStale,
+ cacheControl,
+ revalidateAfter,
+ value: cacheData.value,
+ isFallback
+ };
+ }
+ if (!cacheData && this.prerenderManifest.notFoundRoutes.includes(cacheKey)) {
+ // for the first hit after starting the server the cache
+ // may not have a way to save notFound: true so if
+ // the prerender-manifest marks this as notFound then we
+ // return that entry and trigger a cache set to give it a
+ // chance to update in-memory entries
+ entry = {
+ isStale,
+ value: null,
+ cacheControl,
+ revalidateAfter,
+ isFallback
+ };
+ this.set(cacheKey, entry.value, {
+ ...ctx,
+ cacheControl
+ });
+ }
+ return entry;
+ }
+ async set(pathname, data, ctx) {
+ // Even if we otherwise disable caching for testMode or if no fetchCache is
+ // configured we still always stash results in the resume data cache if one
+ // exists. This is because this is a transient in memory cache that
+ // populates caches ahead of a dynamic render in dev mode to allow the RSC
+ // debug info to have the right environment associated to it.
+ if ((data == null ? void 0 : data.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
+ const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore();
+ const resumeDataCache = workUnitStore ? (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getResumeDataCache"])(workUnitStore) : null;
+ if (resumeDataCache == null ? void 0 : resumeDataCache.mutable) {
+ if (IncrementalCache.debug) {
+ console.log('IncrementalCache: rdc:set', pathname);
+ }
+ resumeDataCache.fetch.set(pathname, data);
+ }
+ }
+ if (this.disableForTestmode || this.dev && !ctx.fetchCache) return;
+ pathname = this._getPathname(pathname, ctx.fetchCache);
+ // FetchCache has upper limit of 2MB per-entry currently
+ const itemSize = JSON.stringify(data).length;
+ if (ctx.fetchCache && itemSize > 2 * 1024 * 1024 && // We ignore the size limit when custom cache handler is being used, as it
+ // might not have this limit
+ !this.hasCustomCacheHandler && // We also ignore the size limit when it's an implicit build-time-only
+ // caching that the user isn't even aware of.
+ !ctx.isImplicitBuildTimeCache) {
+ const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`;
+ if (this.dev) {
+ throw Object.defineProperty(new Error(warningText), "__NEXT_ERROR_CODE", {
+ value: "E1003",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ console.warn(warningText);
+ return;
+ }
+ try {
+ var _this_cacheHandler;
+ if (!ctx.fetchCache && ctx.cacheControl) {
+ this.cacheControls.set((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$to$2d$route$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toRoute"])(pathname), ctx.cacheControl);
+ }
+ await ((_this_cacheHandler = this.cacheHandler) == null ? void 0 : _this_cacheHandler.set(pathname, data, ctx));
+ } catch (error) {
+ console.warn('Failed to update prerender cache for', pathname, error);
+ }
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/is-rsc-request.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * Normalizes the raw RSC header value. Only the literal string "1" is treated
+ * as a valid RSC request marker; malformed or repeated values are ignored.
+ */ __turbopack_context__.s([
+ "isRSCRequestHeader",
+ ()=>isRSCRequestHeader
+]);
+function isRSCRequestHeader(value) {
+ return value === '1';
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/lazy-result.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * Calls the given function only when the returned promise-like object is
+ * awaited. Afterwards, it provides the resolved value synchronously as `value`
+ * property.
+ */ __turbopack_context__.s([
+ "createLazyResult",
+ ()=>createLazyResult,
+ "isResolvedLazyResult",
+ ()=>isResolvedLazyResult
+]);
+function createLazyResult(fn) {
+ let pendingResult;
+ const result = {
+ then (onfulfilled, onrejected) {
+ if (!pendingResult) {
+ pendingResult = Promise.resolve(fn());
+ }
+ pendingResult.then((value)=>{
+ result.value = value;
+ }).catch(()=>{
+ // The externally awaited result will be rejected via `onrejected`. We
+ // don't need to handle it here. But we do want to avoid an unhandled
+ // rejection.
+ });
+ return pendingResult.then(onfulfilled, onrejected);
+ }
+ };
+ return result;
+}
+function isResolvedLazyResult(result) {
+ return result.hasOwnProperty('value');
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "LRUCache",
+ ()=>LRUCache
+]);
+/**
+ * Node in the doubly-linked list used for LRU tracking.
+ * Each node represents a cache entry with bidirectional pointers.
+ */ class LRUNode {
+ constructor(key, data, size){
+ this.prev = null;
+ this.next = null;
+ this.key = key;
+ this.data = data;
+ this.size = size;
+ }
+}
+/**
+ * Sentinel node used for head/tail boundaries.
+ * These nodes don't contain actual cache data but simplify list operations.
+ */ class SentinelNode {
+ constructor(){
+ this.prev = null;
+ this.next = null;
+ }
+}
+class LRUCache {
+ constructor(maxSize, calculateSize, onEvict){
+ this.cache = new Map();
+ this.totalSize = 0;
+ this.maxSize = maxSize;
+ this.calculateSize = calculateSize;
+ this.onEvict = onEvict;
+ // Create sentinel nodes to simplify doubly-linked list operations
+ // HEAD <-> TAIL (empty list)
+ this.head = new SentinelNode();
+ this.tail = new SentinelNode();
+ this.head.next = this.tail;
+ this.tail.prev = this.head;
+ }
+ /**
+ * Adds a node immediately after the head (marks as most recently used).
+ * Used when inserting new items or when an item is accessed.
+ * PRECONDITION: node must be disconnected (prev/next should be null)
+ */ addToHead(node) {
+ node.prev = this.head;
+ node.next = this.head.next;
+ // head.next is always non-null (points to tail or another node)
+ this.head.next.prev = node;
+ this.head.next = node;
+ }
+ /**
+ * Removes a node from its current position in the doubly-linked list.
+ * Updates the prev/next pointers of adjacent nodes to maintain list integrity.
+ * PRECONDITION: node must be connected (prev/next are non-null)
+ */ removeNode(node) {
+ // Connected nodes always have non-null prev/next
+ node.prev.next = node.next;
+ node.next.prev = node.prev;
+ }
+ /**
+ * Moves an existing node to the head position (marks as most recently used).
+ * This is the core LRU operation - accessed items become most recent.
+ */ moveToHead(node) {
+ this.removeNode(node);
+ this.addToHead(node);
+ }
+ /**
+ * Removes and returns the least recently used node (the one before tail).
+ * This is called during eviction when the cache exceeds capacity.
+ * PRECONDITION: cache is not empty (ensured by caller)
+ */ removeTail() {
+ const lastNode = this.tail.prev;
+ // tail.prev is always non-null and always LRUNode when cache is not empty
+ this.removeNode(lastNode);
+ return lastNode;
+ }
+ /**
+ * Sets a key-value pair in the cache.
+ * If the key exists, updates the value and moves to head.
+ * If new, adds at head and evicts from tail if necessary.
+ *
+ * Time Complexity:
+ * - O(1) for uniform item sizes
+ * - O(k) where k is the number of items evicted (can be O(N) for variable sizes)
+ */ set(key, value) {
+ const size = (this.calculateSize == null ? void 0 : this.calculateSize.call(this, value, key)) ?? 1;
+ if (size <= 0) {
+ throw Object.defineProperty(new Error(`LRUCache: calculateSize returned ${size}, but size must be > 0. ` + `Items with size 0 would never be evicted, causing unbounded cache growth.`), "__NEXT_ERROR_CODE", {
+ value: "E1045",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ if (size > this.maxSize) {
+ console.warn('Single item size exceeds maxSize');
+ return false;
+ }
+ const existing = this.cache.get(key);
+ if (existing) {
+ // Update existing node: adjust size and move to head (most recent)
+ existing.data = value;
+ this.totalSize = this.totalSize - existing.size + size;
+ existing.size = size;
+ this.moveToHead(existing);
+ } else {
+ // Add new node at head (most recent position)
+ const newNode = new LRUNode(key, value, size);
+ this.cache.set(key, newNode);
+ this.addToHead(newNode);
+ this.totalSize += size;
+ }
+ // Evict least recently used items until under capacity
+ while(this.totalSize > this.maxSize && this.cache.size > 0){
+ const tail = this.removeTail();
+ this.cache.delete(tail.key);
+ this.totalSize -= tail.size;
+ this.onEvict == null ? void 0 : this.onEvict.call(this, tail.key, tail.data);
+ }
+ return true;
+ }
+ /**
+ * Checks if a key exists in the cache.
+ * This is a pure query operation - does NOT update LRU order.
+ *
+ * Time Complexity: O(1)
+ */ has(key) {
+ return this.cache.has(key);
+ }
+ /**
+ * Retrieves a value by key and marks it as most recently used.
+ * Moving to head maintains the LRU property for future evictions.
+ *
+ * Time Complexity: O(1)
+ */ get(key) {
+ const node = this.cache.get(key);
+ if (!node) return undefined;
+ // Mark as most recently used by moving to head
+ this.moveToHead(node);
+ return node.data;
+ }
+ /**
+ * Returns an iterator over the cache entries. The order is outputted in the
+ * order of most recently used to least recently used.
+ */ *[Symbol.iterator]() {
+ let current = this.head.next;
+ while(current && current !== this.tail){
+ // Between head and tail, current is always LRUNode
+ const node = current;
+ yield [
+ node.key,
+ node.data
+ ];
+ current = current.next;
+ }
+ }
+ /**
+ * Removes a specific key from the cache.
+ * Updates both the hash map and doubly-linked list.
+ *
+ * Note: This is an explicit removal and does NOT trigger the `onEvict`
+ * callback. Use this for intentional deletions where eviction tracking
+ * is not needed.
+ *
+ * Time Complexity: O(1)
+ */ remove(key) {
+ const node = this.cache.get(key);
+ if (!node) return;
+ this.removeNode(node);
+ this.cache.delete(key);
+ this.totalSize -= node.size;
+ }
+ /**
+ * Returns the number of items in the cache.
+ */ get size() {
+ return this.cache.size;
+ }
+ /**
+ * Returns the current total size of all cached items.
+ * This uses the custom size calculation if provided.
+ */ get currentSize() {
+ return this.totalSize;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/to-route.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+/**
+ * This transforms a URL pathname into a route. It removes any trailing slashes
+ * and the `/index` suffix.
+ *
+ * @param pathname - The URL path that needs to be optimized.
+ * @returns - The route
+ *
+ * @example
+ * // returns '/example'
+ * toRoute('/example/index/');
+ *
+ * @example
+ * // returns '/example'
+ * toRoute('/example/');
+ *
+ * @example
+ * // returns '/'
+ * toRoute('/index/');
+ *
+ * @example
+ * // returns '/'
+ * toRoute('/');
+ */ __turbopack_context__.s([
+ "toRoute",
+ ()=>toRoute
+]);
+function toRoute(pathname) {
+ return pathname.replace(/(?:\/index)?\/?$/, '') || '/';
+}
+}),
+"[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "AppRenderSpan",
+ ()=>AppRenderSpan,
+ "AppRouteRouteHandlersSpan",
+ ()=>AppRouteRouteHandlersSpan,
+ "BaseServerSpan",
+ ()=>BaseServerSpan,
+ "LoadComponentsSpan",
+ ()=>LoadComponentsSpan,
+ "LogSpanAllowList",
+ ()=>LogSpanAllowList,
+ "MiddlewareSpan",
+ ()=>MiddlewareSpan,
+ "NextNodeServerSpan",
+ ()=>NextNodeServerSpan,
+ "NextServerSpan",
+ ()=>NextServerSpan,
+ "NextVanillaSpanAllowlist",
+ ()=>NextVanillaSpanAllowlist,
+ "NodeSpan",
+ ()=>NodeSpan,
+ "RenderSpan",
+ ()=>RenderSpan,
+ "ResolveMetadataSpan",
+ ()=>ResolveMetadataSpan,
+ "RouterSpan",
+ ()=>RouterSpan,
+ "StartServerSpan",
+ ()=>StartServerSpan
+]);
+/**
+ * Contains predefined constants for the trace span name in next/server.
+ *
+ * Currently, next/server/tracer is internal implementation only for tracking
+ * next.js's implementation only with known span names defined here.
+ **/ // eslint typescript has a bug with TS enums
+var BaseServerSpan = /*#__PURE__*/ function(BaseServerSpan) {
+ BaseServerSpan["handleRequest"] = "BaseServer.handleRequest";
+ BaseServerSpan["run"] = "BaseServer.run";
+ BaseServerSpan["pipe"] = "BaseServer.pipe";
+ BaseServerSpan["getStaticHTML"] = "BaseServer.getStaticHTML";
+ BaseServerSpan["render"] = "BaseServer.render";
+ BaseServerSpan["renderToResponseWithComponents"] = "BaseServer.renderToResponseWithComponents";
+ BaseServerSpan["renderToResponse"] = "BaseServer.renderToResponse";
+ BaseServerSpan["renderToHTML"] = "BaseServer.renderToHTML";
+ BaseServerSpan["renderError"] = "BaseServer.renderError";
+ BaseServerSpan["renderErrorToResponse"] = "BaseServer.renderErrorToResponse";
+ BaseServerSpan["renderErrorToHTML"] = "BaseServer.renderErrorToHTML";
+ BaseServerSpan["render404"] = "BaseServer.render404";
+ return BaseServerSpan;
+}(BaseServerSpan || {});
+var LoadComponentsSpan = /*#__PURE__*/ function(LoadComponentsSpan) {
+ LoadComponentsSpan["loadDefaultErrorComponents"] = "LoadComponents.loadDefaultErrorComponents";
+ LoadComponentsSpan["loadComponents"] = "LoadComponents.loadComponents";
+ return LoadComponentsSpan;
+}(LoadComponentsSpan || {});
+var NextServerSpan = /*#__PURE__*/ function(NextServerSpan) {
+ NextServerSpan["getRequestHandler"] = "NextServer.getRequestHandler";
+ NextServerSpan["getRequestHandlerWithMetadata"] = "NextServer.getRequestHandlerWithMetadata";
+ NextServerSpan["getServer"] = "NextServer.getServer";
+ NextServerSpan["getServerRequestHandler"] = "NextServer.getServerRequestHandler";
+ NextServerSpan["createServer"] = "createServer.createServer";
+ return NextServerSpan;
+}(NextServerSpan || {});
+var NextNodeServerSpan = /*#__PURE__*/ function(NextNodeServerSpan) {
+ NextNodeServerSpan["compression"] = "NextNodeServer.compression";
+ NextNodeServerSpan["getBuildId"] = "NextNodeServer.getBuildId";
+ NextNodeServerSpan["createComponentTree"] = "NextNodeServer.createComponentTree";
+ NextNodeServerSpan["clientComponentLoading"] = "NextNodeServer.clientComponentLoading";
+ NextNodeServerSpan["getLayoutOrPageModule"] = "NextNodeServer.getLayoutOrPageModule";
+ NextNodeServerSpan["generateStaticRoutes"] = "NextNodeServer.generateStaticRoutes";
+ NextNodeServerSpan["generateFsStaticRoutes"] = "NextNodeServer.generateFsStaticRoutes";
+ NextNodeServerSpan["generatePublicRoutes"] = "NextNodeServer.generatePublicRoutes";
+ NextNodeServerSpan["generateImageRoutes"] = "NextNodeServer.generateImageRoutes.route";
+ NextNodeServerSpan["sendRenderResult"] = "NextNodeServer.sendRenderResult";
+ NextNodeServerSpan["proxyRequest"] = "NextNodeServer.proxyRequest";
+ NextNodeServerSpan["runApi"] = "NextNodeServer.runApi";
+ NextNodeServerSpan["render"] = "NextNodeServer.render";
+ NextNodeServerSpan["renderHTML"] = "NextNodeServer.renderHTML";
+ NextNodeServerSpan["imageOptimizer"] = "NextNodeServer.imageOptimizer";
+ NextNodeServerSpan["getPagePath"] = "NextNodeServer.getPagePath";
+ NextNodeServerSpan["getRoutesManifest"] = "NextNodeServer.getRoutesManifest";
+ NextNodeServerSpan["findPageComponents"] = "NextNodeServer.findPageComponents";
+ NextNodeServerSpan["getFontManifest"] = "NextNodeServer.getFontManifest";
+ NextNodeServerSpan["getServerComponentManifest"] = "NextNodeServer.getServerComponentManifest";
+ NextNodeServerSpan["getRequestHandler"] = "NextNodeServer.getRequestHandler";
+ NextNodeServerSpan["renderToHTML"] = "NextNodeServer.renderToHTML";
+ NextNodeServerSpan["renderError"] = "NextNodeServer.renderError";
+ NextNodeServerSpan["renderErrorToHTML"] = "NextNodeServer.renderErrorToHTML";
+ NextNodeServerSpan["render404"] = "NextNodeServer.render404";
+ NextNodeServerSpan["startResponse"] = "NextNodeServer.startResponse";
+ // nested inner span, does not require parent scope name
+ NextNodeServerSpan["route"] = "route";
+ NextNodeServerSpan["onProxyReq"] = "onProxyReq";
+ NextNodeServerSpan["apiResolver"] = "apiResolver";
+ NextNodeServerSpan["internalFetch"] = "internalFetch";
+ return NextNodeServerSpan;
+}(NextNodeServerSpan || {});
+var StartServerSpan = /*#__PURE__*/ function(StartServerSpan) {
+ StartServerSpan["startServer"] = "startServer.startServer";
+ return StartServerSpan;
+}(StartServerSpan || {});
+var RenderSpan = /*#__PURE__*/ function(RenderSpan) {
+ RenderSpan["getServerSideProps"] = "Render.getServerSideProps";
+ RenderSpan["getStaticProps"] = "Render.getStaticProps";
+ RenderSpan["renderToString"] = "Render.renderToString";
+ RenderSpan["renderDocument"] = "Render.renderDocument";
+ RenderSpan["createBodyResult"] = "Render.createBodyResult";
+ return RenderSpan;
+}(RenderSpan || {});
+var AppRenderSpan = /*#__PURE__*/ function(AppRenderSpan) {
+ AppRenderSpan["renderToString"] = "AppRender.renderToString";
+ AppRenderSpan["renderToReadableStream"] = "AppRender.renderToReadableStream";
+ AppRenderSpan["getBodyResult"] = "AppRender.getBodyResult";
+ AppRenderSpan["fetch"] = "AppRender.fetch";
+ AppRenderSpan["waitShellReady"] = "AppRender.waitShellReady";
+ AppRenderSpan["renderToNodeFizzStream"] = "AppRender.renderToNodeFizzStream";
+ AppRenderSpan["instantInsights"] = "AppRender.instantInsights";
+ AppRenderSpan["instantInsightsPrepareValidation"] = "AppRender.instantInsights.prepareValidation";
+ AppRenderSpan["instantInsightsRunValidation"] = "AppRender.instantInsights.runValidation";
+ return AppRenderSpan;
+}(AppRenderSpan || {});
+var RouterSpan = /*#__PURE__*/ function(RouterSpan) {
+ RouterSpan["executeRoute"] = "Router.executeRoute";
+ return RouterSpan;
+}(RouterSpan || {});
+var NodeSpan = /*#__PURE__*/ function(NodeSpan) {
+ NodeSpan["runHandler"] = "Node.runHandler";
+ return NodeSpan;
+}(NodeSpan || {});
+var AppRouteRouteHandlersSpan = /*#__PURE__*/ function(AppRouteRouteHandlersSpan) {
+ AppRouteRouteHandlersSpan["runHandler"] = "AppRouteRouteHandlers.runHandler";
+ return AppRouteRouteHandlersSpan;
+}(AppRouteRouteHandlersSpan || {});
+var ResolveMetadataSpan = /*#__PURE__*/ function(ResolveMetadataSpan) {
+ ResolveMetadataSpan["generateMetadata"] = "ResolveMetadata.generateMetadata";
+ ResolveMetadataSpan["generateViewport"] = "ResolveMetadata.generateViewport";
+ return ResolveMetadataSpan;
+}(ResolveMetadataSpan || {});
+var MiddlewareSpan = /*#__PURE__*/ function(MiddlewareSpan) {
+ MiddlewareSpan["execute"] = "Middleware.execute";
+ return MiddlewareSpan;
+}(MiddlewareSpan || {});
+const NextVanillaSpanAllowlist = new Set([
+ "Middleware.execute",
+ "BaseServer.handleRequest",
+ "Render.getServerSideProps",
+ "Render.getStaticProps",
+ "AppRender.fetch",
+ "AppRender.getBodyResult",
+ "Render.renderDocument",
+ "Node.runHandler",
+ "AppRouteRouteHandlers.runHandler",
+ "ResolveMetadata.generateMetadata",
+ "ResolveMetadata.generateViewport",
+ "NextNodeServer.createComponentTree",
+ "NextNodeServer.findPageComponents",
+ "NextNodeServer.getLayoutOrPageModule",
+ "NextNodeServer.startResponse",
+ "NextNodeServer.clientComponentLoading"
+]);
+const LogSpanAllowList = new Set([
+ "NextNodeServer.findPageComponents",
+ "NextNodeServer.createComponentTree",
+ "NextNodeServer.clientComponentLoading"
+]);
+;
+}),
+"[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "BubbledError",
+ ()=>BubbledError,
+ "SpanKind",
+ ()=>SpanKind,
+ "SpanStatusCode",
+ ()=>SpanStatusCode,
+ "getTracer",
+ ()=>getTracer,
+ "isBubbledError",
+ ()=>isBubbledError
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [middleware] (ecmascript)");
+;
+;
+const NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX;
+const LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder');
+let api;
+function getLocalSpanRecorder() {
+ if ("TURBOPACK compile-time truthy", 1) {
+ return globalThis[LOCAL_SPAN_RECORDER_KEY];
+ } else //TURBOPACK unreachable
+ ;
+}
+// we want to allow users to use their own version of @opentelemetry/api if they
+// want to, so we try to require it first, and if it fails we fall back to the
+// version that is bundled with Next.js
+// this is because @opentelemetry/api has to be synced with the version of
+// @opentelemetry/tracing that is used, and we don't want to force users to use
+// the version that is bundled with Next.js.
+// the API is ~stable, so this should be fine
+if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+;
+else {
+ try {
+ api = __turbopack_context__.r("[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)");
+ } catch (err) {
+ api = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [middleware] (ecmascript)");
+ }
+}
+const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api;
+class BubbledError extends Error {
+ constructor(bubble, result){
+ super(), this.bubble = bubble, this.result = result;
+ }
+}
+function isBubbledError(error) {
+ if (typeof error !== 'object' || error === null) return false;
+ return error instanceof BubbledError;
+}
+const closeSpanWithError = (span, error)=>{
+ if (isBubbledError(error) && error.bubble) {
+ span.setAttribute('next.bubble', true);
+ } else {
+ if (error) {
+ span.recordException(error);
+ span.setAttribute('error.type', error.name);
+ }
+ span.setStatus({
+ code: SpanStatusCode.ERROR,
+ message: error == null ? void 0 : error.message
+ });
+ }
+ span.end();
+};
+/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map();
+const rootSpanIdKey = api.createContextKey('next.rootSpanId');
+let lastSpanId = 0;
+const getSpanId = ()=>lastSpanId++;
+const clientTraceDataSetter = {
+ set (carrier, key, value) {
+ carrier.push({
+ key,
+ value
+ });
+ }
+};
+class NextTracerImpl {
+ /**
+ * Returns an instance to the trace with configured name.
+ * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,
+ * This should be lazily evaluated.
+ */ getTracerInstance() {
+ return trace.getTracer('next.js', '0.0.1');
+ }
+ isOpenTelemetryEnabled() {
+ var _tracerProvider_getDelegate_constructor, _tracerProvider_getDelegate;
+ const activeSpan = trace.getSpan(context.active());
+ if (activeSpan == null ? void 0 : activeSpan.isRecording()) {
+ return true;
+ }
+ const tracerProvider = trace.getTracerProvider();
+ if (!('getDelegate' in tracerProvider)) {
+ return true;
+ }
+ return (tracerProvider.getDelegate == null ? void 0 : (_tracerProvider_getDelegate = tracerProvider.getDelegate.call(tracerProvider)) == null ? void 0 : (_tracerProvider_getDelegate_constructor = _tracerProvider_getDelegate.constructor) == null ? void 0 : _tracerProvider_getDelegate_constructor.name) !== 'NoopTracerProvider';
+ }
+ getContext() {
+ return context;
+ }
+ getTracePropagationData() {
+ const activeContext = context.active();
+ const entries = [];
+ propagation.inject(activeContext, entries, clientTraceDataSetter);
+ return entries;
+ }
+ getActiveScopeSpan() {
+ const localSpanRecorder = getLocalSpanRecorder();
+ const activeLocalSpan = localSpanRecorder == null ? void 0 : localSpanRecorder.getActiveLocalSpan();
+ if (activeLocalSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(activeLocalSpan))) {
+ return activeLocalSpan;
+ }
+ const activeSpan = trace.getSpan(context.active());
+ if (activeSpan || !("TURBOPACK compile-time value", "1")) {
+ return activeSpan;
+ }
+ return activeLocalSpan;
+ }
+ /**
+ * Run `fn` with the active span cleared, so spans created inside become new
+ * roots (or parent to incoming propagated context). Used for in-process
+ * Node.js middleware so its span is a sibling of the request span, matching
+ * edge middleware which runs in a detached sandbox.
+ */ runWithDetachedContext(fn) {
+ if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {
+ return fn();
+ }
+ return context.with(ROOT_CONTEXT, fn);
+ }
+ withPropagatedContext(carrier, fn, getter, force = false) {
+ const activeContext = context.active();
+ if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled() && !trace.getSpanContext(activeContext)) {
+ return fn();
+ }
+ if (force) {
+ const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter);
+ if (trace.getSpanContext(remoteContext)) {
+ return context.with(remoteContext, fn);
+ }
+ // Preserve the current active span while still merging any extracted
+ // baggage/context values from the carrier.
+ const mergedContext = propagation.extract(activeContext, carrier, getter);
+ return context.with(mergedContext, fn);
+ }
+ if (trace.getSpanContext(activeContext)) {
+ // Active span is already set, too late to propagate.
+ return fn();
+ }
+ const remoteContext = propagation.extract(activeContext, carrier, getter);
+ return context.with(remoteContext, fn);
+ }
+ trace(...args) {
+ const [type, fnOrOptions, fnOrEmpty] = args;
+ const tracingEnabled = Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled();
+ const localSpanRecorder = getLocalSpanRecorder();
+ const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false;
+ if (!tracingEnabled && !localSpanRecordingEnabled) {
+ return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty();
+ }
+ // coerce options form overload
+ const { fn, options } = typeof fnOrOptions === 'function' ? {
+ fn: fnOrOptions,
+ options: {}
+ } : {
+ fn: fnOrEmpty,
+ options: {
+ ...fnOrOptions
+ }
+ };
+ const spanName = options.spanName ?? type;
+ const parentSpan = options.parentSpan ?? this.getActiveScopeSpan();
+ const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined;
+ const shouldDelegateSpan = !isolatedParentSpan && (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(type) || process.env.NEXT_OTEL_VERBOSE === '1');
+ const shouldTraceSpan = shouldDelegateSpan || ((localSpanRecorder == null ? void 0 : localSpanRecorder.isRequestInsightsEnabled()) ?? false);
+ if (!shouldTraceSpan || options.hideSpan) {
+ return fn();
+ }
+ // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.
+ let spanContext = isolatedParentSpan ? context.active() : this.getSpanContext(parentSpan);
+ if (!spanContext) {
+ spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT;
+ }
+ // Check if there's already a root span in the store for this trace
+ // We are intentionally not checking whether there is an active context
+ // from outside of nextjs to ensure that we can provide the same level
+ // of telemetry when using a custom server
+ const existingRootSpanId = spanContext.getValue(rootSpanIdKey);
+ const isRootSpan = typeof existingRootSpanId !== 'number' || !rootSpanAttributesStore.has(existingRootSpanId);
+ const spanId = getSpanId();
+ options.attributes = {
+ 'next.span_category': 'nextjs',
+ 'next.span_name': spanName,
+ 'next.span_type': type,
+ ...options.attributes
+ };
+ return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled && shouldDelegateSpan, localSpanRecordingEnabled, isolatedParentSpan, (span)=>{
+ let startTime;
+ if (NEXT_OTEL_PERFORMANCE_PREFIX && type && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["LogSpanAllowList"].has(type)) {
+ startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined;
+ }
+ let cleanedUp = false;
+ const onCleanup = ()=>{
+ if (cleanedUp) return;
+ cleanedUp = true;
+ rootSpanAttributesStore.delete(spanId);
+ if (startTime) {
+ performance.measure(`${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, {
+ start: startTime,
+ end: performance.now()
+ });
+ }
+ };
+ if (isRootSpan) {
+ rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {})));
+ }
+ if (fn.length > 1) {
+ try {
+ return fn(span, (err)=>{
+ if (err) {
+ closeSpanWithError(span, err);
+ } else {
+ span.end();
+ }
+ });
+ } catch (err) {
+ closeSpanWithError(span, err);
+ throw err;
+ } finally{
+ onCleanup();
+ }
+ }
+ try {
+ const result = fn(span);
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isThenable"])(result)) {
+ // If there's error make sure it throws
+ return result.then((res)=>{
+ span.end();
+ // Need to pass down the promise result,
+ // it could be react stream response with error { error, stream }
+ return res;
+ }).catch((err)=>{
+ closeSpanWithError(span, err);
+ throw err;
+ }).finally(onCleanup);
+ } else {
+ span.end();
+ onCleanup();
+ }
+ return result;
+ } catch (err) {
+ closeSpanWithError(span, err);
+ onCleanup();
+ throw err;
+ }
+ }));
+ }
+ runWithActiveSpan(spanName, options, parentContext, tracingEnabled, localSpanRecordingEnabled, isolatedParentSpan, fn) {
+ if (tracingEnabled) {
+ return this.getTracerInstance().startActiveSpan(spanName, options, (span)=>fn(localSpanRecordingEnabled ? this.createLocalRecordingSpan(spanName, options, parentContext, span, isolatedParentSpan) : span));
+ }
+ const span = this.createLocalRecordingSpan(spanName, options, parentContext, undefined, isolatedParentSpan);
+ const localSpanRecorder = getLocalSpanRecorder();
+ return localSpanRecorder.withLocalSpan(span, ()=>localSpanRecorder.isOpenTelemetryIsolatedSpan(span) ? fn(span) : context.with(trace.setSpan(context.active(), span), fn, undefined, span));
+ }
+ createLocalRecordingSpan(name, options, parentContext, delegateSpan, isolatedParentSpan) {
+ const parentSpanContext = (isolatedParentSpan == null ? void 0 : isolatedParentSpan.spanContext()) ?? trace.getSpanContext(parentContext);
+ const delegateSpanContext = delegateSpan == null ? void 0 : delegateSpan.spanContext();
+ return getLocalSpanRecorder().createLocalSpan({
+ name,
+ attributes: options.attributes,
+ links: options.links,
+ startTime: options.startTime,
+ delegateSpan,
+ traceId: (delegateSpanContext == null ? void 0 : delegateSpanContext.traceId) ?? (parentSpanContext == null ? void 0 : parentSpanContext.traceId),
+ spanId: delegateSpanContext == null ? void 0 : delegateSpanContext.spanId,
+ parentSpanId: parentSpanContext == null ? void 0 : parentSpanContext.spanId,
+ isolateOpenTelemetry: isolatedParentSpan !== undefined
+ });
+ }
+ wrap(...args) {
+ const tracer = this;
+ const [name, options, fn] = args.length === 3 ? args : [
+ args[0],
+ {},
+ args[1]
+ ];
+ if (!__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(name) && process.env.NEXT_OTEL_VERBOSE !== '1' && !("TURBOPACK compile-time value", "1")) //TURBOPACK unreachable
+ ;
+ return function() {
+ let optionsObj = options;
+ if (typeof optionsObj === 'function' && typeof fn === 'function') {
+ optionsObj = optionsObj.apply(this, arguments);
+ }
+ const lastArgId = arguments.length - 1;
+ const cb = arguments[lastArgId];
+ if (typeof cb === 'function') {
+ const scopeBoundCb = tracer.getContext().bind(context.active(), cb);
+ return tracer.trace(name, optionsObj, (_span, done)=>{
+ arguments[lastArgId] = function(err) {
+ done == null ? void 0 : done(err);
+ return scopeBoundCb.apply(this, arguments);
+ };
+ return fn.apply(this, arguments);
+ });
+ } else {
+ return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments));
+ }
+ };
+ }
+ startSpan(...args) {
+ const [type, passedOptions] = args;
+ const options = passedOptions ? {
+ ...passedOptions,
+ attributes: {
+ 'next.span_category': 'nextjs',
+ ...passedOptions.attributes
+ }
+ } : {
+ attributes: {
+ 'next.span_category': 'nextjs'
+ }
+ };
+ const localSpanRecorder = getLocalSpanRecorder();
+ const parentSpan = options.parentSpan ?? this.getActiveScopeSpan();
+ const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined;
+ const parentContext = (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ?? context.active();
+ const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false;
+ if (!localSpanRecordingEnabled) {
+ return this.getTracerInstance().startSpan(type, options, parentContext);
+ }
+ const delegateSpan = !isolatedParentSpan && this.isOpenTelemetryEnabled() ? this.getTracerInstance().startSpan(type, options, parentContext) : undefined;
+ return this.createLocalRecordingSpan(type, options, parentContext, delegateSpan, isolatedParentSpan);
+ }
+ getSpanContext(parentSpan) {
+ const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined;
+ return spanContext;
+ }
+ getRootSpanAttributes() {
+ const spanId = context.active().getValue(rootSpanIdKey);
+ return rootSpanAttributesStore.get(spanId);
+ }
+ setRootSpanAttribute(key, value) {
+ const spanId = context.active().getValue(rootSpanIdKey);
+ const attributes = rootSpanAttributesStore.get(spanId);
+ if (attributes && !attributes.has(key)) {
+ attributes.set(key, value);
+ }
+ if ("TURBOPACK compile-time truthy", 1) {
+ var _getLocalSpanRecorder;
+ const localSpan = (_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.getActiveLocalSpan();
+ if (localSpan) {
+ localSpan.setAttribute(key, value);
+ }
+ }
+ }
+ withSpan(span, fn) {
+ const recorder = getLocalSpanRecorder();
+ if (recorder == null ? void 0 : recorder.isLocalRecordingSpan(span)) {
+ return recorder.withLocalSpan(span, ()=>recorder.isOpenTelemetryIsolatedSpan(span) ? fn() : context.with(trace.setSpan(context.active(), span), fn));
+ }
+ return context.with(trace.setSpan(context.active(), span), fn);
+ }
+}
+const getTracer = (()=>{
+ const tracer = new NextTracerImpl();
+ return ()=>tracer;
+})();
+;
+}),
+"[project]/node_modules/next/dist/esm/server/pipe-readable.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "isAbortError",
+ ()=>isAbortError,
+ "pipeNodeReadableToNodeResponse",
+ ()=>pipeNodeReadableToNodeResponse,
+ "pipeToNodeResponse",
+ ()=>pipeToNodeResponse
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$client$2d$component$2d$renderer$2d$logger$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/client-component-renderer-logger.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+function isAbortError(e) {
+ return (e == null ? void 0 : e.name) === 'AbortError' || (e == null ? void 0 : e.name) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ResponseAbortedName"];
+}
+const HAS_CLIENT_COMPONENT_METRICS_ENABLED = 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX;
+function createWriterFromResponse(res, waitUntilForEnd) {
+ let started = false;
+ // Create a promise that will resolve once the response has drained. See
+ // https://nodejs.org/api/stream.html#stream_event_drain
+ let drained = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DetachedPromise"]();
+ function onDrain() {
+ drained.resolve();
+ }
+ res.on('drain', onDrain);
+ // If the finish event fires, it means we shouldn't block and wait for the
+ // drain event.
+ res.once('close', ()=>{
+ res.off('drain', onDrain);
+ drained.resolve();
+ });
+ // Create a promise that will resolve once the response has finished. See
+ // https://nodejs.org/api/http.html#event-finish_1
+ const finished = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DetachedPromise"]();
+ res.once('finish', ()=>{
+ finished.resolve();
+ });
+ // Create a writable stream that will write to the response.
+ return new WritableStream({
+ write: async (chunk)=>{
+ // You'd think we'd want to use `start` instead of placing this in `write`
+ // but this ensures that we don't actually flush the headers until we've
+ // started writing chunks.
+ if (!started) {
+ started = true;
+ if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) {
+ const metrics = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$client$2d$component$2d$renderer$2d$logger$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getClientComponentLoaderMetrics"])();
+ if (metrics) {
+ performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, {
+ start: metrics.clientComponentLoadStart,
+ end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes
+ });
+ }
+ }
+ res.flushHeaders();
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, {
+ spanName: 'start response'
+ }, ()=>undefined);
+ }
+ try {
+ const ok = res.write(chunk);
+ // Added by the `compression` middleware, this is a function that will
+ // flush the partially-compressed response to the client.
+ if ('flush' in res && typeof res.flush === 'function') {
+ res.flush();
+ }
+ // If the write returns false, it means there's some backpressure, so
+ // wait until it's streamed before continuing.
+ if (!ok) {
+ await drained.promise;
+ // Reset the drained promise so that we can wait for the next drain event.
+ drained = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DetachedPromise"]();
+ }
+ } catch (err) {
+ res.end();
+ throw Object.defineProperty(new Error('failed to write chunk to response', {
+ cause: err
+ }), "__NEXT_ERROR_CODE", {
+ value: "E321",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ },
+ abort: (err)=>{
+ if (res.writableFinished) return;
+ res.destroy(err);
+ },
+ close: async ()=>{
+ // if a waitUntil promise was passed, wait for it to resolve before
+ // ending the response.
+ if (waitUntilForEnd) {
+ await waitUntilForEnd;
+ }
+ if (res.writableFinished) return;
+ res.end();
+ return finished.promise;
+ }
+ });
+}
+async function pipeToNodeResponse(readable, res, waitUntilForEnd) {
+ try {
+ // If the response has already errored, then just return now.
+ const { errored, destroyed } = res;
+ if (errored || destroyed) return;
+ // Create a new AbortController so that we can abort the readable if the
+ // client disconnects.
+ const controller = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createAbortController"])(res);
+ const writer = createWriterFromResponse(res, waitUntilForEnd);
+ await readable.pipeTo(writer, {
+ signal: controller.signal
+ });
+ } catch (err) {
+ // If this isn't related to an abort error, re-throw it.
+ if (isAbortError(err)) return;
+ throw Object.defineProperty(new Error('failed to pipe response', {
+ cause: err
+ }), "__NEXT_ERROR_CODE", {
+ value: "E180",
+ enumerable: false,
+ configurable: true
+ });
+ }
+}
+async function pipeNodeReadableToNodeResponse(readable, res, waitUntilForEnd) {
+ try {
+ const { errored, destroyed } = res;
+ if (errored || destroyed) return;
+ let started = false;
+ const finished = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DetachedPromise"]();
+ res.once('close', ()=>{
+ readable.destroy();
+ finished.resolve();
+ });
+ readable.on('data', (chunk)=>{
+ if (!started) {
+ started = true;
+ if ('performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX) {
+ const metrics = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$client$2d$component$2d$renderer$2d$logger$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getClientComponentLoaderMetrics"])();
+ if (metrics) {
+ performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, {
+ start: metrics.clientComponentLoadStart,
+ end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes
+ });
+ }
+ }
+ res.flushHeaders();
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, {
+ spanName: 'start response'
+ }, ()=>undefined);
+ }
+ const ok = res.write(chunk);
+ if ('flush' in res && typeof res.flush === 'function') {
+ res.flush();
+ }
+ if (!ok) {
+ readable.pause();
+ res.once('drain', ()=>{
+ readable.resume();
+ });
+ }
+ });
+ readable.on('end', async ()=>{
+ if (waitUntilForEnd) {
+ await waitUntilForEnd;
+ }
+ if (!res.writableFinished) {
+ res.end();
+ }
+ finished.resolve();
+ });
+ readable.on('error', (err)=>{
+ if (isAbortError(err)) {
+ finished.resolve();
+ return;
+ }
+ res.destroy(err);
+ finished.resolve();
+ });
+ await finished.promise;
+ } catch (err) {
+ if (isAbortError(err)) return;
+ throw Object.defineProperty(new Error('failed to pipe response', {
+ cause: err
+ }), "__NEXT_ERROR_CODE", {
+ value: "E180",
+ enumerable: false,
+ configurable: true
+ });
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/render-result.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>RenderResult
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [middleware] (ecmascript)");
+;
+;
+;
+function isNodeReadable(value) {
+ return value !== null && typeof value === 'object' && typeof value.pipe === 'function' && typeof value.on === 'function' && !(value instanceof ReadableStream);
+}
+class RenderResult {
+ static #_ = /**
+ * A render result that represents an empty response. This is used to
+ * represent a response that was not found or was already sent.
+ */ this.EMPTY = new RenderResult(null, {
+ metadata: {},
+ contentType: null
+ });
+ /**
+ * Creates a new RenderResult instance from a static response.
+ *
+ * @param value the static response value
+ * @param contentType the content type of the response
+ * @returns a new RenderResult instance
+ */ static fromStatic(value, contentType) {
+ return new RenderResult(value, {
+ metadata: {},
+ contentType
+ });
+ }
+ constructor(response, { contentType, waitUntil, metadata }){
+ this.response = response;
+ this.contentType = contentType;
+ this.metadata = metadata;
+ this.waitUntil = waitUntil;
+ }
+ assignMetadata(metadata) {
+ Object.assign(this.metadata, metadata);
+ }
+ /**
+ * Returns true if the response is null. It can be null if the response was
+ * not found or was already sent.
+ */ get isNull() {
+ return this.response === null;
+ }
+ /**
+ * Returns false if the response is a string. It can be a string if the page
+ * was prerendered. If it's not, then it was generated dynamically.
+ */ get isDynamic() {
+ return typeof this.response !== 'string';
+ }
+ toUnchunkedString(stream = false) {
+ if (this.response === null) {
+ // If the response is null, return an empty string. This behavior is
+ // intentional as we're now providing the `RenderResult.EMPTY` value.
+ return '';
+ }
+ if (typeof this.response !== 'string') {
+ if (!stream) {
+ throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["InvariantError"]('dynamic responses cannot be unchunked. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
+ value: "E732",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["streamToString"])(this.readable);
+ }
+ return this.response;
+ }
+ /**
+ * Returns a readable stream of the response.
+ */ get readable() {
+ if (this.response === null) {
+ // If the response is null, return an empty stream. This behavior is
+ // intentional as we're now providing the `RenderResult.EMPTY` value.
+ return new ReadableStream({
+ start (controller) {
+ controller.close();
+ }
+ });
+ }
+ if (typeof this.response === 'string') {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["streamFromString"])(this.response);
+ }
+ if (Buffer.isBuffer(this.response)) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response);
+ }
+ // If the response is an array of streams, then chain them together.
+ if (Array.isArray(this.response)) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["chainStreams"])(...this.response);
+ }
+ if (isNodeReadable(this.response)) {
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ else {
+ let Readable;
+ if ("TURBOPACK compile-time truthy", 1) {
+ Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable;
+ } else //TURBOPACK unreachable
+ ;
+ return Readable.toWeb(this.response);
+ }
+ }
+ return this.response;
+ }
+ /**
+ * Coerces the response to an array of streams. This will convert the response
+ * to an array of streams if it is not already one.
+ *
+ * @returns An array of streams
+ */ coerce() {
+ if (this.response === null) {
+ // If the response is null, return an empty stream. This behavior is
+ // intentional as we're now providing the `RenderResult.EMPTY` value.
+ return [];
+ }
+ if (typeof this.response === 'string') {
+ return [
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["streamFromString"])(this.response)
+ ];
+ } else if (Array.isArray(this.response)) {
+ return this.response;
+ } else if (Buffer.isBuffer(this.response)) {
+ return [
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response)
+ ];
+ } else if (isNodeReadable(this.response)) {
+ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
+ ;
+ else {
+ let Readable;
+ if ("TURBOPACK compile-time truthy", 1) {
+ Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable;
+ } else //TURBOPACK unreachable
+ ;
+ return [
+ Readable.toWeb(this.response)
+ ];
+ }
+ } else {
+ return [
+ this.response
+ ];
+ }
+ }
+ /**
+ * Pipes the response through a transform stream. This converts the response
+ * to a single readable stream (chaining if needed) and pipes it through the
+ * provided transform.
+ *
+ * @param transform The transform stream to pipe through
+ */ pipeThrough(transform) {
+ this.response = this.readable.pipeThrough(transform);
+ }
+ /**
+ * Unshifts a new stream to the response. This will convert the response to an
+ * array of streams if it is not already one and will add the new stream to
+ * the start of the array. When this response is piped, all of the streams
+ * will be piped one after the other.
+ *
+ * @param readable The new stream to unshift
+ */ unshift(readable) {
+ // Coerce the response to an array of streams.
+ this.response = this.coerce();
+ // Add the new stream to the start of the array.
+ this.response.unshift(readable);
+ }
+ /**
+ * Chains a new stream to the response. This will convert the response to an
+ * array of streams if it is not already one and will add the new stream to
+ * the end. When this response is piped, all of the streams will be piped
+ * one after the other.
+ *
+ * @param readable The new stream to chain
+ */ push(readable) {
+ // Coerce the response to an array of streams.
+ this.response = this.coerce();
+ // Add the new stream to the end of the array.
+ this.response.push(readable);
+ }
+ /**
+ * Pipes the response to a writable stream. This will close/cancel the
+ * writable stream if an error is encountered. If this doesn't throw, then
+ * the writable stream will be closed or aborted.
+ *
+ * @param writable Writable stream to pipe the response to
+ */ async pipeTo(writable) {
+ try {
+ await this.readable.pipeTo(writable, {
+ // We want to close the writable stream ourselves so that we can wait
+ // for the waitUntil promise to resolve before closing it. If an error
+ // is encountered, we'll abort the writable stream if we swallowed the
+ // error.
+ preventClose: true
+ });
+ // If there is a waitUntil promise, wait for it to resolve before
+ // closing the writable stream.
+ if (this.waitUntil) await this.waitUntil;
+ // Close the writable stream.
+ await writable.close();
+ } catch (err) {
+ // If this is an abort error, we should abort the writable stream (as we
+ // took ownership of it when we started piping). We don't need to re-throw
+ // because we handled the error.
+ if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isAbortError"])(err)) {
+ // Abort the writable stream if an error is encountered.
+ await writable.abort(err);
+ return;
+ }
+ // We're not aborting the writer here as when this method throws it's not
+ // clear as to how so the caller should assume it's their responsibility
+ // to clean up the writer.
+ throw err;
+ }
+ }
+ /**
+ * Pipes the response to a node response. This will close/cancel the node
+ * response if an error is encountered.
+ *
+ * @param res
+ */ async pipeToNodeResponse(res) {
+ if (this.response !== null && typeof this.response !== 'string' && !Buffer.isBuffer(this.response) && !Array.isArray(this.response) && isNodeReadable(this.response)) {
+ await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pipeNodeReadableToNodeResponse"])(this.response, res, this.waitUntil);
+ return;
+ }
+ await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(this.readable, res, this.waitUntil);
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/request-meta.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules
+__turbopack_context__.s([
+ "NEXT_REQUEST_META",
+ ()=>NEXT_REQUEST_META,
+ "addRequestMeta",
+ ()=>addRequestMeta,
+ "getRequestMeta",
+ ()=>getRequestMeta,
+ "removeRequestMeta",
+ ()=>removeRequestMeta,
+ "setRequestMeta",
+ ()=>setRequestMeta
+]);
+const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta');
+function getRequestMeta(req, key) {
+ const meta = req[NEXT_REQUEST_META] || {};
+ return typeof key === 'string' ? meta[key] : meta;
+}
+function setRequestMeta(req, meta) {
+ req[NEXT_REQUEST_META] = meta;
+ return meta;
+}
+function addRequestMeta(request, key, value) {
+ const meta = getRequestMeta(request);
+ meta[key] = value;
+ return setRequestMeta(request, meta);
+}
+function removeRequestMeta(request, key) {
+ const meta = getRequestMeta(request);
+ delete meta[key];
+ return setRequestMeta(request, meta);
+}
+}),
+"[project]/node_modules/next/dist/esm/server/response-cache/index.js [middleware] (ecmascript) ", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "default",
+ ()=>ResponseCache
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/batcher.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/build/output/log.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+/**
+ * Parses an environment variable as a positive integer, returning the fallback
+ * if the value is missing, not a number, or not positive.
+ */ function parsePositiveInt(envValue, fallback) {
+ if (!envValue) return fallback;
+ const parsed = parseInt(envValue, 10);
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
+}
+/**
+ * Default TTL (in milliseconds) for minimal mode response cache entries.
+ * Used for cache hit validation as a fallback for providers that don't
+ * send the x-invocation-id header yet.
+ *
+ * 10 seconds chosen because:
+ * - Long enough to dedupe rapid successive requests (e.g., page + data)
+ * - Short enough to not serve stale data across unrelated requests
+ *
+ * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.
+ */ const DEFAULT_TTL_MS = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL, 10000);
+/**
+ * Default maximum number of entries in the response cache.
+ * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.
+ */ const DEFAULT_MAX_SIZE = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE, 150);
+/**
+ * Separator used in compound cache keys to join pathname and invocationID.
+ * Using null byte (\0) since it cannot appear in valid URL paths or UUIDs.
+ */ const KEY_SEPARATOR = '\0';
+/**
+ * Sentinel value used for TTL-based cache entries (when invocationID is undefined).
+ * Chosen to be a clearly reserved marker for internal cache keys.
+ */ const TTL_SENTINEL = '__ttl_sentinel__';
+/**
+ * Creates a compound cache key from pathname and invocationID.
+ */ function createCacheKey(pathname, invocationID) {
+ return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`;
+}
+/**
+ * Extracts the invocationID from a compound cache key.
+ * Returns undefined if the key used TTL_SENTINEL.
+ */ function extractInvocationID(compoundKey) {
+ const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR);
+ if (separatorIndex === -1) return undefined;
+ const invocationID = compoundKey.slice(separatorIndex + 1);
+ return invocationID === TTL_SENTINEL ? undefined : invocationID;
+}
+;
+class ResponseCache {
+ constructor(minimal_mode, maxSize = DEFAULT_MAX_SIZE, ttl = DEFAULT_TTL_MS){
+ this.getBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["Batcher"].create({
+ // Ensure on-demand revalidate doesn't block normal requests, it should be
+ // safe to run an on-demand revalidate for the same key as a normal request.
+ cacheKeyFn: ({ key, isOnDemandRevalidate })=>`${key}-${isOnDemandRevalidate ? '1' : '0'}`,
+ // We wait to do any async work until after we've added our promise to
+ // `pendingResponses` to ensure that any any other calls will reuse the
+ // same promise until we've fully finished our work.
+ schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["scheduleOnNextTick"]
+ });
+ this.revalidateBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["Batcher"].create({
+ // We wait to do any async work until after we've added our promise to
+ // `pendingResponses` to ensure that any any other calls will reuse the
+ // same promise until we've fully finished our work.
+ schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["scheduleOnNextTick"]
+ });
+ /**
+ * Set of invocation IDs that have had cache entries evicted.
+ * Used to detect when the cache size may be too small.
+ * Bounded to prevent memory growth.
+ */ this.evictedInvocationIDs = new Set();
+ this.minimal_mode = minimal_mode;
+ this.maxSize = maxSize;
+ this.ttl = ttl;
+ // Create the LRU cache with eviction tracking
+ this.cache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["LRUCache"](maxSize, undefined, (compoundKey)=>{
+ const invocationID = extractInvocationID(compoundKey);
+ if (invocationID) {
+ // Bound to 100 entries to prevent unbounded memory growth.
+ // FIFO eviction is acceptable here because:
+ // 1. Invocations are short-lived (single request lifecycle), so older
+ // invocations are unlikely to still be active after 100 newer ones
+ // 2. This warning mechanism is best-effort for developer guidance—
+ // missing occasional eviction warnings doesn't affect correctness
+ // 3. If a long-running invocation is somehow evicted and then has
+ // another cache entry evicted, it will simply be re-added
+ if (this.evictedInvocationIDs.size >= 100) {
+ const first = this.evictedInvocationIDs.values().next().value;
+ if (first) this.evictedInvocationIDs.delete(first);
+ }
+ this.evictedInvocationIDs.add(invocationID);
+ }
+ });
+ }
+ /**
+ * Gets the response cache entry for the given key.
+ *
+ * @param key - The key to get the response cache entry for.
+ * @param responseGenerator - The response generator to use to generate the response cache entry.
+ * @param context - The context for the get request.
+ * @returns The response cache entry.
+ */ async get(key, responseGenerator, context) {
+ // If there is no key for the cache, we can't possibly look this up in the
+ // cache so just return the result of the response generator.
+ if (!key) {
+ return responseGenerator({
+ hasResolved: false,
+ previousCacheEntry: null
+ });
+ }
+ // Check minimal mode cache before doing any other work.
+ if (this.minimal_mode) {
+ const cacheKey = createCacheKey(key, context.invocationID);
+ const cachedItem = this.cache.get(cacheKey);
+ if (cachedItem) {
+ // With invocationID: exact match found - always a hit
+ // With TTL mode: must check expiration
+ if (context.invocationID !== undefined) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry);
+ }
+ // TTL mode: check expiration
+ const now = Date.now();
+ if (cachedItem.expiresAt > now) {
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry);
+ }
+ // TTL expired - clean up
+ this.cache.remove(cacheKey);
+ }
+ // Warn if this invocation had entries evicted - indicates cache may be too small.
+ if (context.invocationID && this.evictedInvocationIDs.has(context.invocationID)) {
+ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["warnOnce"])(`Response cache entry was evicted for invocation ${context.invocationID}. ` + `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`);
+ }
+ }
+ const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, routeKind, invocationID } = context;
+ const response = await this.getBatcher.batch({
+ key,
+ isOnDemandRevalidate
+ }, ({ resolve })=>{
+ const promise = this.handleGet(key, responseGenerator, {
+ incrementalCache,
+ isOnDemandRevalidate,
+ isFallback,
+ isRoutePPREnabled,
+ isPrefetch,
+ routeKind,
+ invocationID
+ }, resolve);
+ // We need to ensure background revalidates are passed to waitUntil.
+ if (waitUntil) waitUntil(promise);
+ return promise;
+ });
+ if (this.minimal_mode && (response == null ? void 0 : response.cacheControl)) {
+ const cacheKey = createCacheKey(key, invocationID);
+ this.cache.set(cacheKey, {
+ entry: response,
+ expiresAt: Date.now() + this.ttl
+ });
+ }
+ return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(response);
+ }
+ /**
+ * Handles the get request for the response cache.
+ *
+ * @param key - The key to get the response cache entry for.
+ * @param responseGenerator - The response generator to use to generate the response cache entry.
+ * @param context - The context for the get request.
+ * @param resolve - The resolve function to use to resolve the response cache entry.
+ * @returns The response cache entry.
+ */ async handleGet(key, responseGenerator, context, resolve) {
+ let previousIncrementalCacheEntry = null;
+ let resolved = false;
+ try {
+ // Get the previous cache entry if not in minimal mode
+ previousIncrementalCacheEntry = !this.minimal_mode ? await context.incrementalCache.get(key, {
+ kind: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["routeKindToIncrementalCacheKind"])(context.routeKind),
+ isRoutePPREnabled: context.isRoutePPREnabled,
+ isFallback: context.isFallback
+ }) : null;
+ // `isStale === -1` signals that the entry is past its `expire` (either
+ // via an expired tag or, with `cacheLife({ expire })`, past the route's
+ // expire time in the prerender manifest). In that case we must NOT
+ // early-resolve with the stale value — instead we fall through to a
+ // blocking revalidation so the response returned to the user is fresh.
+ if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate && previousIncrementalCacheEntry.isStale !== -1) {
+ resolve(previousIncrementalCacheEntry);
+ resolved = true;
+ if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {
+ // The cached value is still valid, so we don't need to update it yet.
+ return previousIncrementalCacheEntry;
+ }
+ }
+ // Revalidate the cache entry.
+ //
+ // A prefetch request that missed must run its own response generator
+ // rather than joining an in-flight revalidation through the batcher. A
+ // background revalidation may be regenerating the concrete (non-fallback)
+ // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by
+ // an earlier prefetch sub-request. Joining it would serve that concrete
+ // result to the prefetch instead of the fallback shell, and which segment
+ // wins would depend purely on request timing. Running the generator
+ // directly lets every prefetch segment take the same fallback-shell path,
+ // independent of any concurrent background upgrade.
+ const incrementalResponseCacheEntry = context.isPrefetch && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved);
+ // Handle null response
+ if (!incrementalResponseCacheEntry) {
+ // Remove the cache item if it was set so we don't use it again.
+ if (this.minimal_mode) {
+ const cacheKey = createCacheKey(key, context.invocationID);
+ this.cache.remove(cacheKey);
+ }
+ return null;
+ }
+ // Resolve for on-demand revalidation or if not already resolved
+ if (context.isOnDemandRevalidate && !resolved) {
+ return incrementalResponseCacheEntry;
+ }
+ return incrementalResponseCacheEntry;
+ } catch (err) {
+ // If we've already resolved the cache entry, we can't reject as we
+ // already resolved the cache entry so log the error here.
+ if (resolved) {
+ console.error(err);
+ return null;
+ }
+ throw err;
+ }
+ }
+ /**
+ * Revalidates the cache entry for the given key.
+ *
+ * @param key - The key to revalidate the cache entry for.
+ * @param incrementalCache - The incremental cache to use to revalidate the cache entry.
+ * @param isRoutePPREnabled - Whether the route is PPR enabled.
+ * @param isFallback - Whether the route is a fallback.
+ * @param responseGenerator - The response generator to use to generate the response cache entry.
+ * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.
+ * @param hasResolved - Whether the response has been resolved.
+ * @param waitUntil - Optional function to register background work.
+ * @param invocationID - The invocation ID for cache key scoping.
+ * @returns The revalidated cache entry.
+ */ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil) {
+ return this.revalidateBatcher.batch(key, ()=>{
+ const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved);
+ // We need to ensure background revalidates are passed to waitUntil.
+ if (waitUntil) waitUntil(promise);
+ return promise;
+ });
+ }
+ async handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved) {
+ try {
+ // Generate the response cache entry using the response generator.
+ const responseCacheEntry = await responseGenerator({
+ hasResolved,
+ previousCacheEntry: previousIncrementalCacheEntry,
+ isRevalidating: true
+ });
+ if (!responseCacheEntry) {
+ return null;
+ }
+ // Convert the response cache entry to an incremental response cache entry.
+ const incrementalResponseCacheEntry = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["fromResponseCacheEntry"])({
+ ...responseCacheEntry,
+ isMiss: !previousIncrementalCacheEntry
+ });
+ // We want to persist the result only if it has a cache control value
+ // defined. The minimal mode LRU write is handled in get() so that
+ // every caller — including batched invocations — populates the cache.
+ if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {
+ await incrementalCache.set(key, incrementalResponseCacheEntry.value, {
+ cacheControl: incrementalResponseCacheEntry.cacheControl,
+ isRoutePPREnabled,
+ isFallback
+ });
+ }
+ return incrementalResponseCacheEntry;
+ } catch (err) {
+ // When a path is erroring we automatically re-set the existing cache
+ // with new revalidate and expire times to prevent non-stop retrying.
+ if (previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.cacheControl) {
+ const revalidate = Math.min(Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3), 30);
+ const expire = previousIncrementalCacheEntry.cacheControl.expire === undefined ? undefined : Math.max(revalidate + 3, previousIncrementalCacheEntry.cacheControl.expire);
+ await incrementalCache.set(key, previousIncrementalCacheEntry.value, {
+ cacheControl: {
+ revalidate: revalidate,
+ expire: expire
+ },
+ isRoutePPREnabled,
+ isFallback
+ });
+ }
+ // We haven't resolved yet, so let's throw to indicate an error.
+ throw err;
+ }
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/response-cache/types.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "CachedRouteKind",
+ ()=>CachedRouteKind,
+ "IncrementalCacheKind",
+ ()=>IncrementalCacheKind
+]);
+var CachedRouteKind = /*#__PURE__*/ function(CachedRouteKind) {
+ CachedRouteKind["APP_PAGE"] = "APP_PAGE";
+ CachedRouteKind["APP_ROUTE"] = "APP_ROUTE";
+ CachedRouteKind["PAGES"] = "PAGES";
+ CachedRouteKind["FETCH"] = "FETCH";
+ CachedRouteKind["REDIRECT"] = "REDIRECT";
+ CachedRouteKind["IMAGE"] = "IMAGE";
+ return CachedRouteKind;
+}({});
+var IncrementalCacheKind = /*#__PURE__*/ function(IncrementalCacheKind) {
+ IncrementalCacheKind["APP_PAGE"] = "APP_PAGE";
+ IncrementalCacheKind["APP_ROUTE"] = "APP_ROUTE";
+ IncrementalCacheKind["PAGES"] = "PAGES";
+ IncrementalCacheKind["FETCH"] = "FETCH";
+ IncrementalCacheKind["IMAGE"] = "IMAGE";
+ return IncrementalCacheKind;
+}({});
+}),
+"[project]/node_modules/next/dist/esm/server/response-cache/utils.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "fromResponseCacheEntry",
+ ()=>fromResponseCacheEntry,
+ "routeKindToIncrementalCacheKind",
+ ()=>routeKindToIncrementalCacheKind,
+ "toResponseCacheEntry",
+ ()=>toResponseCacheEntry
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)");
+;
+;
+;
+;
+async function fromResponseCacheEntry(cacheEntry) {
+ var _cacheEntry_value, _cacheEntry_value1;
+ return {
+ ...cacheEntry,
+ value: ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
+ html: await cacheEntry.value.html.toUnchunkedString(true),
+ pageData: cacheEntry.value.pageData,
+ headers: cacheEntry.value.headers,
+ status: cacheEntry.value.status
+ } : ((_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE,
+ html: await cacheEntry.value.html.toUnchunkedString(true),
+ postponed: cacheEntry.value.postponed,
+ rscData: cacheEntry.value.rscData,
+ headers: cacheEntry.value.headers,
+ status: cacheEntry.value.status,
+ segmentData: cacheEntry.value.segmentData
+ } : cacheEntry.value
+ };
+}
+async function toResponseCacheEntry(response) {
+ var _response_value, _response_value1;
+ if (!response) return null;
+ return {
+ isMiss: response.isMiss,
+ isStale: response.isStale,
+ cacheControl: response.cacheControl,
+ isFallback: response.isFallback,
+ value: ((_response_value = response.value) == null ? void 0 : _response_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
+ html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]),
+ pageData: response.value.pageData,
+ headers: response.value.headers,
+ status: response.value.status
+ } : ((_response_value1 = response.value) == null ? void 0 : _response_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? {
+ kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE,
+ html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]),
+ rscData: response.value.rscData,
+ headers: response.value.headers,
+ status: response.value.status,
+ postponed: response.value.postponed,
+ segmentData: response.value.segmentData
+ } : response.value
+ };
+}
+function routeKindToIncrementalCacheKind(routeKind) {
+ switch(routeKind){
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RouteKind"].PAGES:
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES;
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE:
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE;
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RouteKind"].IMAGE:
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE;
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE:
+ return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE;
+ case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RouteKind"].PAGES_API:
+ // Pages Router API routes are not cached in the incremental cache.
+ throw Object.defineProperty(new Error(`Unexpected route kind ${routeKind}`), "__NEXT_ERROR_CODE", {
+ value: "E64",
+ enumerable: false,
+ configurable: true
+ });
+ default:
+ return routeKind;
+ }
+}
+}),
+"[project]/node_modules/next/dist/esm/server/revalidation-utils.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "executeRevalidates",
+ ()=>executeRevalidates,
+ "withExecuteRevalidates",
+ ()=>withExecuteRevalidates
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$handlers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/use-cache/handlers.js [middleware] (ecmascript)");
+;
+async function withExecuteRevalidates(store, callback) {
+ if (!store) {
+ return callback();
+ }
+ // If we executed any revalidates during the request, then we don't want to execute them again.
+ // save the state so we can check if anything changed after we're done running callbacks.
+ const savedRevalidationState = cloneRevalidationState(store);
+ try {
+ return await callback();
+ } finally{
+ // Check if we have any new revalidates, and if so, wait until they are all resolved.
+ const newRevalidates = diffRevalidationState(savedRevalidationState, cloneRevalidationState(store));
+ await executeRevalidates(store, newRevalidates);
+ }
+}
+function cloneRevalidationState(store) {
+ return {
+ pendingRevalidatedTags: store.pendingRevalidatedTags ? [
+ ...store.pendingRevalidatedTags
+ ] : [],
+ pendingRevalidates: {
+ ...store.pendingRevalidates
+ },
+ pendingRevalidateWrites: store.pendingRevalidateWrites ? [
+ ...store.pendingRevalidateWrites
+ ] : []
+ };
+}
+function diffRevalidationState(prev, curr) {
+ const prevTagsWithProfile = new Set(prev.pendingRevalidatedTags.map((item)=>{
+ const profileKey = typeof item.profile === 'object' ? JSON.stringify(item.profile) : item.profile || '';
+ return `${item.tag}:${profileKey}`;
+ }));
+ const prevRevalidateWrites = new Set(prev.pendingRevalidateWrites);
+ return {
+ pendingRevalidatedTags: curr.pendingRevalidatedTags.filter((item)=>{
+ const profileKey = typeof item.profile === 'object' ? JSON.stringify(item.profile) : item.profile || '';
+ return !prevTagsWithProfile.has(`${item.tag}:${profileKey}`);
+ }),
+ pendingRevalidates: Object.fromEntries(Object.entries(curr.pendingRevalidates).filter(([key])=>!(key in prev.pendingRevalidates))),
+ pendingRevalidateWrites: curr.pendingRevalidateWrites.filter((promise)=>!prevRevalidateWrites.has(promise))
+ };
+}
+async function revalidateTags(tagsWithProfile, incrementalCache, workStore) {
+ if (tagsWithProfile.length === 0) {
+ return;
+ }
+ const handlers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$handlers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getCacheHandlers"])();
+ const promises = [];
+ // Group tags by profile for batch processing
+ const tagsByProfile = new Map();
+ for (const item of tagsWithProfile){
+ const profile = item.profile;
+ // Find existing profile by comparing values
+ let existingKey = undefined;
+ for (const [key] of tagsByProfile){
+ if (typeof key === 'string' && typeof profile === 'string' && key === profile) {
+ existingKey = key;
+ break;
+ }
+ if (typeof key === 'object' && typeof profile === 'object' && JSON.stringify(key) === JSON.stringify(profile)) {
+ existingKey = key;
+ break;
+ }
+ if (key === profile) {
+ existingKey = key;
+ break;
+ }
+ }
+ const profileKey = existingKey || profile;
+ if (!tagsByProfile.has(profileKey)) {
+ tagsByProfile.set(profileKey, []);
+ }
+ tagsByProfile.get(profileKey).push(item.tag);
+ }
+ // Process each profile group
+ for (const [profile, tagsForProfile] of tagsByProfile){
+ // Look up the cache profile from workStore if available
+ let durations;
+ if (profile) {
+ let cacheLife;
+ if (typeof profile === 'object') {
+ // Profile is already a cacheLife configuration object
+ cacheLife = profile;
+ } else if (typeof profile === 'string') {
+ // Profile is a string key, look it up in workStore
+ cacheLife = workStore == null ? void 0 : workStore.cacheLifeProfiles[profile];
+ if (!cacheLife) {
+ throw Object.defineProperty(new Error(`Invalid profile provided "${profile}" must be configured under cacheLife in next.config or be "max"`), "__NEXT_ERROR_CODE", {
+ value: "E873",
+ enumerable: false,
+ configurable: true
+ });
+ }
+ }
+ if (cacheLife) {
+ durations = {
+ expire: cacheLife.expire
+ };
+ }
+ }
+ // If profile is not found and not 'max', durations will be undefined
+ // which will trigger immediate expiration in the cache handler
+ for (const handler of handlers || []){
+ if (profile) {
+ promises.push(handler.updateTags == null ? void 0 : handler.updateTags.call(handler, tagsForProfile, durations));
+ } else {
+ promises.push(handler.updateTags == null ? void 0 : handler.updateTags.call(handler, tagsForProfile));
+ }
+ }
+ if (incrementalCache) {
+ promises.push(incrementalCache.revalidateTag(tagsForProfile, durations));
+ }
+ }
+ await Promise.all(promises);
+}
+function executeRevalidates(workStore, state) {
+ const promises = [];
+ const pendingRevalidatedTags = (state == null ? void 0 : state.pendingRevalidatedTags) ?? workStore.pendingRevalidatedTags ?? [];
+ if (pendingRevalidatedTags.length > 0) {
+ promises.push(revalidateTags(pendingRevalidatedTags, workStore.incrementalCache, workStore));
+ }
+ const pendingRevalidates = Object.values((state == null ? void 0 : state.pendingRevalidates) ?? workStore.pendingRevalidates ?? {});
+ promises.push(...pendingRevalidates);
+ const pendingRevalidateWrites = (state == null ? void 0 : state.pendingRevalidateWrites) ?? workStore.pendingRevalidateWrites ?? [];
+ promises.push(...pendingRevalidateWrites);
+ if (promises.length === 0) {
+ return false;
+ }
+ return Promise.all(promises).then(()=>undefined);
+}
+}),
+"[project]/node_modules/next/dist/esm/server/route-kind.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "RouteKind",
+ ()=>RouteKind
+]);
+var RouteKind = /*#__PURE__*/ function(RouteKind) {
+ /**
+ * `PAGES` represents all the React pages that are under `pages/`.
+ */ RouteKind["PAGES"] = "PAGES";
+ /**
+ * `PAGES_API` represents all the API routes under `pages/api/`.
+ */ RouteKind["PAGES_API"] = "PAGES_API";
+ /**
+ * `APP_PAGE` represents all the React pages that are under `app/` with the
+ * filename of `page.{j,t}s{,x}`.
+ */ RouteKind["APP_PAGE"] = "APP_PAGE";
+ /**
+ * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the
+ * filename of `route.{j,t}s{,x}`.
+ */ RouteKind["APP_ROUTE"] = "APP_ROUTE";
+ /**
+ * `IMAGE` represents all the images that are generated by `next/image`.
+ */ RouteKind["IMAGE"] = "IMAGE";
+ return RouteKind;
+}({});
+}),
+"[project]/node_modules/next/dist/esm/server/server-utils.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "getPreviouslyRevalidatedTags",
+ ()=>getPreviouslyRevalidatedTags,
+ "getServerUtils",
+ ()=>getServerUtils,
+ "interpolateDynamicPath",
+ ()=>interpolateDynamicPath,
+ "normalizeCdnUrl",
+ ()=>normalizeCdnUrl,
+ "normalizeDynamicRouteParams",
+ ()=>normalizeDynamicRouteParams
+]);
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$match$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-match.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$regex$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-regex.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$matcher$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-matcher.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$prepare$2d$destination$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/prepare-destination.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$decode$2d$query$2d$path$2d$parameter$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/decode-query-path-parameter.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/url.js [middleware] (ecmascript)");
+var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-url.js [middleware] (ecmascript)");
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+;
+function filterInternalQuery(query, paramKeys) {
+ // this is used to pass query information in rewrites
+ // but should not be exposed in final query
+ delete query['nextInternalLocale'];
+ for(const key in query){
+ const isNextQueryPrefix = key !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"] && key.startsWith(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"]);
+ const isNextInterceptionMarkerPrefix = key !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"] && key.startsWith(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"]);
+ if (isNextQueryPrefix || isNextInterceptionMarkerPrefix || paramKeys.includes(key)) {
+ delete query[key];
+ }
+ }
+}
+function normalizeCdnUrl(req, paramKeys) {
+ // make sure to normalize req.url from CDNs to strip dynamic and rewrite
+ // params from the query which are added during routing
+ const _parsedUrl = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseReqUrl"])(req.url);
+ // we can't normalize if we can't parse
+ if (!_parsedUrl) {
+ return req.url;
+ }
+ delete _parsedUrl.search;
+ filterInternalQuery(_parsedUrl.query, paramKeys);
+ req.url = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["formatUrl"])(_parsedUrl);
+}
+function interpolateDynamicPath(pathname, params, defaultRouteRegex) {
+ if (!defaultRouteRegex) return pathname;
+ for (const param of Object.keys(defaultRouteRegex.groups)){
+ const { optional, repeat } = defaultRouteRegex.groups[param];
+ let builtParam = `[${repeat ? '...' : ''}${param}]`;
+ if (optional) {
+ builtParam = `[${builtParam}]`;
+ }
+ let paramValue;
+ const value = params[param];
+ if (Array.isArray(value)) {
+ paramValue = value.map((v)=>v && encodeURIComponent(v)).join('/');
+ } else if (value) {
+ paramValue = encodeURIComponent(value);
+ } else {
+ paramValue = '';
+ }
+ if (paramValue || optional) {
+ pathname = pathname.replaceAll(builtParam, paramValue);
+ }
+ }
+ return pathname;
+}
+function normalizeDynamicRouteParams(query, defaultRouteRegex, defaultRouteMatches, ignoreMissingOptional) {
+ const isDefaultValueMatch = (candidateValue, defaultValue)=>{
+ if (!candidateValue) {
+ return false;
+ }
+ let normalizedCandidateValue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeRscURL"])(candidateValue);
+ for(let i = 0; i < 3; i++){
+ if (normalizedCandidateValue === defaultValue) {
+ return true;
+ }
+ const decodedCandidateValue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$decode$2d$query$2d$path$2d$parameter$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decodeQueryPathParameter"])(normalizedCandidateValue);
+ if (decodedCandidateValue === normalizedCandidateValue) {
+ break;
+ }
+ normalizedCandidateValue = decodedCandidateValue;
+ }
+ return false;
+ };
+ let hasValidParams = true;
+ let params = {};
+ for (const key of Object.keys(defaultRouteRegex.groups)){
+ let value = query[key];
+ if (typeof value === 'string') {
+ value = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeRscURL"])(value);
+ } else if (Array.isArray(value)) {
+ value = value.map(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeRscURL"]);
+ }
+ // if the value matches the default value we can't rely
+ // on the parsed params, this is used to signal if we need
+ // to parse x-now-route-matches or not
+ const defaultValue = defaultRouteMatches[key];
+ const isOptional = defaultRouteRegex.groups[key].optional;
+ const isDefaultValue = Array.isArray(defaultValue) ? defaultValue.some((defaultVal)=>{
+ return Array.isArray(value) ? value.some((val)=>isDefaultValueMatch(val, defaultVal)) : isDefaultValueMatch(value, defaultVal);
+ }) : Array.isArray(value) ? value.some((val)=>isDefaultValueMatch(val, defaultValue)) : isDefaultValueMatch(value, defaultValue);
+ if (isDefaultValue || typeof value === 'undefined' && !(isOptional && ignoreMissingOptional)) {
+ return {
+ params: {},
+ hasValidParams: false
+ };
+ }
+ // non-provided optional values should be undefined so normalize
+ // them to undefined
+ if (isOptional && (!value || Array.isArray(value) && value.length === 1 && // fallback optional catch-all SSG pages have
+ // [[...paramName]] for the root path on Vercel
+ (value[0] === 'index' || value[0] === `[[...${key}]]`) || value === 'index' || value === `[[...${key}]]`)) {
+ value = undefined;
+ delete query[key];
+ }
+ // query values from the proxy aren't already split into arrays
+ // so make sure to normalize catch-all values
+ if (value && typeof value === 'string' && defaultRouteRegex.groups[key].repeat) {
+ value = value.split('/');
+ }
+ if (value) {
+ params[key] = value;
+ }
+ }
+ return {
+ params,
+ hasValidParams
+ };
+}
+function getServerUtils({ page, i18n, basePath, rewrites, pageIsDynamic, trailingSlash, caseSensitive }) {
+ let defaultRouteRegex;
+ let dynamicRouteMatcher;
+ let defaultRouteMatches;
+ if (pageIsDynamic) {
+ defaultRouteRegex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$regex$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getNamedRouteRegex"])(page, {
+ prefixRouteKeys: false
+ });
+ dynamicRouteMatcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$matcher$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getRouteMatcher"])(defaultRouteRegex);
+ defaultRouteMatches = dynamicRouteMatcher(page);
+ }
+ function handleRewrites(req, parsedUrl) {
+ // Here we deep clone the parsedUrl to avoid mutating the original. We also
+ // cast this to a mutable type so we can mutate it within this scope.
+ const rewrittenParsedUrl = structuredClone(parsedUrl);
+ const rewriteParams = {};
+ let fsPathname = rewrittenParsedUrl.pathname;
+ const matchesPage = ()=>{
+ const fsPathnameNoSlash = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(fsPathname || '');
+ return fsPathnameNoSlash === (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(page) || (dynamicRouteMatcher == null ? void 0 : dynamicRouteMatcher(fsPathnameNoSlash));
+ };
+ const checkRewrite = (rewrite)=>{
+ const matcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$match$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getPathMatch"])(rewrite.source + (trailingSlash ? '(/)?' : ''), {
+ removeUnnamedParams: true,
+ strict: true,
+ sensitive: !!caseSensitive
+ });
+ if (!rewrittenParsedUrl.pathname) return false;
+ let params = matcher(rewrittenParsedUrl.pathname);
+ if ((rewrite.has || rewrite.missing) && params) {
+ const hasParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$prepare$2d$destination$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["matchHas"])(req, rewrittenParsedUrl.query, rewrite.has, rewrite.missing);
+ if (hasParams) {
+ Object.assign(params, hasParams);
+ } else {
+ params = false;
+ }
+ }
+ if (params) {
+ const { parsedDestination, destQuery } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$prepare$2d$destination$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["prepareDestination"])({
+ appendParamsToQuery: true,
+ destination: rewrite.destination,
+ params: params,
+ query: rewrittenParsedUrl.query
+ });
+ // if the rewrite destination is external break rewrite chain
+ if (parsedDestination.protocol) {
+ return true;
+ }
+ Object.assign(rewriteParams, destQuery, params);
+ Object.assign(rewrittenParsedUrl.query, parsedDestination.query);
+ delete parsedDestination.query;
+ Object.assign(rewrittenParsedUrl, parsedDestination);
+ fsPathname = rewrittenParsedUrl.pathname;
+ if (!fsPathname) return false;
+ if (basePath) {
+ fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/';
+ }
+ if (i18n) {
+ const result = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(fsPathname, i18n.locales);
+ fsPathname = result.pathname;
+ rewrittenParsedUrl.query.nextInternalLocale = result.detectedLocale || params.nextInternalLocale;
+ }
+ if (fsPathname === page) {
+ return true;
+ }
+ if (pageIsDynamic && dynamicRouteMatcher) {
+ const dynamicParams = dynamicRouteMatcher(fsPathname);
+ if (dynamicParams) {
+ rewrittenParsedUrl.query = {
+ ...rewrittenParsedUrl.query,
+ ...dynamicParams
+ };
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+ for (const rewrite of rewrites.beforeFiles || []){
+ checkRewrite(rewrite);
+ }
+ if (fsPathname !== page) {
+ let finished = false;
+ for (const rewrite of rewrites.afterFiles || []){
+ finished = checkRewrite(rewrite);
+ if (finished) break;
+ }
+ if (!finished && !matchesPage()) {
+ for (const rewrite of rewrites.fallback || []){
+ finished = checkRewrite(rewrite);
+ if (finished) break;
+ }
+ }
+ }
+ return {
+ rewriteParams,
+ rewrittenParsedUrl
+ };
+ }
+ function getParamsFromRouteMatches(routeMatchesHeader) {
+ // If we don't have a default route regex, we can't get params from route
+ // matches
+ if (!defaultRouteRegex) return null;
+ const { groups, routeKeys } = defaultRouteRegex;
+ const matcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$matcher$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getRouteMatcher"])({
+ re: {
+ // Simulate a RegExp match from the \`req.url\` input
+ exec: (str)=>{
+ // Normalize all the prefixed query params.
+ const obj = Object.fromEntries(new URLSearchParams(str));
+ for (const [key, value] of Object.entries(obj)){
+ const normalizedKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeNextQueryParam"])(key);
+ if (!normalizedKey) continue;
+ obj[normalizedKey] = value;
+ delete obj[key];
+ }
+ // Use all the named route keys.
+ const result = {};
+ for (const keyName of Object.keys(routeKeys)){
+ const paramName = routeKeys[keyName];
+ // If this param name is not a valid parameter name, then skip it.
+ if (!paramName) continue;
+ const group = groups[paramName];
+ const value = obj[keyName];
+ // When we're missing a required param, we can't match the route.
+ if (!group.optional && !value) return null;
+ result[group.pos] = value;
+ }
+ return result;
+ }
+ },
+ groups
+ });
+ const routeMatches = matcher(routeMatchesHeader);
+ if (!routeMatches) return null;
+ return routeMatches;
+ }
+ function normalizeQueryParams(query, routeParamKeys) {
+ // this is used to pass query information in rewrites
+ // but should not be exposed in final query
+ delete query['nextInternalLocale'];
+ for (const [key, value] of Object.entries(query)){
+ const normalizedKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeNextQueryParam"])(key);
+ if (!normalizedKey) continue;
+ // Remove the prefixed key from the query params because we want
+ // to consume it for the dynamic route matcher.
+ delete query[key];
+ routeParamKeys.add(normalizedKey);
+ if (typeof value === 'undefined') continue;
+ query[normalizedKey] = Array.isArray(value) ? value.map((v)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$decode$2d$query$2d$path$2d$parameter$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decodeQueryPathParameter"])(v)) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$decode$2d$query$2d$path$2d$parameter$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["decodeQueryPathParameter"])(value);
+ }
+ }
+ return {
+ handleRewrites,
+ defaultRouteRegex,
+ dynamicRouteMatcher,
+ defaultRouteMatches,
+ normalizeQueryParams,
+ getParamsFromRouteMatches,
+ /**
+ * Normalize dynamic route params.
+ *
+ * @param query - The query params to normalize.
+ * @param ignoreMissingOptional - Whether to ignore missing optional params.
+ * @returns The normalized params and whether they are valid.
+ */ normalizeDynamicRouteParams: (query, ignoreMissingOptional)=>{
+ if (!defaultRouteRegex || !defaultRouteMatches) {
+ return {
+ params: {},
+ hasValidParams: false
+ };
+ }
+ return normalizeDynamicRouteParams(query, defaultRouteRegex, defaultRouteMatches, ignoreMissingOptional);
+ },
+ normalizeCdnUrl: (req, paramKeys)=>normalizeCdnUrl(req, paramKeys),
+ interpolateDynamicPath: (pathname, params)=>interpolateDynamicPath(pathname, params, defaultRouteRegex),
+ filterInternalQuery: (query, paramKeys)=>filterInternalQuery(query, paramKeys)
+ };
+}
+function getPreviouslyRevalidatedTags(headers, previewModeId) {
+ return typeof headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_REVALIDATED_TAGS_HEADER"]] === 'string' && headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER"]] === previewModeId ? headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NEXT_CACHE_REVALIDATED_TAGS_HEADER"]].split(',') : [];
+}
+}),
+"[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [middleware] (ecmascript)", ((__turbopack_context__) => {
+"use strict";
+
+__turbopack_context__.s([
+ "ENCODED_TAGS",
+ ()=>ENCODED_TAGS
+]);
+const ENCODED_TAGS = {
+ // opening tags do not have the closing `>` since they can contain other attributes such as ``
+ OPENING: {
+ //
+ HEAD: new Uint8Array([
+ 60,
+ 47,
+ 104,
+ 101,
+ 97,
+ 100,
+ 62
+ ]),
+ //
+ BODY: new Uint8Array([
+ 60,
+ 47,
+ 98,
+ 111,
+ 100,
+ 121,
+ 62
+ ]),
+ //
+ HTML: new Uint8Array([
+ 60,
+ 47,
+ 104,
+ 116,
+ 109,
+ 108,
+ 62
+ ]),
+ //