From 5c6048759c6b20833d0b85d421d32568872327a6 Mon Sep 17 00:00:00 2001 From: luulam Date: Thu, 27 Aug 2026 13:58:23 +0700 Subject: [PATCH] fix(db): add missing apiKeys columns + restore ApiExplorerModal export - schema.js: add createdAt/allowedModels to apiKeys, bump SCHEMA_VERSION 3->4 - shared/components/index.js: restore ApiExplorerModal barrel export (was replaced by TagInput) - combos: tag support, repo + api + page updates --- bun.lock | 1407 + src/app/(dashboard)/dashboard/combos/page.js | 154 +- .../dashboard/providers/[id]/page.js | 2 +- src/app/api/combos/[id]/route.js | 30 +- src/app/api/combos/route.js | 23 +- src/lib/db/index.js | 6 +- src/lib/db/migrate.js | 4 +- src/lib/db/migrations/003-combo-tags.js | 12 + src/lib/db/migrations/index.js | 6 +- src/lib/db/repos/combosRepo.js | 11 +- src/lib/db/schema.js | 4 +- src/shared/components/TagInput.js | 83 + src/shared/components/index.js | 1 + tmp/9r-smoke-dist/dev/build-manifest.json | 15 + tmp/9r-smoke-dist/dev/cache/.rscinfo | 1 + tmp/9r-smoke-dist/dev/cache/config.json | 7 + .../cache/turbopack/v16.3.1-3d32eb87/CURRENT | 1 + .../dev/fallback-build-manifest.json | 15 + tmp/9r-smoke-dist/dev/lock | 1 + .../dev/logs/next-development.log | 8 + .../better-sqlite3-90e2652d1716b047 | 1 + .../dev/node_modules/sql.js-59d66b30daa0a8d2 | 1 + tmp/9r-smoke-dist/dev/package.json | 3 + tmp/9r-smoke-dist/dev/prerender-manifest.json | 11 + tmp/9r-smoke-dist/dev/routes-manifest.json | 1 + .../dev/server/app-paths-manifest.json | 1 + .../[externals]_bun_sqlite_1aygq0y._.js | 8 + .../[externals]_bun_sqlite_1aygq0y._.js.map | 5 + .../[externals]_bun_sqlite_1xsgfj6._.js | 12 + .../[externals]_bun_sqlite_1xsgfj6._.js.map | 5 + .../chunks/[root-of-the-server]__16a8kp1._.js | 275 + .../[root-of-the-server]__16a8kp1._.js.map | 7 + .../chunks/[root-of-the-server]__18b1j7k._.js | 3778 +++ .../[root-of-the-server]__18b1j7k._.js.map | 29 + .../chunks/[root-of-the-server]__1_pghx_._.js | 324 + .../[root-of-the-server]__1_pghx_._.js.map | 7 + .../chunks/[root-of-the-server]__1mtjwcs._.js | 12402 ++++++++ .../[root-of-the-server]__1mtjwcs._.js.map | 141 + .../dev/server/chunks/[turbopack]_runtime.js | 1814 ++ .../server/chunks/[turbopack]_runtime.js.map | 14 + .../dev/server/chunks/_0khumf3._.js | 113 + .../dev/server/chunks/_0khumf3._.js.map | 5 + .../server/chunks/node_modules_0j-238y._.js | 25749 ++++++++++++++++ .../chunks/node_modules_0j-238y._.js.map | 201 + .../open-sse_providers_pricing_078i37x.js | 2013 ++ .../open-sse_providers_pricing_078i37x.js.map | 6 + .../chunks/src_instrumentation_0_51q1v.js | 18 + .../chunks/src_instrumentation_0_51q1v.js.map | 6 + .../src_lib_consoleLogBuffer_1rh8dli.js | 12 + .../src_lib_consoleLogBuffer_1rh8dli.js.map | 5 + .../dev/server/chunks/src_lib_db_04-1tv7._.js | 275 + .../server/chunks/src_lib_db_04-1tv7._.js.map | 7 + .../dev/server/chunks/src_lib_db_1jtxnmd._.js | 741 + .../server/chunks/src_lib_db_1jtxnmd._.js.map | 12 + .../dev/server/chunks/src_lib_db_1rn2qxk._.js | 295 + .../server/chunks/src_lib_db_1rn2qxk._.js.map | 7 + .../chunks/src_shared_utils_apiKey_0dq53wj.js | 82 + .../src_shared_utils_apiKey_0dq53wj.js.map | 6 + .../dev/server/edge/chunks/_06oe804._.js | 40 + .../dev/server/edge/chunks/_06oe804._.js.map | 7 + ...uild_templates_edge-wrapper_0xnf3d4.js.map | 13 + ...sm_build_templates_edge-wrapper_0xnf3d4.js | 2320 ++ .../dev/server/instrumentation.js | 5 + .../dev/server/instrumentation.js.map | 5 + .../instrumentation/middleware-manifest.json | 12 + .../interception-route-rewrite-manifest.js | 1 + .../dev/server/middleware-build-manifest.js | 15 + .../dev/server/middleware-manifest.json | 6 + tmp/9r-smoke-dist/dev/server/middleware.js | 6 + .../dev/server/middleware.js.map | 5 + .../middleware/middleware-manifest.json | 6 + .../dev/server/next-font-manifest.js | 1 + .../dev/server/next-font-manifest.json | 6 + .../dev/server/pages-manifest.json | 1 + .../dev/server/server-reference-manifest.js | 1 + .../dev/server/server-reference-manifest.json | 5 + .../dev/static/development/_buildManifest.js | 44 + .../development/_clientMiddlewareManifest.js | 1 + .../dev/static/development/_ssgManifest.js | 1 + tmp/9r-smoke-dist/dev/trace | 3 + tmp/9r-smoke-dist/dev/types/routes.d.ts | 55 + xd:/browser | 1 + 82 files changed, 52711 insertions(+), 32 deletions(-) create mode 100644 bun.lock create mode 100644 src/lib/db/migrations/003-combo-tags.js create mode 100644 src/shared/components/TagInput.js create mode 100644 tmp/9r-smoke-dist/dev/build-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/cache/.rscinfo create mode 100644 tmp/9r-smoke-dist/dev/cache/config.json create mode 100644 tmp/9r-smoke-dist/dev/cache/turbopack/v16.3.1-3d32eb87/CURRENT create mode 100644 tmp/9r-smoke-dist/dev/fallback-build-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/lock create mode 100644 tmp/9r-smoke-dist/dev/logs/next-development.log create mode 120000 tmp/9r-smoke-dist/dev/node_modules/better-sqlite3-90e2652d1716b047 create mode 120000 tmp/9r-smoke-dist/dev/node_modules/sql.js-59d66b30daa0a8d2 create mode 100644 tmp/9r-smoke-dist/dev/package.json create mode 100644 tmp/9r-smoke-dist/dev/prerender-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/routes-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/app-paths-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1aygq0y._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[externals]_bun_sqlite_1xsgfj6._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__16a8kp1._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__18b1j7k._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1_pghx_._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[root-of-the-server]__1mtjwcs._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/[turbopack]_runtime.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/_0khumf3._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/node_modules_0j-238y._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/node_modules_0j-238y._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/open-sse_providers_pricing_078i37x.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/open-sse_providers_pricing_078i37x.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_instrumentation_0_51q1v.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_instrumentation_0_51q1v.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_consoleLogBuffer_1rh8dli.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_consoleLogBuffer_1rh8dli.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_db_04-1tv7._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_db_04-1tv7._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_db_1jtxnmd._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_db_1jtxnmd._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_db_1rn2qxk._.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_lib_db_1rn2qxk._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_shared_utils_apiKey_0dq53wj.js create mode 100644 tmp/9r-smoke-dist/dev/server/chunks/src_shared_utils_apiKey_0dq53wj.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/edge/chunks/_06oe804._.js create mode 100644 tmp/9r-smoke-dist/dev/server/edge/chunks/_06oe804._.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_0xnf3d4.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_0xnf3d4.js create mode 100644 tmp/9r-smoke-dist/dev/server/instrumentation.js create mode 100644 tmp/9r-smoke-dist/dev/server/instrumentation.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/instrumentation/middleware-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/interception-route-rewrite-manifest.js create mode 100644 tmp/9r-smoke-dist/dev/server/middleware-build-manifest.js create mode 100644 tmp/9r-smoke-dist/dev/server/middleware-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/middleware.js create mode 100644 tmp/9r-smoke-dist/dev/server/middleware.js.map create mode 100644 tmp/9r-smoke-dist/dev/server/middleware/middleware-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/next-font-manifest.js create mode 100644 tmp/9r-smoke-dist/dev/server/next-font-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/pages-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/server/server-reference-manifest.js create mode 100644 tmp/9r-smoke-dist/dev/server/server-reference-manifest.json create mode 100644 tmp/9r-smoke-dist/dev/static/development/_buildManifest.js create mode 100644 tmp/9r-smoke-dist/dev/static/development/_clientMiddlewareManifest.js create mode 100644 tmp/9r-smoke-dist/dev/static/development/_ssgManifest.js create mode 100644 tmp/9r-smoke-dist/dev/trace create mode 100644 tmp/9r-smoke-dist/dev/types/routes.d.ts create mode 100644 xd:/browser 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":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;;;;AAEA,SAASA,WAAWC,GAAG;IACtB,IAAI,CAACA,OAAO,OAAOA,QAAQ,UAAU,OAAO;IAC5C,IAAIA,IAAIC,MAAM,IAAI,GAAG,OAAOD,IAAIE,MAAM,CAAC,KAAK;IAC5C,OAAOF,IAAIG,KAAK,CAAC,GAAG,KAAK;AAC1B;AAEA,MAAMC,qBAAqB,KAAK;AAChC,MAAMC,WAAW;AACjB,MAAMC,oBAAoB,KAAK;AAC/B,MAAMC,YAAY;IACjB,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;AACR;AAEA,gDAAgD;AAChD,IAAI,CAAC,yDAAOC,gBAAgB,EAC3B,yDAAOA,gBAAgB,GAAG;IAAEC,SAAS,CAAC;IAAGC,WAAW,CAAC;AAAE;AACxD,IAAI,CAAC,yDAAOC,kBAAkB,EAC7B,yDAAOA,kBAAkB,GAAG;IAAEC,UAAU;IAAIC,IAAI;AAAE;AACnD,IAAI,CAAC,yDAAOC,aAAa,EAAE;IAC1B,yDAAOA,aAAa,GAAG,IAAI,qHAAY;IACvC,yDAAOA,aAAa,CAACC,eAAe,CAAC;AACtC;AACA,IAAI,CAAC,yDAAOC,cAAc,EAAE,yDAAOA,cAAc,GAAG,CAAC;AACrD,IAAI,CAAC,yDAAOC,WAAW,EAAE,yDAAOA,WAAW,GAAG;IAAEC,OAAO,EAAE;IAAEC,aAAa;AAAM;AAC9E,IAAI,CAAC,yDAAOC,mBAAmB,EAC9B,yDAAOA,mBAAmB,GAAG;IAAEC,KAAK,CAAC;IAAGR,IAAI;AAAE;AAC/C,IAAI,CAAC,yDAAOS,gBAAgB,EAC3B,yDAAOA,gBAAgB,GAAG;IAAEC,SAAS;IAAMC,QAAQ;AAAK;AAEzD,MAAMC,kBAAkB,yDAAOjB,gBAAgB;AAC/C,MAAMkB,oBAAoB,yDAAOf,kBAAkB;AACnD,MAAMgB,gBAAgB,yDAAOX,cAAc;AAC3C,MAAMY,aAAa,yDAAOX,WAAW;AACrC,MAAMY,YAAY,yDAAOT,mBAAmB;AAC5C,MAAMU,kBAAkB,yDAAOR,gBAAgB;AAExC,MAAMS,eAAe,yDAAOjB,aAAa;AAEhD,SAASkB,mBAAmBC,KAAK,EAAEC,UAAU,GAAG;IAC/C,MAAMlC,MAAMiC,UAAU,WAAW,WAAW;IAC5C,IAAIH,eAAe,CAAC9B,IAAI,EAAE;IAC1B8B,eAAe,CAAC9B,IAAI,GAAGmC,WAAW;QACjCL,eAAe,CAAC9B,IAAI,GAAG;QACvB+B,aAAaK,IAAI,CAACH;IACnB,GAAGC;IACHJ,eAAe,CAAC9B,IAAI,EAAEqC;AACvB;AAEA,SAASC,gBAAgBC,SAAS;IACjC,MAAMC,IAAID,YAAY,IAAIE,KAAKF,aAAa,IAAIE;IAChD,OAAO,GAAGD,EAAEE,WAAW,GAAG,CAAC,EAAEC,OAAOH,EAAEI,QAAQ,KAAK,GAAGC,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAEF,OAAOH,EAAEM,OAAO,IAAID,QAAQ,CAAC,GAAG,MAAM;AACjH;AAEA,SAASE,aAAaC,MAAM,EAAEhD,GAAG,EAAEiD,MAAM;IACxC,IAAI,CAACD,MAAM,CAAChD,IAAI,EACfgD,MAAM,CAAChD,IAAI,GAAG;QACbkD,UAAU;QACVC,cAAc;QACdC,kBAAkB;QAClBC,cAAc;QACdC,MAAM;IACP;IACDN,MAAM,CAAChD,IAAI,CAACkD,QAAQ,IAAID,OAAOC,QAAQ,IAAI;IAC3CF,MAAM,CAAChD,IAAI,CAACmD,YAAY,IAAIF,OAAOE,YAAY,IAAI;IACnDH,MAAM,CAAChD,IAAI,CAACoD,gBAAgB,IAAIH,OAAOG,gBAAgB,IAAI;IAC3DJ,MAAM,CAAChD,IAAI,CAACqD,YAAY,IAAIJ,OAAOI,YAAY,IAAI;IACnDL,MAAM,CAAChD,IAAI,CAACsD,IAAI,IAAIL,OAAOK,IAAI,IAAI;IACnC,IAAIL,OAAOM,IAAI,EAAEC,OAAOC,MAAM,CAACT,MAAM,CAAChD,IAAI,EAAEiD,OAAOM,IAAI;AACxD;AAEA,SAASG,oBAAoBC,GAAG,EAAEC,KAAK;IACtC,MAAMT,eACLS,MAAMC,MAAM,EAAEC,iBAAiBF,MAAMC,MAAM,EAAEE,gBAAgB;IAC9D,MAAMX,mBACLQ,MAAMC,MAAM,EAAEG,qBAAqBJ,MAAMC,MAAM,EAAEI,iBAAiB;IACnE,MAAMZ,eACLO,MAAMC,MAAM,EAAEK,iBAAiBN,MAAMC,MAAM,EAAEM,2BAA2B;IACzE,MAAMb,OAAOM,MAAMN,IAAI,IAAI;IAC3B,MAAMc,OAAO;QAAEjB;QAAcC;QAAkBC;QAAcC;IAAK;IAElEK,IAAIT,QAAQ,GAAG,CAACS,IAAIT,QAAQ,IAAI,CAAC,IAAI;IACrCS,IAAIR,YAAY,GAAG,CAACQ,IAAIR,YAAY,IAAI,CAAC,IAAIA;IAC7CQ,IAAIP,gBAAgB,GAAG,CAACO,IAAIP,gBAAgB,IAAI,CAAC,IAAIA;IACrDO,IAAIN,YAAY,GAAG,CAACM,IAAIN,YAAY,IAAI,CAAC,IAAIA;IAC7CM,IAAIL,IAAI,GAAG,CAACK,IAAIL,IAAI,IAAI,CAAC,IAAIA;IAE7BK,IAAIU,UAAU,KAAK,CAAC;IACpBV,IAAIlD,OAAO,KAAK,CAAC;IACjBkD,IAAIjD,SAAS,KAAK,CAAC;IACnBiD,IAAIW,QAAQ,KAAK,CAAC;IAClBX,IAAIY,UAAU,KAAK,CAAC;IAEpB,IAAIX,MAAMhD,QAAQ,EAAEmC,aAAaY,IAAIU,UAAU,EAAET,MAAMhD,QAAQ,EAAEwD;IAEjE,MAAMI,WAAWZ,MAAMhD,QAAQ,GAC5B,GAAGgD,MAAMa,KAAK,CAAC,CAAC,EAAEb,MAAMhD,QAAQ,EAAE,GAClCgD,MAAMa,KAAK;IACd1B,aAAaY,IAAIlD,OAAO,EAAE+D,UAAU;QACnC,GAAGJ,IAAI;QACPb,MAAM;YAAEmB,UAAUd,MAAMa,KAAK;YAAE7D,UAAUgD,MAAMhD,QAAQ;QAAC;IACzD;IAEA,IAAIgD,MAAMe,YAAY,EAAE;QACvB5B,aAAaY,IAAIjD,SAAS,EAAEkD,MAAMe,YAAY,EAAE;YAC/C,GAAGP,IAAI;YACPb,MAAM;gBAAEmB,UAAUd,MAAMa,KAAK;gBAAE7D,UAAUgD,MAAMhD,QAAQ;YAAC;QACzD;IACD;IAEA,MAAMgE,YACLhB,MAAMiB,MAAM,IAAI,OAAOjB,MAAMiB,MAAM,KAAK,WACrCjB,MAAMiB,MAAM,GACZ;IACJ,MAAMC,aAAa,GAAGF,UAAU,CAAC,EAAEhB,MAAMa,KAAK,CAAC,CAAC,EAAEb,MAAMhD,QAAQ,IAAI,WAAW;IAC/EmC,aAAaY,IAAIW,QAAQ,EAAEQ,YAAY;QACtC,GAAGV,IAAI;QACPb,MAAM;YACLmB,UAAUd,MAAMa,KAAK;YACrB7D,UAAUgD,MAAMhD,QAAQ;YACxBiE,QAAQjB,MAAMiB,MAAM,IAAI;QACzB;IACD;IAEA,MAAME,WAAWnB,MAAMmB,QAAQ,IAAI;IACnC,MAAMC,QAAQ,GAAGD,SAAS,CAAC,EAAEnB,MAAMa,KAAK,CAAC,CAAC,EAAEb,MAAMhD,QAAQ,IAAI,WAAW;IACzEmC,aAAaY,IAAIY,UAAU,EAAES,OAAO;QACnC,GAAGZ,IAAI;QACPb,MAAM;YAAEwB;YAAUL,UAAUd,MAAMa,KAAK;YAAE7D,UAAUgD,MAAMhD,QAAQ;QAAC;IACnE;AACD;AAEA,SAASqE,WAAWrB,KAAK;IACxBhC,WAAWV,KAAK,CAACgE,IAAI,CAACtB;IACtB,IAAIhC,WAAWV,KAAK,CAACjB,MAAM,GAAGI,UAAU;QACvCuB,WAAWV,KAAK,GAAGU,WAAWV,KAAK,CAACf,KAAK,CAAC,CAACE;IAC5C;AACD;AAEA,eAAe8E;IACd,IAAI1C,KAAK2C,GAAG,KAAKvD,UAAUhB,EAAE,GAAGP,mBAAmB,OAAOuB,UAAUR,GAAG;IACvE,IAAI;QACH,MAAM,EAAEgE,sBAAsB,EAAE,GAAG;QACnC,MAAMC,MAAM,MAAMD;QAClB,MAAMhE,MAAM,CAAC;QACb,KAAK,MAAMkE,KAAKD,IAAKjE,GAAG,CAACkE,EAAEC,EAAE,CAAC,GAAGD,EAAEE,IAAI,IAAIF,EAAEG,KAAK,IAAIH,EAAEC,EAAE;QAC1D3D,UAAUR,GAAG,GAAGA;QAChBQ,UAAUhB,EAAE,GAAG4B,KAAK2C,GAAG;IACxB,EAAE,OAAM,CAAC;IACT,OAAOvD,UAAUR,GAAG;AACrB;AAEA,eAAesE;IACd,IAAI/D,WAAWT,WAAW,EAAE;IAC5BS,WAAWT,WAAW,GAAG;IACzB,IAAI;QACH,MAAMyE,KAAK,MAAM,IAAA,wIAAU;QAC3B,MAAMC,OAAOD,GAAGN,GAAG,CAClB,CAAC,kIAAkI,CAAC,EACpI;YAACjF;SAAS;QAEXuB,WAAWV,KAAK,GAAG2E,KAAKC,OAAO,GAAGzE,GAAG,CAAC,CAAC0E,IAAM,CAAC;gBAC7CxD,WAAWwD,EAAExD,SAAS;gBACtB3B,UAAUmF,EAAEnF,QAAQ;gBACpB6D,OAAOsB,EAAEtB,KAAK;gBACdE,cAAcoB,EAAEpB,YAAY;gBAC5BE,QAAQkB,EAAElB,MAAM;gBAChBE,UAAUgB,EAAEhB,QAAQ;gBACpBzB,MAAMyC,EAAEzC,IAAI;gBACZ0C,QAAQD,EAAEC,MAAM;gBAChBnC,QAAQ,IAAA,mJAAS,EAACkC,EAAElC,MAAM,EAAE,CAAC;YAC9B,CAAC;IACF,EAAE,OAAM,CAAC;AACV;AAEA,eAAeoC,cAAcrF,QAAQ,EAAE6D,KAAK,EAAEZ,MAAM;IACnD,IAAI,CAACA,UAAU,CAACjD,YAAY,CAAC6D,OAAO,OAAO;IAC3C,IAAI;QACH,MAAM,EAAEyB,kBAAkB,EAAE,GAAG;QAC/B,MAAMC,UAAU,MAAMD,mBAAmBtF,UAAU6D;QACnD,IAAI,CAAC0B,SAAS,OAAO;QAErB,yEAAyE;QACzE,oEAAoE;QACpE,0DAA0D;QAC1D,MAAM,EAAEC,uBAAuB,EAAE,GAAG;QAGpC,OAAOA,wBAAwBvC,QAAQsC;IACxC,EAAE,OAAOE,GAAG;QACXC,QAAQC,KAAK,CAAC,2BAA2BF;QACzC,OAAO;IACR;AACD;AAEO,SAASG,oBACf/B,KAAK,EACL7D,QAAQ,EACR+D,YAAY,EACZ8B,OAAO,EACPF,QAAQ,KAAK;IAEb,MAAM/B,WAAW5D,WAAW,GAAG6D,MAAM,EAAE,EAAE7D,SAAS,CAAC,CAAC,GAAG6D;IACvD,MAAMiC,WAAW,GAAG/B,aAAa,CAAC,EAAEH,UAAU;IAE9C,IAAI,CAAC/C,gBAAgBhB,OAAO,CAAC+D,SAAS,EAAE/C,gBAAgBhB,OAAO,CAAC+D,SAAS,GAAG;IAC5E/C,gBAAgBhB,OAAO,CAAC+D,SAAS,GAAGmC,KAAKC,GAAG,CAC3C,GACAnF,gBAAgBhB,OAAO,CAAC+D,SAAS,GAAG,CAACiC,UAAU,IAAI,CAAC,CAAC;IAEtD,IAAIhF,gBAAgBhB,OAAO,CAAC+D,SAAS,KAAK,GACzC,OAAO/C,gBAAgBhB,OAAO,CAAC+D,SAAS;IAEzC,IAAIG,cAAc;QACjB,IAAI,CAAClD,gBAAgBf,SAAS,CAACiE,aAAa,EAC3ClD,gBAAgBf,SAAS,CAACiE,aAAa,GAAG,CAAC;QAC5C,IAAI,CAAClD,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS,EACrD/C,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS,GAAG;QACrD/C,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS,GAAGmC,KAAKC,GAAG,CAC3D,GACAnF,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS,GAAG,CAACiC,UAAU,IAAI,CAAC,CAAC;QAEtE,IAAIhF,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS,KAAK,GAAG;YAC5D,OAAO/C,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS;YACxD,IAAIhB,OAAOqD,IAAI,CAACpF,gBAAgBf,SAAS,CAACiE,aAAa,EAAE1E,MAAM,KAAK,GAAG;gBACtE,OAAOwB,gBAAgBf,SAAS,CAACiE,aAAa;YAC/C;QACD;IACD;IAEA,IAAI8B,SAAS;QACZK,aAAanF,aAAa,CAAC+E,SAAS;QACpC/E,aAAa,CAAC+E,SAAS,GAAGvE,WAAW;YACpC,OAAOR,aAAa,CAAC+E,SAAS;YAC9B,IAAIjF,gBAAgBhB,OAAO,CAAC+D,SAAS,GAAG,GACvC/C,gBAAgBhB,OAAO,CAAC+D,SAAS,GAAG;YACrC,IACCG,gBACAlD,gBAAgBf,SAAS,CAACiE,aAAa,EAAE,CAACH,SAAS,GAAG,GACrD;gBACD/C,gBAAgBf,SAAS,CAACiE,aAAa,CAACH,SAAS,GAAG;YACrD;YACAxC,mBAAmB;QACpB,GAAG5B;IACJ,OAAO;QACN0G,aAAanF,aAAa,CAAC+E,SAAS;QACpC,OAAO/E,aAAa,CAAC+E,SAAS;IAC/B;IAEA,IAAI,CAACD,WAAWF,SAAS3F,UAAU;QAClCc,kBAAkBd,QAAQ,GAAGA,SAASmG,WAAW;QACjDrF,kBAAkBb,EAAE,GAAG4B,KAAK2C,GAAG;IAChC;IAEA,mFAAmF;IACnFpD,mBAAmB;AACpB;AAEO,eAAegF;IACrB,MAAMC,iBAAiB,EAAE;IACzB,MAAMC,gBAAgB,MAAM/B;IAE5B,KAAK,MAAM,CAACR,cAAcwC,OAAO,IAAI3D,OAAO4D,OAAO,CAClD3F,gBAAgBf,SAAS,EACvB;QACF,KAAK,MAAM,CAAC8D,UAAU6C,MAAM,IAAI7D,OAAO4D,OAAO,CAACD,QAAS;YACvD,IAAIE,QAAQ,GAAG;gBACd,MAAMC,cACLJ,aAAa,CAACvC,aAAa,IAC3B,CAAC,QAAQ,EAAEA,aAAaxE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBACzC,MAAMoH,QAAQ/C,SAAS+C,KAAK,CAAC;gBAC7BN,eAAe/B,IAAI,CAAC;oBACnBT,OAAO8C,QAAQA,KAAK,CAAC,EAAE,GAAG/C;oBAC1B5D,UAAU2G,QAAQA,KAAK,CAAC,EAAE,GAAG;oBAC7BC,SAASF;oBACTD;gBACD;YACD;QACD;IACD;IAEA,MAAM1B;IACN,MAAM8B,OAAO,IAAIC;IACjB,MAAMC,iBAAiB;WAAI/F,WAAWV,KAAK;KAAC,CAC1C0G,IAAI,CAAC,CAACC,GAAGC,IAAM,IAAIrF,KAAKqF,EAAEvF,SAAS,IAAI,IAAIE,KAAKoF,EAAEtF,SAAS,GAC3DlB,GAAG,CAAC,CAACgF;QACL,MAAM0B,IAAI1B,EAAExC,MAAM,IAAI,CAAC;QACvB,OAAO;YACNtB,WAAW8D,EAAE9D,SAAS;YACtBkC,OAAO4B,EAAE5B,KAAK;YACd7D,UAAUyF,EAAEzF,QAAQ,IAAI;YACxBuC,cAAc4E,EAAEjE,aAAa,IAAIiE,EAAEhE,YAAY,IAAI;YACnDX,kBAAkB2E,EAAE/D,iBAAiB,IAAI+D,EAAE9D,aAAa,IAAI;YAC5D+B,QAAQK,EAAEL,MAAM,IAAI;QACrB;IACD,GACCgC,MAAM,CAAC,CAAC3B;QACR,IAAIA,EAAElD,YAAY,KAAK,KAAKkD,EAAEjD,gBAAgB,KAAK,GAAG,OAAO;QAC7D,MAAM6E,SAAS5B,EAAE9D,SAAS,GAAG8D,EAAE9D,SAAS,CAACpC,KAAK,CAAC,GAAG,MAAM;QACxD,MAAMH,MAAM,GAAGqG,EAAE5B,KAAK,CAAC,CAAC,EAAE4B,EAAEzF,QAAQ,CAAC,CAAC,EAAEyF,EAAElD,YAAY,CAAC,CAAC,EAAEkD,EAAEjD,gBAAgB,CAAC,CAAC,EAAE6E,QAAQ;QACxF,IAAIR,KAAKS,GAAG,CAAClI,MAAM,OAAO;QAC1ByH,KAAKU,GAAG,CAACnI;QACT,OAAO;IACR,GACCG,KAAK,CAAC,GAAG;IAEX,MAAMiI,gBACL3F,KAAK2C,GAAG,KAAK1D,kBAAkBb,EAAE,GAAG,QAAQa,kBAAkBd,QAAQ,GAAG;IAC1E,OAAO;QAAEqG;QAAgBU;QAAgBS;IAAc;AACxD;AAEO,eAAeC,iBAAiBzE,KAAK;IAC3C,IAAI;QACH,MAAMgC,KAAK,MAAM,IAAA,wIAAU;QAE3B,IAAI,CAAChC,MAAMrB,SAAS,EAAEqB,MAAMrB,SAAS,GAAG,IAAIE,OAAO6F,WAAW;QAC9D1E,MAAMN,IAAI,GAAG,MAAM2C,cAAcrC,MAAMhD,QAAQ,EAAEgD,MAAMa,KAAK,EAAEb,MAAMC,MAAM;QAE1E,MAAMA,SAASD,MAAMC,MAAM,IAAI,CAAC;QAChC,MAAMV,eAAeU,OAAOC,aAAa,IAAID,OAAOE,YAAY,IAAI;QACpE,MAAMX,mBACLS,OAAOG,iBAAiB,IAAIH,OAAOI,aAAa,IAAI;QAErD,IAAIsE,WAAW;QAEf,oFAAoF;QACpF,kFAAkF;QAClF3C,GAAG4C,WAAW,CAAC;YACd,MAAMC,WAAW7C,GAAG8C,GAAG,CACtB,CAAC;;;;;;;;iCAQ4B,CAAC,EAC9B;gBACC9E,MAAMrB,SAAS;gBACfqB,MAAMhD,QAAQ,IAAI;gBAClBgD,MAAMa,KAAK,IAAI;gBACfb,MAAMe,YAAY,IAAI;gBACtBf,MAAMiB,MAAM,IAAI;gBAChB1B;gBACAC;aACA;YAGF,IAAIqF,UAAU;gBACb,IAAI,CAACA,SAAS1D,QAAQ,IAAInB,MAAMmB,QAAQ,EAAE;oBACzCa,GAAG+C,GAAG,CAAC,CAAC,iDAAiD,CAAC,EAAE;wBAC3D/E,MAAMmB,QAAQ;wBACd0D,SAASjD,EAAE;qBACX;gBACF;gBACA;YACD;YAEAI,GAAG+C,GAAG,CACL,CAAC,2LAA2L,CAAC,EAC7L;gBACC/E,MAAMrB,SAAS;gBACfqB,MAAMhD,QAAQ,IAAI;gBAClBgD,MAAMa,KAAK,IAAI;gBACfb,MAAMe,YAAY,IAAI;gBACtBf,MAAMiB,MAAM,IAAI;gBAChBjB,MAAMmB,QAAQ,IAAI;gBAClB5B;gBACAC;gBACAQ,MAAMN,IAAI,IAAI;gBACdM,MAAMoC,MAAM,IAAI;gBAChB,IAAA,uJAAa,EAACnC;gBACd,IAAA,uJAAa,EAAC,CAAC;aACf;YAGF,MAAM+E,UAAUtG,gBAAgBsB,MAAMrB,SAAS;YAC/C,MAAMsG,MAAMjD,GAAG8C,GAAG,CAAC,CAAC,6CAA6C,CAAC,EAAE;gBACnEE;aACA;YACD,MAAMjF,MAAMkF,MACT,IAAA,mJAAS,EAACA,IAAIC,IAAI,EAAE,CAAC,KACrB;gBACA5F,UAAU;gBACVC,cAAc;gBACdC,kBAAkB;gBAClBE,MAAM;gBACNe,YAAY,CAAC;gBACb5D,SAAS,CAAC;gBACVC,WAAW,CAAC;gBACZ4D,UAAU,CAAC;gBACXC,YAAY,CAAC;YACd;YACFb,oBAAoBC,KAAKC;YACzBgC,GAAG+C,GAAG,CACL,CAAC,0GAA0G,CAAC,EAC5G;gBAACC;gBAAS,IAAA,uJAAa,EAACjF;aAAK;YAG9B,+CAA+C;YAC/C,MAAMoF,MAAMnD,GAAG8C,GAAG,CACjB,CAAC,2DAA2D,CAAC;YAE9D,MAAMM,OAAO,CAACD,MAAME,SAASF,IAAIG,KAAK,EAAE,MAAM,CAAC,IAAI;YACnDtD,GAAG+C,GAAG,CACL,CAAC,sHAAsH,CAAC,EACxH;gBAAChG,OAAOqG;aAAM;YAEfT,WAAW;QACZ;QAEA,IAAIA,UAAU;YACbtD,WAAWrB;YACX5B,mBAAmB,UAAU;QAC9B;IACD,EAAE,OAAOqE,GAAG;QACXC,QAAQC,KAAK,CAAC,+BAA+BF;IAC9C;AACD;AAEO,eAAe8C,gBAAgBnB,SAAS,CAAC,CAAC;IAChD,MAAMpC,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMwD,QAAQ,EAAE;IAChB,MAAMC,SAAS,EAAE;IAEjB,IAAIrB,OAAOpH,QAAQ,EAAE;QACpBwI,MAAMlE,IAAI,CAAC;QACXmE,OAAOnE,IAAI,CAAC8C,OAAOpH,QAAQ;IAC5B;IACA,IAAIoH,OAAOvD,KAAK,EAAE;QACjB2E,MAAMlE,IAAI,CAAC;QACXmE,OAAOnE,IAAI,CAAC8C,OAAOvD,KAAK;IACzB;IACA,IAAIuD,OAAOsB,SAAS,EAAE;QACrBF,MAAMlE,IAAI,CAAC;QACXmE,OAAOnE,IAAI,CAAC,IAAIzC,KAAKuF,OAAOsB,SAAS,EAAEhB,WAAW;IACnD;IACA,IAAIN,OAAOuB,OAAO,EAAE;QACnBH,MAAMlE,IAAI,CAAC;QACXmE,OAAOnE,IAAI,CAAC,IAAIzC,KAAKuF,OAAOuB,OAAO,EAAEjB,WAAW;IACjD;IAEA,MAAMkB,QAAQJ,MAAMnJ,MAAM,GAAG,CAAC,MAAM,EAAEmJ,MAAMK,IAAI,CAAC,UAAU,GAAG;IAC9D,MAAM5D,OAAOD,GAAGN,GAAG,CAClB,CAAC,0GAA0G,EAAEkE,MAAM,gBAAgB,CAAC,EACpIH;IAGD,OAAOxD,KAAKxE,GAAG,CAAC,CAAC0E,IAAM,CAAC;YACvBxD,WAAWwD,EAAExD,SAAS;YACtB3B,UAAUmF,EAAEnF,QAAQ;YACpB6D,OAAOsB,EAAEtB,KAAK;YACdE,cAAcoB,EAAEpB,YAAY;YAC5B+E,cAAc3J,WAAWgG,EAAElB,MAAM;YACjCE,UAAUgB,EAAEhB,QAAQ;YACpBzB,MAAMyC,EAAEzC,IAAI;YACZ0C,QAAQD,EAAEC,MAAM;YAChBnC,QAAQ,IAAA,mJAAS,EAACkC,EAAElC,MAAM,EAAE,CAAC;QAC9B,CAAC;AACF;AAEA,SAAS8F,gBAAgBC,OAAO,EAAEC,OAAO;IACxC,IAAIA,WAAW,MAAM;QACpB,OAAOD,QAAQtE,GAAG,CAAC,CAAC,oCAAoC,CAAC;IAC1D;IACA,MAAMwE,QAAQ,IAAIrH;IAClB,MAAMsH,SAAS,IAAItH,KAClBqH,MAAMpH,WAAW,IACjBoH,MAAMlH,QAAQ,IACdkH,MAAMhH,OAAO,KAAK+G,UAAU;IAE7B,MAAMG,YAAY,GAAGD,OAAOrH,WAAW,GAAG,CAAC,EAAEC,OAAOoH,OAAOnH,QAAQ,KAAK,GAAGC,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAEF,OAAOoH,OAAOjH,OAAO,IAAID,QAAQ,CAAC,GAAG,MAAM;IAC1I,OAAO+G,QAAQtE,GAAG,CACjB,CAAC,uDAAuD,CAAC,EACzD;QAAC0E;KAAU;AAEb;AAEO,eAAeC,cAAcC,SAAS,KAAK;IACjD,MAAMtE,KAAK,MAAM,IAAA,wIAAU;IAE3B,MAAM,CAAC,EAAEP,sBAAsB,EAAE,EAAE,EAAE8E,UAAU,EAAE,EAAE,EAAEC,gBAAgB,EAAE,CAAC,GACvE,MAAMC,QAAQ/E,GAAG,CAAC;;;;KAIjB;IAEF,IAAIgF,iBAAiB,EAAE;IACvB,IAAI;QACHA,iBAAiB,MAAMjF;IACxB,EAAE,OAAM,CAAC;IACT,MAAM6B,gBAAgB,CAAC;IACvB,KAAK,MAAM3B,KAAK+E,eACfpD,aAAa,CAAC3B,EAAEC,EAAE,CAAC,GAAGD,EAAEE,IAAI,IAAIF,EAAEG,KAAK,IAAIH,EAAEC,EAAE;IAEhD,MAAM+E,sBAAsB,CAAC;IAC7B,IAAI;QACH,MAAMC,QAAQ,MAAMJ;QACpB,KAAK,MAAMK,KAAKD,MACf,IAAIC,EAAEjF,EAAE,IAAIiF,EAAEhF,IAAI,EAAE8E,mBAAmB,CAACE,EAAEjF,EAAE,CAAC,GAAGiF,EAAEhF,IAAI;IACxD,EAAE,OAAM,CAAC;IAET,IAAIiF,aAAa,EAAE;IACnB,IAAI;QACHA,aAAa,MAAMP;IACpB,EAAE,OAAM,CAAC;IACT,MAAMQ,YAAY,CAAC;IACnB,KAAK,MAAMC,KAAKF,WACfC,SAAS,CAACC,EAAE5K,GAAG,CAAC,GAAG;QAAEyF,MAAMmF,EAAEnF,IAAI;QAAED,IAAIoF,EAAEpF,EAAE;QAAEqF,WAAWD,EAAEC,SAAS;IAAC;IAErE,4EAA4E;IAC5E,MAAMC,aAAalF,GAAGN,GAAG,CACxB,CAAC,8FAA8F,CAAC;IAEjG,MAAMmC,OAAO,IAAIC;IACjB,MAAMC,iBAAiBmD,WACrBzJ,GAAG,CAAC,CAAC0E;QACL,MAAMgC,IAAI,IAAA,mJAAS,EAAChC,EAAElC,MAAM,EAAE,CAAC,MAAM,CAAC;QACtC,OAAO;YACNtB,WAAWwD,EAAExD,SAAS;YACtBkC,OAAOsB,EAAEtB,KAAK;YACd7D,UAAUmF,EAAEnF,QAAQ,IAAI;YACxBuC,cAAc4E,EAAEjE,aAAa,IAAIiE,EAAEhE,YAAY,IAAI;YACnDX,kBAAkB2E,EAAE/D,iBAAiB,IAAI+D,EAAE9D,aAAa,IAAI;YAC5DZ,cAAc0E,EAAE7D,aAAa,IAAI6D,EAAE5D,uBAAuB,IAAI;YAC9D6B,QAAQD,EAAEC,MAAM,IAAI;QACrB;IACD,GACCgC,MAAM,CAAC,CAAC3B;QACR,IAAIA,EAAElD,YAAY,KAAK,KAAKkD,EAAEjD,gBAAgB,KAAK,GAAG,OAAO;QAC7D,MAAM6E,SAAS5B,EAAE9D,SAAS,GAAG8D,EAAE9D,SAAS,CAACpC,KAAK,CAAC,GAAG,MAAM;QACxD,MAAMH,MAAM,GAAGqG,EAAE5B,KAAK,CAAC,CAAC,EAAE4B,EAAEzF,QAAQ,CAAC,CAAC,EAAEyF,EAAElD,YAAY,CAAC,CAAC,EAAEkD,EAAEjD,gBAAgB,CAAC,CAAC,EAAE6E,QAAQ;QACxF,IAAIR,KAAKS,GAAG,CAAClI,MAAM,OAAO;QAC1ByH,KAAKU,GAAG,CAACnI;QACT,OAAO;IACR,GACCG,KAAK,CAAC,GAAG;IAEX,MAAM4K,QAAQ;QACbC,eAAe;QACfC,mBAAmB;QACnBC,uBAAuB;QACvBC,mBAAmB;QACnBC,WAAW;QACX/G,YAAY,CAAC;QACb5D,SAAS,CAAC;QACVC,WAAW,CAAC;QACZ4D,UAAU,CAAC;QACXC,YAAY,CAAC;QACb8G,eAAe,EAAE;QACjB9J,SAASE;QACTwF,gBAAgB,EAAE;QAClBU;QACAS,eACC3F,KAAK2C,GAAG,KAAK1D,kBAAkBb,EAAE,GAAG,QACjCa,kBAAkBd,QAAQ,GAC1B;IACL;IAEA,kBAAkB;IAClB,KAAK,MAAM,CAAC+D,cAAcwC,OAAO,IAAI3D,OAAO4D,OAAO,CAClD3F,gBAAgBf,SAAS,EACvB;QACF,KAAK,MAAM,CAAC8D,UAAU6C,MAAM,IAAI7D,OAAO4D,OAAO,CAACD,QAAS;YACvD,IAAIE,QAAQ,GAAG;gBACd,MAAMC,cACLJ,aAAa,CAACvC,aAAa,IAC3B,CAAC,QAAQ,EAAEA,aAAaxE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBACzC,MAAMoH,QAAQ/C,SAAS+C,KAAK,CAAC;gBAC7BwD,MAAM9D,cAAc,CAAC/B,IAAI,CAAC;oBACzBT,OAAO8C,QAAQA,KAAK,CAAC,EAAE,GAAG/C;oBAC1B5D,UAAU2G,QAAQA,KAAK,CAAC,EAAE,GAAG;oBAC7BC,SAASF;oBACTD;gBACD;YACD;QACD;IACD;IAEA,qCAAqC;IACrC,MAAMjC,MAAM,IAAI3C;IAChB,MAAM6I,qBAAqB,IAAI7I,KAC9BkE,KAAK4E,KAAK,CAACnG,IAAIoG,OAAO,KAAK,SAAS;IAErC,MAAMC,gBAAgB,IAAIhJ,KAAK6I,mBAAmBE,OAAO,KAAK,IAAI,KAAK;IACvE,MAAME,YAAY,CAAC;IACnB,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAIA,IAAK;QAC5B,MAAM9K,KAAKyK,mBAAmBE,OAAO,KAAK,CAAC,IAAIG,CAAC,IAAI,KAAK;QACzDD,SAAS,CAAC7K,GAAG,GAAG;YACfqC,UAAU;YACVC,cAAc;YACdC,kBAAkB;YAClBE,MAAM;QACP;QACAyH,MAAMM,aAAa,CAACnG,IAAI,CAACwG,SAAS,CAAC7K,GAAG;IACvC;IACA,MAAM+K,WAAWhG,GAAGN,GAAG,CACtB,CAAC,gHAAgH,CAAC,EAClH;QAACmG,cAAcnD,WAAW;QAAIlD,IAAIkD,WAAW;KAAG;IAEjD,KAAK,MAAMvC,KAAK6F,SAAU;QACzB,MAAMC,KAAK,IAAIpJ,KAAKsD,EAAExD,SAAS,EAAEiJ,OAAO;QACxC,MAAMM,cAAcnF,KAAK4E,KAAK,CAACM,KAAK,SAAS;QAC7C,IAAIH,SAAS,CAACI,YAAY,EAAE;YAC3BJ,SAAS,CAACI,YAAY,CAAC5I,QAAQ;YAC/BwI,SAAS,CAACI,YAAY,CAAC3I,YAAY,IAAI4C,EAAE5C,YAAY,IAAI;YACzDuI,SAAS,CAACI,YAAY,CAAC1I,gBAAgB,IAAI2C,EAAE3C,gBAAgB,IAAI;YACjEsI,SAAS,CAACI,YAAY,CAACxI,IAAI,IAAIyC,EAAEzC,IAAI,IAAI;QAC1C;IACD;IAEA,MAAMyI,kBAAkB7B,WAAW,SAASA,WAAW;IAEvD,IAAI6B,iBAAiB;QACpB,MAAMC,aAAa;YAAE,MAAM;YAAG,OAAO;YAAI,OAAO;QAAG;QACnD,MAAMnC,UAAUmC,UAAU,CAAC9B,OAAO,IAAI;QACtC,MAAM+B,UAAUtC,gBAAgB/D,IAAIiE;QAEpC,KAAK,MAAMqC,MAAMD,QAAS;YACzB,MAAMrD,UAAUsD,GAAGtD,OAAO;YAC1B,MAAMjF,MAAM,IAAA,mJAAS,EAACuI,GAAGpD,IAAI,EAAE,CAAC;YAChCiC,MAAME,iBAAiB,IAAItH,IAAIR,YAAY,IAAI;YAC/C4H,MAAMG,qBAAqB,IAAIvH,IAAIP,gBAAgB,IAAI;YACvD2H,MAAMI,iBAAiB,IAAIxH,IAAIN,YAAY,IAAI;YAC/C0H,MAAMK,SAAS,IAAIzH,IAAIL,IAAI,IAAI;YAE/B,KAAK,MAAM,CAAC6I,MAAMC,EAAE,IAAI5I,OAAO4D,OAAO,CAACzD,IAAIU,UAAU,IAAI,CAAC,GAAI;gBAC7D,IAAI,CAAC0G,MAAM1G,UAAU,CAAC8H,KAAK,EAC1BpB,MAAM1G,UAAU,CAAC8H,KAAK,GAAG;oBACxBjJ,UAAU;oBACVC,cAAc;oBACdC,kBAAkB;oBAClBC,cAAc;oBACdC,MAAM;oBACN+I,UAAUzD;gBACX;gBACDmC,MAAM1G,UAAU,CAAC8H,KAAK,CAACjJ,QAAQ,IAAIkJ,EAAElJ,QAAQ,IAAI;gBACjD6H,MAAM1G,UAAU,CAAC8H,KAAK,CAAChJ,YAAY,IAAIiJ,EAAEjJ,YAAY,IAAI;gBACzD4H,MAAM1G,UAAU,CAAC8H,KAAK,CAAC/I,gBAAgB,IAAIgJ,EAAEhJ,gBAAgB,IAAI;gBACjE2H,MAAM1G,UAAU,CAAC8H,KAAK,CAAC9I,YAAY,IAAI+I,EAAE/I,YAAY,IAAI;gBACzD0H,MAAM1G,UAAU,CAAC8H,KAAK,CAAC7I,IAAI,IAAI8I,EAAE9I,IAAI,IAAI;gBACzC,IAAIsF,UAAU,CAACmC,MAAM1G,UAAU,CAAC8H,KAAK,CAACE,QAAQ,IAAI,EAAE,GACnDtB,MAAM1G,UAAU,CAAC8H,KAAK,CAACE,QAAQ,GAAGzD;YACpC;YAEA,KAAK,MAAM,CAAC0D,IAAIC,EAAE,IAAI/I,OAAO4D,OAAO,CAACzD,IAAIlD,OAAO,IAAI,CAAC,GAAI;gBACxD,MAAMiE,WAAW6H,EAAE7H,QAAQ,IAAI4H,GAAGE,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC/C,MAAM5L,WAAW2L,EAAE3L,QAAQ,IAAI0L,GAAGE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI;gBACnD,MAAMC,WAAW7L,WAAW,GAAG8D,SAAS,EAAE,EAAE9D,SAAS,CAAC,CAAC,GAAG8D;gBAC1D,MAAMgI,sBAAsBnC,mBAAmB,CAAC3J,SAAS,IAAIA;gBAC7D,IAAI,CAACmK,MAAMtK,OAAO,CAACgM,SAAS,EAAE;oBAC7B1B,MAAMtK,OAAO,CAACgM,SAAS,GAAG;wBACzBvJ,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNoB;wBACA9D,UAAU8L;wBACVL,UAAUzD;oBACX;gBACD;gBACAmC,MAAMtK,OAAO,CAACgM,SAAS,CAACvJ,QAAQ,IAAIqJ,EAAErJ,QAAQ,IAAI;gBAClD6H,MAAMtK,OAAO,CAACgM,SAAS,CAACtJ,YAAY,IAAIoJ,EAAEpJ,YAAY,IAAI;gBAC1D4H,MAAMtK,OAAO,CAACgM,SAAS,CAACrJ,gBAAgB,IAAImJ,EAAEnJ,gBAAgB,IAAI;gBAClE2H,MAAMtK,OAAO,CAACgM,SAAS,CAACpJ,YAAY,IAAIkJ,EAAElJ,YAAY,IAAI;gBAC1D0H,MAAMtK,OAAO,CAACgM,SAAS,CAACnJ,IAAI,IAAIiJ,EAAEjJ,IAAI,IAAI;gBAC1C,IAAIsF,UAAU,CAACmC,MAAMtK,OAAO,CAACgM,SAAS,CAACJ,QAAQ,IAAI,EAAE,GACpDtB,MAAMtK,OAAO,CAACgM,SAAS,CAACJ,QAAQ,GAAGzD;YACrC;YAEA,KAAK,MAAM,CAAC+D,QAAQ9E,EAAE,IAAIrE,OAAO4D,OAAO,CAACzD,IAAIjD,SAAS,IAAI,CAAC,GAAI;gBAC9D,MAAM4G,cACLJ,aAAa,CAACyF,OAAO,IAAI,CAAC,QAAQ,EAAEA,OAAOxM,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBAC5D,MAAMuE,WAAWmD,EAAEnD,QAAQ,IAAI;gBAC/B,MAAM9D,WAAWiH,EAAEjH,QAAQ,IAAI;gBAC/B,MAAM8L,sBAAsBnC,mBAAmB,CAAC3J,SAAS,IAAIA;gBAC7D,MAAMgM,aAAa,GAAGlI,SAAS,EAAE,EAAE9D,SAAS,GAAG,EAAE0G,YAAY,CAAC,CAAC;gBAC/D,IAAI,CAACyD,MAAMrK,SAAS,CAACkM,WAAW,EAAE;oBACjC7B,MAAMrK,SAAS,CAACkM,WAAW,GAAG;wBAC7B1J,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNoB;wBACA9D,UAAU8L;wBACV/H,cAAcgI;wBACdrF;wBACA+E,UAAUzD;oBACX;gBACD;gBACAmC,MAAMrK,SAAS,CAACkM,WAAW,CAAC1J,QAAQ,IAAI2E,EAAE3E,QAAQ,IAAI;gBACtD6H,MAAMrK,SAAS,CAACkM,WAAW,CAACzJ,YAAY,IAAI0E,EAAE1E,YAAY,IAAI;gBAC9D4H,MAAMrK,SAAS,CAACkM,WAAW,CAACxJ,gBAAgB,IAAIyE,EAAEzE,gBAAgB,IAAI;gBACtE2H,MAAMrK,SAAS,CAACkM,WAAW,CAACvJ,YAAY,IAAIwE,EAAExE,YAAY,IAAI;gBAC9D0H,MAAMrK,SAAS,CAACkM,WAAW,CAACtJ,IAAI,IAAIuE,EAAEvE,IAAI,IAAI;gBAC9C,IAAIsF,UAAU,CAACmC,MAAMrK,SAAS,CAACkM,WAAW,CAACP,QAAQ,IAAI,EAAE,GACxDtB,MAAMrK,SAAS,CAACkM,WAAW,CAACP,QAAQ,GAAGzD;YACzC;YAEA,KAAK,MAAM,CAACiE,OAAOC,GAAG,IAAItJ,OAAO4D,OAAO,CAACzD,IAAIW,QAAQ,IAAI,CAAC,GAAI;gBAC7D,MAAMI,WAAWoI,GAAGpI,QAAQ,IAAI;gBAChC,MAAM9D,WAAWkM,GAAGlM,QAAQ,IAAI;gBAChC,MAAM8L,sBAAsBnC,mBAAmB,CAAC3J,SAAS,IAAIA;gBAC7D,MAAMgE,YAAYkI,GAAGjI,MAAM;gBAC3B,MAAMkI,UAAUnI,YAAY+F,SAAS,CAAC/F,UAAU,GAAG;gBACnD,MAAMoI,UACLD,SAAStH,QACT,CAACb,YAAYA,UAAUzE,KAAK,CAAC,GAAG,KAAK,QAAQ,oBAAoB;gBAClE,MAAMuJ,eAAe3J,WAAW6E;gBAChC,MAAMqI,YAAYvD,gBAAgB;gBAClC,IAAI,CAACqB,MAAMzG,QAAQ,CAACuI,MAAM,EAAE;oBAC3B9B,MAAMzG,QAAQ,CAACuI,MAAM,GAAG;wBACvB3J,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNoB;wBACA9D,UAAU8L;wBACVhD;wBACAsD;wBACAC;wBACAZ,UAAUzD;oBACX;gBACD;gBACAmC,MAAMzG,QAAQ,CAACuI,MAAM,CAAC3J,QAAQ,IAAI4J,GAAG5J,QAAQ,IAAI;gBACjD6H,MAAMzG,QAAQ,CAACuI,MAAM,CAAC1J,YAAY,IAAI2J,GAAG3J,YAAY,IAAI;gBACzD4H,MAAMzG,QAAQ,CAACuI,MAAM,CAACzJ,gBAAgB,IAAI0J,GAAG1J,gBAAgB,IAAI;gBACjE2H,MAAMzG,QAAQ,CAACuI,MAAM,CAACxJ,YAAY,IAAIyJ,GAAGzJ,YAAY,IAAI;gBACzD0H,MAAMzG,QAAQ,CAACuI,MAAM,CAACvJ,IAAI,IAAIwJ,GAAGxJ,IAAI,IAAI;gBACzC,IAAIsF,UAAU,CAACmC,MAAMzG,QAAQ,CAACuI,MAAM,CAACR,QAAQ,IAAI,EAAE,GAClDtB,MAAMzG,QAAQ,CAACuI,MAAM,CAACR,QAAQ,GAAGzD;YACnC;YAEA,KAAK,MAAM,CAAC5D,OAAOkI,GAAG,IAAI1J,OAAO4D,OAAO,CAACzD,IAAIY,UAAU,IAAI,CAAC,GAAI;gBAC/D,MAAMQ,WAAWmI,GAAGnI,QAAQ,IAAIC,MAAMwH,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI;gBACvD,MAAM9H,WAAWwI,GAAGxI,QAAQ,IAAI;gBAChC,MAAM9D,WAAWsM,GAAGtM,QAAQ,IAAI;gBAChC,MAAM8L,sBAAsBnC,mBAAmB,CAAC3J,SAAS,IAAIA;gBAC7D,IAAI,CAACmK,MAAMxG,UAAU,CAACS,MAAM,EAAE;oBAC7B+F,MAAMxG,UAAU,CAACS,MAAM,GAAG;wBACzB9B,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNyB;wBACAL;wBACA9D,UAAU8L;wBACVL,UAAUzD;oBACX;gBACD;gBACAmC,MAAMxG,UAAU,CAACS,MAAM,CAAC9B,QAAQ,IAAIgK,GAAGhK,QAAQ,IAAI;gBACnD6H,MAAMxG,UAAU,CAACS,MAAM,CAAC7B,YAAY,IAAI+J,GAAG/J,YAAY,IAAI;gBAC3D4H,MAAMxG,UAAU,CAACS,MAAM,CAAC5B,gBAAgB,IAAI8J,GAAG9J,gBAAgB,IAAI;gBACnE2H,MAAMxG,UAAU,CAACS,MAAM,CAAC3B,YAAY,IAAI6J,GAAG7J,YAAY,IAAI;gBAC3D0H,MAAMxG,UAAU,CAACS,MAAM,CAAC1B,IAAI,IAAI4J,GAAG5J,IAAI,IAAI;gBAC3C,IAAIsF,UAAU,CAACmC,MAAMxG,UAAU,CAACS,MAAM,CAACqH,QAAQ,IAAI,EAAE,GACpDtB,MAAMxG,UAAU,CAACS,MAAM,CAACqH,QAAQ,GAAGzD;YACrC;QACD;QAEA,mDAAmD;QACnD,MAAMuE,gBAAgBtD,UAAUpH,KAAK2C,GAAG,KAAKyE,UAAU,WAAW;QAClE,MAAMuD,WAAWxH,GAAGN,GAAG,CACtB,CAAC,wGAAwG,CAAC,EAC1G;YAAC,IAAI7C,KAAK0K,eAAe7E,WAAW;SAAG;QAExC,KAAK,MAAMjC,KAAK+G,SAAU;YACzB,MAAMvM,KAAKwF,EAAE9D,SAAS;YACtB,IACCwI,MAAM1G,UAAU,CAACgC,EAAEzF,QAAQ,CAAC,IAC5B,IAAI6B,KAAK5B,MAAM,IAAI4B,KAAKsI,MAAM1G,UAAU,CAACgC,EAAEzF,QAAQ,CAAC,CAACyL,QAAQ,GAE7DtB,MAAM1G,UAAU,CAACgC,EAAEzF,QAAQ,CAAC,CAACyL,QAAQ,GAAGxL;YACzC,MAAM2D,WAAW6B,EAAEzF,QAAQ,GAAG,GAAGyF,EAAE5B,KAAK,CAAC,EAAE,EAAE4B,EAAEzF,QAAQ,CAAC,CAAC,CAAC,GAAGyF,EAAE5B,KAAK;YACpE,IACCsG,MAAMtK,OAAO,CAAC+D,SAAS,IACvB,IAAI/B,KAAK5B,MAAM,IAAI4B,KAAKsI,MAAMtK,OAAO,CAAC+D,SAAS,CAAC6H,QAAQ,GAExDtB,MAAMtK,OAAO,CAAC+D,SAAS,CAAC6H,QAAQ,GAAGxL;YAEpC,IAAIwF,EAAE1B,YAAY,EAAE;gBACnB,MAAM2C,cACLJ,aAAa,CAACb,EAAE1B,YAAY,CAAC,IAC7B,CAAC,QAAQ,EAAE0B,EAAE1B,YAAY,CAACxE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBAC3C,MAAMyM,aAAa,GAAGvG,EAAE5B,KAAK,CAAC,EAAE,EAAE4B,EAAEzF,QAAQ,CAAC,GAAG,EAAE0G,YAAY,CAAC,CAAC;gBAChE,IACCyD,MAAMrK,SAAS,CAACkM,WAAW,IAC3B,IAAInK,KAAK5B,MAAM,IAAI4B,KAAKsI,MAAMrK,SAAS,CAACkM,WAAW,CAACP,QAAQ,GAE5DtB,MAAMrK,SAAS,CAACkM,WAAW,CAACP,QAAQ,GAAGxL;YACzC;YAEA,MAAMoM,YACL5G,EAAExB,MAAM,IAAI,OAAOwB,EAAExB,MAAM,KAAK,WAC7B,GAAGwB,EAAExB,MAAM,CAAC,CAAC,EAAEwB,EAAE5B,KAAK,CAAC,CAAC,EAAE4B,EAAEzF,QAAQ,IAAI,WAAW,GACnD;YACJ,IACCmK,MAAMzG,QAAQ,CAAC2I,UAAU,IACzB,IAAIxK,KAAK5B,MAAM,IAAI4B,KAAKsI,MAAMzG,QAAQ,CAAC2I,UAAU,CAACZ,QAAQ,GAE1DtB,MAAMzG,QAAQ,CAAC2I,UAAU,CAACZ,QAAQ,GAAGxL;YAEtC,MAAMkE,WAAWsB,EAAEtB,QAAQ,IAAI;YAC/B,MAAMsI,cAAc,GAAGtI,SAAS,CAAC,EAAEsB,EAAE5B,KAAK,CAAC,CAAC,EAAE4B,EAAEzF,QAAQ,IAAI,WAAW;YACvE,IACCmK,MAAMxG,UAAU,CAAC8I,YAAY,IAC7B,IAAI5K,KAAK5B,MAAM,IAAI4B,KAAKsI,MAAMxG,UAAU,CAAC8I,YAAY,CAAChB,QAAQ,GAE9DtB,MAAMxG,UAAU,CAAC8I,YAAY,CAAChB,QAAQ,GAAGxL;QAC3C;IACD,OAAO;QACN,4BAA4B;QAC5B,IAAIkJ;QACJ,IAAIG,WAAW,SAAS;YACvB,MAAMoD,aAAa,IAAI7K;YACvB6K,WAAWC,QAAQ,CAAC,GAAG,GAAG,GAAG;YAC7BxD,SAASuD,WAAWhF,WAAW;QAChC,OAAO;YACNyB,SAAS,IAAItH,KAAKA,KAAK2C,GAAG,KAAK7E,SAAS,CAAC,MAAM,EAAE+H,WAAW;QAC7D;QACA,MAAMkF,WAAW5H,GAAGN,GAAG,CACtB,CAAC,sJAAsJ,CAAC,EACxJ;YAACyE;SAAO;QAGT,KAAK,MAAMhE,KAAKyH,SAAU;YACzB,MAAM3J,SAAS,IAAA,mJAAS,EAACkC,EAAElC,MAAM,EAAE,CAAC,MAAM,CAAC;YAC3C,MAAMV,eAAeU,OAAOC,aAAa,IAAI;YAC7C,MAAMV,mBAAmBS,OAAOG,iBAAiB,IAAI;YACrD,MAAMX,eACLQ,OAAOK,aAAa,IAAIL,OAAOM,uBAAuB,IAAI;YAC3D,MAAMsJ,YAAY1H,EAAEzC,IAAI,IAAI;YAC5B,MAAMoJ,sBAAsBnC,mBAAmB,CAACxE,EAAEnF,QAAQ,CAAC,IAAImF,EAAEnF,QAAQ;YAEzEmK,MAAME,iBAAiB,IAAI9H;YAC3B4H,MAAMG,qBAAqB,IAAI9H;YAC/B2H,MAAMI,iBAAiB,IAAI9H;YAC3B0H,MAAMK,SAAS,IAAIqC;YAEnB,IAAI,CAAC1C,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,EAChCmK,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,GAAG;gBAC9BsC,UAAU;gBACVC,cAAc;gBACdC,kBAAkB;gBAClBC,cAAc;gBACdC,MAAM;gBACN+I,UAAUtG,EAAExD,SAAS;YACtB;YACDwI,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAACsC,QAAQ;YACrC6H,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAACuC,YAAY,IAAIA;YAC7C4H,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAACwC,gBAAgB,IAAIA;YACjD2H,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAACyC,YAAY,IAAIA;YAC7C0H,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAAC0C,IAAI,IAAImK;YACrC,IACC,IAAIhL,KAAKsD,EAAExD,SAAS,IAAI,IAAIE,KAAKsI,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAACyL,QAAQ,GAEtEtB,MAAM1G,UAAU,CAAC0B,EAAEnF,QAAQ,CAAC,CAACyL,QAAQ,GAAGtG,EAAExD,SAAS;YAEpD,MAAMiC,WAAWuB,EAAEnF,QAAQ,GAAG,GAAGmF,EAAEtB,KAAK,CAAC,EAAE,EAAEsB,EAAEnF,QAAQ,CAAC,CAAC,CAAC,GAAGmF,EAAEtB,KAAK;YACpE,IAAI,CAACsG,MAAMtK,OAAO,CAAC+D,SAAS,EAAE;gBAC7BuG,MAAMtK,OAAO,CAAC+D,SAAS,GAAG;oBACzBtB,UAAU;oBACVC,cAAc;oBACdC,kBAAkB;oBAClBC,cAAc;oBACdC,MAAM;oBACNoB,UAAUqB,EAAEtB,KAAK;oBACjB7D,UAAU8L;oBACVL,UAAUtG,EAAExD,SAAS;gBACtB;YACD;YACAwI,MAAMtK,OAAO,CAAC+D,SAAS,CAACtB,QAAQ;YAChC6H,MAAMtK,OAAO,CAAC+D,SAAS,CAACrB,YAAY,IAAIA;YACxC4H,MAAMtK,OAAO,CAAC+D,SAAS,CAACpB,gBAAgB,IAAIA;YAC5C2H,MAAMtK,OAAO,CAAC+D,SAAS,CAACnB,YAAY,IAAIA;YACxC0H,MAAMtK,OAAO,CAAC+D,SAAS,CAAClB,IAAI,IAAImK;YAChC,IAAI,IAAIhL,KAAKsD,EAAExD,SAAS,IAAI,IAAIE,KAAKsI,MAAMtK,OAAO,CAAC+D,SAAS,CAAC6H,QAAQ,GACpEtB,MAAMtK,OAAO,CAAC+D,SAAS,CAAC6H,QAAQ,GAAGtG,EAAExD,SAAS;YAE/C,IAAIwD,EAAEpB,YAAY,EAAE;gBACnB,MAAM2C,cACLJ,aAAa,CAACnB,EAAEpB,YAAY,CAAC,IAC7B,CAAC,QAAQ,EAAEoB,EAAEpB,YAAY,CAACxE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBAC3C,MAAMyM,aAAa,GAAG7G,EAAEtB,KAAK,CAAC,EAAE,EAAEsB,EAAEnF,QAAQ,CAAC,GAAG,EAAE0G,YAAY,CAAC,CAAC;gBAChE,IAAI,CAACyD,MAAMrK,SAAS,CAACkM,WAAW,EAAE;oBACjC7B,MAAMrK,SAAS,CAACkM,WAAW,GAAG;wBAC7B1J,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNoB,UAAUqB,EAAEtB,KAAK;wBACjB7D,UAAU8L;wBACV/H,cAAcoB,EAAEpB,YAAY;wBAC5B2C;wBACA+E,UAAUtG,EAAExD,SAAS;oBACtB;gBACD;gBACAwI,MAAMrK,SAAS,CAACkM,WAAW,CAAC1J,QAAQ;gBACpC6H,MAAMrK,SAAS,CAACkM,WAAW,CAACzJ,YAAY,IAAIA;gBAC5C4H,MAAMrK,SAAS,CAACkM,WAAW,CAACxJ,gBAAgB,IAAIA;gBAChD2H,MAAMrK,SAAS,CAACkM,WAAW,CAACvJ,YAAY,IAAIA;gBAC5C0H,MAAMrK,SAAS,CAACkM,WAAW,CAACtJ,IAAI,IAAImK;gBACpC,IACC,IAAIhL,KAAKsD,EAAExD,SAAS,IAAI,IAAIE,KAAKsI,MAAMrK,SAAS,CAACkM,WAAW,CAACP,QAAQ,GAErEtB,MAAMrK,SAAS,CAACkM,WAAW,CAACP,QAAQ,GAAGtG,EAAExD,SAAS;YACpD;YAEA,IAAIwD,EAAElB,MAAM,IAAI,OAAOkB,EAAElB,MAAM,KAAK,UAAU;gBAC7C,MAAMkI,UAAUpC,SAAS,CAAC5E,EAAElB,MAAM,CAAC;gBACnC,MAAMmI,UAAUD,SAAStH,QAAQM,EAAElB,MAAM,CAAC1E,KAAK,CAAC,GAAG,KAAK;gBACxD,MAAMuJ,eAAe3J,WAAWgG,EAAElB,MAAM;gBACxC,MAAMgI,QAAQ,GAAGnD,aAAa,CAAC,EAAE3D,EAAEtB,KAAK,CAAC,CAAC,EAAEsB,EAAEnF,QAAQ,IAAI,WAAW;gBACrE,IAAI,CAACmK,MAAMzG,QAAQ,CAACuI,MAAM,EAAE;oBAC3B9B,MAAMzG,QAAQ,CAACuI,MAAM,GAAG;wBACvB3J,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNoB,UAAUqB,EAAEtB,KAAK;wBACjB7D,UAAU8L;wBACVhD;wBACAsD;wBACAC,WAAWvD;wBACX2C,UAAUtG,EAAExD,SAAS;oBACtB;gBACD;gBACA,MAAMmL,MAAM3C,MAAMzG,QAAQ,CAACuI,MAAM;gBACjCa,IAAIxK,QAAQ;gBACZwK,IAAIvK,YAAY,IAAIA;gBACpBuK,IAAItK,gBAAgB,IAAIA;gBACxBsK,IAAIrK,YAAY,IAAIA;gBACpBqK,IAAIpK,IAAI,IAAImK;gBACZ,IAAI,IAAIhL,KAAKsD,EAAExD,SAAS,IAAI,IAAIE,KAAKiL,IAAIrB,QAAQ,GAChDqB,IAAIrB,QAAQ,GAAGtG,EAAExD,SAAS;YAC5B,OAAO;gBACN,IAAI,CAACwI,MAAMzG,QAAQ,CAAC,eAAe,EAAE;oBACpCyG,MAAMzG,QAAQ,CAAC,eAAe,GAAG;wBAChCpB,UAAU;wBACVC,cAAc;wBACdC,kBAAkB;wBAClBC,cAAc;wBACdC,MAAM;wBACNoB,UAAUqB,EAAEtB,KAAK;wBACjB7D,UAAU8L;wBACVhD,cAAc;wBACdsD,SAAS;wBACTC,WAAW;wBACXZ,UAAUtG,EAAExD,SAAS;oBACtB;gBACD;gBACA,MAAMmL,MAAM3C,MAAMzG,QAAQ,CAAC,eAAe;gBAC1CoJ,IAAIxK,QAAQ;gBACZwK,IAAIvK,YAAY,IAAIA;gBACpBuK,IAAItK,gBAAgB,IAAIA;gBACxBsK,IAAIrK,YAAY,IAAIA;gBACpBqK,IAAIpK,IAAI,IAAImK;gBACZ,IAAI,IAAIhL,KAAKsD,EAAExD,SAAS,IAAI,IAAIE,KAAKiL,IAAIrB,QAAQ,GAChDqB,IAAIrB,QAAQ,GAAGtG,EAAExD,SAAS;YAC5B;YAEA,MAAMwC,WAAWgB,EAAEhB,QAAQ,IAAI;YAC/B,MAAMC,QAAQ,GAAGD,SAAS,CAAC,EAAEgB,EAAEtB,KAAK,CAAC,CAAC,EAAEsB,EAAEnF,QAAQ,IAAI,WAAW;YACjE,IAAI,CAACmK,MAAMxG,UAAU,CAACS,MAAM,EAAE;gBAC7B+F,MAAMxG,UAAU,CAACS,MAAM,GAAG;oBACzB9B,UAAU;oBACVC,cAAc;oBACdC,kBAAkB;oBAClBC,cAAc;oBACdC,MAAM;oBACNyB;oBACAL,UAAUqB,EAAEtB,KAAK;oBACjB7D,UAAU8L;oBACVL,UAAUtG,EAAExD,SAAS;gBACtB;YACD;YACA,MAAMoL,MAAM5C,MAAMxG,UAAU,CAACS,MAAM;YACnC2I,IAAIzK,QAAQ;YACZyK,IAAIxK,YAAY,IAAIA;YACpBwK,IAAIvK,gBAAgB,IAAIA;YACxBuK,IAAItK,YAAY,IAAIA;YACpBsK,IAAIrK,IAAI,IAAImK;YACZ,IAAI,IAAIhL,KAAKsD,EAAExD,SAAS,IAAI,IAAIE,KAAKkL,IAAItB,QAAQ,GAChDsB,IAAItB,QAAQ,GAAGtG,EAAExD,SAAS;QAC5B;IACD;IAEAwI,MAAMC,aAAa,GAAGxH,OAAOP,MAAM,CAAC8H,MAAM1G,UAAU,EAAEuJ,MAAM,CAC3D,CAACC,KAAKzB,IAAMyB,MAAM,CAACzB,EAAElJ,QAAQ,IAAI,CAAC,GAClC;IAED,OAAO6H;AACR;AAEO,eAAe+C,aAAa5D,SAAS,IAAI;IAC/C,MAAMtE,KAAK,MAAM,IAAA,wIAAU;IAC3B,MAAMR,MAAM3C,KAAK2C,GAAG;IAEpB,IAAI8E,WAAW,SAAS;QACvB,MAAM6D,cAAc;QACpB,MAAMC,WAAW;QACjB,MAAMV,aAAa,IAAI7K;QACvB6K,WAAWC,QAAQ,CAAC,GAAG,GAAG,GAAG;QAC7B,MAAMU,YAAYX,WAAW9B,OAAO;QACpC,MAAM0C,UAAUD,YAAYF,cAAcC;QAC1C,MAAMG,UAAU,CAACtN,KAChB,IAAI4B,KAAK5B,IAAIuN,kBAAkB,CAAC,SAAS;gBACxCC,MAAM;gBACNpG,QAAQ;gBACRqG,QAAQ;YACT;QACD,MAAMC,UAAUC,MAAMC,IAAI,CAAC;YAAExO,QAAQ8N;QAAY,GAAG,CAACW,GAAG/C,IAAM,CAAC;gBAC9DgD,OAAOR,QAAQF,YAAYtC,IAAIqC;gBAC/BnK,QAAQ;gBACRP,MAAM;YACP,CAAC;QAED,MAAMuC,OAAOD,GAAGN,GAAG,CAClB,CAAC,6FAA6F,CAAC,EAC/F;YAAC,IAAI7C,KAAKwL,WAAW3F,WAAW;SAAG;QAEpC,KAAK,MAAMvC,KAAKF,KAAM;YACrB,MAAMkC,IAAI,IAAItF,KAAKsD,EAAExD,SAAS,EAAEiJ,OAAO;YACvC,IAAIzD,IAAIkG,aAAalG,KAAKmG,SAAS;YACnC,MAAMU,MAAMjI,KAAK4E,KAAK,CAAC,CAACxD,IAAIkG,SAAS,IAAID;YACzC,IAAIY,OAAO,KAAKA,MAAMb,aAAa;gBAClCQ,OAAO,CAACK,IAAI,CAAC/K,MAAM,IAClB,CAACkC,EAAE5C,YAAY,IAAI,CAAC,IAAI,CAAC4C,EAAE3C,gBAAgB,IAAI,CAAC;gBACjDmL,OAAO,CAACK,IAAI,CAACtL,IAAI,IAAIyC,EAAEzC,IAAI,IAAI;YAChC;QACD;QACA,OAAOiL;IACR;IAEA,IAAIrE,WAAW,OAAO;QACrB,MAAM6D,cAAc;QACpB,MAAMC,WAAW;QACjB,MAAMG,UAAU,CAACtN,KAChB,IAAI4B,KAAK5B,IAAIuN,kBAAkB,CAAC,SAAS;gBACxCC,MAAM;gBACNpG,QAAQ;gBACRqG,QAAQ;YACT;QACD,MAAML,YAAY7I,MAAM2I,cAAcC;QACtC,MAAMO,UAAUC,MAAMC,IAAI,CAAC;YAAExO,QAAQ8N;QAAY,GAAG,CAACW,GAAG/C,IAAM,CAAC;gBAC9DgD,OAAOR,QAAQF,YAAYtC,IAAIqC;gBAC/BnK,QAAQ;gBACRP,MAAM;YACP,CAAC;QAED,MAAMuC,OAAOD,GAAGN,GAAG,CAClB,CAAC,6FAA6F,CAAC,EAC/F;YAAC,IAAI7C,KAAKwL,WAAW3F,WAAW;SAAG;QAEpC,KAAK,MAAMvC,KAAKF,KAAM;YACrB,MAAMkC,IAAI,IAAItF,KAAKsD,EAAExD,SAAS,EAAEiJ,OAAO;YACvC,IAAIzD,IAAIkG,aAAalG,IAAI3C,KAAK;YAC9B,MAAMwJ,MAAMjI,KAAKkI,GAAG,CACnBlI,KAAK4E,KAAK,CAAC,CAACxD,IAAIkG,SAAS,IAAID,WAC7BD,cAAc;YAEfQ,OAAO,CAACK,IAAI,CAAC/K,MAAM,IAAI,CAACkC,EAAE5C,YAAY,IAAI,CAAC,IAAI,CAAC4C,EAAE3C,gBAAgB,IAAI,CAAC;YACvEmL,OAAO,CAACK,IAAI,CAACtL,IAAI,IAAIyC,EAAEzC,IAAI,IAAI;QAChC;QACA,OAAOiL;IACR;IAEA,MAAMR,cAAc7D,WAAW,OAAO,IAAIA,WAAW,QAAQ,KAAK;IAClE,MAAMJ,QAAQ,IAAIrH;IAClB,MAAM0L,UAAU,CAAC3L,IAChBA,EAAEsM,kBAAkB,CAAC,SAAS;YAAEC,OAAO;YAASpL,KAAK;QAAU;IAEhE,kCAAkC;IAClC,MAAMsI,UAAUtC,gBAAgB/D,IAAImI;IACpC,MAAMiB,SAAS,CAAC;IAChB,KAAK,MAAMjJ,KAAKkG,QAAS+C,MAAM,CAACjJ,EAAE6C,OAAO,CAAC,GAAG,IAAA,mJAAS,EAAC7C,EAAE+C,IAAI,EAAE,CAAC;IAEhE,OAAO0F,MAAMC,IAAI,CAAC;QAAExO,QAAQ8N;IAAY,GAAG,CAACW,GAAG/C;QAC9C,MAAMnJ,IAAI,IAAIC,KAAKqH;QACnBtH,EAAEyM,OAAO,CAACzM,EAAEM,OAAO,KAAK,CAACiL,cAAc,IAAIpC,CAAC;QAC5C,MAAM/C,UAAU,GAAGpG,EAAEE,WAAW,GAAG,CAAC,EAAEC,OAAOH,EAAEI,QAAQ,KAAK,GAAGC,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAEF,OAAOH,EAAEM,OAAO,IAAID,QAAQ,CAAC,GAAG,MAAM;QACzH,MAAMqM,UAAUF,MAAM,CAACpG,QAAQ;QAC/B,OAAO;YACN+F,OAAOR,QAAQ3L;YACfqB,QAAQqL,UACL,CAACA,QAAQ/L,YAAY,IAAI,CAAC,IAAI,CAAC+L,QAAQ9L,gBAAgB,IAAI,CAAC,IAC5D;YACHE,MAAM4L,UAAUA,QAAQ5L,IAAI,IAAI,IAAI;QACrC;IACD;AACD;AAEO,eAAe6L,cAAcC,QAAQ,GAAG;IAC9C,IAAI;QACH,MAAMxJ,KAAK,MAAM,IAAA,wIAAU;QAC3B,MAAMC,OAAOD,GAAGN,GAAG,CAClB,CAAC,kIAAkI,CAAC,EACpI;YAAC8J;SAAM;QAER,IAAI,CAACvJ,KAAK5F,MAAM,EAAE,OAAO,EAAE;QAE3B,MAAMoP,UAAU,CAAC;QACjB,IAAI;YACH,MAAM,EAAEhK,sBAAsB,EAAE,GAAG;YACnC,MAAMiK,cAAc,MAAMjK;YAC1B,KAAK,MAAME,KAAK+J,YAAaD,OAAO,CAAC9J,EAAEC,EAAE,CAAC,GAAGD,EAAEgK,WAAW,IAAIhK,EAAEE,IAAI,IAAIF,EAAEG,KAAK,IAAI;QACpF,EAAE,OAAM,CAAC;QAET,OAAOG,KAAKxE,GAAG,CAAC,CAAC0E,IAAM,CAAC;gBACvBxD,WAAWwD,EAAExD,SAAS;gBACtBkC,OAAOsB,EAAEtB,KAAK,IAAI;gBAClB7D,UAAUmF,EAAEnF,QAAQ,EAAE4O,iBAAiB;gBACvChI,SAAS6H,OAAO,CAACtJ,EAAEpB,YAAY,CAAC,IAAI,CAACoB,EAAEpB,YAAY,GAAGoB,EAAEpB,YAAY,CAACxE,KAAK,CAAC,GAAG,KAAK,GAAG;gBACtFgD,cAAc4C,EAAE5C,YAAY,IAAI;gBAChCC,kBAAkB2C,EAAE3C,gBAAgB,IAAI;gBACxC4C,QAAQD,EAAEC,MAAM,IAAI;YACrB,CAAC;IACF,EAAE,OAAOK,GAAG;QACXC,QAAQC,KAAK,CAAC,qCAAqCF,EAAEoJ,OAAO;QAC5D,OAAO,EAAE;IACV;AACD"}}, + {"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AACA;AAGA;AACA;;;;;;;AAKO,SAASA,kBAAkBC,SAAS;IACzC,OAAO,yJAAe,CAACA,UAAU,IAAI,EAAE;AACzC;AAEO,SAASC,gBAAgBD,SAAS;IACvC,MAAME,SAAS,yJAAe,CAACF,UAAU;IACzC,OAAOE,QAAQ,CAAC,EAAE,EAAEC,MAAM;AAC5B;AAEA,oFAAoF;AACpF,qFAAqF;AACrF,2FAA2F;AAC3F,MAAMC,wBAAwB,IAAIC,IAAI;IAAC;IAAM;CAAO;AAEpD,sFAAsF;AACtF,sFAAsF;AACtF,SAASC,UAAUJ,MAAM,EAAEK,OAAO,EAAEP,SAAS;IAC3C,IAAI,CAACE,QAAQ,OAAOM;IACpB,MAAMC,QAAQP,OAAOQ,IAAI,CAACC,CAAAA,IAAKA,EAAER,EAAE,KAAKI;IACxC,IAAIE,OAAO,OAAOA;IAClB,IAAI,CAACL,sBAAsBQ,GAAG,CAACZ,YAAY,OAAOQ;IAClD,MAAMK,aAAa,IAAA,qKAAgB,EAACN;IACpC,IAAIM,eAAeN,SAAS,OAAOC;IACnC,OAAON,OAAOQ,IAAI,CAACC,CAAAA,IAAKA,EAAER,EAAE,KAAKU;AACnC;AAEO,SAASC,aAAad,SAAS,EAAEO,OAAO,EAAEQ,uBAAuB,IAAIV,KAAK;IAC/E,IAAIU,qBAAqBH,GAAG,CAACZ,YAAY,OAAO;IAChD,MAAME,SAAS,yJAAe,CAACF,UAAU;IACzC,IAAI,CAACE,QAAQ,OAAO;IACpB,OAAO,CAAC,CAACI,UAAUJ,QAAQK,SAASP;AACtC;AAEO,SAASgB,cAAchB,SAAS,EAAEO,OAAO;IAC9C,MAAML,SAAS,yJAAe,CAACF,UAAU;IACzC,IAAI,CAACE,QAAQ,OAAOK;IACpB,MAAME,QAAQH,UAAUJ,QAAQK,SAASP;IACzC,OAAOS,OAAOQ,QAAQV;AACxB;AAEO,SAASW,qBAAqBlB,SAAS,EAAEO,OAAO;IACrD,MAAML,SAAS,yJAAe,CAACF,UAAU;IACzC,IAAI,CAACE,QAAQ,OAAO;IACpB,OAAO,IAAA,sKAAiB,EAACI,UAAUJ,QAAQK,SAASP;AACtD;AAIO,SAASmB,yBAAyBnB,SAAS,EAAEO,OAAO;IACzD,MAAML,SAAS,yJAAe,CAACF,UAAU;IACzC,IAAI,CAACE,QAAQ,OAAO;IACpB,OAAO,IAAA,0KAAqB,EAACI,UAAUJ,QAAQK,SAASP;AAC1D;AAEO,SAASoB,aAAapB,SAAS,EAAEO,OAAO;IAC7C,MAAML,SAAS,yJAAe,CAACF,UAAU;IACzC,IAAI,CAACE,QAAQ,OAAO;IACpB,MAAMO,QAAQH,UAAUJ,QAAQK,SAASP;IACzC,OAAOS,OAAOY,QAAQZ,OAAOa,QAAQ;AACvC;AAEO,SAASC,mBAAmBvB,SAAS,EAAEO,OAAO;IACnD,kFAAkF;IAClF,oGAAoG;IACpG,MAAMiB,WAAW,OAAOjB,YAAY,WAAWA,QAAQkB,KAAK,CAAC,oBAAoB;IACjF,MAAMC,SAASF,WAAWA,QAAQ,CAAC,EAAE,GAAG;IACxC,MAAMG,SAASD,SAASnB,QAAQqB,KAAK,CAAC,GAAGJ,SAASK,KAAK,EAAEC,IAAI,KAAKvB;IAClE,MAAML,SAAS,yJAAe,CAACF,UAAU;IACzC,MAAMS,QAAQH,UAAUJ,QAAQyB,QAAQ3B;IACxC,MAAM+B,aAAatB,OAAOuB,mBAAmBvB,OAAON;IACpD,IAAI4B,YAAY;QACd,MAAME,cAAcF,WAAWN,KAAK,CAAC;QACrC,MAAMS,eAAeD,aAAa,CAAC,EAAE,IAAI;QACzC,MAAME,eAAeD,eAAeH,WAAWH,KAAK,CAAC,GAAGK,YAAYJ,KAAK,EAAEC,IAAI,KAAKC;QACpF,OAAOI,eAAe,CAACT,UAAUQ,YAAY;IAC/C;IACA,IAAIlC,cAAc,QAAQ,OAAO2B,WAAW,YAAYA,OAAOS,QAAQ,CAAC,yKAAmB,GAAG;QAC5F,OAAOT,OAAOC,KAAK,CAAC,GAAG,CAAC,yKAAmB,CAACS,MAAM,IAAIX;IACxD;IACA,OAAOC,SAASD;AAClB;AAEO,SAASY,oBAAoBtC,SAAS,EAAEO,OAAO;IACpD,MAAML,SAAS,yJAAe,CAACF,UAAU;IACzC,OAAO,IAAA,qKAAgB,EAACM,UAAUJ,QAAQK,SAASP;AACrD;AAIO,MAAMuC,gBAAgBC,OAAOC,WAAW,CAC7C,6JAAQ,CAACC,MAAM,CAACC,CAAAA,IAAKA,EAAEC,KAAK,IAAID,EAAEC,KAAK,KAAKD,EAAExC,EAAE,EAAE0C,GAAG,CAACF,CAAAA,IAAK;QAACA,EAAExC,EAAE;QAAEwC,EAAEC,KAAK;KAAC;AAIrE,MAAME,uBAAuBN,OAAOC,WAAW,CACpDD,OAAOO,IAAI,CAAC,mJAAS,EAAEF,GAAG,CAAC1C,CAAAA,KAAM;QAACA;QAAIoC,aAAa,CAACpC,GAAG,IAAIA;KAAG;AAGzD,SAAS6C,sBAAsBC,UAAU;IAC9C,MAAML,QAAQE,oBAAoB,CAACG,WAAW,IAAIA;IAClD,OAAO,yJAAe,CAACL,MAAM,IAAI,EAAE;AACrC;AAIO,SAASM,cAAcN,KAAK,EAAErC,OAAO;IAC1C,OAAO,IAAA,+JAAU,EAACD,UAAU,yJAAe,CAACsC,MAAM,EAAErC,SAASqC;AAC/D"}}, + {"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":"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"}}, + {"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":"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"}}, + {"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 + ]), + // + BODY_AND_HTML: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62, + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]) + }, + META: { + // Only the match the prefix cause the suffix can be different wether it's xml compatible or not ">" or "/>" + // { +"use strict"; + +__turbopack_context__.s([ + "CLOSE_TAG", + ()=>CLOSE_TAG, + "chainStreams", + ()=>chainStreams, + "chainTransformers", + ()=>chainTransformers, + "continueDynamicHTMLResume", + ()=>continueDynamicHTMLResume, + "continueDynamicPrerender", + ()=>continueDynamicPrerender, + "continueFizzStream", + ()=>continueFizzStream, + "continueStaticFallbackPrerender", + ()=>continueStaticFallbackPrerender, + "continueStaticPrerender", + ()=>continueStaticPrerender, + "createBufferedTransformStream", + ()=>createBufferedTransformStream, + "createDeferredSuffixStream", + ()=>createDeferredSuffixStream, + "createDocumentClosingStream", + ()=>createDocumentClosingStream, + "createFlightDataInjectionTransformStream", + ()=>createFlightDataInjectionTransformStream, + "createHeadInsertionTransformStream", + ()=>createHeadInsertionTransformStream, + "createHtmlDataDplIdTransformStream", + ()=>createHtmlDataDplIdTransformStream, + "createMetadataTransformStream", + ()=>createMetadataTransformStream, + "createMoveSuffixStream", + ()=>createMoveSuffixStream, + "createRootLayoutValidatorStream", + ()=>createRootLayoutValidatorStream, + "createRuntimePrefetchTransformStream", + ()=>createRuntimePrefetchTransformStream, + "nodestreamToUint8Array", + ()=>nodestreamToUint8Array, + "renderToInitialFizzStream", + ()=>renderToInitialFizzStream, + "streamFromBuffer", + ()=>streamFromBuffer, + "streamFromString", + ()=>streamFromString, + "streamToBuffer", + ()=>streamToBuffer, + "streamToString", + ()=>streamToString, + "streamToUint8Array", + ()=>streamToUint8Array, + "webstreamToUint8Array", + ()=>webstreamToUint8Array +]); +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$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$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$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$errors$2f$constants$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [middleware] (ecmascript)"); +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$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [middleware] (ecmascript)"); +; +; +; +; +; +; +; +; +; +function voidCatch() { +// this catcher is designed to be used with pipeTo where we expect the underlying +// pipe implementation to forward errors but we don't want the pipeTo promise to reject +// and be unhandled +} +// We can share the same encoder instance everywhere +// Notably we cannot do the same for TextDecoder because it is stateful +// when handling streaming data +const encoder = new TextEncoder(); +function chainStreams(...streams) { + // If we have no streams, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + if (streams.length === 0) { + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + // If we only have 1 stream we fast path it by returning just this stream + if (streams.length === 1) { + return streams[0]; + } + const { readable, writable } = new TransformStream(); + // We always initiate pipeTo immediately. We know we have at least 2 streams + // so we need to avoid closing the writable when this one finishes. + let promise = streams[0].pipeTo(writable, { + preventClose: true + }); + let i = 1; + for(; i < streams.length - 1; i++){ + const nextStream = streams[i]; + promise = promise.then(()=>nextStream.pipeTo(writable, { + preventClose: true + })); + } + // We can omit the length check because we halted before the last stream and there + // is at least two streams so the lastStream here will always be defined + const lastStream = streams[i]; + promise = promise.then(()=>lastStream.pipeTo(writable)); + // Catch any errors from the streams and ignore them, they will be handled + // by whatever is consuming the readable stream. + promise.catch(voidCatch); + return readable; +} +function streamFromString(str) { + return new ReadableStream({ + start (controller) { + controller.enqueue(encoder.encode(str)); + controller.close(); + } + }); +} +function streamFromBuffer(chunk) { + return new ReadableStream({ + start (controller) { + controller.enqueue(chunk); + controller.close(); + } + }); +} +async function streamToChunks(stream) { + const reader = stream.getReader(); + const chunks = []; + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + } + return chunks; +} +function concatUint8Arrays(chunks) { + const totalLength = chunks.reduce((sum, chunk)=>sum + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks){ + result.set(chunk, offset); + offset += chunk.length; + } + return result; +} +async function webstreamToUint8Array(stream) { + return concatUint8Arrays(await streamToChunks(stream)); +} +function webToReadable(stream) { + 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 + ; + if (stream instanceof Readable) { + return stream; + } + return Readable.fromWeb(stream); + } +} +async function nodestreamToUint8Array(stream) { + const chunks = []; + for await (const chunk of webToReadable(stream)){ + chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk); + } + return Buffer.concat(chunks); +} +async function streamToUint8Array(stream) { + 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 + ; + if (stream instanceof Readable) { + return nodestreamToUint8Array(stream); + } + return webstreamToUint8Array(stream); + } +} +async function streamToBuffer(stream) { + return Buffer.concat(await streamToChunks(stream)); +} +async function streamToString(stream, signal) { + const decoder = new TextDecoder('utf-8', { + fatal: true + }); + let string = ''; + for await (const chunk of stream){ + if (signal == null ? void 0 : signal.aborted) { + return string; + } + string += decoder.decode(chunk, { + stream: true + }); + } + string += decoder.decode(); + return string; +} +function createBufferedTransformStream(options = {}) { + const { maxBufferByteLength = Infinity } = options; + let bufferedChunks = []; + let bufferByteLength = 0; + let pending; + const flush = (controller)=>{ + try { + if (bufferedChunks.length === 0) { + return; + } + const chunk = new Uint8Array(bufferByteLength); + let copiedBytes = 0; + for(let i = 0; i < bufferedChunks.length; i++){ + const bufferedChunk = bufferedChunks[i]; + chunk.set(bufferedChunk, copiedBytes); + copiedBytes += bufferedChunk.byteLength; + } + // We just wrote all the buffered chunks so we need to reset the bufferedChunks array + // and our bufferByteLength to prepare for the next round of buffered chunks + bufferedChunks.length = 0; + bufferByteLength = 0; + controller.enqueue(chunk); + } catch { + // If an error occurs while enqueuing, it can't be due to this + // transformer. It's most likely caused by the controller having been + // errored (for example, if the stream was cancelled). + } + }; + const scheduleFlush = (controller)=>{ + if (pending) { + return; + } + const detached = 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"](); + pending = detached; + (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"])(()=>{ + try { + flush(controller); + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + // Combine the previous buffer with the new chunk. + bufferedChunks.push(chunk); + bufferByteLength += chunk.byteLength; + if (bufferByteLength >= maxBufferByteLength) { + flush(controller); + } else { + scheduleFlush(controller); + } + }, + flush () { + return pending == null ? void 0 : pending.promise; + } + }); +} +function renderToInitialFizzStream({ ReactDOMServer, element, streamOptions }) { + 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$__["AppRenderSpan"].renderToReadableStream, async ()=>ReactDOMServer.renderToReadableStream(element, streamOptions)); +} +function createMetadataTransformStream(insert) { + let chunkIndex = -1; + let isMarkRemoved = false; + return new TransformStream({ + async transform (chunk, controller) { + let iconMarkIndex = -1; + let closedHeadIndex = -1; + chunkIndex++; + if (isMarkRemoved) { + controller.enqueue(chunk); + return; + } + let iconMarkLength = 0; + // Only search for the closed head tag once + if (iconMarkIndex === -1) { + iconMarkIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK); + if (iconMarkIndex === -1) { + controller.enqueue(chunk); + return; + } else { + // When we found the `` or `>`, checking the next char to ensure we cover both cases. + iconMarkLength = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK.length; + // Check if next char is /, this is for xml mode. + if (chunk[iconMarkIndex + iconMarkLength] === 47) { + iconMarkLength += 2; + } else { + // The last char is `>` + iconMarkLength++; + } + } + } + // Check if icon mark is inside tag in the first chunk. + if (chunkIndex === 0) { + closedHeadIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (iconMarkIndex !== -1) { + // The mark icon is located in the 1st chunk before the head tag. + // We do not need to insert the script tag in this case because it's in the head. + // Just remove the icon mark from the chunk. + if (iconMarkIndex < closedHeadIndex) { + const replaced = new Uint8Array(chunk.length - iconMarkLength); + // Remove the icon mark from the chunk. + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex); + chunk = replaced; + } else { + // The icon mark is after the head tag, replace and insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(encodedInsertion, iconMarkIndex); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + } + isMarkRemoved = true; + } + // If there's no icon mark located, it will be handled later when if present in the following chunks. + } else { + // When it's appeared in the following chunks, we'll need to + // remove the mark and then insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + // Replace the icon mark with the hoist script or empty string. + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + // Set the first part of the chunk, before the icon mark. + replaced.set(chunk.subarray(0, iconMarkIndex)); + // Set the insertion after the icon mark. + replaced.set(encodedInsertion, iconMarkIndex); + // Set the rest of the chunk after the icon mark. + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + isMarkRemoved = true; + } + controller.enqueue(chunk); + } + }); +} +function createHeadInsertionTransformStream(insert) { + let inserted = false; + // We need to track if this transform saw any bytes because if it didn't + // we won't want to insert any server HTML at all + let hasBytes = false; + return new TransformStream({ + async transform (chunk, controller) { + hasBytes = true; + const insertion = await insert(); + if (inserted) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + controller.enqueue(encodedInsertion); + } + controller.enqueue(chunk); + } else { + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + if (index !== -1) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, index)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, index); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(index), index + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + } else { + controller.enqueue(chunk); + } + inserted = true; + } else { + // This will happens in PPR rendering during next start, when the page is partially rendered. + // When the page resumes, the head tag will be found in the middle of the chunk. + // Where we just need to append the insertion and chunk to the current stream. + // e.g. + // PPR-static: ... [ resume content ] + // PPR-resume: [ insertion ] [ rest content ] + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + controller.enqueue(chunk); + inserted = true; + } + } + }, + async flush (controller) { + // Check before closing if there's anything remaining to insert. + if (hasBytes) { + const insertion = await insert(); + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + } + } + }); +} +async function createClientResumeScriptInsertionTransformStream() { + const segmentPath = '/_full'; + const cacheBustingHeader = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["computeCacheBustingSearchParam"])('1', '/_full', undefined, undefined // headers[NEXT_URL] + ); + const searchStr = `${__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"]}=${cacheBustingHeader}`; + const NEXT_CLIENT_RESUME_SCRIPT = ``; + let didAlreadyInsert = false; + return new TransformStream({ + transform (chunk, controller) { + if (didAlreadyInsert) { + // Already inserted the script into the head. Pass through. + controller.enqueue(chunk); + return; + } + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const headClosingTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (headClosingTagIndex === -1) { + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + controller.enqueue(chunk); + return; + } + const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, headClosingTagIndex)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, headClosingTagIndex); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(headClosingTagIndex), headClosingTagIndex + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + didAlreadyInsert = true; + } + }); +} +function createDeferredSuffixStream(suffix) { + let flushed = false; + let pending; + const flush = (controller)=>{ + const detached = 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"](); + pending = detached; + (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"])(()=>{ + try { + controller.enqueue(encoder.encode(suffix)); + } catch { + // If an error occurs while enqueuing it can't be due to this + // transformers fault. It's likely due to the controller being + // errored due to the stream being cancelled. + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + controller.enqueue(chunk); + // If we've already flushed, we're done. + if (flushed) return; + // Schedule the flush to happen. + flushed = true; + flush(controller); + }, + flush (controller) { + if (pending) return pending.promise; + if (flushed) return; + // Flush now. + controller.enqueue(encoder.encode(suffix)); + } + }); +} +function createFlightDataInjectionTransformStream(stream, delayDataUntilFirstHtmlChunk) { + let htmlStreamFinished = false; + let pull = null; + let donePulling = false; + function startOrContinuePulling(controller) { + if (!pull) { + pull = startPulling(controller); + } + return pull; + } + async function startPulling(controller) { + const reader = stream.getReader(); + if (delayDataUntilFirstHtmlChunk) { + // NOTE: streaming flush + // We are buffering here for the inlined data stream because the + // "shell" stream might be chunkenized again by the underlying stream + // implementation, e.g. with a specific high-water mark. To ensure it's + // the safe timing to pipe the data stream, this extra tick is + // necessary. + // We don't start reading until we've left the current Task to ensure + // that it's inserted after flushing the shell. Note that this implementation + // might get stale if impl details of Fizz change in the future. + await (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$__["atLeastOneTask"])(); + } + try { + while(true){ + const { done, value } = await reader.read(); + if (done) { + donePulling = true; + return; + } + // We want to prioritize HTML over RSC data. + // The SSR render is based on the same RSC stream, so when we get a new RSC chunk, + // we're likely to produce an HTML chunk as well, so give it a chance to flush first. + if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) { + await (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$__["atLeastOneTask"])(); + } + controller.enqueue(value); + } + } catch (err) { + controller.error(err); + } + } + return new TransformStream({ + start (controller) { + if (!delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + transform (chunk, controller) { + controller.enqueue(chunk); + // Start the streaming if it hasn't already been started yet. + if (delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + flush (controller) { + htmlStreamFinished = true; + if (donePulling) { + return; + } + return startOrContinuePulling(controller); + } + }); +} +const CLOSE_TAG = ''; +function createMoveSuffixStream() { + let foundSuffix = false; + return new TransformStream({ + transform (chunk, controller) { + if (foundSuffix) { + return controller.enqueue(chunk); + } + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + if (index > -1) { + foundSuffix = true; + // If the whole chunk is the suffix, then don't write anything, it will + // be written in the flush. + if (chunk.length === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length) { + return; + } + // Write out the part before the suffix. + const before = chunk.slice(0, index); + controller.enqueue(before); + // In the case where the suffix is in the middle of the chunk, we need + // to split the chunk into two parts. + if (chunk.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length + index) { + // Write out the part after the suffix. + const after = chunk.slice(index + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length); + controller.enqueue(after); + } + } else { + controller.enqueue(chunk); + } + }, + flush (controller) { + // Even if we didn't find the suffix, the HTML is not valid if we don't + // add it, so insert it at the end. + controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + } + }); +} +function createStripDocumentClosingTagsTransform() { + return new TransformStream({ + transform (chunk, controller) { + // We rely on the assumption that chunks will never break across a code unit. + // This is reasonable because we currently concat all of React's output from a single + // flush into one chunk before streaming it forward which means the chunk will represent + // a single coherent utf-8 string. This is not safe to use if we change our streaming to no + // longer do this large buffered chunk + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML)) { + // the entire chunk is the closing tags; return without enqueueing anything. + return; + } + // We assume these tags will go at together at the end of the document and that + // they won't appear anywhere else in the document. This is not really a safe assumption + // but until we revamp our streaming infra this is a performant way to string the tags + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY); + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML); + controller.enqueue(chunk); + } + }); +} +function createHtmlDataDplIdTransformStream(dplId) { + let didTransform = false; + return new TransformStream({ + transform (chunk, controller) { + if (didTransform) { + controller.enqueue(chunk); + return; + } + const htmlTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML); + if (htmlTagIndex === -1) { + controller.enqueue(chunk); + return; + } + // Insert the data-dpl-id attribute right after " -1) { + foundHtml = true; + } + if (!foundBody && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.BODY) > -1) { + foundBody = true; + } + controller.enqueue(chunk); + }, + flush (controller) { + const missingTags = []; + if (!foundHtml) missingTags.push('html'); + if (!foundBody) missingTags.push('body'); + if (!missingTags.length) return; + controller.enqueue(encoder.encode(` + + `)); + } + }); +} +function chainTransformers(readable, transformers) { + let stream = readable; + for (const transformer of transformers){ + if (!transformer) continue; + stream = stream.pipeThrough(transformer); + } + return stream; +} +async function continueFizzStream(renderStream, { suffix, inlinedDataStream, isStaticGeneration, deploymentId, getServerInsertedHTML, getServerInsertedMetadata, validateRootLayout }) { + // Suffix itself might contain close tags at the end, so we need to split it. + const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null; + if (isStaticGeneration) { + // If we're generating static HTML we need to wait for it to resolve before continuing. + await renderStream.allReady; + } else { + // Otherwise, we want to make sure Fizz is done with all microtasky work + // before we start pulling the stream and cause a flush. + await (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$__["waitAtLeastOneReactRenderTask"])(); + } + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert suffix content + suffixUnclosed != null && suffixUnclosed.length > 0 ? createDeferredSuffixStream(suffixUnclosed) : null, + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + inlinedDataStream ? createFlightDataInjectionTransformStream(inlinedDataStream, true) : null, + // Validate the root layout for missing html or body tags + validateRootLayout ? createRootLayoutValidatorStream() : null, + // Close tags should always be deferred to the end + createMoveSuffixStream(), + // Special head insertions + // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid + // hydration errors. Remove this once it's ready to be handled by react itself. + createHeadInsertionTransformStream(getServerInsertedHTML) + ]); +} +async function continueDynamicPrerender(prerenderStream, { getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + createStripDocumentClosingTagsTransform(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata) + ]); +} +async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Add build id comment to start of the HTML document (in export mode) + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + // Same as `continueStaticPrerender`, but also inserts an additional script + // to instruct the client to start fetching the hydration data as early + // as possible. + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Insert the client resume script into the head + await createClientResumeScriptInsertionTransformStream(), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +function createDocumentClosingStream() { + return streamFromString(CLOSE_TAG); +} +function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) { + const enc = new TextEncoder(); + // Search for: [] + // Replace with: [,] + const search = enc.encode(`[${sentinel}]`); + const first = search[0]; + const replace = enc.encode(`[${isPartial},${staleTime}]`); + const searchLen = search.length; + let currentChunk = null; + let found = false; + function processChunk(controller, nextChunk) { + if (found) { + if (nextChunk) { + controller.enqueue(nextChunk); + } + return; + } + if (currentChunk) { + // We can't search past the index that can contain a full match + let exclusiveUpperBound = currentChunk.length - (searchLen - 1); + if (nextChunk) { + // If we have any overflow bytes we can search up to the chunk's final byte + exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1); + } + if (exclusiveUpperBound < 1) { + // we can't match the current chunk. + controller.enqueue(currentChunk); + currentChunk = nextChunk // advance so we don't process this chunk again + ; + return; + } + let currentIndex = currentChunk.indexOf(first); + // check the current candidate match if it is within the bounds of our search space for the currentChunk + candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){ + // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1 + let matchIndex = 1; + while(matchIndex < searchLen){ + const candidateIndex = currentIndex + matchIndex; + const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length]; + if (candidateValue !== search[matchIndex]) { + // No match, reset and continue the search from the next position + currentIndex = currentChunk.indexOf(first, currentIndex + 1); + continue candidateLoop; + } + matchIndex++; + } + // We found a complete match. currentIndex is our starting point to replace the value. + found = true; + // enqueue everything up to the match + controller.enqueue(currentChunk.subarray(0, currentIndex)); + // enqueue the replacement value + controller.enqueue(replace); + // If there are bytes in the currentChunk after the match enqueue them + if (currentIndex + searchLen < currentChunk.length) { + controller.enqueue(currentChunk.slice(currentIndex + searchLen)); + } + // If we have a next chunk we enqueue it now + if (nextChunk) { + // if replacement spills over to the next chunk we first exclude the replaced bytes + const overflowBytes = currentIndex + searchLen - currentChunk.length; + const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk; + controller.enqueue(truncatedChunk); + } + // We are now in found mode and don't need to track currentChunk anymore + currentChunk = null; + return; + } + // No match found in this chunk, emit it and wait for the next one + controller.enqueue(currentChunk); + } + // Advance to the next chunk + currentChunk = nextChunk; + } + return new TransformStream({ + transform (chunk, controller) { + processChunk(controller, chunk); + }, + flush (controller) { + processChunk(controller, null); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Find the starting index of Uint8Array `b` within Uint8Array `a`. + */ __turbopack_context__.s([ + "indexOfUint8Array", + ()=>indexOfUint8Array, + "isEquivalentUint8Arrays", + ()=>isEquivalentUint8Arrays, + "removeFromUint8Array", + ()=>removeFromUint8Array +]); +function indexOfUint8Array(a, b) { + if (b.length === 0) return 0; + if (a.length === 0 || b.length > a.length) return -1; + // Use Node's native implementation when available. + if (typeof Buffer !== 'undefined') { + const haystack = Buffer.isBuffer(a) ? a : Buffer.from(a.buffer, a.byteOffset, a.byteLength); + return haystack.indexOf(b); + } + // start iterating through `a` + for(let i = 0; i <= a.length - b.length; i++){ + let completeMatch = true; + // from index `i`, iterate through `b` and check for mismatch + for(let j = 0; j < b.length; j++){ + // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`. + if (a[i + j] !== b[j]) { + completeMatch = false; + break; + } + } + if (completeMatch) { + return i; + } + } + return -1; +} +function isEquivalentUint8Arrays(a, b) { + if (a.length !== b.length) return false; + for(let i = 0; i < a.length; i++){ + if (a[i] !== b[i]) return false; + } + return true; +} +function removeFromUint8Array(a, b) { + const tagIndex = indexOfUint8Array(a, b); + if (tagIndex === 0) return a.subarray(b.length); + if (tagIndex > -1) { + const removed = new Uint8Array(a.length - b.length); + removed.set(a.subarray(0, tagIndex)); + removed.set(a.subarray(tagIndex + b.length), tagIndex); + return removed; + } else { + return a; + } +} +}), +"[project]/node_modules/next/dist/esm/server/use-cache/clone-cache-entry.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Tees a cache entry's single-use value stream into two independent entries. + * The original entry is mutated to hold one branch of the tee, and a clone is + * returned holding the other, so both can be consumed independently. + */ __turbopack_context__.s([ + "cloneCacheEntry", + ()=>cloneCacheEntry +]); +function cloneCacheEntry(entry) { + const [streamA, streamB] = entry.value.tee(); + entry.value = streamA; + const clonedEntry = { + value: streamB, + timestamp: entry.timestamp, + revalidate: entry.revalidate, + expire: entry.expire, + stale: entry.stale, + tags: entry.tags + }; + return [ + entry, + clonedEntry + ]; +} +}), +"[project]/node_modules/next/dist/esm/server/use-cache/constants.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MIN_PREFETCHABLE_STALE", + ()=>MIN_PREFETCHABLE_STALE, + "MIN_PRERENDERABLE_EXPIRE", + ()=>MIN_PRERENDERABLE_EXPIRE, + "MIN_SHELL_STALE", + ()=>MIN_SHELL_STALE +]); +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)"); +; +const MIN_PRERENDERABLE_EXPIRE = 300 // 5 minutes +; +const MIN_PREFETCHABLE_STALE = 30 // 30 seconds +; +const MIN_SHELL_STALE = 300 // 5 minutes +; +if ("TURBOPACK compile-time truthy", 1) { + if (MIN_PREFETCHABLE_STALE > MIN_SHELL_STALE) { + 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"]('MIN_PREFETCHABLE_STALE must not exceed MIN_SHELL_STALE.'), "__NEXT_ERROR_CODE", { + value: "E1422", + enumerable: false, + configurable: true + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/use-cache/handlers.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getCacheHandler", + ()=>getCacheHandler, + "getCacheHandlerEntries", + ()=>getCacheHandlerEntries, + "getCacheHandlers", + ()=>getCacheHandlers, + "getDevTieredCacheHandler", + ()=>getDevTieredCacheHandler, + "getPrivateCacheHandler", + ()=>getPrivateCacheHandler, + "initializeCacheHandlers", + ()=>initializeCacheHandlers, + "isBuiltInCacheHandler", + ()=>isBuiltInCacheHandler, + "isCustomCacheHandler", + ()=>isCustomCacheHandler, + "isMemoryCacheDisabled", + ()=>isMemoryCacheDisabled, + "setCacheHandler", + ()=>setCacheHandler +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$handlers$2f$default$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-handlers/default.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$tiered$2d$cache$2d$handler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/use-cache/tiered-cache-handler.js [middleware] (ecmascript)"); +; +; +const debug = process.env.NEXT_PRIVATE_DEBUG_CACHE ? (message, ...args)=>{ + console.log(`use-cache: ${message}`, ...args); +} : undefined; +const handlersSymbol = Symbol.for('@next/cache-handlers'); +const handlersMapSymbol = Symbol.for('@next/cache-handlers-map'); +const handlersSetSymbol = Symbol.for('@next/cache-handlers-set'); +const privateHandlerSymbol = Symbol.for('@next/cache-handlers-private'); +const builtInHandlersSymbol = Symbol.for('@next/cache-handlers-built-in'); +const devFrontHandlersSymbol = Symbol.for('@next/cache-handlers-dev-fronts'); +const devTieredHandlersSymbol = Symbol.for('@next/cache-handlers-dev-tiered'); +const memoryCacheDisabledSymbol = Symbol.for('@next/cache-handlers-memory-disabled'); +/** + * The in-memory size used for the dev-only built-in handlers (the private + * handler, the size-0 replacement, and the per-kind front handlers for custom + * kinds). Mirrors the framework default so `cacheMaxMemorySize: 0` does not + * disable caching in development. + */ const DEV_MEMORY_CACHE_SIZE = 50 * 1024 * 1024; +/** + * The reference to the cache handlers. We store the cache handlers on the + * global object so that we can access the same instance across different + * boundaries (such as different copies of the same module). + */ const reference = globalThis; +function initializeCacheHandlers(cacheMaxMemorySize) { + // If the cache handlers have already been initialized, don't do it again. + if (reference[handlersMapSymbol]) { + debug == null ? void 0 : debug('cache handlers already initialized'); + return false; + } + debug == null ? void 0 : debug('initializing cache handlers'); + const handlersMap = new Map(); + reference[handlersMapSymbol] = handlersMap; + const builtInHandlers = new Set(); + reference[builtInHandlersSymbol] = builtInHandlers; + // In development, `cacheMaxMemorySize: 0` would make the built-in default + // handler a no-op, so every reload would miss. Use a real in-memory size + // instead so dev stays fast; the "use cache" wrapper forces a dynamic cache + // life for this case so it still behaves close to "no cache" (serve stale, + // regenerate in the background). Production keeps the no-op handler. + const builtInSize = ("TURBOPACK compile-time value", "1") && cacheMaxMemorySize === 0 ? DEV_MEMORY_CACHE_SIZE : cacheMaxMemorySize; + // Initialize the cache from the symbol contents first. + if (reference[handlersSymbol]) { + let fallback; + if (reference[handlersSymbol].DefaultCache) { + debug == null ? void 0 : debug('setting "default" cache handler from symbol'); + fallback = reference[handlersSymbol].DefaultCache; + } else { + debug == null ? void 0 : debug('setting "default" cache handler from default'); + fallback = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$handlers$2f$default$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createDefaultCacheHandler"])(builtInSize); + builtInHandlers.add(fallback); + } + handlersMap.set('default', fallback); + if (reference[handlersSymbol].RemoteCache) { + debug == null ? void 0 : debug('setting "remote" cache handler from symbol'); + handlersMap.set('remote', reference[handlersSymbol].RemoteCache); + } else { + debug == null ? void 0 : debug('setting "remote" cache handler from default'); + handlersMap.set('remote', fallback); + } + } else { + const handler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$handlers$2f$default$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createDefaultCacheHandler"])(builtInSize); + builtInHandlers.add(handler); + debug == null ? void 0 : debug('setting "default" cache handler from default'); + handlersMap.set('default', handler); + debug == null ? void 0 : debug('setting "remote" cache handler from default'); + handlersMap.set('remote', handler); + } + // Create a set of the cache handlers. + reference[handlersSetSymbol] = new Set(handlersMap.values()); + // In development we add dedicated built-in in-memory handlers so that reloads + // are fast. These are always built-in handlers, never a user-configured one, + // and are gated on the dev server so production behaves exactly as + // configured. + if ("TURBOPACK compile-time truthy", 1) { + reference[memoryCacheDisabledSymbol] = cacheMaxMemorySize === 0; + // Private caches are persisted here so reloads are fast. Private entries + // can hold data specific to the incoming request (for example, derived from + // its cookies or headers), so this is never the user-configured `default` + // alias. Sized so it still caches under `cacheMaxMemorySize: 0` (otherwise + // it would become the no-op stub and private reloads would miss). + reference[privateHandlerSymbol] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$handlers$2f$default$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createDefaultCacheHandler"])(DEV_MEMORY_CACHE_SIZE); + // Built-in front handlers, one per custom kind, and the tiered handlers + // that place a front in front of a (possibly slow or remote) backing + // handler so cache hits resolve in a microtask, are both created per kind + // in `setCacheHandler`. + reference[devFrontHandlersSymbol] = new Map(); + reference[devTieredHandlersSymbol] = new Map(); + } + return true; +} +function getCacheHandler(kind) { + // This should never be called before initializeCacheHandlers. + if (!reference[handlersMapSymbol]) { + throw Object.defineProperty(new Error('Cache handlers not initialized'), "__NEXT_ERROR_CODE", { + value: "E649", + enumerable: false, + configurable: true + }); + } + return reference[handlersMapSymbol].get(kind); +} +function getPrivateCacheHandler() { + // This should never be called before initializeCacheHandlers. + if (!reference[handlersMapSymbol]) { + throw Object.defineProperty(new Error('Cache handlers not initialized'), "__NEXT_ERROR_CODE", { + value: "E649", + enumerable: false, + configurable: true + }); + } + return reference[privateHandlerSymbol]; +} +function isMemoryCacheDisabled() { + return reference[memoryCacheDisabledSymbol] ?? false; +} +function isCustomCacheHandler(kind) { + var _reference_devFrontHandlersSymbol; + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + return ((_reference_devFrontHandlersSymbol = reference[devFrontHandlersSymbol]) == null ? void 0 : _reference_devFrontHandlersSymbol.has(kind)) ?? false; +} +function isBuiltInCacheHandler(kind) { + var _reference_handlersMapSymbol, _reference_builtInHandlersSymbol; + const handler = (_reference_handlersMapSymbol = reference[handlersMapSymbol]) == null ? void 0 : _reference_handlersMapSymbol.get(kind); + return handler !== undefined && Boolean((_reference_builtInHandlersSymbol = reference[builtInHandlersSymbol]) == null ? void 0 : _reference_builtInHandlersSymbol.has(handler)); +} +function getDevTieredCacheHandler(kind) { + var _reference_devTieredHandlersSymbol; + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + return (_reference_devTieredHandlersSymbol = reference[devTieredHandlersSymbol]) == null ? void 0 : _reference_devTieredHandlersSymbol.get(kind); +} +function getCacheHandlers() { + const handlersSet = reference[handlersSetSymbol]; + if (!handlersSet) { + return undefined; + } + if ("TURBOPACK compile-time truthy", 1) { + return iterateCacheHandlersWithDevBuiltIns(handlersSet); + } + //TURBOPACK unreachable + ; +} +/** + * Yields the registered handlers plus the dev-only built-in handlers (the + * private handler and the per-kind front handlers). The built-in handlers are + * not part of the registered set, but tag operations must still reach them: + * their `updateTags` writes the shared tags manifest that their `get` consults, + * so `revalidateTag` can invalidate their entries. + */ function* iterateCacheHandlersWithDevBuiltIns(handlersSet) { + yield* handlersSet; + const privateHandler = reference[privateHandlerSymbol]; + if (privateHandler) { + yield privateHandler; + } + const devFrontHandlers = reference[devFrontHandlersSymbol]; + if (devFrontHandlers) { + yield* devFrontHandlers.values(); + } +} +function getCacheHandlerEntries() { + const handlersMap = reference[handlersMapSymbol]; + if (!handlersMap) { + return undefined; + } + if ("TURBOPACK compile-time truthy", 1) { + return iterateCacheHandlerEntriesWithDevBuiltIns(handlersMap); + } + //TURBOPACK unreachable + ; +} +/** + * Yields the registered entries plus the dev-only private handler under its + * kind, so that per-kind tag operations (`refreshTags` / `getExpiration` for + * implicit tags) apply to private entries. Custom-kind front handlers are + * intentionally omitted: the backing handler (already in the map) is + * authoritative for that kind's `getExpiration`, and a front entry is discarded + * via that same value. + */ function* iterateCacheHandlerEntriesWithDevBuiltIns(handlersMap) { + yield* handlersMap.entries(); + const privateHandler = reference[privateHandlerSymbol]; + if (privateHandler) { + const privateEntry = [ + 'private', + privateHandler + ]; + yield privateEntry; + } +} +function setCacheHandler(kind, cacheHandler) { + // This should never be called before initializeCacheHandlers. + if (!reference[handlersMapSymbol] || !reference[handlersSetSymbol]) { + throw Object.defineProperty(new Error('Cache handlers not initialized'), "__NEXT_ERROR_CODE", { + value: "E649", + enumerable: false, + configurable: true + }); + } + debug == null ? void 0 : debug('setting cache handler for "%s"', kind); + reference[handlersMapSymbol].set(kind, cacheHandler); + reference[handlersSetSymbol].add(cacheHandler); + // A user-configured handler may be slow or remote. In development, give it a + // dedicated built-in in-memory front handler so cache hits resolve in a + // microtask, and pair the two into a tiered handler the wrapper reads + // through. Both are created alongside registration so their lifecycle matches + // the backing handler's, and the front handler's presence is the signal that + // this kind is backed by a real handler (see `isCustomCacheHandler`). Being a + // built-in default handler, the front inherits the dev minimum retention, so + // a short-`expire` value still hits the front instead of falling through to + // the slow backing on every read. + if ("TURBOPACK compile-time truthy", 1) { + var _reference_devFrontHandlersSymbol, _reference_devTieredHandlersSymbol; + const frontHandler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$handlers$2f$default$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createDefaultCacheHandler"])(DEV_MEMORY_CACHE_SIZE); + (_reference_devFrontHandlersSymbol = reference[devFrontHandlersSymbol]) == null ? void 0 : _reference_devFrontHandlersSymbol.set(kind, frontHandler); + (_reference_devTieredHandlersSymbol = reference[devTieredHandlersSymbol]) == null ? void 0 : _reference_devTieredHandlersSymbol.set(kind, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$tiered$2d$cache$2d$handler$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createTieredCacheHandler"])(frontHandler, cacheHandler)); + } +} +}), +"[project]/node_modules/next/dist/esm/server/use-cache/tiered-cache-handler.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createTieredCacheHandler", + ()=>createTieredCacheHandler +]); +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$use$2d$cache$2f$clone$2d$cache$2d$entry$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/use-cache/clone-cache-entry.js [middleware] (ecmascript)"); +; +; +function createTieredCacheHandler(front, backing) { + // Holds the in-flight (or chained) background sync per key, so a sync for a + // key runs after any earlier one for that key rather than in parallel. + const inFlightSyncs = new Map(); + function scheduleBackgroundSync(cacheKey, sync) { + // Serialize syncs per key: chain this one after any in-flight sync rather + // than running a second in parallel. The trailing sync still re-reads the + // backing, so the front converges to the latest state; a later read is + // never dropped in favor of an earlier, possibly stale, in-flight read. + const previous = inFlightSyncs.get(cacheKey); + let pending; + if (previous) { + pending = previous.then(sync); + } else { + pending = sync(); + } + pending = pending.finally(()=>{ + if (inFlightSyncs.get(cacheKey) === pending) { + inFlightSyncs.delete(cacheKey); + } + }); + inFlightSyncs.set(cacheKey, pending); + // Register the sync on the current request's revalidation writes so it is + // awaited rather than left untracked. Reading the work store here (rather + // than capturing it at construction) is what lets the handler be a shared + // singleton; `get` always runs within the request's async context, so the + // store is present. + 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) { + workStore.pendingRevalidateWrites ??= []; + workStore.pendingRevalidateWrites.push(pending); + } + } + return { + async get (cacheKey, softTags) { + const frontEntry = await front.get(cacheKey, softTags); + if (frontEntry) { + // Cache hit: serve immediately (in a microtask). A background reconcile + // keeps the front in sync with the backing for the next read; + // reconciles for the same key are serialized, so concurrent cache hits + // don't hit the backing in parallel. + scheduleBackgroundSync(cacheKey, ()=>reconcileFrontFromBacking(front, backing, cacheKey, softTags, frontEntry)); + return frontEntry; + } + // Cold or evicted front entry: we pay the backing latency here (this is a + // read that may legitimately surface a cold cache indicator). A miss + // returns undefined and the "use cache" wrapper generates the entry and + // writes it through both tiers via `set`. + const backingEntry = await backing.get(cacheKey, softTags); + if (!backingEntry) { + return undefined; + } + // Mirror this freshly read backing entry into the front so the next read + // hits it. The mirror is serialized per key: if a sync is already + // running, this chains after it, so the front converges to this read even + // if the backing changed since that sync started. + const [servedEntry, mirroredEntry] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$clone$2d$cache$2d$entry$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["cloneCacheEntry"])(backingEntry); + scheduleBackgroundSync(cacheKey, ()=>mirrorIntoFront(front, cacheKey, mirroredEntry)); + return servedEntry; + }, + async set (cacheKey, pendingEntry) { + // Write through to both tiers. The entry's value stream is single-use, so + // tee it into one entry per tier. + const entry = await pendingEntry; + const [frontEntry, backingEntry] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$use$2d$cache$2f$clone$2d$cache$2d$entry$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["cloneCacheEntry"])(entry); + await Promise.all([ + front.set(cacheKey, Promise.resolve(frontEntry)), + backing.set(cacheKey, Promise.resolve(backingEntry)) + ]); + } + }; +} +/** + * After serving a cache hit from the front, consult the backing and mirror a + * newer entry into the front for the next read. Runs in the background; + * failures are non-fatal. + */ async function reconcileFrontFromBacking(front, backing, cacheKey, softTags, frontEntry) { + try { + const backingEntry = await backing.get(cacheKey, softTags); + if (!backingEntry) { + // The backing no longer has this entry (it was purged out-of-band). The + // cache-handler interface has no per-key delete, so evict the front entry + // by overwriting it with an already-expired copy: the next read sees a + // front miss, falls through to the (also empty) backing, and the wrapper + // regenerates. The entry we just served was the last stale read. + await front.set(cacheKey, Promise.resolve(toExpiredEntry(frontEntry))); + return; + } + if (backingEntry.timestamp > frontEntry.timestamp) { + await front.set(cacheKey, Promise.resolve(backingEntry)); + } else { + // The front is already up to date, so the backing entry goes unused. + // Release its stream without awaiting: a teed stream's `cancel()` only + // settles once the sibling branch (retained by the backing handler) is + // also cancelled, so awaiting it here would hang the reconcile. + void backingEntry.value.cancel(); + } + } catch { + // Background warming; failures are non-fatal. + } +} +/** + * Mirror a backing entry into the front. + */ async function mirrorIntoFront(front, cacheKey, entry) { + try { + await front.set(cacheKey, Promise.resolve(entry)); + } catch { + // Background warming; failures are non-fatal. + } +} +/** + * Build an already-expired copy of an entry, used to evict it from the front + * handler (which has no per-key delete) once the backing no longer has it. The + * default handler treats a negative `expire` as an eviction sentinel and + * reports the entry as missing on the next read. A negative `expire` is used + * rather than `0` because the dev front handler enforces a minimum retention, + * so a `0` `expire` would be kept alive by that minimum instead of evicted. The + * value is never read once the entry is evicted, but it must carry at least one + * byte because the built-in LRU cache refuses to store size-0 entries. + */ function toExpiredEntry(entry) { + return { + ...entry, + expire: -1, + value: new ReadableStream({ + start (controller) { + controller.enqueue(new Uint8Array(1)); + controller.close(); + } + }) + }; +} +}), +"[project]/node_modules/next/dist/esm/server/web/adapter.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextRequestHint", + ()=>NextRequestHint, + "adapter", + ()=>adapter +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/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)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$fetch$2d$event$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.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$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.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$response$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/response.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$relativize$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$internal$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/internal-utils.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$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$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$async$2d$storage$2f$request$2d$store$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/async-storage/request-store.js [middleware] (ecmascript)"); +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$server$2f$async$2d$storage$2f$work$2d$store$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/async-storage/work-store.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$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$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$web$2f$web$2d$on$2d$close$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/web-on-close.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$get$2d$edge$2d$preview$2d$props$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/get-edge-preview-props.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$after$2f$builtin$2d$request$2d$context$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/after/builtin-request-context.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$implicit$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/implicit-tags.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$is$2d$rsc$2d$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/is-rsc-request.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [middleware] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +// The proxy (middleware) does not support `'use cache'`, so this work store +// never reaches the code that reads `cacheLife` (and `'use cache'` is +// disallowed on the edge runtime anyway). This sentinel satisfies the +// non-optional type while throwing if `default` is ever read, matching the +// "never read" sentinels used for the proxy's other unused renderOpts fields +// (`staticPageGenerationTimeout: 0`, `useCacheTimeout: 0`). It surfaces loudly +// rather than silently serving a misleading profile. +const proxyCacheLifeProfiles = { + get default () { + 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"]('Proxy does not support `use cache`, so reading its `default` cacheLife profile is unexpected.'), "__NEXT_ERROR_CODE", { + value: "E1406", + enumerable: false, + configurable: true + }); + } +}; +class NextRequestHint extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextRequest"] { + constructor(params){ + super(params.input, params.init); + this.sourcePage = params.page; + } + get request() { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PageSignatureError"]({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + respondWith() { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PageSignatureError"]({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + waitUntil() { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PageSignatureError"]({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } +} +const headersGetter = { + keys: (headers)=>Array.from(headers.keys()), + get: (headers, key)=>headers.get(key) ?? undefined +}; +let propagator = (request, fn)=>{ + const tracer = (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"])(); + return tracer.withPropagatedContext(request.headers, fn, headersGetter); +}; +let testApisIntercepted = false; +function ensureTestApisIntercepted() { + if (!testApisIntercepted) { + testApisIntercepted = true; + if (process.env.NEXT_PRIVATE_TEST_PROXY === 'true') { + const { interceptTestApis, wrapRequestHandler } = __turbopack_context__.r("[project]/node_modules/next/dist/experimental/testmode/server-edge.js [middleware] (ecmascript)"); + interceptTestApis(); + propagator = wrapRequestHandler(propagator); + } + } +} +async function adapter(params) { + var _getBuiltinRequestContext; + ensureTestApisIntercepted(); + 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$__["ensureInstrumentationRegistered"])(); + // TODO-APP: use explicit marker for this + const isEdgeRendering = typeof globalThis.__BUILD_MANIFEST !== 'undefined'; + params.request.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$app$2d$paths$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeRscURL"])(params.request.url); + const requestURL = params.bypassNextUrl ? new URL(params.request.url) : new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextURL"](params.request.url, { + headers: params.request.headers, + nextConfig: params.request.nextConfig + }); + // Iterator uses an index to keep track of the current iteration. Because of deleting and appending below we can't just use the iterator. + // Instead we use the keys before iteration. + const keys = [ + ...requestURL.searchParams.keys() + ]; + for (const key of keys){ + const value = requestURL.searchParams.getAll(key); + 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) { + requestURL.searchParams.delete(normalizedKey); + for (const val of value){ + requestURL.searchParams.append(normalizedKey, val); + } + requestURL.searchParams.delete(key); + } + } + // Ensure users only see page requests, never data requests. + let buildId = process.env.__NEXT_BUILD_ID || ''; + if ('buildId' in requestURL) { + buildId = requestURL.buildId || ''; + requestURL.buildId = ''; + } + let deploymentId = ("TURBOPACK compile-time value", false); + const requestHeaders = (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$__["fromNodeOutgoingHttpHeaders"])(params.request.headers); + const isNextDataRequest = requestHeaders.has('x-nextjs-data'); + const isRSCRequest = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$is$2d$rsc$2d$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isRSCRequestHeader"])(requestHeaders.get(__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$__["RSC_HEADER"])); + if (isNextDataRequest && requestURL.pathname === '/index') { + requestURL.pathname = '/'; + } + const flightHeaders = new Map(); + // Headers should only be stripped for middleware + if (!isEdgeRendering && !("TURBOPACK compile-time value", void 0)) { + for (const header of __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"]){ + const value = requestHeaders.get(header); + if (value !== null) { + flightHeaders.set(header, value); + requestHeaders.delete(header); + } + } + } + const normalizeURL = ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : requestURL; + const rscHash = normalizeURL.searchParams.get(__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"]); + const request = new NextRequestHint({ + page: params.page, + // Strip internal query parameters off the request. + input: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$internal$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stripInternalSearchParams"])(normalizeURL).toString(), + init: { + body: params.request.body, + headers: requestHeaders, + method: params.request.method, + nextConfig: params.request.nextConfig, + signal: params.request.signal + } + }); + if (params.request.requestMeta) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["setRequestMeta"])(request, params.request.requestMeta); + } + /** + * This allows to identify the request as a data request. The user doesn't + * need to know about this property neither use it. We add it for testing + * purposes. + */ if (isNextDataRequest) { + Object.defineProperty(request, '__isData', { + enumerable: false, + value: true + }); + } + if (// leverage the shared instance if not we need + // to create a fresh cache instance each time + !globalThis.__incrementalCacheShared && params.IncrementalCache) { + ; + globalThis.__incrementalCache = new params.IncrementalCache({ + CurCacheHandler: params.incrementalCacheHandler, + minimalMode: ("TURBOPACK compile-time value", "development") !== 'development', + fetchCacheKeyPrefix: ("TURBOPACK compile-time value", ""), + dev: ("TURBOPACK compile-time value", "development") === 'development', + requestHeaders: params.request.headers, + getPrerenderManifest: ()=>{ + return { + version: -1, + routes: {}, + dynamicRoutes: {}, + notFoundRoutes: [], + preview: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$get$2d$edge$2d$preview$2d$props$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getEdgePreviewProps"])() + }; + } + }); + } + // if we're in an edge runtime sandbox, we should use the waitUntil + // that we receive from the enclosing NextServer + const outerWaitUntil = params.request.waitUntil ?? ((_getBuiltinRequestContext = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$after$2f$builtin$2d$request$2d$context$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getBuiltinRequestContext"])()) == null ? void 0 : _getBuiltinRequestContext.waitUntil); + const event = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$fetch$2d$event$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextFetchEvent"]({ + request, + page: params.page, + context: outerWaitUntil ? { + waitUntil: outerWaitUntil + } : undefined + }); + let response; + let cookiesFromResponse; + response = await propagator(request, ()=>{ + // we only care to make async storage available for middleware + const isMiddleware = params.page === '/middleware' || params.page === '/src/middleware' || params.page === '/proxy' || params.page === '/src/proxy'; + if (isMiddleware) { + // if we're in an edge function, we only get a subset of `nextConfig` (no `experimental`), + // so we have to inject it via DefinePlugin. + // in `next start` this will be passed normally (see `NextNodeServer.runMiddleware`). + const waitUntil = event.waitUntil.bind(event); + const closeController = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$web$2d$on$2d$close$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["CloseController"](); + 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$__["MiddlewareSpan"].execute, { + spanName: `middleware ${request.method}`, + attributes: { + 'http.target': request.nextUrl.pathname, + 'http.method': request.method + } + }, async ()=>{ + try { + var _params_request_nextConfig_experimental, _params_request_nextConfig; + const onUpdateCookies = (cookies)=>{ + cookiesFromResponse = cookies; + }; + const previewProps = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$get$2d$edge$2d$preview$2d$props$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getEdgePreviewProps"])(); + const page = '/' // Fake Work + ; + const fallbackRouteParams = null; + const implicitTags = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$implicit$2d$tags$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getImplicitTags"])(page, request.nextUrl.pathname, fallbackRouteParams); + const requestStore = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$async$2d$storage$2f$request$2d$store$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createRequestStoreForAPI"])(request, request.nextUrl, implicitTags, onUpdateCookies, previewProps, // refresh hash to thread through here. + undefined); + const workStore = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$async$2d$storage$2f$work$2d$store$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["createWorkStore"])({ + page, + renderOpts: { + cacheLifeProfiles: proxyCacheLifeProfiles, + // Proxy doesn't do static generation, so this value does not + // apply here. 0 is a sentinel: if something ever reads it, + // it'll surface loudly instead of silently using a misleading + // default. + staticPageGenerationTimeout: 0, + cacheComponents: false, + // Proxy doesn't run instant validation; the level value is + // irrelevant here. + // TODO: remove validationLevel and other global config from renderOpts + validationLevel: 'warning', + experimental: { + isRoutePPREnabled: false, + authInterrupts: !!((_params_request_nextConfig = params.request.nextConfig) == null ? void 0 : (_params_request_nextConfig_experimental = _params_request_nextConfig.experimental) == null ? void 0 : _params_request_nextConfig_experimental.authInterrupts), + // Proxy doesn't fill Cache Components entries, so this value + // is never read. 0 is a sentinel: if something ever reads it, + // the cache fill will time out immediately and surface the + // bug. + useCacheTimeout: 0 + }, + supportsDynamicResponse: true, + waitUntil, + onClose: closeController.onClose.bind(closeController), + onAfterTaskError: undefined + }, + isPrefetchRequest: request.headers.get(__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_ROUTER_PREFETCH_HEADER"]) === '1', + buildId: buildId ?? '', + deploymentId: deploymentId ?? '', + previouslyRevalidatedTags: [] + }); + return await __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"].run(workStore, ()=>__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"].run(requestStore, params.handler, request, event)); + } finally{ + // middleware cannot stream, so we can consider the response closed + // as soon as the handler returns. + // we can delay running it until a bit later -- + // if it's needed, we'll have a `waitUntil` lock anyway. + setTimeout(()=>{ + closeController.dispatchClose(); + }, 0); + } + }); + } + return params.handler(request, event); + }); + // check if response is a Response object + if (response && !(response instanceof Response)) { + throw Object.defineProperty(new TypeError('Expected an instance of Response to be returned'), "__NEXT_ERROR_CODE", { + value: "E567", + enumerable: false, + configurable: true + }); + } + if (response && cookiesFromResponse) { + response.headers.set('set-cookie', cookiesFromResponse); + } + /** + * For rewrites we must always include the locale in the final pathname + * so we re-create the NextURL forcing it to include it when the it is + * an internal rewrite. Also we make sure the outgoing rewrite URL is + * a data URL if the request was a data request. + */ const rewrite = response == null ? void 0 : response.headers.get('x-middleware-rewrite'); + if (response && rewrite && (isRSCRequest || !isEdgeRendering)) { + var _params_request_nextConfig_experimental_clientParamParsingOrigins, _params_request_nextConfig_experimental, _params_request_nextConfig; + const destination = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextURL"](rewrite, { + forceLocale: true, + headers: params.request.headers, + nextConfig: params.request.nextConfig + }); + if (!("TURBOPACK compile-time value", void 0) && !isEdgeRendering) { + if (destination.host === request.nextUrl.host) { + destination.buildId = buildId || destination.buildId; + response.headers.set('x-middleware-rewrite', String(destination)); + } + } + /** + * When the request is a data request we must show if there was a rewrite + * with an internal header so the client knows which component to load + * from the data request. + */ const { url: relativeDestination, isRelative } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$relativize$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseRelativeURL"])(destination.toString(), requestURL.toString()); + if (!isEdgeRendering && isNextDataRequest && // if the rewrite is external and external rewrite + // resolving config is enabled don't add this header + // so the upstream app can set it instead + !(("TURBOPACK compile-time value", false) && relativeDestination.match(/http(s)?:\/\//))) { + response.headers.set('x-nextjs-rewrite', relativeDestination); + } + // Check to see if this is a non-relative rewrite. If it is, we need + // to check to see if it's an allowed origin to receive the rewritten + // headers. + const isAllowedOrigin = !isRelative ? (_params_request_nextConfig = params.request.nextConfig) == null ? void 0 : (_params_request_nextConfig_experimental = _params_request_nextConfig.experimental) == null ? void 0 : (_params_request_nextConfig_experimental_clientParamParsingOrigins = _params_request_nextConfig_experimental.clientParamParsingOrigins) == null ? void 0 : _params_request_nextConfig_experimental_clientParamParsingOrigins.some((origin)=>new RegExp(origin).test(destination.origin)) : false; + // If this is an RSC request, and the pathname or search has changed, and + // this isn't an external rewrite, we need to set the rewritten pathname and + // query headers. + if (isRSCRequest && (isRelative || isAllowedOrigin)) { + if (requestURL.pathname !== destination.pathname) { + response.headers.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$__["NEXT_REWRITTEN_PATH_HEADER"], destination.pathname); + } + if (requestURL.search !== destination.search) { + response.headers.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$__["NEXT_REWRITTEN_QUERY_HEADER"], destination.search.slice(1)); + } + } + } + /** + * Always forward the `_rsc` search parameter to the rewritten URL for RSC requests, + * unless it's already present. This is necessary to ensure that RSC hash validation + * works correctly after a rewrite. For internal rewrites, the server can validate the + * RSC hash using the original URL, so forwarding the `_rsc` parameter is less critical. + * However, for external rewrites (where the request is proxied to another Next.js server), + * the external server does not have access to the original URL or its search parameters. + * In these cases, forwarding the `_rsc` parameter is essential so that the external server + * can perform the correct RSC hash validation. + */ if (response && rewrite && isRSCRequest && rscHash) { + const rewriteURL = new URL(rewrite); + if (!rewriteURL.searchParams.has(__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"])) { + rewriteURL.searchParams.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$__["NEXT_RSC_UNION_QUERY"], rscHash); + response.headers.set('x-middleware-rewrite', rewriteURL.toString()); + } + } + /** + * For redirects we will not include the locale in case when it is the + * default and we must also make sure the outgoing URL is a data one if + * the incoming request was a data request. + */ const redirect = response == null ? void 0 : response.headers.get('Location'); + if (response && redirect && !isEdgeRendering) { + const redirectURL = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextURL"](redirect, { + forceLocale: false, + headers: params.request.headers, + nextConfig: params.request.nextConfig + }); + /** + * Responses created from redirects have immutable headers so we have + * to clone the response to be able to modify it. + */ response = new Response(response.body, response); + if ("TURBOPACK compile-time truthy", 1) { + if (redirectURL.host === requestURL.host) { + redirectURL.buildId = buildId || redirectURL.buildId; + response.headers.set('Location', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$relativize$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getRelativeURL"])(redirectURL, requestURL)); + } + } + /** + * When the request is a data request we can't use the location header as + * it may end up with CORS error. Instead we map to an internal header so + * the client knows the destination. + */ if (isNextDataRequest) { + response.headers.delete('Location'); + response.headers.set('x-nextjs-redirect', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$relativize$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getRelativeURL"])(redirectURL.toString(), requestURL.toString())); + } + } + const finalResponse = response ? response : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$response$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextResponse"].next(); + // Flight headers are not overridable / removable so they are applied at the end. + const middlewareOverrideHeaders = finalResponse.headers.get('x-middleware-override-headers'); + const overwrittenHeaders = []; + if (middlewareOverrideHeaders) { + for (const [key, value] of flightHeaders){ + finalResponse.headers.set(`x-middleware-request-${key}`, value); + overwrittenHeaders.push(key); + } + if (overwrittenHeaders.length > 0) { + finalResponse.headers.set('x-middleware-override-headers', middlewareOverrideHeaders + ',' + overwrittenHeaders.join(',')); + } + } + return { + response: finalResponse, + waitUntil: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$fetch$2d$event$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getWaitUntilPromiseFromEvent"])(event) ?? Promise.resolve(), + fetchMetrics: request.fetchMetrics + }; +} +}), +"[project]/node_modules/next/dist/esm/server/web/error.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PageSignatureError", + ()=>PageSignatureError, + "RemovedPageError", + ()=>RemovedPageError, + "RemovedUAError", + ()=>RemovedUAError +]); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1177", + enumerable: false, + configurable: true + }); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1178", + enumerable: false, + configurable: true + }); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1172", + enumerable: false, + configurable: true + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/get-edge-preview-props.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * In edge runtime, these props directly accessed from environment variables. + * - local: env vars will be injected through edge-runtime as runtime env vars + * - deployment: env vars will be replaced by edge build pipeline + */ __turbopack_context__.s([ + "getEdgePreviewProps", + ()=>getEdgePreviewProps +]); +function getEdgePreviewProps() { + return { + previewModeId: process.env.__NEXT_PREVIEW_MODE_ID || '', + previewModeSigningKey: process.env.__NEXT_PREVIEW_MODE_SIGNING_KEY || '', + previewModeEncryptionKey: process.env.__NEXT_PREVIEW_MODE_ENCRYPTION_KEY || '' + }; +} +}), +"[project]/node_modules/next/dist/esm/server/web/globals.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "edgeInstrumentationOnRequestError", + ()=>edgeInstrumentationOnRequestError, + "ensureInstrumentationRegistered", + ()=>ensureInstrumentationRegistered, + "getEdgeInstrumentationModule", + ()=>getEdgeInstrumentationModule +]); +async function getEdgeInstrumentationModule() { + const instrumentation = '_ENTRIES' in globalThis && _ENTRIES.middleware_instrumentation && await _ENTRIES.middleware_instrumentation; + return instrumentation; +} +let instrumentationModulePromise = null; +async function registerInstrumentation() { + // Ensure registerInstrumentation is not called in production build + if (process.env.NEXT_PHASE === 'phase-production-build') return; + if (!instrumentationModulePromise) { + instrumentationModulePromise = getEdgeInstrumentationModule(); + } + const instrumentation = await instrumentationModulePromise; + if (instrumentation == null ? void 0 : instrumentation.register) { + try { + await instrumentation.register(); + } catch (err) { + err.message = `An error occurred while loading instrumentation hook: ${err.message}`; + throw err; + } + } +} +async function edgeInstrumentationOnRequestError(...args) { + const instrumentation = await getEdgeInstrumentationModule(); + try { + var _instrumentation_onRequestError; + await (instrumentation == null ? void 0 : (_instrumentation_onRequestError = instrumentation.onRequestError) == null ? void 0 : _instrumentation_onRequestError.call(instrumentation, ...args)); + } catch (err) { + // Log the soft error and continue, since the original error has already been thrown + console.error('Error in instrumentation.onRequestError:', err); + } +} +let registerInstrumentationPromise = null; +function ensureInstrumentationRegistered() { + if (!registerInstrumentationPromise) { + registerInstrumentationPromise = registerInstrumentation(); + } + return registerInstrumentationPromise; +} +function getUnsupportedModuleErrorMessage(module) { + // warning: if you change these messages, you must adjust how dev-overlay's middleware detects modules not found + return `The edge runtime does not support Node.js '${module}' module. +Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`; +} +function __import_unsupported(moduleName) { + const proxy = new Proxy(function() {}, { + get (_obj, prop) { + if (prop === 'then') { + return {}; + } + throw Object.defineProperty(new Error(getUnsupportedModuleErrorMessage(moduleName)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + }, + construct () { + throw Object.defineProperty(new Error(getUnsupportedModuleErrorMessage(moduleName)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + }, + apply (_target, _this, args) { + if (typeof args[0] === 'function') { + return args[0](proxy); + } + throw Object.defineProperty(new Error(getUnsupportedModuleErrorMessage(moduleName)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + }); + return new Proxy({}, { + get: ()=>proxy + }); +} +function enhanceGlobals() { + if ("TURBOPACK compile-time truthy", 1) { + return; + } + //TURBOPACK unreachable + ; +} +enhanceGlobals(); +}), +"[project]/node_modules/next/dist/esm/server/web/next-url.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextURL", + ()=>NextURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.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$next$2d$pathname$2d$info$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/get-hostname.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$get$2d$next$2d$pathname$2d$info$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [middleware] (ecmascript)"); +; +; +; +; +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getNextPathnameInfo"])(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !("TURBOPACK compile-time value", void 0), + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getHostname"])(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["detectDomainLocale"])((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (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$next$2d$pathname$2d$info$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["formatNextPathnameInfo"])({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw Object.defineProperty(new TypeError(`The NextURL configuration includes no locale "${locale}"`), "__NEXT_ERROR_CODE", { + value: "E597", + enumerable: false, + configurable: true + }); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeadersAdapter", + ()=>HeadersAdapter, + "ReadonlyHeadersError", + ()=>ReadonlyHeadersError +]); +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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [middleware] (ecmascript)"); +; +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1176", + enumerable: false, + configurable: true + }); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +/** + * Builds the read methods for a sealed view that exposes all of `target`. + */ function createPassThroughMethods(target, sealed) { + return { + get: target.get.bind(target), + has: target.has.bind(target), + getSetCookie: target.getSetCookie.bind(target), + keys: target.keys.bind(target), + values: target.values.bind(target), + entries: target.entries.bind(target), + [Symbol.iterator]: target[Symbol.iterator].bind(target), + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of target.entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +/** + * Builds the read methods for a sealed view that omits the header names matched + * by `isHidden`. + */ function createHidingMethods(target, sealed, isHidden) { + function* entries() { + for (const entry of target.entries()){ + if (!isHidden(entry[0])) { + yield entry; + } + } + } + return { + entries, + [Symbol.iterator]: entries, + get: (name)=>isHidden(name) ? null : target.get(name), + has: (name)=>isHidden(name) ? false : target.has(name), + getSetCookie: ()=>isHidden('set-cookie') ? [] : target.getSetCookie(), + *keys () { + for (const name of target.keys()){ + if (!isHidden(name)) { + yield name; + } + } + }, + *values () { + for (const [, value] of entries()){ + yield value; + } + }, + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + * + * The sealed view stays live. Later writes to `headers` remain visible + * through it. + * + * `hidden` omits the given header names from every read operation (`get`, + * `has`, `getSetCookie`, `forEach`, and iteration). The names must be + * lowercase. The underlying headers are neither copied nor mutated, so hidden + * headers remain available to the framework. + */ static seal(headers, hidden) { + const isHidden = hidden && hidden.size > 0 ? (name)=>hidden.has(name.toLowerCase()) : null; + // The methods are built once per sealed view and reused, so repeated access + // returns the same function instead of a fresh closure. They are assigned + // after the proxy exists because `forEach` hands the proxy to its callback. + // Creating the proxy runs no trap, so nothing can read them before then. + let methods; + const sealed = new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + case Symbol.iterator: + return methods[Symbol.iterator]; + case 'get': + case 'has': + case 'getSetCookie': + case 'keys': + case 'values': + case 'entries': + case 'forEach': + return methods[prop]; + default: + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + methods = isHidden ? createHidingMethods(headers, sealed, isHidden) : createPassThroughMethods(headers, sealed); + return sealed; + } + /** + * @param headers + * @returns A fresh object identity backed by the original value + */ static fresh(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextRequestAdapter", + ()=>NextRequestAdapter, + "ResponseAborted", + ()=>ResponseAborted, + "ResponseAbortedName", + ()=>ResponseAbortedName, + "createAbortController", + ()=>createAbortController, + "signalFromNodeResponse", + ()=>signalFromNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.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$web$2f$spec$2d$extension$2f$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [middleware] (ecmascript)"); +; +; +; +; +const ResponseAbortedName = 'ResponseAborted'; +class ResponseAborted extends Error { + constructor(...args){ + super(...args), this.name = ResponseAbortedName; + } +} +function createAbortController(response) { + const controller = new AbortController(); + // If `finish` fires first, then `res.end()` has been called and the close is + // just us finishing the stream on our side. If `close` fires first, then we + // know the client disconnected before we finished. + response.once('close', ()=>{ + if (response.writableFinished) return; + controller.abort(new ResponseAborted()); + }); + return controller; +} +function signalFromNodeResponse(response) { + const { errored, destroyed } = response; + if (errored || destroyed) { + return AbortSignal.abort(errored ?? new ResponseAborted()); + } + const { signal } = createAbortController(response); + return signal; +} +class NextRequestAdapter { + static fromBaseNextRequest(request, signal) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") === 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isWebNextRequest"])(request)) //TURBOPACK unreachable + ; + else if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isNodeNextRequest"])(request)) { + return NextRequestAdapter.fromNodeNextRequest(request, signal); + } else { + throw Object.defineProperty(new Error('Invariant: Unsupported NextRequest type'), "__NEXT_ERROR_CODE", { + value: "E345", + enumerable: false, + configurable: true + }); + } + } + static fromNodeNextRequest(request, signal) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) { + // @ts-expect-error - this is handled by undici, when streams/web land use it instead + body = request.body; + } + let url; + if (request.url.startsWith('http')) { + url = new URL(request.url); + } else { + // Grab the full URL from the request metadata. + const base = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getRequestMeta"])(request, 'initURL'); + if (!base || !base.startsWith('http')) { + // Because the URL construction relies on the fact that the URL provided + // is absolute, we need to provide a base URL. We can't use the request + // URL because it's relative, so we use a dummy URL instead. + url = new URL(request.url, 'http://n'); + } else { + url = new URL(request.url, base); + } + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextRequest"](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$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...signal.aborted ? {} : { + body + } + }); + } + static fromWebNextRequest(request) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD') { + body = request.body; + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextRequest"](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$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal: request.request.signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...request.request.signal.aborted ? {} : { + body + } + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ReflectAdapter", + ()=>ReflectAdapter +]); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/request-cookies.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MutableRequestCookiesAdapter", + ()=>MutableRequestCookiesAdapter, + "ReadonlyRequestCookiesError", + ()=>ReadonlyRequestCookiesError, + "RequestCookiesAdapter", + ()=>RequestCookiesAdapter, + "appendMutableCookies", + ()=>appendMutableCookies, + "areCookiesMutableInCurrentPhase", + ()=>areCookiesMutableInCurrentPhase, + "createCookiesWithMutableAccessCheck", + ()=>createCookiesWithMutableAccessCheck, + "getModifiedCookieValues", + ()=>getModifiedCookieValues, + "responseCookiesToRequestCookies", + ()=>responseCookiesToRequestCookies +]); +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$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.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$shared$2f$lib$2f$action$2d$revalidation$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/action-revalidation-kind.js [middleware] (ecmascript)"); +; +; +; +; +; +class ReadonlyRequestCookiesError extends Error { + constructor(){ + super('Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1180", + enumerable: false, + configurable: true + }); + } + static callable() { + throw new ReadonlyRequestCookiesError(); + } +} +class RequestCookiesAdapter { + static seal(cookies) { + return new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'clear': + case 'delete': + case 'set': + return ReadonlyRequestCookiesError.callable; + default: + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + } + /** + * @param cookies + * @returns A fresh object identity backed by the original value + */ static fresh(cookies) { + return new Proxy(cookies, { + get (target, prop, receiver) { + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + }); + } +} +const SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies'); +function getModifiedCookieValues(cookies) { + const modified = cookies[SYMBOL_MODIFY_COOKIE_VALUES]; + if (!modified || !Array.isArray(modified) || modified.length === 0) { + return []; + } + return modified; +} +function appendMutableCookies(headers, mutableCookies) { + const modifiedCookieValues = getModifiedCookieValues(mutableCookies); + if (modifiedCookieValues.length === 0) { + return false; + } + // Return a new response that extends the response with + // the modified cookies as fallbacks. `res` cookies + // will still take precedence. + const resCookies = 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"](headers); + const returnedCookies = resCookies.getAll(); + // Set the modified cookies as fallbacks. + for (const cookie of modifiedCookieValues){ + resCookies.set(cookie); + } + // Set the original cookies as the final values. + for (const cookie of returnedCookies){ + resCookies.set(cookie); + } + return true; +} +class MutableRequestCookiesAdapter { + static wrap(cookies, onUpdateCookies) { + 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"](new Headers()); + for (const cookie of cookies.getAll()){ + responseCookies.set(cookie); + } + let modifiedValues = []; + const modifiedCookies = new Set(); + const updateResponseCookies = ()=>{ + // TODO-APP: change method of getting workStore + 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) { + workStore.pathWasRevalidated = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$action$2d$revalidation$2d$kind$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ActionDidRevalidateStaticAndDynamic"]; + } + const allCookies = responseCookies.getAll(); + modifiedValues = allCookies.filter((c)=>modifiedCookies.has(c.name)); + if (onUpdateCookies) { + const serializedCookies = []; + for (const cookie of modifiedValues){ + const tempCookies = 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"](new Headers()); + tempCookies.set(cookie); + serializedCookies.push(tempCookies.toString()); + } + onUpdateCookies(serializedCookies); + } + }; + const wrappedCookies = new Proxy(responseCookies, { + get (target, prop, receiver) { + switch(prop){ + // A special symbol to get the modified cookie values + case SYMBOL_MODIFY_COOKIE_VALUES: + return modifiedValues; + // TODO: Throw error if trying to set a cookie after the response + // headers have been set. + case 'delete': + return function(...args) { + modifiedCookies.add(typeof args[0] === 'string' ? args[0] : args[0].name); + try { + target.delete(...args); + return wrappedCookies; + } finally{ + updateResponseCookies(); + } + }; + case 'set': + return function(...args) { + modifiedCookies.add(typeof args[0] === 'string' ? args[0] : args[0].name); + try { + target.set(...args); + return wrappedCookies; + } finally{ + updateResponseCookies(); + } + }; + default: + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + return wrappedCookies; + } +} +function createCookiesWithMutableAccessCheck(requestStore) { + const wrappedCookies = new Proxy(requestStore.mutableCookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + return function(...args) { + ensureCookiesAreStillMutable(requestStore, 'cookies().delete'); + target.delete(...args); + return wrappedCookies; + }; + case 'set': + return function(...args) { + ensureCookiesAreStillMutable(requestStore, 'cookies().set'); + target.set(...args); + return wrappedCookies; + }; + default: + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + return wrappedCookies; +} +function areCookiesMutableInCurrentPhase(requestStore) { + return requestStore.phase === 'action'; +} +/** Ensure that cookies() starts throwing on mutation + * if we changed phases and can no longer mutate. + * + * This can happen when going: + * 'render' -> 'after' + * 'action' -> 'render' + * */ function ensureCookiesAreStillMutable(requestStore, _callingExpression) { + if (!areCookiesMutableInCurrentPhase(requestStore)) { + // TODO: maybe we can give a more precise error message based on callingExpression? + throw new ReadonlyRequestCookiesError(); + } +} +function responseCookiesToRequestCookies(responseCookies) { + 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"](new Headers()); + for (const cookie of responseCookies.getAll()){ + requestCookies.set(cookie); + } + return requestCookies; +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [middleware] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +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)"); +; +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextFetchEvent", + ()=>NextFetchEvent, + "getWaitUntilPromiseFromEvent", + ()=>getWaitUntilPromiseFromEvent +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.js [middleware] (ecmascript)"); +; +const responseSymbol = Symbol('response'); +const passThroughSymbol = Symbol('passThrough'); +const waitUntilSymbol = Symbol('waitUntil'); +class FetchEvent { + constructor(_request, waitUntil){ + this[passThroughSymbol] = false; + this[waitUntilSymbol] = waitUntil ? { + kind: 'external', + function: waitUntil + } : { + kind: 'internal', + promises: [] + }; + } + // TODO: is this dead code? NextFetchEvent never lets this get called + respondWith(response) { + if (!this[responseSymbol]) { + this[responseSymbol] = Promise.resolve(response); + } + } + // TODO: is this dead code? passThroughSymbol is unused + passThroughOnException() { + this[passThroughSymbol] = true; + } + waitUntil(promise) { + if (this[waitUntilSymbol].kind === 'external') { + // if we received an external waitUntil, we delegate to it + // TODO(after): this will make us not go through `getServerError(error, 'edge-server')` in `sandbox` + const waitUntil = this[waitUntilSymbol].function; + return waitUntil(promise); + } else { + // if we didn't receive an external waitUntil, we make it work on our own + // (and expect the caller to do something with the promises) + this[waitUntilSymbol].promises.push(promise); + } + } +} +function getWaitUntilPromiseFromEvent(event) { + return event[waitUntilSymbol].kind === 'internal' ? Promise.all(event[waitUntilSymbol].promises).then(()=>{}) : undefined; +} +class NextFetchEvent extends FetchEvent { + constructor(params){ + var _params_context; + super(params.request, (_params_context = params.context) == null ? void 0 : _params_context.waitUntil); + this.sourcePage = params.page; + } + /** + * @deprecated The `request` is now the first parameter and the API is now async. + * + * Read more: https://nextjs.org/docs/messages/middleware-new-signature + */ get request() { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PageSignatureError"]({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + /** + * @deprecated Using `respondWith` is no longer needed. + * + * Read more: https://nextjs.org/docs/messages/middleware-new-signature + */ respondWith() { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PageSignatureError"]({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERNALS", + ()=>INTERNALS, + "NextRequest", + ()=>NextRequest +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.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$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.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)"); +; +; +; +; +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (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$__["validateURL"])(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if ("TURBOPACK compile-time truthy", 1) { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextURL"](url, { + 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"])(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + 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"](this.headers), + nextUrl, + url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RemovedPageError"](); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["RemovedUAError"](); + } + get url() { + return this[INTERNALS].url; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/response.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextResponse", + ()=>NextResponse +]); +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$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.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$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [middleware] (ecmascript)"); +; +; +; +; +; +const INTERNALS = Symbol('internal response'); +const REDIRECTS = new Set([ + 301, + 302, + 303, + 307, + 308 +]); +function handleMiddlewareField(init, headers) { + var _init_request; + if (init == null ? void 0 : (_init_request = init.request) == null ? void 0 : _init_request.headers) { + if (!(init.request.headers instanceof Headers)) { + throw Object.defineProperty(new Error('request.headers must be an instance of Headers'), "__NEXT_ERROR_CODE", { + value: "E119", + enumerable: false, + configurable: true + }); + } + const keys = []; + for (const [key, value] of init.request.headers){ + headers.set('x-middleware-request-' + key, value); + keys.push(key); + } + headers.set('x-middleware-override-headers', keys.join(',')); + } +} +class NextResponse extends Response { + constructor(body, init = {}){ + super(body, init); + const headers = this.headers; + 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$__["ResponseCookies"](headers); + const cookiesProxy = new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + case 'set': + { + return (...args)=>{ + const result = Reflect.apply(target[prop], target, args); + const newHeaders = new Headers(headers); + if (result instanceof __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"]) { + headers.set('x-middleware-set-cookie', result.getAll().map((cookie)=>(0, __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$__["stringifyCookie"])(cookie)).join(',')); + } + handleMiddlewareField(init, newHeaders); + return result; + }; + } + default: + 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$reflect$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + this[INTERNALS] = { + cookies: cookiesProxy, + url: init.url ? new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NextURL"](init.url, { + 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"])(headers), + nextConfig: init.nextConfig + }) : undefined + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + url: this.url, + // rest of props come from Response + body: this.body, + bodyUsed: this.bodyUsed, + headers: Object.fromEntries(this.headers), + ok: this.ok, + redirected: this.redirected, + status: this.status, + statusText: this.statusText, + type: this.type + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + static json(body, init) { + const response = Response.json(body, init); + return new NextResponse(response.body, response); + } + static redirect(url, init) { + const status = typeof init === 'number' ? init : (init == null ? void 0 : init.status) ?? 307; + if (!REDIRECTS.has(status)) { + throw Object.defineProperty(new RangeError('Failed to execute "redirect" on "response": Invalid status code'), "__NEXT_ERROR_CODE", { + value: "E529", + enumerable: false, + configurable: true + }); + } + const initObj = typeof init === 'object' ? init : {}; + const headers = new Headers(initObj == null ? void 0 : initObj.headers); + headers.set('Location', (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$__["validateURL"])(url)); + return new NextResponse(null, { + ...initObj, + headers, + status + }); + } + static rewrite(destination, init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-rewrite', (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$__["validateURL"])(destination)); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } + static next(init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-next', '1'); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/utils.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromNodeOutgoingHttpHeaders", + ()=>fromNodeOutgoingHttpHeaders, + "normalizeNextQueryParam", + ()=>normalizeNextQueryParam, + "splitCookiesString", + ()=>splitCookiesString, + "toNodeOutgoingHttpHeaders", + ()=>toNodeOutgoingHttpHeaders, + "validateURL", + ()=>validateURL +]); +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)"); +; +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + 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 === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw Object.defineProperty(new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E61", + enumerable: false, + configurable: true + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + __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"], + __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"] + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} +}), +"[project]/node_modules/next/dist/esm/server/web/web-on-close.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** Monitor when the consumer finishes reading the response body. +that's as close as we can get to `res.on('close')` using web APIs. +*/ __turbopack_context__.s([ + "CloseController", + ()=>CloseController, + "trackBodyConsumed", + ()=>trackBodyConsumed, + "trackStreamConsumed", + ()=>trackStreamConsumed +]); +function trackBodyConsumed(body, onEnd) { + if (typeof body === 'string') { + const generator = async function* generate() { + const encoder = new TextEncoder(); + yield encoder.encode(body); + onEnd(); + }; + // @ts-expect-error BodyInit typings doesn't seem to include AsyncIterables even though it's supported in practice + return generator(); + } else { + return trackStreamConsumed(body, onEnd); + } +} +function trackStreamConsumed(stream, onEnd) { + // NOTE: This function must handle `stream` being aborted or cancelled, + // so it can't just be this: + // + // return stream.pipeThrough(new TransformStream({ flush() { onEnd() } })) + // + // because that doesn't handle cancellations. + // (and cancellation handling via `Transformer.cancel` is only available in node >20) + const dest = new TransformStream(); + const runOnEnd = ()=>onEnd(); + stream.pipeTo(dest.writable).then(runOnEnd, runOnEnd); + return dest.readable; +} +class CloseController { + onClose(callback) { + if (this.isClosed) { + throw Object.defineProperty(new Error('Cannot subscribe to a closed CloseController'), "__NEXT_ERROR_CODE", { + value: "E365", + enumerable: false, + configurable: true + }); + } + this.target.addEventListener('close', callback); + this.listeners++; + } + dispatchClose() { + if (this.isClosed) { + throw Object.defineProperty(new Error('Cannot close a CloseController multiple times'), "__NEXT_ERROR_CODE", { + value: "E229", + enumerable: false, + configurable: true + }); + } + if (this.listeners > 0) { + this.target.dispatchEvent(new Event('close')); + } + this.isClosed = true; + } + constructor(){ + this.target = new EventTarget(); + this.listeners = 0; + this.isClosed = false; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/action-revalidation-kind.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ActionDidNotRevalidate", + ()=>ActionDidNotRevalidate, + "ActionDidRevalidateDynamicOnly", + ()=>ActionDidRevalidateDynamicOnly, + "ActionDidRevalidateStaticAndDynamic", + ()=>ActionDidRevalidateStaticAndDynamic +]); +const ActionDidNotRevalidate = 0; +const ActionDidRevalidateStaticAndDynamic = 1; +const ActionDidRevalidateDynamicOnly = 2; +}), +"[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MISSING_ROOT_TAGS_ERROR", + ()=>MISSING_ROOT_TAGS_ERROR +]); +const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/escape-regexp.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "escapeStringRegexp", + ()=>escapeStringRegexp +]); +// regexp is based on https://github.com/sindresorhus/escape-string-regexp +const reHasRegExp = /[|\\{}()[\]^$+*?.-]/; +const reReplaceRegExp = /[|\\{}()[\]^$+*?.-]/g; +function escapeStringRegexp(str) { + // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23 + if (reHasRegExp.test(str)) { + return str.replace(reReplaceRegExp, '\\$&'); + } + return str; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Takes an object with a hostname property (like a parsed URL) and some + * headers that may contain Host and returns the preferred hostname. + * @param parsed An object containing a hostname property. + * @param headers A dictionary with headers containing a `host`. + */ __turbopack_context__.s([ + "getHostname", + ()=>getHostname +]); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/hash.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// http://www.cse.yorku.ca/~oz/hash.html +// More specifically, 32-bit hash via djbxor +// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765) +// This is due to number type differences between rust for turbopack to js number types, +// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching +// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation +// as can gaurantee determinstic output from 32bit hash. +__turbopack_context__.s([ + "djb2Hash", + ()=>djb2Hash, + "hexHash", + ()=>hexHash +]); +function djb2Hash(str) { + let hash = 5381; + for(let i = 0; i < str.length; i++){ + const char = str.charCodeAt(i); + hash = (hash << 5) + hash + char & 0xffffffff; + } + return hash >>> 0; +} +function hexHash(str) { + return djb2Hash(str).toString(36).slice(0, 5); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "detectDomainLocale", + ()=>detectDomainLocale +]); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizeLocalePath", + ()=>normalizeLocalePath +]); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "InvariantError", + ()=>InvariantError +]); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1179", + enumerable: false, + configurable: true + }); + this.name = 'InvariantError'; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Check to see if a value is Thenable. + * + * @param promise the maybe-thenable value + * @returns true if the value is thenable + */ __turbopack_context__.s([ + "isThenable", + ()=>isThenable +]); +function isThenable(promise) { + return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function'; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/isomorphic/path.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { + +/** + * This module is for next.js server internal usage of path module. + * It will use native path module for nodejs runtime. + * It will use path-browserify polyfill for edge runtime. + */ let path; +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + path = __turbopack_context__.r("[externals]/path [external] (path, cjs)"); +} +module.exports = path; +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * For a given page path, this function ensures that there is a leading slash. + * If there is not a leading slash, one is added, otherwise it is noop. + */ __turbopack_context__.s([ + "ensureLeadingSlash", + ()=>ensureLeadingSlash +]); +function ensureLeadingSlash(path) { + return path.startsWith('/') ? path : `/${path}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizePagePath", + ()=>normalizePagePath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-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$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.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$is$2d$dynamic$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.js [middleware] (ecmascript)"); +; +; +; +function normalizePagePath(page) { + const normalized = /^\/index(\/|$)/.test(page) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isDynamicRoute"])(page) ? `/index${page}` : page === '/' ? '/index' : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(page); + if ("TURBOPACK compile-time truthy", 1) { + const { posix } = __turbopack_context__.r("[externals]/path [external] (path, cjs)"); + const resolvedPage = posix.normalize(normalized); + if (resolvedPage !== normalized) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["NormalizeError"](`Requested and resolved page mismatch: ${normalized} ${resolvedPage}`); + } + } + return normalized; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/routes/app.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isInterceptionAppRoute", + ()=>isInterceptionAppRoute, + "isNormalizedAppRoute", + ()=>isNormalizedAppRoute, + "parseAppRouteSegment", + ()=>parseAppRouteSegment, + "parseAppRouteWithSlots", + ()=>parseAppRouteWithSlots, + "parseNormalizedAppRoute", + ()=>parseNormalizedAppRoute +]); +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$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-segment-param.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$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [middleware] (ecmascript)"); +; +; +; +function normalizeEncodedDynamicPlaceholder(segment) { + if (!/%5b|%5d/i.test(segment)) { + return segment; + } + try { + const decodedSegment = decodeURIComponent(segment); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getSegmentParam"])(decodedSegment) ? decodedSegment : segment; + } catch { + return segment; + } +} +function parseAppRouteSegment(segment) { + if (segment === '') { + return null; + } + // Check if the segment starts with an interception marker + const interceptionMarker = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].find((m)=>segment.startsWith(m)); + const param = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getSegmentParam"])(segment); + if (param) { + return { + type: 'dynamic', + name: segment, + param, + interceptionMarker + }; + } else if (segment.startsWith('(') && segment.endsWith(')')) { + return { + type: 'route-group', + name: segment, + interceptionMarker + }; + } else if (segment.startsWith('@')) { + return { + type: 'parallel-route', + name: segment, + interceptionMarker + }; + } else { + return { + type: 'static', + name: segment, + interceptionMarker + }; + } +} +function isNormalizedAppRoute(route) { + return route.normalized; +} +function isInterceptionAppRoute(route) { + return route.interceptionMarker !== undefined && route.interceptingRoute !== undefined && route.interceptedRoute !== undefined; +} +// Bitmask for which non-URL segment types to allow during parsing. +// By default, route groups and parallel routes are rejected because +// they should have been stripped by normalizeAppPath. These flags +// let callers opt in to allowing specific types. +const OnlyRoutableSegments = /* */ 0; +const AllowParallelSegments = /* */ 1; +const AllowGroupSegments = /* */ 2; +function parseAppRouteImpl(pathname, allowedTypes) { + const pathnameSegments = pathname.split('/').filter(Boolean); + // Build segments array with static and dynamic segments + const segments = []; + // Parse if this is an interception route. + let interceptionMarker; + let interceptingRoute; + let interceptedRoute; + for (const segment of pathnameSegments){ + const normalizedSegment = normalizeEncodedDynamicPlaceholder(segment); + // Parse the segment into an AppSegment. + const appSegment = parseAppRouteSegment(normalizedSegment); + if (!appSegment) { + continue; + } + if (appSegment.type === 'route-group' && !(allowedTypes & AllowGroupSegments)) { + 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"](`${pathname} is being parsed as a normalized route, but it has a route group segment.`), "__NEXT_ERROR_CODE", { + value: "E1151", + enumerable: false, + configurable: true + }); + } + if (appSegment.type === 'parallel-route' && !(allowedTypes & AllowParallelSegments)) { + 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"](`${pathname} is being parsed as a normalized route, but it has a parallel route segment.`), "__NEXT_ERROR_CODE", { + value: "E1152", + enumerable: false, + configurable: true + }); + } + segments.push(appSegment); + if (appSegment.interceptionMarker) { + const parts = pathname.split(appSegment.interceptionMarker); + if (parts.length !== 2) { + throw Object.defineProperty(new Error(`Invalid interception route: ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E924", + enumerable: false, + configurable: true + }); + } + interceptingRoute = parseAppRouteImpl(parts[0], allowedTypes); + interceptedRoute = parseAppRouteImpl(parts[1], allowedTypes); + interceptionMarker = appSegment.interceptionMarker; + } + } + const dynamicSegments = segments.filter((segment)=>segment.type === 'dynamic'); + return { + normalized: allowedTypes === OnlyRoutableSegments, + pathname, + segments, + dynamicSegments, + interceptionMarker, + interceptingRoute, + interceptedRoute + }; +} +function parseNormalizedAppRoute(pathname) { + return parseAppRouteImpl(pathname, OnlyRoutableSegments); +} +function parseAppRouteWithSlots(pathname) { + return parseAppRouteImpl(pathname, AllowParallelSegments); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addLocale", + ()=>addLocale +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)"); +; +; +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, '/api')) return path; + if ((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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["addPathPrefix"])(path, `/${locale}`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathPrefix", + ()=>addPathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)"); +; +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${prefix}${pathname}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathSuffix", + ()=>addPathSuffix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)"); +; +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${pathname}${suffix}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "compareAppPaths", + ()=>compareAppPaths, + "normalizeAppPath", + ()=>normalizeAppPath, + "normalizeRscURL", + ()=>normalizeRscURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [middleware] (ecmascript)"); +; +; +function normalizeAppPath(route) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(route.split('/').reduce((pathname, segment, index, segments)=>{ + // Empty segments are ignored. + if (!segment) { + return pathname; + } + // Groups are ignored. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isGroupSegment"])(segment)) { + return pathname; + } + // Parallel segments are ignored. + if (segment[0] === '@') { + return pathname; + } + // The last segment (if it's a leaf) should be ignored. + if ((segment === 'page' || segment === 'route') && index === segments.length - 1) { + return pathname; + } + return `${pathname}/${segment}`; + }, '')); +} +function compareAppPaths(a, b) { + const aHasSlot = a.includes('/@'); + const bHasSlot = b.includes('/@'); + if (aHasSlot && !bHasSlot) return -1; + if (!aHasSlot && bHasSlot) return 1; + return a.localeCompare(b); +} +function normalizeRscURL(url) { + return url.replace(/\.rsc($|\?)/, '$1'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "computeCacheBustingSearchParam", + ()=>computeCacheBustingSearchParam, + "computeLegacyCacheBustingSearchParam", + ()=>computeLegacyCacheBustingSearchParam +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/hash.js [middleware] (ecmascript)"); +; +const CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12; +const textEncoder = new TextEncoder(); +function encodeCacheBustingSearchParam(bytes) { + let binary = ''; + for(let i = 0; i < bytes.length; i++){ + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} +function normalizeCacheBustingInput(value) { + if (value === undefined) { + return '0'; + } + return Array.isArray(value) ? value.join(',') : value; +} +function createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) { + return null; + } + return [ + prefetchHeader ?? '0', + normalizeCacheBustingInput(segmentPrefetchHeader), + normalizeCacheBustingInput(stateTreeHeader), + normalizeCacheBustingInput(nextUrlHeader) + ].join(','); +} +async function computeCacheBustingSearchParamFromInput(input) { + // Truncate SHA-256 to 96 bits to keep `_rsc` compact + const digest = await globalThis.crypto.subtle.digest('SHA-256', textEncoder.encode(input)); + return encodeCacheBustingSearchParam(new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)); +} +async function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return computeCacheBustingSearchParamFromInput(input); +} +function computeLegacyCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["hexHash"])(input); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatNextPathnameInfo", + ()=>formatNextPathnameInfo +]); +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$add$2d$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.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$add$2d$path$2d$suffix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.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$add$2d$locale$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [middleware] (ecmascript)"); +; +; +; +; +function formatNextPathnameInfo(info) { + let pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["addLocale"])(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (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"])(pathname); + } + if (info.buildId) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["addPathSuffix"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["addPathSuffix"])(pathname, '/') : pathname : (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"])(pathname); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-url.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatUrl", + ()=>formatUrl, + "formatWithValidation", + ()=>formatWithValidation, + "urlObjectKeys", + ()=>urlObjectKeys +]); +// Format function modified from nodejs +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/querystring.js [middleware] (ecmascript)"); +; +const slashedProtocols = /https?|ftp|gopher|file/; +function formatUrl(urlObj) { + let { auth, hostname } = urlObj; + let protocol = urlObj.protocol || ''; + let pathname = urlObj.pathname || ''; + let hash = urlObj.hash || ''; + let query = urlObj.query || ''; + let host = false; + auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''; + if (urlObj.host) { + host = auth + urlObj.host; + } else if (hostname) { + host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname); + if (urlObj.port) { + host += ':' + urlObj.port; + } + } + if (query && typeof query === 'object') { + query = String(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["urlQueryToSearchParams"](query)); + } + let search = urlObj.search || query && `?${query}` || ''; + if (protocol && !protocol.endsWith(':')) protocol += ':'; + if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname[0] !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + if (hash && hash[0] !== '#') hash = '#' + hash; + if (search && search[0] !== '?') search = '?' + search; + pathname = pathname.replace(/[?#]/g, encodeURIComponent); + search = search.replace('#', '%23'); + return `${protocol}${host}${pathname}${search}${hash}`; +} +const urlObjectKeys = [ + 'auth', + 'hash', + 'host', + 'hostname', + 'href', + 'path', + 'pathname', + 'port', + 'protocol', + 'query', + 'search', + 'slashes' +]; +function formatWithValidation(url) { + if ("TURBOPACK compile-time truthy", 1) { + if (url !== null && typeof url === 'object') { + Object.keys(url).forEach((key)=>{ + if (!urlObjectKeys.includes(key)) { + console.warn(`Unknown key passed via urlObject into url.format: ${key}`); + } + }); + } + } + return formatUrl(url); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-dynamic-param.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PARAMETER_PATTERN", + ()=>PARAMETER_PATTERN, + "getDynamicParam", + ()=>getDynamicParam, + "interpolateParallelRouteParams", + ()=>interpolateParallelRouteParams, + "parseMatchedParameter", + ()=>parseMatchedParameter, + "parseParameter", + ()=>parseParameter +]); +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$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.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$routes$2f$app$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/routes/app.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$resolve$2d$param$2d$value$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/resolve-param-value.js [middleware] (ecmascript)"); +; +; +; +; +/** + * Gets the value of a param from the params object. This correctly handles the + * case where the param is a fallback route param and encodes the resulting + * value. + * + * @param interpolatedParams - The params object. + * @param segmentKey - The key of the segment. + * @param fallbackRouteParams - The fallback route params. + * @returns The value of the param. + */ function getParamValue(interpolatedParams, segmentKey, fallbackRouteParams) { + let value = interpolatedParams[segmentKey]; + if (fallbackRouteParams?.has(segmentKey)) { + // We know that the fallback route params has the segment key because we + // checked that above. + const [searchValue] = fallbackRouteParams.get(segmentKey); + value = searchValue; + } else if (Array.isArray(value)) { + value = value.map((i)=>encodeURIComponent(i)); + } else if (typeof value === 'string') { + value = encodeURIComponent(value); + } + return value; +} +function interpolateParallelRouteParams(loaderTree, params, pagePath, fallbackRouteParams) { + const interpolated = structuredClone(params); + // Stack-based traversal with depth tracking + const stack = [ + { + tree: loaderTree, + depth: 0 + } + ]; + // Parse the route from the provided page path. + const route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$routes$2f$app$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseNormalizedAppRoute"])(pagePath); + while(stack.length > 0){ + const { tree, depth } = stack.pop(); + const { segment, parallelRoutes } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseLoaderTree"])(tree); + const appSegment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$routes$2f$app$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseAppRouteSegment"])(segment); + if (appSegment?.type === 'dynamic' && !interpolated.hasOwnProperty(appSegment.param.paramName) && // If the param is in the fallback route params, we don't need to + // interpolate it because it's already marked as being unknown. + !fallbackRouteParams?.has(appSegment.param.paramName)) { + const { paramName, paramType } = appSegment.param; + const paramValue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$resolve$2d$param$2d$value$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["resolveParamValue"])(paramName, paramType, depth, route, interpolated); + if (paramValue !== undefined) { + interpolated[paramName] = paramValue; + } else if (paramType !== 'optional-catchall') { + 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"](`Could not resolve param value for segment: ${paramName}`), "__NEXT_ERROR_CODE", { + value: "E932", + enumerable: false, + configurable: true + }); + } + } + // Calculate next depth - increment if this is not a route group and not empty + let nextDepth = depth; + if (appSegment && appSegment.type !== 'route-group' && appSegment.type !== 'parallel-route') { + nextDepth++; + } + // Add all parallel routes to the stack for processing + for (const parallelRoute of Object.values(parallelRoutes)){ + stack.push({ + tree: parallelRoute, + depth: nextDepth + }); + } + } + return interpolated; +} +function getDynamicParam(interpolatedParams, segmentKey, dynamicParamType, fallbackRouteParams, staticSiblings) { + let value = getParamValue(interpolatedParams, segmentKey, fallbackRouteParams); + // handle the case where an optional catchall does not have a value, + // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard` + if (!value || value.length === 0) { + if (dynamicParamType === 'oc') { + return { + param: segmentKey, + value: null, + type: dynamicParamType, + treeSegment: [ + segmentKey, + '', + dynamicParamType, + staticSiblings + ] + }; + } + 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 value for segment key: "${segmentKey}" with dynamic param type: ${dynamicParamType}`), "__NEXT_ERROR_CODE", { + value: "E864", + enumerable: false, + configurable: true + }); + } + const paramCacheKey = Array.isArray(value) ? value.join('/') : value; + return { + param: segmentKey, + // The value that is passed to user code. + value, + // The value that is rendered in the router tree. + // TODO: If the number of static siblings exceeds some threshold (e.g., + // dozens or hundreds), consider sending a Bloom filter instead of the full + // array to reduce payload size. The client would then use the Bloom filter + // to check membership with a small false positive rate. + treeSegment: [ + segmentKey, + paramCacheKey, + dynamicParamType, + staticSiblings + ], + type: dynamicParamType + }; +} +const PARAMETER_PATTERN = /^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/; +function parseParameter(param) { + const match = param.match(PARAMETER_PATTERN); + if (!match) { + return parseMatchedParameter(param); + } + return parseMatchedParameter(match[2]); +} +function parseMatchedParameter(param) { + const optional = param.startsWith('[') && param.endsWith(']'); + if (optional) { + param = param.slice(1, -1); + } + const repeat = param.startsWith('...'); + if (repeat) { + param = param.slice(3); + } + return { + key: param, + repeat, + optional + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getNextPathnameInfo", + ()=>getNextPathnameInfo +]); +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$remove$2d$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)"); +; +; +; +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathHasPrefix"])(info.pathname, basePath)) { + info.pathname = (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$path$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["removePathPrefix"])(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (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"])(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (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"])(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-segment-param.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getParamProperties", + ()=>getParamProperties, + "getSegmentParam", + ()=>getSegmentParam, + "isCatchAll", + ()=>isCatchAll +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [middleware] (ecmascript)"); +; +function getSegmentParam(segment) { + const interceptionMarker = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].find((marker)=>segment.startsWith(marker)); + // if an interception marker is part of the path segment, we need to jump ahead + // to the relevant portion for param parsing + if (interceptionMarker) { + segment = segment.slice(interceptionMarker.length); + } + if (segment.startsWith('[[...') && segment.endsWith(']]')) { + return { + // TODO-APP: Optional catchall does not currently work with parallel routes, + // so for now aren't handling a potential interception marker. + paramType: 'optional-catchall', + paramName: segment.slice(5, -2) + }; + } + if (segment.startsWith('[...') && segment.endsWith(']')) { + return { + paramType: interceptionMarker ? `catchall-intercepted-${interceptionMarker}` : 'catchall', + paramName: segment.slice(4, -1) + }; + } + if (segment.startsWith('[') && segment.endsWith(']')) { + return { + paramType: interceptionMarker ? `dynamic-intercepted-${interceptionMarker}` : 'dynamic', + paramName: segment.slice(1, -1) + }; + } + return null; +} +function isCatchAll(type) { + return type === 'catchall' || type === 'catchall-intercepted-(..)(..)' || type === 'catchall-intercepted-(.)' || type === 'catchall-intercepted-(..)' || type === 'catchall-intercepted-(...)' || type === 'optional-catchall'; +} +function getParamProperties(paramType) { + let repeat = false; + let optional = false; + switch(paramType){ + case 'catchall': + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + repeat = true; + break; + case 'optional-catchall': + repeat = true; + optional = true; + break; + case 'dynamic': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + break; + default: + paramType; + } + return { + repeat, + optional + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [middleware] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [middleware] (ecmascript)"); +; +; +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-prefix-from-param-type.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "interceptionPrefixFromParamType", + ()=>interceptionPrefixFromParamType +]); +function interceptionPrefixFromParamType(paramType) { + switch(paramType){ + case 'catchall-intercepted-(..)(..)': + case 'dynamic-intercepted-(..)(..)': + return '(..)(..)'; + case 'catchall-intercepted-(.)': + case 'dynamic-intercepted-(.)': + return '(.)'; + case 'catchall-intercepted-(..)': + case 'dynamic-intercepted-(..)': + return '(..)'; + case 'catchall-intercepted-(...)': + case 'dynamic-intercepted-(...)': + return '(...)'; + case 'catchall': + case 'dynamic': + case 'optional-catchall': + default: + return null; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERCEPTION_ROUTE_MARKERS", + ()=>INTERCEPTION_ROUTE_MARKERS, + "extractInterceptionRouteInformation", + ()=>extractInterceptionRouteInformation, + "isInterceptionRouteAppPath", + ()=>isInterceptionRouteAppPath +]); +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)"); +; +const INTERCEPTION_ROUTE_MARKERS = [ + '(..)(..)', + '(.)', + '(..)', + '(...)' +]; +function isInterceptionRouteAppPath(path) { + // TODO-APP: add more serious validation + return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined; +} +function extractInterceptionRouteInformation(path) { + let interceptingRoute; + let marker; + let interceptedRoute; + for (const segment of path.split('/')){ + marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + ; + [interceptingRoute, interceptedRoute] = path.split(marker, 2); + break; + } + } + if (!interceptingRoute || !marker || !interceptedRoute) { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`), "__NEXT_ERROR_CODE", { + value: "E269", + enumerable: false, + configurable: true + }); + } + interceptingRoute = (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"])(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed + ; + switch(marker){ + case '(.)': + // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route + if (interceptingRoute === '/') { + interceptedRoute = `/${interceptedRoute}`; + } else { + interceptedRoute = interceptingRoute + '/' + interceptedRoute; + } + break; + case '(..)': + // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route + if (interceptingRoute === '/') { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`), "__NEXT_ERROR_CODE", { + value: "E207", + enumerable: false, + configurable: true + }); + } + interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/'); + break; + case '(...)': + // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route + interceptedRoute = '/' + interceptedRoute; + break; + case '(..)(..)': + // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route + const splitInterceptingRoute = interceptingRoute.split('/'); + if (splitInterceptingRoute.length <= 2) { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`), "__NEXT_ERROR_CODE", { + value: "E486", + enumerable: false, + configurable: true + }); + } + interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/'); + break; + default: + throw Object.defineProperty(new Error('Invariant: unexpected marker'), "__NEXT_ERROR_CODE", { + value: "E112", + enumerable: false, + configurable: true + }); + } + return { + interceptingRoute, + interceptedRoute + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isDynamicRoute", + ()=>isDynamicRoute +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [middleware] (ecmascript)"); +; +// Identify /.*[param].*/ in route string +const TEST_ROUTE = /\/[^/]*\[[^/]+\][^/]*(?=\/|$)/; +// Identify /[param]/ in route string +const TEST_STRICT_ROUTE = /\/\[[^/]+\](?=\/|$)/; +function isDynamicRoute(route, strict = true) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isInterceptionRouteAppPath"])(route)) { + 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$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["extractInterceptionRouteInformation"])(route).interceptedRoute; + } + if (strict) { + return TEST_STRICT_ROUTE.test(route); + } + return TEST_ROUTE.test(route); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseLoaderTree", + ()=>parseLoaderTree +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [middleware] (ecmascript)"); +; +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules, staticSiblings] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"] ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes, + staticSiblings + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ __turbopack_context__.s([ + "parsePath", + ()=>parsePath +]); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-relative-url.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseRelativeUrl", + ()=>parseRelativeUrl +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/querystring.js [middleware] (ecmascript)"); +; +; +function parseRelativeUrl(url, base, parseQuery = true) { + const globalBase = new URL(("TURBOPACK compile-time truthy", 1) ? 'http://n' : "TURBOPACK unreachable"); + const resolvedBase = base ? new URL(base, globalBase) : url.startsWith('.') ? new URL(("TURBOPACK compile-time truthy", 1) ? 'http://n' : "TURBOPACK unreachable") : globalBase; + const { pathname, searchParams, search, hash, href, origin } = url.startsWith('/') ? // Not using `origin` to support other protocols + new URL(`${resolvedBase.protocol}//${resolvedBase.host}${url}`) : new URL(url, resolvedBase); + if (origin !== globalBase.origin) { + throw Object.defineProperty(new Error(`invariant: invalid relative URL, router received ${url}`), "__NEXT_ERROR_CODE", { + value: "E159", + enumerable: false, + configurable: true + }); + } + return { + auth: null, + host: null, + hostname: null, + pathname, + port: null, + protocol: null, + query: parseQuery ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["searchParamsToUrlQuery"])(searchParams) : undefined, + search, + hash, + href: href.slice(origin.length), + // We don't know for relative URLs at this point since we set a custom, internal + // base that isn't surfaced to users. + slashes: null + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-url.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseUrl", + ()=>parseUrl +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/querystring.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$parse$2d$relative$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-relative-url.js [middleware] (ecmascript)"); +; +; +function parseUrl(url) { + if (url.startsWith('/')) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$relative$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseRelativeUrl"])(url); + } + const parsedURL = new URL(url); + const username = parsedURL.username; + const password = parsedURL.password; + const auth = username ? password ? `${username}:${password}` : username : null; + const pathname = parsedURL.pathname; + const search = parsedURL.search; + return { + auth, + hash: parsedURL.hash, + hostname: parsedURL.hostname, + href: parsedURL.href, + pathname, + port: parsedURL.port, + protocol: parsedURL.protocol, + query: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["searchParamsToUrlQuery"])(parsedURL.searchParams), + search, + origin: parsedURL.origin, + slashes: parsedURL.href.slice(parsedURL.protocol.length, parsedURL.protocol.length + 2) === '//' + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "pathHasPrefix", + ()=>pathHasPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)"); +; +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parsePath"])(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-match.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getPathMatch", + ()=>getPathMatch +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/path-to-regexp/index.js [middleware] (ecmascript)"); +; +; +function getPathMatch(path, options) { + const keys = []; + const regexp = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathToRegexp"])(path, keys, { + delimiter: '/', + sensitive: typeof options?.sensitive === 'boolean' ? options.sensitive : false, + strict: options?.strict + }); + const matcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["regexpToFunction"])(options?.regexModifier ? new RegExp(options.regexModifier(regexp.source), regexp.flags) : regexp, keys); + /** + * A matcher function that will check if a given pathname matches the path + * given in the builder function. When the path does not match it will return + * `false` but if it does it will return an object with the matched params + * merged with the params provided in the second argument. + */ return (pathname, params)=>{ + // If no pathname is provided it's not a match. + if (typeof pathname !== 'string') return false; + const match = matcher(pathname); + // If the path did not match `false` will be returned. + if (!match) return false; + /** + * If unnamed params are not allowed they must be removed from + * the matched parameters. path-to-regexp uses "string" for named and + * "number" for unnamed parameters. + */ if (options?.removeUnnamedParams) { + for (const key of keys){ + if (typeof key.name === 'number') { + delete match.params[key.name]; + } + } + } + return { + ...params, + ...match.params + }; + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/prepare-destination.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "compileNonPath", + ()=>compileNonPath, + "matchHas", + ()=>matchHas, + "parseDestination", + ()=>parseDestination, + "prepareDestination", + ()=>prepareDestination +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/escape-regexp.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$parse$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-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$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-match-utils.js [middleware] (ecmascript)"); +; +; +; +; +; +/** + * Ensure only a-zA-Z are used for param names for proper interpolating + * with path-to-regexp + */ function getSafeParamName(paramName) { + let newParamName = ''; + for(let i = 0; i < paramName.length; i++){ + const charCode = paramName.charCodeAt(i); + if (charCode > 64 && charCode < 91 || // A-Z + charCode > 96 && charCode < 123 // a-z + ) { + newParamName += paramName[i]; + } + } + return newParamName; +} +function escapeSegment(str, segmentName) { + return str.replace(new RegExp(`:${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(segmentName)}`, 'g'), `__ESC_COLON_${segmentName}`); +} +function unescapeSegments(str) { + return str.replace(/__ESC_COLON_/gi, ':'); +} +function matchHas(req, query, has = [], missing = []) { + const params = {}; + const hasMatch = (hasItem)=>{ + let value; + let key = hasItem.key; + switch(hasItem.type){ + case 'header': + { + key = key.toLowerCase(); + value = req.headers[key]; + break; + } + case 'cookie': + { + if ('cookies' in req) { + value = req.cookies[hasItem.key]; + } else { + const cookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["getCookieParser"])(req.headers)(); + value = cookies[hasItem.key]; + } + break; + } + case 'query': + { + value = query[key]; + break; + } + case 'host': + { + const { host } = req?.headers || {}; + // remove port from host if present + const hostname = host?.split(':', 1)[0].toLowerCase(); + value = hostname; + break; + } + default: + { + break; + } + } + if (!hasItem.value && value) { + params[getSafeParamName(key)] = value; + return true; + } else if (value) { + const matcher = new RegExp(`^${hasItem.value}$`); + const matches = Array.isArray(value) ? value.slice(-1)[0].match(matcher) : value.match(matcher); + if (matches) { + if (Array.isArray(matches)) { + if (matches.groups) { + Object.keys(matches.groups).forEach((groupKey)=>{ + params[groupKey] = matches.groups[groupKey]; + }); + } else if (hasItem.type === 'host' && matches[0]) { + params.host = matches[0]; + } + } + return true; + } + } + return false; + }; + const allMatch = has.every((item)=>hasMatch(item)) && !missing.some((item)=>hasMatch(item)); + if (allMatch) { + return params; + } + return false; +} +function compileNonPath(value, params) { + if (!value.includes(':')) { + return value; + } + for (const key of Object.keys(params)){ + if (value.includes(`:${key}`)) { + value = value.replace(new RegExp(`:${key}\\*`, 'g'), `:${key}--ESCAPED_PARAM_ASTERISKS`).replace(new RegExp(`:${key}\\?`, 'g'), `:${key}--ESCAPED_PARAM_QUESTION`).replace(new RegExp(`:${key}\\+`, 'g'), `:${key}--ESCAPED_PARAM_PLUS`).replace(new RegExp(`:${key}(?!\\w)`, 'g'), `--ESCAPED_PARAM_COLON${key}`); + } + } + value = value.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g, '\\$1').replace(/--ESCAPED_PARAM_PLUS/g, '+').replace(/--ESCAPED_PARAM_COLON/g, ':').replace(/--ESCAPED_PARAM_QUESTION/g, '?').replace(/--ESCAPED_PARAM_ASTERISKS/g, '*'); + // the value needs to start with a forward-slash to be compiled + // correctly + return (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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["safeCompile"])(`/${value}`, { + validate: false + })(params).slice(1); +} +function parseDestination(args) { + let escaped = args.destination; + for (const param of Object.keys({ + ...args.params, + ...args.query + })){ + if (!param) continue; + escaped = escapeSegment(escaped, param); + } + const parsed = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$url$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseUrl"])(escaped); + let pathname = parsed.pathname; + if (pathname) { + pathname = unescapeSegments(pathname); + } + let href = parsed.href; + if (href) { + href = unescapeSegments(href); + } + let hostname = parsed.hostname; + if (hostname) { + hostname = unescapeSegments(hostname); + } + let hash = parsed.hash; + if (hash) { + hash = unescapeSegments(hash); + } + let search = parsed.search; + if (search) { + search = unescapeSegments(search); + } + let origin = parsed.origin; + if (origin) { + origin = unescapeSegments(origin); + } + return { + ...parsed, + pathname, + hostname, + href, + hash, + search, + origin + }; +} +function prepareDestination(args) { + const parsedDestination = parseDestination(args); + const { hostname: destHostname, query: destQuery, search: destSearch } = parsedDestination; + // The following code assumes that the pathname here includes the hash if it's + // present. + let destPath = parsedDestination.pathname; + if (parsedDestination.hash) { + destPath = `${destPath}${parsedDestination.hash}`; + } + const destParams = []; + const destPathParamKeys = []; + (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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["safePathToRegexp"])(destPath, destPathParamKeys); + for (const key of destPathParamKeys){ + destParams.push(key.name); + } + if (destHostname) { + const destHostnameParamKeys = []; + (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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["safePathToRegexp"])(destHostname, destHostnameParamKeys); + for (const key of destHostnameParamKeys){ + destParams.push(key.name); + } + } + const destPathCompiler = (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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["safeCompile"])(destPath, // have already validated before we got to this point and validating + // breaks compiling destinations with named pattern params from the source + // e.g. /something:hello(.*) -> /another/:hello is broken with validation + // since compile validation is meant for reversing and not for inserting + // params from a separate path-regex into another + { + validate: false + }); + let destHostnameCompiler; + if (destHostname) { + destHostnameCompiler = (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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["safeCompile"])(destHostname, { + validate: false, + encode: encodeURIComponent + }); + } + // update any params in query values + for (const [key, strOrArray] of Object.entries(destQuery)){ + // the value needs to start with a forward-slash to be compiled + // correctly + if (Array.isArray(strOrArray)) { + destQuery[key] = strOrArray.map((value)=>compileNonPath(unescapeSegments(value), args.params)); + } else if (typeof strOrArray === 'string') { + destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params); + } + } + // add path params to query if it's not a redirect and not + // already defined in destination query or path + let paramKeys = Object.keys(args.params).filter((name)=>name !== 'nextInternalLocale'); + if (args.appendParamsToQuery && !paramKeys.some((key)=>destParams.includes(key))) { + for (const key of paramKeys){ + if (!(key in destQuery)) { + destQuery[key] = args.params[key]; + } + } + } + let newUrl; + // The compiler also that the interception route marker is an unnamed param, hence '0', + // so we need to add it to the params object. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["isInterceptionRouteAppPath"])(destPath)) { + for (const segment of destPath.split('/')){ + const marker = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].find((m)=>segment.startsWith(m)); + if (marker) { + if (marker === '(..)(..)') { + args.params['0'] = '(..)'; + args.params['1'] = '(..)'; + } else { + args.params['0'] = marker; + } + break; + } + } + } + try { + newUrl = destPathCompiler(args.params); + const [pathname, hash] = newUrl.split('#', 2); + if (destHostnameCompiler) { + parsedDestination.hostname = destHostnameCompiler(args.params); + } + parsedDestination.pathname = pathname; + parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}`; + parsedDestination.search = destSearch ? compileNonPath(destSearch, args.params) : ''; + } catch (err) { + if (err.message.match(/Expected .*? to not repeat, but got an array/)) { + throw Object.defineProperty(new Error(`To use a multi-match in the destination you must add \`*\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`), "__NEXT_ERROR_CODE", { + value: "E329", + enumerable: false, + configurable: true + }); + } + throw err; + } + // Query merge order lowest priority to highest + // 1. initial URL query values + // 2. path segment values + // 3. destination specified query values + parsedDestination.query = { + ...args.query, + ...parsedDestination.query + }; + return { + newUrl, + destQuery, + parsedDestination + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/querystring.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "assign", + ()=>assign, + "searchParamsToUrlQuery", + ()=>searchParamsToUrlQuery, + "urlQueryToSearchParams", + ()=>urlQueryToSearchParams +]); +function searchParamsToUrlQuery(searchParams) { + const query = {}; + for (const [key, value] of searchParams.entries()){ + const existing = query[key]; + if (typeof existing === 'undefined') { + query[key] = value; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + query[key] = [ + existing, + value + ]; + } + } + return query; +} +function stringifyUrlQueryParam(param) { + if (typeof param === 'string') { + return param; + } + if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') { + return String(param); + } else { + return ''; + } +} +function urlQueryToSearchParams(query) { + const searchParams = new URLSearchParams(); + for (const [key, value] of Object.entries(query)){ + if (Array.isArray(value)) { + for (const item of value){ + searchParams.append(key, stringifyUrlQueryParam(item)); + } + } else { + searchParams.set(key, stringifyUrlQueryParam(value)); + } + } + return searchParams; +} +function assign(target, ...searchParamsList) { + for (const searchParams of searchParamsList){ + for (const key of searchParams.keys()){ + target.delete(key); + } + for (const [key, value] of searchParams.entries()){ + target.append(key, value); + } + } + return target; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * The result of parsing a URL relative to a base URL. + */ __turbopack_context__.s([ + "getRelativeURL", + ()=>getRelativeURL, + "parseRelativeURL", + ()=>parseRelativeURL +]); +function parseRelativeURL(url, base) { + const baseURL = typeof base === 'string' ? new URL(base) : base; + const relative = new URL(url, base); + // The URL is relative if the origin is the same as the base URL. + const isRelative = relative.origin === baseURL.origin; + return { + url: isRelative ? relative.toString().slice(baseURL.origin.length) : relative.toString(), + isRelative + }; +} +function getRelativeURL(url, base) { + const relative = parseRelativeURL(url, base); + return relative.url; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "removePathPrefix", + ()=>removePathPrefix +]); +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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)"); +; +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(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$has$2d$prefix$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathHasPrefix"])(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Removes the trailing slash for a given route or page path. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * + * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of + * compiling and executing a RegExp on every call (~3-5x faster). + */ __turbopack_context__.s([ + "removeTrailingSlash", + ()=>removeTrailingSlash +]); +function removeTrailingSlash(route) { + return route.charCodeAt(route.length - 1) === 47 && route.length > 1 ? route.slice(0, -1) : route; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/resolve-param-value.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "resolveParamValue", + ()=>resolveParamValue +]); +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$router$2f$utils$2f$interception$2d$prefix$2d$from$2d$param$2d$type$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-prefix-from-param-type.js [middleware] (ecmascript)"); +; +; +/** + * Extracts the param value from a path segment, handling interception markers + * based on the expected param type. + * + * @param pathSegment - The path segment to extract the value from + * @param params - The current params object for resolving dynamic param references + * @param paramType - The expected param type which may include interception marker info + * @returns The extracted param value + */ function getParamValueFromSegment(pathSegment, params, paramType) { + // If the segment is dynamic, resolve it from the params object + if (pathSegment.type === 'dynamic') { + return params[pathSegment.param.paramName]; + } + // If the paramType indicates this is an intercepted param, strip the marker + // that matches the interception marker in the param type + const interceptionPrefix = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$prefix$2d$from$2d$param$2d$type$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["interceptionPrefixFromParamType"])(paramType); + if (interceptionPrefix === pathSegment.interceptionMarker) { + return pathSegment.name.replace(pathSegment.interceptionMarker, ''); + } + // For static segments, use the name + return pathSegment.name; +} +function resolveParamValue(paramName, paramType, depth, route, params) { + switch(paramType){ + case 'catchall': + case 'optional-catchall': + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + // For catchall routes, derive from pathname using depth to determine + // which segments to use + const processedSegments = []; + // Process segments to handle any embedded dynamic params + for(let index = depth; index < route.segments.length; index++){ + const pathSegment = route.segments[index]; + if (pathSegment.type === 'static') { + let value = pathSegment.name; + // For intercepted catch-all params, strip the marker from the first segment + const interceptionPrefix = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$prefix$2d$from$2d$param$2d$type$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["interceptionPrefixFromParamType"])(paramType); + if (interceptionPrefix && index === depth && interceptionPrefix === pathSegment.interceptionMarker) { + // Strip the interception marker from the value + value = value.replace(pathSegment.interceptionMarker, ''); + } + processedSegments.push(value); + } else { + // If the segment is a param placeholder, check if we have its value + if (!params.hasOwnProperty(pathSegment.param.paramName)) { + // If the segment is an optional catchall, we can break out of the + // loop because it's optional! + if (pathSegment.param.paramType === 'optional-catchall') { + break; + } + // Unknown param placeholder in pathname - can't derive full value + return undefined; + } + // If the segment matches a param, use the param value + // We don't encode values here as that's handled during retrieval. + const paramValue = params[pathSegment.param.paramName]; + if (Array.isArray(paramValue)) { + processedSegments.push(...paramValue); + } else { + processedSegments.push(paramValue); + } + } + } + if (processedSegments.length > 0) { + return processedSegments; + } else if (paramType === 'optional-catchall') { + return undefined; + } else { + // We shouldn't be able to match a catchall segment without any path + // segments if it's not an optional catchall + 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"](`Unexpected empty path segments match for a route "${route.pathname}" with param "${paramName}" of type "${paramType}"`), "__NEXT_ERROR_CODE", { + value: "E931", + enumerable: false, + configurable: true + }); + } + case 'dynamic': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + // For regular dynamic parameters, take the segment at this depth + if (depth < route.segments.length) { + const pathSegment = route.segments[depth]; + // Check if the segment at this depth is a placeholder for an unknown param + if (pathSegment.type === 'dynamic' && !params.hasOwnProperty(pathSegment.param.paramName)) { + // The segment is a placeholder like [category] and we don't have the value + return undefined; + } + // If the segment matches a param, use the param value from params object + // Otherwise it's a static segment, just use it directly + // We don't encode values here as that's handled during retrieval + return getParamValueFromSegment(pathSegment, params, paramType); + } + return undefined; + default: + paramType; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-match-utils.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "safeCompile", + ()=>safeCompile, + "safePathToRegexp", + ()=>safePathToRegexp, + "safeRegexpToFunction", + ()=>safeRegexpToFunction, + "safeRouteMatcher", + ()=>safeRouteMatcher +]); +/** + * Client-safe utilities for route matching that don't import server-side + * utilities to avoid bundling issues with Turbopack + */ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/path-to-regexp/index.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/route-pattern-normalizer.js [middleware] (ecmascript)"); +; +; +function safePathToRegexp(route, keys, options) { + if (typeof route !== 'string') { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathToRegexp"])(route, keys, options); + } + // Check if normalization is needed and cache the result + const needsNormalization = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["hasAdjacentParameterIssues"])(route); + const routeToUse = needsNormalization ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route) : route; + try { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathToRegexp"])(routeToUse, keys, options); + } catch (error) { + // Only try normalization if we haven't already normalized + if (!needsNormalization) { + try { + const normalizedRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["pathToRegexp"])(normalizedRoute, keys, options); + } catch (retryError) { + // If that doesn't work, fall back to original error + throw error; + } + } + throw error; + } +} +function safeCompile(route, options) { + // Check if normalization is needed and cache the result + const needsNormalization = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["hasAdjacentParameterIssues"])(route); + const routeToUse = needsNormalization ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route) : route; + try { + const compiler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["compile"])(routeToUse, options); + // If we normalized the route, wrap the compiler to strip separators from output + // The normalization inserts _NEXTSEP_ as a literal string in the pattern to satisfy + // path-to-regexp validation, but we don't want it in the final compiled URL + if (needsNormalization) { + return (params)=>{ + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stripNormalizedSeparators"])(compiler(params)); + }; + } + return compiler; + } catch (error) { + // Only try normalization if we haven't already normalized + if (!needsNormalization) { + try { + const normalizedRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route); + const compiler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["compile"])(normalizedRoute, options); + // Wrap the compiler to strip separators from output + return (params)=>{ + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stripNormalizedSeparators"])(compiler(params)); + }; + } catch (retryError) { + // If that doesn't work, fall back to original error + throw error; + } + } + throw error; + } +} +function safeRegexpToFunction(regexp, keys) { + const originalMatcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["regexpToFunction"])(regexp, keys || []); + return (pathname)=>{ + const result = originalMatcher(pathname); + if (!result) return false; + // Clean parameters before returning + return { + ...result, + params: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stripParameterSeparators"])(result.params) + }; + }; +} +function safeRouteMatcher(matcherFn) { + return (pathname)=>{ + const result = matcherFn(pathname); + if (!result) return false; + // Clean parameters before returning + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["stripParameterSeparators"])(result); + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-matcher.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRouteMatcher", + ()=>getRouteMatcher +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-match-utils.js [middleware] (ecmascript)"); +; +; +function getRouteMatcher({ re, groups }) { + const rawMatcher = (pathname)=>{ + const routeMatch = re.exec(pathname); + if (!routeMatch) return false; + const decode = (param)=>{ + try { + return decodeURIComponent(param); + } catch { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["DecodeError"]('failed to decode param'), "__NEXT_ERROR_CODE", { + value: "E528", + enumerable: false, + configurable: true + }); + } + }; + const params = {}; + for (const [key, group] of Object.entries(groups)){ + const match = routeMatch[group.pos]; + if (match !== undefined) { + if (group.repeat) { + params[key] = match.split('/').map((entry)=>decode(entry)); + } else { + params[key] = decode(match); + } + } + } + return params; + }; + // Wrap with safe matcher to handle parameter cleaning + return (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$match$2d$utils$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["safeRouteMatcher"])(rawMatcher); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/route-regex.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getNamedMiddlewareRegex", + ()=>getNamedMiddlewareRegex, + "getNamedRouteRegex", + ()=>getNamedRouteRegex, + "getRouteRegex", + ()=>getRouteRegex +]); +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$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [middleware] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/escape-regexp.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$get$2d$dynamic$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-dynamic-param.js [middleware] (ecmascript)"); +; +; +; +; +; +function getParametrizedRoute(route, includeSuffix, includePrefix) { + const groups = {}; + let groupIndex = 1; + const segments = []; + for (const segment of (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"])(route).slice(1).split('/')){ + const markerMatch = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].find((m)=>segment.startsWith(m)); + const paramMatches = segment.match(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PARAMETER_PATTERN"]) // Check for parameters + ; + if (markerMatch && paramMatches && paramMatches[2]) { + const { key, optional, repeat } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseMatchedParameter"])(paramMatches[2]); + groups[key] = { + pos: groupIndex++, + repeat, + optional + }; + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(markerMatch)}([^/]+?)`); + } else if (paramMatches && paramMatches[2]) { + const { key, repeat, optional } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseMatchedParameter"])(paramMatches[2]); + groups[key] = { + pos: groupIndex++, + repeat, + optional + }; + if (includePrefix && paramMatches[1]) { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[1])}`); + } + let s = repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)'; + // Remove the leading slash if includePrefix already added it. + if (includePrefix && paramMatches[1]) { + s = s.substring(1); + } + segments.push(s); + } else { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(segment)}`); + } + // If there's a suffix, add it to the segments if it's enabled. + if (includeSuffix && paramMatches && paramMatches[3]) { + segments.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[3])); + } + } + return { + parameterizedRoute: segments.join(''), + groups + }; +} +function getRouteRegex(normalizedRoute, { includeSuffix = false, includePrefix = false, excludeOptionalTrailingSlash = false } = {}) { + const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute, includeSuffix, includePrefix); + let re = parameterizedRoute; + if (!excludeOptionalTrailingSlash) { + re += '(?:/)?'; + } + return { + re: new RegExp(`^${re}$`), + groups: groups + }; +} +/** + * Builds a function to generate a minimal routeKey using only a-z and minimal + * number of characters. + */ function buildGetSafeRouteKey() { + let i = 0; + return ()=>{ + let routeKey = ''; + let j = ++i; + while(j > 0){ + routeKey += String.fromCharCode(97 + (j - 1) % 26); + j = Math.floor((j - 1) / 26); + } + return routeKey; + }; +} +function getSafeKeyFromSegment({ interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix, backreferenceDuplicateKeys }) { + const { key, optional, repeat } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["parseMatchedParameter"])(segment); + // replace any non-word characters since they can break + // the named regex + let cleanedKey = key.replace(/\W/g, ''); + if (keyPrefix) { + cleanedKey = `${keyPrefix}${cleanedKey}`; + } + let invalidKey = false; + // check if the key is still invalid and fallback to using a known + // safe key + if (cleanedKey.length === 0 || cleanedKey.length > 30) { + invalidKey = true; + } + if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) { + invalidKey = true; + } + if (invalidKey) { + cleanedKey = getSafeRouteKey(); + } + const duplicateKey = cleanedKey in routeKeys; + if (keyPrefix) { + routeKeys[cleanedKey] = `${keyPrefix}${key}`; + } else { + routeKeys[cleanedKey] = key; + } + // if the segment has an interception marker, make sure that's part of the regex pattern + // this is to ensure that the route with the interception marker doesn't incorrectly match + // the non-intercepted route (ie /app/(.)[username] should not match /app/[username]) + const interceptionPrefix = interceptionMarker ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(interceptionMarker) : ''; + let pattern; + if (duplicateKey && backreferenceDuplicateKeys) { + // Use a backreference to the key to ensure that the key is the same value + // in each of the placeholders. + pattern = `\\k<${cleanedKey}>`; + } else if (repeat) { + pattern = `(?<${cleanedKey}>.+?)`; + } else { + pattern = `(?<${cleanedKey}>[^/]+?)`; + } + return { + key, + pattern: optional ? `(?:/${interceptionPrefix}${pattern})?` : `/${interceptionPrefix}${pattern}`, + cleanedKey: cleanedKey, + optional, + repeat + }; +} +function getNamedParametrizedRoute(route, prefixRouteKeys, includeSuffix, includePrefix, backreferenceDuplicateKeys, reference = { + names: {}, + intercepted: {} +}) { + const getSafeRouteKey = buildGetSafeRouteKey(); + const routeKeys = {}; + const segments = []; + const inverseParts = []; + // Ensure we don't mutate the original reference object. + reference = structuredClone(reference); + for (const segment of (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"])(route).slice(1).split('/')){ + const hasInterceptionMarker = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].some((m)=>segment.startsWith(m)); + const paramMatches = segment.match(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["PARAMETER_PATTERN"]) // Check for parameters + ; + const interceptionMarker = hasInterceptionMarker ? paramMatches?.[1] : undefined; + let keyPrefix; + if (interceptionMarker && paramMatches?.[2]) { + keyPrefix = prefixRouteKeys ? __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"] : undefined; + reference.intercepted[paramMatches[2]] = interceptionMarker; + } else if (paramMatches?.[2] && reference.intercepted[paramMatches[2]]) { + keyPrefix = prefixRouteKeys ? __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"] : undefined; + } else { + keyPrefix = prefixRouteKeys ? __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"] : undefined; + } + if (interceptionMarker && paramMatches && paramMatches[2]) { + // If there's an interception marker, add it to the segments. + const { key, pattern, cleanedKey, repeat, optional } = getSafeKeyFromSegment({ + getSafeRouteKey, + interceptionMarker, + segment: paramMatches[2], + routeKeys, + keyPrefix, + backreferenceDuplicateKeys + }); + segments.push(pattern); + inverseParts.push(`/${paramMatches[1]}:${reference.names[key] ?? cleanedKey}${repeat ? optional ? '*' : '+' : ''}`); + reference.names[key] ??= cleanedKey; + } else if (paramMatches && paramMatches[2]) { + // If there's a prefix, add it to the segments if it's enabled. + if (includePrefix && paramMatches[1]) { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[1])}`); + inverseParts.push(`/${paramMatches[1]}`); + } + const { key, pattern, cleanedKey, repeat, optional } = getSafeKeyFromSegment({ + getSafeRouteKey, + segment: paramMatches[2], + routeKeys, + keyPrefix, + backreferenceDuplicateKeys + }); + // Remove the leading slash if includePrefix already added it. + let s = pattern; + if (includePrefix && paramMatches[1]) { + s = s.substring(1); + } + segments.push(s); + inverseParts.push(`/:${reference.names[key] ?? cleanedKey}${repeat ? optional ? '*' : '+' : ''}`); + reference.names[key] ??= cleanedKey; + } else { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(segment)}`); + inverseParts.push(`/${segment}`); + } + // If there's a suffix, add it to the segments if it's enabled. + if (includeSuffix && paramMatches && paramMatches[3]) { + segments.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$middleware$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[3])); + inverseParts.push(paramMatches[3]); + } + } + return { + namedParameterizedRoute: segments.join(''), + routeKeys, + pathToRegexpPattern: inverseParts.join(''), + reference + }; +} +function getNamedRouteRegex(normalizedRoute, options) { + const result = getNamedParametrizedRoute(normalizedRoute, options.prefixRouteKeys, options.includeSuffix ?? false, options.includePrefix ?? false, options.backreferenceDuplicateKeys ?? false, options.reference); + let namedRegex = result.namedParameterizedRoute; + if (!options.excludeOptionalTrailingSlash) { + namedRegex += '(?:/)?'; + } + return { + ...getRouteRegex(normalizedRoute, options), + namedRegex: `^${namedRegex}$`, + routeKeys: result.routeKeys, + pathToRegexpPattern: result.pathToRegexpPattern, + reference: result.reference + }; +} +function getNamedMiddlewareRegex(normalizedRoute, options) { + const { parameterizedRoute } = getParametrizedRoute(normalizedRoute, false, false); + const { catchAll = true } = options; + if (parameterizedRoute === '/') { + let catchAllRegex = catchAll ? '.*' : ''; + return { + namedRegex: `^/${catchAllRegex}$` + }; + } + const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false, false, false, false, undefined); + let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''; + return { + namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$` + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/segment.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DEFAULT_SEGMENT_KEY", + ()=>DEFAULT_SEGMENT_KEY, + "NOT_FOUND_SEGMENT_KEY", + ()=>NOT_FOUND_SEGMENT_KEY, + "PAGE_SEGMENT_KEY", + ()=>PAGE_SEGMENT_KEY, + "addSearchParamsIfPageSegment", + ()=>addSearchParamsIfPageSegment, + "computeSelectedLayoutSegment", + ()=>computeSelectedLayoutSegment, + "getSegmentValue", + ()=>getSegmentValue, + "getSelectedLayoutSegmentPath", + ()=>getSelectedLayoutSegmentPath, + "isGroupSegment", + ()=>isGroupSegment, + "isParallelRouteSegment", + ()=>isParallelRouteSegment +]); +function getSegmentValue(segment) { + return Array.isArray(segment) ? segment[1] : segment; +} +function isGroupSegment(segment) { + // Use array[0] for performant purpose + return segment[0] === '(' && segment.endsWith(')'); +} +function isParallelRouteSegment(segment) { + return segment.startsWith('@') && segment !== '@children'; +} +function addSearchParamsIfPageSegment(segment, searchParams) { + const isPageSegment = segment.includes(PAGE_SEGMENT_KEY); + if (isPageSegment) { + const stringifiedQuery = JSON.stringify(searchParams); + return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY; + } + return segment; +} +function computeSelectedLayoutSegment(segments, parallelRouteKey) { + if (!segments || segments.length === 0) { + return null; + } + // For 'children', use first segment; for other parallel routes, use last segment + const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1]; + // If the default slot is showing, return null since it's not technically "selected" (it's a fallback) + // Returning an internal value like `__DEFAULT__` would be confusing + return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment; +} +function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { + let node; + if (first) { + // Use the provided parallel route key on the first parallel route + node = tree[1][parallelRouteKey]; + } else { + // After first parallel route prefer children, if there's no children pick the first parallel route. + const parallelRoutes = tree[1]; + node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]; + } + if (!node) return segmentPath; + const segment = node[0]; + let segmentValue = getSegmentValue(segment); + if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) { + return segmentPath; + } + segmentPath.push(segmentValue); + return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); +} +const PAGE_SEGMENT_KEY = '__PAGE__'; +const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; +const NOT_FOUND_SEGMENT_KEY = '/_not-found'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils.js [middleware] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team. + * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting + */ __turbopack_context__.s([ + "DecodeError", + ()=>DecodeError, + "MiddlewareNotFoundError", + ()=>MiddlewareNotFoundError, + "MissingStaticPage", + ()=>MissingStaticPage, + "NormalizeError", + ()=>NormalizeError, + "PageNotFoundError", + ()=>PageNotFoundError, + "SP", + ()=>SP, + "ST", + ()=>ST, + "WEB_VITALS", + ()=>WEB_VITALS, + "execOnce", + ()=>execOnce, + "getDisplayName", + ()=>getDisplayName, + "getLocationOrigin", + ()=>getLocationOrigin, + "getURL", + ()=>getURL, + "isAbsoluteUrl", + ()=>isAbsoluteUrl, + "isResSent", + ()=>isResSent, + "loadGetInitialProps", + ()=>loadGetInitialProps, + "normalizeRepeatedSlashes", + ()=>normalizeRepeatedSlashes, + "stringifyError", + ()=>stringifyError +]); +const WEB_VITALS = [ + 'CLS', + 'FCP', + 'FID', + 'INP', + 'LCP', + 'TTFB' +]; +function execOnce(fn) { + let used = false; + let result; + return (...args)=>{ + if (!used) { + used = true; + result = fn(...args); + } + return result; + }; +} +// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 +// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 +const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/; +const isAbsoluteUrl = (url)=>{ + // Fast path: an absolute URL must start with a letter (the scheme). + // Check for a-z and A-Z without the cost of the regex. + const c = url.charCodeAt(0); + const isLetter = c >= 65 /* A */ && c <= 90 || c >= 97 /* a */ && c <= 122; + /* z */ if (!isLetter) { + return false; + } + return ABSOLUTE_URL_REGEX.test(url); +}; +function getLocationOrigin() { + const { protocol, hostname, port } = window.location; + return `${protocol}//${hostname}${port ? ':' + port : ''}`; +} +function getURL() { + const { href } = window.location; + const origin = getLocationOrigin(); + return href.substring(origin.length); +} +function getDisplayName(Component) { + return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown'; +} +function isResSent(res) { + return res.finished || res.headersSent; +} +function normalizeRepeatedSlashes(url) { + const urlParts = url.split('?'); + const urlNoQuery = urlParts[0]; + return urlNoQuery // first we replace any non-encoded backslashes with forward + // then normalize repeated forward slashes + .replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : ''); +} +async function loadGetInitialProps(App, ctx) { + if ("TURBOPACK compile-time truthy", 1) { + if (App.prototype?.getInitialProps) { + const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1035", + enumerable: false, + configurable: true + }); + } + } + // when called from _app `ctx` is nested in `ctx` + const res = ctx.res || ctx.ctx && ctx.ctx.res; + if (!App.getInitialProps) { + if (ctx.ctx && ctx.Component) { + // @ts-ignore pageProps default + return { + pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx) + }; + } + return {}; + } + const props = await App.getInitialProps(ctx); + if (res && isResSent(res)) { + return props; + } + if (!props) { + const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1025", + enumerable: false, + configurable: true + }); + } + if ("TURBOPACK compile-time truthy", 1) { + if (Object.keys(props).length === 0 && !ctx.ctx) { + console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`); + } + } + return props; +} +const SP = typeof performance !== 'undefined'; +const ST = SP && [ + 'mark', + 'measure', + 'getEntriesByName' +].every((method)=>typeof performance[method] === 'function'); +class DecodeError extends Error { +} +class NormalizeError extends Error { +} +class PageNotFoundError extends Error { + constructor(page){ + super(); + this.code = 'ENOENT'; + this.name = 'PageNotFoundError'; + this.message = `Cannot find module for page: ${page}`; + } +} +class MissingStaticPage extends Error { + constructor(page, message){ + super(); + this.message = `Failed to load static file for page: ${page} ${message}`; + } +} +class MiddlewareNotFoundError extends Error { + constructor(){ + super(); + this.code = 'ENOENT'; + this.message = `Cannot find the middleware module`; + } +} +function stringifyError(error) { + return JSON.stringify({ + message: error.message, + stack: error.stack + }); +} +}), +"[project]/node_modules/next/dist/experimental/testmode/context.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getTestReqInfo: null, + withRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getTestReqInfo: function() { + return getTestReqInfo; + }, + withRequest: function() { + return withRequest; + } +}); +const _nodeasync_hooks = __turbopack_context__.r("[externals]/node:async_hooks [external] (node:async_hooks, cjs)"); +const testStorage = new _nodeasync_hooks.AsyncLocalStorage(); +function extractTestInfoFromRequest(req, reader) { + const proxyPortHeader = reader.header(req, 'next-test-proxy-port'); + if (!proxyPortHeader) { + return undefined; + } + const url = reader.url(req); + const proxyPort = Number(proxyPortHeader); + const testData = reader.header(req, 'next-test-data') || ''; + return { + url, + proxyPort, + testData + }; +} +function withRequest(req, reader, fn) { + const testReqInfo = extractTestInfoFromRequest(req, reader); + if (!testReqInfo) { + return fn(); + } + return testStorage.run(testReqInfo, fn); +} +function getTestReqInfo(req, reader) { + const testReqInfo = testStorage.getStore(); + if (testReqInfo) { + return testReqInfo; + } + if (req && reader) { + return extractTestInfoFromRequest(req, reader); + } + return undefined; +} +}), +"[project]/node_modules/next/dist/experimental/testmode/fetch.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleFetch: null, + interceptFetch: null, + reader: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleFetch: function() { + return handleFetch; + }, + interceptFetch: function() { + return interceptFetch; + }, + reader: function() { + return reader; + } +}); +const _context = __turbopack_context__.r("[project]/node_modules/next/dist/experimental/testmode/context.js [middleware] (ecmascript)"); +const reader = { + url (req) { + return req.url; + }, + header (req, name) { + return req.headers.get(name); + } +}; +function getTestStack() { + let stack = (new Error().stack ?? '').split('\n'); + // Skip the first line and find first non-empty line. + for(let i = 1; i < stack.length; i++){ + if (stack[i].length > 0) { + stack = stack.slice(i); + break; + } + } + // Filter out franmework lines. + stack = stack.filter((f)=>!f.includes('/next/dist/')); + // At most 5 lines. + stack = stack.slice(0, 5); + // Cleanup some internal info and trim. + stack = stack.map((s)=>s.replace('webpack-internal:///(rsc)/', '').trim()); + return stack.join(' '); +} +async function buildProxyRequest(testData, request) { + const { url, method, headers, body, cache, credentials, integrity, mode, redirect, referrer, referrerPolicy } = request; + return { + testData, + api: 'fetch', + request: { + url, + method, + headers: [ + ...Array.from(headers), + [ + 'next-test-stack', + getTestStack() + ] + ], + body: body ? Buffer.from(await request.arrayBuffer()).toString('base64') : null, + cache, + credentials, + integrity, + mode, + redirect, + referrer, + referrerPolicy + } + }; +} +function buildResponse(proxyResponse) { + const { status, headers, body } = proxyResponse.response; + return new Response(body ? Buffer.from(body, 'base64') : null, { + status, + headers: new Headers(headers) + }); +} +async function handleFetch(originalFetch, request) { + const testInfo = (0, _context.getTestReqInfo)(request, reader); + if (!testInfo) { + // Passthrough non-test requests. + return originalFetch(request); + } + const { testData, proxyPort } = testInfo; + const proxyRequest = await buildProxyRequest(testData, request); + const resp = await originalFetch(`http://localhost:${proxyPort}`, { + method: 'POST', + body: JSON.stringify(proxyRequest), + // The header lets the ClientRequest interception in `httpget.ts` identify + // this request as part of the test proxy protocol. @mswjs/interceptors + // intercepts at the TCP level, so this request would otherwise be + // intercepted again when it's sent from within an interception listener, + // recursing indefinitely. + headers: { + 'next-test-internal': '1' + }, + next: { + // @ts-ignore + internal: true + } + }); + if (!resp.ok) { + throw Object.defineProperty(new Error(`Proxy request failed: ${resp.status}`), "__NEXT_ERROR_CODE", { + value: "E146", + enumerable: false, + configurable: true + }); + } + const proxyResponse = await resp.json(); + const { api } = proxyResponse; + switch(api){ + case 'continue': + return originalFetch(request); + case 'abort': + case 'unhandled': + throw Object.defineProperty(new Error(`Proxy request aborted [${request.method} ${request.url}]`), "__NEXT_ERROR_CODE", { + value: "E145", + enumerable: false, + configurable: true + }); + case 'fetch': + return buildResponse(proxyResponse); + default: + return api; + } +} +function interceptFetch(originalFetch) { + /*TURBOPACK member replacement*/ __turbopack_context__.g.fetch = function testFetch(input, init) { + var _init_next; + // Passthrough internal requests. + // @ts-ignore + if (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) { + return originalFetch(input, init); + } + return handleFetch(originalFetch, new Request(input, init)); + }; + return ()=>{ + /*TURBOPACK member replacement*/ __turbopack_context__.g.fetch = originalFetch; + }; +} +}), +"[project]/node_modules/next/dist/experimental/testmode/server-edge.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + interceptTestApis: null, + wrapRequestHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + interceptTestApis: function() { + return interceptTestApis; + }, + wrapRequestHandler: function() { + return wrapRequestHandler; + } +}); +const _context = __turbopack_context__.r("[project]/node_modules/next/dist/experimental/testmode/context.js [middleware] (ecmascript)"); +const _fetch = __turbopack_context__.r("[project]/node_modules/next/dist/experimental/testmode/fetch.js [middleware] (ecmascript)"); +function interceptTestApis() { + return (0, _fetch.interceptFetch)(/*TURBOPACK member replacement*/ __turbopack_context__.g.fetch); +} +function wrapRequestHandler(handler) { + return (req, fn)=>(0, _context.withRequest)(req, _fetch.reader, ()=>handler(req, fn)); +} +}), +"[project]/node_modules/next/dist/lib/constants.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ACTION_SUFFIX: null, + APP_DIR_ALIAS: null, + CACHE_ONE_YEAR_SECONDS: null, + DOT_NEXT_ALIAS: null, + ESLINT_DEFAULT_DIRS: null, + GSP_NO_RETURNED_VALUE: null, + GSSP_COMPONENT_MEMBER_ERROR: null, + GSSP_NO_RETURNED_VALUE: null, + HTML_CONTENT_TYPE_HEADER: null, + INFINITE_CACHE: null, + INSTRUMENTATION_HOOK_FILENAME: null, + JSON_CONTENT_TYPE_HEADER: null, + MATCHED_PATH_HEADER: null, + MIDDLEWARE_FILENAME: null, + MIDDLEWARE_LOCATION_REGEXP: null, + NEXT_BODY_SUFFIX: null, + NEXT_CACHE_IMPLICIT_TAG_ID: null, + NEXT_CACHE_REVALIDATED_TAGS_HEADER: null, + NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: null, + NEXT_CACHE_ROOT_PARAM_TAG_ID: null, + NEXT_CACHE_SOFT_TAG_MAX_LENGTH: null, + NEXT_CACHE_TAGS_HEADER: null, + NEXT_CACHE_TAG_MAX_ITEMS: null, + NEXT_CACHE_TAG_MAX_LENGTH: null, + NEXT_DATA_SUFFIX: null, + NEXT_INTERCEPTION_MARKER_PREFIX: null, + NEXT_META_SUFFIX: null, + NEXT_NAV_DEPLOYMENT_ID_HEADER: null, + NEXT_QUERY_PARAM_PREFIX: null, + NEXT_RESUME_HEADER: null, + NEXT_RESUME_STATE_LENGTH_HEADER: null, + NON_STANDARD_NODE_ENV: null, + PAGES_DIR_ALIAS: null, + PRERENDER_REVALIDATE_HEADER: null, + PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: null, + PROXY_FILENAME: null, + PROXY_LOCATION_REGEXP: null, + PUBLIC_DIR_MIDDLEWARE_CONFLICT: null, + ROOT_DIR_ALIAS: null, + RSC_ACTION_CLIENT_WRAPPER_ALIAS: null, + RSC_ACTION_ENCRYPTION_ALIAS: null, + RSC_ACTION_PROXY_ALIAS: null, + RSC_ACTION_VALIDATE_ALIAS: null, + RSC_CACHE_WRAPPER_ALIAS: null, + RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: null, + RSC_MOD_REF_PROXY_ALIAS: null, + RSC_SEGMENTS_DIR_SUFFIX: null, + RSC_SEGMENT_SUFFIX: null, + RSC_SUFFIX: null, + SERVER_PROPS_EXPORT_ERROR: null, + SERVER_PROPS_GET_INIT_PROPS_CONFLICT: null, + SERVER_PROPS_SSG_CONFLICT: null, + SERVER_RUNTIME: null, + SSG_FALLBACK_EXPORT_ERROR: null, + SSG_GET_INITIAL_PROPS_CONFLICT: null, + STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: null, + TEXT_PLAIN_CONTENT_TYPE_HEADER: null, + UNSTABLE_REVALIDATE_RENAME_ERROR: null, + WEBPACK_LAYERS: null, + WEBPACK_RESOURCE_QUERIES: null, + WEB_SOCKET_MAX_RECONNECTIONS: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ACTION_SUFFIX: function() { + return ACTION_SUFFIX; + }, + APP_DIR_ALIAS: function() { + return APP_DIR_ALIAS; + }, + CACHE_ONE_YEAR_SECONDS: function() { + return CACHE_ONE_YEAR_SECONDS; + }, + DOT_NEXT_ALIAS: function() { + return DOT_NEXT_ALIAS; + }, + ESLINT_DEFAULT_DIRS: function() { + return ESLINT_DEFAULT_DIRS; + }, + GSP_NO_RETURNED_VALUE: function() { + return GSP_NO_RETURNED_VALUE; + }, + GSSP_COMPONENT_MEMBER_ERROR: function() { + return GSSP_COMPONENT_MEMBER_ERROR; + }, + GSSP_NO_RETURNED_VALUE: function() { + return GSSP_NO_RETURNED_VALUE; + }, + HTML_CONTENT_TYPE_HEADER: function() { + return HTML_CONTENT_TYPE_HEADER; + }, + INFINITE_CACHE: function() { + return INFINITE_CACHE; + }, + INSTRUMENTATION_HOOK_FILENAME: function() { + return INSTRUMENTATION_HOOK_FILENAME; + }, + JSON_CONTENT_TYPE_HEADER: function() { + return JSON_CONTENT_TYPE_HEADER; + }, + MATCHED_PATH_HEADER: function() { + return MATCHED_PATH_HEADER; + }, + MIDDLEWARE_FILENAME: function() { + return MIDDLEWARE_FILENAME; + }, + MIDDLEWARE_LOCATION_REGEXP: function() { + return MIDDLEWARE_LOCATION_REGEXP; + }, + NEXT_BODY_SUFFIX: function() { + return NEXT_BODY_SUFFIX; + }, + NEXT_CACHE_IMPLICIT_TAG_ID: function() { + return NEXT_CACHE_IMPLICIT_TAG_ID; + }, + NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() { + return NEXT_CACHE_REVALIDATED_TAGS_HEADER; + }, + NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() { + return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER; + }, + NEXT_CACHE_ROOT_PARAM_TAG_ID: function() { + return NEXT_CACHE_ROOT_PARAM_TAG_ID; + }, + NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() { + return NEXT_CACHE_SOFT_TAG_MAX_LENGTH; + }, + NEXT_CACHE_TAGS_HEADER: function() { + return NEXT_CACHE_TAGS_HEADER; + }, + NEXT_CACHE_TAG_MAX_ITEMS: function() { + return NEXT_CACHE_TAG_MAX_ITEMS; + }, + NEXT_CACHE_TAG_MAX_LENGTH: function() { + return NEXT_CACHE_TAG_MAX_LENGTH; + }, + NEXT_DATA_SUFFIX: function() { + return NEXT_DATA_SUFFIX; + }, + NEXT_INTERCEPTION_MARKER_PREFIX: function() { + return NEXT_INTERCEPTION_MARKER_PREFIX; + }, + NEXT_META_SUFFIX: function() { + return NEXT_META_SUFFIX; + }, + NEXT_NAV_DEPLOYMENT_ID_HEADER: function() { + return NEXT_NAV_DEPLOYMENT_ID_HEADER; + }, + NEXT_QUERY_PARAM_PREFIX: function() { + return NEXT_QUERY_PARAM_PREFIX; + }, + NEXT_RESUME_HEADER: function() { + return NEXT_RESUME_HEADER; + }, + NEXT_RESUME_STATE_LENGTH_HEADER: function() { + return NEXT_RESUME_STATE_LENGTH_HEADER; + }, + NON_STANDARD_NODE_ENV: function() { + return NON_STANDARD_NODE_ENV; + }, + PAGES_DIR_ALIAS: function() { + return PAGES_DIR_ALIAS; + }, + PRERENDER_REVALIDATE_HEADER: function() { + return PRERENDER_REVALIDATE_HEADER; + }, + PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() { + return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER; + }, + PROXY_FILENAME: function() { + return PROXY_FILENAME; + }, + PROXY_LOCATION_REGEXP: function() { + return PROXY_LOCATION_REGEXP; + }, + PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() { + return PUBLIC_DIR_MIDDLEWARE_CONFLICT; + }, + ROOT_DIR_ALIAS: function() { + return ROOT_DIR_ALIAS; + }, + RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() { + return RSC_ACTION_CLIENT_WRAPPER_ALIAS; + }, + RSC_ACTION_ENCRYPTION_ALIAS: function() { + return RSC_ACTION_ENCRYPTION_ALIAS; + }, + RSC_ACTION_PROXY_ALIAS: function() { + return RSC_ACTION_PROXY_ALIAS; + }, + RSC_ACTION_VALIDATE_ALIAS: function() { + return RSC_ACTION_VALIDATE_ALIAS; + }, + RSC_CACHE_WRAPPER_ALIAS: function() { + return RSC_CACHE_WRAPPER_ALIAS; + }, + RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() { + return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS; + }, + RSC_MOD_REF_PROXY_ALIAS: function() { + return RSC_MOD_REF_PROXY_ALIAS; + }, + RSC_SEGMENTS_DIR_SUFFIX: function() { + return RSC_SEGMENTS_DIR_SUFFIX; + }, + RSC_SEGMENT_SUFFIX: function() { + return RSC_SEGMENT_SUFFIX; + }, + RSC_SUFFIX: function() { + return RSC_SUFFIX; + }, + SERVER_PROPS_EXPORT_ERROR: function() { + return SERVER_PROPS_EXPORT_ERROR; + }, + SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() { + return SERVER_PROPS_GET_INIT_PROPS_CONFLICT; + }, + SERVER_PROPS_SSG_CONFLICT: function() { + return SERVER_PROPS_SSG_CONFLICT; + }, + SERVER_RUNTIME: function() { + return SERVER_RUNTIME; + }, + SSG_FALLBACK_EXPORT_ERROR: function() { + return SSG_FALLBACK_EXPORT_ERROR; + }, + SSG_GET_INITIAL_PROPS_CONFLICT: function() { + return SSG_GET_INITIAL_PROPS_CONFLICT; + }, + STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() { + return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR; + }, + TEXT_PLAIN_CONTENT_TYPE_HEADER: function() { + return TEXT_PLAIN_CONTENT_TYPE_HEADER; + }, + UNSTABLE_REVALIDATE_RENAME_ERROR: function() { + return UNSTABLE_REVALIDATE_RENAME_ERROR; + }, + WEBPACK_LAYERS: function() { + return WEBPACK_LAYERS; + }, + WEBPACK_RESOURCE_QUERIES: function() { + return WEBPACK_RESOURCE_QUERIES; + }, + WEB_SOCKET_MAX_RECONNECTIONS: function() { + return 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/lib/framework/boundary-constants.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + METADATA_BOUNDARY_NAME: null, + OUTLET_BOUNDARY_NAME: null, + ROOT_LAYOUT_BOUNDARY_NAME: null, + VIEWPORT_BOUNDARY_NAME: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + METADATA_BOUNDARY_NAME: function() { + return METADATA_BOUNDARY_NAME; + }, + OUTLET_BOUNDARY_NAME: function() { + return OUTLET_BOUNDARY_NAME; + }, + ROOT_LAYOUT_BOUNDARY_NAME: function() { + return ROOT_LAYOUT_BOUNDARY_NAME; + }, + VIEWPORT_BOUNDARY_NAME: function() { + return VIEWPORT_BOUNDARY_NAME; + } +}); +const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'; +const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'; +const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'; +const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; +}), +"[project]/node_modules/next/dist/lib/scheduler.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + atLeastOneTask: null, + scheduleImmediate: null, + scheduleOnNextTick: null, + waitAtLeastOneReactRenderTask: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + atLeastOneTask: function() { + return atLeastOneTask; + }, + scheduleImmediate: function() { + return scheduleImmediate; + }, + scheduleOnNextTick: function() { + return scheduleOnNextTick; + }, + waitAtLeastOneReactRenderTask: function() { + return 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/server/after/after.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "after", { + enumerable: true, + get: function() { + return after; + } +}); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[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)"); +function after(task) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore || !workUnitStore) { + // TODO(after): the linked docs page talks about *dynamic* APIs, which after soon won't be anymore + throw Object.defineProperty(new Error('`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context'), "__NEXT_ERROR_CODE", { + value: "E468", + enumerable: false, + configurable: true + }); + } + const { afterContext } = workStore; + return afterContext.after(task, workUnitStore); +} +}), +"[project]/node_modules/next/dist/server/after/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && __export(__turbopack_context__.r("[project]/node_modules/next/dist/server/after/after.js [middleware] (ecmascript)")); +_export_star(__turbopack_context__.r("[project]/node_modules/next/dist/server/after/after.js [middleware] (ecmascript)"), exports); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} +}), +"[project]/node_modules/next/dist/server/app-render/blocking-route-messages.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDynamicBodyError: null, + createDynamicBodyErrorInNavigation: null, + createDynamicMetadataError: null, + createDynamicOrRuntimeBodyError: null, + createDynamicOrRuntimeMetadataError: null, + createDynamicOrRuntimeViewportError: null, + createDynamicViewportError: null, + createLinkBodyErrorInNavigation: null, + createLinkMetadataError: null, + createLinkViewportError: null, + createRuntimeBodyError: null, + createRuntimeBodyErrorInNavigation: null, + createRuntimeMetadataError: null, + createRuntimeViewportError: null, + logBuildDebugHint: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDynamicBodyError: function() { + return createDynamicBodyError; + }, + createDynamicBodyErrorInNavigation: function() { + return createDynamicBodyErrorInNavigation; + }, + createDynamicMetadataError: function() { + return createDynamicMetadataError; + }, + createDynamicOrRuntimeBodyError: function() { + return createDynamicOrRuntimeBodyError; + }, + createDynamicOrRuntimeMetadataError: function() { + return createDynamicOrRuntimeMetadataError; + }, + createDynamicOrRuntimeViewportError: function() { + return createDynamicOrRuntimeViewportError; + }, + createDynamicViewportError: function() { + return createDynamicViewportError; + }, + createLinkBodyErrorInNavigation: function() { + return createLinkBodyErrorInNavigation; + }, + createLinkMetadataError: function() { + return createLinkMetadataError; + }, + createLinkViewportError: function() { + return createLinkViewportError; + }, + createRuntimeBodyError: function() { + return createRuntimeBodyError; + }, + createRuntimeBodyErrorInNavigation: function() { + return createRuntimeBodyErrorInNavigation; + }, + createRuntimeMetadataError: function() { + return createRuntimeMetadataError; + }, + createRuntimeViewportError: function() { + return createRuntimeViewportError; + }, + logBuildDebugHint: function() { + return logBuildDebugHint; + } +}); +function createRuntimeBodyError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered runtime data during prerendering.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`), "__NEXT_ERROR_CODE", { + value: "E1427", + enumerable: false, + configurable: true + }); +} +function createDynamicBodyError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached data during prerendering.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`), "__NEXT_ERROR_CODE", { + value: "E1440", + enumerable: false, + configurable: true + }); +} +function createRuntimeBodyErrorInNavigation(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered runtime data during prerendering or a navigation.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`), "__NEXT_ERROR_CODE", { + value: "E1430", + enumerable: false, + configurable: true + }); +} +function createLinkBodyErrorInNavigation(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered URL data during prerendering or a navigation.\n\n` + `\`params\` or \`searchParams\` accessed outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`), "__NEXT_ERROR_CODE", { + value: "E1439", + enumerable: false, + configurable: true + }); +} +function createDynamicBodyErrorInNavigation(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached data during prerendering or a navigation.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`), "__NEXT_ERROR_CODE", { + value: "E1437", + enumerable: false, + configurable: true + }); +} +function createDynamicOrRuntimeBodyError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached or runtime data during prerendering.\n\n` + `\`fetch(...)\`, \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`), "__NEXT_ERROR_CODE", { + value: "E1428", + enumerable: false, + configurable: true + }); +} +function createLinkMetadataError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered URL data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prefetched. \`params\` or \`searchParams\` accessed in \`generateMetadata()\` prevent it from being prefetched.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`), "__NEXT_ERROR_CODE", { + value: "E1429", + enumerable: false, + configurable: true + }); +} +function createRuntimeMetadataError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`), "__NEXT_ERROR_CODE", { + value: "E1423", + enumerable: false, + configurable: true + }); +} +function createDynamicMetadataError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`fetch(...)\` or \`connection()\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`), "__NEXT_ERROR_CODE", { + value: "E1425", + enumerable: false, + configurable: true + }); +} +function createLinkViewportError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered URL data in \`generateViewport()\`.\n\n` + `\`params\` or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`), "__NEXT_ERROR_CODE", { + value: "E1431", + enumerable: false, + configurable: true + }); +} +function createRuntimeViewportError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\`.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`), "__NEXT_ERROR_CODE", { + value: "E1424", + enumerable: false, + configurable: true + }); +} +function createDynamicViewportError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\`.\n\n` + `\`fetch(...)\` or \`connection()\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the viewport data with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`), "__NEXT_ERROR_CODE", { + value: "E1438", + enumerable: false, + configurable: true + }); +} +function createDynamicOrRuntimeViewportError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\`.\n\n` + `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \`\` because it affects the initial page load.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the viewport with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`), "__NEXT_ERROR_CODE", { + value: "E1436", + enumerable: false, + configurable: true + }); +} +function createDynamicOrRuntimeMetadataError(route) { + return Object.defineProperty(new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`), "__NEXT_ERROR_CODE", { + value: "E1426", + enumerable: false, + configurable: true + }); +} +function logBuildDebugHint(route) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; +} +}), +"[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * The functions provided by this module are used to communicate certain properties + * about the currently running code so that Next.js can make decisions on how to handle + * the current execution in different rendering modes such as pre-rendering, resuming, and SSR. + * + * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering. + * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts + * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of + * Dynamic indications. + * + * The first is simply an intention to be dynamic. unstable_noStore is an example of this where + * the currently executing code simply declares that the current scope is dynamic but if you use it + * inside unstable_cache it can still be cached. This type of indication can be removed if we ever + * make the default dynamic to begin with because the only way you would ever be static is inside + * a cache scope which this indication does not affect. + * + * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic + * because it means that it is inappropriate to cache this at all. using a dynamic data source inside + * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should + * read that data outside the cache and pass it in as an argument to the cached function. + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DynamicHoleKind: null, + Postpone: null, + PreludeState: null, + abortAndThrowOnSynchronousRequestDataAccess: null, + abortOnSynchronousPlatformIOAccess: null, + accessedDynamicData: null, + annotateDynamicAccess: null, + consumeDynamicAccess: null, + createDynamicTrackingState: null, + createDynamicValidationState: null, + createHangingInputAbortSignal: null, + createInstantValidationState: null, + createRenderInBrowserAbortSignal: null, + formatDynamicAPIAccesses: null, + getFirstDynamicReason: null, + getNavigationDisallowedDynamicReasons: null, + getStaticShellDisallowedDynamicReasons: null, + isDynamicPostpone: null, + isPrerenderInterruptedError: null, + logDisallowedDynamicError: null, + markCurrentScopeAsDynamic: null, + postponeWithTracking: null, + throwIfDisallowedDynamic: null, + throwIfSyncIOUsed: null, + throwToInterruptStaticGeneration: null, + trackAllowedDynamicAccess: null, + trackDynamicDataInDynamicRender: null, + trackDynamicHoleInNavigation: null, + trackDynamicHoleInRuntimeShell: null, + trackDynamicHoleInStaticShell: null, + trackThrownErrorInNavigation: null, + useDynamicRouteParams: null, + useDynamicSearchParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DynamicHoleKind: function() { + return DynamicHoleKind; + }, + Postpone: function() { + return Postpone; + }, + PreludeState: function() { + return PreludeState; + }, + abortAndThrowOnSynchronousRequestDataAccess: function() { + return abortAndThrowOnSynchronousRequestDataAccess; + }, + abortOnSynchronousPlatformIOAccess: function() { + return abortOnSynchronousPlatformIOAccess; + }, + accessedDynamicData: function() { + return accessedDynamicData; + }, + annotateDynamicAccess: function() { + return annotateDynamicAccess; + }, + consumeDynamicAccess: function() { + return consumeDynamicAccess; + }, + createDynamicTrackingState: function() { + return createDynamicTrackingState; + }, + createDynamicValidationState: function() { + return createDynamicValidationState; + }, + createHangingInputAbortSignal: function() { + return createHangingInputAbortSignal; + }, + createInstantValidationState: function() { + return createInstantValidationState; + }, + createRenderInBrowserAbortSignal: function() { + return createRenderInBrowserAbortSignal; + }, + formatDynamicAPIAccesses: function() { + return formatDynamicAPIAccesses; + }, + getFirstDynamicReason: function() { + return getFirstDynamicReason; + }, + getNavigationDisallowedDynamicReasons: function() { + return getNavigationDisallowedDynamicReasons; + }, + getStaticShellDisallowedDynamicReasons: function() { + return getStaticShellDisallowedDynamicReasons; + }, + isDynamicPostpone: function() { + return isDynamicPostpone; + }, + isPrerenderInterruptedError: function() { + return isPrerenderInterruptedError; + }, + logDisallowedDynamicError: function() { + return logDisallowedDynamicError; + }, + markCurrentScopeAsDynamic: function() { + return markCurrentScopeAsDynamic; + }, + postponeWithTracking: function() { + return postponeWithTracking; + }, + throwIfDisallowedDynamic: function() { + return throwIfDisallowedDynamic; + }, + throwIfSyncIOUsed: function() { + return throwIfSyncIOUsed; + }, + throwToInterruptStaticGeneration: function() { + return throwToInterruptStaticGeneration; + }, + trackAllowedDynamicAccess: function() { + return trackAllowedDynamicAccess; + }, + trackDynamicDataInDynamicRender: function() { + return trackDynamicDataInDynamicRender; + }, + trackDynamicHoleInNavigation: function() { + return trackDynamicHoleInNavigation; + }, + trackDynamicHoleInRuntimeShell: function() { + return trackDynamicHoleInRuntimeShell; + }, + trackDynamicHoleInStaticShell: function() { + return trackDynamicHoleInStaticShell; + }, + trackThrownErrorInNavigation: function() { + return trackThrownErrorInNavigation; + }, + useDynamicRouteParams: function() { + return useDynamicRouteParams; + }, + useDynamicSearchParams: function() { + return useDynamicSearchParams; + } +}); +const _react = /*#__PURE__*/ _interop_require_default(__turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [middleware] (ecmascript)")); +const _hooksservercontext = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/hooks-server-context.js [middleware] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [middleware] (ecmascript)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[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)"); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [middleware] (ecmascript)"); +const _boundaryconstants = __turbopack_context__.r("[project]/node_modules/next/dist/lib/framework/boundary-constants.js [middleware] (ecmascript)"); +const _scheduler = __turbopack_context__.r("[project]/node_modules/next/dist/lib/scheduler.js [middleware] (ecmascript)"); +const _bailouttocsr = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js [middleware] (ecmascript)"); +const _blockingroutemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/blocking-route-messages.js [middleware] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [middleware] (ecmascript)"); +const _boundaryconstants1 = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js [middleware] (ecmascript)"); +const _boundarytracking = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js [middleware] (ecmascript)"); +const _instantmessages = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/instant-messages.js [middleware] (ecmascript)"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const hasPostpone = typeof _react.default.unstable_postpone === 'function'; +function createDynamicTrackingState(isDebugDynamicAccesses) { + return { + isDebugDynamicAccesses, + dynamicAccesses: [], + syncDynamicErrorWithStack: null, + syncDynamicErrorWithStackPostMicrotask: false + }; +} +function createDynamicValidationState() { + return { + hasSuspenseAboveBody: false, + hasDynamicMetadata: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [] + }; +} +function getPendingClientSyncDynamicError(clientDynamic) { + return clientDynamic.syncDynamicErrorWithStackPostMicrotask ? null : clientDynamic.syncDynamicErrorWithStack; +} +function getFirstDynamicReason(trackingState) { + var _trackingState_dynamicAccesses_; + return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression; +} +function markCurrentScopeAsDynamic(store, workUnitStore, expression) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender-legacy': + case 'prerender-ppr': + case 'request': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + // If we're forcing dynamic rendering or we're forcing static rendering, we + // don't need to do anything here because the entire page is already dynamic + // or it's static and it should not throw or postpone here. + if (store.forceDynamic || store.forceStatic) return; + if (store.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E553", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-ppr': + return postponeWithTracking(store.route, expression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + workUnitStore.revalidate = 0; + // We aren't prerendering, but we are generating a static page. We need + // to bail out of static generation. + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E550", + enumerable: false, + configurable: true + }); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + if ("TURBOPACK compile-time truthy", 1) { + workUnitStore.usedDynamic = true; + } + break; + case 'generate-static-params': + break; + default: + workUnitStore; + } + } +} +function throwToInterruptStaticGeneration(expression, store, prerenderStore) { + // We aren't prerendering but we are generating a static page. We need to bail out of static generation + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E558", + enumerable: false, + configurable: true + }); + prerenderStore.revalidate = 0; + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; +} +function trackDynamicDataInDynamicRender(workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-ppr': + case 'prerender-client': + case 'validation-client': + case 'generate-static-params': + break; + case 'request': + if ("TURBOPACK compile-time truthy", 1) { + workUnitStore.usedDynamic = true; + } + break; + default: + workUnitStore; + } +} +function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) { + const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`; + const error = createPrerenderInterruptedError(reason); + prerenderStore.controller.abort(error); + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + // React completes the task that is currently rendering before scheduled + // abort cleanup. Client tracking can attribute the sync IO only during + // that current task; server tracking keeps the error regardless. + queueMicrotask(()=>{ + dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true; + }); + } + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); +} +function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) { + // The synchronously accessed request data would have been available during + // a runtime prerender, which would have rendered past this point instead of + // aborting — so a runtime prefetch would produce more content than this + // render. Record that, same as when request data access creates a hanging + // promise (see makeRuntimeHangingPromise). Unlike + // `abortOnSynchronousPlatformIOAccess`, which aborts a runtime prerender + // all the same and therefore must not record anything. + (0, _dynamicrenderingutils.trackRuntimeDataAccessed)(prerenderStore); + const prerenderSignal = prerenderStore.controller.signal; + if (prerenderSignal.aborted === false) { + // TODO it would be better to move this aborted check into the callsite so we can avoid making + // the error object when it isn't relevant to the aborting of the prerender however + // since we need the throw semantics regardless of whether we abort it is easier to land + // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer + // to ideal implementation + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // Preserve the exact server-side dynamic access for final validation after + // interrupting this render. + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } + } + throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`); +} +function Postpone({ reason, route }) { + const prerenderStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + const dynamicTracking = prerenderStore && prerenderStore.type === 'prerender-ppr' ? prerenderStore.dynamicTracking : null; + postponeWithTracking(route, reason, dynamicTracking); +} +function postponeWithTracking(route, expression, dynamicTracking) { + assertPostpone(); + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } + _react.default.unstable_postpone(createPostponeReason(route, expression)); +} +function createPostponeReason(route, expression) { + return `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + `React throws this special object to indicate where. It should not be caught by ` + `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`; +} +function isDynamicPostpone(err) { + if (typeof err === 'object' && err !== null && typeof err.message === 'string') { + return isDynamicPostponeReason(err.message); + } + return false; +} +function isDynamicPostponeReason(reason) { + return reason.includes('needs to bail out of prerendering at this point because it used') && reason.includes('Learn more: https://nextjs.org/docs/messages/ppr-caught-error'); +} +if (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) { + throw Object.defineProperty(new Error('Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'), "__NEXT_ERROR_CODE", { + value: "E296", + enumerable: false, + configurable: true + }); +} +const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'; +function createPrerenderInterruptedError(message) { + const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + error.digest = NEXT_PRERENDER_INTERRUPTED; + return error; +} +function isPrerenderInterruptedError(error) { + return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error; +} +function accessedDynamicData(dynamicAccesses) { + return dynamicAccesses.length > 0; +} +function consumeDynamicAccess(serverDynamic, clientDynamic) { + // We mutate because we only call this once we are no longer writing + // to the dynamicTrackingState and it's more efficient than creating a new + // array. + serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses); + return serverDynamic.dynamicAccesses; +} +function formatDynamicAPIAccesses(dynamicAccesses) { + return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{ + stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as + // well as the first 4 lines of the stack trace which is the distance + // from the user code and the `new Error().stack` call. + .slice(4).filter((line)=>{ + // Exclude Next.js internals from the stack trace. + if (line.includes('node_modules/next/')) { + return false; + } + // Exclude anonymous functions from the stack trace. + if (line.includes(' ()')) { + return false; + } + // Exclude Node.js internals from the stack trace. + if (line.includes(' (node:')) { + return false; + } + return true; + }).join('\n'); + return `Dynamic API Usage Debug - ${expression}:\n${stack}`; + }); +} +function assertPostpone() { + if (!hasPostpone) { + throw Object.defineProperty(new Error(`Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`), "__NEXT_ERROR_CODE", { + value: "E224", + enumerable: false, + configurable: true + }); + } +} +function createRenderInBrowserAbortSignal() { + const controller = new AbortController(); + controller.abort(Object.defineProperty(new _bailouttocsr.BailoutToCSRError('Render in Browser'), "__NEXT_ERROR_CODE", { + value: "E721", + enumerable: false, + configurable: true + })); + return controller.signal; +} +function createHangingInputAbortSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + const controller = new AbortController(); + if (workUnitStore.cacheSignal) { + // If we have a cacheSignal it means we're in a prospective render. If + // the input we're waiting on is coming from another cache, we do want + // to wait for it so that we can resolve this cache entry too. + workUnitStore.cacheSignal.inputReady().then(()=>{ + controller.abort(); + }); + } else { + // Otherwise we're in the final render and we should already have all + // our caches filled. + // If the prerender uses stages, we have wait until the final stage. + // if an input didn't resolve at that point, then we can assume it never will. + // + // We might still be waiting on some microtasks so we + // wait one tick before giving up. When we give up, we still want to + // render the content of this cache as deeply as we can so that we can + // suspend as deeply as possible in the tree or not at all if we don't + // end up waiting for the input. + const stagedRendering = (0, _workunitasyncstorageexternal.getStagedRenderingController)(workUnitStore); + if (stagedRendering && stagedRendering.finalStage !== null) { + stagedRendering.waitForStage(stagedRendering.finalStage).then(()=>(0, _scheduler.scheduleOnNextTick)(()=>controller.abort()), noop); + } else { + (0, _scheduler.scheduleOnNextTick)(()=>controller.abort()); + } + } + return controller.signal; + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + return undefined; + default: + workUnitStore; + } +} +function noop() {} +function annotateDynamicAccess(expression, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function useDynamicRouteParams(expression) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore && workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-client': + { + const fallbackParams = workUnitStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + // We are in a prerender with cacheComponents semantics. We are going to + // hang here and never resolve. This will cause the currently + // rendering component to effectively be a dynamic hole. + _react.default.use((0, _dynamicrenderingutils.makeClientHookHangingPromise)(workUnitStore.renderSignal, new _dynamicrenderingutils.ClientHookDynamicError(workStore.route, expression))); + } + break; + } + case 'prerender': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E795", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + { + const fallbackParams = workUnitStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + return postponeWithTracking(workStore.route, expression, workUnitStore.dynamicTracking); + } + break; + } + case 'validation-client': + { + break; + } + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E771", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E745", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called in \`generateStaticParams\`. Next.js should be preventing ${expression} from being included in server component files statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1130", + enumerable: false, + configurable: true + }); + case 'prerender-legacy': + case 'request': + case 'unstable-cache': + break; + default: + workUnitStore; + } + } +} +function useDynamicSearchParams(expression) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore) { + // We assume pages router context and just return + return; + } + if (!workUnitStore) { + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(expression); + } + switch(workUnitStore.type){ + case 'validation-client': + // During instant validation we try to behave as close to client as possible, + // so this shouldn't hang during SSR. + return; + case 'prerender-client': + { + _react.default.use((0, _dynamicrenderingutils.makeClientHookHangingPromise)(workUnitStore.renderSignal, new _dynamicrenderingutils.ClientHookDynamicError(workStore.route, expression))); + break; + } + case 'prerender-legacy': + case 'prerender-ppr': + { + if (workStore.forceStatic) { + return; + } + throw Object.defineProperty(new _bailouttocsr.BailoutToCSRError(expression), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + case 'prerender': + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E795", + enumerable: false, + configurable: true + }); + case 'cache': + case 'unstable-cache': + case 'private-cache': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E745", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called in \`generateStaticParams\`. Next.js should be preventing ${expression} from being included in server component files statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1130", + enumerable: false, + configurable: true + }); + case 'request': + return; + default: + workUnitStore; + } +} +const hasSuspenseRegex = /\n\s+at Suspense \(\)/; +// Common implicit body tags that React will treat as body when placed directly in html +const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'; +// Detects when RootLayoutBoundary (our framework marker component) appears +// after Suspense in the component stack, indicating the root layout is wrapped +// within a Suspense boundary. Ensures no body/html/implicit-body components are in between. +// +// Example matches: +// at Suspense () +// at __next_root_layout_boundary__ () +// +// Or with other components in between (but not body/html/implicit-body): +// at Suspense () +// at SomeComponent () +// at __next_root_layout_boundary__ () +const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(\\))[\\s\\S])*?\\n\\s+at ${_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`); +const hasMetadataRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.METADATA_BOUNDARY_NAME}[\\n\\s]`); +const hasViewportRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`); +const hasOutletRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.OUTLET_BOUNDARY_NAME}[\\n\\s]`); +const hasInstantValidationBoundaryRegex = new RegExp(`\\n\\s+at ${_boundaryconstants1.INSTANT_VALIDATION_BOUNDARY_NAME}[\\n\\s]`); +const slotMarkerRegex = new RegExp(`\\n\\s+at ${_boundaryconstants1.INSTANT_SLOT_MARKER_PREFIX}(\\d+)${_boundaryconstants1.INSTANT_SLOT_MARKER_SUFFIX}[\\n\\s]`); +/** Look up the config factory for the slot this error belongs to. + * Checks the component stack for a slot marker (__next_instant_slot_N__) + * and returns the config at that index. Falls back to index 0 (root + * config) when no slot marker is found or the slot has no config. */ function resolveInstantStack(componentStack, dynamicValidation) { + const { slotStacks } = dynamicValidation; + if (slotStacks.length > 1) { + const match = slotMarkerRegex.exec(componentStack); + if (match) { + // Slot markers are 0-indexed in the component name but + // slotStacks is 1-indexed (index 0 is the root config). + const slotIndex = parseInt(match[1], 10) + 1; + const slotStack = slotStacks[slotIndex]; + if (slotStack != null) { + return slotStack; + } + } + } + // Fall back to root config (index 0) + return slotStacks[0] ?? null; +} +/** + * Inspects the component stack of an outlet boundary to discover whether the + * user placed a Suspense boundary above the document body, and records the + * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so. + * + * The outlet itself isn't a meaningful source of dynamic — it only resolves + * when metadata/viewport are dynamic, which we track via their own boundaries. + * However, the outlet renders alongside the page content, so its stack passes + * through the user's layout chain (typically reaching into `` via the + * root layout). That makes the outlet stack our best opportunity to spot a + * Suspense boundary above the body, even when no real body content is dynamic. + * Without this, a route whose only dynamic source is `generateViewport()` would + * miss the Suspense-above-body opt-in, because the viewport's stack lives in + * the head and never sees the user's root layout. + * + * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The + * latter tracks whether the body has dynamic content that's been wrapped in + * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us + * about the structural opt-in for an empty shell, not about the body being + * partially dynamic. The distinction matters because dynamic metadata is only + * acceptable when the page is partially dynamic (via real body holes), and we + * don't want this outlet-based detection to mask that case. + */ function trackOutletSuspenseAboveBody(componentStack, dynamicValidation) { + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + dynamicValidation.hasSuspenseAboveBody = true; + } +} +function trackAllowedDynamicAccess(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.hasDynamicMetadata = true; + return; + } else if (hasViewportRegex.test(componentStack)) { + dynamicValidation.hasDynamicViewport = true; + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext((0, _blockingroutemessages.createDynamicOrRuntimeBodyError)(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +var DynamicHoleKind = /*#__PURE__*/ function(DynamicHoleKind) { + /** We know that this hole is caused by link data. */ DynamicHoleKind[DynamicHoleKind["Link"] = 1] = "Link"; + /** We know that this hole is caused by runtime data. */ DynamicHoleKind[DynamicHoleKind["Runtime"] = 2] = "Runtime"; + /** We know that this hole is caused by dynamic data. */ DynamicHoleKind[DynamicHoleKind["Dynamic"] = 3] = "Dynamic"; + return DynamicHoleKind; +}({}); +function createInstantValidationState(slotStacks) { + return { + hasDynamicMetadata: false, + hasAllowedClientDynamicAboveBoundary: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [], + validationPreventingErrors: [], + thrownErrorsOutsideBoundary: [], + slotStacks + }; +} +function trackDynamicHoleInNavigation(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind, boundaryState) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } + // Resolve the config stack for this specific error. If the error + // is inside a slot marker, use that slot's config. Otherwise fall + // back to the default. + const effectiveCreateInstantStack = resolveInstantStack(componentStack, dynamicValidation); + if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(kind === 1 ? (0, _blockingroutemessages.createLinkMetadataError)(workStore.route) : kind === 2 ? (0, _blockingroutemessages.createRuntimeMetadataError)(workStore.route) : (0, _blockingroutemessages.createDynamicMetadataError)(workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicMetadata = error; + return; + } + if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(kind === 1 ? (0, _blockingroutemessages.createLinkViewportError)(workStore.route) : kind === 2 ? (0, _blockingroutemessages.createRuntimeViewportError)(workStore.route) : (0, _blockingroutemessages.createDynamicViewportError)(workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; + } + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // We don't see the validation boundary in the component stack, + // so this hole must be coming from a shared parent. + // Shared parents are fully resolved and don't have RSC holes, + // but they can still suspend in a client component during SSR. + // If we managed to render all the validation boundaries, that means + // that the client holes aren't blocking validation and we can disregard them. + // Note that we don't even care whether they have suspense or not. + if ((0, _boundarytracking.allRequiredBoundariesRendered)(boundaryState)) { + dynamicValidation.hasAllowedClientDynamicAboveBoundary = true; + dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata + ; + return; + } else { + // TODO(instant-validation) TODO(NAR-787) + // If shared parents blocked us from validating, we should only log + // the errors from the innermost (segments), i.e. omit layouts whose + // slots managed to render (because clearly they didn't block validation) + const message = `Route "${workStore.route}": Could not validate \`instant\` because a Client Component in a parent segment prevented the page from rendering.`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1331", + enumerable: false, + configurable: true + }), componentStack, effectiveCreateInstantStack); + dynamicValidation.validationPreventingErrors.push(error); + return; + } + } else { + // The hole originates inside the validation boundary. + // + // Check if we have a Suspense above the hole, but below the validation boundary. + // If we do, then this dynamic usage wouldn't block a navigation to this subtree. + // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block. + // + // Note that in the component stack, children come before parents. + // + // Valid: + // ... + // at Suspense + // ... + // at __next_prefetch_validation_boundary__ + // + // Invalid: + // ... + // at __next_prefetch_validation_boundary__ + // ... + // at Suspense + // + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + dynamicValidation.hasAllowedDynamic = true; + return; + } else { + // invalid - fallthrough + } + } + } + if (syncDynamicError) { + if (effectiveCreateInstantStack !== null && syncDynamicError.cause === undefined) { + syncDynamicError.cause = effectiveCreateInstantStack(); + } + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, effectiveCreateInstantStack)); + return; + } + const error = addErrorContext(kind === 1 ? (0, _blockingroutemessages.createLinkBodyErrorInNavigation)(workStore.route) : kind === 2 ? (0, _blockingroutemessages.createRuntimeBodyErrorInNavigation)(workStore.route) : (0, _blockingroutemessages.createDynamicBodyErrorInNavigation)(workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; +} +function trackThrownErrorInNavigation(workStore, dynamicValidation, thrownValue, componentStack) { + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // There's no validation boundary on the component stack. + // This error may have blocked a boundary from rendering. + // Wrap the error to provide component context. + // This helps for errors from node_modules which would otherwise + // have no useful stack information due to ignore-listing, + // e.g. next/dynamic with `ssr: false`. + const error = addErrorContext(Object.defineProperty(new Error('An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.', { + cause: thrownValue + }), "__NEXT_ERROR_CODE", { + value: "E1118", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.thrownErrorsOutsideBoundary.push(error); + } else { + // There's validation boundary on the component stack, + // so we know this error didn't block a validation boundary from rendering. + // However, this error might be hiding be hiding dynamic content that would + // cause validation to fail. + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + // There's a Suspense below the validation boundary but above this error's location. + // This subtree can't fail instant validation because any potential + // dynamic holes would be guarded by the Suspense anyway, + // so we can allow this. + return; + } else { + // invalid - fallthrough + } + } + const message = `Route "${workStore.route}": Could not validate \`instant\` because an error prevented the target segment from rendering.`; + const error = addErrorContext(Object.defineProperty(new Error(message, { + cause: thrownValue + }), "__NEXT_ERROR_CODE", { + value: "E1338", + enumerable: false, + configurable: true + }), componentStack, null // TODO(instant-validation-build): conflicting use of cause + ); + dynamicValidation.validationPreventingErrors.push(error); + } +} +function trackDynamicHoleInRuntimeShell(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext((0, _blockingroutemessages.createDynamicMetadataError)(workStore.route), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext((0, _blockingroutemessages.createDynamicViewportError)(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext((0, _blockingroutemessages.createDynamicBodyError)(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +function trackDynamicHoleInStaticShell(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext((0, _blockingroutemessages.createRuntimeMetadataError)(workStore.route), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext((0, _blockingroutemessages.createRuntimeViewportError)(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext((0, _blockingroutemessages.createRuntimeBodyError)(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +/** + * In dev mode, we prefer using the owner stack, otherwise the provided + * component stack is used. + * + * Accepts an already-created Error so the SWC error-code plugin can see the + * `new Error(...)` call at each call site and auto-assign error codes. + */ function addErrorContext(error, componentStack, createInstantStack) { + const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && _react.default.captureOwnerStack ? _react.default.captureOwnerStack() : null; + if (createInstantStack !== null) { + error.cause = createInstantStack(); + } + // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right + // + error.stack = error.name + ': ' + error.message + (ownerStack || componentStack); + return error; +} +var PreludeState = /*#__PURE__*/ function(PreludeState) { + PreludeState[PreludeState["Full"] = 0] = "Full"; + PreludeState[PreludeState["Empty"] = 1] = "Empty"; + PreludeState[PreludeState["Errored"] = 2] = "Errored"; + return PreludeState; +}({}); +function logDisallowedDynamicError(workStore, error) { + console.error(error); + (0, _blockingroutemessages.logBuildDebugHint)(workStore.route); +} +function throwIfSyncIOUsed(workStore, serverDynamic) { + if (serverDynamic.syncDynamicErrorWithStack) { + logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } +} +function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic, allowEmptyStaticShell) { + throwIfSyncIOUsed(workStore, serverDynamic); + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) { + console.error((0, _blockingroutemessages.createDynamicOrRuntimeMetadataError)(workStore.route).message); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + for(let i = 0; i < dynamicErrors.length; i++){ + logDisallowedDynamicError(workStore, dynamicErrors[i]); + } + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + // If we got this far then the only other thing that could be blocking + // the root is dynamic Viewport. If this is dynamic then + // you need to opt into that by adding a Suspense boundary above the body + // to indicate your are ok with fully dynamic rendering. + if (dynamicValidation.hasDynamicViewport) { + console.error((0, _blockingroutemessages.createDynamicOrRuntimeViewportError)(workStore.route).message); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + } +} +function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation, allowEmptyStaticShell) { + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return []; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + return [ + Object.defineProperty(new _invarianterror.InvariantError(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`), "__NEXT_ERROR_CODE", { + value: "E936", + enumerable: false, + configurable: true + }) + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +function getNavigationDisallowedDynamicReasons(workStore, prelude, dynamicValidation, validationSampleTracking, boundaryState, devRenderDidError) { + // If we have errors related to missing samples, those should take precedence over everything else. + if (validationSampleTracking) { + const { missingSampleErrors } = validationSampleTracking; + if (missingSampleErrors.length > 0) { + return missingSampleErrors; + } + } + const { validationPreventingErrors } = dynamicValidation; + if (validationPreventingErrors.length > 0) { + if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // The dev render already surfaced server errors to the user. + // The same errors likely caused validation to be inconclusive, + // so reporting them again as validation failures would be noisy. + return []; + } + return validationPreventingErrors; + } + // NOTE: We don't care about Suspense above body here, + // we're only concerned with the validation boundary + if (prelude !== 0) { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1 && !dynamicValidation.hasAllowedClientDynamicAboveBoundary && (0, _boundarytracking.allRequiredBoundariesRendered)(boundaryState)) { + // If we ever get this far then we messed up the tracking of invalid + // dynamic. (When boundaries are missing the deferred fallback below + // will surface a more useful error.) + return Object.defineProperty(new _invarianterror.InvariantError(`Route "${workStore.route}" failed to render during instant validation and Next.js was unable to determine a reason.`), "__NEXT_ERROR_CODE", { + value: "E1055", + enumerable: false, + configurable: true + }); + } + } else { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // Missing boundaries on their own aren't a strong signal — a parent + // layout may legitimately omit a slot. Defer this so the caller can + // try shallower validation depths first; if every depth comes up + // empty we still want to surface this so the user is made aware that + // validation didn't complete. When we add a markers API, the + // marker-based variant of this check can become strict again. + if (!(0, _boundarytracking.allRequiredBoundariesRendered)(boundaryState)) { + const { thrownErrorsOutsideBoundary } = dynamicValidation; + const rootInstantStack = dynamicValidation.slotStacks[0]; + if (thrownErrorsOutsideBoundary.length === 0) { + const missingFiles = []; + for (const [id, filePaths] of boundaryState.requiredIds){ + if (!boundaryState.renderedIds.has(id)) { + for (const filePath of filePaths){ + let normalized = filePath.replace(/^\[project\][\\/]?/, '').replace(process.cwd() + '/', '').replace(process.cwd() + '\\', ''); + missingFiles.push(normalized); + } + } + } + missingFiles.sort(); + return (0, _instantmessages.createUnrenderedSegmentError)(workStore.route, missingFiles); + } else if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // Errors outside the boundary likely blocked it from rendering, + // but they're already being reported to the user via the dev + // render. Suppress the validation failure to avoid noise. + return []; + } else if (thrownErrorsOutsideBoundary.length === 1) { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to the following error.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + thrownErrorsOutsideBoundary[0] + ]); + } else { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + ...thrownErrorsOutsideBoundary + ]); + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +}), +"[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + INSTANT_SLOT_MARKER_PREFIX: null, + INSTANT_SLOT_MARKER_SUFFIX: null, + INSTANT_VALIDATION_BOUNDARY_NAME: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + INSTANT_SLOT_MARKER_PREFIX: function() { + return INSTANT_SLOT_MARKER_PREFIX; + }, + INSTANT_SLOT_MARKER_SUFFIX: function() { + return INSTANT_SLOT_MARKER_SUFFIX; + }, + INSTANT_VALIDATION_BOUNDARY_NAME: function() { + return INSTANT_VALIDATION_BOUNDARY_NAME; + } +}); +const INSTANT_VALIDATION_BOUNDARY_NAME = '__next_instant_validation_boundary__'; +const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'; +const INSTANT_SLOT_MARKER_SUFFIX = '__'; +}), +"[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + allRequiredBoundariesRendered: null, + createValidationBoundaryTracking: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + allRequiredBoundariesRendered: function() { + return allRequiredBoundariesRendered; + }, + createValidationBoundaryTracking: function() { + return createValidationBoundaryTracking; + } +}); +function createValidationBoundaryTracking() { + return { + requiredIds: new Map(), + renderedIds: new Set() + }; +} +function allRequiredBoundariesRendered(state) { + for (const id of state.requiredIds.keys()){ + if (!state.renderedIds.has(id)) { + return false; + } + } + return true; +} +}), +"[project]/node_modules/next/dist/server/app-render/staged-rendering.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RENDER_STAGE_ADVANCE_ORDER: null, + RenderStage: null, + StagedRenderingController: null, + SyncIOMode: null, + getNextStage: null, + isAdvanceableRenderStage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RENDER_STAGE_ADVANCE_ORDER: function() { + return RENDER_STAGE_ADVANCE_ORDER; + }, + RenderStage: function() { + return RenderStage; + }, + StagedRenderingController: function() { + return StagedRenderingController; + }, + SyncIOMode: function() { + return SyncIOMode; + }, + getNextStage: function() { + return getNextStage; + }, + isAdvanceableRenderStage: function() { + return isAdvanceableRenderStage; + } +}); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [middleware] (ecmascript)"); +const _promisewithresolvers = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [middleware] (ecmascript)"); +var RenderStage = /*#__PURE__*/ function(RenderStage) { + RenderStage[RenderStage["Before"] = 1] = "Before"; + // + RenderStage[RenderStage["ShellStatic"] = 11] = "ShellStatic"; + RenderStage[RenderStage["Static"] = 13] = "Static"; + // + RenderStage[RenderStage["ShellRuntime"] = 21] = "ShellRuntime"; + RenderStage[RenderStage["Runtime"] = 23] = "Runtime"; + // + RenderStage[RenderStage["Dynamic"] = 30] = "Dynamic"; + // + RenderStage[RenderStage["Abandoned"] = 40] = "Abandoned"; + return RenderStage; +}({}); +const RENDER_STAGE_ADVANCE_ORDER = [ + 11, + 13, + 21, + 23, + 30 +]; +function getNextStage(stage) { + return RENDER_STAGE_ADVANCE_ORDER[RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1]; +} +function isAdvanceableRenderStage(stage) { + return 1 < stage && stage <= 30; +} +var SyncIOMode = /*#__PURE__*/ function(SyncIOMode) { + /** Sync IO does not error in any stage. */ SyncIOMode[SyncIOMode["Untracked"] = 1] = "Untracked"; + /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */ SyncIOMode[SyncIOMode["AllowedInRuntimeOrDynamic"] = 2] = "AllowedInRuntimeOrDynamic"; + /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */ SyncIOMode[SyncIOMode["AllowedInDynamic"] = 3] = "AllowedInDynamic"; + return SyncIOMode; +}({}); +class StagedRenderingController { + constructor({ abortSignal, abandonController, syncIO, finalStage }){ + this.currentStage = 1; + this.syncInterruptReason = null; + this.triggers = { + [11]: createStageTrigger(), + [13]: createStageTrigger(), + // + [21]: createStageTrigger(), + [23]: createStageTrigger(), + // + [30]: createStageTrigger() + }; + this.abortSignal = abortSignal; + this.abandonController = abandonController; + this.syncIOMode = syncIO; + this.finalStage = finalStage; + if (abortSignal) { + abortSignal.addEventListener('abort', ()=>{ + // Reject all stage promises that haven't already been resolved. + // `cancelStageTrigger` is a noop if the trigger already resolved. + const { reason } = abortSignal; + for (const trigger of Object.values(this.triggers)){ + cancelStageTrigger(trigger, reason); + } + }, { + once: true + }); + } + if (abandonController) { + abandonController.signal.addEventListener('abort', ()=>{ + this.abandonRender(); + }, { + once: true + }); + } + } + onStage(stage, callback) { + addSyncTriggerListener(this.triggers[stage], callback); + } + shouldTrackSyncInterrupt() { + if (this.syncIOMode === 1) { + return false; + } + switch(this.currentStage){ + case 1: + // If we haven't started the render yet, it can't be interrupted. + return false; + case 11: + case 13: + return true; + case 21: + case 23: + { + switch(this.syncIOMode){ + case 2: + { + // Before `partialPrefetching`: Sync IO only errors in static stages. + return false; + } + case 3: + { + return true; + } + } + // NOT a fallthrough, but eslint doesn't understand that + } + case 30: + case 40: + return false; + default: + this.currentStage; + return false; + } + } + /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */ syncInterruptCurrentStageWithReason(reason) { + const { currentStage } = this; + if (currentStage === 1 || currentStage === 30 || currentStage === 40) { + // Not interruptible. Defensive noop. + return; + } + // If Sync IO occurs during an abandonable render, we trigger the abandon. + // The abandon listener will call abandonRender which advances through + // stages to let caches fill before marking as Abandoned. + if (this.abandonController) { + this.abandonController.abort(); + return; + } + if (this.abortSignal) { + // If this is an abortable render, we capture the interruption reason and stop advancing. + // We don't release any more promises. + // The caller is expected to abort the signal. + this.syncInterruptReason = reason; + this.currentStage = 40; + return; + } + // If we're in a non-abandonable & non-abortable render, + // we need to advance to the Dynamic stage and capture the interruption reason. + // (in dev, this will be the restarted render) + this.syncInterruptReason = reason; + this.advanceStage(30); + } + getSyncInterruptReason() { + return this.syncInterruptReason; + } + getStageEndTime(stage) { + return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity; + } + abandonRender() { + // In staged rendering, only the initial render is abandonable. + // We can abandon the initial render if + // 1. We notice a cache miss, and need to wait for caches to fill + // 2. A sync IO error occurs, and the render should be interrupted + // (this might be a lazy intitialization of a module, + // so we still want to restart in this case and see if it still occurs) + // In either case, we'll be doing another render after this one, + // so we only want to unblock the next stage, not Dynamic, because + // unblocking the dynamic stage would likely lead to wasted (uncached) IO. + const { currentStage } = this; + if (currentStage === 1) { + throw Object.defineProperty(new _invarianterror.InvariantError("A render that hasn't started yet cannot be abandoned"), "__NEXT_ERROR_CODE", { + value: "E1300", + enumerable: false, + configurable: true + }); + } + if (currentStage === 30 || currentStage === 40) { + // We shouldn't ever trigger an abandon in these. Defensive noop. + return; + } + // Resolve all stages after the current one, up to runtime (excluding dynamic) + const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(30); + for(let i = nextStageIx; i < dynamicStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + this.currentStage = 40; + } + advanceStage(targetStage) { + if (this.finalStage !== null && targetStage > this.finalStage) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`), "__NEXT_ERROR_CODE", { + value: "E1302", + enumerable: false, + configurable: true + }); + } + const { currentStage } = this; + if (currentStage === 30 || currentStage === 40) { + // Terminal stages, nowhere left to advance. + return; + } + // If we're already at the target stage or beyond, do nothing. + if (targetStage <= currentStage) { + return; + } + this.currentStage = targetStage; + // Resolve all stages between the current stage and the target. + const nextStageIx = currentStage === 1 ? 0 : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage); + for(let i = nextStageIx; i <= targetStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + } + resolveStage(stage) { + fireStageTrigger(this.triggers[stage]); + } + getStagePromise(stage) { + return this.triggers[stage].promise; + } + waitForStage(stage) { + return this.getStagePromise(stage); + } + delayUntilStage(stage, displayName, resolvedValue) { + const stagePromise = this.getStagePromise(stage); + const promise = ("TURBOPACK compile-time truthy", 1) ? makeDevtoolsIOPromiseFromIOTrigger(stagePromise, displayName, resolvedValue) : "TURBOPACK unreachable"; + // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked. + // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it). + // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning. + if (this.abortSignal) { + promise.catch(ignoreReject); + } + return promise; + } +} +function ignoreReject() {} +// TODO(restart-on-cache-miss): the layering of `delayUntilStage`, +// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise` +// is confusing, we should clean it up. +function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) { + // If we create a `new Promise` and give it a displayName + // (with no userspace code above us in the stack) + // React Devtools will use it as the IO cause when determining "suspended by". + // In particular, it should shadow any inner IO that resolved/rejected the promise + // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage) + const promise = new Promise((resolve, reject)=>{ + ioTrigger.then(resolve.bind(null, resolvedValue), reject); + }); + if (displayName !== undefined) { + // @ts-expect-error + promise.displayName = displayName; + } + return promise; +} +function addSyncTriggerListener(trigger, listener) { + if (trigger.state === 'pending') { + trigger._listeners.push(listener); + } else { + listener(); + } +} +function createStageTrigger() { + const { promise, resolve, reject } = (0, _promisewithresolvers.createPromiseWithResolvers)(); + return { + state: 'pending', + triggeredAt: null, + promise, + _listeners: [], + _resolvePromise: resolve, + _rejectPromise: reject + }; +} +function fireStageTrigger(trigger) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'triggered'; + trigger.triggeredAt = performance.now() + performance.timeOrigin; + try { + const { _listeners: listeners } = trigger; + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + listeners.length = 0; + } finally{ + trigger._resolvePromise(); + } +} +function cancelStageTrigger(trigger, reason) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'cancelled'; + // we didn't trigger, so don't save `triggeredAt`. + // We're not gonna fire the listeners, we may as well free them. + trigger._listeners.length = 0; + // Suppress unhandled rejection warnings for promises that no one is awaiting. + trigger.promise.catch(ignoreReject); + trigger._rejectPromise(reason); +} +}), +"[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ClientHookDynamicError: null, + RENDER_STAGES_BY_DATA_KIND: null, + applyOwnerStack: null, + isClientHookDynamicError: null, + isHangingPromiseRejectionError: null, + makeClientHookHangingPromise: null, + makeDevtoolsIOAwarePromise: null, + makeDynamicHangingPromise: null, + makeFallbackParamsHangingPromise: null, + makePromiseFromTrigger: null, + makeRuntimeHangingPromise: null, + makeStageHangingPromise: null, + makeUntrackedHangingPromise: null, + trackFallbackParamsAccessed: null, + trackRuntimeDataAccessed: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ClientHookDynamicError: function() { + return ClientHookDynamicError; + }, + RENDER_STAGES_BY_DATA_KIND: function() { + return RENDER_STAGES_BY_DATA_KIND; + }, + applyOwnerStack: function() { + return applyOwnerStack; + }, + isClientHookDynamicError: function() { + return isClientHookDynamicError; + }, + isHangingPromiseRejectionError: function() { + return isHangingPromiseRejectionError; + }, + makeClientHookHangingPromise: function() { + return makeClientHookHangingPromise; + }, + makeDevtoolsIOAwarePromise: function() { + return makeDevtoolsIOAwarePromise; + }, + makeDynamicHangingPromise: function() { + return makeDynamicHangingPromise; + }, + makeFallbackParamsHangingPromise: function() { + return makeFallbackParamsHangingPromise; + }, + makePromiseFromTrigger: function() { + return makePromiseFromTrigger; + }, + makeRuntimeHangingPromise: function() { + return makeRuntimeHangingPromise; + }, + makeStageHangingPromise: function() { + return makeStageHangingPromise; + }, + makeUntrackedHangingPromise: function() { + return makeUntrackedHangingPromise; + }, + trackFallbackParamsAccessed: function() { + return trackFallbackParamsAccessed; + }, + trackRuntimeDataAccessed: function() { + return trackRuntimeDataAccessed; + } +}); +const _stagedrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/staged-rendering.js [middleware] (ecmascript)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[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)"); +const _runtimereactsexternal = __turbopack_context__.r("[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)"); +function isHangingPromiseRejectionError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === HANGING_PROMISE_REJECTION; +} +const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; +class HangingPromiseRejectionError extends Error { + constructor(route, expression){ + super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; + } +} +const CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'; +class ClientHookDynamicError extends Error { + constructor(route, expression){ + super(`Route "${route}": Next.js encountered URL data \`${expression}\` in a Client Component outside of \`\`.\n\n` + `This blocks prerendering because the value is only available at runtime.\n\n` + `Ways to fix this:\n` + ` - [stream] Wrap the component in \`\` so the hook value streams in after prerendering\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`), this.digest = CLIENT_HOOK_DYNAMIC; + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1433", + enumerable: false, + configurable: true + }); + } +} +function isClientHookDynamicError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === CLIENT_HOOK_DYNAMIC; +} +const abortListenersBySignal = new WeakMap(); +function makeDynamicHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeUntrackedHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeRuntimeHangingPromise(signal, route, expression, workUnitStore) { + if (workUnitStore !== null) { + trackRuntimeDataAccessed(workUnitStore); + } + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeFallbackParamsHangingPromise(signal, route, expression, workUnitStore) { + if (workUnitStore !== null) { + trackFallbackParamsAccessed(workUnitStore); + } + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeStageHangingPromise(signal, route, expression, workUnitStore) { + trackRuntimeDataAccessed(workUnitStore); + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function trackRuntimeDataAccessed(workUnitStore) { + trackRuntimeDataAccessedImpl(workUnitStore, false); +} +function trackFallbackParamsAccessed(workUnitStore) { + trackRuntimeDataAccessedImpl(workUnitStore, true); +} +function trackRuntimeDataAccessedImpl(workUnitStore, isFallbackParamAccess) { + switch(workUnitStore.type){ + case 'prerender': + { + var // responses as `needsRuntimeRequest`): resolved for every kind of + // access — a pre-upgrade fallback response must keep reporting that + // a runtime request would return more. The fulfillment row lands at + // the current position in the Flight stream, which is what makes the + // value rewindable per stage. Promise resolution is idempotent, so + // repeated accesses are free. + _workUnitStore_runtimeDataAccessed; + (_workUnitStore_runtimeDataAccessed = workUnitStore.runtimeDataAccessed) == null ? void 0 : _workUnitStore_runtimeDataAccessed.resolve(true); + // Hint cell (holds the build-constant + // PrefetchHint.ShouldAttemptStaticPrefetch value directly): a + // fallback-param access is transient when the route is + // fallback-upgradeable — ISR later produces the concrete prerender a + // static prefetch attempt would hit — so it leaves the hint intact. + // (Until that upgrade, the response-level flag above keeps directing + // the client to a runtime fallback; the hint only costs a wasted + // static attempt in the interim.) Every other access clears it. + const hintCell = workUnitStore.shouldAttemptStaticPrefetch; + if (hintCell !== null && (!isFallbackParamAccess || !workUnitStore.isFallbackUpgradeable)) { + hintCell.current = false; + } + break; + } + case 'prerender-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } +} +function makeClientHookHangingPromise(signal, error) { + return makeHangingPromiseWithError(signal, error); +} +function makeHangingPromiseWithError(signal, error) { + if (signal.aborted) { + return Promise.reject(error); + } else { + const hangingPromise = new Promise((_, reject)=>{ + const boundRejection = reject.bind(null, error); + let currentListeners = abortListenersBySignal.get(signal); + if (currentListeners) { + currentListeners.push(boundRejection); + } else { + const listeners = [ + boundRejection + ]; + abortListenersBySignal.set(signal, listeners); + signal.addEventListener('abort', ()=>{ + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + }, { + once: true + }); + } + }); + // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so + // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct + // your own promise out of it you'll need to ensure you handle the error when it rejects. + hangingPromise.catch(ignoreReject); + return hangingPromise; + } +} +function ignoreReject() {} +function makePromiseFromTrigger(trigger, value) { + const promise = trigger.then(()=>value); + promise.catch(ignoreReject); + return promise; +} +function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) { + if (requestStore.stagedRendering) { + // We resolve each stage in a timeout, so React DevTools will pick this up as IO. + return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying); + } + // in React DevTools if we resolve in a setTimeout we will observe + // the promise resolution as something that can suspend a boundary or root. + return new Promise((resolve)=>{ + // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. + setTimeout(()=>{ + resolve(underlying); + }, 0); + }); +} +const RENDER_STAGES_BY_DATA_KIND = { + sessionData: _stagedrendering.RenderStage.ShellRuntime, + staticLinkData: _stagedrendering.RenderStage.Static, + runtimeLinkData: _stagedrendering.RenderStage.Runtime +}; +function applyOwnerStack(error) { + if ("TURBOPACK compile-time truthy", 1) { + var _getClientReact_captureOwnerStack, _getClientReact, _getServerReact_captureOwnerStack, _getServerReact; + let ownerStack; + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + // captureOwnerStack() returns the owner stack for the current React + // rendering context. Inside a cache scope this only includes the inner + // component tree. The outer owner stack (captured before entering the + // cache boundary in use-cache-wrapper.ts) is stored on the cache store. + // We concatenate both to get the full component tree. + const innerOwnerStack = ((_getClientReact = (0, _runtimereactsexternal.getClientReact)()) == null ? void 0 : (_getClientReact_captureOwnerStack = _getClientReact.captureOwnerStack) == null ? void 0 : _getClientReact_captureOwnerStack.call(_getClientReact)) ?? ((_getServerReact = (0, _runtimereactsexternal.getServerReact)()) == null ? void 0 : (_getServerReact_captureOwnerStack = _getServerReact.captureOwnerStack) == null ? void 0 : _getServerReact_captureOwnerStack.call(_getServerReact)); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'cache': + case 'private-cache': + ownerStack = (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') || undefined; + break; + case 'unstable-cache': + case 'request': + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + case 'generate-static-params': + case undefined: + ownerStack = innerOwnerStack; + break; + default: + workUnitStore; + } + if (ownerStack) { + let stack = ownerStack; + if (error.stack) { + const frames = []; + for (const frame of error.stack.split('\n').slice(1)){ + if (frame.includes('react_stack_bottom_frame')) { + break; + } + frames.push(frame); + } + stack = '\n' + frames.join('\n') + stack; + } + error.stack = error.name + ': ' + error.message + stack; + } + } + return error; +} +}), +"[project]/node_modules/next/dist/server/request/connection.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "connection", { + enumerable: true, + get: function() { + return connection; + } +}); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[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)"); +const _dynamicrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [middleware] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [middleware] (ecmascript)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [middleware] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/utils.js [middleware] (ecmascript)"); +const _stagedrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/staged-rendering.js [middleware] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [middleware] (ecmascript)"); +function connection() { + const callingExpression = 'connection'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && !(0, _utils.isRequestApiAllowedInCurrentPhase)(workUnitStore)) { + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside \`after()\` while rendering. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but \`after()\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`), "__NEXT_ERROR_CODE", { + value: "E1377", + enumerable: false, + configurable: true + }); + } + if (workStore.forceStatic) { + // When using forceStatic, we override all other logic and always just + // return a resolving promise without tracking. + return Promise.resolve(undefined); + } + if (workStore.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`connection()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E847", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside "use cache". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual request, but caches must be able to be produced before a request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E841", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, connection); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'private-cache': + { + // It might not be intuitive to throw for private caches as well, but + // we don't consider runtime prefetches as "actual requests" (in the + // navigation sense), despite allowing them to read cookies. + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside "use cache: private". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual navigation request, but caches must be able to be produced before a navigation request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E837", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, connection); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside a function cached with \`unstable_cache()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but caches must be able to be produced before a Request so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", { + value: "E840", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E1125", + enumerable: false, + configurable: true + }); + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // We return a promise that never resolves to allow the prerender to + // stall at this point. + return (0, _dynamicrenderingutils.makeDynamicHangingPromise)(workUnitStore.renderSignal, workStore.route, '`connection()`'); + case 'validation-client': + { + // TODO(NAR-789): make this consistent with the actual browser behavior when we change it. + // Until then, erroring is fine. + const exportName = '`connection`'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1063", + enumerable: false, + configurable: true + }); + } + case 'prerender-ppr': + // We use React's postpone API to interrupt rendering here to create a + // dynamic hole + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, 'connection', workUnitStore.dynamicTracking); + case 'prerender-legacy': + // We throw an error here to interrupt prerendering to mark the route + // as dynamic + return (0, _dynamicrendering.throwToInterruptStaticGeneration)('connection', workStore, workUnitStore); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + if ("TURBOPACK compile-time truthy", 1) { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + if (workUnitStore.asyncApiPromises) { + return workUnitStore.asyncApiPromises.connection; + } + return (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, _stagedrendering.RenderStage.Dynamic); + } else //TURBOPACK unreachable + ; + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + // TODO(NAR-789): connection() is not currently statically prevented from being imported in client components, + // so we always error about a missing work unit store. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} +}), +"[project]/node_modules/next/dist/server/request/utils.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isRequestApiAllowedInCurrentPhase: null, + throwForSearchParamsAccessInUseCache: null, + throwWithStaticGenerationBailoutErrorWithDynamicError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isRequestApiAllowedInCurrentPhase: function() { + return isRequestApiAllowedInCurrentPhase; + }, + throwForSearchParamsAccessInUseCache: function() { + return throwForSearchParamsAccessInUseCache; + }, + throwWithStaticGenerationBailoutErrorWithDynamicError: function() { + return throwWithStaticGenerationBailoutErrorWithDynamicError; + } +}); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [middleware] (ecmascript)"); +const _actionasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/action-async-storage.external.js [external] (next/dist/server/app-render/action-async-storage.external.js, cjs)"); +const _aftertaskasyncstorageexternal = __turbopack_context__.r("[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)"); +function throwWithStaticGenerationBailoutErrorWithDynamicError(route, expression) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${route} with \`dynamic = "error"\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E543", + enumerable: false, + configurable: true + }); +} +function throwForSearchParamsAccessInUseCache(workStore, constructorOpt) { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E842", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, constructorOpt); + workStore.invalidDynamicUsageError ??= error; + throw error; +} +function isRequestApiAllowedInCurrentPhase(workUnitStore) { + switch(workUnitStore.phase){ + case 'action': + case 'render': + { + // The request is still in progress. The API may be disallowed for other reasons, + // but not because of phase. + return true; + } + case 'after': + { + // The request has finished. + // If we're in a Route Handler or a Server Action, + // request APIs can be called everywhere, even in after(). + const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore(); + if (actionStore && (actionStore.isAppRoute || actionStore.isAction)) { + return true; + } + const afterTaskStore = _aftertaskasyncstorageexternal.afterTaskAsyncStorage.getStore(); + if (afterTaskStore) { + // We're in an `after` callback. Request APIs are callable if + // the `after()` call happened in an action phase: + // - in a Route Handler + // - in a Server Action's body (but not the render after) + // + // TODO(after): Is it even possible to have `phase === 'action'` but no `actionStore`? + // We should revisit this setup and simplify this. + return afterTaskStore.rootTaskSpawnPhase === 'action'; + } + // Otherwise, we must be in a page, in the `after` phase. + // We don't allow calling request APIs here because we'd miss + // them during prerendering and wouldn't know that the page is dynamic. + return false; + } + } +} +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[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)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [middleware] (ecmascript)").vendored['react-rsc'].React; +}), +"[project]/node_modules/next/dist/server/web/error.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PageSignatureError: null, + RemovedPageError: null, + RemovedUAError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PageSignatureError: function() { + return PageSignatureError; + }, + RemovedPageError: function() { + return RemovedPageError; + }, + RemovedUAError: function() { + return RemovedUAError; + } +}); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1177", + enumerable: false, + configurable: true + }); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1178", + enumerable: false, + configurable: true + }); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1172", + enumerable: false, + configurable: true + }); + } +} +}), +"[project]/node_modules/next/dist/server/web/next-url.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextURL", { + enumerable: true, + get: function() { + return NextURL; + } +}); +const _detectdomainlocale = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js [middleware] (ecmascript)"); +const _formatnextpathnameinfo = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js [middleware] (ecmascript)"); +const _gethostname = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/get-hostname.js [middleware] (ecmascript)"); +const _getnextpathnameinfo = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js [middleware] (ecmascript)"); +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, _getnextpathnameinfo.getNextPathnameInfo)(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !("TURBOPACK compile-time value", void 0), + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, _gethostname.getHostname)(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, _detectdomainlocale.detectDomainLocale)((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (0, _formatnextpathnameinfo.formatNextPathnameInfo)({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw Object.defineProperty(new TypeError(`The NextURL configuration includes no locale "${locale}"`), "__NEXT_ERROR_CODE", { + value: "E597", + enumerable: false, + configurable: true + }); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ReflectAdapter", { + enumerable: true, + get: function() { + return ReflectAdapter; + } +}); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RequestCookies: null, + ResponseCookies: null, + stringifyCookie: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RequestCookies: function() { + return _cookies.RequestCookies; + }, + ResponseCookies: function() { + return _cookies.ResponseCookies; + }, + stringifyCookie: function() { + return _cookies.stringifyCookie; + } +}); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [middleware] (ecmascript)"); +}), +"[project]/node_modules/next/dist/server/web/spec-extension/image-response.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * @deprecated ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead. + * Migration with codemods: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#next-og-import + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ImageResponse", { + enumerable: true, + get: function() { + return ImageResponse; + } +}); +function ImageResponse() { + throw Object.defineProperty(new Error('ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead'), "__NEXT_ERROR_CODE", { + value: "E183", + enumerable: false, + configurable: true + }); +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/request.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + INTERNALS: null, + NextRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + INTERNALS: function() { + return INTERNALS; + }, + NextRequest: function() { + return NextRequest; + } +}); +const _nexturl = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/next-url.js [middleware] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/utils.js [middleware] (ecmascript)"); +const _error = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/error.js [middleware] (ecmascript)"); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [middleware] (ecmascript)"); +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (0, _utils.validateURL)(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if ("TURBOPACK compile-time truthy", 1) { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new _nexturl.NextURL(url, { + headers: (0, _utils.toNodeOutgoingHttpHeaders)(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + cookies: new _cookies.RequestCookies(this.headers), + nextUrl, + url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new _error.RemovedPageError(); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new _error.RemovedUAError(); + } + get url() { + return this[INTERNALS].url; + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/response.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextResponse", { + enumerable: true, + get: function() { + return NextResponse; + } +}); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [middleware] (ecmascript)"); +const _nexturl = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/next-url.js [middleware] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/utils.js [middleware] (ecmascript)"); +const _reflect = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [middleware] (ecmascript)"); +const _cookies1 = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [middleware] (ecmascript)"); +const INTERNALS = Symbol('internal response'); +const REDIRECTS = new Set([ + 301, + 302, + 303, + 307, + 308 +]); +function handleMiddlewareField(init, headers) { + var _init_request; + if (init == null ? void 0 : (_init_request = init.request) == null ? void 0 : _init_request.headers) { + if (!(init.request.headers instanceof Headers)) { + throw Object.defineProperty(new Error('request.headers must be an instance of Headers'), "__NEXT_ERROR_CODE", { + value: "E119", + enumerable: false, + configurable: true + }); + } + const keys = []; + for (const [key, value] of init.request.headers){ + headers.set('x-middleware-request-' + key, value); + keys.push(key); + } + headers.set('x-middleware-override-headers', keys.join(',')); + } +} +class NextResponse extends Response { + constructor(body, init = {}){ + super(body, init); + const headers = this.headers; + const cookies = new _cookies1.ResponseCookies(headers); + const cookiesProxy = new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + case 'set': + { + return (...args)=>{ + const result = Reflect.apply(target[prop], target, args); + const newHeaders = new Headers(headers); + if (result instanceof _cookies1.ResponseCookies) { + headers.set('x-middleware-set-cookie', result.getAll().map((cookie)=>(0, _cookies.stringifyCookie)(cookie)).join(',')); + } + handleMiddlewareField(init, newHeaders); + return result; + }; + } + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + this[INTERNALS] = { + cookies: cookiesProxy, + url: init.url ? new _nexturl.NextURL(init.url, { + headers: (0, _utils.toNodeOutgoingHttpHeaders)(headers), + nextConfig: init.nextConfig + }) : undefined + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + url: this.url, + // rest of props come from Response + body: this.body, + bodyUsed: this.bodyUsed, + headers: Object.fromEntries(this.headers), + ok: this.ok, + redirected: this.redirected, + status: this.status, + statusText: this.statusText, + type: this.type + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + static json(body, init) { + const response = Response.json(body, init); + return new NextResponse(response.body, response); + } + static redirect(url, init) { + const status = typeof init === 'number' ? init : (init == null ? void 0 : init.status) ?? 307; + if (!REDIRECTS.has(status)) { + throw Object.defineProperty(new RangeError('Failed to execute "redirect" on "response": Invalid status code'), "__NEXT_ERROR_CODE", { + value: "E529", + enumerable: false, + configurable: true + }); + } + const initObj = typeof init === 'object' ? init : {}; + const headers = new Headers(initObj == null ? void 0 : initObj.headers); + headers.set('Location', (0, _utils.validateURL)(url)); + return new NextResponse(null, { + ...initObj, + headers, + status + }); + } + static rewrite(destination, init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-rewrite', (0, _utils.validateURL)(destination)); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } + static next(init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-next', '1'); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/url-pattern.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "URLPattern", { + enumerable: true, + get: function() { + return GlobalURLPattern; + } +}); +const GlobalURLPattern = typeof URLPattern === 'undefined' ? undefined : URLPattern; +}), +"[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isBot: null, + userAgent: null, + userAgentFromString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isBot: function() { + return isBot; + }, + userAgent: function() { + return userAgent; + }, + userAgentFromString: function() { + return userAgentFromString; + } +}); +const _uaparserjs = /*#__PURE__*/ _interop_require_default(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js [middleware] (ecmascript)")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function isBot(input) { + return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(input); +} +function userAgentFromString(input) { + return { + ...(0, _uaparserjs.default)(input), + isBot: input === undefined ? false : isBot(input) + }; +} +function userAgent({ headers }) { + return userAgentFromString(headers.get('user-agent') || undefined); +} +}), +"[project]/node_modules/next/dist/server/web/utils.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + fromNodeOutgoingHttpHeaders: null, + normalizeNextQueryParam: null, + splitCookiesString: null, + toNodeOutgoingHttpHeaders: null, + validateURL: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + fromNodeOutgoingHttpHeaders: function() { + return fromNodeOutgoingHttpHeaders; + }, + normalizeNextQueryParam: function() { + return normalizeNextQueryParam; + }, + splitCookiesString: function() { + return splitCookiesString; + }, + toNodeOutgoingHttpHeaders: function() { + return toNodeOutgoingHttpHeaders; + }, + validateURL: function() { + return validateURL; + } +}); +const _constants = __turbopack_context__.r("[project]/node_modules/next/dist/lib/constants.js [middleware] (ecmascript)"); +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + 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 === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw Object.defineProperty(new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E61", + enumerable: false, + configurable: true + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + _constants.NEXT_QUERY_PARAM_PREFIX, + _constants.NEXT_INTERCEPTION_MARKER_PREFIX + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} +}), +"[project]/node_modules/next/dist/shared/lib/get-hostname.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getHostname", { + enumerable: true, + get: function() { + return getHostname; + } +}); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} +}), +"[project]/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "detectDomainLocale", { + enumerable: true, + get: function() { + return detectDomainLocale; + } +}); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} +}), +"[project]/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizeLocalePath", { + enumerable: true, + get: function() { + return normalizeLocalePath; + } +}); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/instant-messages.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createLinkPrefetchPartialError: null, + createUnrenderedSegmentError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createLinkPrefetchPartialError: function() { + return createLinkPrefetchPartialError; + }, + createUnrenderedSegmentError: function() { + return createUnrenderedSegmentError; + } +}); +function createUnrenderedSegmentError(route, missingFiles) { + let message = `Route "${route}": Could not validate that a segment in your UI has instant navigation.`; + if (missingFiles.length > 0) { + const label = missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'; + message += `\n\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` + `\n\n${label}:\n${missingFiles.map((p)=>` ${p}`).join('\n')}` + `\n\nWays to fix this:` + `\n - [render] Render the dropped segment` + `\n - [ignore] Set \`export const instant = false\` to opt the dropped segment out of instant-navigation validation` + `\n\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`; + } + return Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1286", + enumerable: false, + configurable: true + }); +} +function createLinkPrefetchPartialError(pathname) { + return Object.defineProperty(new Error(`Next.js encountered dynamic data during prefetching for "${pathname}".\n\n` + `This will lead to slower, more expensive prefetches.\n\n` + `Ways to fix this:\n` + ` - [upgrade] Opt into Partial Prefetching by exporting \`const prefetch = 'partial'\` from the page or layout, or by setting \`partialPrefetching: true\` in next.config to opt the whole app in\n` + ` - [disable] Remove \`prefetch={true}\` from the to use the default prefetch\n` + ` - [ignore] Set \`export const instant = false\` to opt the route out of instant-navigation validation\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`), "__NEXT_ERROR_CODE", { + value: "E1435", + enumerable: false, + configurable: true + }); +} +}), +"[project]/node_modules/next/dist/shared/lib/invariant-error.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "InvariantError", { + enumerable: true, + get: function() { + return InvariantError; + } +}); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + Object.defineProperty(this, "__NEXT_ERROR_CODE", { + value: "E1179", + enumerable: false, + configurable: true + }); + this.name = 'InvariantError'; + } +} +}), +"[project]/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +// This has to be a shared module which is shared between client component error boundary and dynamic component +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + BailoutToCSRError: null, + isBailoutToCSRError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + BailoutToCSRError: function() { + return BailoutToCSRError; + }, + isBailoutToCSRError: function() { + return isBailoutToCSRError; + } +}); +const BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'; +class BailoutToCSRError extends Error { + constructor(reason){ + super(`Bail out to client-side rendering: ${reason}`), this.reason = reason, this.digest = BAILOUT_TO_CSR; + } +} +function isBailoutToCSRError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === BAILOUT_TO_CSR; +} +}), +"[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createPromiseWithResolvers", { + enumerable: true, + get: function() { + return createPromiseWithResolvers; + } +}); +function createPromiseWithResolvers() { + // Shim of Stage 4 Promise.withResolvers proposal + let resolve; + let reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/add-locale.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addLocale", { + enumerable: true, + get: function() { + return addLocale; + } +}); +const _addpathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [middleware] (ecmascript)"); +const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)"); +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((0, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path; + if ((0, _pathhasprefix.pathHasPrefix)(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, _addpathprefix.addPathPrefix)(path, `/${locale}`); +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addPathPrefix", { + enumerable: true, + get: function() { + return addPathPrefix; + } +}); +const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)"); +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + return `${prefix}${pathname}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addPathSuffix", { + enumerable: true, + get: function() { + return addPathSuffix; + } +}); +const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)"); +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + return `${pathname}${suffix}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatNextPathnameInfo", { + enumerable: true, + get: function() { + return formatNextPathnameInfo; + } +}); +const _removetrailingslash = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [middleware] (ecmascript)"); +const _addpathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [middleware] (ecmascript)"); +const _addpathsuffix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js [middleware] (ecmascript)"); +const _addlocale = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-locale.js [middleware] (ecmascript)"); +function formatNextPathnameInfo(info) { + let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname); + } + if (info.buildId) { + pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname); +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getNextPathnameInfo", { + enumerable: true, + get: function() { + return getNextPathnameInfo; + } +}); +const _normalizelocalepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js [middleware] (ecmascript)"); +const _removepathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js [middleware] (ecmascript)"); +const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)"); +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) { + info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parsePath", { + enumerable: true, + get: function() { + return parsePath; + } +}); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "pathHasPrefix", { + enumerable: true, + get: function() { + return pathHasPrefix; + } +}); +const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [middleware] (ecmascript)"); +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, _parsepath.parsePath)(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removePathPrefix", { + enumerable: true, + get: function() { + return removePathPrefix; + } +}); +const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [middleware] (ecmascript)"); +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * Removes the trailing slash for a given route or page path. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * + * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of + * compiling and executing a RegExp on every call (~3-5x faster). + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removeTrailingSlash", { + enumerable: true, + get: function() { + return removeTrailingSlash; + } +}); +function removeTrailingSlash(route) { + return route.charCodeAt(route.length - 1) === 47 && route.length > 1 ? route.slice(0, -1) : route; +} +}), +"[project]/node_modules/next/server.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { + +const serverExports = { + NextRequest: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/request.js [middleware] (ecmascript)").NextRequest, + NextResponse: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/response.js [middleware] (ecmascript)").NextResponse, + ImageResponse: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/image-response.js [middleware] (ecmascript)").ImageResponse, + userAgentFromString: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [middleware] (ecmascript)").userAgentFromString, + userAgent: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [middleware] (ecmascript)").userAgent, + URLPattern: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/url-pattern.js [middleware] (ecmascript)").URLPattern, + after: __turbopack_context__.r("[project]/node_modules/next/dist/server/after/index.js [middleware] (ecmascript)").after, + connection: __turbopack_context__.r("[project]/node_modules/next/dist/server/request/connection.js [middleware] (ecmascript)").connection +}; +// https://nodejs.org/api/esm.html#commonjs-namespaces +// When importing CommonJS modules, the module.exports object is provided as the default export +module.exports = serverExports; +// make import { xxx } from 'next/server' work +exports.NextRequest = serverExports.NextRequest; +exports.NextResponse = serverExports.NextResponse; +exports.ImageResponse = serverExports.ImageResponse; +exports.userAgentFromString = serverExports.userAgentFromString; +exports.userAgent = serverExports.userAgent; +exports.URLPattern = serverExports.URLPattern; +exports.after = serverExports.after; +exports.connection = serverExports.connection; +}), +"[project]/node_modules/node-machine-id/dist/index.js [middleware] (ecmascript)", ((__turbopack_context__, module, exports) => { + +!function(t, n) { + ("TURBOPACK compile-time truthy", 1) ? module.exports = n(__turbopack_context__.r("[externals]/child_process [external] (child_process, cjs)"), __turbopack_context__.r("[externals]/crypto [external] (crypto, cjs)")) : "TURBOPACK unreachable"; +}(/*TURBOPACK member replacement*/ __turbopack_context__.e, function(t, n) { + return function(t) { + function n(e) { + if (r[e]) return r[e].exports; + var o = r[e] = { + exports: {}, + id: e, + loaded: !1 + }; + return t[e].call(o.exports, o, o.exports, n), o.loaded = !0, o.exports; + } + var r = {}; + return n.m = t, n.c = r, n.p = "", n(0); + }([ + function(t, n, r) { + t.exports = r(34); + }, + function(t, n, r) { + var e = r(29)("wks"), o = r(33), i = r(2).Symbol, c = "function" == typeof i, u = t.exports = function(t) { + return e[t] || (e[t] = c && i[t] || (c ? i : o)("Symbol." + t)); + }; + u.store = e; + }, + function(t, n) { + var r = t.exports = ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); + "number" == typeof __g && (__g = r); + }, + function(t, n, r) { + var e = r(9); + t.exports = function(t) { + if (!e(t)) throw TypeError(t + " is not an object!"); + return t; + }; + }, + function(t, n, r) { + t.exports = !r(24)(function() { + return 7 != Object.defineProperty({}, "a", { + get: function() { + return 7; + } + }).a; + }); + }, + function(t, n, r) { + var e = r(12), o = r(17); + t.exports = r(4) ? function(t, n, r) { + return e.f(t, n, o(1, r)); + } : function(t, n, r) { + return t[n] = r, t; + }; + }, + function(t, n) { + var r = t.exports = { + version: "2.4.0" + }; + "number" == typeof __e && (__e = r); + }, + function(t, n, r) { + var e = r(14); + t.exports = function(t, n, r) { + if (e(t), void 0 === n) return t; + switch(r){ + case 1: + return function(r) { + return t.call(n, r); + }; + case 2: + return function(r, e) { + return t.call(n, r, e); + }; + case 3: + return function(r, e, o) { + return t.call(n, r, e, o); + }; + } + return function() { + return t.apply(n, arguments); + }; + }; + }, + function(t, n) { + var r = {}.hasOwnProperty; + t.exports = function(t, n) { + return r.call(t, n); + }; + }, + function(t, n) { + t.exports = function(t) { + return "object" == typeof t ? null !== t : "function" == typeof t; + }; + }, + function(t, n) { + t.exports = {}; + }, + function(t, n) { + var r = {}.toString; + t.exports = function(t) { + return r.call(t).slice(8, -1); + }; + }, + function(t, n, r) { + var e = r(3), o = r(26), i = r(32), c = Object.defineProperty; + n.f = r(4) ? Object.defineProperty : function(t, n, r) { + if (e(t), n = i(n, !0), e(r), o) try { + return c(t, n, r); + } catch (t) {} + if ("get" in r || "set" in r) throw TypeError("Accessors not supported!"); + return "value" in r && (t[n] = r.value), t; + }; + }, + function(t, n, r) { + var e = r(42), o = r(15); + t.exports = function(t) { + return e(o(t)); + }; + }, + function(t, n) { + t.exports = function(t) { + if ("function" != typeof t) throw TypeError(t + " is not a function!"); + return t; + }; + }, + function(t, n) { + t.exports = function(t) { + if (void 0 == t) throw TypeError("Can't call method on " + t); + return t; + }; + }, + function(t, n, r) { + var e = r(9), o = r(2).document, i = e(o) && e(o.createElement); + t.exports = function(t) { + return i ? o.createElement(t) : {}; + }; + }, + function(t, n) { + t.exports = function(t, n) { + return { + enumerable: !(1 & t), + configurable: !(2 & t), + writable: !(4 & t), + value: n + }; + }; + }, + function(t, n, r) { + var e = r(12).f, o = r(8), i = r(1)("toStringTag"); + t.exports = function(t, n, r) { + t && !o(t = r ? t : t.prototype, i) && e(t, i, { + configurable: !0, + value: n + }); + }; + }, + function(t, n, r) { + var e = r(29)("keys"), o = r(33); + t.exports = function(t) { + return e[t] || (e[t] = o(t)); + }; + }, + function(t, n) { + var r = Math.ceil, e = Math.floor; + t.exports = function(t) { + return isNaN(t = +t) ? 0 : (t > 0 ? e : r)(t); + }; + }, + function(t, n, r) { + var e = r(11), o = r(1)("toStringTag"), i = "Arguments" == e(function() { + return arguments; + }()), c = function(t, n) { + try { + return t[n]; + } catch (t) {} + }; + t.exports = function(t) { + var n, r, u; + return void 0 === t ? "Undefined" : null === t ? "Null" : "string" == typeof (r = c(n = Object(t), o)) ? r : i ? e(n) : "Object" == (u = e(n)) && "function" == typeof n.callee ? "Arguments" : u; + }; + }, + function(t, n) { + t.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","); + }, + function(t, n, r) { + var e = r(2), o = r(6), i = r(7), c = r(5), u = "prototype", s = function(t, n, r) { + var f, a, p, l = t & s.F, v = t & s.G, h = t & s.S, d = t & s.P, y = t & s.B, _ = t & s.W, x = v ? o : o[n] || (o[n] = {}), m = x[u], w = v ? e : h ? e[n] : (e[n] || {})[u]; + v && (r = n); + for(f in r)a = !l && w && void 0 !== w[f], a && f in x || (p = a ? w[f] : r[f], x[f] = v && "function" != typeof w[f] ? r[f] : y && a ? i(p, e) : _ && w[f] == p ? function(t) { + var n = function(n, r, e) { + if (this instanceof t) { + switch(arguments.length){ + case 0: + return new t; + case 1: + return new t(n); + case 2: + return new t(n, r); + } + return new t(n, r, e); + } + return t.apply(this, arguments); + }; + return n[u] = t[u], n; + }(p) : d && "function" == typeof p ? i(Function.call, p) : p, d && ((x.virtual || (x.virtual = {}))[f] = p, t & s.R && m && !m[f] && c(m, f, p))); + }; + s.F = 1, s.G = 2, s.S = 4, s.P = 8, s.B = 16, s.W = 32, s.U = 64, s.R = 128, t.exports = s; + }, + function(t, n) { + t.exports = function(t) { + try { + return !!t(); + } catch (t) { + return !0; + } + }; + }, + function(t, n, r) { + t.exports = r(2).document && document.documentElement; + }, + function(t, n, r) { + t.exports = !r(4) && !r(24)(function() { + return 7 != Object.defineProperty(r(16)("div"), "a", { + get: function() { + return 7; + } + }).a; + }); + }, + function(t, n, r) { + "use strict"; + var e = r(28), o = r(23), i = r(57), c = r(5), u = r(8), s = r(10), f = r(45), a = r(18), p = r(52), l = r(1)("iterator"), v = !([].keys && "next" in [].keys()), h = "@@iterator", d = "keys", y = "values", _ = function() { + return this; + }; + t.exports = function(t, n, r, x, m, w, g) { + f(r, n, x); + var b, O, j, S = function(t) { + if (!v && t in T) return T[t]; + switch(t){ + case d: + return function() { + return new r(this, t); + }; + case y: + return function() { + return new r(this, t); + }; + } + return function() { + return new r(this, t); + }; + }, E = n + " Iterator", P = m == y, M = !1, T = t.prototype, A = T[l] || T[h] || m && T[m], k = A || S(m), C = m ? P ? S("entries") : k : void 0, I = "Array" == n ? T.entries || A : A; + if (I && (j = p(I.call(new t)), j !== Object.prototype && (a(j, E, !0), e || u(j, l) || c(j, l, _))), P && A && A.name !== y && (M = !0, k = function() { + return A.call(this); + }), e && !g || !v && !M && T[l] || c(T, l, k), s[n] = k, s[E] = _, m) if (b = { + values: P ? k : S(y), + keys: w ? k : S(d), + entries: C + }, g) for(O in b)O in T || i(T, O, b[O]); + else o(o.P + o.F * (v || M), n, b); + return b; + }; + }, + function(t, n) { + t.exports = !0; + }, + function(t, n, r) { + var e = r(2), o = "__core-js_shared__", i = e[o] || (e[o] = {}); + t.exports = function(t) { + return i[t] || (i[t] = {}); + }; + }, + function(t, n, r) { + var e, o, i, c = r(7), u = r(41), s = r(25), f = r(16), a = r(2), p = a.process, l = a.setImmediate, v = a.clearImmediate, h = a.MessageChannel, d = 0, y = {}, _ = "onreadystatechange", x = function() { + var t = +this; + if (y.hasOwnProperty(t)) { + var n = y[t]; + delete y[t], n(); + } + }, m = function(t) { + x.call(t.data); + }; + l && v || (l = function(t) { + for(var n = [], r = 1; arguments.length > r;)n.push(arguments[r++]); + return y[++d] = function() { + u("function" == typeof t ? t : Function(t), n); + }, e(d), d; + }, v = function(t) { + delete y[t]; + }, "process" == r(11)(p) ? e = function(t) { + p.nextTick(c(x, t, 1)); + } : h ? (o = new h, i = o.port2, o.port1.onmessage = m, e = c(i.postMessage, i, 1)) : a.addEventListener && "function" == typeof postMessage && !a.importScripts ? (e = function(t) { + a.postMessage(t + "", "*"); + }, a.addEventListener("message", m, !1)) : e = _ in f("script") ? function(t) { + s.appendChild(f("script"))[_] = function() { + s.removeChild(this), x.call(t); + }; + } : function(t) { + setTimeout(c(x, t, 1), 0); + }), t.exports = { + set: l, + clear: v + }; + }, + function(t, n, r) { + var e = r(20), o = Math.min; + t.exports = function(t) { + return t > 0 ? o(e(t), 9007199254740991) : 0; + }; + }, + function(t, n, r) { + var e = r(9); + t.exports = function(t, n) { + if (!e(t)) return t; + var r, o; + if (n && "function" == typeof (r = t.toString) && !e(o = r.call(t))) return o; + if ("function" == typeof (r = t.valueOf) && !e(o = r.call(t))) return o; + if (!n && "function" == typeof (r = t.toString) && !e(o = r.call(t))) return o; + throw TypeError("Can't convert object to primitive value"); + }; + }, + function(t, n) { + var r = 0, e = Math.random(); + t.exports = function(t) { + return "Symbol(".concat(void 0 === t ? "" : t, ")_", (++r + e).toString(36)); + }; + }, + function(t, n, r) { + "use strict"; + function e(t) { + return t && t.__esModule ? t : { + default: t + }; + } + function o() { + return ("TURBOPACK compile-time truthy", 1) ? "" : "TURBOPACK unreachable"; + } + function i(t) { + return (0, l.createHash)("sha256").update(t).digest("hex"); + } + function c(t) { + switch(h){ + case "darwin": + return t.split("IOPlatformUUID")[1].split("\n")[0].replace(/\=|\s+|\"/gi, "").toLowerCase(); + case "win32": + return t.toString().split("REG_SZ")[1].replace(/\r+|\n+|\s+/gi, "").toLowerCase(); + case "linux": + return t.toString().replace(/\r+|\n+|\s+/gi, "").toLowerCase(); + case "freebsd": + return t.toString().replace(/\r+|\n+|\s+/gi, "").toLowerCase(); + default: + throw new Error("Unsupported platform: " + process.platform); + } + } + function u(t) { + var n = c((0, p.execSync)(y[h]).toString()); + return t ? n : i(n); + } + function s(t) { + return new a.default(function(n, r) { + return (0, p.exec)(y[h], {}, function(e, o, u) { + if (e) return r(new Error("Error while obtaining machine id: " + e.stack)); + var s = c(o.toString()); + return n(t ? s : i(s)); + }); + }); + } + Object.defineProperty(n, "__esModule", { + value: !0 + }); + var f = r(35), a = e(f); + n.machineIdSync = u, n.machineId = s; + var p = r(70), l = r(71), v = process, h = v.platform, d = { + native: "%windir%\\System32", + mixed: "%windir%\\sysnative\\cmd.exe /c %windir%\\System32" + }, y = { + darwin: "ioreg -rd1 -c IOPlatformExpertDevice", + win32: d[o()] + "\\REG.exe QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid", + linux: "( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname ) | head -n 1 || :", + freebsd: "kenv -q smbios.system.uuid || sysctl -n kern.hostuuid" + }; + }, + function(t, n, r) { + t.exports = { + default: r(36), + __esModule: !0 + }; + }, + function(t, n, r) { + r(66), r(68), r(69), r(67), t.exports = r(6).Promise; + }, + function(t, n) { + t.exports = function() {}; + }, + function(t, n) { + t.exports = function(t, n, r, e) { + if (!(t instanceof n) || void 0 !== e && e in t) throw TypeError(r + ": incorrect invocation!"); + return t; + }; + }, + function(t, n, r) { + var e = r(13), o = r(31), i = r(62); + t.exports = function(t) { + return function(n, r, c) { + var u, s = e(n), f = o(s.length), a = i(c, f); + if (t && r != r) { + for(; f > a;)if (u = s[a++], u != u) return !0; + } else for(; f > a; a++)if ((t || a in s) && s[a] === r) return t || a || 0; + return !t && -1; + }; + }; + }, + function(t, n, r) { + var e = r(7), o = r(44), i = r(43), c = r(3), u = r(31), s = r(64), f = {}, a = {}, n = t.exports = function(t, n, r, p, l) { + var v, h, d, y, _ = l ? function() { + return t; + } : s(t), x = e(r, p, n ? 2 : 1), m = 0; + if ("function" != typeof _) throw TypeError(t + " is not iterable!"); + if (i(_)) { + for(v = u(t.length); v > m; m++)if (y = n ? x(c(h = t[m])[0], h[1]) : x(t[m]), y === f || y === a) return y; + } else for(d = _.call(t); !(h = d.next()).done;)if (y = o(d, x, h.value, n), y === f || y === a) return y; + }; + n.BREAK = f, n.RETURN = a; + }, + function(t, n) { + t.exports = function(t, n, r) { + var e = void 0 === r; + switch(n.length){ + case 0: + return e ? t() : t.call(r); + case 1: + return e ? t(n[0]) : t.call(r, n[0]); + case 2: + return e ? t(n[0], n[1]) : t.call(r, n[0], n[1]); + case 3: + return e ? t(n[0], n[1], n[2]) : t.call(r, n[0], n[1], n[2]); + case 4: + return e ? t(n[0], n[1], n[2], n[3]) : t.call(r, n[0], n[1], n[2], n[3]); + } + return t.apply(r, n); + }; + }, + function(t, n, r) { + var e = r(11); + t.exports = Object("z").propertyIsEnumerable(0) ? Object : function(t) { + return "String" == e(t) ? t.split("") : Object(t); + }; + }, + function(t, n, r) { + var e = r(10), o = r(1)("iterator"), i = Array.prototype; + t.exports = function(t) { + return void 0 !== t && (e.Array === t || i[o] === t); + }; + }, + function(t, n, r) { + var e = r(3); + t.exports = function(t, n, r, o) { + try { + return o ? n(e(r)[0], r[1]) : n(r); + } catch (n) { + var i = t.return; + throw void 0 !== i && e(i.call(t)), n; + } + }; + }, + function(t, n, r) { + "use strict"; + var e = r(49), o = r(17), i = r(18), c = {}; + r(5)(c, r(1)("iterator"), function() { + return this; + }), t.exports = function(t, n, r) { + t.prototype = e(c, { + next: o(1, r) + }), i(t, n + " Iterator"); + }; + }, + function(t, n, r) { + var e = r(1)("iterator"), o = !1; + try { + var i = [ + 7 + ][e](); + i.return = function() { + o = !0; + }, Array.from(i, function() { + throw 2; + }); + } catch (t) {} + t.exports = function(t, n) { + if (!n && !o) return !1; + var r = !1; + try { + var i = [ + 7 + ], c = i[e](); + c.next = function() { + return { + done: r = !0 + }; + }, i[e] = function() { + return c; + }, t(i); + } catch (t) {} + return r; + }; + }, + function(t, n) { + t.exports = function(t, n) { + return { + value: n, + done: !!t + }; + }; + }, + function(t, n, r) { + var e = r(2), o = r(30).set, i = e.MutationObserver || e.WebKitMutationObserver, c = e.process, u = e.Promise, s = "process" == r(11)(c); + t.exports = function() { + var t, n, r, f = function() { + var e, o; + for(s && (e = c.domain) && e.exit(); t;){ + o = t.fn, t = t.next; + try { + o(); + } catch (e) { + throw t ? r() : n = void 0, e; + } + } + n = void 0, e && e.enter(); + }; + if (s) r = function() { + c.nextTick(f); + }; + else if (i) { + var a = !0, p = document.createTextNode(""); + new i(f).observe(p, { + characterData: !0 + }), r = function() { + p.data = a = !a; + }; + } else if (u && u.resolve) { + var l = u.resolve(); + r = function() { + l.then(f); + }; + } else r = function() { + o.call(e, f); + }; + return function(e) { + var o = { + fn: e, + next: void 0 + }; + n && (n.next = o), t || (t = o, r()), n = o; + }; + }; + }, + function(t, n, r) { + var e = r(3), o = r(50), i = r(22), c = r(19)("IE_PROTO"), u = function() {}, s = "prototype", f = function() { + var t, n = r(16)("iframe"), e = i.length, o = ">"; + for(n.style.display = "none", r(25).appendChild(n), n.src = "javascript:", t = n.contentWindow.document, t.open(), t.write("\n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, index))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, index)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n inserted = true\n } else {\n // This will happens in PPR rendering during next start, when the page is partially rendered.\n // When the page resumes, the head tag will be found in the middle of the chunk.\n // Where we just need to append the insertion and chunk to the current stream.\n // e.g.\n // PPR-static: ... [ resume content ] \n // PPR-resume: [ insertion ] [ rest content ]\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n controller.enqueue(chunk)\n inserted = true\n }\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\nasync function createClientResumeScriptInsertionTransformStream(): Promise<\n TransformStream\n> {\n const segmentPath = '/_full'\n const cacheBustingHeader = await computeCacheBustingSearchParam(\n '1', // headers[NEXT_ROUTER_PREFETCH_HEADER]\n '/_full', // headers[NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]\n undefined, // headers[NEXT_ROUTER_STATE_TREE_HEADER]\n undefined // headers[NEXT_URL]\n )\n const searchStr = `${NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`\n const NEXT_CLIENT_RESUME_SCRIPT = ``\n\n let didAlreadyInsert = false\n return new TransformStream({\n transform(chunk, controller) {\n if (didAlreadyInsert) {\n // Already inserted the script into the head. Pass through.\n controller.enqueue(chunk)\n return\n }\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const headClosingTagIndex = indexOfUint8Array(\n chunk,\n ENCODED_TAGS.CLOSED.HEAD\n )\n\n if (headClosingTagIndex === -1) {\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n controller.enqueue(chunk)\n return\n }\n\n const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, headClosingTagIndex))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, headClosingTagIndex)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(headClosingTagIndex),\n headClosingTagIndex + encodedInsertion.length\n )\n\n controller.enqueue(insertedHeadContent)\n didAlreadyInsert = true\n },\n })\n}\n\n// Suffix after main body content - scripts before ,\n// but wait for the major chunks to be enqueued.\nexport function createDeferredSuffixStream(\n suffix: string\n): TransformStream {\n let flushed = false\n let pending: DetachedPromise | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = new DetachedPromise()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\nexport function createFlightDataInjectionTransformStream(\n stream: ReadableStream,\n delayDataUntilFirstHtmlChunk: boolean\n): TransformStream {\n let htmlStreamFinished = false\n\n let pull: Promise | null = null\n let donePulling = false\n\n function startOrContinuePulling(\n controller: TransformStreamDefaultController\n ) {\n if (!pull) {\n pull = startPulling(controller)\n }\n return pull\n }\n\n async function startPulling(controller: TransformStreamDefaultController) {\n const reader = stream.getReader()\n\n if (delayDataUntilFirstHtmlChunk) {\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n // We want to prioritize HTML over RSC data.\n // The SSR render is based on the same RSC stream, so when we get a new RSC chunk,\n // we're likely to produce an HTML chunk as well, so give it a chance to flush first.\n if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) {\n await atLeastOneTask()\n }\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n start(controller) {\n if (!delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n flush(controller) {\n htmlStreamFinished = true\n if (donePulling) {\n return\n }\n return startOrContinuePulling(controller)\n },\n })\n}\n\nexport const CLOSE_TAG = ''\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `` will be transformed to\n * ``.\n */\nexport function createMoveSuffixStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHtmlDataDplIdTransformStream(\n dplId: string\n): TransformStream {\n let didTransform = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (didTransform) {\n controller.enqueue(chunk)\n return\n }\n\n const htmlTagIndex = indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML)\n if (htmlTagIndex === -1) {\n controller.enqueue(chunk)\n return\n }\n\n // Insert the data-dpl-id attribute right after \" {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: ('html' | 'body')[] = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `\n `<${c}>`)\n .join(\n missingTags.length > 1 ? ' and ' : ''\n )} tags in the root layout.\\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags\"\n data-next-error-digest=\"${MISSING_ROOT_TAGS_ERROR}\"\n data-next-error-stack=\"\"\n >\n `\n )\n )\n },\n })\n}\n\nexport function chainTransformers(\n readable: ReadableStream,\n transformers: ReadonlyArray | null>\n): ReadableStream {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream | undefined\n isStaticGeneration: boolean\n deploymentId: string | undefined\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactDOMServerReadableStream,\n {\n suffix,\n inlinedDataStream,\n isStaticGeneration,\n deploymentId,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n if (isStaticGeneration) {\n // If we're generating static HTML we need to wait for it to resolve before continuing.\n await renderStream.allReady\n } else {\n // Otherwise, we want to make sure Fizz is done with all microtasky work\n // before we start pulling the stream and cause a flush.\n await waitAtLeastOneReactRenderTask()\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream\n ? createFlightDataInjectionTransformStream(inlinedDataStream, true)\n : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n createHeadInsertionTransformStream(getServerInsertedHTML),\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream,\n {\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueDynamicPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n createStripDocumentClosingTagsTransform(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n ])\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Add build id comment to start of the HTML document (in export mode)\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport async function continueStaticFallbackPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n // Same as `continueStaticPrerender`, but also inserts an additional script\n // to instruct the client to start fetching the hydration data as early\n // as possible.\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Insert the client resume script into the head\n await createClientResumeScriptInsertionTransformStream(),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n delayDataUntilFirstHtmlChunk: boolean\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream,\n {\n delayDataUntilFirstHtmlChunk,\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueResumeOptions\n) {\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(\n inlinedDataStream,\n delayDataUntilFirstHtmlChunk\n ),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport function createDocumentClosingStream(): ReadableStream {\n return streamFromString(CLOSE_TAG)\n}\n\n// ---------------------------------------------------------------------------\n// Runtime prefetch transform (Web streams)\n// ---------------------------------------------------------------------------\n\n/**\n * Web TransformStream that replaces the runtime prefetch sentinel in an RSC\n * payload stream: `[]` -> `[,]`.\n *\n * This is the web equivalent of createRuntimePrefetchNodeTransform\n * in node-stream-helpers.ts.\n */\nexport function createRuntimePrefetchTransformStream(\n sentinel: number,\n isPartial: boolean,\n staleTime: number\n): TransformStream {\n const enc = new TextEncoder()\n\n // Search for: []\n // Replace with: [,]\n const search = enc.encode(`[${sentinel}]`)\n const first = search[0]\n const replace = enc.encode(`[${isPartial},${staleTime}]`)\n const searchLen = search.length\n\n let currentChunk: Uint8Array | null = null\n let found = false\n\n function processChunk(\n controller: TransformStreamDefaultController,\n nextChunk: null | Uint8Array\n ) {\n if (found) {\n if (nextChunk) {\n controller.enqueue(nextChunk)\n }\n return\n }\n\n if (currentChunk) {\n // We can't search past the index that can contain a full match\n let exclusiveUpperBound = currentChunk.length - (searchLen - 1)\n if (nextChunk) {\n // If we have any overflow bytes we can search up to the chunk's final byte\n exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1)\n }\n if (exclusiveUpperBound < 1) {\n // we can't match the current chunk.\n controller.enqueue(currentChunk)\n currentChunk = nextChunk // advance so we don't process this chunk again\n return\n }\n\n let currentIndex = currentChunk.indexOf(first)\n\n // check the current candidate match if it is within the bounds of our search space for the currentChunk\n candidateLoop: while (\n -1 < currentIndex &&\n currentIndex < exclusiveUpperBound\n ) {\n // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1\n let matchIndex = 1\n while (matchIndex < searchLen) {\n const candidateIndex = currentIndex + matchIndex\n const candidateValue =\n candidateIndex < currentChunk.length\n ? currentChunk[candidateIndex]\n : // if we ever hit this condition it is because there is a nextChunk we can read from\n nextChunk![candidateIndex - currentChunk.length]\n if (candidateValue !== search[matchIndex]) {\n // No match, reset and continue the search from the next position\n currentIndex = currentChunk.indexOf(first, currentIndex + 1)\n continue candidateLoop\n }\n matchIndex++\n }\n // We found a complete match. currentIndex is our starting point to replace the value.\n found = true\n // enqueue everything up to the match\n controller.enqueue(currentChunk.subarray(0, currentIndex))\n // enqueue the replacement value\n controller.enqueue(replace)\n // If there are bytes in the currentChunk after the match enqueue them\n if (currentIndex + searchLen < currentChunk.length) {\n controller.enqueue(currentChunk.slice(currentIndex + searchLen))\n }\n // If we have a next chunk we enqueue it now\n if (nextChunk) {\n // if replacement spills over to the next chunk we first exclude the replaced bytes\n const overflowBytes = currentIndex + searchLen - currentChunk.length\n const truncatedChunk =\n overflowBytes > 0 ? nextChunk!.subarray(overflowBytes) : nextChunk\n controller.enqueue(truncatedChunk)\n }\n // We are now in found mode and don't need to track currentChunk anymore\n currentChunk = null\n return\n }\n // No match found in this chunk, emit it and wait for the next one\n controller.enqueue(currentChunk)\n }\n\n // Advance to the next chunk\n currentChunk = nextChunk\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n processChunk(controller, chunk)\n },\n flush(controller) {\n processChunk(controller, null)\n },\n })\n}\n"],"names":["getTracer","AppRenderSpan","DetachedPromise","scheduleImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","ENCODED_TAGS","indexOfUint8Array","isEquivalentUint8Arrays","removeFromUint8Array","MISSING_ROOT_TAGS_ERROR","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_RSC_UNION_QUERY","computeCacheBustingSearchParam","voidCatch","encoder","TextEncoder","chainStreams","streams","length","ReadableStream","start","controller","close","readable","writable","TransformStream","promise","pipeTo","preventClose","i","nextStream","then","lastStream","catch","streamFromString","str","enqueue","encode","streamFromBuffer","chunk","streamToChunks","stream","reader","getReader","chunks","done","value","read","push","concatUint8Arrays","totalLength","reduce","sum","result","Uint8Array","offset","set","webstreamToUint8Array","webToReadable","process","env","NEXT_RUNTIME","Error","Readable","TURBOPACK","require","__NEXT_BUNDLER","__non_webpack_require__","fromWeb","nodestreamToUint8Array","Buffer","from","concat","streamToUint8Array","streamToBuffer","streamToString","signal","decoder","TextDecoder","fatal","string","aborted","decode","createBufferedTransformStream","options","maxBufferByteLength","Infinity","bufferedChunks","bufferByteLength","pending","flush","copiedBytes","bufferedChunk","byteLength","scheduleFlush","detached","undefined","resolve","transform","renderToInitialFizzStream","ReactDOMServer","element","streamOptions","trace","renderToReadableStream","createMetadataTransformStream","insert","chunkIndex","isMarkRemoved","iconMarkIndex","closedHeadIndex","iconMarkLength","META","ICON_MARK","CLOSED","HEAD","replaced","subarray","insertion","encodedInsertion","insertionLength","createHeadInsertionTransformStream","inserted","hasBytes","index","insertedHeadContent","slice","createClientResumeScriptInsertionTransformStream","segmentPath","cacheBustingHeader","searchStr","NEXT_CLIENT_RESUME_SCRIPT","didAlreadyInsert","headClosingTagIndex","createDeferredSuffixStream","suffix","flushed","createFlightDataInjectionTransformStream","delayDataUntilFirstHtmlChunk","htmlStreamFinished","pull","donePulling","startOrContinuePulling","startPulling","err","error","CLOSE_TAG","createMoveSuffixStream","foundSuffix","BODY_AND_HTML","before","after","createStripDocumentClosingTagsTransform","BODY","HTML","createHtmlDataDplIdTransformStream","dplId","didTransform","htmlTagIndex","OPENING","insertionPoint","attribute","encodedAttribute","modifiedChunk","createRootLayoutValidatorStream","foundHtml","foundBody","missingTags","map","c","join","chainTransformers","transformers","transformer","pipeThrough","continueFizzStream","renderStream","inlinedDataStream","isStaticGeneration","deploymentId","getServerInsertedHTML","getServerInsertedMetadata","validateRootLayout","suffixUnclosed","split","allReady","continueDynamicPrerender","prerenderStream","continueStaticPrerender","continueStaticFallbackPrerender","continueDynamicHTMLResume","createDocumentClosingStream","createRuntimePrefetchTransformStream","sentinel","isPartial","staleTime","enc","search","first","replace","searchLen","currentChunk","found","processChunk","nextChunk","exclusiveUpperBound","Math","min","currentIndex","indexOf","candidateLoop","matchIndex","candidateIndex","candidateValue","overflowBytes","truncatedChunk"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 15320, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/stream-utils/uint8array-helpers.ts"],"sourcesContent":["/**\n * Find the starting index of Uint8Array `b` within Uint8Array `a`.\n */\nexport function indexOfUint8Array(a: Uint8Array, b: Uint8Array) {\n if (b.length === 0) return 0\n if (a.length === 0 || b.length > a.length) return -1\n\n // Use Node's native implementation when available.\n if (typeof Buffer !== 'undefined') {\n const haystack = Buffer.isBuffer(a)\n ? a\n : Buffer.from(a.buffer, a.byteOffset, a.byteLength)\n return haystack.indexOf(b)\n }\n\n // start iterating through `a`\n for (let i = 0; i <= a.length - b.length; i++) {\n let completeMatch = true\n // from index `i`, iterate through `b` and check for mismatch\n for (let j = 0; j < b.length; j++) {\n // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.\n if (a[i + j] !== b[j]) {\n completeMatch = false\n break\n }\n }\n\n if (completeMatch) {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Check if two Uint8Arrays are strictly equivalent.\n */\nexport function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array) {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Remove Uint8Array `b` from Uint8Array `a`.\n *\n * If `b` is not in `a`, `a` is returned unchanged.\n *\n * Otherwise, the function returns a new Uint8Array instance with size `a.length - b.length`\n */\nexport function removeFromUint8Array(a: Uint8Array, b: Uint8Array) {\n const tagIndex = indexOfUint8Array(a, b)\n if (tagIndex === 0) return a.subarray(b.length)\n if (tagIndex > -1) {\n const removed = new Uint8Array(a.length - b.length)\n removed.set(a.subarray(0, tagIndex))\n removed.set(a.subarray(tagIndex + b.length), tagIndex)\n return removed\n } else {\n return a\n }\n}\n"],"names":["indexOfUint8Array","a","b","length","Buffer","haystack","isBuffer","from","buffer","byteOffset","byteLength","indexOf","i","completeMatch","j","isEquivalentUint8Arrays","removeFromUint8Array","tagIndex","subarray","removed","Uint8Array","set"],"mappings":"AAAA;;CAEC,GACD;;;;;;;;AAAO,SAASA,kBAAkBC,CAAa,EAAEC,CAAa;IAC5D,IAAIA,EAAEC,MAAM,KAAK,GAAG,OAAO;IAC3B,IAAIF,EAAEE,MAAM,KAAK,KAAKD,EAAEC,MAAM,GAAGF,EAAEE,MAAM,EAAE,OAAO,CAAC;IAEnD,mDAAmD;IACnD,IAAI,OAAOC,WAAW,aAAa;QACjC,MAAMC,WAAWD,OAAOE,QAAQ,CAACL,KAC7BA,IACAG,OAAOG,IAAI,CAACN,EAAEO,MAAM,EAAEP,EAAEQ,UAAU,EAAER,EAAES,UAAU;QACpD,OAAOL,SAASM,OAAO,CAACT;IAC1B;IAEA,8BAA8B;IAC9B,IAAK,IAAIU,IAAI,GAAGA,KAAKX,EAAEE,MAAM,GAAGD,EAAEC,MAAM,EAAES,IAAK;QAC7C,IAAIC,gBAAgB;QACpB,6DAA6D;QAC7D,IAAK,IAAIC,IAAI,GAAGA,IAAIZ,EAAEC,MAAM,EAAEW,IAAK;YACjC,2HAA2H;YAC3H,IAAIb,CAAC,CAACW,IAAIE,EAAE,KAAKZ,CAAC,CAACY,EAAE,EAAE;gBACrBD,gBAAgB;gBAChB;YACF;QACF;QAEA,IAAIA,eAAe;YACjB,OAAOD;QACT;IACF;IAEA,OAAO,CAAC;AACV;AAKO,SAASG,wBAAwBd,CAAa,EAAEC,CAAa;IAClE,IAAID,EAAEE,MAAM,KAAKD,EAAEC,MAAM,EAAE,OAAO;IAElC,IAAK,IAAIS,IAAI,GAAGA,IAAIX,EAAEE,MAAM,EAAES,IAAK;QACjC,IAAIX,CAAC,CAACW,EAAE,KAAKV,CAAC,CAACU,EAAE,EAAE,OAAO;IAC5B;IAEA,OAAO;AACT;AASO,SAASI,qBAAqBf,CAAa,EAAEC,CAAa;IAC/D,MAAMe,WAAWjB,kBAAkBC,GAAGC;IACtC,IAAIe,aAAa,GAAG,OAAOhB,EAAEiB,QAAQ,CAAChB,EAAEC,MAAM;IAC9C,IAAIc,WAAW,CAAC,GAAG;QACjB,MAAME,UAAU,IAAIC,WAAWnB,EAAEE,MAAM,GAAGD,EAAEC,MAAM;QAClDgB,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAAC,GAAGD;QAC1BE,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAACD,WAAWf,EAAEC,MAAM,GAAGc;QAC7C,OAAOE;IACT,OAAO;QACL,OAAOlB;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 15378, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/use-cache/clone-cache-entry.ts"],"sourcesContent":["import type { CacheEntry } from '../lib/cache-handlers/types'\n\n/**\n * Tees a cache entry's single-use value stream into two independent entries.\n * The original entry is mutated to hold one branch of the tee, and a clone is\n * returned holding the other, so both can be consumed independently.\n */\nexport function cloneCacheEntry(entry: CacheEntry): [CacheEntry, CacheEntry] {\n const [streamA, streamB] = entry.value.tee()\n entry.value = streamA\n const clonedEntry: CacheEntry = {\n value: streamB,\n timestamp: entry.timestamp,\n revalidate: entry.revalidate,\n expire: entry.expire,\n stale: entry.stale,\n tags: entry.tags,\n }\n return [entry, clonedEntry]\n}\n"],"names":["cloneCacheEntry","entry","streamA","streamB","value","tee","clonedEntry","timestamp","revalidate","expire","stale","tags"],"mappings":"AAEA;;;;CAIC,GACD;;;;AAAO,SAASA,gBAAgBC,KAAiB;IAC/C,MAAM,CAACC,SAASC,QAAQ,GAAGF,MAAMG,KAAK,CAACC,GAAG;IAC1CJ,MAAMG,KAAK,GAAGF;IACd,MAAMI,cAA0B;QAC9BF,OAAOD;QACPI,WAAWN,MAAMM,SAAS;QAC1BC,YAAYP,MAAMO,UAAU;QAC5BC,QAAQR,MAAMQ,MAAM;QACpBC,OAAOT,MAAMS,KAAK;QAClBC,MAAMV,MAAMU,IAAI;IAClB;IACA,OAAO;QAACV;QAAOK;KAAY;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 15406, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/use-cache/constants.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\n\nexport const MIN_PRERENDERABLE_EXPIRE = 300 // 5 minutes\nexport const MIN_PREFETCHABLE_STALE = 30 // 30 seconds\nexport const MIN_SHELL_STALE = 300 // 5 minutes\n\nif (process.env.NODE_ENV !== 'production') {\n if (MIN_PREFETCHABLE_STALE > MIN_SHELL_STALE) {\n throw new InvariantError(\n 'MIN_PREFETCHABLE_STALE must not exceed MIN_SHELL_STALE.'\n )\n }\n}\n"],"names":["InvariantError","MIN_PRERENDERABLE_EXPIRE","MIN_PREFETCHABLE_STALE","MIN_SHELL_STALE","process","env","NODE_ENV"],"mappings":";;;;;;;;AAAA,SAASA,cAAc,QAAQ,mCAAkC;;AAE1D,MAAMC,2BAA2B,IAAI,YAAY;;AACjD,MAAMC,yBAAyB,GAAG,aAAa;;AAC/C,MAAMC,kBAAkB,IAAI,YAAY;;AAE/C,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,WAAc;IACzC,IAAIJ,yBAAyBC,iBAAiB;QAC5C,MAAM,OAAA,cAEL,CAFK,IAAIH,4LAAAA,CACR,4DADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 15435, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/use-cache/handlers.ts"],"sourcesContent":["import { createDefaultCacheHandler } from '../lib/cache-handlers/default'\nimport type { CacheHandler } from '../lib/cache-handlers/types'\nimport {\n createTieredCacheHandler,\n type CacheReadWriteHandler,\n} from './tiered-cache-handler'\n\nconst debug = process.env.NEXT_PRIVATE_DEBUG_CACHE\n ? (message: string, ...args: any[]) => {\n console.log(`use-cache: ${message}`, ...args)\n }\n : undefined\n\nconst handlersSymbol = Symbol.for('@next/cache-handlers')\nconst handlersMapSymbol = Symbol.for('@next/cache-handlers-map')\nconst handlersSetSymbol = Symbol.for('@next/cache-handlers-set')\nconst privateHandlerSymbol = Symbol.for('@next/cache-handlers-private')\nconst builtInHandlersSymbol = Symbol.for('@next/cache-handlers-built-in')\nconst devFrontHandlersSymbol = Symbol.for('@next/cache-handlers-dev-fronts')\nconst devTieredHandlersSymbol = Symbol.for('@next/cache-handlers-dev-tiered')\nconst memoryCacheDisabledSymbol = Symbol.for(\n '@next/cache-handlers-memory-disabled'\n)\n\n/**\n * The in-memory size used for the dev-only built-in handlers (the private\n * handler, the size-0 replacement, and the per-kind front handlers for custom\n * kinds). Mirrors the framework default so `cacheMaxMemorySize: 0` does not\n * disable caching in development.\n */\nconst DEV_MEMORY_CACHE_SIZE = 50 * 1024 * 1024\n\n/**\n * The reference to the cache handlers. We store the cache handlers on the\n * global object so that we can access the same instance across different\n * boundaries (such as different copies of the same module).\n */\nconst reference: typeof globalThis & {\n [handlersSymbol]?: {\n RemoteCache?: CacheHandler\n DefaultCache?: CacheHandler\n }\n [handlersMapSymbol]?: Map\n [handlersSetSymbol]?: Set\n [builtInHandlersSymbol]?: Set\n // DEV-only\n [privateHandlerSymbol]?: CacheHandler\n [devFrontHandlersSymbol]?: Map\n [devTieredHandlersSymbol]?: Map\n [memoryCacheDisabledSymbol]?: boolean\n} = globalThis\n\n/**\n * Initialize the cache handlers.\n * @param cacheMaxMemorySize - The maximum memory size of the cache in bytes, if\n * not provided, the default memory size will be used.\n * @returns `true` if the cache handlers were initialized, `false` if they were already initialized.\n */\nexport function initializeCacheHandlers(cacheMaxMemorySize: number): boolean {\n // If the cache handlers have already been initialized, don't do it again.\n if (reference[handlersMapSymbol]) {\n debug?.('cache handlers already initialized')\n return false\n }\n\n debug?.('initializing cache handlers')\n const handlersMap = new Map()\n reference[handlersMapSymbol] = handlersMap\n const builtInHandlers = new Set()\n reference[builtInHandlersSymbol] = builtInHandlers\n\n // In development, `cacheMaxMemorySize: 0` would make the built-in default\n // handler a no-op, so every reload would miss. Use a real in-memory size\n // instead so dev stays fast; the \"use cache\" wrapper forces a dynamic cache\n // life for this case so it still behaves close to \"no cache\" (serve stale,\n // regenerate in the background). Production keeps the no-op handler.\n const builtInSize =\n process.env.__NEXT_DEV_SERVER && cacheMaxMemorySize === 0\n ? DEV_MEMORY_CACHE_SIZE\n : cacheMaxMemorySize\n\n // Initialize the cache from the symbol contents first.\n if (reference[handlersSymbol]) {\n let fallback: CacheHandler\n if (reference[handlersSymbol].DefaultCache) {\n debug?.('setting \"default\" cache handler from symbol')\n fallback = reference[handlersSymbol].DefaultCache\n } else {\n debug?.('setting \"default\" cache handler from default')\n fallback = createDefaultCacheHandler(builtInSize)\n builtInHandlers.add(fallback)\n }\n\n handlersMap.set('default', fallback)\n\n if (reference[handlersSymbol].RemoteCache) {\n debug?.('setting \"remote\" cache handler from symbol')\n handlersMap.set('remote', reference[handlersSymbol].RemoteCache)\n } else {\n debug?.('setting \"remote\" cache handler from default')\n handlersMap.set('remote', fallback)\n }\n } else {\n const handler = createDefaultCacheHandler(builtInSize)\n builtInHandlers.add(handler)\n\n debug?.('setting \"default\" cache handler from default')\n handlersMap.set('default', handler)\n debug?.('setting \"remote\" cache handler from default')\n handlersMap.set('remote', handler)\n }\n\n // Create a set of the cache handlers.\n reference[handlersSetSymbol] = new Set(handlersMap.values())\n\n // In development we add dedicated built-in in-memory handlers so that reloads\n // are fast. These are always built-in handlers, never a user-configured one,\n // and are gated on the dev server so production behaves exactly as\n // configured.\n if (process.env.__NEXT_DEV_SERVER) {\n reference[memoryCacheDisabledSymbol] = cacheMaxMemorySize === 0\n\n // Private caches are persisted here so reloads are fast. Private entries\n // can hold data specific to the incoming request (for example, derived from\n // its cookies or headers), so this is never the user-configured `default`\n // alias. Sized so it still caches under `cacheMaxMemorySize: 0` (otherwise\n // it would become the no-op stub and private reloads would miss).\n reference[privateHandlerSymbol] = createDefaultCacheHandler(\n DEV_MEMORY_CACHE_SIZE\n )\n\n // Built-in front handlers, one per custom kind, and the tiered handlers\n // that place a front in front of a (possibly slow or remote) backing\n // handler so cache hits resolve in a microtask, are both created per kind\n // in `setCacheHandler`.\n reference[devFrontHandlersSymbol] = new Map()\n reference[devTieredHandlersSymbol] = new Map()\n }\n\n return true\n}\n\n/**\n * Get a cache handler by kind.\n * @param kind - The kind of cache handler to get.\n * @returns The cache handler, or `undefined` if it does not exist.\n * @throws If the cache handlers are not initialized.\n */\nexport function getCacheHandler(kind: string): CacheHandler | undefined {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n return reference[handlersMapSymbol].get(kind)\n}\n\n/**\n * Get the dedicated in-memory cache handler that persists private caches in\n * development. Returns `undefined` outside the dev server, where private caches\n * must not be persisted. This is intentionally not part of the kind-keyed\n * handlers map so that it can never be replaced by a user-configured handler.\n */\nexport function getPrivateCacheHandler(): CacheHandler | undefined {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n return reference[privateHandlerSymbol]\n}\n\n/**\n * Whether the in-memory cache is disabled (`cacheMaxMemorySize: 0`). Dev-only\n * signal used to force a dynamic cache life so that the size-0 case still\n * serves stale and regenerates in the background. Always `false` in production.\n */\nexport function isMemoryCacheDisabled(): boolean {\n return reference[memoryCacheDisabledSymbol] ?? false\n}\n\n/**\n * Whether `kind` is backed by a real user-configured handler rather than the\n * built-in in-memory default. Such a handler may be slow or remote, so in\n * development a built-in front handler is placed in front of it (see\n * `getDevTieredCacheHandler`) to keep cache hits microtask-fast. The presence\n * of a dev front handler is the signal, since front handlers are created\n * exactly for user-registered kinds. Always `false` in production.\n */\nexport function isCustomCacheHandler(kind: string): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return reference[devFrontHandlersSymbol]?.has(kind) ?? false\n}\n\n/**\n * Whether `kind` resolves to one of the in-memory handlers that\n * `initializeCacheHandlers` constructs itself, rather than one supplied by the\n * platform through the `@next/cache-handlers` global or by `cacheHandlers`\n * config. Reads from a built-in handler are map lookups, so repeating one\n * within a request costs nothing; reads from a supplied handler may be a\n * network round trip. Unlike `isCustomCacheHandler`, this holds in production.\n *\n * Tracking the instances rather than the kinds is what keeps aliasing correct:\n * self-hosted, `remote` resolves to the same handler as `default` and so\n * reports as built-in, while a platform-supplied `remote` does not.\n */\nexport function isBuiltInCacheHandler(kind: string): boolean {\n const handler = reference[handlersMapSymbol]?.get(kind)\n\n return (\n handler !== undefined &&\n Boolean(reference[builtInHandlersSymbol]?.has(handler))\n )\n}\n\n/**\n * Get the dev-only tiered cache handler for a custom `kind`: a fast built-in\n * in-memory front handler in front of the user-configured backing handler, so\n * cache hits resolve in a microtask. Returns `undefined` if there is none (a\n * built-in kind, or production).\n */\nexport function getDevTieredCacheHandler(\n kind: string\n): CacheReadWriteHandler | undefined {\n if (!process.env.__NEXT_DEV_SERVER) {\n return undefined\n }\n\n return reference[devTieredHandlersSymbol]?.get(kind)\n}\n\n/**\n * Get an iterator over the cache handlers.\n * @returns An iterator over the cache handlers, or `undefined` if they are not\n * initialized.\n */\nexport function getCacheHandlers(): IterableIterator | undefined {\n const handlersSet = reference[handlersSetSymbol]\n if (!handlersSet) {\n return undefined\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n return iterateCacheHandlersWithDevBuiltIns(handlersSet)\n }\n\n return handlersSet.values()\n}\n\n/**\n * Yields the registered handlers plus the dev-only built-in handlers (the\n * private handler and the per-kind front handlers). The built-in handlers are\n * not part of the registered set, but tag operations must still reach them:\n * their `updateTags` writes the shared tags manifest that their `get` consults,\n * so `revalidateTag` can invalidate their entries.\n */\nfunction* iterateCacheHandlersWithDevBuiltIns(\n handlersSet: Set\n): IterableIterator {\n yield* handlersSet\n\n const privateHandler = reference[privateHandlerSymbol]\n if (privateHandler) {\n yield privateHandler\n }\n\n const devFrontHandlers = reference[devFrontHandlersSymbol]\n if (devFrontHandlers) {\n yield* devFrontHandlers.values()\n }\n}\n\n/**\n * Get a map iterator over the cache handlers (keyed by kind).\n * @returns An iterator over the cache handler entries, or `undefined` if they\n * are not initialized.\n * @throws If the cache handlers are not initialized.\n */\nexport function getCacheHandlerEntries():\n | IterableIterator<[string, CacheHandler]>\n | undefined {\n const handlersMap = reference[handlersMapSymbol]\n if (!handlersMap) {\n return undefined\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n return iterateCacheHandlerEntriesWithDevBuiltIns(handlersMap)\n }\n\n return handlersMap.entries()\n}\n\n/**\n * Yields the registered entries plus the dev-only private handler under its\n * kind, so that per-kind tag operations (`refreshTags` / `getExpiration` for\n * implicit tags) apply to private entries. Custom-kind front handlers are\n * intentionally omitted: the backing handler (already in the map) is\n * authoritative for that kind's `getExpiration`, and a front entry is discarded\n * via that same value.\n */\nfunction* iterateCacheHandlerEntriesWithDevBuiltIns(\n handlersMap: Map\n): IterableIterator<[string, CacheHandler]> {\n yield* handlersMap.entries()\n\n const privateHandler = reference[privateHandlerSymbol]\n if (privateHandler) {\n const privateEntry: [string, CacheHandler] = ['private', privateHandler]\n yield privateEntry\n }\n}\n\n/**\n * Set a cache handler by kind.\n * @param kind - The kind of cache handler to set.\n * @param cacheHandler - The cache handler to set.\n */\nexport function setCacheHandler(\n kind: string,\n cacheHandler: CacheHandler\n): void {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol] || !reference[handlersSetSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n debug?.('setting cache handler for \"%s\"', kind)\n reference[handlersMapSymbol].set(kind, cacheHandler)\n reference[handlersSetSymbol].add(cacheHandler)\n\n // A user-configured handler may be slow or remote. In development, give it a\n // dedicated built-in in-memory front handler so cache hits resolve in a\n // microtask, and pair the two into a tiered handler the wrapper reads\n // through. Both are created alongside registration so their lifecycle matches\n // the backing handler's, and the front handler's presence is the signal that\n // this kind is backed by a real handler (see `isCustomCacheHandler`). Being a\n // built-in default handler, the front inherits the dev minimum retention, so\n // a short-`expire` value still hits the front instead of falling through to\n // the slow backing on every read.\n if (process.env.__NEXT_DEV_SERVER) {\n const frontHandler = createDefaultCacheHandler(DEV_MEMORY_CACHE_SIZE)\n reference[devFrontHandlersSymbol]?.set(kind, frontHandler)\n reference[devTieredHandlersSymbol]?.set(\n kind,\n createTieredCacheHandler(frontHandler, cacheHandler)\n )\n }\n}\n"],"names":["createDefaultCacheHandler","createTieredCacheHandler","debug","process","env","NEXT_PRIVATE_DEBUG_CACHE","message","args","console","log","undefined","handlersSymbol","Symbol","for","handlersMapSymbol","handlersSetSymbol","privateHandlerSymbol","builtInHandlersSymbol","devFrontHandlersSymbol","devTieredHandlersSymbol","memoryCacheDisabledSymbol","DEV_MEMORY_CACHE_SIZE","reference","globalThis","initializeCacheHandlers","cacheMaxMemorySize","handlersMap","Map","builtInHandlers","Set","builtInSize","__NEXT_DEV_SERVER","fallback","DefaultCache","add","set","RemoteCache","handler","values","getCacheHandler","kind","Error","get","getPrivateCacheHandler","isMemoryCacheDisabled","isCustomCacheHandler","has","isBuiltInCacheHandler","Boolean","getDevTieredCacheHandler","getCacheHandlers","handlersSet","iterateCacheHandlersWithDevBuiltIns","privateHandler","devFrontHandlers","getCacheHandlerEntries","iterateCacheHandlerEntriesWithDevBuiltIns","entries","privateEntry","setCacheHandler","cacheHandler","frontHandler"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 15681, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/use-cache/tiered-cache-handler.ts"],"sourcesContent":["import type { CacheEntry, CacheHandler } from '../lib/cache-handlers/types'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { cloneCacheEntry } from './clone-cache-entry'\n\n/**\n * The subset of the cache-handler interface used on the per-invocation\n * read/write path in the \"use cache\" wrapper. Tag operations are intentionally\n * excluded: they are applied to the front and backing handlers individually by\n * the registry iterators (`getCacheHandlers` / `getCacheHandlerEntries`), never\n * through this composite, so the composite is never registered.\n */\nexport type CacheReadWriteHandler = Pick\n\n/**\n * Development-only. Puts a fast built-in in-memory `front` handler in front of\n * a slower or persistent user-configured `backing` handler. Its only job is to\n * guarantee that cache hits resolve in a microtask (so they aren't counted as\n * cache misses at a staged-render boundary, which would otherwise surface a\n * cold cache indicator), while keeping the front in sync with the backing.\n *\n * It implements only `get` and `set` because that is all the wrapper calls on\n * its handler. Regeneration is never done here; this only reads, mirrors, and\n * writes through.\n *\n * The handler is a per-kind singleton (the front and backing are both shared),\n * so its in-flight map can serialize background front syncs for a key across\n * concurrent reads, running them one at a time instead of in parallel.\n */\nexport function createTieredCacheHandler(\n front: CacheHandler,\n backing: CacheHandler\n): CacheReadWriteHandler {\n // Holds the in-flight (or chained) background sync per key, so a sync for a\n // key runs after any earlier one for that key rather than in parallel.\n const inFlightSyncs = new Map>()\n\n function scheduleBackgroundSync(\n cacheKey: string,\n sync: () => Promise\n ): void {\n // Serialize syncs per key: chain this one after any in-flight sync rather\n // than running a second in parallel. The trailing sync still re-reads the\n // backing, so the front converges to the latest state; a later read is\n // never dropped in favor of an earlier, possibly stale, in-flight read.\n const previous = inFlightSyncs.get(cacheKey)\n\n let pending: Promise\n if (previous) {\n pending = previous.then(sync)\n } else {\n pending = sync()\n }\n\n pending = pending.finally(() => {\n if (inFlightSyncs.get(cacheKey) === pending) {\n inFlightSyncs.delete(cacheKey)\n }\n })\n\n inFlightSyncs.set(cacheKey, pending)\n\n // Register the sync on the current request's revalidation writes so it is\n // awaited rather than left untracked. Reading the work store here (rather\n // than capturing it at construction) is what lets the handler be a shared\n // singleton; `get` always runs within the request's async context, so the\n // store is present.\n const workStore = workAsyncStorage.getStore()\n if (workStore) {\n workStore.pendingRevalidateWrites ??= []\n workStore.pendingRevalidateWrites.push(pending)\n }\n }\n\n return {\n async get(cacheKey, softTags) {\n const frontEntry = await front.get(cacheKey, softTags)\n\n if (frontEntry) {\n // Cache hit: serve immediately (in a microtask). A background reconcile\n // keeps the front in sync with the backing for the next read;\n // reconciles for the same key are serialized, so concurrent cache hits\n // don't hit the backing in parallel.\n scheduleBackgroundSync(cacheKey, () =>\n reconcileFrontFromBacking(\n front,\n backing,\n cacheKey,\n softTags,\n frontEntry\n )\n )\n\n return frontEntry\n }\n\n // Cold or evicted front entry: we pay the backing latency here (this is a\n // read that may legitimately surface a cold cache indicator). A miss\n // returns undefined and the \"use cache\" wrapper generates the entry and\n // writes it through both tiers via `set`.\n const backingEntry = await backing.get(cacheKey, softTags)\n\n if (!backingEntry) {\n return undefined\n }\n\n // Mirror this freshly read backing entry into the front so the next read\n // hits it. The mirror is serialized per key: if a sync is already\n // running, this chains after it, so the front converges to this read even\n // if the backing changed since that sync started.\n const [servedEntry, mirroredEntry] = cloneCacheEntry(backingEntry)\n scheduleBackgroundSync(cacheKey, () =>\n mirrorIntoFront(front, cacheKey, mirroredEntry)\n )\n\n return servedEntry\n },\n\n async set(cacheKey, pendingEntry) {\n // Write through to both tiers. The entry's value stream is single-use, so\n // tee it into one entry per tier.\n const entry = await pendingEntry\n const [frontEntry, backingEntry] = cloneCacheEntry(entry)\n\n await Promise.all([\n front.set(cacheKey, Promise.resolve(frontEntry)),\n backing.set(cacheKey, Promise.resolve(backingEntry)),\n ])\n },\n }\n}\n\n/**\n * After serving a cache hit from the front, consult the backing and mirror a\n * newer entry into the front for the next read. Runs in the background;\n * failures are non-fatal.\n */\nasync function reconcileFrontFromBacking(\n front: CacheHandler,\n backing: CacheHandler,\n cacheKey: string,\n softTags: string[],\n frontEntry: CacheEntry\n): Promise {\n try {\n const backingEntry = await backing.get(cacheKey, softTags)\n\n if (!backingEntry) {\n // The backing no longer has this entry (it was purged out-of-band). The\n // cache-handler interface has no per-key delete, so evict the front entry\n // by overwriting it with an already-expired copy: the next read sees a\n // front miss, falls through to the (also empty) backing, and the wrapper\n // regenerates. The entry we just served was the last stale read.\n await front.set(cacheKey, Promise.resolve(toExpiredEntry(frontEntry)))\n\n return\n }\n\n if (backingEntry.timestamp > frontEntry.timestamp) {\n await front.set(cacheKey, Promise.resolve(backingEntry))\n } else {\n // The front is already up to date, so the backing entry goes unused.\n // Release its stream without awaiting: a teed stream's `cancel()` only\n // settles once the sibling branch (retained by the backing handler) is\n // also cancelled, so awaiting it here would hang the reconcile.\n void backingEntry.value.cancel()\n }\n } catch {\n // Background warming; failures are non-fatal.\n }\n}\n\n/**\n * Mirror a backing entry into the front.\n */\nasync function mirrorIntoFront(\n front: CacheHandler,\n cacheKey: string,\n entry: CacheEntry\n): Promise {\n try {\n await front.set(cacheKey, Promise.resolve(entry))\n } catch {\n // Background warming; failures are non-fatal.\n }\n}\n\n/**\n * Build an already-expired copy of an entry, used to evict it from the front\n * handler (which has no per-key delete) once the backing no longer has it. The\n * default handler treats a negative `expire` as an eviction sentinel and\n * reports the entry as missing on the next read. A negative `expire` is used\n * rather than `0` because the dev front handler enforces a minimum retention,\n * so a `0` `expire` would be kept alive by that minimum instead of evicted. The\n * value is never read once the entry is evicted, but it must carry at least one\n * byte because the built-in LRU cache refuses to store size-0 entries.\n */\nfunction toExpiredEntry(entry: CacheEntry): CacheEntry {\n return {\n ...entry,\n expire: -1,\n value: new ReadableStream({\n start(controller) {\n controller.enqueue(new Uint8Array(1))\n controller.close()\n },\n }),\n }\n}\n"],"names":["workAsyncStorage","cloneCacheEntry","createTieredCacheHandler","front","backing","inFlightSyncs","Map","scheduleBackgroundSync","cacheKey","sync","previous","get","pending","then","finally","delete","set","workStore","getStore","pendingRevalidateWrites","push","softTags","frontEntry","reconcileFrontFromBacking","backingEntry","undefined","servedEntry","mirroredEntry","mirrorIntoFront","pendingEntry","entry","Promise","all","resolve","toExpiredEntry","timestamp","value","cancel","expire","ReadableStream","start","controller","enqueue","Uint8Array","close"],"mappings":";;;;AACA,SAASA,gBAAgB,QAAQ,4CAA2C;AAC5E,SAASC,eAAe,QAAQ,sBAAqB;;;AA0B9C,SAASC,yBACdC,KAAmB,EACnBC,OAAqB;IAErB,4EAA4E;IAC5E,uEAAuE;IACvE,MAAMC,gBAAgB,IAAIC;IAE1B,SAASC,uBACPC,QAAgB,EAChBC,IAAyB;QAEzB,0EAA0E;QAC1E,0EAA0E;QAC1E,uEAAuE;QACvE,wEAAwE;QACxE,MAAMC,WAAWL,cAAcM,GAAG,CAACH;QAEnC,IAAII;QACJ,IAAIF,UAAU;YACZE,UAAUF,SAASG,IAAI,CAACJ;QAC1B,OAAO;YACLG,UAAUH;QACZ;QAEAG,UAAUA,QAAQE,OAAO,CAAC;YACxB,IAAIT,cAAcM,GAAG,CAACH,cAAcI,SAAS;gBAC3CP,cAAcU,MAAM,CAACP;YACvB;QACF;QAEAH,cAAcW,GAAG,CAACR,UAAUI;QAE5B,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,oBAAoB;QACpB,MAAMK,YAAYjB,uRAAAA,CAAiBkB,QAAQ;QAC3C,IAAID,WAAW;YACbA,UAAUE,uBAAuB,KAAK,EAAE;YACxCF,UAAUE,uBAAuB,CAACC,IAAI,CAACR;QACzC;IACF;IAEA,OAAO;QACL,MAAMD,KAAIH,QAAQ,EAAEa,QAAQ;YAC1B,MAAMC,aAAa,MAAMnB,MAAMQ,GAAG,CAACH,UAAUa;YAE7C,IAAIC,YAAY;gBACd,wEAAwE;gBACxE,8DAA8D;gBAC9D,uEAAuE;gBACvE,qCAAqC;gBACrCf,uBAAuBC,UAAU,IAC/Be,0BACEpB,OACAC,SACAI,UACAa,UACAC;gBAIJ,OAAOA;YACT;YAEA,0EAA0E;YAC1E,qEAAqE;YACrE,wEAAwE;YACxE,0CAA0C;YAC1C,MAAME,eAAe,MAAMpB,QAAQO,GAAG,CAACH,UAAUa;YAEjD,IAAI,CAACG,cAAc;gBACjB,OAAOC;YACT;YAEA,yEAAyE;YACzE,kEAAkE;YAClE,0EAA0E;YAC1E,kDAAkD;YAClD,MAAM,CAACC,aAAaC,cAAc,OAAG1B,2MAAAA,EAAgBuB;YACrDjB,uBAAuBC,UAAU,IAC/BoB,gBAAgBzB,OAAOK,UAAUmB;YAGnC,OAAOD;QACT;QAEA,MAAMV,KAAIR,QAAQ,EAAEqB,YAAY;YAC9B,0EAA0E;YAC1E,kCAAkC;YAClC,MAAMC,QAAQ,MAAMD;YACpB,MAAM,CAACP,YAAYE,aAAa,OAAGvB,2MAAAA,EAAgB6B;YAEnD,MAAMC,QAAQC,GAAG,CAAC;gBAChB7B,MAAMa,GAAG,CAACR,UAAUuB,QAAQE,OAAO,CAACX;gBACpClB,QAAQY,GAAG,CAACR,UAAUuB,QAAQE,OAAO,CAACT;aACvC;QACH;IACF;AACF;AAEA;;;;CAIC,GACD,eAAeD,0BACbpB,KAAmB,EACnBC,OAAqB,EACrBI,QAAgB,EAChBa,QAAkB,EAClBC,UAAsB;IAEtB,IAAI;QACF,MAAME,eAAe,MAAMpB,QAAQO,GAAG,CAACH,UAAUa;QAEjD,IAAI,CAACG,cAAc;YACjB,wEAAwE;YACxE,0EAA0E;YAC1E,uEAAuE;YACvE,yEAAyE;YACzE,iEAAiE;YACjE,MAAMrB,MAAMa,GAAG,CAACR,UAAUuB,QAAQE,OAAO,CAACC,eAAeZ;YAEzD;QACF;QAEA,IAAIE,aAAaW,SAAS,GAAGb,WAAWa,SAAS,EAAE;YACjD,MAAMhC,MAAMa,GAAG,CAACR,UAAUuB,QAAQE,OAAO,CAACT;QAC5C,OAAO;YACL,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,gEAAgE;YAChE,KAAKA,aAAaY,KAAK,CAACC,MAAM;QAChC;IACF,EAAE,OAAM;IACN,8CAA8C;IAChD;AACF;AAEA;;CAEC,GACD,eAAeT,gBACbzB,KAAmB,EACnBK,QAAgB,EAChBsB,KAAiB;IAEjB,IAAI;QACF,MAAM3B,MAAMa,GAAG,CAACR,UAAUuB,QAAQE,OAAO,CAACH;IAC5C,EAAE,OAAM;IACN,8CAA8C;IAChD;AACF;AAEA;;;;;;;;;CASC,GACD,SAASI,eAAeJ,KAAiB;IACvC,OAAO;QACL,GAAGA,KAAK;QACRQ,QAAQ,CAAC;QACTF,OAAO,IAAIG,eAAe;YACxBC,OAAMC,UAAU;gBACdA,WAAWC,OAAO,CAAC,IAAIC,WAAW;gBAClCF,WAAWG,KAAK;YAClB;QACF;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 15824, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/adapter.ts"],"sourcesContent":["import type { RequestData, FetchEventResult } from './types'\nimport type { RequestInit } from './spec-extension/request'\nimport { PageSignatureError } from './error'\nimport { fromNodeOutgoingHttpHeaders, normalizeNextQueryParam } from './utils'\nimport {\n NextFetchEvent,\n getWaitUntilPromiseFromEvent,\n} from './spec-extension/fetch-event'\nimport { NextRequest } from './spec-extension/request'\nimport { NextResponse } from './spec-extension/response'\nimport {\n parseRelativeURL,\n getRelativeURL,\n} from '../../shared/lib/router/utils/relativize-url'\nimport { NextURL } from './next-url'\nimport { stripInternalSearchParams } from '../internal-utils'\nimport { normalizeRscURL } from '../../shared/lib/router/utils/app-paths'\nimport {\n FLIGHT_HEADERS,\n NEXT_REWRITTEN_PATH_HEADER,\n NEXT_REWRITTEN_QUERY_HEADER,\n NEXT_RSC_UNION_QUERY,\n RSC_HEADER,\n} from '../../client/components/app-router-headers'\nimport { ensureInstrumentationRegistered } from './globals'\nimport { createRequestStoreForAPI } from '../async-storage/request-store'\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\nimport { createWorkStore } from '../async-storage/work-store'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport type { ResolvedCacheLifeProfiles } from '../config-shared'\nimport { NEXT_ROUTER_PREFETCH_HEADER } from '../../client/components/app-router-headers'\nimport { getTracer } from '../lib/trace/tracer'\nimport type { TextMapGetter } from 'next/dist/compiled/@opentelemetry/api'\nimport { MiddlewareSpan } from '../lib/trace/constants'\nimport { CloseController } from './web-on-close'\nimport { getEdgePreviewProps } from './get-edge-preview-props'\nimport { getBuiltinRequestContext } from '../after/builtin-request-context'\nimport { getImplicitTags } from '../lib/implicit-tags'\nimport { isRSCRequestHeader } from '../lib/is-rsc-request'\nimport { setRequestMeta } from '../request-meta'\n\n// The proxy (middleware) does not support `'use cache'`, so this work store\n// never reaches the code that reads `cacheLife` (and `'use cache'` is\n// disallowed on the edge runtime anyway). This sentinel satisfies the\n// non-optional type while throwing if `default` is ever read, matching the\n// \"never read\" sentinels used for the proxy's other unused renderOpts fields\n// (`staticPageGenerationTimeout: 0`, `useCacheTimeout: 0`). It surfaces loudly\n// rather than silently serving a misleading profile.\nconst proxyCacheLifeProfiles: ResolvedCacheLifeProfiles = {\n get default(): never {\n throw new InvariantError(\n 'Proxy does not support `use cache`, so reading its `default` cacheLife profile is unexpected.'\n )\n },\n}\n\nexport class NextRequestHint extends NextRequest {\n sourcePage: string\n fetchMetrics: FetchEventResult['fetchMetrics'] | undefined\n\n constructor(params: {\n init: RequestInit\n input: Request | string\n page: string\n }) {\n super(params.input, params.init)\n this.sourcePage = params.page\n }\n\n get request() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n\n respondWith() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n\n waitUntil() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n}\n\nconst headersGetter: TextMapGetter = {\n keys: (headers) => Array.from(headers.keys()),\n get: (headers, key) => headers.get(key) ?? undefined,\n}\n\nexport type AdapterOptions = {\n handler: (req: NextRequestHint, event: NextFetchEvent) => Promise\n page: string\n request: RequestData\n IncrementalCache?: typeof import('../lib/incremental-cache').IncrementalCache\n incrementalCacheHandler?: typeof import('../lib/incremental-cache').CacheHandler\n bypassNextUrl?: boolean\n}\n\n// This has to be compatible with what the Vercel builder does as well:\n// https://github.com/vercel/vercel/blob/0e0a6eb9f12216202ae2f5ee37e4ada1796361fd/packages/next/src/edge-function-source/get-edge-function.ts#L112-L136\nexport type EdgeHandler = (opts: {\n request: AdapterOptions['request']\n}) => Promise\n\nlet propagator: (request: NextRequestHint, fn: () => T) => T = (\n request,\n fn\n) => {\n const tracer = getTracer()\n return tracer.withPropagatedContext(request.headers, fn, headersGetter)\n}\n\nlet testApisIntercepted = false\n\nfunction ensureTestApisIntercepted() {\n if (!testApisIntercepted) {\n testApisIntercepted = true\n if (process.env.NEXT_PRIVATE_TEST_PROXY === 'true') {\n const { interceptTestApis, wrapRequestHandler } =\n // eslint-disable-next-line @next/internal/typechecked-require -- experimental/testmode is not built ins next/dist/esm\n require('next/dist/experimental/testmode/server-edge') as typeof import('../../experimental/testmode/server-edge')\n interceptTestApis()\n propagator = wrapRequestHandler(propagator)\n }\n }\n}\n\nexport async function adapter(\n params: AdapterOptions\n): Promise {\n ensureTestApisIntercepted()\n await ensureInstrumentationRegistered()\n\n // TODO-APP: use explicit marker for this\n const isEdgeRendering =\n typeof (globalThis as any).__BUILD_MANIFEST !== 'undefined'\n\n params.request.url = normalizeRscURL(params.request.url)\n\n const requestURL = params.bypassNextUrl\n ? new URL(params.request.url)\n : new NextURL(params.request.url, {\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n // Iterator uses an index to keep track of the current iteration. Because of deleting and appending below we can't just use the iterator.\n // Instead we use the keys before iteration.\n const keys = [...requestURL.searchParams.keys()]\n for (const key of keys) {\n const value = requestURL.searchParams.getAll(key)\n\n const normalizedKey = normalizeNextQueryParam(key)\n if (normalizedKey) {\n requestURL.searchParams.delete(normalizedKey)\n for (const val of value) {\n requestURL.searchParams.append(normalizedKey, val)\n }\n requestURL.searchParams.delete(key)\n }\n }\n\n // Ensure users only see page requests, never data requests.\n let buildId = process.env.__NEXT_BUILD_ID || ''\n if ('buildId' in requestURL) {\n buildId = (requestURL as NextURL).buildId || ''\n requestURL.buildId = ''\n }\n let deploymentId = process.env.NEXT_DEPLOYMENT_ID\n\n const requestHeaders = fromNodeOutgoingHttpHeaders(params.request.headers)\n const isNextDataRequest = requestHeaders.has('x-nextjs-data')\n const isRSCRequest = isRSCRequestHeader(requestHeaders.get(RSC_HEADER))\n\n if (isNextDataRequest && requestURL.pathname === '/index') {\n requestURL.pathname = '/'\n }\n\n const flightHeaders = new Map()\n\n // Headers should only be stripped for middleware\n if (!isEdgeRendering && !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) {\n for (const header of FLIGHT_HEADERS) {\n const value = requestHeaders.get(header)\n if (value !== null) {\n flightHeaders.set(header, value)\n requestHeaders.delete(header)\n }\n }\n }\n\n const normalizeURL = process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? new URL(params.request.url)\n : requestURL\n\n const rscHash = normalizeURL.searchParams.get(NEXT_RSC_UNION_QUERY)\n\n const request = new NextRequestHint({\n page: params.page,\n // Strip internal query parameters off the request.\n input: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? normalizeURL.toString()\n : stripInternalSearchParams(normalizeURL).toString(),\n init: {\n body: params.request.body,\n headers: requestHeaders,\n method: params.request.method,\n nextConfig: params.request.nextConfig,\n signal: params.request.signal,\n },\n })\n\n if (params.request.requestMeta) {\n setRequestMeta(request, params.request.requestMeta)\n }\n\n /**\n * This allows to identify the request as a data request. The user doesn't\n * need to know about this property neither use it. We add it for testing\n * purposes.\n */\n if (isNextDataRequest) {\n Object.defineProperty(request, '__isData', {\n enumerable: false,\n value: true,\n })\n }\n\n if (\n // If we are inside of the next start sandbox\n // leverage the shared instance if not we need\n // to create a fresh cache instance each time\n !(globalThis as any).__incrementalCacheShared &&\n (params as any).IncrementalCache\n ) {\n ;(globalThis as any).__incrementalCache = new (\n params as {\n IncrementalCache: typeof import('../lib/incremental-cache').IncrementalCache\n }\n ).IncrementalCache({\n CurCacheHandler: params.incrementalCacheHandler,\n minimalMode: process.env.NODE_ENV !== 'development',\n fetchCacheKeyPrefix: process.env.__NEXT_FETCH_CACHE_KEY_PREFIX,\n dev: process.env.NODE_ENV === 'development',\n requestHeaders: params.request.headers as any,\n\n getPrerenderManifest: () => {\n return {\n version: -1 as any, // letting us know this doesn't conform to spec\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n preview: getEdgePreviewProps(),\n }\n },\n })\n }\n\n // if we're in an edge runtime sandbox, we should use the waitUntil\n // that we receive from the enclosing NextServer\n const outerWaitUntil =\n params.request.waitUntil ?? getBuiltinRequestContext()?.waitUntil\n\n const event = new NextFetchEvent({\n request,\n page: params.page,\n context: outerWaitUntil ? { waitUntil: outerWaitUntil } : undefined,\n })\n let response\n let cookiesFromResponse\n\n response = await propagator(request, () => {\n // we only care to make async storage available for middleware\n const isMiddleware =\n params.page === '/middleware' ||\n params.page === '/src/middleware' ||\n params.page === '/proxy' ||\n params.page === '/src/proxy'\n\n if (isMiddleware) {\n // if we're in an edge function, we only get a subset of `nextConfig` (no `experimental`),\n // so we have to inject it via DefinePlugin.\n // in `next start` this will be passed normally (see `NextNodeServer.runMiddleware`).\n\n const waitUntil = event.waitUntil.bind(event)\n const closeController = new CloseController()\n\n return getTracer().trace(\n MiddlewareSpan.execute,\n {\n spanName: `middleware ${request.method}`,\n attributes: {\n 'http.target': request.nextUrl.pathname,\n 'http.method': request.method,\n },\n },\n async () => {\n try {\n const onUpdateCookies = (cookies: Array) => {\n cookiesFromResponse = cookies\n }\n const previewProps = getEdgePreviewProps()\n const page = '/' // Fake Work\n const fallbackRouteParams = null\n\n const implicitTags = await getImplicitTags(\n page,\n request.nextUrl.pathname,\n fallbackRouteParams\n )\n\n const requestStore = createRequestStoreForAPI(\n request,\n request.nextUrl,\n implicitTags,\n onUpdateCookies,\n previewProps,\n // Edge route handlers can't use `\"use cache\"`, so there's no HMR\n // refresh hash to thread through here.\n undefined\n )\n\n const workStore = createWorkStore({\n page,\n renderOpts: {\n cacheLifeProfiles: proxyCacheLifeProfiles,\n // Proxy doesn't do static generation, so this value does not\n // apply here. 0 is a sentinel: if something ever reads it,\n // it'll surface loudly instead of silently using a misleading\n // default.\n staticPageGenerationTimeout: 0,\n cacheComponents: false,\n // Proxy doesn't run instant validation; the level value is\n // irrelevant here.\n // TODO: remove validationLevel and other global config from renderOpts\n validationLevel: 'warning',\n experimental: {\n isRoutePPREnabled: false,\n authInterrupts:\n !!params.request.nextConfig?.experimental?.authInterrupts,\n // Proxy doesn't fill Cache Components entries, so this value\n // is never read. 0 is a sentinel: if something ever reads it,\n // the cache fill will time out immediately and surface the\n // bug.\n useCacheTimeout: 0,\n },\n supportsDynamicResponse: true,\n waitUntil,\n onClose: closeController.onClose.bind(closeController),\n onAfterTaskError: undefined,\n },\n isPrefetchRequest:\n request.headers.get(NEXT_ROUTER_PREFETCH_HEADER) === '1',\n buildId: buildId ?? '',\n deploymentId: deploymentId ?? '',\n previouslyRevalidatedTags: [],\n })\n\n return await workAsyncStorage.run(workStore, () =>\n workUnitAsyncStorage.run(\n requestStore,\n params.handler,\n request,\n event\n )\n )\n } finally {\n // middleware cannot stream, so we can consider the response closed\n // as soon as the handler returns.\n // we can delay running it until a bit later --\n // if it's needed, we'll have a `waitUntil` lock anyway.\n setTimeout(() => {\n closeController.dispatchClose()\n }, 0)\n }\n }\n )\n }\n return params.handler(request, event)\n })\n\n // check if response is a Response object\n if (response && !(response instanceof Response)) {\n throw new TypeError('Expected an instance of Response to be returned')\n }\n\n if (response && cookiesFromResponse) {\n response.headers.set('set-cookie', cookiesFromResponse)\n }\n\n /**\n * For rewrites we must always include the locale in the final pathname\n * so we re-create the NextURL forcing it to include it when the it is\n * an internal rewrite. Also we make sure the outgoing rewrite URL is\n * a data URL if the request was a data request.\n */\n const rewrite = response?.headers.get('x-middleware-rewrite')\n if (response && rewrite && (isRSCRequest || !isEdgeRendering)) {\n const destination = new NextURL(rewrite, {\n forceLocale: true,\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE && !isEdgeRendering) {\n if (destination.host === request.nextUrl.host) {\n destination.buildId = buildId || destination.buildId\n response.headers.set('x-middleware-rewrite', String(destination))\n }\n }\n\n /**\n * When the request is a data request we must show if there was a rewrite\n * with an internal header so the client knows which component to load\n * from the data request.\n */\n const { url: relativeDestination, isRelative } = parseRelativeURL(\n destination.toString(),\n requestURL.toString()\n )\n\n if (\n !isEdgeRendering &&\n isNextDataRequest &&\n // if the rewrite is external and external rewrite\n // resolving config is enabled don't add this header\n // so the upstream app can set it instead\n !(\n process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE &&\n relativeDestination.match(/http(s)?:\\/\\//)\n )\n ) {\n response.headers.set('x-nextjs-rewrite', relativeDestination)\n }\n\n // Check to see if this is a non-relative rewrite. If it is, we need\n // to check to see if it's an allowed origin to receive the rewritten\n // headers.\n const isAllowedOrigin = !isRelative\n ? params.request.nextConfig?.experimental?.clientParamParsingOrigins?.some(\n (origin) => new RegExp(origin).test(destination.origin)\n )\n : false\n\n // If this is an RSC request, and the pathname or search has changed, and\n // this isn't an external rewrite, we need to set the rewritten pathname and\n // query headers.\n if (isRSCRequest && (isRelative || isAllowedOrigin)) {\n if (requestURL.pathname !== destination.pathname) {\n response.headers.set(NEXT_REWRITTEN_PATH_HEADER, destination.pathname)\n }\n if (requestURL.search !== destination.search) {\n response.headers.set(\n NEXT_REWRITTEN_QUERY_HEADER,\n // remove the leading ? from the search string\n destination.search.slice(1)\n )\n }\n }\n }\n\n /**\n * Always forward the `_rsc` search parameter to the rewritten URL for RSC requests,\n * unless it's already present. This is necessary to ensure that RSC hash validation\n * works correctly after a rewrite. For internal rewrites, the server can validate the\n * RSC hash using the original URL, so forwarding the `_rsc` parameter is less critical.\n * However, for external rewrites (where the request is proxied to another Next.js server),\n * the external server does not have access to the original URL or its search parameters.\n * In these cases, forwarding the `_rsc` parameter is essential so that the external server\n * can perform the correct RSC hash validation.\n */\n if (response && rewrite && isRSCRequest && rscHash) {\n const rewriteURL = new URL(rewrite)\n if (!rewriteURL.searchParams.has(NEXT_RSC_UNION_QUERY)) {\n rewriteURL.searchParams.set(NEXT_RSC_UNION_QUERY, rscHash)\n response.headers.set('x-middleware-rewrite', rewriteURL.toString())\n }\n }\n\n /**\n * For redirects we will not include the locale in case when it is the\n * default and we must also make sure the outgoing URL is a data one if\n * the incoming request was a data request.\n */\n const redirect = response?.headers.get('Location')\n if (response && redirect && !isEdgeRendering) {\n const redirectURL = new NextURL(redirect, {\n forceLocale: false,\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n /**\n * Responses created from redirects have immutable headers so we have\n * to clone the response to be able to modify it.\n */\n response = new Response(response.body, response)\n\n if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) {\n if (redirectURL.host === requestURL.host) {\n redirectURL.buildId = buildId || redirectURL.buildId\n response.headers.set(\n 'Location',\n getRelativeURL(redirectURL, requestURL)\n )\n }\n }\n\n /**\n * When the request is a data request we can't use the location header as\n * it may end up with CORS error. Instead we map to an internal header so\n * the client knows the destination.\n */\n if (isNextDataRequest) {\n response.headers.delete('Location')\n response.headers.set(\n 'x-nextjs-redirect',\n getRelativeURL(redirectURL.toString(), requestURL.toString())\n )\n }\n }\n\n const finalResponse = response ? response : NextResponse.next()\n\n // Flight headers are not overridable / removable so they are applied at the end.\n const middlewareOverrideHeaders = finalResponse.headers.get(\n 'x-middleware-override-headers'\n )\n const overwrittenHeaders: string[] = []\n if (middlewareOverrideHeaders) {\n for (const [key, value] of flightHeaders) {\n finalResponse.headers.set(`x-middleware-request-${key}`, value)\n overwrittenHeaders.push(key)\n }\n\n if (overwrittenHeaders.length > 0) {\n finalResponse.headers.set(\n 'x-middleware-override-headers',\n middlewareOverrideHeaders + ',' + overwrittenHeaders.join(',')\n )\n }\n }\n\n return {\n response: finalResponse,\n waitUntil: getWaitUntilPromiseFromEvent(event) ?? Promise.resolve(),\n fetchMetrics: request.fetchMetrics,\n }\n}\n"],"names":["PageSignatureError","fromNodeOutgoingHttpHeaders","normalizeNextQueryParam","NextFetchEvent","getWaitUntilPromiseFromEvent","NextRequest","NextResponse","parseRelativeURL","getRelativeURL","NextURL","stripInternalSearchParams","normalizeRscURL","FLIGHT_HEADERS","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","NEXT_RSC_UNION_QUERY","RSC_HEADER","ensureInstrumentationRegistered","createRequestStoreForAPI","workUnitAsyncStorage","createWorkStore","workAsyncStorage","InvariantError","NEXT_ROUTER_PREFETCH_HEADER","getTracer","MiddlewareSpan","CloseController","getEdgePreviewProps","getBuiltinRequestContext","getImplicitTags","isRSCRequestHeader","setRequestMeta","proxyCacheLifeProfiles","default","NextRequestHint","constructor","params","input","init","sourcePage","page","request","respondWith","waitUntil","headersGetter","keys","headers","Array","from","get","key","undefined","propagator","fn","tracer","withPropagatedContext","testApisIntercepted","ensureTestApisIntercepted","process","env","NEXT_PRIVATE_TEST_PROXY","interceptTestApis","wrapRequestHandler","require","adapter","isEdgeRendering","globalThis","__BUILD_MANIFEST","url","requestURL","bypassNextUrl","URL","nextConfig","searchParams","value","getAll","normalizedKey","delete","val","append","buildId","__NEXT_BUILD_ID","deploymentId","NEXT_DEPLOYMENT_ID","requestHeaders","isNextDataRequest","has","isRSCRequest","pathname","flightHeaders","Map","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","header","set","normalizeURL","rscHash","toString","body","method","signal","requestMeta","Object","defineProperty","enumerable","__incrementalCacheShared","IncrementalCache","__incrementalCache","CurCacheHandler","incrementalCacheHandler","minimalMode","NODE_ENV","fetchCacheKeyPrefix","__NEXT_FETCH_CACHE_KEY_PREFIX","dev","getPrerenderManifest","version","routes","dynamicRoutes","notFoundRoutes","preview","outerWaitUntil","event","context","response","cookiesFromResponse","isMiddleware","bind","closeController","trace","execute","spanName","attributes","nextUrl","onUpdateCookies","cookies","previewProps","fallbackRouteParams","implicitTags","requestStore","workStore","renderOpts","cacheLifeProfiles","staticPageGenerationTimeout","cacheComponents","validationLevel","experimental","isRoutePPREnabled","authInterrupts","useCacheTimeout","supportsDynamicResponse","onClose","onAfterTaskError","isPrefetchRequest","previouslyRevalidatedTags","run","handler","setTimeout","dispatchClose","Response","TypeError","rewrite","destination","forceLocale","host","String","relativeDestination","isRelative","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","match","isAllowedOrigin","clientParamParsingOrigins","some","origin","RegExp","test","search","slice","rewriteURL","redirect","redirectURL","finalResponse","next","middlewareOverrideHeaders","overwrittenHeaders","push","length","join","Promise","resolve","fetchMetrics"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16259, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/error.ts"],"sourcesContent":["export class PageSignatureError extends Error {\n constructor({ page }: { page: string }) {\n super(`The middleware \"${page}\" accepts an async API directly with the form:\n \n export function middleware(request, event) {\n return NextResponse.redirect('/new-location')\n }\n \n Read more: https://nextjs.org/docs/messages/middleware-new-signature\n `)\n }\n}\n\nexport class RemovedPageError extends Error {\n constructor() {\n super(`The request.page has been deprecated in favour of \\`URLPattern\\`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n `)\n }\n}\n\nexport class RemovedUAError extends Error {\n constructor() {\n super(`The request.ua has been removed in favour of \\`userAgent\\` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n `)\n }\n}\n"],"names":["PageSignatureError","Error","constructor","page","RemovedPageError","RemovedUAError"],"mappings":";;;;;;;;AAAO,MAAMA,2BAA2BC;IACtCC,YAAY,EAAEC,IAAI,EAAoB,CAAE;QACtC,KAAK,CAAC,CAAC,gBAAgB,EAAEA,KAAK;;;;;;;EAOhC,CAAC;QAPC,OAAA,cAOA,CAPA,IAOA,EAPA,qBAAA;mBAAA;wBAAA;0BAAA;QAOD;IACD;AACF;AAEO,MAAMC,yBAAyBH;IACpCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;QAFC,OAAA,cAEA,CAFA,IAEA,EAFA,qBAAA;mBAAA;wBAAA;0BAAA;QAED;IACD;AACF;AAEO,MAAMG,uBAAuBJ;IAClCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;QAFC,OAAA,cAEA,CAFA,IAEA,EAFA,qBAAA;mBAAA;wBAAA;0BAAA;QAED;IACD;AACF","ignoreList":[0]}}, + {"offset": {"line": 16312, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/get-edge-preview-props.ts"],"sourcesContent":["/**\n * In edge runtime, these props directly accessed from environment variables.\n * - local: env vars will be injected through edge-runtime as runtime env vars\n * - deployment: env vars will be replaced by edge build pipeline\n */\nexport function getEdgePreviewProps() {\n return {\n previewModeId: process.env.__NEXT_PREVIEW_MODE_ID || '',\n previewModeSigningKey: process.env.__NEXT_PREVIEW_MODE_SIGNING_KEY || '',\n previewModeEncryptionKey:\n process.env.__NEXT_PREVIEW_MODE_ENCRYPTION_KEY || '',\n }\n}\n"],"names":["getEdgePreviewProps","previewModeId","process","env","__NEXT_PREVIEW_MODE_ID","previewModeSigningKey","__NEXT_PREVIEW_MODE_SIGNING_KEY","previewModeEncryptionKey","__NEXT_PREVIEW_MODE_ENCRYPTION_KEY"],"mappings":"AAAA;;;;CAIC,GACD;;;;AAAO,SAASA;IACd,OAAO;QACLC,eAAeC,QAAQC,GAAG,CAACC,sBAAsB,IAAI;QACrDC,uBAAuBH,QAAQC,GAAG,CAACG,+BAA+B,IAAI;QACtEC,0BACEL,QAAQC,GAAG,CAACK,kCAAkC,IAAI;IACtD;AACF","ignoreList":[0]}}, + {"offset": {"line": 16331, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/globals.ts"],"sourcesContent":["import type {\n InstrumentationModule,\n InstrumentationOnRequestError,\n} from '../instrumentation/types'\n\ndeclare const _ENTRIES: any\n\nexport async function getEdgeInstrumentationModule(): Promise<\n InstrumentationModule | undefined\n> {\n const instrumentation =\n '_ENTRIES' in globalThis &&\n _ENTRIES.middleware_instrumentation &&\n (await _ENTRIES.middleware_instrumentation)\n\n return instrumentation\n}\n\nlet instrumentationModulePromise: Promise | null = null\nasync function registerInstrumentation() {\n // Ensure registerInstrumentation is not called in production build\n if (process.env.NEXT_PHASE === 'phase-production-build') return\n if (!instrumentationModulePromise) {\n instrumentationModulePromise = getEdgeInstrumentationModule()\n }\n const instrumentation = await instrumentationModulePromise\n if (instrumentation?.register) {\n try {\n await instrumentation.register()\n } catch (err: any) {\n err.message = `An error occurred while loading instrumentation hook: ${err.message}`\n throw err\n }\n }\n}\n\nexport async function edgeInstrumentationOnRequestError(\n ...args: Parameters\n) {\n const instrumentation = await getEdgeInstrumentationModule()\n try {\n await instrumentation?.onRequestError?.(...args)\n } catch (err) {\n // Log the soft error and continue, since the original error has already been thrown\n console.error('Error in instrumentation.onRequestError:', err)\n }\n}\n\nlet registerInstrumentationPromise: Promise | null = null\nexport function ensureInstrumentationRegistered() {\n if (!registerInstrumentationPromise) {\n registerInstrumentationPromise = registerInstrumentation()\n }\n return registerInstrumentationPromise\n}\n\nfunction getUnsupportedModuleErrorMessage(module: string) {\n // warning: if you change these messages, you must adjust how dev-overlay's middleware detects modules not found\n return `The edge runtime does not support Node.js '${module}' module.\nLearn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`\n}\n\nfunction __import_unsupported(moduleName: string) {\n const proxy: any = new Proxy(function () {}, {\n get(_obj, prop) {\n if (prop === 'then') {\n return {}\n }\n throw new Error(getUnsupportedModuleErrorMessage(moduleName))\n },\n construct() {\n throw new Error(getUnsupportedModuleErrorMessage(moduleName))\n },\n apply(_target, _this, args) {\n if (typeof args[0] === 'function') {\n return args[0](proxy)\n }\n throw new Error(getUnsupportedModuleErrorMessage(moduleName))\n },\n })\n return new Proxy({}, { get: () => proxy })\n}\n\nfunction enhanceGlobals() {\n if (process.env.NEXT_RUNTIME !== 'edge') {\n return\n }\n\n // The condition is true when the \"process\" module is provided\n if (process !== global.process) {\n // prefer local process but global.process has correct \"env\"\n process.env = global.process.env\n global.process = process\n }\n\n // to allow building code that import but does not use node.js modules,\n // webpack will expect this function to exist in global scope\n try {\n Object.defineProperty(globalThis, '__import_unsupported', {\n value: __import_unsupported,\n enumerable: false,\n configurable: false,\n })\n } catch {}\n\n // Eagerly fire instrumentation hook to make the startup faster.\n void ensureInstrumentationRegistered()\n}\n\nenhanceGlobals()\n"],"names":["getEdgeInstrumentationModule","instrumentation","globalThis","_ENTRIES","middleware_instrumentation","instrumentationModulePromise","registerInstrumentation","process","env","NEXT_PHASE","register","err","message","edgeInstrumentationOnRequestError","args","onRequestError","console","error","registerInstrumentationPromise","ensureInstrumentationRegistered","getUnsupportedModuleErrorMessage","module","__import_unsupported","moduleName","proxy","Proxy","get","_obj","prop","Error","construct","apply","_target","_this","enhanceGlobals","NEXT_RUNTIME","global","Object","defineProperty","value","enumerable","configurable"],"mappings":";;;;;;;;AAOO,eAAeA;IAGpB,MAAMC,kBACJ,cAAcC,cACdC,SAASC,0BAA0B,IAClC,MAAMD,SAASC,0BAA0B;IAE5C,OAAOH;AACT;AAEA,IAAII,+BAAoD;AACxD,eAAeC;IACb,mEAAmE;IACnE,IAAIC,QAAQC,GAAG,CAACC,UAAU,KAAK,0BAA0B;IACzD,IAAI,CAACJ,8BAA8B;QACjCA,+BAA+BL;IACjC;IACA,MAAMC,kBAAkB,MAAMI;IAC9B,IAAIJ,mBAAAA,OAAAA,KAAAA,IAAAA,gBAAiBS,QAAQ,EAAE;QAC7B,IAAI;YACF,MAAMT,gBAAgBS,QAAQ;QAChC,EAAE,OAAOC,KAAU;YACjBA,IAAIC,OAAO,GAAG,CAAC,sDAAsD,EAAED,IAAIC,OAAO,EAAE;YACpF,MAAMD;QACR;IACF;AACF;AAEO,eAAeE,kCACpB,GAAGC,IAA+C;IAElD,MAAMb,kBAAkB,MAAMD;IAC9B,IAAI;YACIC;QAAN,MAAA,CAAMA,mBAAAA,OAAAA,KAAAA,IAAAA,CAAAA,kCAAAA,gBAAiBc,cAAc,KAAA,OAAA,KAAA,IAA/Bd,gCAAAA,IAAAA,CAAAA,oBAAqCa,KAAAA;IAC7C,EAAE,OAAOH,KAAK;QACZ,oFAAoF;QACpFK,QAAQC,KAAK,CAAC,4CAA4CN;IAC5D;AACF;AAEA,IAAIO,iCAAuD;AACpD,SAASC;IACd,IAAI,CAACD,gCAAgC;QACnCA,iCAAiCZ;IACnC;IACA,OAAOY;AACT;AAEA,SAASE,iCAAiCC,MAAc;IACtD,gHAAgH;IAChH,OAAO,CAAC,2CAA2C,EAAEA,OAAO;wEACU,CAAC;AACzE;AAEA,SAASC,qBAAqBC,UAAkB;IAC9C,MAAMC,QAAa,IAAIC,MAAM,YAAa,GAAG;QAC3CC,KAAIC,IAAI,EAAEC,IAAI;YACZ,IAAIA,SAAS,QAAQ;gBACnB,OAAO,CAAC;YACV;YACA,MAAM,OAAA,cAAuD,CAAvD,IAAIC,MAAMT,iCAAiCG,cAA3C,qBAAA;uBAAA;4BAAA;8BAAA;YAAsD;QAC9D;QACAO;YACE,MAAM,OAAA,cAAuD,CAAvD,IAAID,MAAMT,iCAAiCG,cAA3C,qBAAA;uBAAA;4BAAA;8BAAA;YAAsD;QAC9D;QACAQ,OAAMC,OAAO,EAAEC,KAAK,EAAEnB,IAAI;YACxB,IAAI,OAAOA,IAAI,CAAC,EAAE,KAAK,YAAY;gBACjC,OAAOA,IAAI,CAAC,EAAE,CAACU;YACjB;YACA,MAAM,OAAA,cAAuD,CAAvD,IAAIK,MAAMT,iCAAiCG,cAA3C,qBAAA;uBAAA;4BAAA;8BAAA;YAAsD;QAC9D;IACF;IACA,OAAO,IAAIE,MAAM,CAAC,GAAG;QAAEC,KAAK,IAAMF;IAAM;AAC1C;AAEA,SAASU;IACP,IAAI3B,QAAQC,GAAG,CAAC2B,YAAY,KAAK,OAAQ;QACvC;IACF;;;AAqBF;AAEAD","ignoreList":[0]}}, + {"offset": {"line": 16428, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/next-url.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /^(?:127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)$/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n const parsed = new URL(String(url), base && String(base))\n if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {\n parsed.hostname = 'localhost'\n }\n return parsed\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n"],"names":["detectDomainLocale","formatNextPathnameInfo","getHostname","getNextPathnameInfo","REGEX_LOCALHOST_HOSTNAME","parseURL","url","base","parsed","URL","String","test","hostname","Internal","Symbol","NextURL","constructor","input","baseOrOpts","opts","options","basePath","analyze","info","pathname","nextConfig","parseData","process","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","i18nProvider","headers","domainLocale","i18n","domains","defaultLocale","buildId","locale","trailingSlash","formatPathname","forceLocale","undefined","formatSearch","search","locales","includes","TypeError","searchParams","host","value","port","protocol","href","hash","origin","password","username","startsWith","toString","toJSON","for","clone"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16627, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/adapters/headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\n\n/**\n * The read methods that a sealed view provides itself instead of forwarding to\n * the underlying `Headers`. Deriving the type from `Headers` keeps the\n * implementations in step with the platform signatures.\n */\ntype SealedHeaderMethods = Pick<\n Headers,\n | 'get'\n | 'has'\n | 'getSetCookie'\n | 'keys'\n | 'values'\n | 'entries'\n | 'forEach'\n | typeof Symbol.iterator\n>\n\n/**\n * Builds the read methods for a sealed view that exposes all of `target`.\n */\nfunction createPassThroughMethods(\n target: Headers,\n sealed: ReadonlyHeaders\n): SealedHeaderMethods {\n return {\n get: target.get.bind(target),\n has: target.has.bind(target),\n getSetCookie: target.getSetCookie.bind(target),\n keys: target.keys.bind(target),\n values: target.values.bind(target),\n entries: target.entries.bind(target),\n [Symbol.iterator]: target[Symbol.iterator].bind(target),\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of target.entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\n/**\n * Builds the read methods for a sealed view that omits the header names matched\n * by `isHidden`.\n */\nfunction createHidingMethods(\n target: Headers,\n sealed: ReadonlyHeaders,\n isHidden: (name: string) => boolean\n): SealedHeaderMethods {\n function* entries(): HeadersIterator<[string, string]> {\n for (const entry of target.entries()) {\n if (!isHidden(entry[0])) {\n yield entry\n }\n }\n }\n\n return {\n entries,\n [Symbol.iterator]: entries,\n get: (name) => (isHidden(name) ? null : target.get(name)),\n has: (name) => (isHidden(name) ? false : target.has(name)),\n getSetCookie: () => (isHidden('set-cookie') ? [] : target.getSetCookie()),\n *keys(): HeadersIterator {\n for (const name of target.keys()) {\n if (!isHidden(name)) {\n yield name\n }\n }\n },\n *values(): HeadersIterator {\n for (const [, value] of entries()) {\n yield value\n }\n },\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n *\n * The sealed view stays live. Later writes to `headers` remain visible\n * through it.\n *\n * `hidden` omits the given header names from every read operation (`get`,\n * `has`, `getSetCookie`, `forEach`, and iteration). The names must be\n * lowercase. The underlying headers are neither copied nor mutated, so hidden\n * headers remain available to the framework.\n */\n public static seal(\n headers: Headers,\n hidden?: ReadonlySet\n ): ReadonlyHeaders {\n const isHidden =\n hidden && hidden.size > 0\n ? (name: string): boolean => hidden.has(name.toLowerCase())\n : null\n\n // The methods are built once per sealed view and reused, so repeated access\n // returns the same function instead of a fresh closure. They are assigned\n // after the proxy exists because `forEach` hands the proxy to its callback.\n // Creating the proxy runs no trap, so nothing can read them before then.\n let methods: SealedHeaderMethods\n\n const sealed: ReadonlyHeaders = new Proxy(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n case Symbol.iterator:\n return methods[Symbol.iterator]\n case 'get':\n case 'has':\n case 'getSetCookie':\n case 'keys':\n case 'values':\n case 'entries':\n case 'forEach':\n return methods[prop]\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n methods = isHidden\n ? createHidingMethods(headers, sealed, isHidden)\n : createPassThroughMethods(headers, sealed)\n\n return sealed\n }\n\n /**\n * @param headers\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(headers: ReadonlyHeaders): ReadonlyHeaders {\n return new Proxy(headers, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n"],"names":["ReflectAdapter","ReadonlyHeadersError","Error","constructor","callable","createPassThroughMethods","target","sealed","get","bind","has","getSetCookie","keys","values","entries","Symbol","iterator","forEach","callbackfn","thisArg","name","value","call","createHidingMethods","isHidden","entry","HeadersAdapter","Headers","headers","Proxy","prop","receiver","lowercased","toLowerCase","original","Object","find","o","set","deleteProperty","seal","hidden","size","methods","fresh","merge","Array","isArray","join","from","append","existing","push","delete","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16907, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/adapters/next-request.ts"],"sourcesContent":["import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n"],"names":["getRequestMeta","fromNodeOutgoingHttpHeaders","NextRequest","isNodeNextRequest","isWebNextRequest","ResponseAbortedName","ResponseAborted","Error","name","createAbortController","response","controller","AbortController","once","writableFinished","abort","signalFromNodeResponse","errored","destroyed","AbortSignal","signal","NextRequestAdapter","fromBaseNextRequest","request","process","env","NEXT_RUNTIME","fromWebNextRequest","fromNodeNextRequest","body","method","url","startsWith","URL","base","headers","duplex","aborted"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 17031, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/adapters/reflect.ts"],"sourcesContent":["export class ReflectAdapter {\n static get(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n"],"names":["ReflectAdapter","get","target","prop","receiver","value","Reflect","bind","set","has","deleteProperty"],"mappings":";;;;AAAO,MAAMA;IACX,OAAOC,IACLC,MAAS,EACTC,IAAqB,EACrBC,QAAiB,EACZ;QACL,MAAMC,QAAQC,QAAQL,GAAG,CAACC,QAAQC,MAAMC;QACxC,IAAI,OAAOC,UAAU,YAAY;YAC/B,OAAOA,MAAME,IAAI,CAACL;QACpB;QAEA,OAAOG;IACT;IAEA,OAAOG,IACLN,MAAS,EACTC,IAAqB,EACrBE,KAAU,EACVD,QAAa,EACJ;QACT,OAAOE,QAAQE,GAAG,CAACN,QAAQC,MAAME,OAAOD;IAC1C;IAEA,OAAOK,IAAsBP,MAAS,EAAEC,IAAqB,EAAW;QACtE,OAAOG,QAAQG,GAAG,CAACP,QAAQC;IAC7B;IAEA,OAAOO,eACLR,MAAS,EACTC,IAAqB,EACZ;QACT,OAAOG,QAAQI,cAAc,CAACR,QAAQC;IACxC;AACF","ignoreList":[0]}}, + {"offset": {"line": 17057, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/adapters/request-cookies.ts"],"sourcesContent":["import { RequestCookies } from '../cookies'\n\nimport { ResponseCookies } from '../cookies'\nimport { ReflectAdapter } from './reflect'\nimport { workAsyncStorage } from '../../../app-render/work-async-storage.external'\nimport type { RequestStore } from '../../../app-render/work-unit-async-storage.external'\nimport { ActionDidRevalidateStaticAndDynamic } from '../../../../shared/lib/action-revalidation-kind'\n\n/**\n * @internal\n */\nexport class ReadonlyRequestCookiesError extends Error {\n constructor() {\n super(\n 'Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'\n )\n }\n\n public static callable() {\n throw new ReadonlyRequestCookiesError()\n }\n}\n\n// We use this to type some APIs but we don't construct instances directly\nexport type { ResponseCookies }\n\n// The `cookies()` API is a mix of request and response cookies. For `.get()` methods,\n// we want to return the request cookie if it exists. For mutative methods like `.set()`,\n// we want to return the response cookie.\nexport type ReadonlyRequestCookies = Omit<\n RequestCookies,\n 'set' | 'clear' | 'delete'\n> &\n Pick\n\nexport class RequestCookiesAdapter {\n public static seal(cookies: RequestCookies): ReadonlyRequestCookies {\n return new Proxy(cookies as any, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'clear':\n case 'delete':\n case 'set':\n return ReadonlyRequestCookiesError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * @param cookies\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(cookies: ReadonlyRequestCookies): ReadonlyRequestCookies {\n return new Proxy(cookies, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n}\n\nconst SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies')\n\nexport function getModifiedCookieValues(\n cookies: ResponseCookies\n): ResponseCookie[] {\n const modified: ResponseCookie[] | undefined = (cookies as unknown as any)[\n SYMBOL_MODIFY_COOKIE_VALUES\n ]\n if (!modified || !Array.isArray(modified) || modified.length === 0) {\n return []\n }\n\n return modified\n}\n\ntype SetCookieArgs =\n | [key: string, value: string, cookie?: Partial]\n | [options: ResponseCookie]\n\nexport function appendMutableCookies(\n headers: Headers,\n mutableCookies: ResponseCookies\n): boolean {\n const modifiedCookieValues = getModifiedCookieValues(mutableCookies)\n if (modifiedCookieValues.length === 0) {\n return false\n }\n\n // Return a new response that extends the response with\n // the modified cookies as fallbacks. `res` cookies\n // will still take precedence.\n const resCookies = new ResponseCookies(headers)\n const returnedCookies = resCookies.getAll()\n\n // Set the modified cookies as fallbacks.\n for (const cookie of modifiedCookieValues) {\n resCookies.set(cookie)\n }\n\n // Set the original cookies as the final values.\n for (const cookie of returnedCookies) {\n resCookies.set(cookie)\n }\n\n return true\n}\n\ntype ResponseCookie = NonNullable<\n ReturnType['get']>\n>\n\nexport class MutableRequestCookiesAdapter {\n public static wrap(\n cookies: RequestCookies,\n onUpdateCookies?: (cookies: string[]) => void\n ): ResponseCookies {\n const responseCookies = new ResponseCookies(new Headers())\n for (const cookie of cookies.getAll()) {\n responseCookies.set(cookie)\n }\n\n let modifiedValues: ResponseCookie[] = []\n const modifiedCookies = new Set()\n const updateResponseCookies = () => {\n // TODO-APP: change method of getting workStore\n const workStore = workAsyncStorage.getStore()\n if (workStore) {\n workStore.pathWasRevalidated = ActionDidRevalidateStaticAndDynamic\n }\n\n const allCookies = responseCookies.getAll()\n modifiedValues = allCookies.filter((c) => modifiedCookies.has(c.name))\n if (onUpdateCookies) {\n const serializedCookies: string[] = []\n for (const cookie of modifiedValues) {\n const tempCookies = new ResponseCookies(new Headers())\n tempCookies.set(cookie)\n serializedCookies.push(tempCookies.toString())\n }\n\n onUpdateCookies(serializedCookies)\n }\n }\n\n const wrappedCookies = new Proxy(responseCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n // A special symbol to get the modified cookie values\n case SYMBOL_MODIFY_COOKIE_VALUES:\n return modifiedValues\n\n // TODO: Throw error if trying to set a cookie after the response\n // headers have been set.\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.delete(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.set(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n return wrappedCookies\n }\n}\n\nexport function createCookiesWithMutableAccessCheck(\n requestStore: RequestStore\n): ResponseCookies {\n const wrappedCookies = new Proxy(requestStore.mutableCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n ensureCookiesAreStillMutable(requestStore, 'cookies().delete')\n target.delete(...args)\n return wrappedCookies\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n ensureCookiesAreStillMutable(requestStore, 'cookies().set')\n target.set(...args)\n return wrappedCookies\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n return wrappedCookies\n}\n\nexport function areCookiesMutableInCurrentPhase(requestStore: RequestStore) {\n return requestStore.phase === 'action'\n}\n\n/** Ensure that cookies() starts throwing on mutation\n * if we changed phases and can no longer mutate.\n *\n * This can happen when going:\n * 'render' -> 'after'\n * 'action' -> 'render'\n * */\nfunction ensureCookiesAreStillMutable(\n requestStore: RequestStore,\n _callingExpression: string\n) {\n if (!areCookiesMutableInCurrentPhase(requestStore)) {\n // TODO: maybe we can give a more precise error message based on callingExpression?\n throw new ReadonlyRequestCookiesError()\n }\n}\n\nexport function responseCookiesToRequestCookies(\n responseCookies: ResponseCookies\n): RequestCookies {\n const requestCookies = new RequestCookies(new Headers())\n for (const cookie of responseCookies.getAll()) {\n requestCookies.set(cookie)\n }\n return requestCookies\n}\n"],"names":["RequestCookies","ResponseCookies","ReflectAdapter","workAsyncStorage","ActionDidRevalidateStaticAndDynamic","ReadonlyRequestCookiesError","Error","constructor","callable","RequestCookiesAdapter","seal","cookies","Proxy","get","target","prop","receiver","fresh","SYMBOL_MODIFY_COOKIE_VALUES","Symbol","for","getModifiedCookieValues","modified","Array","isArray","length","appendMutableCookies","headers","mutableCookies","modifiedCookieValues","resCookies","returnedCookies","getAll","cookie","set","MutableRequestCookiesAdapter","wrap","onUpdateCookies","responseCookies","Headers","modifiedValues","modifiedCookies","Set","updateResponseCookies","workStore","getStore","pathWasRevalidated","allCookies","filter","c","has","name","serializedCookies","tempCookies","push","toString","wrappedCookies","args","add","delete","createCookiesWithMutableAccessCheck","requestStore","ensureCookiesAreStillMutable","areCookiesMutableInCurrentPhase","phase","_callingExpression","responseCookiesToRequestCookies","requestCookies"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 17263, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/cookies.ts"],"sourcesContent":["export {\n RequestCookies,\n ResponseCookies,\n stringifyCookie,\n} from 'next/dist/compiled/@edge-runtime/cookies'\n"],"names":["RequestCookies","ResponseCookies","stringifyCookie"],"mappings":";AAAA,SACEA,cAAc,EACdC,eAAe,EACfC,eAAe,QACV,2CAA0C","ignoreList":[0]}}, + {"offset": {"line": 17270, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/fetch-event.ts"],"sourcesContent":["import type { WaitUntil } from '../../after/builtin-request-context'\nimport { PageSignatureError } from '../error'\nimport type { NextRequest } from './request'\n\nconst responseSymbol = Symbol('response')\nconst passThroughSymbol = Symbol('passThrough')\nconst waitUntilSymbol = Symbol('waitUntil')\n\nclass FetchEvent {\n // TODO(after): get rid of the 'internal' variant and always use an external waitUntil\n // (this means removing `FetchEventResult.waitUntil` which also requires a builder change)\n readonly [waitUntilSymbol]:\n | { kind: 'internal'; promises: Promise[] }\n | { kind: 'external'; function: WaitUntil };\n\n [responseSymbol]?: Promise;\n [passThroughSymbol] = false\n\n constructor(_request: Request, waitUntil?: WaitUntil) {\n this[waitUntilSymbol] = waitUntil\n ? { kind: 'external', function: waitUntil }\n : { kind: 'internal', promises: [] }\n }\n\n // TODO: is this dead code? NextFetchEvent never lets this get called\n respondWith(response: Response | Promise): void {\n if (!this[responseSymbol]) {\n this[responseSymbol] = Promise.resolve(response)\n }\n }\n\n // TODO: is this dead code? passThroughSymbol is unused\n passThroughOnException(): void {\n this[passThroughSymbol] = true\n }\n\n waitUntil(promise: Promise): void {\n if (this[waitUntilSymbol].kind === 'external') {\n // if we received an external waitUntil, we delegate to it\n // TODO(after): this will make us not go through `getServerError(error, 'edge-server')` in `sandbox`\n const waitUntil = this[waitUntilSymbol].function\n return waitUntil(promise)\n } else {\n // if we didn't receive an external waitUntil, we make it work on our own\n // (and expect the caller to do something with the promises)\n this[waitUntilSymbol].promises.push(promise)\n }\n }\n}\n\nexport function getWaitUntilPromiseFromEvent(\n event: FetchEvent\n): Promise | undefined {\n return event[waitUntilSymbol].kind === 'internal'\n ? Promise.all(event[waitUntilSymbol].promises).then(() => {})\n : undefined\n}\n\nexport class NextFetchEvent extends FetchEvent {\n sourcePage: string\n\n constructor(params: {\n request: NextRequest\n page: string\n context: { waitUntil: WaitUntil } | undefined\n }) {\n super(params.request, params.context?.waitUntil)\n this.sourcePage = params.page\n }\n\n /**\n * @deprecated The `request` is now the first parameter and the API is now async.\n *\n * Read more: https://nextjs.org/docs/messages/middleware-new-signature\n */\n get request() {\n throw new PageSignatureError({\n page: this.sourcePage,\n })\n }\n\n /**\n * @deprecated Using `respondWith` is no longer needed.\n *\n * Read more: https://nextjs.org/docs/messages/middleware-new-signature\n */\n respondWith() {\n throw new PageSignatureError({\n page: this.sourcePage,\n })\n }\n}\n"],"names":["PageSignatureError","responseSymbol","Symbol","passThroughSymbol","waitUntilSymbol","FetchEvent","constructor","_request","waitUntil","kind","function","promises","respondWith","response","Promise","resolve","passThroughOnException","promise","push","getWaitUntilPromiseFromEvent","event","all","then","undefined","NextFetchEvent","params","request","context","sourcePage","page"],"mappings":";;;;;;AACA,SAASA,kBAAkB,QAAQ,WAAU;;AAG7C,MAAMC,iBAAiBC,OAAO;AAC9B,MAAMC,oBAAoBD,OAAO;AACjC,MAAME,kBAAkBF,OAAO;AAE/B,MAAMG;IAUJC,YAAYC,QAAiB,EAAEC,SAAqB,CAAE;YAFtD,CAACL,kBAAkB,GAAG;QAGpB,IAAI,CAACC,gBAAgB,GAAGI,YACpB;YAAEC,MAAM;YAAYC,UAAUF;QAAU,IACxC;YAAEC,MAAM;YAAYE,UAAU,EAAE;QAAC;IACvC;IAEA,qEAAqE;IACrEC,YAAYC,QAAsC,EAAQ;QACxD,IAAI,CAAC,IAAI,CAACZ,eAAe,EAAE;YACzB,IAAI,CAACA,eAAe,GAAGa,QAAQC,OAAO,CAACF;QACzC;IACF;IAEA,uDAAuD;IACvDG,yBAA+B;QAC7B,IAAI,CAACb,kBAAkB,GAAG;IAC5B;IAEAK,UAAUS,OAAqB,EAAQ;QACrC,IAAI,IAAI,CAACb,gBAAgB,CAACK,IAAI,KAAK,YAAY;YAC7C,0DAA0D;YAC1D,oGAAoG;YACpG,MAAMD,YAAY,IAAI,CAACJ,gBAAgB,CAACM,QAAQ;YAChD,OAAOF,UAAUS;QACnB,OAAO;YACL,yEAAyE;YACzE,4DAA4D;YAC5D,IAAI,CAACb,gBAAgB,CAACO,QAAQ,CAACO,IAAI,CAACD;QACtC;IACF;AACF;AAEO,SAASE,6BACdC,KAAiB;IAEjB,OAAOA,KAAK,CAAChB,gBAAgB,CAACK,IAAI,KAAK,aACnCK,QAAQO,GAAG,CAACD,KAAK,CAAChB,gBAAgB,CAACO,QAAQ,EAAEW,IAAI,CAAC,KAAO,KACzDC;AACN;AAEO,MAAMC,uBAAuBnB;IAGlCC,YAAYmB,MAIX,CAAE;YACqBA;QAAtB,KAAK,CAACA,OAAOC,OAAO,EAAA,CAAED,kBAAAA,OAAOE,OAAO,KAAA,OAAA,KAAA,IAAdF,gBAAgBjB,SAAS;QAC/C,IAAI,CAACoB,UAAU,GAAGH,OAAOI,IAAI;IAC/B;IAEA;;;;GAIC,GACD,IAAIH,UAAU;QACZ,MAAM,OAAA,cAEJ,CAFI,IAAI1B,mLAAAA,CAAmB;YAC3B6B,MAAM,IAAI,CAACD,UAAU;QACvB,IAFM,qBAAA;mBAAA;wBAAA;0BAAA;QAEL;IACH;IAEA;;;;GAIC,GACDhB,cAAc;QACZ,MAAM,OAAA,cAEJ,CAFI,IAAIZ,mLAAAA,CAAmB;YAC3B6B,MAAM,IAAI,CAACD,UAAU;QACvB,IAFM,qBAAA;mBAAA;wBAAA;0BAAA;QAEL;IACH;AACF","ignoreList":[0]}}, + {"offset": {"line": 17355, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/request.ts"],"sourcesContent":["import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n /** @internal */\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n"],"names":["NextURL","toNodeOutgoingHttpHeaders","validateURL","RemovedUAError","RemovedPageError","RequestCookies","INTERNALS","Symbol","NextRequest","Request","constructor","input","init","url","String","process","env","NEXT_RUNTIME","body","duplex","nextUrl","headers","nextConfig","cookies","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","toString","for","bodyUsed","cache","credentials","destination","Object","fromEntries","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","signal","page","ua"],"mappings":";;;;;;AACA,SAASA,OAAO,QAAQ,cAAa;AACrC,SAASC,yBAAyB,EAAEC,WAAW,QAAQ,WAAU;AACjE,SAASC,cAAc,EAAEC,gBAAgB,QAAQ,WAAU;;AAC3D,SAASC,cAAc,QAAQ,YAAW;;;;;AAEnC,MAAMC,YAAYC,OAAO,oBAAmB;AAO5C,MAAMC,oBAAoBC;IAQ/BC,YAAYC,KAAwB,EAAEC,OAAoB,CAAC,CAAC,CAAE;QAC5D,MAAMC,MACJ,OAAOF,UAAU,YAAY,SAASA,QAAQA,MAAME,GAAG,GAAGC,OAAOH;YAEnET,4KAAAA,EAAYW;QAEZ,2DAA2D;QAC3D,oDAAoD;QACpD,sDAAsD;QACtD,oCAAoC;QACpC,IAAIE,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;YACvC,IAAIL,KAAKM,IAAI,IAAIN,KAAKO,MAAM,KAAK,QAAQ;gBACvCP,KAAKO,MAAM,GAAG;YAChB;QACF;QAEA,IAAIR,iBAAiBF,SAAS,KAAK,CAACE,OAAOC;aACtC,KAAK,CAACC,KAAKD;QAEhB,MAAMQ,UAAU,IAAIpB,8KAAAA,CAAQa,KAAK;YAC/BQ,aAASpB,0LAAAA,EAA0B,IAAI,CAACoB,OAAO;YAC/CC,YAAYV,KAAKU,UAAU;QAC7B;QACA,IAAI,CAAChB,UAAU,GAAG;YAChBiB,SAAS,IAAIlB,mMAAAA,CAAe,IAAI,CAACgB,OAAO;YACxCD;YACAP,KAAKE,QAAQC,GAAG,CAACQ,0BACbX,QAD+C,kBAE/CO,QAAQK,QAAQ;QACtB;IACF;IAEA,CAAClB,OAAOmB,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLH,SAAS,IAAI,CAACA,OAAO;YACrBH,SAAS,IAAI,CAACA,OAAO;YACrBP,KAAK,IAAI,CAACA,GAAG;YACb,kCAAkC;YAClCc,UAAU,IAAI,CAACA,QAAQ;YACvBC,OAAO,IAAI,CAACA,KAAK;YACjBC,aAAa,IAAI,CAACA,WAAW;YAC7BC,aAAa,IAAI,CAACA,WAAW;YAC7BT,SAASU,OAAOC,WAAW,CAAC,IAAI,CAACX,OAAO;YACxCY,WAAW,IAAI,CAACA,SAAS;YACzBC,WAAW,IAAI,CAACA,SAAS;YACzBC,QAAQ,IAAI,CAACA,MAAM;YACnBC,MAAM,IAAI,CAACA,IAAI;YACfC,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBC,gBAAgB,IAAI,CAACA,cAAc;YACnCC,QAAQ,IAAI,CAACA,MAAM;QACrB;IACF;IAEA,IAAWjB,UAAU;QACnB,OAAO,IAAI,CAACjB,UAAU,CAACiB,OAAO;IAChC;IAEA,IAAWH,UAAU;QACnB,OAAO,IAAI,CAACd,UAAU,CAACc,OAAO;IAChC;IAEA;;;;GAIC,GACD,IAAWqB,OAAO;QAChB,MAAM,IAAIrC,iLAAAA;IACZ;IAEA;;;;GAIC,GACD,IAAWsC,KAAK;QACd,MAAM,IAAIvC,+KAAAA;IACZ;IAEA,IAAWU,MAAM;QACf,OAAO,IAAI,CAACP,UAAU,CAACO,GAAG;IAC5B;AACF","ignoreList":[0]}}, + {"offset": {"line": 17445, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/response.ts"],"sourcesContent":["import { stringifyCookie } from '../../web/spec-extension/cookies'\nimport type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { ReflectAdapter } from './adapters/reflect'\n\nimport { ResponseCookies } from './cookies'\n\nconst INTERNALS = Symbol('internal response')\nconst REDIRECTS = new Set([301, 302, 303, 307, 308])\n\nfunction handleMiddlewareField(\n init: MiddlewareResponseInit | undefined,\n headers: Headers\n) {\n if (init?.request?.headers) {\n if (!(init.request.headers instanceof Headers)) {\n throw new Error('request.headers must be an instance of Headers')\n }\n\n const keys = []\n for (const [key, value] of init.request.headers) {\n headers.set('x-middleware-request-' + key, value)\n keys.push(key)\n }\n\n headers.set('x-middleware-override-headers', keys.join(','))\n }\n}\n\n/**\n * This class extends the [Web `Response` API](https://developer.mozilla.org/docs/Web/API/Response) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextResponse`](https://nextjs.org/docs/app/api-reference/functions/next-response)\n */\nexport class NextResponse extends Response {\n [INTERNALS]: {\n cookies: ResponseCookies\n url?: NextURL\n body?: Body\n }\n\n constructor(body?: BodyInit | null, init: ResponseInit = {}) {\n super(body, init)\n\n const headers = this.headers\n const cookies = new ResponseCookies(headers)\n\n const cookiesProxy = new Proxy(cookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n case 'set': {\n return (...args: [string, string]) => {\n const result = Reflect.apply(target[prop], target, args)\n const newHeaders = new Headers(headers)\n\n if (result instanceof ResponseCookies) {\n headers.set(\n 'x-middleware-set-cookie',\n result\n .getAll()\n .map((cookie) => stringifyCookie(cookie))\n .join(',')\n )\n }\n\n handleMiddlewareField(init, newHeaders)\n return result\n }\n }\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n this[INTERNALS] = {\n cookies: cookiesProxy,\n url: init.url\n ? new NextURL(init.url, {\n headers: toNodeOutgoingHttpHeaders(headers),\n nextConfig: init.nextConfig,\n })\n : undefined,\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n url: this.url,\n // rest of props come from Response\n body: this.body,\n bodyUsed: this.bodyUsed,\n headers: Object.fromEntries(this.headers),\n ok: this.ok,\n redirected: this.redirected,\n status: this.status,\n statusText: this.statusText,\n type: this.type,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n static json(\n body: JsonBody,\n init?: ResponseInit\n ): NextResponse {\n const response: Response = Response.json(body, init)\n return new NextResponse(response.body, response)\n }\n\n static redirect(url: string | NextURL | URL, init?: number | ResponseInit) {\n const status = typeof init === 'number' ? init : (init?.status ?? 307)\n if (!REDIRECTS.has(status)) {\n throw new RangeError(\n 'Failed to execute \"redirect\" on \"response\": Invalid status code'\n )\n }\n const initObj = typeof init === 'object' ? init : {}\n const headers = new Headers(initObj?.headers)\n headers.set('Location', validateURL(url))\n\n return new NextResponse(null, {\n ...initObj,\n headers,\n status,\n })\n }\n\n static rewrite(\n destination: string | NextURL | URL,\n init?: MiddlewareResponseInit\n ) {\n const headers = new Headers(init?.headers)\n headers.set('x-middleware-rewrite', validateURL(destination))\n\n handleMiddlewareField(init, headers)\n return new NextResponse(null, { ...init, headers })\n }\n\n static next(init?: MiddlewareResponseInit) {\n const headers = new Headers(init?.headers)\n headers.set('x-middleware-next', '1')\n\n handleMiddlewareField(init, headers)\n return new NextResponse(null, { ...init, headers })\n }\n}\n\ninterface ResponseInit extends globalThis.ResponseInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig\n trailingSlash?: boolean\n }\n url?: string\n}\n\ninterface ModifiedRequest {\n /**\n * If this is set, the request headers will be overridden with this value.\n */\n headers?: Headers\n}\n\ninterface MiddlewareResponseInit extends globalThis.ResponseInit {\n /**\n * These fields will override the request from clients.\n */\n request?: ModifiedRequest\n}\n"],"names":["stringifyCookie","NextURL","toNodeOutgoingHttpHeaders","validateURL","ReflectAdapter","ResponseCookies","INTERNALS","Symbol","REDIRECTS","Set","handleMiddlewareField","init","headers","request","Headers","Error","keys","key","value","set","push","join","NextResponse","Response","constructor","body","cookies","cookiesProxy","Proxy","get","target","prop","receiver","args","result","Reflect","apply","newHeaders","getAll","map","cookie","url","nextConfig","undefined","for","bodyUsed","Object","fromEntries","ok","redirected","status","statusText","type","json","response","redirect","has","RangeError","initObj","rewrite","destination","next"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 17582, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/utils.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","fromNodeOutgoingHttpHeaders","nodeHeaders","headers","Headers","key","value","Object","entries","values","Array","isArray","v","toString","append","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","toNodeOutgoingHttpHeaders","cookies","toLowerCase","validateURL","url","String","URL","error","Error","cause","normalizeNextQueryParam","prefixes","prefix","startsWith"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 17714, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/web-on-close.ts"],"sourcesContent":["/** Monitor when the consumer finishes reading the response body.\nthat's as close as we can get to `res.on('close')` using web APIs.\n*/\nexport function trackBodyConsumed(\n body: string | ReadableStream,\n onEnd: () => void\n): BodyInit {\n if (typeof body === 'string') {\n const generator = async function* generate() {\n const encoder = new TextEncoder()\n yield encoder.encode(body)\n onEnd()\n }\n // @ts-expect-error BodyInit typings doesn't seem to include AsyncIterables even though it's supported in practice\n return generator()\n } else {\n return trackStreamConsumed(body, onEnd)\n }\n}\n\nexport function trackStreamConsumed(\n stream: ReadableStream,\n onEnd: () => void\n): ReadableStream {\n // NOTE: This function must handle `stream` being aborted or cancelled,\n // so it can't just be this:\n //\n // return stream.pipeThrough(new TransformStream({ flush() { onEnd() } }))\n //\n // because that doesn't handle cancellations.\n // (and cancellation handling via `Transformer.cancel` is only available in node >20)\n const dest = new TransformStream()\n const runOnEnd = () => onEnd()\n stream.pipeTo(dest.writable).then(runOnEnd, runOnEnd)\n return dest.readable\n}\n\nexport class CloseController {\n private target = new EventTarget()\n listeners = 0\n isClosed = false\n\n onClose(callback: () => void) {\n if (this.isClosed) {\n throw new Error('Cannot subscribe to a closed CloseController')\n }\n\n this.target.addEventListener('close', callback)\n this.listeners++\n }\n\n dispatchClose() {\n if (this.isClosed) {\n throw new Error('Cannot close a CloseController multiple times')\n }\n if (this.listeners > 0) {\n this.target.dispatchEvent(new Event('close'))\n }\n this.isClosed = true\n }\n}\n"],"names":["trackBodyConsumed","body","onEnd","generator","generate","encoder","TextEncoder","encode","trackStreamConsumed","stream","dest","TransformStream","runOnEnd","pipeTo","writable","then","readable","CloseController","onClose","callback","isClosed","Error","target","addEventListener","listeners","dispatchClose","dispatchEvent","Event","EventTarget"],"mappings":"AAAA;;AAEA,GACA;;;;;;;;AAAO,SAASA,kBACdC,IAA6B,EAC7BC,KAAiB;IAEjB,IAAI,OAAOD,SAAS,UAAU;QAC5B,MAAME,YAAY,gBAAgBC;YAChC,MAAMC,UAAU,IAAIC;YACpB,MAAMD,QAAQE,MAAM,CAACN;YACrBC;QACF;QACA,kHAAkH;QAClH,OAAOC;IACT,OAAO;QACL,OAAOK,oBAAoBP,MAAMC;IACnC;AACF;AAEO,SAASM,oBACdC,MAA8B,EAC9BP,KAAiB;IAEjB,uEAAuE;IACvE,4BAA4B;IAC5B,EAAE;IACF,4EAA4E;IAC5E,EAAE;IACF,6CAA6C;IAC7C,qFAAqF;IACrF,MAAMQ,OAAO,IAAIC;IACjB,MAAMC,WAAW,IAAMV;IACvBO,OAAOI,MAAM,CAACH,KAAKI,QAAQ,EAAEC,IAAI,CAACH,UAAUA;IAC5C,OAAOF,KAAKM,QAAQ;AACtB;AAEO,MAAMC;IAKXC,QAAQC,QAAoB,EAAE;QAC5B,IAAI,IAAI,CAACC,QAAQ,EAAE;YACjB,MAAM,OAAA,cAAyD,CAAzD,IAAIC,MAAM,iDAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAAwD;QAChE;QAEA,IAAI,CAACC,MAAM,CAACC,gBAAgB,CAAC,SAASJ;QACtC,IAAI,CAACK,SAAS;IAChB;IAEAC,gBAAgB;QACd,IAAI,IAAI,CAACL,QAAQ,EAAE;YACjB,MAAM,OAAA,cAA0D,CAA1D,IAAIC,MAAM,kDAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAAyD;QACjE;QACA,IAAI,IAAI,CAACG,SAAS,GAAG,GAAG;YACtB,IAAI,CAACF,MAAM,CAACI,aAAa,CAAC,IAAIC,MAAM;QACtC;QACA,IAAI,CAACP,QAAQ,GAAG;IAClB;;aArBQE,MAAAA,GAAS,IAAIM;aACrBJ,SAAAA,GAAY;aACZJ,QAAAA,GAAW;;AAoBb","ignoreList":[0]}}, + {"offset": {"line": 17785, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/action-revalidation-kind.ts"],"sourcesContent":["export type ActionRevalidationKind = 0 | 1 | 2\n\nexport const ActionDidNotRevalidate = 0\nexport const ActionDidRevalidateStaticAndDynamic = 1\nexport const ActionDidRevalidateDynamicOnly = 2\n"],"names":["ActionDidNotRevalidate","ActionDidRevalidateStaticAndDynamic","ActionDidRevalidateDynamicOnly"],"mappings":";;;;;;;;AAEO,MAAMA,yBAAyB,EAAC;AAChC,MAAMC,sCAAsC,EAAC;AAC7C,MAAMC,iCAAiC,EAAC","ignoreList":[0]}}, + {"offset": {"line": 17800, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/errors/constants.ts"],"sourcesContent":["export const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'\n"],"names":["MISSING_ROOT_TAGS_ERROR"],"mappings":";;;;AAAO,MAAMA,0BAA0B,yBAAwB","ignoreList":[0]}}, + {"offset": {"line": 17809, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/escape-regexp.ts"],"sourcesContent":["// regexp is based on https://github.com/sindresorhus/escape-string-regexp\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g\n\nexport function escapeStringRegexp(str: string) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&')\n }\n return str\n}\n"],"names":["reHasRegExp","reReplaceRegExp","escapeStringRegexp","str","test","replace"],"mappings":";;;;AAAA,0EAA0E;AAC1E,MAAMA,cAAc;AACpB,MAAMC,kBAAkB;AAEjB,SAASC,mBAAmBC,GAAW;IAC5C,+GAA+G;IAC/G,IAAIH,YAAYI,IAAI,CAACD,MAAM;QACzB,OAAOA,IAAIE,OAAO,CAACJ,iBAAiB;IACtC;IACA,OAAOE;AACT","ignoreList":[0]}}, + {"offset": {"line": 17827, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/get-hostname.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n"],"names":["getHostname","parsed","headers","hostname","host","Array","isArray","toString","split","toLowerCase"],"mappings":"AAEA;;;;;CAKC,GACD;;;;AAAO,SAASA,YACdC,MAAoC,EACpCC,OAA6B;IAE7B,2EAA2E;IAC3E,YAAY;IACZ,IAAIC;IACJ,IAAID,SAASE,QAAQ,CAACC,MAAMC,OAAO,CAACJ,QAAQE,IAAI,GAAG;QACjDD,WAAWD,QAAQE,IAAI,CAACG,QAAQ,GAAGC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IACrD,OAAO,IAAIP,OAAOE,QAAQ,EAAE;QAC1BA,WAAWF,OAAOE,QAAQ;IAC5B,OAAO;IAEP,OAAOA,SAASM,WAAW;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 17851, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/hash.ts"],"sourcesContent":["// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\nexport function djb2Hash(str: string) {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = ((hash << 5) + hash + char) & 0xffffffff\n }\n return hash >>> 0\n}\n\nexport function hexHash(str: string) {\n return djb2Hash(str).toString(36).slice(0, 5)\n}\n"],"names":["djb2Hash","str","hash","i","length","char","charCodeAt","hexHash","toString","slice"],"mappings":"AAAA,wCAAwC;AACxC,4CAA4C;AAC5C,iHAAiH;AACjH,wFAAwF;AACxF,gGAAgG;AAChG,wHAAwH;AACxH,wDAAwD;;;;;;;AACjD,SAASA,SAASC,GAAW;IAClC,IAAIC,OAAO;IACX,IAAK,IAAIC,IAAI,GAAGA,IAAIF,IAAIG,MAAM,EAAED,IAAK;QACnC,MAAME,OAAOJ,IAAIK,UAAU,CAACH;QAC5BD,OAASA,CAAAA,QAAQ,CAAA,IAAKA,OAAOG,OAAQ;IACvC;IACA,OAAOH,SAAS;AAClB;AAEO,SAASK,QAAQN,GAAW;IACjC,OAAOD,SAASC,KAAKO,QAAQ,CAAC,IAAIC,KAAK,CAAC,GAAG;AAC7C","ignoreList":[0]}}, + {"offset": {"line": 17879, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts"],"sourcesContent":["import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n"],"names":["detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale"],"mappings":";;;;AAEO,SAASA,mBACdC,WAAqC,EACrCC,QAAiB,EACjBC,cAAuB;IAEvB,IAAI,CAACF,aAAa;IAElB,IAAIE,gBAAgB;QAClBA,iBAAiBA,eAAeC,WAAW;IAC7C;IAEA,KAAK,MAAMC,QAAQJ,YAAa;QAC9B,yBAAyB;QACzB,MAAMK,iBAAiBD,KAAKE,MAAM,EAAEC,MAAM,KAAK,EAAE,CAAC,EAAE,CAACJ;QACrD,IACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,aAAa,CAACL,WAAW,MACjDC,KAAKK,OAAO,EAAEC,KAAK,CAACC,SAAWA,OAAOR,WAAW,OAAOD,iBACxD;YACA,OAAOE;QACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 17900, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts"],"sourcesContent":["export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n"],"names":["cache","WeakMap","normalizeLocalePath","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length"],"mappings":";;;;AAKA;;;;CAIC,GACD,MAAMA,QAAQ,IAAIC;AAWX,SAASC,oBACdC,QAAgB,EAChBC,OAA2B;IAE3B,sDAAsD;IACtD,IAAI,CAACA,SAAS,OAAO;QAAED;IAAS;IAEhC,iEAAiE;IACjE,IAAIE,oBAAoBL,MAAMM,GAAG,CAACF;IAClC,IAAI,CAACC,mBAAmB;QACtBA,oBAAoBD,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,WAAW;QAC9DT,MAAMU,GAAG,CAACN,SAASC;IACrB;IAEA,IAAIM;IAEJ,oEAAoE;IACpE,yEAAyE;IACzE,MAAMC,WAAWT,SAASU,KAAK,CAAC,KAAK;IAErC,0EAA0E;IAC1E,UAAU;IACV,IAAI,CAACD,QAAQ,CAAC,EAAE,EAAE,OAAO;QAAET;IAAS;IAEpC,0DAA0D;IAC1D,MAAMW,UAAUF,QAAQ,CAAC,EAAE,CAACH,WAAW;IAEvC,yEAAyE;IACzE,mCAAmC;IACnC,MAAMM,QAAQV,kBAAkBW,OAAO,CAACF;IACxC,IAAIC,QAAQ,GAAG,OAAO;QAAEZ;IAAS;IAEjC,oCAAoC;IACpCQ,iBAAiBP,OAAO,CAACW,MAAM;IAE/B,gDAAgD;IAChDZ,WAAWA,SAASc,KAAK,CAACN,eAAeO,MAAM,GAAG,MAAM;IAExD,OAAO;QAAEf;QAAUQ;IAAe;AACpC","ignoreList":[0]}}, + {"offset": {"line": 17950, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;;AAAO,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAFF,OAAA,cAGC,CAHD,IAGC,EAHD,qBAAA;mBAAA;wBAAA;0BAAA;QAGA;QACA,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 17969, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/is-thenable.ts"],"sourcesContent":["/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */\nexport function isThenable(\n promise: Promise | T\n): promise is Promise {\n return (\n promise !== null &&\n typeof promise === 'object' &&\n 'then' in promise &&\n typeof promise.then === 'function'\n )\n}\n"],"names":["isThenable","promise","then"],"mappings":"AAAA;;;;;CAKC,GACD;;;;AAAO,SAASA,WACdC,OAAuB;IAEvB,OACEA,YAAY,QACZ,OAAOA,YAAY,YACnB,UAAUA,WACV,OAAOA,QAAQC,IAAI,KAAK;AAE5B","ignoreList":[0]}}, + {"offset": {"line": 17984, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/isomorphic/path.js"],"sourcesContent":["/**\n * This module is for next.js server internal usage of path module.\n * It will use native path module for nodejs runtime.\n * It will use path-browserify polyfill for edge runtime.\n */\nlet path\n\nif (process.env.NEXT_RUNTIME === 'edge') {\n path = require('next/dist/compiled/path-browserify')\n} else {\n path = require('path')\n}\n\nmodule.exports = path\n"],"names":["path","process","env","NEXT_RUNTIME","require","module","exports"],"mappings":"AAAA;;;;CAIC,GACD,IAAIA;AAEJ,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACLH,OAAOI,QAAQ;AACjB;AAEAC,OAAOC,OAAO,GAAGN","ignoreList":[0]}}, + {"offset": {"line": 17999, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts"],"sourcesContent":["/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n"],"names":["ensureLeadingSlash","path","startsWith"],"mappings":"AAAA;;;CAGC,GACD;;;;AAAO,SAASA,mBAAmBC,IAAY;IAC7C,OAAOA,KAAKC,UAAU,CAAC,OAAOD,OAAO,CAAC,CAAC,EAAEA,MAAM;AACjD","ignoreList":[0]}}, + {"offset": {"line": 18013, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/page-path/normalize-page-path.ts"],"sourcesContent":["import { ensureLeadingSlash } from './ensure-leading-slash'\nimport { isDynamicRoute } from '../router/utils'\nimport { NormalizeError } from '../utils'\n\n/**\n * Takes a page and transforms it into its file counterpart ensuring that the\n * output is normalized. Note this function is not idempotent because a page\n * `/index` can be referencing `/index/index.js` and `/index/index` could be\n * referencing `/index/index/index.js`. Examples:\n * - `/` -> `/index`\n * - `/index/foo` -> `/index/index/foo`\n * - `/index` -> `/index/index`\n */\nexport function normalizePagePath(page: string): string {\n const normalized =\n /^\\/index(\\/|$)/.test(page) && !isDynamicRoute(page)\n ? `/index${page}`\n : page === '/'\n ? '/index'\n : ensureLeadingSlash(page)\n\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { posix } = require('path') as typeof import('path')\n const resolvedPage = posix.normalize(normalized)\n if (resolvedPage !== normalized) {\n throw new NormalizeError(\n `Requested and resolved page mismatch: ${normalized} ${resolvedPage}`\n )\n }\n }\n\n return normalized\n}\n"],"names":["ensureLeadingSlash","isDynamicRoute","NormalizeError","normalizePagePath","page","normalized","test","process","env","NEXT_RUNTIME","posix","require","resolvedPage","normalize"],"mappings":";;;;AAAA,SAASA,kBAAkB,QAAQ,yBAAwB;;AAC3D,SAASC,cAAc,QAAQ,kBAAiB;AAChD,SAASC,cAAc,QAAQ,WAAU;;;;AAWlC,SAASC,kBAAkBC,IAAY;IAC5C,MAAMC,aACJ,iBAAiBC,IAAI,CAACF,SAAS,KAACH,0MAAAA,EAAeG,QAC3C,CAAC,MAAM,EAAEA,MAAM,GACfA,SAAS,MACP,eACAJ,wNAAAA,EAAmBI;IAE3B,IAAIG,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;QACvC,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAAQ;QAC1B,MAAMC,eAAeF,MAAMG,SAAS,CAACR;QACrC,IAAIO,iBAAiBP,YAAY;YAC/B,MAAM,IAAIH,+KAAAA,CACR,CAAC,sCAAsC,EAAEG,WAAW,CAAC,EAAEO,cAAc;QAEzE;IACF;IAEA,OAAOP;AACT","ignoreList":[0]}}, + {"offset": {"line": 18039, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/routes/app.ts"],"sourcesContent":["import { InvariantError } from '../../invariant-error'\nimport { getSegmentParam, type SegmentParam } from '../utils/get-segment-param'\nimport {\n INTERCEPTION_ROUTE_MARKERS,\n type InterceptionMarker,\n} from '../utils/interception-routes'\n\nexport type RouteGroupAppRouteSegment = {\n type: 'route-group'\n name: string\n\n /**\n * If present, this segment has an interception marker prefixing it.\n */\n interceptionMarker?: InterceptionMarker\n}\n\nexport type ParallelRouteAppRouteSegment = {\n type: 'parallel-route'\n name: string\n\n /**\n * If present, this segment has an interception marker prefixing it.\n */\n interceptionMarker?: InterceptionMarker\n}\n\nexport type StaticAppRouteSegment = {\n type: 'static'\n name: string\n\n /**\n * If present, this segment has an interception marker prefixing it.\n */\n interceptionMarker?: InterceptionMarker\n}\n\nexport type DynamicAppRouteSegment = {\n type: 'dynamic'\n name: string\n param: SegmentParam\n\n /**\n * If present, this segment has an interception marker prefixing it.\n */\n interceptionMarker?: InterceptionMarker\n}\n\n/**\n * Represents a single segment in a route path.\n * Can be either static (e.g., \"blog\") or dynamic (e.g., \"[slug]\").\n */\nexport type AppRouteSegment =\n | StaticAppRouteSegment\n | DynamicAppRouteSegment\n | RouteGroupAppRouteSegment\n | ParallelRouteAppRouteSegment\n\nexport type NormalizedAppRouteSegment =\n | StaticAppRouteSegment\n | DynamicAppRouteSegment\n\nfunction normalizeEncodedDynamicPlaceholder(segment: string): string {\n if (!/%5b|%5d/i.test(segment)) {\n return segment\n }\n\n try {\n const decodedSegment = decodeURIComponent(segment)\n return getSegmentParam(decodedSegment) ? decodedSegment : segment\n } catch {\n return segment\n }\n}\n\nexport function parseAppRouteSegment(segment: string): AppRouteSegment | null {\n if (segment === '') {\n return null\n }\n\n // Check if the segment starts with an interception marker\n const interceptionMarker = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n\n const param = getSegmentParam(segment)\n if (param) {\n return {\n type: 'dynamic',\n name: segment,\n param,\n interceptionMarker,\n }\n } else if (segment.startsWith('(') && segment.endsWith(')')) {\n return {\n type: 'route-group',\n name: segment,\n interceptionMarker,\n }\n } else if (segment.startsWith('@')) {\n return {\n type: 'parallel-route',\n name: segment,\n interceptionMarker,\n }\n } else {\n return {\n type: 'static',\n name: segment,\n interceptionMarker,\n }\n }\n}\n\nexport type AppRoute = {\n normalized: boolean\n pathname: string\n segments: AppRouteSegment[]\n dynamicSegments: DynamicAppRouteSegment[]\n interceptionMarker: InterceptionMarker | undefined\n interceptingRoute: AppRoute | undefined\n interceptedRoute: AppRoute | undefined\n}\n\nexport type NormalizedAppRoute = Omit & {\n normalized: true\n segments: NormalizedAppRouteSegment[]\n}\n\nexport function isNormalizedAppRoute(\n route: InterceptionAppRoute\n): route is NormalizedInterceptionAppRoute\nexport function isNormalizedAppRoute(\n route: AppRoute | InterceptionAppRoute\n): route is NormalizedAppRoute {\n return route.normalized\n}\n\nexport type InterceptionAppRoute = Omit<\n AppRoute,\n 'interceptionMarker' | 'interceptingRoute' | 'interceptedRoute'\n> & {\n interceptionMarker: InterceptionMarker\n interceptingRoute: AppRoute\n interceptedRoute: AppRoute\n}\n\nexport type NormalizedInterceptionAppRoute = Omit<\n InterceptionAppRoute,\n | 'normalized'\n | 'segments'\n | 'interceptionMarker'\n | 'interceptingRoute'\n | 'interceptedRoute'\n> & {\n normalized: true\n segments: NormalizedAppRouteSegment[]\n interceptionMarker: InterceptionMarker\n interceptingRoute: NormalizedAppRoute\n interceptedRoute: NormalizedAppRoute\n}\n\nexport function isInterceptionAppRoute(\n route: NormalizedAppRoute\n): route is NormalizedInterceptionAppRoute\nexport function isInterceptionAppRoute(\n route: AppRoute\n): route is InterceptionAppRoute {\n return (\n route.interceptionMarker !== undefined &&\n route.interceptingRoute !== undefined &&\n route.interceptedRoute !== undefined\n )\n}\n\n// Bitmask for which non-URL segment types to allow during parsing.\n// By default, route groups and parallel routes are rejected because\n// they should have been stripped by normalizeAppPath. These flags\n// let callers opt in to allowing specific types.\nconst OnlyRoutableSegments = /* */ 0b00\nconst AllowParallelSegments = /* */ 0b01\nconst AllowGroupSegments = /* */ 0b10\n\nfunction parseAppRouteImpl(\n pathname: string,\n allowedTypes: number\n): AppRoute | NormalizedAppRoute {\n const pathnameSegments = pathname.split('/').filter(Boolean)\n\n // Build segments array with static and dynamic segments\n const segments: AppRouteSegment[] = []\n\n // Parse if this is an interception route.\n let interceptionMarker: InterceptionMarker | undefined\n let interceptingRoute: AppRoute | NormalizedAppRoute | undefined\n let interceptedRoute: AppRoute | NormalizedAppRoute | undefined\n\n for (const segment of pathnameSegments) {\n const normalizedSegment = normalizeEncodedDynamicPlaceholder(segment)\n\n // Parse the segment into an AppSegment.\n const appSegment = parseAppRouteSegment(normalizedSegment)\n if (!appSegment) {\n continue\n }\n\n if (\n appSegment.type === 'route-group' &&\n !(allowedTypes & AllowGroupSegments)\n ) {\n throw new InvariantError(\n `${pathname} is being parsed as a normalized route, but it has a route group segment.`\n )\n }\n\n if (\n appSegment.type === 'parallel-route' &&\n !(allowedTypes & AllowParallelSegments)\n ) {\n throw new InvariantError(\n `${pathname} is being parsed as a normalized route, but it has a parallel route segment.`\n )\n }\n\n segments.push(appSegment)\n\n if (appSegment.interceptionMarker) {\n const parts = pathname.split(appSegment.interceptionMarker)\n if (parts.length !== 2) {\n throw new Error(`Invalid interception route: ${pathname}`)\n }\n\n interceptingRoute = parseAppRouteImpl(parts[0], allowedTypes)\n interceptedRoute = parseAppRouteImpl(parts[1], allowedTypes)\n interceptionMarker = appSegment.interceptionMarker\n }\n }\n\n const dynamicSegments = segments.filter(\n (segment) => segment.type === 'dynamic'\n )\n\n return {\n normalized: allowedTypes === OnlyRoutableSegments,\n pathname,\n segments,\n dynamicSegments,\n interceptionMarker,\n interceptingRoute,\n interceptedRoute,\n }\n}\n\n/**\n * Parse an app route that has been fully normalized (no @slot or ()\n * group segments). Throws if either is present.\n */\nexport function parseNormalizedAppRoute(pathname: string): NormalizedAppRoute {\n return parseAppRouteImpl(pathname, OnlyRoutableSegments) as NormalizedAppRoute\n}\n\n/**\n * Parse an app route that may contain @slot segments but not ()\n * group segments. Slot segments are preserved as parallel-route\n * type segments so callers can distinguish routes in different\n * parallel slots.\n */\nexport function parseAppRouteWithSlots(pathname: string): AppRoute {\n return parseAppRouteImpl(pathname, AllowParallelSegments) as AppRoute\n}\n"],"names":["InvariantError","getSegmentParam","INTERCEPTION_ROUTE_MARKERS","normalizeEncodedDynamicPlaceholder","segment","test","decodedSegment","decodeURIComponent","parseAppRouteSegment","interceptionMarker","find","m","startsWith","param","type","name","endsWith","isNormalizedAppRoute","route","normalized","isInterceptionAppRoute","undefined","interceptingRoute","interceptedRoute","OnlyRoutableSegments","AllowParallelSegments","AllowGroupSegments","parseAppRouteImpl","pathname","allowedTypes","pathnameSegments","split","filter","Boolean","segments","normalizedSegment","appSegment","push","parts","length","Error","dynamicSegments","parseNormalizedAppRoute","parseAppRouteWithSlots"],"mappings":";;;;;;;;;;;;AAAA,SAASA,cAAc,QAAQ,wBAAuB;AACtD,SAASC,eAAe,QAA2B,6BAA4B;AAC/E,SACEC,0BAA0B,QAErB,+BAA8B;;;;AAyDrC,SAASC,mCAAmCC,OAAe;IACzD,IAAI,CAAC,WAAWC,IAAI,CAACD,UAAU;QAC7B,OAAOA;IACT;IAEA,IAAI;QACF,MAAME,iBAAiBC,mBAAmBH;QAC1C,WAAOH,qNAAAA,EAAgBK,kBAAkBA,iBAAiBF;IAC5D,EAAE,OAAM;QACN,OAAOA;IACT;AACF;AAEO,SAASI,qBAAqBJ,OAAe;IAClD,IAAIA,YAAY,IAAI;QAClB,OAAO;IACT;IAEA,0DAA0D;IAC1D,MAAMK,qBAAqBP,+NAAAA,CAA2BQ,IAAI,CAAC,CAACC,IAC1DP,QAAQQ,UAAU,CAACD;IAGrB,MAAME,YAAQZ,qNAAAA,EAAgBG;IAC9B,IAAIS,OAAO;QACT,OAAO;YACLC,MAAM;YACNC,MAAMX;YACNS;YACAJ;QACF;IACF,OAAO,IAAIL,QAAQQ,UAAU,CAAC,QAAQR,QAAQY,QAAQ,CAAC,MAAM;QAC3D,OAAO;YACLF,MAAM;YACNC,MAAMX;YACNK;QACF;IACF,OAAO,IAAIL,QAAQQ,UAAU,CAAC,MAAM;QAClC,OAAO;YACLE,MAAM;YACNC,MAAMX;YACNK;QACF;IACF,OAAO;QACL,OAAO;YACLK,MAAM;YACNC,MAAMX;YACNK;QACF;IACF;AACF;AAoBO,SAASQ,qBACdC,KAAsC;IAEtC,OAAOA,MAAMC,UAAU;AACzB;AA6BO,SAASC,uBACdF,KAAe;IAEf,OACEA,MAAMT,kBAAkB,KAAKY,aAC7BH,MAAMI,iBAAiB,KAAKD,aAC5BH,MAAMK,gBAAgB,KAAKF;AAE/B;AAEA,mEAAmE;AACnE,oEAAoE;AACpE,kEAAkE;AAClE,iDAAiD;AACjD,MAAMG,uBAAuB,KAAK,GAAG;AACrC,MAAMC,wBAAwB,IAAI,GAAG;AACrC,MAAMC,qBAAqB,OAAO,GAAG;AAErC,SAASC,kBACPC,QAAgB,EAChBC,YAAoB;IAEpB,MAAMC,mBAAmBF,SAASG,KAAK,CAAC,KAAKC,MAAM,CAACC;IAEpD,wDAAwD;IACxD,MAAMC,WAA8B,EAAE;IAEtC,0CAA0C;IAC1C,IAAIzB;IACJ,IAAIa;IACJ,IAAIC;IAEJ,KAAK,MAAMnB,WAAW0B,iBAAkB;QACtC,MAAMK,oBAAoBhC,mCAAmCC;QAE7D,wCAAwC;QACxC,MAAMgC,aAAa5B,qBAAqB2B;QACxC,IAAI,CAACC,YAAY;YACf;QACF;QAEA,IACEA,WAAWtB,IAAI,KAAK,iBACpB,CAAEe,CAAAA,eAAeH,kBAAiB,GAClC;YACA,MAAM,OAAA,cAEL,CAFK,IAAI1B,4LAAAA,CACR,GAAG4B,SAAS,yEAAyE,CAAC,GADlF,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;QAEA,IACEQ,WAAWtB,IAAI,KAAK,oBACpB,CAAEe,CAAAA,eAAeJ,qBAAoB,GACrC;YACA,MAAM,OAAA,cAEL,CAFK,IAAIzB,4LAAAA,CACR,GAAG4B,SAAS,4EAA4E,CAAC,GADrF,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;QAEAM,SAASG,IAAI,CAACD;QAEd,IAAIA,WAAW3B,kBAAkB,EAAE;YACjC,MAAM6B,QAAQV,SAASG,KAAK,CAACK,WAAW3B,kBAAkB;YAC1D,IAAI6B,MAAMC,MAAM,KAAK,GAAG;gBACtB,MAAM,OAAA,cAAoD,CAApD,IAAIC,MAAM,CAAC,4BAA4B,EAAEZ,UAAU,GAAnD,qBAAA;2BAAA;gCAAA;kCAAA;gBAAmD;YAC3D;YAEAN,oBAAoBK,kBAAkBW,KAAK,CAAC,EAAE,EAAET;YAChDN,mBAAmBI,kBAAkBW,KAAK,CAAC,EAAE,EAAET;YAC/CpB,qBAAqB2B,WAAW3B,kBAAkB;QACpD;IACF;IAEA,MAAMgC,kBAAkBP,SAASF,MAAM,CACrC,CAAC5B,UAAYA,QAAQU,IAAI,KAAK;IAGhC,OAAO;QACLK,YAAYU,iBAAiBL;QAC7BI;QACAM;QACAO;QACAhC;QACAa;QACAC;IACF;AACF;AAMO,SAASmB,wBAAwBd,QAAgB;IACtD,OAAOD,kBAAkBC,UAAUJ;AACrC;AAQO,SAASmB,uBAAuBf,QAAgB;IACrD,OAAOD,kBAAkBC,UAAUH;AACrC","ignoreList":[0]}}, + {"offset": {"line": 18180, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/add-locale.ts"],"sourcesContent":["import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n"],"names":["addPathPrefix","pathHasPrefix","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;;;AAO1C,SAASC,UACdC,IAAY,EACZC,MAAuB,EACvBC,aAAsB,EACtBC,YAAsB;IAEtB,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,CAACF,UAAUA,WAAWC,eAAe,OAAOF;IAEhD,MAAMI,QAAQJ,KAAKK,WAAW;IAE9B,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAACF,cAAc;QACjB,QAAIL,iNAAAA,EAAcM,OAAO,SAAS,OAAOJ;QACzC,QAAIF,iNAAAA,EAAcM,OAAO,CAAC,CAAC,EAAEH,OAAOI,WAAW,IAAI,GAAG,OAAOL;IAC/D;IAEA,qCAAqC;IACrC,WAAOH,iNAAAA,EAAcG,MAAM,CAAC,CAAC,EAAEC,QAAQ;AACzC","ignoreList":[0]}}, + {"offset": {"line": 18206, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n"],"names":["parsePath","addPathPrefix","path","prefix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAMjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,qMAAAA,EAAUE;IAC5C,OAAO,GAAGC,SAASE,WAAWC,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 18223, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n"],"names":["parsePath","addPathSuffix","path","suffix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAOjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,qMAAAA,EAAUE;IAC5C,OAAO,GAAGG,WAAWF,SAASG,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 18240, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/app-paths.ts"],"sourcesContent":["import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Comparator for sorting app paths so that parallel slot paths (containing\n * `/@`) come before the children/root page path. This ensures the last item\n * is always the children page, which is what `renderPageComponent` reads via\n * `appPaths[appPaths.length - 1]`.\n *\n * Without this, route group prefixes like `(group)` (char code 0x28) sort\n * before `@` (0x40), causing the children page to sort first instead of last\n * and leading to a manifest mismatch / 404 in webpack dev mode.\n */\nexport function compareAppPaths(a: string, b: string): number {\n const aHasSlot = a.includes('/@')\n const bHasSlot = b.includes('/@')\n if (aHasSlot && !bHasSlot) return -1\n if (!aHasSlot && bHasSlot) return 1\n return a.localeCompare(b)\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n"],"names":["ensureLeadingSlash","isGroupSegment","normalizeAppPath","route","split","reduce","pathname","segment","index","segments","length","compareAppPaths","a","b","aHasSlot","includes","bHasSlot","localeCompare","normalizeRscURL","url","replace"],"mappings":";;;;;;;;AAAA,SAASA,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,cAAc,QAAQ,gBAAe;;;AAqBvC,SAASC,iBAAiBC,KAAa;IAC5C,WAAOH,wNAAAA,EACLG,MAAMC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,UAAUC,SAASC,OAAOC;QACjD,8BAA8B;QAC9B,IAAI,CAACF,SAAS;YACZ,OAAOD;QACT;QAEA,sBAAsB;QACtB,QAAIL,iLAAAA,EAAeM,UAAU;YAC3B,OAAOD;QACT;QAEA,iCAAiC;QACjC,IAAIC,OAAO,CAAC,EAAE,KAAK,KAAK;YACtB,OAAOD;QACT;QAEA,uDAAuD;QACvD,IACGC,CAAAA,YAAY,UAAUA,YAAY,OAAM,KACzCC,UAAUC,SAASC,MAAM,GAAG,GAC5B;YACA,OAAOJ;QACT;QAEA,OAAO,GAAGA,SAAS,CAAC,EAAEC,SAAS;IACjC,GAAG;AAEP;AAYO,SAASI,gBAAgBC,CAAS,EAAEC,CAAS;IAClD,MAAMC,WAAWF,EAAEG,QAAQ,CAAC;IAC5B,MAAMC,WAAWH,EAAEE,QAAQ,CAAC;IAC5B,IAAID,YAAY,CAACE,UAAU,OAAO,CAAC;IACnC,IAAI,CAACF,YAAYE,UAAU,OAAO;IAClC,OAAOJ,EAAEK,aAAa,CAACJ;AACzB;AAMO,SAASK,gBAAgBC,GAAW;IACzC,OAAOA,IAAIC,OAAO,CAChB,eACA,AACA,8BAD8B;AAGlC","ignoreList":[0]}}, + {"offset": {"line": 18287, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/cache-busting-search-param.ts"],"sourcesContent":["import { hexHash } from '../../hash'\n\nconst CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12\nconst textEncoder = new TextEncoder()\n\nfunction encodeCacheBustingSearchParam(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nfunction normalizeCacheBustingInput(\n value: string | string[] | undefined\n): string {\n if (value === undefined) {\n return '0'\n }\n return Array.isArray(value) ? value.join(',') : value\n}\n\nfunction createCacheBustingSearchParamInput(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string | null {\n if (\n (prefetchHeader === undefined || prefetchHeader === '0') &&\n segmentPrefetchHeader === undefined &&\n stateTreeHeader === undefined &&\n nextUrlHeader === undefined\n ) {\n return null\n }\n\n return [\n prefetchHeader ?? '0',\n normalizeCacheBustingInput(segmentPrefetchHeader),\n normalizeCacheBustingInput(stateTreeHeader),\n normalizeCacheBustingInput(nextUrlHeader),\n ].join(',')\n}\n\nasync function computeCacheBustingSearchParamFromInput(\n input: string\n): Promise {\n // Truncate SHA-256 to 96 bits to keep `_rsc` compact\n const digest = await globalThis.crypto.subtle.digest(\n 'SHA-256',\n textEncoder.encode(input)\n )\n return encodeCacheBustingSearchParam(\n new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)\n )\n}\n\nexport async function computeCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): Promise {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return computeCacheBustingSearchParamFromInput(input)\n}\n\nexport function computeLegacyCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return hexHash(input)\n}\n"],"names":["hexHash","CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES","textEncoder","TextEncoder","encodeCacheBustingSearchParam","bytes","binary","i","length","String","fromCharCode","btoa","replace","normalizeCacheBustingInput","value","undefined","Array","isArray","join","createCacheBustingSearchParamInput","prefetchHeader","segmentPrefetchHeader","stateTreeHeader","nextUrlHeader","computeCacheBustingSearchParamFromInput","input","digest","globalThis","crypto","subtle","encode","Uint8Array","subarray","computeCacheBustingSearchParam","computeLegacyCacheBustingSearchParam"],"mappings":";;;;;;AAAA,SAASA,OAAO,QAAQ,aAAY;;AAEpC,MAAMC,0CAA0C;AAChD,MAAMC,cAAc,IAAIC;AAExB,SAASC,8BAA8BC,KAAiB;IACtD,IAAIC,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGA,IAAIF,MAAMG,MAAM,EAAED,IAAK;QACrCD,UAAUG,OAAOC,YAAY,CAACL,KAAK,CAACE,EAAE;IACxC;IAEA,OAAOI,KAAKL,QAAQM,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO;AAC7E;AAEA,SAASC,2BACPC,KAAoC;IAEpC,IAAIA,UAAUC,WAAW;QACvB,OAAO;IACT;IACA,OAAOC,MAAMC,OAAO,CAACH,SAASA,MAAMI,IAAI,CAAC,OAAOJ;AAClD;AAEA,SAASK,mCACPC,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,IACGH,CAAAA,mBAAmBL,aAAaK,mBAAmB,GAAE,KACtDC,0BAA0BN,aAC1BO,oBAAoBP,aACpBQ,kBAAkBR,WAClB;QACA,OAAO;IACT;IAEA,OAAO;QACLK,kBAAkB;QAClBP,2BAA2BQ;QAC3BR,2BAA2BS;QAC3BT,2BAA2BU;KAC5B,CAACL,IAAI,CAAC;AACT;AAEA,eAAeM,wCACbC,KAAa;IAEb,qDAAqD;IACrD,MAAMC,SAAS,MAAMC,WAAWC,MAAM,CAACC,MAAM,CAACH,MAAM,CAClD,WACAxB,YAAY4B,MAAM,CAACL;IAErB,OAAOrB,8BACL,IAAI2B,WAAWL,QAAQM,QAAQ,CAAC,GAAG/B;AAEvC;AAEO,eAAegC,+BACpBb,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,OAAOD,wCAAwCC;AACjD;AAEO,SAASS,qCACdd,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,WAAOzB,uKAAAA,EAAQyB;AACjB","ignoreList":[0]}}, + {"offset": {"line": 18344, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts"],"sourcesContent":["import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n"],"names":["removeTrailingSlash","addPathPrefix","addPathSuffix","addLocale","formatNextPathnameInfo","info","pathname","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","basePath","endsWith"],"mappings":";;;;AACA,SAASA,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,SAAS,QAAQ,eAAc;;;;;AAOjC,SAASC,uBAAuBC,IAAkB;IACvD,IAAIC,eAAWH,qMAAAA,EACbE,KAAKC,QAAQ,EACbD,KAAKE,MAAM,EACXF,KAAKG,OAAO,GAAGC,YAAYJ,KAAKK,aAAa,EAC7CL,KAAKM,YAAY;IAGnB,IAAIN,KAAKG,OAAO,IAAI,CAACH,KAAKO,aAAa,EAAE;QACvCN,eAAWN,6NAAAA,EAAoBM;IACjC;IAEA,IAAID,KAAKG,OAAO,EAAE;QAChBF,eAAWJ,iNAAAA,MACTD,iNAAAA,EAAcK,UAAU,CAAC,YAAY,EAAED,KAAKG,OAAO,EAAE,GACrDH,KAAKC,QAAQ,KAAK,MAAM,eAAe;IAE3C;IAEAA,eAAWL,iNAAAA,EAAcK,UAAUD,KAAKQ,QAAQ;IAChD,OAAO,CAACR,KAAKG,OAAO,IAAIH,KAAKO,aAAa,GACtC,CAACN,SAASQ,QAAQ,CAAC,WACjBZ,iNAAAA,EAAcI,UAAU,OACxBA,eACFN,6NAAAA,EAAoBM;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 18371, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/format-url.ts"],"sourcesContent":["// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { UrlObject } from 'url'\nimport type { ParsedUrlQuery } from 'querystring'\nimport * as querystring from './querystring'\n\nconst slashedProtocols = /https?|ftp|gopher|file/\n\nexport function formatUrl(urlObj: UrlObject) {\n let { auth, hostname } = urlObj\n let protocol = urlObj.protocol || ''\n let pathname = urlObj.pathname || ''\n let hash = urlObj.hash || ''\n let query = urlObj.query || ''\n let host: string | false = false\n\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''\n\n if (urlObj.host) {\n host = auth + urlObj.host\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname)\n if (urlObj.port) {\n host += ':' + urlObj.port\n }\n }\n\n if (query && typeof query === 'object') {\n query = String(querystring.urlQueryToSearchParams(query as ParsedUrlQuery))\n }\n\n let search = urlObj.search || (query && `?${query}`) || ''\n\n if (protocol && !protocol.endsWith(':')) protocol += ':'\n\n if (\n urlObj.slashes ||\n ((!protocol || slashedProtocols.test(protocol)) && host !== false)\n ) {\n host = '//' + (host || '')\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname\n } else if (!host) {\n host = ''\n }\n\n if (hash && hash[0] !== '#') hash = '#' + hash\n if (search && search[0] !== '?') search = '?' + search\n\n pathname = pathname.replace(/[?#]/g, encodeURIComponent)\n search = search.replace('#', '%23')\n\n return `${protocol}${host}${pathname}${search}${hash}`\n}\n\nexport const urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes',\n]\n\nexport function formatWithValidation(url: UrlObject): string {\n if (process.env.NODE_ENV === 'development') {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key) => {\n if (!urlObjectKeys.includes(key)) {\n console.warn(\n `Unknown key passed via urlObject into url.format: ${key}`\n )\n }\n })\n }\n }\n\n return formatUrl(url)\n}\n"],"names":["querystring","slashedProtocols","formatUrl","urlObj","auth","hostname","protocol","pathname","hash","query","host","encodeURIComponent","replace","indexOf","port","String","urlQueryToSearchParams","search","endsWith","slashes","test","urlObjectKeys","formatWithValidation","url","process","env","NODE_ENV","Object","keys","forEach","key","includes","console","warn"],"mappings":";;;;;;;;AAAA,uCAAuC;AACvC,sDAAsD;AACtD,EAAE;AACF,0EAA0E;AAC1E,gEAAgE;AAChE,sEAAsE;AACtE,sEAAsE;AACtE,4EAA4E;AAC5E,qEAAqE;AACrE,wBAAwB;AACxB,EAAE;AACF,0EAA0E;AAC1E,yDAAyD;AACzD,EAAE;AACF,0EAA0E;AAC1E,6DAA6D;AAC7D,4EAA4E;AAC5E,2EAA2E;AAC3E,wEAAwE;AACxE,4EAA4E;AAC5E,yCAAyC;AAIzC,YAAYA,iBAAiB,gBAAe;;AAE5C,MAAMC,mBAAmB;AAElB,SAASC,UAAUC,MAAiB;IACzC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAGF;IACzB,IAAIG,WAAWH,OAAOG,QAAQ,IAAI;IAClC,IAAIC,WAAWJ,OAAOI,QAAQ,IAAI;IAClC,IAAIC,OAAOL,OAAOK,IAAI,IAAI;IAC1B,IAAIC,QAAQN,OAAOM,KAAK,IAAI;IAC5B,IAAIC,OAAuB;IAE3BN,OAAOA,OAAOO,mBAAmBP,MAAMQ,OAAO,CAAC,QAAQ,OAAO,MAAM;IAEpE,IAAIT,OAAOO,IAAI,EAAE;QACfA,OAAON,OAAOD,OAAOO,IAAI;IAC3B,OAAO,IAAIL,UAAU;QACnBK,OAAON,OAAQ,CAAA,CAACC,SAASQ,OAAO,CAAC,OAAO,CAAC,CAAC,EAAER,SAAS,CAAC,CAAC,GAAGA,QAAO;QACjE,IAAIF,OAAOW,IAAI,EAAE;YACfJ,QAAQ,MAAMP,OAAOW,IAAI;QAC3B;IACF;IAEA,IAAIL,SAAS,OAAOA,UAAU,UAAU;QACtCA,QAAQM,OAAOf,YAAYgB,oMAAsB,CAACP;IACpD;IAEA,IAAIQ,SAASd,OAAOc,MAAM,IAAKR,SAAS,CAAC,CAAC,EAAEA,OAAO,IAAK;IAExD,IAAIH,YAAY,CAACA,SAASY,QAAQ,CAAC,MAAMZ,YAAY;IAErD,IACEH,OAAOgB,OAAO,IACZ,CAAA,CAACb,YAAYL,iBAAiBmB,IAAI,CAACd,SAAQ,KAAMI,SAAS,OAC5D;QACAA,OAAO,OAAQA,CAAAA,QAAQ,EAAC;QACxB,IAAIH,YAAYA,QAAQ,CAAC,EAAE,KAAK,KAAKA,WAAW,MAAMA;IACxD,OAAO,IAAI,CAACG,MAAM;QAChBA,OAAO;IACT;IAEA,IAAIF,QAAQA,IAAI,CAAC,EAAE,KAAK,KAAKA,OAAO,MAAMA;IAC1C,IAAIS,UAAUA,MAAM,CAAC,EAAE,KAAK,KAAKA,SAAS,MAAMA;IAEhDV,WAAWA,SAASK,OAAO,CAAC,SAASD;IACrCM,SAASA,OAAOL,OAAO,CAAC,KAAK;IAE7B,OAAO,GAAGN,WAAWI,OAAOH,WAAWU,SAAST,MAAM;AACxD;AAEO,MAAMa,gBAAgB;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD,CAAA;AAEM,SAASC,qBAAqBC,GAAc;IACjD,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,WAAe;QAC1C,IAAIH,QAAQ,QAAQ,OAAOA,QAAQ,UAAU;YAC3CI,OAAOC,IAAI,CAACL,KAAKM,OAAO,CAAC,CAACC;gBACxB,IAAI,CAACT,cAAcU,QAAQ,CAACD,MAAM;oBAChCE,QAAQC,IAAI,CACV,CAAC,kDAAkD,EAAEH,KAAK;gBAE9D;YACF;QACF;IACF;IAEA,OAAO5B,UAAUqB;AACnB","ignoreList":[0]}}, + {"offset": {"line": 18466, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/get-dynamic-param.ts"],"sourcesContent":["import type { DynamicParam } from '../../../../server/app-render/app-render'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\nimport type { OpaqueFallbackRouteParams } from '../../../../server/request/fallback-params'\nimport type { Params } from '../../../../server/request/params'\nimport type { DynamicParamTypesShort } from '../../app-router-types'\nimport { InvariantError } from '../../invariant-error'\nimport { parseLoaderTree } from './parse-loader-tree'\nimport { parseNormalizedAppRoute, parseAppRouteSegment } from '../routes/app'\nimport { resolveParamValue } from './resolve-param-value'\n\n/**\n * Gets the value of a param from the params object. This correctly handles the\n * case where the param is a fallback route param and encodes the resulting\n * value.\n *\n * @param interpolatedParams - The params object.\n * @param segmentKey - The key of the segment.\n * @param fallbackRouteParams - The fallback route params.\n * @returns The value of the param.\n */\nfunction getParamValue(\n interpolatedParams: Params,\n segmentKey: string,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n) {\n let value = interpolatedParams[segmentKey]\n\n if (fallbackRouteParams?.has(segmentKey)) {\n // We know that the fallback route params has the segment key because we\n // checked that above.\n const [searchValue] = fallbackRouteParams.get(segmentKey)!\n value = searchValue\n } else if (Array.isArray(value)) {\n value = value.map((i) => encodeURIComponent(i))\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value)\n }\n\n return value\n}\n\nexport function interpolateParallelRouteParams(\n loaderTree: LoaderTree,\n params: Params,\n pagePath: string,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n): Params {\n const interpolated = structuredClone(params)\n\n // Stack-based traversal with depth tracking\n const stack: Array<{ tree: LoaderTree; depth: number }> = [\n { tree: loaderTree, depth: 0 },\n ]\n\n // Parse the route from the provided page path.\n const route = parseNormalizedAppRoute(pagePath)\n\n while (stack.length > 0) {\n const { tree, depth } = stack.pop()!\n const { segment, parallelRoutes } = parseLoaderTree(tree)\n\n const appSegment = parseAppRouteSegment(segment)\n\n if (\n appSegment?.type === 'dynamic' &&\n !interpolated.hasOwnProperty(appSegment.param.paramName) &&\n // If the param is in the fallback route params, we don't need to\n // interpolate it because it's already marked as being unknown.\n !fallbackRouteParams?.has(appSegment.param.paramName)\n ) {\n const { paramName, paramType } = appSegment.param\n\n const paramValue = resolveParamValue(\n paramName,\n paramType,\n depth,\n route,\n interpolated\n )\n\n if (paramValue !== undefined) {\n interpolated[paramName] = paramValue\n } else if (paramType !== 'optional-catchall') {\n throw new InvariantError(\n `Could not resolve param value for segment: ${paramName}`\n )\n }\n }\n\n // Calculate next depth - increment if this is not a route group and not empty\n let nextDepth = depth\n if (\n appSegment &&\n appSegment.type !== 'route-group' &&\n appSegment.type !== 'parallel-route'\n ) {\n nextDepth++\n }\n\n // Add all parallel routes to the stack for processing\n for (const parallelRoute of Object.values(parallelRoutes)) {\n stack.push({ tree: parallelRoute, depth: nextDepth })\n }\n }\n\n return interpolated\n}\n\n/**\n *\n * Shared logic on client and server for creating a dynamic param value.\n *\n * This code needs to be shared with the client so it can extract dynamic route\n * params from the URL without a server request.\n *\n * Because everything in this module is sent to the client, we should aim to\n * keep this code as simple as possible. The special case handling for catchall\n * and optional is, alas, unfortunate.\n */\nexport function getDynamicParam(\n interpolatedParams: Params,\n segmentKey: string,\n dynamicParamType: DynamicParamTypesShort,\n fallbackRouteParams: OpaqueFallbackRouteParams | null,\n staticSiblings: readonly string[] | null\n): DynamicParam {\n let value: string | string[] | undefined = getParamValue(\n interpolatedParams,\n segmentKey,\n fallbackRouteParams\n )\n\n // handle the case where an optional catchall does not have a value,\n // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard`\n if (!value || value.length === 0) {\n if (dynamicParamType === 'oc') {\n return {\n param: segmentKey,\n value: null,\n type: dynamicParamType,\n treeSegment: [segmentKey, '', dynamicParamType, staticSiblings],\n }\n }\n\n throw new InvariantError(\n `Missing value for segment key: \"${segmentKey}\" with dynamic param type: ${dynamicParamType}`\n )\n }\n\n const paramCacheKey = Array.isArray(value) ? value.join('/') : value\n\n return {\n param: segmentKey,\n // The value that is passed to user code.\n value,\n // The value that is rendered in the router tree.\n // TODO: If the number of static siblings exceeds some threshold (e.g.,\n // dozens or hundreds), consider sending a Bloom filter instead of the full\n // array to reduce payload size. The client would then use the Bloom filter\n // to check membership with a small false positive rate.\n treeSegment: [segmentKey, paramCacheKey, dynamicParamType, staticSiblings],\n type: dynamicParamType,\n }\n}\n\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */\nexport const PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/\n\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[[...slug]]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[[foo]]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `[bar]` -> `{ key: 'bar', repeat: false, optional: false }`\n * - `fizz` -> `{ key: 'fizz', repeat: false, optional: false }`\n * @param param - The parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseParameter(param: string) {\n const match = param.match(PARAMETER_PATTERN)\n\n if (!match) {\n return parseMatchedParameter(param)\n }\n\n return parseMatchedParameter(match[2])\n}\n\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseMatchedParameter(param: string) {\n const optional = param.startsWith('[') && param.endsWith(']')\n if (optional) {\n param = param.slice(1, -1)\n }\n const repeat = param.startsWith('...')\n if (repeat) {\n param = param.slice(3)\n }\n return { key: param, repeat, optional }\n}\n"],"names":["InvariantError","parseLoaderTree","parseNormalizedAppRoute","parseAppRouteSegment","resolveParamValue","getParamValue","interpolatedParams","segmentKey","fallbackRouteParams","value","has","searchValue","get","Array","isArray","map","i","encodeURIComponent","interpolateParallelRouteParams","loaderTree","params","pagePath","interpolated","structuredClone","stack","tree","depth","route","length","pop","segment","parallelRoutes","appSegment","type","hasOwnProperty","param","paramName","paramType","paramValue","undefined","nextDepth","parallelRoute","Object","values","push","getDynamicParam","dynamicParamType","staticSiblings","treeSegment","paramCacheKey","join","PARAMETER_PATTERN","parseParameter","match","parseMatchedParameter","optional","startsWith","endsWith","slice","repeat","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 18624, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts"],"sourcesContent":["import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n"],"names":["normalizeLocalePath","removePathPrefix","pathHasPrefix","getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","locales","locale","detectedLocale"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,mCAAkC;AACtE,SAASC,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,aAAa,QAAQ,oBAAmB;;;;AAkD1C,SAASC,oBACdC,QAAgB,EAChBC,OAAgB;IAEhB,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGH,QAAQI,UAAU,IAAI,CAAC;IACjE,MAAMC,OAAyB;QAC7BN;QACAI,eAAeJ,aAAa,MAAMA,SAASO,QAAQ,CAAC,OAAOH;IAC7D;IAEA,IAAIF,gBAAYJ,iNAAAA,EAAcQ,KAAKN,QAAQ,EAAEE,WAAW;QACtDI,KAAKN,QAAQ,OAAGH,uNAAAA,EAAiBS,KAAKN,QAAQ,EAAEE;QAChDI,KAAKJ,QAAQ,GAAGA;IAClB;IACA,IAAIM,uBAAuBF,KAAKN,QAAQ;IAExC,IACEM,KAAKN,QAAQ,CAACS,UAAU,CAAC,mBACzBH,KAAKN,QAAQ,CAACO,QAAQ,CAAC,UACvB;QACA,MAAMG,QAAQJ,KAAKN,QAAQ,CACxBW,OAAO,CAAC,oBAAoB,IAC5BA,OAAO,CAAC,WAAW,IACnBC,KAAK,CAAC;QAET,MAAMC,UAAUH,KAAK,CAAC,EAAE;QACxBJ,KAAKO,OAAO,GAAGA;QACfL,uBACEE,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,MAAMI,KAAK,CAAC,GAAGC,IAAI,CAAC,MAAM,GAAG;QAE1D,sDAAsD;QACtD,kDAAkD;QAClD,IAAId,QAAQe,SAAS,KAAK,MAAM;YAC9BV,KAAKN,QAAQ,GAAGQ;QAClB;IACF;IAEA,4EAA4E;IAC5E,yBAAyB;IACzB,IAAIL,MAAM;QACR,IAAIc,SAAShB,QAAQiB,YAAY,GAC7BjB,QAAQiB,YAAY,CAACC,OAAO,CAACb,KAAKN,QAAQ,QAC1CJ,kNAAAA,EAAoBU,KAAKN,QAAQ,EAAEG,KAAKiB,OAAO;QAEnDd,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;QACnChB,KAAKN,QAAQ,GAAGiB,OAAOjB,QAAQ,IAAIM,KAAKN,QAAQ;QAEhD,IAAI,CAACiB,OAAOK,cAAc,IAAIhB,KAAKO,OAAO,EAAE;YAC1CI,SAAShB,QAAQiB,YAAY,GACzBjB,QAAQiB,YAAY,CAACC,OAAO,CAACX,4BAC7BZ,kNAAAA,EAAoBY,sBAAsBL,KAAKiB,OAAO;YAE1D,IAAIH,OAAOK,cAAc,EAAE;gBACzBhB,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;YACrC;QACF;IACF;IACA,OAAOhB;AACT","ignoreList":[0]}}, + {"offset": {"line": 18675, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/get-segment-param.tsx"],"sourcesContent":["import { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport type { DynamicParamTypes } from '../../app-router-types'\n\nexport type SegmentParam = {\n paramName: string\n paramType: DynamicParamTypes\n}\n\n/**\n * Parse dynamic route segment to type of parameter\n */\nexport function getSegmentParam(segment: string): SegmentParam | null {\n const interceptionMarker = INTERCEPTION_ROUTE_MARKERS.find((marker) =>\n segment.startsWith(marker)\n )\n\n // if an interception marker is part of the path segment, we need to jump ahead\n // to the relevant portion for param parsing\n if (interceptionMarker) {\n segment = segment.slice(interceptionMarker.length)\n }\n\n if (segment.startsWith('[[...') && segment.endsWith(']]')) {\n return {\n // TODO-APP: Optional catchall does not currently work with parallel routes,\n // so for now aren't handling a potential interception marker.\n paramType: 'optional-catchall',\n paramName: segment.slice(5, -2),\n }\n }\n\n if (segment.startsWith('[...') && segment.endsWith(']')) {\n return {\n paramType: interceptionMarker\n ? `catchall-intercepted-${interceptionMarker}`\n : 'catchall',\n paramName: segment.slice(4, -1),\n }\n }\n\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return {\n paramType: interceptionMarker\n ? `dynamic-intercepted-${interceptionMarker}`\n : 'dynamic',\n paramName: segment.slice(1, -1),\n }\n }\n\n return null\n}\n\nexport function isCatchAll(\n type: DynamicParamTypes\n): type is\n | 'catchall'\n | 'catchall-intercepted-(..)(..)'\n | 'catchall-intercepted-(.)'\n | 'catchall-intercepted-(..)'\n | 'catchall-intercepted-(...)'\n | 'optional-catchall' {\n return (\n type === 'catchall' ||\n type === 'catchall-intercepted-(..)(..)' ||\n type === 'catchall-intercepted-(.)' ||\n type === 'catchall-intercepted-(..)' ||\n type === 'catchall-intercepted-(...)' ||\n type === 'optional-catchall'\n )\n}\n\nexport function getParamProperties(paramType: DynamicParamTypes): {\n repeat: boolean\n optional: boolean\n} {\n let repeat = false\n let optional = false\n\n switch (paramType) {\n case 'catchall':\n case 'catchall-intercepted-(..)(..)':\n case 'catchall-intercepted-(.)':\n case 'catchall-intercepted-(..)':\n case 'catchall-intercepted-(...)':\n repeat = true\n break\n case 'optional-catchall':\n repeat = true\n optional = true\n break\n case 'dynamic':\n case 'dynamic-intercepted-(..)(..)':\n case 'dynamic-intercepted-(.)':\n case 'dynamic-intercepted-(..)':\n case 'dynamic-intercepted-(...)':\n break\n default:\n paramType satisfies never\n }\n\n return { repeat, optional }\n}\n"],"names":["INTERCEPTION_ROUTE_MARKERS","getSegmentParam","segment","interceptionMarker","find","marker","startsWith","slice","length","endsWith","paramType","paramName","isCatchAll","type","getParamProperties","repeat","optional"],"mappings":";;;;;;;;AAAA,SAASA,0BAA0B,QAAQ,wBAAuB;;AAW3D,SAASC,gBAAgBC,OAAe;IAC7C,MAAMC,qBAAqBH,+NAAAA,CAA2BI,IAAI,CAAC,CAACC,SAC1DH,QAAQI,UAAU,CAACD;IAGrB,+EAA+E;IAC/E,4CAA4C;IAC5C,IAAIF,oBAAoB;QACtBD,UAAUA,QAAQK,KAAK,CAACJ,mBAAmBK,MAAM;IACnD;IAEA,IAAIN,QAAQI,UAAU,CAAC,YAAYJ,QAAQO,QAAQ,CAAC,OAAO;QACzD,OAAO;YACL,4EAA4E;YAC5E,8DAA8D;YAC9DC,WAAW;YACXC,WAAWT,QAAQK,KAAK,CAAC,GAAG,CAAC;QAC/B;IACF;IAEA,IAAIL,QAAQI,UAAU,CAAC,WAAWJ,QAAQO,QAAQ,CAAC,MAAM;QACvD,OAAO;YACLC,WAAWP,qBACP,CAAC,qBAAqB,EAAEA,oBAAoB,GAC5C;YACJQ,WAAWT,QAAQK,KAAK,CAAC,GAAG,CAAC;QAC/B;IACF;IAEA,IAAIL,QAAQI,UAAU,CAAC,QAAQJ,QAAQO,QAAQ,CAAC,MAAM;QACpD,OAAO;YACLC,WAAWP,qBACP,CAAC,oBAAoB,EAAEA,oBAAoB,GAC3C;YACJQ,WAAWT,QAAQK,KAAK,CAAC,GAAG,CAAC;QAC/B;IACF;IAEA,OAAO;AACT;AAEO,SAASK,WACdC,IAAuB;IAQvB,OACEA,SAAS,cACTA,SAAS,mCACTA,SAAS,8BACTA,SAAS,+BACTA,SAAS,gCACTA,SAAS;AAEb;AAEO,SAASC,mBAAmBJ,SAA4B;IAI7D,IAAIK,SAAS;IACb,IAAIC,WAAW;IAEf,OAAQN;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACHK,SAAS;YACT;QACF,KAAK;YACHA,SAAS;YACTC,WAAW;YACX;QACF,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH;QACF;YACEN;IACJ;IAEA,OAAO;QAAEK;QAAQC;IAAS;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 18750, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/index.ts"],"sourcesContent":["export { getSortedRoutes, getSortedRouteObjects } from './sorted-routes'\nexport { isDynamicRoute } from './is-dynamic'\n"],"names":["getSortedRoutes","getSortedRouteObjects","isDynamicRoute"],"mappings":";AACA,SAASE,cAAc,QAAQ,eAAc","ignoreList":[0]}}, + {"offset": {"line": 18758, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/interception-prefix-from-param-type.ts"],"sourcesContent":["import type { DynamicParamTypes } from '../../app-router-types'\n\nexport function interceptionPrefixFromParamType(\n paramType: DynamicParamTypes\n): string | null {\n switch (paramType) {\n case 'catchall-intercepted-(..)(..)':\n case 'dynamic-intercepted-(..)(..)':\n return '(..)(..)'\n case 'catchall-intercepted-(.)':\n case 'dynamic-intercepted-(.)':\n return '(.)'\n case 'catchall-intercepted-(..)':\n case 'dynamic-intercepted-(..)':\n return '(..)'\n case 'catchall-intercepted-(...)':\n case 'dynamic-intercepted-(...)':\n return '(...)'\n case 'catchall':\n case 'dynamic':\n case 'optional-catchall':\n default:\n return null\n }\n}\n"],"names":["interceptionPrefixFromParamType","paramType"],"mappings":";;;;AAEO,SAASA,gCACdC,SAA4B;IAE5B,OAAQA;QACN,KAAK;QACL,KAAK;YACH,OAAO;QACT,KAAK;QACL,KAAK;YACH,OAAO;QACT,KAAK;QACL,KAAK;YACH,OAAO;QACT,KAAK;QACL,KAAK;YACH,OAAO;QACT,KAAK;QACL,KAAK;QACL,KAAK;QACL;YACE,OAAO;IACX;AACF","ignoreList":[0]}}, + {"offset": {"line": 18787, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/interception-routes.ts"],"sourcesContent":["import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport type InterceptionMarker = (typeof INTERCEPTION_ROUTE_MARKERS)[number]\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\ntype InterceptionRouteInformation = {\n /**\n * The intercepting route. This is the route that is being intercepted or the\n * route that the user was coming from. This is matched by the Next-Url\n * header.\n */\n interceptingRoute: string\n\n /**\n * The intercepted route. This is the route that is being intercepted or the\n * route that the user is going to. This is matched by the request pathname.\n */\n interceptedRoute: string\n}\n\nexport function extractInterceptionRouteInformation(\n path: string\n): InterceptionRouteInformation {\n let interceptingRoute: string | undefined\n let marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined\n let interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n"],"names":["normalizeAppPath","INTERCEPTION_ROUTE_MARKERS","isInterceptionRouteAppPath","path","split","find","segment","m","startsWith","undefined","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","Error","slice","concat","join","splitInterceptingRoute","length"],"mappings":";;;;;;;;AAAA,SAASA,gBAAgB,QAAQ,cAAa;;AAGvC,MAAMC,6BAA6B;IACxC;IACA;IACA;IACA;CACD,CAAS;AAIH,SAASC,2BAA2BC,IAAY;IACrD,wCAAwC;IACxC,OACEA,KACGC,KAAK,CAAC,KACNC,IAAI,CAAC,CAACC,UACLL,2BAA2BI,IAAI,CAAC,CAACE,IAAMD,QAAQE,UAAU,CAACD,SACtDE;AAEZ;AAiBO,SAASC,oCACdP,IAAY;IAEZ,IAAIQ;IACJ,IAAIC;IACJ,IAAIC;IAEJ,KAAK,MAAMP,WAAWH,KAAKC,KAAK,CAAC,KAAM;QACrCQ,SAASX,2BAA2BI,IAAI,CAAC,CAACE,IAAMD,QAAQE,UAAU,CAACD;QACnE,IAAIK,QAAQ;;YACT,CAACD,mBAAmBE,iBAAiB,GAAGV,KAAKC,KAAK,CAACQ,QAAQ;YAC5D;QACF;IACF;IAEA,IAAI,CAACD,qBAAqB,CAACC,UAAU,CAACC,kBAAkB;QACtD,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,CAAC,4BAA4B,EAAEX,KAAK,iFAAiF,CAAC,GADlH,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEAQ,wBAAoBX,2MAAAA,EAAiBW,mBAAmB,iDAAiD;;IAEzG,OAAQC;QACN,KAAK;YACH,oIAAoI;YACpI,IAAID,sBAAsB,KAAK;gBAC7BE,mBAAmB,CAAC,CAAC,EAAEA,kBAAkB;YAC3C,OAAO;gBACLA,mBAAmBF,oBAAoB,MAAME;YAC/C;YACA;QACF,KAAK;YACH,uHAAuH;YACvH,IAAIF,sBAAsB,KAAK;gBAC7B,MAAM,OAAA,cAEL,CAFK,IAAIG,MACR,CAAC,4BAA4B,EAAEX,KAAK,4DAA4D,CAAC,GAD7F,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YACAU,mBAAmBF,kBAChBP,KAAK,CAAC,KACNW,KAAK,CAAC,GAAG,CAAC,GACVC,MAAM,CAACH,kBACPI,IAAI,CAAC;YACR;QACF,KAAK;YACH,kIAAkI;YAClIJ,mBAAmB,MAAMA;YACzB;QACF,KAAK;YACH,iIAAiI;YAEjI,MAAMK,yBAAyBP,kBAAkBP,KAAK,CAAC;YACvD,IAAIc,uBAAuBC,MAAM,IAAI,GAAG;gBACtC,MAAM,OAAA,cAEL,CAFK,IAAIL,MACR,CAAC,4BAA4B,EAAEX,KAAK,+DAA+D,CAAC,GADhG,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YAEAU,mBAAmBK,uBAChBH,KAAK,CAAC,GAAG,CAAC,GACVC,MAAM,CAACH,kBACPI,IAAI,CAAC;YACR;QACF;YACE,MAAM,OAAA,cAAyC,CAAzC,IAAIH,MAAM,iCAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAAwC;IAClD;IAEA,OAAO;QAAEH;QAAmBE;IAAiB;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 18880, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/is-dynamic.ts"],"sourcesContent":["import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n"],"names":["extractInterceptionRouteInformation","isInterceptionRouteAppPath","TEST_ROUTE","TEST_STRICT_ROUTE","isDynamicRoute","route","strict","interceptedRoute","test"],"mappings":";;;;AAAA,SACEA,mCAAmC,EACnCC,0BAA0B,QACrB,wBAAuB;;AAE9B,yCAAyC;AACzC,MAAMC,aAAa;AAEnB,qCAAqC;AACrC,MAAMC,oBAAoB;AASnB,SAASC,eAAeC,KAAa,EAAEC,SAAkB,IAAI;IAClE,QAAIL,+NAAAA,EAA2BI,QAAQ;QACrCA,YAAQL,wOAAAA,EAAoCK,OAAOE,gBAAgB;IACrE;IAEA,IAAID,QAAQ;QACV,OAAOH,kBAAkBK,IAAI,CAACH;IAChC;IAEA,OAAOH,WAAWM,IAAI,CAACH;AACzB","ignoreList":[0]}}, + {"offset": {"line": 18903, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/parse-loader-tree.ts"],"sourcesContent":["import { DEFAULT_SEGMENT_KEY } from '../../segment'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\n\nexport function parseLoaderTree(tree: LoaderTree) {\n const [segment, parallelRoutes, modules, staticSiblings] = tree\n const { layout, template } = modules\n let { page } = modules\n // a __DEFAULT__ segment means that this route didn't match any of the\n // segments in the route, so we should use the default page\n page = segment === DEFAULT_SEGMENT_KEY ? modules.defaultPage : page\n\n const conventionPath = layout?.[1] || template?.[1] || page?.[1]\n\n return {\n page,\n segment,\n modules,\n /* it can be either layout / template / page */\n conventionPath,\n parallelRoutes,\n staticSiblings,\n }\n}\n"],"names":["DEFAULT_SEGMENT_KEY","parseLoaderTree","tree","segment","parallelRoutes","modules","staticSiblings","layout","template","page","defaultPage","conventionPath"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,gBAAe;;AAG5C,SAASC,gBAAgBC,IAAgB;IAC9C,MAAM,CAACC,SAASC,gBAAgBC,SAASC,eAAe,GAAGJ;IAC3D,MAAM,EAAEK,MAAM,EAAEC,QAAQ,EAAE,GAAGH;IAC7B,IAAI,EAAEI,IAAI,EAAE,GAAGJ;IACf,sEAAsE;IACtE,2DAA2D;IAC3DI,OAAON,YAAYH,sLAAAA,GAAsBK,QAAQK,WAAW,GAAGD;IAE/D,MAAME,iBAAiBJ,QAAQ,CAAC,EAAE,IAAIC,UAAU,CAAC,EAAE,IAAIC,MAAM,CAAC,EAAE;IAEhE,OAAO;QACLA;QACAN;QACAE;QACA,6CAA6C,GAC7CM;QACAP;QACAE;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 18930, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/parse-path.ts"],"sourcesContent":["/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n"],"names":["parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice"],"mappings":"AAAA;;;;CAIC,GACD;;;;AAAO,SAASA,UAAUC,IAAY;IACpC,MAAMC,YAAYD,KAAKE,OAAO,CAAC;IAC/B,MAAMC,aAAaH,KAAKE,OAAO,CAAC;IAChC,MAAME,WAAWD,aAAa,CAAC,KAAMF,CAAAA,YAAY,KAAKE,aAAaF,SAAQ;IAE3E,IAAIG,YAAYH,YAAY,CAAC,GAAG;QAC9B,OAAO;YACLI,UAAUL,KAAKM,SAAS,CAAC,GAAGF,WAAWD,aAAaF;YACpDM,OAAOH,WACHJ,KAAKM,SAAS,CAACH,YAAYF,YAAY,CAAC,IAAIA,YAAYO,aACxD;YACJC,MAAMR,YAAY,CAAC,IAAID,KAAKU,KAAK,CAACT,aAAa;QACjD;IACF;IAEA,OAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;IAAG;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 18959, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/parse-relative-url.ts"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\nimport { getLocationOrigin } from '../../utils'\nimport { searchParamsToUrlQuery } from './querystring'\n\nexport interface ParsedRelativeUrl {\n auth: string | null\n hash: string\n host: string | null\n hostname: string | null\n href: string\n pathname: string\n port: string | null\n protocol: string | null\n query: ParsedUrlQuery\n search: string\n slashes: null\n}\n\n/**\n * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative\n * (e.g. `./hello`) then at least base must be.\n * Absolute urls are rejected with one exception, in the browser, absolute urls that are on\n * the current origin will be parsed as relative\n */\nexport function parseRelativeUrl(\n url: string,\n base?: string,\n parseQuery?: true\n): ParsedRelativeUrl\nexport function parseRelativeUrl(\n url: string,\n base: string | undefined,\n parseQuery: false\n): Omit\nexport function parseRelativeUrl(\n url: string,\n base?: string,\n parseQuery = true\n): ParsedRelativeUrl | Omit {\n const globalBase = new URL(\n typeof window === 'undefined' ? 'http://n' : getLocationOrigin()\n )\n\n const resolvedBase = base\n ? new URL(base, globalBase)\n : url.startsWith('.')\n ? new URL(\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n : globalBase\n\n const { pathname, searchParams, search, hash, href, origin } = url.startsWith(\n '/'\n )\n ? // 'http://localhost:3000///' would be received as '///' in Node.js' IncomingMessage\n // See https://nodejs.org/api/http.html#messageurl\n // Not using `origin` to support other protocols\n new URL(`${resolvedBase.protocol}//${resolvedBase.host}${url}`)\n : new URL(url, resolvedBase)\n\n if (origin !== globalBase.origin) {\n throw new Error(`invariant: invalid relative URL, router received ${url}`)\n }\n\n return {\n auth: null,\n host: null,\n hostname: null,\n pathname,\n port: null,\n protocol: null,\n query: parseQuery ? searchParamsToUrlQuery(searchParams) : undefined,\n search,\n hash,\n href: href.slice(origin.length),\n // We don't know for relative URLs at this point since we set a custom, internal\n // base that isn't surfaced to users.\n slashes: null,\n }\n}\n"],"names":["getLocationOrigin","searchParamsToUrlQuery","parseRelativeUrl","url","base","parseQuery","globalBase","URL","window","resolvedBase","startsWith","location","href","pathname","searchParams","search","hash","origin","protocol","host","Error","auth","hostname","port","query","undefined","slice","length","slashes"],"mappings":";;;;AAEA,SAASC,sBAAsB,QAAQ,gBAAe;;;AAgC/C,SAASC,iBACdC,GAAW,EACXC,IAAa,EACbC,aAAa,IAAI;IAEjB,MAAMC,aAAa,IAAIC,IACrB,OAAOC,WAAW,qBAAc,aAAaR;IAG/C,MAAMS,eAAeL,OACjB,IAAIG,IAAIH,MAAME,cACdH,IAAIO,UAAU,CAAC,OACb,IAAIH,IACF,OAAOC,WAAW,qBAAc,aAAaA,OAAOG,QAAQ,CAACC,IAAI,OAEnEN;IAEN,MAAM,EAAEO,QAAQ,EAAEC,YAAY,EAAEC,MAAM,EAAEC,IAAI,EAAEJ,IAAI,EAAEK,MAAM,EAAE,GAAGd,IAAIO,UAAU,CAC3E,OAGE,AACA,gDAAgD,EADE;IAElD,IAAIH,IAAI,GAAGE,aAAaS,QAAQ,CAAC,EAAE,EAAET,aAAaU,IAAI,GAAGhB,KAAK,IAC9D,IAAII,IAAIJ,KAAKM;IAEjB,IAAIQ,WAAWX,WAAWW,MAAM,EAAE;QAChC,MAAM,OAAA,cAAoE,CAApE,IAAIG,MAAM,CAAC,iDAAiD,EAAEjB,KAAK,GAAnE,qBAAA;mBAAA;wBAAA;0BAAA;QAAmE;IAC3E;IAEA,OAAO;QACLkB,MAAM;QACNF,MAAM;QACNG,UAAU;QACVT;QACAU,MAAM;QACNL,UAAU;QACVM,OAAOnB,iBAAaJ,gNAAAA,EAAuBa,gBAAgBW;QAC3DV;QACAC;QACAJ,MAAMA,KAAKc,KAAK,CAACT,OAAOU,MAAM;QAC9B,gFAAgF;QAChF,qCAAqC;QACrCC,SAAS;IACX;AACF","ignoreList":[0]}}, + {"offset": {"line": 18998, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/parse-url.ts"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\n\nimport { searchParamsToUrlQuery } from './querystring'\nimport { parseRelativeUrl } from './parse-relative-url'\n\nexport interface ParsedUrl {\n auth: string | null\n hash: string\n hostname: string | null\n href: string\n origin?: string | null\n pathname: string\n port: string | null\n protocol: string | null\n query: ParsedUrlQuery\n search: string\n slashes: boolean | null\n}\n\nexport function parseUrl(url: string): ParsedUrl {\n if (url.startsWith('/')) {\n return parseRelativeUrl(url)\n }\n\n const parsedURL = new URL(url)\n const username = parsedURL.username\n const password = parsedURL.password\n const auth = username\n ? password\n ? `${username}:${password}`\n : username\n : null\n const pathname = parsedURL.pathname\n const search = parsedURL.search\n return {\n auth,\n hash: parsedURL.hash,\n hostname: parsedURL.hostname,\n href: parsedURL.href,\n pathname,\n port: parsedURL.port,\n protocol: parsedURL.protocol,\n query: searchParamsToUrlQuery(parsedURL.searchParams),\n search,\n origin: parsedURL.origin,\n slashes:\n parsedURL.href.slice(\n parsedURL.protocol.length,\n parsedURL.protocol.length + 2\n ) === '//',\n }\n}\n"],"names":["searchParamsToUrlQuery","parseRelativeUrl","parseUrl","url","startsWith","parsedURL","URL","username","password","auth","pathname","search","hash","hostname","href","port","protocol","query","searchParams","origin","slashes","slice","length"],"mappings":";;;;AAEA,SAASA,sBAAsB,QAAQ,gBAAe;AACtD,SAASC,gBAAgB,QAAQ,uBAAsB;;;AAgBhD,SAASC,SAASC,GAAW;IAClC,IAAIA,IAAIC,UAAU,CAAC,MAAM;QACvB,WAAOH,uNAAAA,EAAiBE;IAC1B;IAEA,MAAME,YAAY,IAAIC,IAAIH;IAC1B,MAAMI,WAAWF,UAAUE,QAAQ;IACnC,MAAMC,WAAWH,UAAUG,QAAQ;IACnC,MAAMC,OAAOF,WACTC,WACE,GAAGD,SAAS,CAAC,EAAEC,UAAU,GACzBD,WACF;IACJ,MAAMG,WAAWL,UAAUK,QAAQ;IACnC,MAAMC,SAASN,UAAUM,MAAM;IAC/B,OAAO;QACLF;QACAG,MAAMP,UAAUO,IAAI;QACpBC,UAAUR,UAAUQ,QAAQ;QAC5BC,MAAMT,UAAUS,IAAI;QACpBJ;QACAK,MAAMV,UAAUU,IAAI;QACpBC,UAAUX,UAAUW,QAAQ;QAC5BC,WAAOjB,gNAAAA,EAAuBK,UAAUa,YAAY;QACpDP;QACAQ,QAAQd,UAAUc,MAAM;QACxBC,SACEf,UAAUS,IAAI,CAACO,KAAK,CAClBhB,UAAUW,QAAQ,CAACM,MAAM,EACzBjB,UAAUW,QAAQ,CAACM,MAAM,GAAG,OACxB;IACV;AACF","ignoreList":[0]}}, + {"offset": {"line": 19034, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n"],"names":["parsePath","pathHasPrefix","path","prefix","pathname","startsWith"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AASjC,SAASC,cAAcC,IAAY,EAAEC,MAAc;IACxD,IAAI,OAAOD,SAAS,UAAU;QAC5B,OAAO;IACT;IAEA,MAAM,EAAEE,QAAQ,EAAE,OAAGJ,qMAAAA,EAAUE;IAC/B,OAAOE,aAAaD,UAAUC,SAASC,UAAU,CAACF,SAAS;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 19051, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/path-match.ts"],"sourcesContent":["import type { Key } from 'next/dist/compiled/path-to-regexp'\nimport { regexpToFunction } from 'next/dist/compiled/path-to-regexp'\nimport { pathToRegexp } from 'next/dist/compiled/path-to-regexp'\n\ninterface Options {\n /**\n * A transformer function that will be applied to the regexp generated\n * from the provided path and path-to-regexp.\n */\n regexModifier?: (regex: string) => string\n /**\n * When true the function will remove all unnamed parameters\n * from the matched parameters.\n */\n removeUnnamedParams?: boolean\n /**\n * When true the regexp won't allow an optional trailing delimiter\n * to match.\n */\n strict?: boolean\n\n /**\n * When true the matcher will be case-sensitive, defaults to false\n */\n sensitive?: boolean\n}\n\nexport type PatchMatcher = (\n pathname: string,\n params?: Record\n) => Record | false\n\n/**\n * Generates a path matcher function for a given path and options based on\n * path-to-regexp. By default the match will be case insensitive, non strict\n * and delimited by `/`.\n */\nexport function getPathMatch(path: string, options?: Options): PatchMatcher {\n const keys: Key[] = []\n const regexp = pathToRegexp(path, keys, {\n delimiter: '/',\n sensitive:\n typeof options?.sensitive === 'boolean' ? options.sensitive : false,\n strict: options?.strict,\n })\n\n const matcher = regexpToFunction>(\n options?.regexModifier\n ? new RegExp(options.regexModifier(regexp.source), regexp.flags)\n : regexp,\n keys\n )\n\n /**\n * A matcher function that will check if a given pathname matches the path\n * given in the builder function. When the path does not match it will return\n * `false` but if it does it will return an object with the matched params\n * merged with the params provided in the second argument.\n */\n return (pathname, params) => {\n // If no pathname is provided it's not a match.\n if (typeof pathname !== 'string') return false\n\n const match = matcher(pathname)\n\n // If the path did not match `false` will be returned.\n if (!match) return false\n\n /**\n * If unnamed params are not allowed they must be removed from\n * the matched parameters. path-to-regexp uses \"string\" for named and\n * \"number\" for unnamed parameters.\n */\n if (options?.removeUnnamedParams) {\n for (const key of keys) {\n if (typeof key.name === 'number') {\n delete match.params[key.name]\n }\n }\n }\n\n return { ...params, ...match.params }\n }\n}\n"],"names":["regexpToFunction","pathToRegexp","getPathMatch","path","options","keys","regexp","delimiter","sensitive","strict","matcher","regexModifier","RegExp","source","flags","pathname","params","match","removeUnnamedParams","key","name"],"mappings":";;;;AACA,SAASA,gBAAgB,QAAQ,oCAAmC;;;AAoC7D,SAASE,aAAaC,IAAY,EAAEC,OAAiB;IAC1D,MAAMC,OAAc,EAAE;IACtB,MAAMC,aAASL,yLAAAA,EAAaE,MAAME,MAAM;QACtCE,WAAW;QACXC,WACE,OAAOJ,SAASI,cAAc,YAAYJ,QAAQI,SAAS,GAAG;QAChEC,QAAQL,SAASK;IACnB;IAEA,MAAMC,cAAUV,6LAAAA,EACdI,SAASO,gBACL,IAAIC,OAAOR,QAAQO,aAAa,CAACL,OAAOO,MAAM,GAAGP,OAAOQ,KAAK,IAC7DR,QACJD;IAGF;;;;;GAKC,GACD,OAAO,CAACU,UAAUC;QAChB,+CAA+C;QAC/C,IAAI,OAAOD,aAAa,UAAU,OAAO;QAEzC,MAAME,QAAQP,QAAQK;QAEtB,sDAAsD;QACtD,IAAI,CAACE,OAAO,OAAO;QAEnB;;;;KAIC,GACD,IAAIb,SAASc,qBAAqB;YAChC,KAAK,MAAMC,OAAOd,KAAM;gBACtB,IAAI,OAAOc,IAAIC,IAAI,KAAK,UAAU;oBAChC,OAAOH,MAAMD,MAAM,CAACG,IAAIC,IAAI,CAAC;gBAC/B;YACF;QACF;QAEA,OAAO;YAAE,GAAGJ,MAAM;YAAE,GAAGC,MAAMD,MAAM;QAAC;IACtC;AACF","ignoreList":[0]}}, + {"offset": {"line": 19098, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/prepare-destination.ts"],"sourcesContent":["import type { IncomingMessage } from 'http'\nimport type { Key } from 'next/dist/compiled/path-to-regexp'\nimport type { NextParsedUrlQuery } from '../../../../server/request-meta'\nimport type { RouteHas } from '../../../../lib/load-custom-routes'\nimport type { BaseNextRequest } from '../../../../server/base-http'\n\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { parseUrl, type ParsedUrl } from './parse-url'\nimport {\n INTERCEPTION_ROUTE_MARKERS,\n isInterceptionRouteAppPath,\n} from './interception-routes'\nimport { getCookieParser } from '../../../../server/api-utils/get-cookie-parser'\nimport type { Params } from '../../../../server/request/params'\nimport { safePathToRegexp, safeCompile } from './route-match-utils'\n\n/**\n * Ensure only a-zA-Z are used for param names for proper interpolating\n * with path-to-regexp\n */\nfunction getSafeParamName(paramName: string) {\n let newParamName = ''\n\n for (let i = 0; i < paramName.length; i++) {\n const charCode = paramName.charCodeAt(i)\n\n if (\n (charCode > 64 && charCode < 91) || // A-Z\n (charCode > 96 && charCode < 123) // a-z\n ) {\n newParamName += paramName[i]\n }\n }\n return newParamName\n}\n\nfunction escapeSegment(str: string, segmentName: string) {\n return str.replace(\n new RegExp(`:${escapeStringRegexp(segmentName)}`, 'g'),\n `__ESC_COLON_${segmentName}`\n )\n}\n\nfunction unescapeSegments(str: string) {\n return str.replace(/__ESC_COLON_/gi, ':')\n}\n\nexport function matchHas(\n req: BaseNextRequest | IncomingMessage,\n query: Params,\n has: RouteHas[] = [],\n missing: RouteHas[] = []\n): false | Params {\n const params: Params = {}\n\n const hasMatch = (hasItem: RouteHas) => {\n let value\n let key = hasItem.key\n\n switch (hasItem.type) {\n case 'header': {\n key = key!.toLowerCase()\n value = req.headers[key] as string\n break\n }\n case 'cookie': {\n if ('cookies' in req) {\n value = req.cookies[hasItem.key]\n } else {\n const cookies = getCookieParser(req.headers)()\n value = cookies[hasItem.key]\n }\n\n break\n }\n case 'query': {\n value = query[key!]\n break\n }\n case 'host': {\n const { host } = req?.headers || {}\n // remove port from host if present\n const hostname = host?.split(':', 1)[0].toLowerCase()\n value = hostname\n break\n }\n default: {\n break\n }\n }\n\n if (!hasItem.value && value) {\n params[getSafeParamName(key!)] = value\n return true\n } else if (value) {\n const matcher = new RegExp(`^${hasItem.value}$`)\n const matches = Array.isArray(value)\n ? value.slice(-1)[0].match(matcher)\n : value.match(matcher)\n\n if (matches) {\n if (Array.isArray(matches)) {\n if (matches.groups) {\n Object.keys(matches.groups).forEach((groupKey) => {\n params[groupKey] = matches.groups![groupKey]\n })\n } else if (hasItem.type === 'host' && matches[0]) {\n params.host = matches[0]\n }\n }\n return true\n }\n }\n return false\n }\n\n const allMatch =\n has.every((item) => hasMatch(item)) &&\n !missing.some((item) => hasMatch(item))\n\n if (allMatch) {\n return params\n }\n return false\n}\n\nexport function compileNonPath(value: string, params: Params): string {\n if (!value.includes(':')) {\n return value\n }\n\n for (const key of Object.keys(params)) {\n if (value.includes(`:${key}`)) {\n value = value\n .replace(\n new RegExp(`:${key}\\\\*`, 'g'),\n `:${key}--ESCAPED_PARAM_ASTERISKS`\n )\n .replace(\n new RegExp(`:${key}\\\\?`, 'g'),\n `:${key}--ESCAPED_PARAM_QUESTION`\n )\n .replace(new RegExp(`:${key}\\\\+`, 'g'), `:${key}--ESCAPED_PARAM_PLUS`)\n .replace(\n new RegExp(`:${key}(?!\\\\w)`, 'g'),\n `--ESCAPED_PARAM_COLON${key}`\n )\n }\n }\n value = value\n .replace(/(:|\\*|\\?|\\+|\\(|\\)|\\{|\\})/g, '\\\\$1')\n .replace(/--ESCAPED_PARAM_PLUS/g, '+')\n .replace(/--ESCAPED_PARAM_COLON/g, ':')\n .replace(/--ESCAPED_PARAM_QUESTION/g, '?')\n .replace(/--ESCAPED_PARAM_ASTERISKS/g, '*')\n\n // the value needs to start with a forward-slash to be compiled\n // correctly\n return safeCompile(`/${value}`, { validate: false })(params).slice(1)\n}\n\nexport function parseDestination(args: {\n destination: string\n params: Readonly\n query: Readonly\n}): ParsedUrl {\n let escaped = args.destination\n for (const param of Object.keys({ ...args.params, ...args.query })) {\n if (!param) continue\n\n escaped = escapeSegment(escaped, param)\n }\n\n const parsed = parseUrl(escaped)\n\n let pathname = parsed.pathname\n if (pathname) {\n pathname = unescapeSegments(pathname)\n }\n\n let href = parsed.href\n if (href) {\n href = unescapeSegments(href)\n }\n\n let hostname = parsed.hostname\n if (hostname) {\n hostname = unescapeSegments(hostname)\n }\n\n let hash = parsed.hash\n if (hash) {\n hash = unescapeSegments(hash)\n }\n\n let search = parsed.search\n if (search) {\n search = unescapeSegments(search)\n }\n\n let origin = parsed.origin\n if (origin) {\n origin = unescapeSegments(origin)\n }\n\n return {\n ...parsed,\n pathname,\n hostname,\n href,\n hash,\n search,\n origin,\n }\n}\n\nexport function prepareDestination(args: {\n appendParamsToQuery: boolean\n destination: string\n params: Params\n query: NextParsedUrlQuery\n}) {\n const parsedDestination = parseDestination(args)\n\n const {\n hostname: destHostname,\n query: destQuery,\n search: destSearch,\n } = parsedDestination\n\n // The following code assumes that the pathname here includes the hash if it's\n // present.\n let destPath = parsedDestination.pathname\n if (parsedDestination.hash) {\n destPath = `${destPath}${parsedDestination.hash}`\n }\n\n const destParams: (string | number)[] = []\n\n const destPathParamKeys: Key[] = []\n safePathToRegexp(destPath, destPathParamKeys)\n for (const key of destPathParamKeys) {\n destParams.push(key.name)\n }\n\n if (destHostname) {\n const destHostnameParamKeys: Key[] = []\n safePathToRegexp(destHostname, destHostnameParamKeys)\n for (const key of destHostnameParamKeys) {\n destParams.push(key.name)\n }\n }\n\n const destPathCompiler = safeCompile(\n destPath,\n // we don't validate while compiling the destination since we should\n // have already validated before we got to this point and validating\n // breaks compiling destinations with named pattern params from the source\n // e.g. /something:hello(.*) -> /another/:hello is broken with validation\n // since compile validation is meant for reversing and not for inserting\n // params from a separate path-regex into another\n { validate: false }\n )\n\n let destHostnameCompiler\n if (destHostname) {\n destHostnameCompiler = safeCompile(destHostname, {\n validate: false,\n encode: encodeURIComponent,\n })\n }\n\n // update any params in query values\n for (const [key, strOrArray] of Object.entries(destQuery)) {\n // the value needs to start with a forward-slash to be compiled\n // correctly\n if (Array.isArray(strOrArray)) {\n destQuery[key] = strOrArray.map((value) =>\n compileNonPath(unescapeSegments(value), args.params)\n )\n } else if (typeof strOrArray === 'string') {\n destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params)\n }\n }\n\n // add path params to query if it's not a redirect and not\n // already defined in destination query or path\n let paramKeys = Object.keys(args.params).filter(\n (name) => name !== 'nextInternalLocale'\n )\n\n if (\n args.appendParamsToQuery &&\n !paramKeys.some((key) => destParams.includes(key))\n ) {\n for (const key of paramKeys) {\n if (!(key in destQuery)) {\n destQuery[key] = args.params[key]\n }\n }\n }\n\n let newUrl\n\n // The compiler also that the interception route marker is an unnamed param, hence '0',\n // so we need to add it to the params object.\n if (isInterceptionRouteAppPath(destPath)) {\n for (const segment of destPath.split('/')) {\n const marker = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n if (marker) {\n if (marker === '(..)(..)') {\n args.params['0'] = '(..)'\n args.params['1'] = '(..)'\n } else {\n args.params['0'] = marker\n }\n break\n }\n }\n }\n\n try {\n newUrl = destPathCompiler(args.params)\n\n const [pathname, hash] = newUrl.split('#', 2)\n if (destHostnameCompiler) {\n parsedDestination.hostname = destHostnameCompiler(args.params)\n }\n parsedDestination.pathname = pathname\n parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}`\n parsedDestination.search = destSearch\n ? compileNonPath(destSearch, args.params)\n : ''\n } catch (err: any) {\n if (err.message.match(/Expected .*? to not repeat, but got an array/)) {\n throw new Error(\n `To use a multi-match in the destination you must add \\`*\\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`\n )\n }\n throw err\n }\n\n // Query merge order lowest priority to highest\n // 1. initial URL query values\n // 2. path segment values\n // 3. destination specified query values\n parsedDestination.query = {\n ...args.query,\n ...parsedDestination.query,\n }\n\n return {\n newUrl,\n destQuery,\n parsedDestination,\n }\n}\n"],"names":["escapeStringRegexp","parseUrl","INTERCEPTION_ROUTE_MARKERS","isInterceptionRouteAppPath","getCookieParser","safePathToRegexp","safeCompile","getSafeParamName","paramName","newParamName","i","length","charCode","charCodeAt","escapeSegment","str","segmentName","replace","RegExp","unescapeSegments","matchHas","req","query","has","missing","params","hasMatch","hasItem","value","key","type","toLowerCase","headers","cookies","host","hostname","split","matcher","matches","Array","isArray","slice","match","groups","Object","keys","forEach","groupKey","allMatch","every","item","some","compileNonPath","includes","validate","parseDestination","args","escaped","destination","param","parsed","pathname","href","hash","search","origin","prepareDestination","parsedDestination","destHostname","destQuery","destSearch","destPath","destParams","destPathParamKeys","push","name","destHostnameParamKeys","destPathCompiler","destHostnameCompiler","encode","encodeURIComponent","strOrArray","entries","map","paramKeys","filter","appendParamsToQuery","newUrl","segment","marker","find","m","startsWith","err","message","Error"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 19377, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/querystring.ts"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\n\nexport function searchParamsToUrlQuery(\n searchParams: URLSearchParams\n): ParsedUrlQuery {\n const query: ParsedUrlQuery = {}\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key]\n if (typeof existing === 'undefined') {\n query[key] = value\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n query[key] = [existing, value]\n }\n }\n return query\n}\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (typeof param === 'string') {\n return param\n }\n\n if (\n (typeof param === 'number' && !isNaN(param)) ||\n typeof param === 'boolean'\n ) {\n return String(param)\n } else {\n return ''\n }\n}\n\nexport function urlQueryToSearchParams(query: ParsedUrlQuery): URLSearchParams {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, stringifyUrlQueryParam(item))\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value))\n }\n }\n return searchParams\n}\n\nexport function assign(\n target: URLSearchParams,\n ...searchParamsList: URLSearchParams[]\n): URLSearchParams {\n for (const searchParams of searchParamsList) {\n for (const key of searchParams.keys()) {\n target.delete(key)\n }\n\n for (const [key, value] of searchParams.entries()) {\n target.append(key, value)\n }\n }\n\n return target\n}\n"],"names":["searchParamsToUrlQuery","searchParams","query","key","value","entries","existing","Array","isArray","push","stringifyUrlQueryParam","param","isNaN","String","urlQueryToSearchParams","URLSearchParams","Object","item","append","set","assign","target","searchParamsList","keys","delete"],"mappings":";;;;;;;;AAEO,SAASA,uBACdC,YAA6B;IAE7B,MAAMC,QAAwB,CAAC;IAC/B,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIH,aAAaI,OAAO,GAAI;QACjD,MAAMC,WAAWJ,KAAK,CAACC,IAAI;QAC3B,IAAI,OAAOG,aAAa,aAAa;YACnCJ,KAAK,CAACC,IAAI,GAAGC;QACf,OAAO,IAAIG,MAAMC,OAAO,CAACF,WAAW;YAClCA,SAASG,IAAI,CAACL;QAChB,OAAO;YACLF,KAAK,CAACC,IAAI,GAAG;gBAACG;gBAAUF;aAAM;QAChC;IACF;IACA,OAAOF;AACT;AAEA,SAASQ,uBAAuBC,KAAc;IAC5C,IAAI,OAAOA,UAAU,UAAU;QAC7B,OAAOA;IACT;IAEA,IACG,OAAOA,UAAU,YAAY,CAACC,MAAMD,UACrC,OAAOA,UAAU,WACjB;QACA,OAAOE,OAAOF;IAChB,OAAO;QACL,OAAO;IACT;AACF;AAEO,SAASG,uBAAuBZ,KAAqB;IAC1D,MAAMD,eAAe,IAAIc;IACzB,KAAK,MAAM,CAACZ,KAAKC,MAAM,IAAIY,OAAOX,OAAO,CAACH,OAAQ;QAChD,IAAIK,MAAMC,OAAO,CAACJ,QAAQ;YACxB,KAAK,MAAMa,QAAQb,MAAO;gBACxBH,aAAaiB,MAAM,CAACf,KAAKO,uBAAuBO;YAClD;QACF,OAAO;YACLhB,aAAakB,GAAG,CAAChB,KAAKO,uBAAuBN;QAC/C;IACF;IACA,OAAOH;AACT;AAEO,SAASmB,OACdC,MAAuB,EACvB,GAAGC,gBAAmC;IAEtC,KAAK,MAAMrB,gBAAgBqB,iBAAkB;QAC3C,KAAK,MAAMnB,OAAOF,aAAasB,IAAI,GAAI;YACrCF,OAAOG,MAAM,CAACrB;QAChB;QAEA,KAAK,MAAM,CAACA,KAAKC,MAAM,IAAIH,aAAaI,OAAO,GAAI;YACjDgB,OAAOH,MAAM,CAACf,KAAKC;QACrB;IACF;IAEA,OAAOiB;AACT","ignoreList":[0]}}, + {"offset": {"line": 19440, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/relativize-url.ts"],"sourcesContent":["/**\n * The result of parsing a URL relative to a base URL.\n */\nexport type RelativeURL = {\n /**\n * The relative URL. Either a URL including the origin or a relative URL.\n */\n url: string\n\n /**\n * Whether the URL is relative to the base URL.\n */\n isRelative: boolean\n}\n\nexport function parseRelativeURL(\n url: string | URL,\n base: string | URL\n): RelativeURL {\n const baseURL = typeof base === 'string' ? new URL(base) : base\n const relative = new URL(url, base)\n\n // The URL is relative if the origin is the same as the base URL.\n const isRelative = relative.origin === baseURL.origin\n\n return {\n url: isRelative\n ? relative.toString().slice(baseURL.origin.length)\n : relative.toString(),\n isRelative,\n }\n}\n\n/**\n * Given a URL as a string and a base URL it will make the URL relative\n * if the parsed protocol and host is the same as the one in the base\n * URL. Otherwise it returns the same URL string.\n */\nexport function getRelativeURL(url: string | URL, base: string | URL): string {\n const relative = parseRelativeURL(url, base)\n return relative.url\n}\n"],"names":["parseRelativeURL","url","base","baseURL","URL","relative","isRelative","origin","toString","slice","length","getRelativeURL"],"mappings":"AAAA;;CAEC,GAaD;;;;;;AAAO,SAASA,iBACdC,GAAiB,EACjBC,IAAkB;IAElB,MAAMC,UAAU,OAAOD,SAAS,WAAW,IAAIE,IAAIF,QAAQA;IAC3D,MAAMG,WAAW,IAAID,IAAIH,KAAKC;IAE9B,iEAAiE;IACjE,MAAMI,aAAaD,SAASE,MAAM,KAAKJ,QAAQI,MAAM;IAErD,OAAO;QACLN,KAAKK,aACDD,SAASG,QAAQ,GAAGC,KAAK,CAACN,QAAQI,MAAM,CAACG,MAAM,IAC/CL,SAASG,QAAQ;QACrBF;IACF;AACF;AAOO,SAASK,eAAeV,GAAiB,EAAEC,IAAkB;IAClE,MAAMG,WAAWL,iBAAiBC,KAAKC;IACvC,OAAOG,SAASJ,GAAG;AACrB","ignoreList":[0]}}, + {"offset": {"line": 19466, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts"],"sourcesContent":["import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n"],"names":["pathHasPrefix","removePathPrefix","path","prefix","withoutPrefix","slice","length","startsWith"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;;AAU1C,SAASC,iBAAiBC,IAAY,EAAEC,MAAc;IAC3D,yEAAyE;IACzE,0EAA0E;IAC1E,kBAAkB;IAClB,EAAE;IACF,oBAAoB;IACpB,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,IAAI,KAACH,iNAAAA,EAAcE,MAAMC,SAAS;QAChC,OAAOD;IACT;IAEA,+CAA+C;IAC/C,MAAME,gBAAgBF,KAAKG,KAAK,CAACF,OAAOG,MAAM;IAE9C,2EAA2E;IAC3E,IAAIF,cAAcG,UAAU,CAAC,MAAM;QACjC,OAAOH;IACT;IAEA,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,CAAC,CAAC,EAAEA,eAAe;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 19502, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts"],"sourcesContent":["/**\n * Removes the trailing slash for a given route or page path. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n *\n * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of\n * compiling and executing a RegExp on every call (~3-5x faster).\n */\nexport function removeTrailingSlash(route: string) {\n return route.charCodeAt(route.length - 1) === 47 && route.length > 1\n ? route.slice(0, -1)\n : route\n}\n"],"names":["removeTrailingSlash","route","charCodeAt","length","slice"],"mappings":"AAAA;;;;;;;CAOC,GACD;;;;AAAO,SAASA,oBAAoBC,KAAa;IAC/C,OAAOA,MAAMC,UAAU,CAACD,MAAME,MAAM,GAAG,OAAO,MAAMF,MAAME,MAAM,GAAG,IAC/DF,MAAMG,KAAK,CAAC,GAAG,CAAC,KAChBH;AACN","ignoreList":[0]}}, + {"offset": {"line": 19520, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/resolve-param-value.ts"],"sourcesContent":["import type { Params } from '../../../../server/request/params'\nimport type { DynamicParamTypes } from '../../app-router-types'\nimport { InvariantError } from '../../invariant-error'\nimport type {\n NormalizedAppRoute,\n NormalizedAppRouteSegment,\n} from '../routes/app'\nimport { interceptionPrefixFromParamType } from './interception-prefix-from-param-type'\n\n/**\n * Extracts the param value from a path segment, handling interception markers\n * based on the expected param type.\n *\n * @param pathSegment - The path segment to extract the value from\n * @param params - The current params object for resolving dynamic param references\n * @param paramType - The expected param type which may include interception marker info\n * @returns The extracted param value\n */\nfunction getParamValueFromSegment(\n pathSegment: NormalizedAppRouteSegment,\n params: Params,\n paramType: DynamicParamTypes\n): string {\n // If the segment is dynamic, resolve it from the params object\n if (pathSegment.type === 'dynamic') {\n return params[pathSegment.param.paramName] as string\n }\n\n // If the paramType indicates this is an intercepted param, strip the marker\n // that matches the interception marker in the param type\n const interceptionPrefix = interceptionPrefixFromParamType(paramType)\n if (interceptionPrefix === pathSegment.interceptionMarker) {\n return pathSegment.name.replace(pathSegment.interceptionMarker, '')\n }\n\n // For static segments, use the name\n return pathSegment.name\n}\n\n/**\n * Resolves a route parameter value from the route segments at the given depth.\n * This shared logic is used by both extractPathnameRouteParamSegmentsFromLoaderTree\n * and resolveRouteParamsFromTree.\n *\n * @param paramName - The parameter name to resolve\n * @param paramType - The parameter type (dynamic, catchall, etc.)\n * @param depth - The current depth in the route tree\n * @param route - The normalized route containing segments\n * @param params - The current params object (used to resolve embedded param references)\n * @param options - Configuration options\n * @returns The resolved parameter value, or undefined if it cannot be resolved\n */\nexport function resolveParamValue(\n paramName: string,\n paramType: DynamicParamTypes,\n depth: number,\n route: NormalizedAppRoute,\n params: Params\n): string | string[] | undefined {\n switch (paramType) {\n case 'catchall':\n case 'optional-catchall':\n case 'catchall-intercepted-(..)(..)':\n case 'catchall-intercepted-(.)':\n case 'catchall-intercepted-(..)':\n case 'catchall-intercepted-(...)':\n // For catchall routes, derive from pathname using depth to determine\n // which segments to use\n const processedSegments: string[] = []\n\n // Process segments to handle any embedded dynamic params\n for (let index = depth; index < route.segments.length; index++) {\n const pathSegment = route.segments[index]\n\n if (pathSegment.type === 'static') {\n let value = pathSegment.name\n\n // For intercepted catch-all params, strip the marker from the first segment\n const interceptionPrefix = interceptionPrefixFromParamType(paramType)\n if (\n interceptionPrefix &&\n index === depth &&\n interceptionPrefix === pathSegment.interceptionMarker\n ) {\n // Strip the interception marker from the value\n value = value.replace(pathSegment.interceptionMarker, '')\n }\n\n processedSegments.push(value)\n } else {\n // If the segment is a param placeholder, check if we have its value\n if (!params.hasOwnProperty(pathSegment.param.paramName)) {\n // If the segment is an optional catchall, we can break out of the\n // loop because it's optional!\n if (pathSegment.param.paramType === 'optional-catchall') {\n break\n }\n\n // Unknown param placeholder in pathname - can't derive full value\n return undefined\n }\n\n // If the segment matches a param, use the param value\n // We don't encode values here as that's handled during retrieval.\n const paramValue = params[pathSegment.param.paramName]\n if (Array.isArray(paramValue)) {\n processedSegments.push(...paramValue)\n } else {\n processedSegments.push(paramValue as string)\n }\n }\n }\n\n if (processedSegments.length > 0) {\n return processedSegments\n } else if (paramType === 'optional-catchall') {\n return undefined\n } else {\n // We shouldn't be able to match a catchall segment without any path\n // segments if it's not an optional catchall\n throw new InvariantError(\n `Unexpected empty path segments match for a route \"${route.pathname}\" with param \"${paramName}\" of type \"${paramType}\"`\n )\n }\n case 'dynamic':\n case 'dynamic-intercepted-(..)(..)':\n case 'dynamic-intercepted-(.)':\n case 'dynamic-intercepted-(..)':\n case 'dynamic-intercepted-(...)':\n // For regular dynamic parameters, take the segment at this depth\n if (depth < route.segments.length) {\n const pathSegment = route.segments[depth]\n\n // Check if the segment at this depth is a placeholder for an unknown param\n if (\n pathSegment.type === 'dynamic' &&\n !params.hasOwnProperty(pathSegment.param.paramName)\n ) {\n // The segment is a placeholder like [category] and we don't have the value\n return undefined\n }\n\n // If the segment matches a param, use the param value from params object\n // Otherwise it's a static segment, just use it directly\n // We don't encode values here as that's handled during retrieval\n return getParamValueFromSegment(pathSegment, params, paramType)\n }\n\n return undefined\n\n default:\n paramType satisfies never\n }\n}\n"],"names":["InvariantError","interceptionPrefixFromParamType","getParamValueFromSegment","pathSegment","params","paramType","type","param","paramName","interceptionPrefix","interceptionMarker","name","replace","resolveParamValue","depth","route","processedSegments","index","segments","length","value","push","hasOwnProperty","undefined","paramValue","Array","isArray","pathname"],"mappings":";;;;AAEA,SAASA,cAAc,QAAQ,wBAAuB;AAKtD,SAASC,+BAA+B,QAAQ,wCAAuC;;;AAEvF;;;;;;;;CAQC,GACD,SAASC,yBACPC,WAAsC,EACtCC,MAAc,EACdC,SAA4B;IAE5B,+DAA+D;IAC/D,IAAIF,YAAYG,IAAI,KAAK,WAAW;QAClC,OAAOF,MAAM,CAACD,YAAYI,KAAK,CAACC,SAAS,CAAC;IAC5C;IAEA,4EAA4E;IAC5E,yDAAyD;IACzD,MAAMC,yBAAqBR,6PAAAA,EAAgCI;IAC3D,IAAII,uBAAuBN,YAAYO,kBAAkB,EAAE;QACzD,OAAOP,YAAYQ,IAAI,CAACC,OAAO,CAACT,YAAYO,kBAAkB,EAAE;IAClE;IAEA,oCAAoC;IACpC,OAAOP,YAAYQ,IAAI;AACzB;AAeO,SAASE,kBACdL,SAAiB,EACjBH,SAA4B,EAC5BS,KAAa,EACbC,KAAyB,EACzBX,MAAc;IAEd,OAAQC;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,qEAAqE;YACrE,wBAAwB;YACxB,MAAMW,oBAA8B,EAAE;YAEtC,yDAAyD;YACzD,IAAK,IAAIC,QAAQH,OAAOG,QAAQF,MAAMG,QAAQ,CAACC,MAAM,EAAEF,QAAS;gBAC9D,MAAMd,cAAcY,MAAMG,QAAQ,CAACD,MAAM;gBAEzC,IAAId,YAAYG,IAAI,KAAK,UAAU;oBACjC,IAAIc,QAAQjB,YAAYQ,IAAI;oBAE5B,4EAA4E;oBAC5E,MAAMF,yBAAqBR,6PAAAA,EAAgCI;oBAC3D,IACEI,sBACAQ,UAAUH,SACVL,uBAAuBN,YAAYO,kBAAkB,EACrD;wBACA,+CAA+C;wBAC/CU,QAAQA,MAAMR,OAAO,CAACT,YAAYO,kBAAkB,EAAE;oBACxD;oBAEAM,kBAAkBK,IAAI,CAACD;gBACzB,OAAO;oBACL,oEAAoE;oBACpE,IAAI,CAAChB,OAAOkB,cAAc,CAACnB,YAAYI,KAAK,CAACC,SAAS,GAAG;wBACvD,kEAAkE;wBAClE,8BAA8B;wBAC9B,IAAIL,YAAYI,KAAK,CAACF,SAAS,KAAK,qBAAqB;4BACvD;wBACF;wBAEA,kEAAkE;wBAClE,OAAOkB;oBACT;oBAEA,sDAAsD;oBACtD,kEAAkE;oBAClE,MAAMC,aAAapB,MAAM,CAACD,YAAYI,KAAK,CAACC,SAAS,CAAC;oBACtD,IAAIiB,MAAMC,OAAO,CAACF,aAAa;wBAC7BR,kBAAkBK,IAAI,IAAIG;oBAC5B,OAAO;wBACLR,kBAAkBK,IAAI,CAACG;oBACzB;gBACF;YACF;YAEA,IAAIR,kBAAkBG,MAAM,GAAG,GAAG;gBAChC,OAAOH;YACT,OAAO,IAAIX,cAAc,qBAAqB;gBAC5C,OAAOkB;YACT,OAAO;gBACL,oEAAoE;gBACpE,4CAA4C;gBAC5C,MAAM,OAAA,cAEL,CAFK,IAAIvB,4LAAAA,CACR,CAAC,kDAAkD,EAAEe,MAAMY,QAAQ,CAAC,cAAc,EAAEnB,UAAU,WAAW,EAAEH,UAAU,CAAC,CAAC,GADnH,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;QACF,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,iEAAiE;YACjE,IAAIS,QAAQC,MAAMG,QAAQ,CAACC,MAAM,EAAE;gBACjC,MAAMhB,cAAcY,MAAMG,QAAQ,CAACJ,MAAM;gBAEzC,2EAA2E;gBAC3E,IACEX,YAAYG,IAAI,KAAK,aACrB,CAACF,OAAOkB,cAAc,CAACnB,YAAYI,KAAK,CAACC,SAAS,GAClD;oBACA,2EAA2E;oBAC3E,OAAOe;gBACT;gBAEA,yEAAyE;gBACzE,wDAAwD;gBACxD,iEAAiE;gBACjE,OAAOrB,yBAAyBC,aAAaC,QAAQC;YACvD;YAEA,OAAOkB;QAET;YACElB;IACJ;AACF","ignoreList":[0]}}, + {"offset": {"line": 19634, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/route-match-utils.ts"],"sourcesContent":["/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\n */\n\nimport type {\n Key,\n TokensToRegexpOptions,\n ParseOptions,\n TokensToFunctionOptions,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n pathToRegexp,\n compile,\n regexpToFunction,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n hasAdjacentParameterIssues,\n normalizeAdjacentParameters,\n stripParameterSeparators,\n stripNormalizedSeparators,\n} from '../../../../lib/route-pattern-normalizer'\n\n/**\n * Client-safe wrapper around pathToRegexp that handles path-to-regexp 6.3.0+ validation errors.\n * This includes both \"Can not repeat without prefix/suffix\" and \"Must have text between parameters\" errors.\n */\nexport function safePathToRegexp(\n route: string | RegExp | Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n if (typeof route !== 'string') {\n return pathToRegexp(route, keys, options)\n }\n\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return pathToRegexp(routeToUse, keys, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return pathToRegexp(normalizedRoute, keys, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around compile that handles path-to-regexp 6.3.0+ validation errors.\n * No server-side error reporting to avoid bundling issues.\n * When normalization is applied, the returned compiler function automatically strips\n * the internal separator from the output URL.\n */\nexport function safeCompile(\n route: string,\n options?: TokensToFunctionOptions & ParseOptions\n) {\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n const compiler = compile(routeToUse, options)\n\n // If we normalized the route, wrap the compiler to strip separators from output\n // The normalization inserts _NEXTSEP_ as a literal string in the pattern to satisfy\n // path-to-regexp validation, but we don't want it in the final compiled URL\n if (needsNormalization) {\n return (params: any) => {\n return stripNormalizedSeparators(compiler(params))\n }\n }\n\n return compiler\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n const compiler = compile(normalizedRoute, options)\n\n // Wrap the compiler to strip separators from output\n return (params: any) => {\n return stripNormalizedSeparators(compiler(params))\n }\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around regexpToFunction that automatically cleans parameters.\n */\nexport function safeRegexpToFunction<\n T extends Record = Record,\n>(regexp: RegExp, keys?: Key[]): (pathname: string) => { params: T } | false {\n const originalMatcher = regexpToFunction(regexp, keys || [])\n\n return (pathname: string) => {\n const result = originalMatcher(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return {\n ...result,\n params: stripParameterSeparators(result.params as any) as T,\n }\n }\n}\n\n/**\n * Safe wrapper for route matcher functions that automatically cleans parameters.\n * This is client-safe and doesn't import path-to-regexp.\n */\nexport function safeRouteMatcher>(\n matcherFn: (pathname: string) => false | T\n): (pathname: string) => false | T {\n return (pathname: string) => {\n const result = matcherFn(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return stripParameterSeparators(result) as T\n }\n}\n"],"names":["pathToRegexp","compile","regexpToFunction","hasAdjacentParameterIssues","normalizeAdjacentParameters","stripParameterSeparators","stripNormalizedSeparators","safePathToRegexp","route","keys","options","needsNormalization","routeToUse","error","normalizedRoute","retryError","safeCompile","compiler","params","safeRegexpToFunction","regexp","originalMatcher","pathname","result","safeRouteMatcher","matcherFn"],"mappings":";;;;;;;;;;AAAA;;;CAGC,GAQD,SACEA,YAAY,EACZC,OAAO,EACPC,gBAAgB,QACX,oCAAmC;AAC1C,SACEC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,yBAAyB,QACpB,2CAA0C;;;AAM1C,SAASC,iBACdC,KAA+C,EAC/CC,IAAY,EACZC,OAA8C;IAE9C,IAAI,OAAOF,UAAU,UAAU;QAC7B,WAAOR,yLAAAA,EAAaQ,OAAOC,MAAMC;IACnC;IAEA,wDAAwD;IACxD,MAAMC,yBAAqBR,0MAAAA,EAA2BK;IACtD,MAAMI,aAAaD,yBACfP,2MAAAA,EAA4BI,SAC5BA;IAEJ,IAAI;QACF,WAAOR,yLAAAA,EAAaY,YAAYH,MAAMC;IACxC,EAAE,OAAOG,OAAO;QACd,0DAA0D;QAC1D,IAAI,CAACF,oBAAoB;YACvB,IAAI;gBACF,MAAMG,sBAAkBV,2MAAAA,EAA4BI;gBACpD,WAAOR,yLAAAA,EAAac,iBAAiBL,MAAMC;YAC7C,EAAE,OAAOK,YAAY;gBACnB,oDAAoD;gBACpD,MAAMF;YACR;QACF;QACA,MAAMA;IACR;AACF;AAQO,SAASG,YACdR,KAAa,EACbE,OAAgD;IAEhD,wDAAwD;IACxD,MAAMC,yBAAqBR,0MAAAA,EAA2BK;IACtD,MAAMI,aAAaD,yBACfP,2MAAAA,EAA4BI,SAC5BA;IAEJ,IAAI;QACF,MAAMS,eAAWhB,oLAAAA,EAAQW,YAAYF;QAErC,gFAAgF;QAChF,oFAAoF;QACpF,4EAA4E;QAC5E,IAAIC,oBAAoB;YACtB,OAAO,CAACO;gBACN,WAAOZ,yMAAAA,EAA0BW,SAASC;YAC5C;QACF;QAEA,OAAOD;IACT,EAAE,OAAOJ,OAAO;QACd,0DAA0D;QAC1D,IAAI,CAACF,oBAAoB;YACvB,IAAI;gBACF,MAAMG,sBAAkBV,2MAAAA,EAA4BI;gBACpD,MAAMS,eAAWhB,oLAAAA,EAAQa,iBAAiBJ;gBAE1C,oDAAoD;gBACpD,OAAO,CAACQ;oBACN,WAAOZ,yMAAAA,EAA0BW,SAASC;gBAC5C;YACF,EAAE,OAAOH,YAAY;gBACnB,oDAAoD;gBACpD,MAAMF;YACR;QACF;QACA,MAAMA;IACR;AACF;AAKO,SAASM,qBAEdC,MAAc,EAAEX,IAAY;IAC5B,MAAMY,sBAAkBnB,6LAAAA,EAAoBkB,QAAQX,QAAQ,EAAE;IAE9D,OAAO,CAACa;QACN,MAAMC,SAASF,gBAAgBC;QAC/B,IAAI,CAACC,QAAQ,OAAO;QAEpB,oCAAoC;QACpC,OAAO;YACL,GAAGA,MAAM;YACTL,YAAQb,wMAAAA,EAAyBkB,OAAOL,MAAM;QAChD;IACF;AACF;AAMO,SAASM,iBACdC,SAA0C;IAE1C,OAAO,CAACH;QACN,MAAMC,SAASE,UAAUH;QACzB,IAAI,CAACC,QAAQ,OAAO;QAEpB,oCAAoC;QACpC,WAAOlB,wMAAAA,EAAyBkB;IAClC;AACF","ignoreList":[0]}}, + {"offset": {"line": 19731, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/route-matcher.ts"],"sourcesContent":["import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\nimport { safeRouteMatcher } from './route-match-utils'\n\nexport interface RouteMatchFn {\n (pathname: string): false | Params\n}\n\ntype RouteMatcherOptions = {\n // We only use the exec method of the RegExp object. This helps us avoid using\n // type assertions that the passed in properties are of the correct type.\n re: Pick\n groups: Record\n}\n\nexport function getRouteMatcher({\n re,\n groups,\n}: RouteMatcherOptions): RouteMatchFn {\n const rawMatcher = (pathname: string) => {\n const routeMatch = re.exec(pathname)\n if (!routeMatch) return false\n\n const decode = (param: string) => {\n try {\n return decodeURIComponent(param)\n } catch {\n throw new DecodeError('failed to decode param')\n }\n }\n\n const params: Params = {}\n for (const [key, group] of Object.entries(groups)) {\n const match = routeMatch[group.pos]\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry) => decode(entry))\n } else {\n params[key] = decode(match)\n }\n }\n }\n\n return params\n }\n\n // Wrap with safe matcher to handle parameter cleaning\n return safeRouteMatcher(rawMatcher)\n}\n"],"names":["DecodeError","safeRouteMatcher","getRouteMatcher","re","groups","rawMatcher","pathname","routeMatch","exec","decode","param","decodeURIComponent","params","key","group","Object","entries","match","pos","undefined","repeat","split","map","entry"],"mappings":";;;;AACA,SAASA,WAAW,QAAQ,cAAa;AAEzC,SAASC,gBAAgB,QAAQ,sBAAqB;;;AAa/C,SAASC,gBAAgB,EAC9BC,EAAE,EACFC,MAAM,EACc;IACpB,MAAMC,aAAa,CAACC;QAClB,MAAMC,aAAaJ,GAAGK,IAAI,CAACF;QAC3B,IAAI,CAACC,YAAY,OAAO;QAExB,MAAME,SAAS,CAACC;YACd,IAAI;gBACF,OAAOC,mBAAmBD;YAC5B,EAAE,OAAM;gBACN,MAAM,OAAA,cAAyC,CAAzC,IAAIV,4KAAAA,CAAY,2BAAhB,qBAAA;2BAAA;gCAAA;kCAAA;gBAAwC;YAChD;QACF;QAEA,MAAMY,SAAiB,CAAC;QACxB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACZ,QAAS;YACjD,MAAMa,QAAQV,UAAU,CAACO,MAAMI,GAAG,CAAC;YACnC,IAAID,UAAUE,WAAW;gBACvB,IAAIL,MAAMM,MAAM,EAAE;oBAChBR,MAAM,CAACC,IAAI,GAAGI,MAAMI,KAAK,CAAC,KAAKC,GAAG,CAAC,CAACC,QAAUd,OAAOc;gBACvD,OAAO;oBACLX,MAAM,CAACC,IAAI,GAAGJ,OAAOQ;gBACvB;YACF;QACF;QAEA,OAAOL;IACT;IAEA,sDAAsD;IACtD,WAAOX,sNAAAA,EAAiBI;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 19774, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/route-regex.ts"],"sourcesContent":["import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { PARAMETER_PATTERN, parseMatchedParameter } from './get-dynamic-param'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\nexport type RegexReference = {\n names: Record\n intercepted: Record\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n\n /**\n * If provided, this will be used as the reference for the dynamic parameter\n * keys instead of generating them in context. This is currently only used for\n * interception routes.\n */\n reference?: RegexReference\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return {\n key,\n pattern: optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`,\n cleanedKey: cleanedKey,\n optional,\n repeat,\n }\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean,\n reference: RegexReference = { names: {}, intercepted: {} }\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n const inverseParts: string[] = []\n\n // Ensure we don't mutate the original reference object.\n reference = structuredClone(reference)\n\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n const interceptionMarker = hasInterceptionMarker\n ? paramMatches?.[1]\n : undefined\n\n let keyPrefix: string | undefined\n if (interceptionMarker && paramMatches?.[2]) {\n keyPrefix = prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n reference.intercepted[paramMatches[2]] = interceptionMarker\n } else if (paramMatches?.[2] && reference.intercepted[paramMatches[2]]) {\n keyPrefix = prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n } else {\n keyPrefix = prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n }\n\n if (interceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n const { key, pattern, cleanedKey, repeat, optional } =\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n })\n\n segments.push(pattern)\n inverseParts.push(\n `/${paramMatches[1]}:${reference.names[key] ?? cleanedKey}${repeat ? (optional ? '*' : '+') : ''}`\n )\n reference.names[key] ??= cleanedKey\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n inverseParts.push(`/${paramMatches[1]}`)\n }\n\n const { key, pattern, cleanedKey, repeat, optional } =\n getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n let s = pattern\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n inverseParts.push(\n `/:${reference.names[key] ?? cleanedKey}${repeat ? (optional ? '*' : '+') : ''}`\n )\n reference.names[key] ??= cleanedKey\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n inverseParts.push(`/${segment}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n inverseParts.push(paramMatches[3])\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n pathToRegexpPattern: inverseParts.join(''),\n reference,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false,\n options.reference\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n pathToRegexpPattern: result.pathToRegexpPattern,\n reference: result.reference,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false,\n undefined\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","INTERCEPTION_ROUTE_MARKERS","escapeStringRegexp","removeTrailingSlash","PARAMETER_PATTERN","parseMatchedParameter","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","slice","split","markerMatch","find","m","startsWith","paramMatches","match","key","optional","repeat","pos","push","s","substring","parameterizedRoute","join","getRouteRegex","normalizedRoute","excludeOptionalTrailingSlash","re","RegExp","buildGetSafeRouteKey","i","routeKey","j","String","fromCharCode","Math","floor","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","replace","invalidKey","length","isNaN","parseInt","duplicateKey","interceptionPrefix","pattern","getNamedParametrizedRoute","prefixRouteKeys","reference","names","intercepted","inverseParts","structuredClone","hasInterceptionMarker","some","undefined","namedParameterizedRoute","pathToRegexpPattern","getNamedRouteRegex","options","result","namedRegex","getNamedMiddlewareRegex","catchAll","catchAllRegex","catchAllGroupedRegex"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 20019, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["getSegmentValue","segment","Array","isArray","isGroupSegment","endsWith","isParallelRouteSegment","startsWith","addSearchParamsIfPageSegment","searchParams","isPageSegment","includes","PAGE_SEGMENT_KEY","stringifiedQuery","JSON","stringify","computeSelectedLayoutSegment","segments","parallelRouteKey","length","rawSegment","DEFAULT_SEGMENT_KEY","getSelectedLayoutSegmentPath","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push","NOT_FOUND_SEGMENT_KEY"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEO,SAASA,gBAAgBC,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASG,eAAeH,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQI,QAAQ,CAAC;AAChD;AAEO,SAASC,uBAAuBL,OAAe;IACpD,OAAOA,QAAQM,UAAU,CAAC,QAAQN,YAAY;AAChD;AAEO,SAASO,6BACdP,OAAgB,EAChBQ,YAA2D;IAE3D,MAAMC,gBAAgBT,QAAQU,QAAQ,CAACC;IAEvC,IAAIF,eAAe;QACjB,MAAMG,mBAAmBC,KAAKC,SAAS,CAACN;QACxC,OAAOI,qBAAqB,OACxBD,mBAAmB,MAAMC,mBACzBD;IACN;IAEA,OAAOX;AACT;AAEO,SAASe,6BACdC,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAeC,sBAAsB,OAAOD;AACrD;AAGO,SAASE,6BACdC,IAAuB,EACvBL,gBAAwB,EACxBM,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACL,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMS,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMxB,UAAUyB,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAe/B,gBAAgBC;IAEnC,IAAI,CAAC8B,gBAAgBA,aAAaxB,UAAU,CAACK,mBAAmB;QAC9D,OAAOa;IACT;IAEAA,YAAYO,IAAI,CAACD;IAEjB,OAAOT,6BACLI,MACAR,kBACA,OACAO;AAEJ;AAEO,MAAMb,mBAAmB,WAAU;AACnC,MAAMS,sBAAsB,cAAa;AACzC,MAAMY,wBAAwB,cAAa","ignoreList":[0]}}, + {"offset": {"line": 20093, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/utils.ts"],"sourcesContent":["import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType

= NextComponentType<\n AppContextType,\n P,\n AppPropsType\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'FID', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer\n enhanceComponent?: Enhancer\n }\n | Enhancer\n\nexport type RenderPageResult = {\n html: string\n head?: Array\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n __NEXT_ERROR_CODE?: string\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType = {\n Component: NextComponentType\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps & {\n Component: NextComponentType\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send\n /**\n * Send data `json` data in response\n */\n json: Send\n status: (statusCode: number) => NextApiResponse\n redirect(url: string): NextApiResponse\n redirect(status: number, url: string): NextApiResponse\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler = (\n req: NextApiRequest,\n res: NextApiResponse\n) => unknown | Promise\n\n/**\n * Utils\n */\nexport function execOnce ReturnType>(\n fn: T\n): T {\n let used = false\n let result: ReturnType\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => {\n // Fast path: an absolute URL must start with a letter (the scheme).\n // Check for a-z and A-Z without the cost of the regex.\n const c = url.charCodeAt(0)\n const isLetter =\n (c >= 65 /* A */ && c <= 90) /* Z */ ||\n (c >= 97 /* a */ && c <= 122) /* z */\n if (!isLetter) {\n return false\n }\n\n return ABSOLUTE_URL_REGEX.test(url)\n}\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName

(Component: ComponentType

) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType, ctx: C): Promise {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise\n mkdir(dir: string): Promise\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n"],"names":["WEB_VITALS","execOnce","fn","used","result","args","ABSOLUTE_URL_REGEX","isAbsoluteUrl","url","c","charCodeAt","isLetter","test","getLocationOrigin","protocol","hostname","port","window","location","getURL","href","origin","substring","length","getDisplayName","Component","displayName","name","isResSent","res","finished","headersSent","normalizeRepeatedSlashes","urlParts","split","urlNoQuery","replace","slice","join","loadGetInitialProps","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","SP","performance","ST","every","method","DecodeError","NormalizeError","PageNotFoundError","constructor","page","code","MissingStaticPage","MiddlewareNotFoundError","stringifyError","error","JSON","stringify","stack"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 20268, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/experimental/testmode/context.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\n\nexport interface TestReqInfo {\n url: string\n proxyPort: number\n testData: string\n}\n\nexport interface TestRequestReader {\n url(req: R): string\n header(req: R, name: string): string | null\n}\n\nconst testStorage = new AsyncLocalStorage()\n\nfunction extractTestInfoFromRequest(\n req: R,\n reader: TestRequestReader\n): TestReqInfo | undefined {\n const proxyPortHeader = reader.header(req, 'next-test-proxy-port')\n if (!proxyPortHeader) {\n return undefined\n }\n const url = reader.url(req)\n const proxyPort = Number(proxyPortHeader)\n const testData = reader.header(req, 'next-test-data') || ''\n return { url, proxyPort, testData }\n}\n\nexport function withRequest(\n req: R,\n reader: TestRequestReader,\n fn: () => T\n): T {\n const testReqInfo = extractTestInfoFromRequest(req, reader)\n if (!testReqInfo) {\n return fn()\n }\n return testStorage.run(testReqInfo, fn)\n}\n\nexport function getTestReqInfo(\n req?: R,\n reader?: TestRequestReader\n): TestReqInfo | undefined {\n const testReqInfo = testStorage.getStore()\n if (testReqInfo) {\n return testReqInfo\n }\n if (req && reader) {\n return extractTestInfoFromRequest(req, reader)\n }\n return undefined\n}\n"],"names":["getTestReqInfo","withRequest","testStorage","AsyncLocalStorage","extractTestInfoFromRequest","req","reader","proxyPortHeader","header","undefined","url","proxyPort","Number","testData","fn","testReqInfo","run","getStore"],"mappings":";;;;;;;;;;;;;;IAyCgBA,cAAc,EAAA;eAAdA;;IAZAC,WAAW,EAAA;eAAXA;;;iCA7BkB;AAalC,MAAMC,cAAc,IAAIC,iBAAAA,iBAAiB;AAEzC,SAASC,2BACPC,GAAM,EACNC,MAA4B;IAE5B,MAAMC,kBAAkBD,OAAOE,MAAM,CAACH,KAAK;IAC3C,IAAI,CAACE,iBAAiB;QACpB,OAAOE;IACT;IACA,MAAMC,MAAMJ,OAAOI,GAAG,CAACL;IACvB,MAAMM,YAAYC,OAAOL;IACzB,MAAMM,WAAWP,OAAOE,MAAM,CAACH,KAAK,qBAAqB;IACzD,OAAO;QAAEK;QAAKC;QAAWE;IAAS;AACpC;AAEO,SAASZ,YACdI,GAAM,EACNC,MAA4B,EAC5BQ,EAAW;IAEX,MAAMC,cAAcX,2BAA2BC,KAAKC;IACpD,IAAI,CAACS,aAAa;QAChB,OAAOD;IACT;IACA,OAAOZ,YAAYc,GAAG,CAACD,aAAaD;AACtC;AAEO,SAASd,eACdK,GAAO,EACPC,MAA6B;IAE7B,MAAMS,cAAcb,YAAYe,QAAQ;IACxC,IAAIF,aAAa;QACf,OAAOA;IACT;IACA,IAAIV,OAAOC,QAAQ;QACjB,OAAOF,2BAA2BC,KAAKC;IACzC;IACA,OAAOG;AACT","ignoreList":[0]}}, + {"offset": {"line": 20326, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/experimental/testmode/fetch.ts"],"sourcesContent":["import type {\n ProxyFetchRequest,\n ProxyFetchResponse,\n ProxyResponse,\n} from './proxy'\nimport { getTestReqInfo, type TestRequestReader } from './context'\n\ntype Fetch = typeof fetch\ntype FetchInputArg = Parameters[0]\ntype FetchInitArg = Parameters[1]\n\nexport const reader: TestRequestReader = {\n url(req) {\n return req.url\n },\n header(req, name) {\n return req.headers.get(name)\n },\n}\n\nfunction getTestStack(): string {\n let stack = (new Error().stack ?? '').split('\\n')\n // Skip the first line and find first non-empty line.\n for (let i = 1; i < stack.length; i++) {\n if (stack[i].length > 0) {\n stack = stack.slice(i)\n break\n }\n }\n // Filter out franmework lines.\n stack = stack.filter((f) => !f.includes('/next/dist/'))\n // At most 5 lines.\n stack = stack.slice(0, 5)\n // Cleanup some internal info and trim.\n stack = stack.map((s) => s.replace('webpack-internal:///(rsc)/', '').trim())\n return stack.join(' ')\n}\n\nasync function buildProxyRequest(\n testData: string,\n request: Request\n): Promise {\n const {\n url,\n method,\n headers,\n body,\n cache,\n credentials,\n integrity,\n mode,\n redirect,\n referrer,\n referrerPolicy,\n } = request\n return {\n testData,\n api: 'fetch',\n request: {\n url,\n method,\n headers: [...Array.from(headers), ['next-test-stack', getTestStack()]],\n body: body\n ? Buffer.from(await request.arrayBuffer()).toString('base64')\n : null,\n cache,\n credentials,\n integrity,\n mode,\n redirect,\n referrer,\n referrerPolicy,\n },\n }\n}\n\nfunction buildResponse(proxyResponse: ProxyFetchResponse): Response {\n const { status, headers, body } = proxyResponse.response\n return new Response(body ? Buffer.from(body, 'base64') : null, {\n status,\n headers: new Headers(headers),\n })\n}\n\nexport async function handleFetch(\n originalFetch: Fetch,\n request: Request\n): Promise {\n const testInfo = getTestReqInfo(request, reader)\n if (!testInfo) {\n // Passthrough non-test requests.\n return originalFetch(request)\n }\n\n const { testData, proxyPort } = testInfo\n const proxyRequest = await buildProxyRequest(testData, request)\n\n const resp = await originalFetch(`http://localhost:${proxyPort}`, {\n method: 'POST',\n body: JSON.stringify(proxyRequest),\n // The header lets the ClientRequest interception in `httpget.ts` identify\n // this request as part of the test proxy protocol. @mswjs/interceptors\n // intercepts at the TCP level, so this request would otherwise be\n // intercepted again when it's sent from within an interception listener,\n // recursing indefinitely.\n headers: {\n 'next-test-internal': '1',\n },\n next: {\n // @ts-ignore\n internal: true,\n },\n })\n if (!resp.ok) {\n throw new Error(`Proxy request failed: ${resp.status}`)\n }\n\n const proxyResponse = (await resp.json()) as ProxyResponse\n const { api } = proxyResponse\n switch (api) {\n case 'continue':\n return originalFetch(request)\n case 'abort':\n case 'unhandled':\n throw new Error(\n `Proxy request aborted [${request.method} ${request.url}]`\n )\n case 'fetch':\n return buildResponse(proxyResponse)\n default:\n return api satisfies never\n }\n}\n\nexport function interceptFetch(originalFetch: Fetch) {\n global.fetch = function testFetch(\n input: FetchInputArg,\n init?: FetchInitArg\n ): Promise {\n // Passthrough internal requests.\n // @ts-ignore\n if (init?.next?.internal) {\n return originalFetch(input, init)\n }\n return handleFetch(originalFetch, new Request(input, init))\n }\n return () => {\n global.fetch = originalFetch\n }\n}\n"],"names":["handleFetch","interceptFetch","reader","url","req","header","name","headers","get","getTestStack","stack","Error","split","i","length","slice","filter","f","includes","map","s","replace","trim","join","buildProxyRequest","testData","request","method","body","cache","credentials","integrity","mode","redirect","referrer","referrerPolicy","api","Array","from","Buffer","arrayBuffer","toString","buildResponse","proxyResponse","status","response","Response","Headers","originalFetch","testInfo","getTestReqInfo","proxyPort","proxyRequest","resp","JSON","stringify","next","internal","ok","json","global","fetch","testFetch","input","init","Request"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 20477, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/experimental/testmode/server-edge.ts"],"sourcesContent":["import { withRequest as withRequestContext } from './context'\nimport { interceptFetch, reader } from './fetch'\n\nexport function interceptTestApis(): () => void {\n return interceptFetch(global.fetch)\n}\n\nexport function wrapRequestHandler(\n handler: (req: TRequest, fn: () => T) => T\n): (req: TRequest, fn: () => T) => T {\n return (req, fn) => withRequestContext(req, reader, () => handler(req, fn))\n}\n"],"names":["interceptTestApis","wrapRequestHandler","interceptFetch","global","fetch","handler","req","fn","withRequestContext","reader"],"mappings":";;;;;;;;;;;;;;IAGgBA,iBAAiB,EAAA;eAAjBA;;IAIAC,kBAAkB,EAAA;eAAlBA;;;yBAPkC;uBACX;AAEhC,SAASD;IACd,OAAOE,CAAAA,GAAAA,OAAAA,cAAc,EAACC,yDAAOC,KAAK;AACpC;AAEO,SAASH,mBACdI,OAA0C;IAE1C,OAAO,CAACC,KAAKC,KAAOC,CAAAA,GAAAA,SAAAA,WAAkB,EAACF,KAAKG,OAAAA,MAAM,EAAE,IAAMJ,QAAQC,KAAKC;AACzE","ignoreList":[0]}}, + {"offset": {"line": 20510, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/lib/constants.ts"],"sourcesContent":["import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\nexport const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\nexport const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'\n\n// in seconds\nexport const CACHE_ONE_YEAR_SECONDS = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Patterns to detect proxy files (replacement for middleware)\nexport const PROXY_FILENAME = 'proxy'\nexport const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport 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`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport 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`\n\nexport 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`\n\nexport 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`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\nexport const WEB_SOCKET_MAX_RECONNECTIONS = 12\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n"],"names":["ACTION_SUFFIX","APP_DIR_ALIAS","CACHE_ONE_YEAR_SECONDS","DOT_NEXT_ALIAS","ESLINT_DEFAULT_DIRS","GSP_NO_RETURNED_VALUE","GSSP_COMPONENT_MEMBER_ERROR","GSSP_NO_RETURNED_VALUE","HTML_CONTENT_TYPE_HEADER","INFINITE_CACHE","INSTRUMENTATION_HOOK_FILENAME","JSON_CONTENT_TYPE_HEADER","MATCHED_PATH_HEADER","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","NEXT_BODY_SUFFIX","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_CACHE_ROOT_PARAM_TAG_ID","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_DATA_SUFFIX","NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_META_SUFFIX","NEXT_NAV_DEPLOYMENT_ID_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_RESUME_HEADER","NEXT_RESUME_STATE_LENGTH_HEADER","NON_STANDARD_NODE_ENV","PAGES_DIR_ALIAS","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","PROXY_FILENAME","PROXY_LOCATION_REGEXP","PUBLIC_DIR_MIDDLEWARE_CONFLICT","ROOT_DIR_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","SERVER_PROPS_EXPORT_ERROR","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","SERVER_RUNTIME","SSG_FALLBACK_EXPORT_ERROR","SSG_GET_INITIAL_PROPS_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","TEXT_PLAIN_CONTENT_TYPE_HEADER","UNSTABLE_REVALIDATE_RENAME_ERROR","WEBPACK_LAYERS","WEBPACK_RESOURCE_QUERIES","WEB_SOCKET_MAX_RECONNECTIONS","edge","experimentalEdge","nodejs","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","edgeSSREntry","metadata","metadataRoute","metadataImageMeta"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 20931, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;;;;;;;IAAaA,sBAAsB,EAAA;eAAtBA;;IAEAC,oBAAoB,EAAA;eAApBA;;IACAC,yBAAyB,EAAA;eAAzBA;;IAFAC,sBAAsB,EAAA;eAAtBA;;;AADN,MAAMH,yBAAyB;AAC/B,MAAMG,yBAAyB;AAC/B,MAAMF,uBAAuB;AAC7B,MAAMC,4BAA4B","ignoreList":[0]}}, + {"offset": {"line": 20968, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["atLeastOneTask","scheduleImmediate","scheduleOnNextTick","waitAtLeastOneReactRenderTask","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","setImmediate","r"],"mappings":";;;;;;;;;;;;;;;;IA4CgBA,cAAc,EAAA;eAAdA;;IAbHC,iBAAiB,EAAA;eAAjBA;;IAtBAC,kBAAkB,EAAA;eAAlBA;;IAgDGC,6BAA6B,EAAA;eAA7BA;;;AAhDT,MAAMD,qBAAqB,CAACE;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF;AAQO,MAAMH,oBAAoB,CAACG;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLG,aAAaT;IACf;AACF;AAOO,SAASJ;IACd,OAAO,IAAIK,QAAc,CAACC,UAAYL,kBAAkBK;AAC1D;AAWO,SAASH;IACd,IAAIK,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACS,IAAMD,aAAaC;IACzC;AACF","ignoreList":[0]}}, + {"offset": {"line": 21033, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/after/after.ts"],"sourcesContent":["import { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\n\nexport type AfterTask = Promise | AfterCallback\nexport type AfterCallback = () => T | Promise\n\n/**\n * This function allows you to schedule callbacks to be executed after the current request finishes.\n */\nexport function after(task: AfterTask): void {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (!workStore || !workUnitStore) {\n // TODO(after): the linked docs page talks about *dynamic* APIs, which after soon won't be anymore\n throw new Error(\n '`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context'\n )\n }\n\n const { afterContext } = workStore\n return afterContext.after(task, workUnitStore)\n}\n"],"names":["after","task","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","Error","afterContext"],"mappings":";;;+BASgBA,SAAAA;;;eAAAA;;;0CATiB;8CACI;AAQ9B,SAASA,MAASC,IAAkB;IACzC,MAAMC,YAAYC,0BAAAA,gBAAgB,CAACC,QAAQ;IAC3C,MAAMC,gBAAgBC,8BAAAA,oBAAoB,CAACF,QAAQ;IAEnD,IAAI,CAACF,aAAa,CAACG,eAAe;QAChC,kGAAkG;QAClG,MAAM,OAAA,cAEL,CAFK,IAAIE,MACR,2HADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,MAAM,EAAEC,YAAY,EAAE,GAAGN;IACzB,OAAOM,aAAaR,KAAK,CAACC,MAAMI;AAClC","ignoreList":[0]}}, + {"offset": {"line": 21062, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/after/index.ts"],"sourcesContent":["export * from './after'\n"],"names":[],"mappings":";;;;qBAAc,qGAAA","ignoreList":[0]}}, + {"offset": {"line": 21084, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/app-render/blocking-route-messages.ts"],"sourcesContent":["export function createRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createDynamicBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createRuntimeBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering or a navigation.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createLinkBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data during prerendering or a navigation.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` accessed outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`\n )\n}\n\nexport function createDynamicBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering or a navigation.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeBodyError` or `createDynamicBodyError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data during prerendering.\\n\\n` +\n `\\`fetch(...)\\`, \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createLinkMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prefetched. \\`params\\` or \\`searchParams\\` accessed in \\`generateMetadata()\\` prevent it from being prefetched.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createDynamicMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`fetch(...)\\` or \\`connection()\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`\n )\n}\n\nexport function createLinkViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateViewport()\\`.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\`.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createDynamicViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\`.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the viewport data with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeViewportError` or `createDynamicViewportError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\`.\\n\\n` +\n `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \\`\\` because it affects the initial page load.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the viewport with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeMetadataError` or `createDynamicMetadataError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function logBuildDebugHint(route: string): void {\n if (process.env.NODE_ENV !== 'development') {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, try one of the following:\\n` +\n ` - Start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.\\n` +\n ` - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`\n )\n } else if (!process.env.__NEXT_DEV_SERVER) {\n console.error(\n `To debug the issue, start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.`\n )\n }\n}\n"],"names":["createDynamicBodyError","createDynamicBodyErrorInNavigation","createDynamicMetadataError","createDynamicOrRuntimeBodyError","createDynamicOrRuntimeMetadataError","createDynamicOrRuntimeViewportError","createDynamicViewportError","createLinkBodyErrorInNavigation","createLinkMetadataError","createLinkViewportError","createRuntimeBodyError","createRuntimeBodyErrorInNavigation","createRuntimeMetadataError","createRuntimeViewportError","logBuildDebugHint","route","Error","process","env","NODE_ENV","console","error","__NEXT_DEV_SERVER"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 21265, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport type {\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n ValidationStoreClient,\n PrerenderStoreModernServer,\n} from '../app-render/work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n getStagedRenderingController,\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n} from './work-unit-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport {\n ClientHookDynamicError,\n isClientHookDynamicError,\n makeClientHookHangingPromise,\n trackRuntimeDataAccessed,\n} from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport { BailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport {\n createRuntimeBodyError,\n createDynamicBodyError,\n createRuntimeBodyErrorInNavigation,\n createDynamicBodyErrorInNavigation,\n createDynamicOrRuntimeBodyError,\n createRuntimeMetadataError,\n createDynamicMetadataError,\n createRuntimeViewportError,\n createDynamicViewportError,\n createDynamicOrRuntimeViewportError,\n createDynamicOrRuntimeMetadataError,\n logBuildDebugHint,\n createLinkBodyErrorInNavigation,\n createLinkMetadataError,\n createLinkViewportError,\n} from './blocking-route-messages'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n INSTANT_VALIDATION_BOUNDARY_NAME,\n INSTANT_SLOT_MARKER_PREFIX,\n INSTANT_SLOT_MARKER_SUFFIX,\n} from './instant-validation/boundary-constants'\nimport {\n type ValidationBoundaryTracking,\n allRequiredBoundariesRendered,\n} from './instant-validation/boundary-tracking'\nimport type { InstantValidationSampleTracking } from './instant-validation/instant-samples'\nimport { createUnrenderedSegmentError } from '../../shared/lib/instant-messages'\n\nconst hasPostpone = typeof React.unstable_postpone === 'function'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n syncDynamicErrorWithStackPostMicrotask: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n syncDynamicErrorWithStackPostMicrotask: false,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nfunction getPendingClientSyncDynamicError(\n clientDynamic: DynamicTrackingState\n): null | Error {\n return clientDynamic.syncDynamicErrorWithStackPostMicrotask\n ? null\n : clientDynamic.syncDynamicErrorWithStack\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'prerender-ppr':\n case 'request':\n case 'generate-static-params':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-ppr':\n return postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n if (process.env.NODE_ENV !== 'production') {\n workUnitStore.usedDynamic = true\n }\n break\n case 'generate-static-params':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-ppr':\n case 'prerender-client':\n case 'validation-client':\n case 'generate-static-params':\n break\n case 'request':\n if (process.env.NODE_ENV !== 'production') {\n workUnitStore.usedDynamic = true\n }\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n\n if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n // React completes the task that is currently rendering before scheduled\n // abort cleanup. Client tracking can attribute the sync IO only during\n // that current task; server tracking keeps the error regardless.\n queueMicrotask(() => {\n dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true\n })\n }\n\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n // The synchronously accessed request data would have been available during\n // a runtime prerender, which would have rendered past this point instead of\n // aborting — so a runtime prefetch would produce more content than this\n // render. Record that, same as when request data access creates a hanging\n // promise (see makeRuntimeHangingPromise). Unlike\n // `abortOnSynchronousPlatformIOAccess`, which aborts a runtime prerender\n // all the same and therefore must not record anything.\n trackRuntimeDataAccessed(prerenderStore)\n\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // Preserve the exact server-side dynamic access for final validation after\n // interrupting this render.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\n/**\n * This component will call `React.postpone` that throws the postponed error.\n */\ntype PostponeProps = {\n reason: string\n route: string\n}\nexport function Postpone({ reason, route }: PostponeProps): never {\n const prerenderStore = workUnitAsyncStorage.getStore()\n const dynamicTracking =\n prerenderStore && prerenderStore.type === 'prerender-ppr'\n ? prerenderStore.dynamicTracking\n : null\n postponeWithTracking(route, reason, dynamicTracking)\n}\n\nexport function postponeWithTracking(\n route: string,\n expression: string,\n dynamicTracking: null | DynamicTrackingState\n): never {\n assertPostpone()\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n\n React.unstable_postpone(createPostponeReason(route, expression))\n}\n\nfunction createPostponeReason(route: string, expression: string) {\n return (\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` +\n `React throws this special object to indicate where. It should not be caught by ` +\n `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`\n )\n}\n\nexport function isDynamicPostpone(err: unknown) {\n if (\n typeof err === 'object' &&\n err !== null &&\n typeof (err as any).message === 'string'\n ) {\n return isDynamicPostponeReason((err as any).message)\n }\n return false\n}\n\nfunction isDynamicPostponeReason(reason: string) {\n return (\n reason.includes(\n 'needs to bail out of prerendering at this point because it used'\n ) &&\n reason.includes(\n 'Learn more: https://nextjs.org/docs/messages/ppr-caught-error'\n )\n )\n}\n\nif (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {\n throw new Error(\n 'Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\nfunction assertPostpone() {\n if (!hasPostpone) {\n throw new Error(\n `Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`\n )\n }\n}\n\n/**\n * This is a bit of a hack to allow us to abort a render using a Postpone instance instead of an Error which changes React's\n * abort semantics slightly.\n */\nexport function createRenderInBrowserAbortSignal(): AbortSignal {\n const controller = new AbortController()\n controller.abort(new BailoutToCSRError('Render in Browser'))\n return controller.signal\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModernServer\n): AbortSignal\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the final stage.\n // if an input didn't resolve at that point, then we can assume it never will.\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n\n const stagedRendering = getStagedRenderingController(workUnitStore)\n if (stagedRendering && stagedRendering.finalStage !== null) {\n stagedRendering\n .waitForStage(stagedRendering.finalStage)\n .then(() => scheduleOnNextTick(() => controller.abort()), noop)\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'generate-static-params':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction noop() {}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern | ValidationStoreClient\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function useDynamicRouteParams(expression: string) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workStore && workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-client': {\n const fallbackParams = workUnitStore.fallbackRouteParams\n\n if (fallbackParams && fallbackParams.size > 0) {\n // We are in a prerender with cacheComponents semantics. We are going to\n // hang here and never resolve. This will cause the currently\n // rendering component to effectively be a dynamic hole.\n React.use(\n makeClientHookHangingPromise(\n workUnitStore.renderSignal,\n new ClientHookDynamicError(workStore.route, expression)\n )\n )\n }\n break\n }\n case 'prerender':\n throw new InvariantError(\n `\\`${expression}\\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'prerender-ppr': {\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams && fallbackParams.size > 0) {\n return postponeWithTracking(\n workStore.route,\n expression,\n workUnitStore.dynamicTracking\n )\n }\n break\n }\n case 'validation-client': {\n // Don't check fallbackRouteParams here. We handle params that weren't\n // provided in the samples using a proxy that throws when accessed.\n break\n }\n case 'prerender-runtime':\n throw new InvariantError(\n `\\`${expression}\\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'cache':\n case 'private-cache':\n throw new InvariantError(\n `\\`${expression}\\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'generate-static-params':\n throw new InvariantError(\n `\\`${expression}\\` was called in \\`generateStaticParams\\`. Next.js should be preventing ${expression} from being included in server component files statically, but did not in this case.`\n )\n case 'prerender-legacy':\n case 'request':\n case 'unstable-cache':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\nexport function useDynamicSearchParams(expression: string) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (!workStore) {\n // We assume pages router context and just return\n return\n }\n\n if (!workUnitStore) {\n throwForMissingRequestStore(expression)\n }\n\n switch (workUnitStore.type) {\n case 'validation-client':\n // During instant validation we try to behave as close to client as possible,\n // so this shouldn't hang during SSR.\n return\n case 'prerender-client': {\n React.use(\n makeClientHookHangingPromise(\n workUnitStore.renderSignal,\n new ClientHookDynamicError(workStore.route, expression)\n )\n )\n break\n }\n case 'prerender-legacy':\n case 'prerender-ppr': {\n if (workStore.forceStatic) {\n return\n }\n throw new BailoutToCSRError(expression)\n }\n case 'prerender':\n case 'prerender-runtime':\n throw new InvariantError(\n `\\`${expression}\\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'cache':\n case 'unstable-cache':\n case 'private-cache':\n throw new InvariantError(\n `\\`${expression}\\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'generate-static-params':\n throw new InvariantError(\n `\\`${expression}\\` was called in \\`generateStaticParams\\`. Next.js should be preventing ${expression} from being included in server component files statically, but did not in this case.`\n )\n case 'request':\n return\n default:\n workUnitStore satisfies never\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nconst hasInstantValidationBoundaryRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_VALIDATION_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst slotMarkerRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_SLOT_MARKER_PREFIX}(\\\\d+)${INSTANT_SLOT_MARKER_SUFFIX}[\\\\n\\\\s]`\n)\n\n/** Look up the config factory for the slot this error belongs to.\n * Checks the component stack for a slot marker (__next_instant_slot_N__)\n * and returns the config at that index. Falls back to index 0 (root\n * config) when no slot marker is found or the slot has no config. */\nfunction resolveInstantStack(\n componentStack: string,\n dynamicValidation: InstantValidationState\n): (() => Error) | null {\n const { slotStacks } = dynamicValidation\n if (slotStacks.length > 1) {\n const match = slotMarkerRegex.exec(componentStack)\n if (match) {\n // Slot markers are 0-indexed in the component name but\n // slotStacks is 1-indexed (index 0 is the root config).\n const slotIndex = parseInt(match[1], 10) + 1\n const slotStack = slotStacks[slotIndex]\n if (slotStack != null) {\n return slotStack\n }\n }\n }\n // Fall back to root config (index 0)\n return slotStacks[0] ?? null\n}\n\n/**\n * Inspects the component stack of an outlet boundary to discover whether the\n * user placed a Suspense boundary above the document body, and records the\n * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so.\n *\n * The outlet itself isn't a meaningful source of dynamic — it only resolves\n * when metadata/viewport are dynamic, which we track via their own boundaries.\n * However, the outlet renders alongside the page content, so its stack passes\n * through the user's layout chain (typically reaching into `` via the\n * root layout). That makes the outlet stack our best opportunity to spot a\n * Suspense boundary above the body, even when no real body content is dynamic.\n * Without this, a route whose only dynamic source is `generateViewport()` would\n * miss the Suspense-above-body opt-in, because the viewport's stack lives in\n * the head and never sees the user's root layout.\n *\n * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The\n * latter tracks whether the body has dynamic content that's been wrapped in\n * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us\n * about the structural opt-in for an empty shell, not about the body being\n * partially dynamic. The distinction matters because dynamic metadata is only\n * acceptable when the page is partially dynamic (via real body holes), and we\n * don't want this outlet-based detection to mask that case.\n */\nfunction trackOutletSuspenseAboveBody(\n componentStack: string,\n dynamicValidation: DynamicValidationState\n): void {\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n dynamicValidation.hasSuspenseAboveBody = true\n }\n}\n\nexport function trackAllowedDynamicAccess(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createDynamicOrRuntimeBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport enum DynamicHoleKind {\n /** We know that this hole is caused by link data. */\n Link = 1,\n /** We know that this hole is caused by runtime data. */\n Runtime = 2,\n /** We know that this hole is caused by dynamic data. */\n Dynamic = 3,\n}\n\n/** Stores dynamic reasons used during an SSR render in instant validation. */\nexport type InstantValidationState = {\n hasDynamicMetadata: boolean\n hasAllowedClientDynamicAboveBoundary: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n validationPreventingErrors: Array\n thrownErrorsOutsideBoundary: Array\n /** Per-slot config factories. Index 0 is the root config (fallback).\n * Indices 1+ correspond to slot marker components in the tree. */\n slotStacks: Array<(() => Error) | null>\n}\n\nexport function createInstantValidationState(\n slotStacks: Array<(() => Error) | null>\n): InstantValidationState {\n return {\n hasDynamicMetadata: false,\n hasAllowedClientDynamicAboveBoundary: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n validationPreventingErrors: [],\n thrownErrorsOutsideBoundary: [],\n slotStacks,\n }\n}\n\nexport function trackDynamicHoleInNavigation(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: InstantValidationState,\n clientDynamic: DynamicTrackingState,\n kind: DynamicHoleKind,\n boundaryState: ValidationBoundaryTracking\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n }\n // Resolve the config stack for this specific error. If the error\n // is inside a slot marker, use that slot's config. Otherwise fall\n // back to the default.\n const effectiveCreateInstantStack = resolveInstantStack(\n componentStack,\n dynamicValidation\n )\n\n if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n kind === DynamicHoleKind.Link\n ? createLinkMetadataError(workStore.route)\n : kind === DynamicHoleKind.Runtime\n ? createRuntimeMetadataError(workStore.route)\n : createDynamicMetadataError(workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicMetadata = error\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n kind === DynamicHoleKind.Link\n ? createLinkViewportError(workStore.route)\n : kind === DynamicHoleKind.Runtime\n ? createRuntimeViewportError(workStore.route)\n : createDynamicViewportError(workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // We don't see the validation boundary in the component stack,\n // so this hole must be coming from a shared parent.\n // Shared parents are fully resolved and don't have RSC holes,\n // but they can still suspend in a client component during SSR.\n\n // If we managed to render all the validation boundaries, that means\n // that the client holes aren't blocking validation and we can disregard them.\n // Note that we don't even care whether they have suspense or not.\n if (allRequiredBoundariesRendered(boundaryState)) {\n dynamicValidation.hasAllowedClientDynamicAboveBoundary = true\n dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata\n return\n } else {\n // TODO(instant-validation) TODO(NAR-787)\n // If shared parents blocked us from validating, we should only log\n // the errors from the innermost (segments), i.e. omit layouts whose\n // slots managed to render (because clearly they didn't block validation)\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because a Client Component in a parent segment prevented the page from rendering.`\n const error = addErrorContext(\n new Error(message),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.validationPreventingErrors.push(error)\n return\n }\n } else {\n // The hole originates inside the validation boundary.\n //\n // Check if we have a Suspense above the hole, but below the validation boundary.\n // If we do, then this dynamic usage wouldn't block a navigation to this subtree.\n // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block.\n //\n // Note that in the component stack, children come before parents.\n //\n // Valid:\n // ...\n // at Suspense\n // ...\n // at __next_prefetch_validation_boundary__\n //\n // Invalid:\n // ...\n // at __next_prefetch_validation_boundary__\n // ...\n // at Suspense\n //\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n dynamicValidation.hasAllowedDynamic = true\n return\n } else {\n // invalid - fallthrough\n }\n }\n }\n\n if (syncDynamicError) {\n if (\n effectiveCreateInstantStack !== null &&\n syncDynamicError.cause === undefined\n ) {\n syncDynamicError.cause = effectiveCreateInstantStack()\n }\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n dynamicReason,\n componentStack,\n effectiveCreateInstantStack\n )\n )\n return\n }\n\n const error = addErrorContext(\n kind === DynamicHoleKind.Link\n ? createLinkBodyErrorInNavigation(workStore.route)\n : kind === DynamicHoleKind.Runtime\n ? createRuntimeBodyErrorInNavigation(workStore.route)\n : createDynamicBodyErrorInNavigation(workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport function trackThrownErrorInNavigation(\n workStore: WorkStore,\n dynamicValidation: InstantValidationState,\n thrownValue: unknown,\n componentStack: string\n) {\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // There's no validation boundary on the component stack.\n // This error may have blocked a boundary from rendering.\n\n // Wrap the error to provide component context.\n // This helps for errors from node_modules which would otherwise\n // have no useful stack information due to ignore-listing,\n // e.g. next/dynamic with `ssr: false`.\n const error = addErrorContext(\n new Error(\n 'An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.',\n { cause: thrownValue }\n ),\n componentStack,\n null\n )\n dynamicValidation.thrownErrorsOutsideBoundary.push(error)\n } else {\n // There's validation boundary on the component stack,\n // so we know this error didn't block a validation boundary from rendering.\n // However, this error might be hiding be hiding dynamic content that would\n // cause validation to fail.\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n // There's a Suspense below the validation boundary but above this error's location.\n // This subtree can't fail instant validation because any potential\n // dynamic holes would be guarded by the Suspense anyway,\n // so we can allow this.\n return\n } else {\n // invalid - fallthrough\n }\n }\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because an error prevented the target segment from rendering.`\n const error = addErrorContext(\n new Error(message, { cause: thrownValue }),\n componentStack,\n null // TODO(instant-validation-build): conflicting use of cause\n )\n dynamicValidation.validationPreventingErrors.push(error)\n }\n}\n\nexport function trackDynamicHoleInRuntimeShell(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createDynamicMetadataError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createDynamicViewportError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createDynamicBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport function trackDynamicHoleInStaticShell(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createRuntimeMetadataError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createRuntimeViewportError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createRuntimeBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n *\n * Accepts an already-created Error so the SWC error-code plugin can see the\n * `new Error(...)` call at each call site and auto-assign error codes.\n */\nfunction addErrorContext(\n error: Error,\n componentStack: string,\n createInstantStack: (() => Error) | null\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n if (createInstantStack !== null) {\n error.cause = createInstantStack()\n }\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack =\n error.name + ': ' + error.message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n logBuildDebugHint(workStore.route)\n}\n\nexport function throwIfSyncIOUsed(\n workStore: WorkStore,\n serverDynamic: DynamicTrackingState\n) {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n allowEmptyStaticShell: boolean\n): void {\n throwIfSyncIOUsed(workStore, serverDynamic)\n\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(createDynamicOrRuntimeMetadataError(workStore.route).message)\n throw new StaticGenBailoutError()\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n createDynamicOrRuntimeViewportError(workStore.route).message\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n allowEmptyStaticShell: boolean\n): Array {\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\n/**\n * `errors` are validation failures that should be surfaced immediately.\n * `deferredFallback` carries a missing-boundary explanation that the caller\n * should hold back until *every* validation depth has been tried — a missing\n * boundary often just means a parent layout intentionally omitted a slot, and\n * a different depth's validation may surface a more meaningful error.\n */\nexport type NavigationValidationResult =\n // instances that block instant navigation\n | Array\n // validation was blocked with zero or more reasons\n | Error\n | AggregateError\n\nexport function getNavigationDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: InstantValidationState,\n validationSampleTracking: InstantValidationSampleTracking | null,\n boundaryState: ValidationBoundaryTracking,\n devRenderDidError: boolean\n): NavigationValidationResult {\n // If we have errors related to missing samples, those should take precedence over everything else.\n if (validationSampleTracking) {\n const { missingSampleErrors } = validationSampleTracking\n if (missingSampleErrors.length > 0) {\n return missingSampleErrors\n }\n }\n\n const { validationPreventingErrors } = dynamicValidation\n if (validationPreventingErrors.length > 0) {\n if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // The dev render already surfaced server errors to the user.\n // The same errors likely caused validation to be inconclusive,\n // so reporting them again as validation failures would be noisy.\n return []\n }\n return validationPreventingErrors\n }\n\n // NOTE: We don't care about Suspense above body here,\n // we're only concerned with the validation boundary\n if (prelude !== PreludeState.Full) {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n prelude === PreludeState.Empty &&\n !dynamicValidation.hasAllowedClientDynamicAboveBoundary &&\n allRequiredBoundariesRendered(boundaryState)\n ) {\n // If we ever get this far then we messed up the tracking of invalid\n // dynamic. (When boundaries are missing the deferred fallback below\n // will surface a more useful error.)\n return new InvariantError(\n `Route \"${workStore.route}\" failed to render during instant validation and Next.js was unable to determine a reason.`\n )\n }\n } else {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n\n // Missing boundaries on their own aren't a strong signal — a parent\n // layout may legitimately omit a slot. Defer this so the caller can\n // try shallower validation depths first; if every depth comes up\n // empty we still want to surface this so the user is made aware that\n // validation didn't complete. When we add a markers API, the\n // marker-based variant of this check can become strict again.\n if (!allRequiredBoundariesRendered(boundaryState)) {\n const { thrownErrorsOutsideBoundary } = dynamicValidation\n const rootInstantStack = dynamicValidation.slotStacks[0]\n if (thrownErrorsOutsideBoundary.length === 0) {\n const missingFiles: string[] = []\n for (const [id, filePaths] of boundaryState.requiredIds) {\n if (!boundaryState.renderedIds.has(id)) {\n for (const filePath of filePaths) {\n let normalized = filePath\n .replace(/^\\[project\\][\\\\/]?/, '')\n .replace(process.cwd() + '/', '')\n .replace(process.cwd() + '\\\\', '')\n missingFiles.push(normalized)\n }\n }\n }\n missingFiles.sort()\n return createUnrenderedSegmentError(workStore.route, missingFiles)\n } else if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // Errors outside the boundary likely blocked it from rendering,\n // but they're already being reported to the user via the dev\n // render. Suppress the validation failure to avoid noise.\n return []\n } else if (thrownErrorsOutsideBoundary.length === 1) {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to the following error.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n thrownErrorsOutsideBoundary[0] as Error,\n ])\n } else {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to one of the following errors.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n ...(thrownErrorsOutsideBoundary as Error[]),\n ])\n }\n }\n\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n"],"names":["DynamicHoleKind","Postpone","PreludeState","abortAndThrowOnSynchronousRequestDataAccess","abortOnSynchronousPlatformIOAccess","accessedDynamicData","annotateDynamicAccess","consumeDynamicAccess","createDynamicTrackingState","createDynamicValidationState","createHangingInputAbortSignal","createInstantValidationState","createRenderInBrowserAbortSignal","formatDynamicAPIAccesses","getFirstDynamicReason","getNavigationDisallowedDynamicReasons","getStaticShellDisallowedDynamicReasons","isDynamicPostpone","isPrerenderInterruptedError","logDisallowedDynamicError","markCurrentScopeAsDynamic","postponeWithTracking","throwIfDisallowedDynamic","throwIfSyncIOUsed","throwToInterruptStaticGeneration","trackAllowedDynamicAccess","trackDynamicDataInDynamicRender","trackDynamicHoleInNavigation","trackDynamicHoleInRuntimeShell","trackDynamicHoleInStaticShell","trackThrownErrorInNavigation","useDynamicRouteParams","useDynamicSearchParams","hasPostpone","React","unstable_postpone","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","syncDynamicErrorWithStackPostMicrotask","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","getPendingClientSyncDynamicError","clientDynamic","trackingState","expression","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","StaticGenBailoutError","route","dynamicTracking","revalidate","err","DynamicServerError","dynamicUsageDescription","dynamicUsageStack","stack","process","env","NODE_ENV","usedDynamic","prerenderStore","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","push","Error","undefined","errorWithStack","queueMicrotask","trackRuntimeDataAccessed","prerenderSignal","signal","aborted","workUnitAsyncStorage","getStore","assertPostpone","createPostponeReason","message","isDynamicPostponeReason","includes","NEXT_PRERENDER_INTERRUPTED","digest","length","serverDynamic","filter","access","map","split","slice","line","join","AbortController","BailoutToCSRError","cacheSignal","inputReady","then","stagedRendering","getStagedRenderingController","finalStage","waitForStage","scheduleOnNextTick","noop","workStore","workAsyncStorage","fallbackParams","fallbackRouteParams","size","use","makeClientHookHangingPromise","renderSignal","ClientHookDynamicError","InvariantError","throwForMissingRequestStore","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","ROOT_LAYOUT_BOUNDARY_NAME","hasMetadataRegex","METADATA_BOUNDARY_NAME","hasViewportRegex","VIEWPORT_BOUNDARY_NAME","hasOutletRegex","OUTLET_BOUNDARY_NAME","hasInstantValidationBoundaryRegex","INSTANT_VALIDATION_BOUNDARY_NAME","slotMarkerRegex","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","resolveInstantStack","componentStack","dynamicValidation","slotStacks","match","exec","slotIndex","parseInt","slotStack","trackOutletSuspenseAboveBody","test","dynamicReason","syncDynamicError","isClientHookDynamicError","addErrorContext","createDynamicOrRuntimeBodyError","hasAllowedClientDynamicAboveBoundary","validationPreventingErrors","thrownErrorsOutsideBoundary","kind","boundaryState","effectiveCreateInstantStack","createLinkMetadataError","createRuntimeMetadataError","createDynamicMetadataError","createLinkViewportError","createRuntimeViewportError","createDynamicViewportError","boundaryLocation","allRequiredBoundariesRendered","suspenseLocation","index","cause","createLinkBodyErrorInNavigation","createRuntimeBodyErrorInNavigation","createDynamicBodyErrorInNavigation","thrownValue","createDynamicBodyError","createRuntimeBodyError","createInstantStack","ownerStack","captureOwnerStack","name","console","logBuildDebugHint","prelude","allowEmptyStaticShell","createDynamicOrRuntimeMetadataError","i","createDynamicOrRuntimeViewportError","validationSampleTracking","devRenderDidError","missingSampleErrors","__NEXT_DEV_SERVER","rootInstantStack","missingFiles","id","filePaths","requiredIds","renderedIds","has","filePath","normalized","replace","cwd","sort","createUnrenderedSegmentError","AggregateError"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;CAoBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAm4BWA,eAAe,EAAA;eAAfA;;IArgBIC,QAAQ,EAAA;eAARA;;IAg5BJC,YAAY,EAAA;eAAZA;;IA57BIC,2CAA2C,EAAA;eAA3CA;;IA/BAC,kCAAkC,EAAA;eAAlCA;;IAqKAC,mBAAmB,EAAA;eAAnBA;;IA2IAC,qBAAqB,EAAA;eAArBA;;IArIAC,oBAAoB,EAAA;eAApBA;;IAlXAC,0BAA0B,EAAA;eAA1BA;;IAWAC,4BAA4B,EAAA;eAA5BA;;IAqbAC,6BAA6B,EAAA;eAA7BA;;IA+WAC,4BAA4B,EAAA;eAA5BA;;IAhYAC,gCAAgC,EAAA;eAAhCA;;IAlDAC,wBAAwB,EAAA;eAAxBA;;IA/VAC,qBAAqB,EAAA;eAArBA;;IAwyCAC,qCAAqC,EAAA;eAArCA;;IApEAC,sCAAsC,EAAA;eAAtCA;;IA38BAC,iBAAiB,EAAA;eAAjBA;;IAwCAC,2BAA2B,EAAA;eAA3BA;;IAy0BAC,yBAAyB,EAAA;eAAzBA;;IA7nCAC,yBAAyB,EAAA;eAAzBA;;IAgPAC,oBAAoB,EAAA;eAApBA;;IAk6BAC,wBAAwB,EAAA;eAAxBA;;IAbAC,iBAAiB,EAAA;eAAjBA;;IAxjCAC,gCAAgC,EAAA;eAAhCA;;IAwmBAC,yBAAyB,EAAA;eAAzBA;;IA/kBAC,+BAA+B,EAAA;eAA/BA;;IA8qBAC,4BAA4B,EAAA;eAA5BA;;IAsMAC,8BAA8B,EAAA;eAA9BA;;IAiEAC,6BAA6B,EAAA;eAA7BA;;IArHAC,4BAA4B,EAAA;eAA5BA;;IA3cAC,qBAAqB,EAAA;eAArBA;;IAgEAC,sBAAsB,EAAA;eAAtBA;;;8DAtqBE;oCAEiB;yCACG;8CAK/B;0CAC0B;uCAM1B;mCAMA;2BAC4B;8BACD;uCAiB3B;gCACwB;oCAKxB;kCAIA;iCAEsC;;;;;;AAE7C,MAAMC,cAAc,OAAOC,OAAAA,OAAK,CAACC,iBAAiB,KAAK;AA0ChD,SAAS3B,2BACd4B,sBAA2C;IAE3C,OAAO;QACLA;QACAC,iBAAiB,EAAE;QACnBC,2BAA2B;QAC3BC,wCAAwC;IAC1C;AACF;AAEO,SAAS9B;IACd,OAAO;QACL+B,sBAAsB;QACtBC,oBAAoB;QACpBC,iBAAiB;QACjBC,oBAAoB;QACpBC,mBAAmB;QACnBC,eAAe,EAAE;IACnB;AACF;AAEA,SAASC,iCACPC,aAAmC;IAEnC,OAAOA,cAAcR,sCAAsC,GACvD,OACAQ,cAAcT,yBAAyB;AAC7C;AAEO,SAASxB,sBACdkC,aAAmC;QAE5BA;IAAP,OAAA,CAAOA,kCAAAA,cAAcX,eAAe,CAAC,EAAE,KAAA,OAAA,KAAA,IAAhCW,gCAAkCC,UAAU;AACrD;AASO,SAAS7B,0BACd8B,KAAgB,EAChBC,aAAuE,EACvEF,UAAkB;IAElB,IAAIE,eAAe;QACjB,OAAQA,cAAcC,IAAI;YACxB,KAAK;YACL,KAAK;gBACH,iEAAiE;gBACjE,kEAAkE;gBAClE,gEAAgE;gBAChE,kCAAkC;gBAClC;YACF,KAAK;gBACH,0DAA0D;gBAC1D;YACF,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH;YACF;gBACED;QACJ;IACF;IAEA,2EAA2E;IAC3E,4EAA4E;IAC5E,2DAA2D;IAC3D,IAAID,MAAMG,YAAY,IAAIH,MAAMI,WAAW,EAAE;IAE7C,IAAIJ,MAAMK,kBAAkB,EAAE;QAC5B,MAAM,OAAA,cAEL,CAFK,IAAIC,yBAAAA,qBAAqB,CAC7B,CAAC,MAAM,EAAEN,MAAMO,KAAK,CAAC,8EAA8E,EAAER,WAAW,4HAA4H,CAAC,GADzO,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,IAAIE,eAAe;QACjB,OAAQA,cAAcC,IAAI;YACxB,KAAK;gBACH,OAAO/B,qBACL6B,MAAMO,KAAK,EACXR,YACAE,cAAcO,eAAe;YAEjC,KAAK;gBACHP,cAAcQ,UAAU,GAAG;gBAE3B,uEAAuE;gBACvE,oCAAoC;gBACpC,MAAMC,MAAM,OAAA,cAEX,CAFW,IAAIC,oBAAAA,kBAAkB,CAChC,CAAC,MAAM,EAAEX,MAAMO,KAAK,CAAC,iDAAiD,EAAER,WAAW,2EAA2E,CAAC,GADrJ,qBAAA;2BAAA;gCAAA;kCAAA;gBAEZ;gBACAC,MAAMY,uBAAuB,GAAGb;gBAChCC,MAAMa,iBAAiB,GAAGH,IAAII,KAAK;gBAEnC,MAAMJ;YACR,KAAK;gBACH,IAAIK,QAAQC,GAAG,CAACC,QAAQ,KAAK,WAAc;oBACzChB,cAAciB,WAAW,GAAG;gBAC9B;gBACA;YACF,KAAK;gBACH;YACF;gBACEjB;QACJ;IACF;AACF;AAQO,SAAS3B,iCACdyB,UAAkB,EAClBC,KAAgB,EAChBmB,cAAoC;IAEpC,uGAAuG;IACvG,MAAMT,MAAM,OAAA,cAEX,CAFW,IAAIC,oBAAAA,kBAAkB,CAChC,CAAC,MAAM,EAAEX,MAAMO,KAAK,CAAC,mDAAmD,EAAER,WAAW,6EAA6E,CAAC,GADzJ,qBAAA;eAAA;oBAAA;sBAAA;IAEZ;IAEAoB,eAAeV,UAAU,GAAG;IAE5BT,MAAMY,uBAAuB,GAAGb;IAChCC,MAAMa,iBAAiB,GAAGH,IAAII,KAAK;IAEnC,MAAMJ;AACR;AASO,SAASlC,gCAAgCyB,aAA4B;IAC1E,OAAQA,cAAcC,IAAI;QACxB,KAAK;QACL,KAAK;YACH,iEAAiE;YACjE,kEAAkE;YAClE,gEAAgE;YAChE,kCAAkC;YAClC;QACF,KAAK;YACH,0DAA0D;YAC1D;QACF,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH;QACF,KAAK;YACH,IAAIa,QAAQC,GAAG,CAACC,QAAQ,KAAK,WAAc;gBACzChB,cAAciB,WAAW,GAAG;YAC9B;YACA;QACF;YACEjB;IACJ;AACF;AAEA,SAASmB,oCACPb,KAAa,EACbR,UAAkB,EAClBoB,cAAoC;IAEpC,MAAME,SAAS,CAAC,MAAM,EAAEd,MAAM,iEAAiE,EAAER,WAAW,CAAC,CAAC;IAE9G,MAAMuB,QAAQC,gCAAgCF;IAE9CF,eAAeK,UAAU,CAACC,KAAK,CAACH;IAEhC,MAAMd,kBAAkBW,eAAeX,eAAe;IACtD,IAAIA,iBAAiB;QACnBA,gBAAgBrB,eAAe,CAACuC,IAAI,CAAC;YACnC,0EAA0E;YAC1E,eAAe;YACfZ,OAAON,gBAAgBtB,sBAAsB,GACzC,IAAIyC,QAAQb,KAAK,GACjBc;YACJ7B;QACF;IACF;AACF;AAEO,SAAS7C,mCACdqD,KAAa,EACbR,UAAkB,EAClB8B,cAAqB,EACrBV,cAAoC;IAEpC,MAAMX,kBAAkBW,eAAeX,eAAe;IAEtD,IAAIA,mBAAmBA,gBAAgBpB,yBAAyB,KAAK,MAAM;QACzEoB,gBAAgBpB,yBAAyB,GAAGyC;QAC5C,wEAAwE;QACxE,uEAAuE;QACvE,iEAAiE;QACjEC,eAAe;YACbtB,gBAAgBnB,sCAAsC,GAAG;QAC3D;IACF;IAEA+B,oCAAoCb,OAAOR,YAAYoB;AACzD;AAYO,SAASlE,4CACdsD,KAAa,EACbR,UAAkB,EAClB8B,cAAqB,EACrBV,cAAoC;IAEpC,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,kDAAkD;IAClD,yEAAyE;IACzE,uDAAuD;IACvDY,CAAAA,GAAAA,uBAAAA,wBAAwB,EAACZ;IAEzB,MAAMa,kBAAkBb,eAAeK,UAAU,CAACS,MAAM;IACxD,IAAID,gBAAgBE,OAAO,KAAK,OAAO;QACrC,8FAA8F;QAC9F,mFAAmF;QACnF,wFAAwF;QACxF,4FAA4F;QAC5F,0BAA0B;QAC1Bd,oCAAoCb,OAAOR,YAAYoB;QACvD,2EAA2E;QAC3E,4BAA4B;QAC5B,MAAMX,kBAAkBW,eAAeX,eAAe;QACtD,IAAIA,iBAAiB;YACnB,IAAIA,gBAAgBpB,yBAAyB,KAAK,MAAM;gBACtDoB,gBAAgBpB,yBAAyB,GAAGyC;YAC9C;QACF;IACF;IACA,MAAMN,gCACJ,CAAC,MAAM,EAAEhB,MAAM,iEAAiE,EAAER,WAAW,CAAC,CAAC;AAEnG;AASO,SAAShD,SAAS,EAAEsE,MAAM,EAAEd,KAAK,EAAiB;IACvD,MAAMY,iBAAiBgB,8BAAAA,oBAAoB,CAACC,QAAQ;IACpD,MAAM5B,kBACJW,kBAAkBA,eAAejB,IAAI,KAAK,kBACtCiB,eAAeX,eAAe,GAC9B;IACNrC,qBAAqBoC,OAAOc,QAAQb;AACtC;AAEO,SAASrC,qBACdoC,KAAa,EACbR,UAAkB,EAClBS,eAA4C;IAE5C6B;IACA,IAAI7B,iBAAiB;QACnBA,gBAAgBrB,eAAe,CAACuC,IAAI,CAAC;YACnC,0EAA0E;YAC1E,eAAe;YACfZ,OAAON,gBAAgBtB,sBAAsB,GACzC,IAAIyC,QAAQb,KAAK,GACjBc;YACJ7B;QACF;IACF;IAEAf,OAAAA,OAAK,CAACC,iBAAiB,CAACqD,qBAAqB/B,OAAOR;AACtD;AAEA,SAASuC,qBAAqB/B,KAAa,EAAER,UAAkB;IAC7D,OACE,CAAC,MAAM,EAAEQ,MAAM,iEAAiE,EAAER,WAAW,EAAE,CAAC,GAChG,CAAC,+EAA+E,CAAC,GACjF,CAAC,iFAAiF,CAAC;AAEvF;AAEO,SAAShC,kBAAkB2C,GAAY;IAC5C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,OAAQA,IAAY6B,OAAO,KAAK,UAChC;QACA,OAAOC,wBAAyB9B,IAAY6B,OAAO;IACrD;IACA,OAAO;AACT;AAEA,SAASC,wBAAwBnB,MAAc;IAC7C,OACEA,OAAOoB,QAAQ,CACb,sEAEFpB,OAAOoB,QAAQ,CACb;AAGN;AAEA,IAAID,wBAAwBF,qBAAqB,OAAO,YAAY,OAAO;IACzE,MAAM,OAAA,cAEL,CAFK,IAAIX,MACR,2FADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEA,MAAMe,6BAA6B;AAEnC,SAASnB,gCAAgCgB,OAAe;IACtD,MAAMjB,QAAQ,OAAA,cAAkB,CAAlB,IAAIK,MAAMY,UAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAiB;IAC7BjB,MAAcqB,MAAM,GAAGD;IACzB,OAAOpB;AACT;AAMO,SAAStD,4BACdsD,KAAc;IAEd,OACE,OAAOA,UAAU,YACjBA,UAAU,QACTA,MAAcqB,MAAM,KAAKD,8BAC1B,UAAUpB,SACV,aAAaA,SACbA,iBAAiBK;AAErB;AAEO,SAASxE,oBACdgC,eAAqC;IAErC,OAAOA,gBAAgByD,MAAM,GAAG;AAClC;AAEO,SAASvF,qBACdwF,aAAmC,EACnChD,aAAmC;IAEnC,oEAAoE;IACpE,0EAA0E;IAC1E,SAAS;IACTgD,cAAc1D,eAAe,CAACuC,IAAI,IAAI7B,cAAcV,eAAe;IACnE,OAAO0D,cAAc1D,eAAe;AACtC;AAEO,SAASxB,yBACdwB,eAAqC;IAErC,OAAOA,gBACJ2D,MAAM,CACL,CAACC,SACC,OAAOA,OAAOjC,KAAK,KAAK,YAAYiC,OAAOjC,KAAK,CAAC8B,MAAM,GAAG,GAE7DI,GAAG,CAAC,CAAC,EAAEjD,UAAU,EAAEe,KAAK,EAAE;QACzBA,QAAQA,MACLmC,KAAK,CAAC,MACP,wEAAwE;QACxE,qEAAqE;QACrE,uDAAuD;SACtDC,KAAK,CAAC,GACNJ,MAAM,CAAC,CAACK;YACP,kDAAkD;YAClD,IAAIA,KAAKV,QAAQ,CAAC,uBAAuB;gBACvC,OAAO;YACT;YAEA,oDAAoD;YACpD,IAAIU,KAAKV,QAAQ,CAAC,mBAAmB;gBACnC,OAAO;YACT;YAEA,kDAAkD;YAClD,IAAIU,KAAKV,QAAQ,CAAC,YAAY;gBAC5B,OAAO;YACT;YAEA,OAAO;QACT,GACCW,IAAI,CAAC;QACR,OAAO,CAAC,0BAA0B,EAAErD,WAAW,GAAG,EAAEe,OAAO;IAC7D;AACJ;AAEA,SAASuB;IACP,IAAI,CAACtD,aAAa;QAChB,MAAM,OAAA,cAEL,CAFK,IAAI4C,MACR,CAAC,gIAAgI,CAAC,GAD9H,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;AACF;AAMO,SAASjE;IACd,MAAM8D,aAAa,IAAI6B;IACvB7B,WAAWC,KAAK,CAAC,OAAA,cAA0C,CAA1C,IAAI6B,cAAAA,iBAAiB,CAAC,sBAAtB,qBAAA;eAAA;oBAAA;sBAAA;IAAyC;IAC1D,OAAO9B,WAAWS,MAAM;AAC1B;AAaO,SAASzE,8BACdyC,aAA4B;IAE5B,OAAQA,cAAcC,IAAI;QACxB,KAAK;QACL,KAAK;YACH,MAAMsB,aAAa,IAAI6B;YAEvB,IAAIpD,cAAcsD,WAAW,EAAE;gBAC7B,sEAAsE;gBACtE,sEAAsE;gBACtE,8DAA8D;gBAC9DtD,cAAcsD,WAAW,CAACC,UAAU,GAAGC,IAAI,CAAC;oBAC1CjC,WAAWC,KAAK;gBAClB;YACF,OAAO;gBACL,qEAAqE;gBACrE,qBAAqB;gBACrB,oEAAoE;gBACpE,8EAA8E;gBAC9E,EAAE;gBACF,qDAAqD;gBACrD,oEAAoE;gBACpE,sEAAsE;gBACtE,sEAAsE;gBACtE,gCAAgC;gBAEhC,MAAMiC,kBAAkBC,CAAAA,GAAAA,8BAAAA,4BAA4B,EAAC1D;gBACrD,IAAIyD,mBAAmBA,gBAAgBE,UAAU,KAAK,MAAM;oBAC1DF,gBACGG,YAAY,CAACH,gBAAgBE,UAAU,EACvCH,IAAI,CAAC,IAAMK,CAAAA,GAAAA,WAAAA,kBAAkB,EAAC,IAAMtC,WAAWC,KAAK,KAAKsC;gBAC9D,OAAO;oBACLD,CAAAA,GAAAA,WAAAA,kBAAkB,EAAC,IAAMtC,WAAWC,KAAK;gBAC3C;YACF;YAEA,OAAOD,WAAWS,MAAM;QAC1B,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAOL;QACT;YACE3B;IACJ;AACF;AAEA,SAAS8D,QAAQ;AAEV,SAAS3G,sBACd2C,UAAkB,EAClBoB,cAA4D;IAE5D,MAAMX,kBAAkBW,eAAeX,eAAe;IACtD,IAAIA,iBAAiB;QACnBA,gBAAgBrB,eAAe,CAACuC,IAAI,CAAC;YACnCZ,OAAON,gBAAgBtB,sBAAsB,GACzC,IAAIyC,QAAQb,KAAK,GACjBc;YACJ7B;QACF;IACF;AACF;AAEO,SAASlB,sBAAsBkB,UAAkB;IACtD,MAAMiE,YAAYC,0BAAAA,gBAAgB,CAAC7B,QAAQ;IAC3C,MAAMnC,gBAAgBkC,8BAAAA,oBAAoB,CAACC,QAAQ;IACnD,IAAI4B,aAAa/D,eAAe;QAC9B,OAAQA,cAAcC,IAAI;YACxB,KAAK;gBAAoB;oBACvB,MAAMgE,iBAAiBjE,cAAckE,mBAAmB;oBAExD,IAAID,kBAAkBA,eAAeE,IAAI,GAAG,GAAG;wBAC7C,wEAAwE;wBACxE,6DAA6D;wBAC7D,wDAAwD;wBACxDpF,OAAAA,OAAK,CAACqF,GAAG,CACPC,CAAAA,GAAAA,uBAAAA,4BAA4B,EAC1BrE,cAAcsE,YAAY,EAC1B,IAAIC,uBAAAA,sBAAsB,CAACR,UAAUzD,KAAK,EAAER;oBAGlD;oBACA;gBACF;YACA,KAAK;gBACH,MAAM,OAAA,cAEL,CAFK,IAAI0E,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,oEAAoE,EAAEA,WAAW,+EAA+E,CAAC,GAD7K,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBAAiB;oBACpB,MAAMmE,iBAAiBjE,cAAckE,mBAAmB;oBACxD,IAAID,kBAAkBA,eAAeE,IAAI,GAAG,GAAG;wBAC7C,OAAOjG,qBACL6F,UAAUzD,KAAK,EACfR,YACAE,cAAcO,eAAe;oBAEjC;oBACA;gBACF;YACA,KAAK;gBAAqB;oBAGxB;gBACF;YACA,KAAK;gBACH,MAAM,OAAA,cAEL,CAFK,IAAIiE,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,uEAAuE,EAAEA,WAAW,+EAA+E,CAAC,GADhL,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;YACL,KAAK;gBACH,MAAM,OAAA,cAEL,CAFK,IAAI0E,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,iEAAiE,EAAEA,WAAW,+EAA+E,CAAC,GAD1K,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,MAAM,OAAA,cAEL,CAFK,IAAI0E,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,wEAAwE,EAAEA,WAAW,oFAAoF,CAAC,GADtL,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;YACL,KAAK;YACL,KAAK;gBACH;YACF;gBACEE;QACJ;IACF;AACF;AAEO,SAASnB,uBAAuBiB,UAAkB;IACvD,MAAMiE,YAAYC,0BAAAA,gBAAgB,CAAC7B,QAAQ;IAC3C,MAAMnC,gBAAgBkC,8BAAAA,oBAAoB,CAACC,QAAQ;IAEnD,IAAI,CAAC4B,WAAW;QACd,iDAAiD;QACjD;IACF;IAEA,IAAI,CAAC/D,eAAe;QAClByE,CAAAA,GAAAA,8BAAAA,2BAA2B,EAAC3E;IAC9B;IAEA,OAAQE,cAAcC,IAAI;QACxB,KAAK;YACH,6EAA6E;YAC7E,qCAAqC;YACrC;QACF,KAAK;YAAoB;gBACvBlB,OAAAA,OAAK,CAACqF,GAAG,CACPC,CAAAA,GAAAA,uBAAAA,4BAA4B,EAC1BrE,cAAcsE,YAAY,EAC1B,IAAIC,uBAAAA,sBAAsB,CAACR,UAAUzD,KAAK,EAAER;gBAGhD;YACF;QACA,KAAK;QACL,KAAK;YAAiB;gBACpB,IAAIiE,UAAU5D,WAAW,EAAE;oBACzB;gBACF;gBACA,MAAM,OAAA,cAAiC,CAAjC,IAAIkD,cAAAA,iBAAiB,CAACvD,aAAtB,qBAAA;2BAAA;gCAAA;kCAAA;gBAAgC;YACxC;QACA,KAAK;QACL,KAAK;YACH,MAAM,OAAA,cAEL,CAFK,IAAI0E,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,oEAAoE,EAAEA,WAAW,+EAA+E,CAAC,GAD7K,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF,KAAK;QACL,KAAK;QACL,KAAK;YACH,MAAM,OAAA,cAEL,CAFK,IAAI0E,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,iEAAiE,EAAEA,WAAW,+EAA+E,CAAC,GAD1K,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF,KAAK;YACH,MAAM,OAAA,cAEL,CAFK,IAAI0E,gBAAAA,cAAc,CACtB,CAAC,EAAE,EAAE1E,WAAW,wEAAwE,EAAEA,WAAW,oFAAoF,CAAC,GADtL,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF,KAAK;YACH;QACF;YACEE;IACJ;AACF;AAEA,MAAM0E,mBAAmB;AAEzB,uFAAuF;AACvF,MAAMC,sBACJ;AAEF,2EAA2E;AAC3E,+EAA+E;AAC/E,4FAA4F;AAC5F,EAAE;AACF,mBAAmB;AACnB,8BAA8B;AAC9B,mDAAmD;AACnD,EAAE;AACF,yEAAyE;AACzE,8BAA8B;AAC9B,mCAAmC;AACnC,mDAAmD;AACnD,MAAMC,4DAA4D,IAAIC,OACpE,CAAC,uDAAuD,EAAEF,oBAAoB,yCAAyC,EAAEG,mBAAAA,yBAAyB,CAAC,cAAc,CAAC;AAGpK,MAAMC,mBAAmB,IAAIF,OAC3B,CAAC,UAAU,EAAEG,mBAAAA,sBAAsB,CAAC,QAAQ,CAAC;AAE/C,MAAMC,mBAAmB,IAAIJ,OAC3B,CAAC,UAAU,EAAEK,mBAAAA,sBAAsB,CAAC,QAAQ,CAAC;AAE/C,MAAMC,iBAAiB,IAAIN,OAAO,CAAC,UAAU,EAAEO,mBAAAA,oBAAoB,CAAC,QAAQ,CAAC;AAE7E,MAAMC,oCAAoC,IAAIR,OAC5C,CAAC,UAAU,EAAES,oBAAAA,gCAAgC,CAAC,QAAQ,CAAC;AAEzD,MAAMC,kBAAkB,IAAIV,OAC1B,CAAC,UAAU,EAAEW,oBAAAA,0BAA0B,CAAC,MAAM,EAAEC,oBAAAA,0BAA0B,CAAC,QAAQ,CAAC;AAGtF;;;mEAGmE,GACnE,SAASC,oBACPC,cAAsB,EACtBC,iBAAyC;IAEzC,MAAM,EAAEC,UAAU,EAAE,GAAGD;IACvB,IAAIC,WAAWlD,MAAM,GAAG,GAAG;QACzB,MAAMmD,QAAQP,gBAAgBQ,IAAI,CAACJ;QACnC,IAAIG,OAAO;YACT,uDAAuD;YACvD,wDAAwD;YACxD,MAAME,YAAYC,SAASH,KAAK,CAAC,EAAE,EAAE,MAAM;YAC3C,MAAMI,YAAYL,UAAU,CAACG,UAAU;YACvC,IAAIE,aAAa,MAAM;gBACrB,OAAOA;YACT;QACF;IACF;IACA,qCAAqC;IACrC,OAAOL,UAAU,CAAC,EAAE,IAAI;AAC1B;AAEA;;;;;;;;;;;;;;;;;;;;;;CAsBC,GACD,SAASM,6BACPR,cAAsB,EACtBC,iBAAyC;IAEzC,IACEhB,0DAA0DwB,IAAI,CAC5DT,iBAEF;QACAC,kBAAkBvG,oBAAoB,GAAG;IAC3C;AACF;AAEO,SAASf,0BACd+H,aAAsB,EACtBtC,SAAoB,EACpB4B,cAAsB,EACtBC,iBAAyC,EACzChG,aAAmC;IAEnC,MAAM0G,mBAAmB3G,iCAAiCC;IAE1D,IAAIuF,eAAeiB,IAAI,CAACT,iBAAiB;QACvCQ,6BAA6BR,gBAAgBC;QAC7C;IACF,OAAO,IAAIb,iBAAiBqB,IAAI,CAACT,iBAAiB;QAChDC,kBAAkBtG,kBAAkB,GAAG;QACvC;IACF,OAAO,IAAI2F,iBAAiBmB,IAAI,CAACT,iBAAiB;QAChDC,kBAAkBpG,kBAAkB,GAAG;QACvC;IACF,OAAO,IACLoF,0DAA0DwB,IAAI,CAC5DT,iBAEF;QACA,+GAA+G;QAC/G,sGAAsG;QACtG,wGAAwG;QACxGC,kBAAkBnG,iBAAiB,GAAG;QACtCmG,kBAAkBvG,oBAAoB,GAAG;QACzC;IACF,OAAO,IAAIqF,iBAAiB0B,IAAI,CAACT,iBAAiB;QAChD,wFAAwF;QACxF,gBAAgB;QAChBC,kBAAkBnG,iBAAiB,GAAG;QACtC;IACF,OAAO,IAAI6G,kBAAkB;QAC3BV,kBAAkBlG,aAAa,CAAC+B,IAAI,CAAC6E;QACrC;IACF;IAEA,IAAIC,CAAAA,GAAAA,uBAAAA,wBAAwB,EAACF,gBAAgB;QAC3CT,kBAAkBlG,aAAa,CAAC+B,IAAI,CAClC+E,gBAAgBH,eAAeV,gBAAgB;QAEjD;IACF;IAEA,MAAMtE,QAAQmF,gBACZC,CAAAA,GAAAA,uBAAAA,+BAA+B,EAAC1C,UAAUzD,KAAK,GAC/CqF,gBACA;IAEFC,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;IACrC;AACF;AAEO,IAAKxE,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;IACV,mDAAmD,GAAA,eAAA,CAAA,eAAA,CAAA,OAAA,GAAA,EAAA,GAAA;IAEnD,sDAAsD,GAAA,eAAA,CAAA,eAAA,CAAA,UAAA,GAAA,EAAA,GAAA;IAEtD,sDAAsD,GAAA,eAAA,CAAA,eAAA,CAAA,UAAA,GAAA,EAAA,GAAA;WAL5CA;;AAwBL,SAASW,6BACdqI,UAAuC;IAEvC,OAAO;QACLvG,oBAAoB;QACpBoH,sCAAsC;QACtCnH,iBAAiB;QACjBC,oBAAoB;QACpBC,mBAAmB;QACnBC,eAAe,EAAE;QACjBiH,4BAA4B,EAAE;QAC9BC,6BAA6B,EAAE;QAC/Bf;IACF;AACF;AAEO,SAASrH,6BACd6H,aAAsB,EACtBtC,SAAoB,EACpB4B,cAAsB,EACtBC,iBAAyC,EACzChG,aAAmC,EACnCiH,IAAqB,EACrBC,aAAyC;IAEzC,MAAMR,mBAAmB3G,iCAAiCC;IAE1D,IAAIuF,eAAeiB,IAAI,CAACT,iBAAiB;QACvC,kGAAkG;QAClG;IACF;IACA,iEAAiE;IACjE,kEAAkE;IAClE,uBAAuB;IACvB,MAAMoB,8BAA8BrB,oBAClCC,gBACAC;IAGF,IAAIb,iBAAiBqB,IAAI,CAACT,iBAAiB;QACzC,MAAMtE,QAAQmF,gBACZK,SAAAA,IACIG,CAAAA,GAAAA,uBAAAA,uBAAuB,EAACjD,UAAUzD,KAAK,IACvCuG,SAAAA,IACEI,CAAAA,GAAAA,uBAAAA,0BAA0B,EAAClD,UAAUzD,KAAK,IAC1C4G,CAAAA,GAAAA,uBAAAA,0BAA0B,EAACnD,UAAUzD,KAAK,GAChDqF,gBACAoB;QAEFnB,kBAAkBrG,eAAe,GAAG8B;QACpC;IACF;IACA,IAAI4D,iBAAiBmB,IAAI,CAACT,iBAAiB;QACzC,MAAMtE,QAAQmF,gBACZK,SAAAA,IACIM,CAAAA,GAAAA,uBAAAA,uBAAuB,EAACpD,UAAUzD,KAAK,IACvCuG,SAAAA,IACEO,CAAAA,GAAAA,uBAAAA,0BAA0B,EAACrD,UAAUzD,KAAK,IAC1C+G,CAAAA,GAAAA,uBAAAA,0BAA0B,EAACtD,UAAUzD,KAAK,GAChDqF,gBACAoB;QAEFnB,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;QACrC;IACF;IAEA,MAAMiG,mBACJjC,kCAAkCU,IAAI,CAACJ;IACzC,IAAI,CAAC2B,kBAAkB;QACrB,+DAA+D;QAC/D,oDAAoD;QACpD,8DAA8D;QAC9D,+DAA+D;QAE/D,oEAAoE;QACpE,8EAA8E;QAC9E,kEAAkE;QAClE,IAAIC,CAAAA,GAAAA,kBAAAA,6BAA6B,EAACT,gBAAgB;YAChDlB,kBAAkBc,oCAAoC,GAAG;YACzDd,kBAAkBnG,iBAAiB,GAAG,KAAK,qEAAqE;;YAChH;QACF,OAAO;YACL,yCAAyC;YACzC,mEAAmE;YACnE,oEAAoE;YACpE,yEAAyE;YACzE,MAAM6C,UAAU,CAAC,OAAO,EAAEyB,UAAUzD,KAAK,CAAC,mHAAmH,CAAC;YAC9J,MAAMe,QAAQmF,gBACZ,OAAA,cAAkB,CAAlB,IAAI9E,MAAMY,UAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAAiB,IACjBqD,gBACAoB;YAEFnB,kBAAkBe,0BAA0B,CAAClF,IAAI,CAACJ;YAClD;QACF;IACF,OAAO;QACL,sDAAsD;QACtD,EAAE;QACF,iFAAiF;QACjF,iFAAiF;QACjF,uGAAuG;QACvG,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,SAAS;QACT,QAAQ;QACR,gBAAgB;QAChB,QAAQ;QACR,6CAA6C;QAC7C,EAAE;QACF,WAAW;QACX,QAAQ;QACR,6CAA6C;QAC7C,QAAQ;QACR,gBAAgB;QAChB,EAAE;QACF,MAAMmG,mBAAmB9C,iBAAiBqB,IAAI,CAACJ;QAC/C,IAAI6B,kBAAkB;YACpB,IAAIA,iBAAiBC,KAAK,GAAGH,iBAAiBG,KAAK,EAAE;gBACnD7B,kBAAkBnG,iBAAiB,GAAG;gBACtC;YACF,OAAO;YACL,wBAAwB;YAC1B;QACF;IACF;IAEA,IAAI6G,kBAAkB;QACpB,IACES,gCAAgC,QAChCT,iBAAiBoB,KAAK,KAAK/F,WAC3B;YACA2E,iBAAiBoB,KAAK,GAAGX;QAC3B;QACAnB,kBAAkBlG,aAAa,CAAC+B,IAAI,CAAC6E;QACrC;IACF;IAEA,IAAIC,CAAAA,GAAAA,uBAAAA,wBAAwB,EAACF,gBAAgB;QAC3CT,kBAAkBlG,aAAa,CAAC+B,IAAI,CAClC+E,gBACEH,eACAV,gBACAoB;QAGJ;IACF;IAEA,MAAM1F,QAAQmF,gBACZK,SAAAA,IACIc,CAAAA,GAAAA,uBAAAA,+BAA+B,EAAC5D,UAAUzD,KAAK,IAC/CuG,SAAAA,IACEe,CAAAA,GAAAA,uBAAAA,kCAAkC,EAAC7D,UAAUzD,KAAK,IAClDuH,CAAAA,GAAAA,uBAAAA,kCAAkC,EAAC9D,UAAUzD,KAAK,GACxDqF,gBACAoB;IAEFnB,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;IACrC;AACF;AAEO,SAAS1C,6BACdoF,SAAoB,EACpB6B,iBAAyC,EACzCkC,WAAoB,EACpBnC,cAAsB;IAEtB,MAAM2B,mBACJjC,kCAAkCU,IAAI,CAACJ;IACzC,IAAI,CAAC2B,kBAAkB;QACrB,yDAAyD;QACzD,yDAAyD;QAEzD,+CAA+C;QAC/C,gEAAgE;QAChE,0DAA0D;QAC1D,uCAAuC;QACvC,MAAMjG,QAAQmF,gBACZ,OAAA,cAGC,CAHD,IAAI9E,MACF,2HACA;YAAEgG,OAAOI;QAAY,IAFvB,qBAAA;mBAAA;wBAAA;0BAAA;QAGA,IACAnC,gBACA;QAEFC,kBAAkBgB,2BAA2B,CAACnF,IAAI,CAACJ;IACrD,OAAO;QACL,sDAAsD;QACtD,2EAA2E;QAC3E,2EAA2E;QAC3E,4BAA4B;QAC5B,MAAMmG,mBAAmB9C,iBAAiBqB,IAAI,CAACJ;QAC/C,IAAI6B,kBAAkB;YACpB,IAAIA,iBAAiBC,KAAK,GAAGH,iBAAiBG,KAAK,EAAE;gBACnD,oFAAoF;gBACpF,mEAAmE;gBACnE,yDAAyD;gBACzD,wBAAwB;gBACxB;YACF,OAAO;YACL,wBAAwB;YAC1B;QACF;QACA,MAAMnF,UAAU,CAAC,OAAO,EAAEyB,UAAUzD,KAAK,CAAC,+FAA+F,CAAC;QAC1I,MAAMe,QAAQmF,gBACZ,OAAA,cAA0C,CAA1C,IAAI9E,MAAMY,SAAS;YAAEoF,OAAOI;QAAY,IAAxC,qBAAA;mBAAA;wBAAA;0BAAA;QAAyC,IACzCnC,gBACA,KAAK,2DAA2D;;QAElEC,kBAAkBe,0BAA0B,CAAClF,IAAI,CAACJ;IACpD;AACF;AAEO,SAAS5C,+BACd4H,aAAsB,EACtBtC,SAAoB,EACpB4B,cAAsB,EACtBC,iBAAyC,EACzChG,aAAmC;IAEnC,MAAM0G,mBAAmB3G,iCAAiCC;IAE1D,IAAIuF,eAAeiB,IAAI,CAACT,iBAAiB;QACvCQ,6BAA6BR,gBAAgBC;QAC7C;IACF,OAAO,IAAIb,iBAAiBqB,IAAI,CAACT,iBAAiB;QAChD,MAAMtE,QAAQmF,gBACZU,CAAAA,GAAAA,uBAAAA,0BAA0B,EAACnD,UAAUzD,KAAK,GAC1CqF,gBACA;QAEFC,kBAAkBrG,eAAe,GAAG8B;QACpC;IACF,OAAO,IAAI4D,iBAAiBmB,IAAI,CAACT,iBAAiB;QAChD,MAAMtE,QAAQmF,gBACZa,CAAAA,GAAAA,uBAAAA,0BAA0B,EAACtD,UAAUzD,KAAK,GAC1CqF,gBACA;QAEFC,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;QACrC;IACF,OAAO,IACLuD,0DAA0DwB,IAAI,CAC5DT,iBAEF;QACA,+GAA+G;QAC/G,sGAAsG;QACtG,wGAAwG;QACxGC,kBAAkBnG,iBAAiB,GAAG;QACtCmG,kBAAkBvG,oBAAoB,GAAG;QACzC;IACF,OAAO,IAAIqF,iBAAiB0B,IAAI,CAACT,iBAAiB;QAChD,wFAAwF;QACxF,gBAAgB;QAChBC,kBAAkBnG,iBAAiB,GAAG;QACtC;IACF,OAAO,IAAI6G,kBAAkB;QAC3BV,kBAAkBlG,aAAa,CAAC+B,IAAI,CAAC6E;QACrC;IACF;IAEA,IAAIC,CAAAA,GAAAA,uBAAAA,wBAAwB,EAACF,gBAAgB;QAC3CT,kBAAkBlG,aAAa,CAAC+B,IAAI,CAClC+E,gBAAgBH,eAAeV,gBAAgB;QAEjD;IACF;IAEA,MAAMtE,QAAQmF,gBACZuB,CAAAA,GAAAA,uBAAAA,sBAAsB,EAAChE,UAAUzD,KAAK,GACtCqF,gBACA;IAEFC,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;IACrC;AACF;AAEO,SAAS3C,8BACd2H,aAAsB,EACtBtC,SAAoB,EACpB4B,cAAsB,EACtBC,iBAAyC,EACzChG,aAAmC;IAEnC,MAAM0G,mBAAmB3G,iCAAiCC;IAE1D,IAAIuF,eAAeiB,IAAI,CAACT,iBAAiB;QACvCQ,6BAA6BR,gBAAgBC;QAC7C;IACF,OAAO,IAAIb,iBAAiBqB,IAAI,CAACT,iBAAiB;QAChD,MAAMtE,QAAQmF,gBACZS,CAAAA,GAAAA,uBAAAA,0BAA0B,EAAClD,UAAUzD,KAAK,GAC1CqF,gBACA;QAEFC,kBAAkBrG,eAAe,GAAG8B;QACpC;IACF,OAAO,IAAI4D,iBAAiBmB,IAAI,CAACT,iBAAiB;QAChD,MAAMtE,QAAQmF,gBACZY,CAAAA,GAAAA,uBAAAA,0BAA0B,EAACrD,UAAUzD,KAAK,GAC1CqF,gBACA;QAEFC,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;QACrC;IACF,OAAO,IACLuD,0DAA0DwB,IAAI,CAC5DT,iBAEF;QACA,+GAA+G;QAC/G,sGAAsG;QACtG,wGAAwG;QACxGC,kBAAkBnG,iBAAiB,GAAG;QACtCmG,kBAAkBvG,oBAAoB,GAAG;QACzC;IACF,OAAO,IAAIqF,iBAAiB0B,IAAI,CAACT,iBAAiB;QAChD,wFAAwF;QACxF,gBAAgB;QAChBC,kBAAkBnG,iBAAiB,GAAG;QACtC;IACF,OAAO,IAAI6G,kBAAkB;QAC3BV,kBAAkBlG,aAAa,CAAC+B,IAAI,CAAC6E;QACrC;IACF;IAEA,IAAIC,CAAAA,GAAAA,uBAAAA,wBAAwB,EAACF,gBAAgB;QAC3CT,kBAAkBlG,aAAa,CAAC+B,IAAI,CAClC+E,gBAAgBH,eAAeV,gBAAgB;QAEjD;IACF;IAEA,MAAMtE,QAAQmF,gBACZwB,CAAAA,GAAAA,uBAAAA,sBAAsB,EAACjE,UAAUzD,KAAK,GACtCqF,gBACA;IAEFC,kBAAkBlG,aAAa,CAAC+B,IAAI,CAACJ;IACrC;AACF;AAEA;;;;;;CAMC,GACD,SAASmF,gBACPnF,KAAY,EACZsE,cAAsB,EACtBsC,kBAAwC;IAExC,MAAMC,aACJpH,QAAQC,GAAG,CAACC,QAAQ,gCAAK,gBAAgBjC,OAAAA,OAAK,CAACoJ,iBAAiB,GAC5DpJ,OAAAA,OAAK,CAACoJ,iBAAiB,KACvB;IAEN,IAAIF,uBAAuB,MAAM;QAC/B5G,MAAMqG,KAAK,GAAGO;IAChB;IACA,2GAA2G;IAC3G,EAAE;IACF5G,MAAMR,KAAK,GACTQ,MAAM+G,IAAI,GAAG,OAAO/G,MAAMiB,OAAO,GAAI4F,CAAAA,cAAcvC,cAAa;IAClE,OAAOtE;AACT;AAEO,IAAKtE,eAAAA,WAAAA,GAAAA,SAAAA,YAAAA;;;;WAAAA;;AAML,SAASiB,0BACd+F,SAAoB,EACpB1C,KAAY;IAEZgH,QAAQhH,KAAK,CAACA;IACdiH,CAAAA,GAAAA,uBAAAA,iBAAiB,EAACvE,UAAUzD,KAAK;AACnC;AAEO,SAASlC,kBACd2F,SAAoB,EACpBnB,aAAmC;IAEnC,IAAIA,cAAczD,yBAAyB,EAAE;QAC3CnB,0BACE+F,WACAnB,cAAczD,yBAAyB;QAEzC,MAAM,IAAIkB,yBAAAA,qBAAqB;IACjC;AACF;AAEO,SAASlC,yBACd4F,SAAoB,EACpBwE,OAAqB,EACrB3C,iBAAyC,EACzChD,aAAmC,EACnC4F,qBAA8B;IAE9BpK,kBAAkB2F,WAAWnB;IAE7B,8EAA8E;IAC9E,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,6DAA6D;IAC7D,IACE2F,YAAAA,KACA3C,kBAAkBnG,iBAAiB,KAAK,SACxCmG,kBAAkBtG,kBAAkB,EACpC;QACA+I,QAAQhH,KAAK,CAACoH,CAAAA,GAAAA,uBAAAA,mCAAmC,EAAC1E,UAAUzD,KAAK,EAAEgC,OAAO;QAC1E,MAAM,IAAIjC,yBAAAA,qBAAqB;IACjC;IAEA,sEAAsE;IACtE,qEAAqE;IACrE,+CAA+C;IAC/C,6EAA6E;IAC7E,cAAc;IACd,4EAA4E;IAC5E,IAAImI,yBAAyB5C,kBAAkBvG,oBAAoB,EAAE;QACnE;IACF;IAEA,IAAIkJ,YAAAA,GAA+B;QACjC,oEAAoE;QACpE,sEAAsE;QACtE,uEAAuE;QACvE,MAAM7I,gBAAgBkG,kBAAkBlG,aAAa;QACrD,IAAIA,cAAciD,MAAM,GAAG,GAAG;YAC5B,IAAK,IAAI+F,IAAI,GAAGA,IAAIhJ,cAAciD,MAAM,EAAE+F,IAAK;gBAC7C1K,0BAA0B+F,WAAWrE,aAAa,CAACgJ,EAAE;YACvD;YAEA,MAAM,IAAIrI,yBAAAA,qBAAqB;QACjC;QAEA,sEAAsE;QACtE,wDAAwD;QACxD,yEAAyE;QACzE,wDAAwD;QACxD,IAAIuF,kBAAkBpG,kBAAkB,EAAE;YACxC6I,QAAQhH,KAAK,CACXsH,CAAAA,GAAAA,uBAAAA,mCAAmC,EAAC5E,UAAUzD,KAAK,EAAEgC,OAAO;YAE9D,MAAM,IAAIjC,yBAAAA,qBAAqB;QACjC;QAEA,IAAIkI,YAAAA,GAAgC;YAClC,6EAA6E;YAC7E,iFAAiF;YACjF,2CAA2C;YAC3CF,QAAQhH,KAAK,CACX,CAAC,OAAO,EAAE0C,UAAUzD,KAAK,CAAC,wGAAwG,CAAC;YAErI,MAAM,IAAID,yBAAAA,qBAAqB;QACjC;IACF;AACF;AAEO,SAASxC,uCACdkG,SAAoB,EACpBwE,OAAqB,EACrB3C,iBAAyC,EACzC4C,qBAA8B;IAE9B,8EAA8E;IAC9E,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,6DAA6D;IAC7D,IACED,YAAAA,KACA3C,kBAAkBnG,iBAAiB,KAAK,SACxCmG,kBAAkBlG,aAAa,CAACiD,MAAM,KAAK,KAC3CiD,kBAAkBrG,eAAe,EACjC;QACA,OAAO;YAACqG,kBAAkBrG,eAAe;SAAC;IAC5C;IAEA,sEAAsE;IACtE,qEAAqE;IACrE,+CAA+C;IAC/C,6EAA6E;IAC7E,cAAc;IACd,4EAA4E;IAC5E,IAAIiJ,yBAAyB5C,kBAAkBvG,oBAAoB,EAAE;QACnE,OAAO,EAAE;IACX;IAEA,IAAIkJ,YAAAA,GAA+B;QACjC,oEAAoE;QACpE,sEAAsE;QACtE,uEAAuE;QACvE,MAAM7I,gBAAgBkG,kBAAkBlG,aAAa;QACrD,IAAIA,cAAciD,MAAM,GAAG,GAAG;YAC5B,OAAOjD;QACT;QAEA,IAAI6I,YAAAA,GAAgC;YAClC,6EAA6E;YAC7E,iFAAiF;YACjF,2CAA2C;YAC3C,OAAO;gBACL,OAAA,cAEC,CAFD,IAAI/D,gBAAAA,cAAc,CAChB,CAAC,OAAO,EAAET,UAAUzD,KAAK,CAAC,8EAA8E,CAAC,GAD3G,qBAAA;2BAAA;gCAAA;kCAAA;gBAEA;aACD;QACH;IACF;IACA,4DAA4D;IAC5D,OAAO,EAAE;AACX;AAgBO,SAAS1C,sCACdmG,SAAoB,EACpBwE,OAAqB,EACrB3C,iBAAyC,EACzCgD,wBAAgE,EAChE9B,aAAyC,EACzC+B,iBAA0B;IAE1B,mGAAmG;IACnG,IAAID,0BAA0B;QAC5B,MAAM,EAAEE,mBAAmB,EAAE,GAAGF;QAChC,IAAIE,oBAAoBnG,MAAM,GAAG,GAAG;YAClC,OAAOmG;QACT;IACF;IAEA,MAAM,EAAEnC,0BAA0B,EAAE,GAAGf;IACvC,IAAIe,2BAA2BhE,MAAM,GAAG,GAAG;QACzC,IAAI7B,QAAQC,GAAG,CAACgI,iBAAiB,YAAIF,mBAAmB;YACtD,6DAA6D;YAC7D,+DAA+D;YAC/D,iEAAiE;YACjE,OAAO,EAAE;QACX;QACA,OAAOlC;IACT;IAEA,sDAAsD;IACtD,oDAAoD;IACpD,IAAI4B,YAAAA,GAA+B;QACjC,MAAM7I,gBAAgBkG,kBAAkBlG,aAAa;QACrD,IAAIA,cAAciD,MAAM,GAAG,GAAG;YAC5B,OAAOjD;QACT;QAEA,IACE6I,YAAAA,KACA,CAAC3C,kBAAkBc,oCAAoC,IACvDa,CAAAA,GAAAA,kBAAAA,6BAA6B,EAACT,gBAC9B;YACA,oEAAoE;YACpE,oEAAoE;YACpE,qCAAqC;YACrC,OAAO,OAAA,cAEN,CAFM,IAAItC,gBAAAA,cAAc,CACvB,CAAC,OAAO,EAAET,UAAUzD,KAAK,CAAC,0FAA0F,CAAC,GADhH,qBAAA;uBAAA;4BAAA;8BAAA;YAEP;QACF;IACF,OAAO;QACL,MAAMZ,gBAAgBkG,kBAAkBlG,aAAa;QACrD,IAAIA,cAAciD,MAAM,GAAG,GAAG;YAC5B,OAAOjD;QACT;QAEA,IACEkG,kBAAkBnG,iBAAiB,KAAK,SACxCmG,kBAAkBrG,eAAe,EACjC;YACA,OAAO;gBAACqG,kBAAkBrG,eAAe;aAAC;QAC5C;IACF;IAEA,oEAAoE;IACpE,oEAAoE;IACpE,iEAAiE;IACjE,qEAAqE;IACrE,6DAA6D;IAC7D,8DAA8D;IAC9D,IAAI,CAACgI,CAAAA,GAAAA,kBAAAA,6BAA6B,EAACT,gBAAgB;QACjD,MAAM,EAAEF,2BAA2B,EAAE,GAAGhB;QACxC,MAAMoD,mBAAmBpD,kBAAkBC,UAAU,CAAC,EAAE;QACxD,IAAIe,4BAA4BjE,MAAM,KAAK,GAAG;YAC5C,MAAMsG,eAAyB,EAAE;YACjC,KAAK,MAAM,CAACC,IAAIC,UAAU,IAAIrC,cAAcsC,WAAW,CAAE;gBACvD,IAAI,CAACtC,cAAcuC,WAAW,CAACC,GAAG,CAACJ,KAAK;oBACtC,KAAK,MAAMK,YAAYJ,UAAW;wBAChC,IAAIK,aAAaD,SACdE,OAAO,CAAC,sBAAsB,IAC9BA,OAAO,CAAC3I,QAAQ4I,GAAG,KAAK,KAAK,IAC7BD,OAAO,CAAC3I,QAAQ4I,GAAG,KAAK,MAAM;wBACjCT,aAAaxH,IAAI,CAAC+H;oBACpB;gBACF;YACF;YACAP,aAAaU,IAAI;YACjB,OAAOC,CAAAA,GAAAA,iBAAAA,4BAA4B,EAAC7F,UAAUzD,KAAK,EAAE2I;QACvD,OAAO,IAAInI,QAAQC,GAAG,CAACgI,iBAAiB,YAAIF,mBAAmB;YAC7D,gEAAgE;YAChE,6DAA6D;YAC7D,0DAA0D;YAC1D,OAAO,EAAE;QACX,OAAO,IAAIjC,4BAA4BjE,MAAM,KAAK,GAAG;YACnD,MAAML,UAAU,CAAC,OAAO,EAAEyB,UAAUzD,KAAK,CAAC,6HAA6H,CAAC;YACxK,MAAMe,QAAQ2H,qBAAqB,OAAOA,qBAAqB,IAAItH;YACnEL,MAAM+G,IAAI,GAAG;YACb/G,MAAMiB,OAAO,GAAGA;YAChB,OAAO,IAAIuH,eAAe;gBACxBxI;gBACAuF,2BAA2B,CAAC,EAAE;aAC/B;QACH,OAAO;YACL,MAAMtE,UAAU,CAAC,OAAO,EAAEyB,UAAUzD,KAAK,CAAC,qIAAqI,CAAC;YAChL,MAAMe,QAAQ2H,qBAAqB,OAAOA,qBAAqB,IAAItH;YACnEL,MAAM+G,IAAI,GAAG;YACb/G,MAAMiB,OAAO,GAAGA;YAChB,OAAO,IAAIuH,eAAe;gBACxBxI;mBACIuF;aACL;QACH;IACF;IAEA,4DAA4D;IAC5D,OAAO,EAAE;AACX","ignoreList":[0]}}, + {"offset": {"line": 22467, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/app-render/instant-validation/boundary-constants.ts"],"sourcesContent":["export const INSTANT_VALIDATION_BOUNDARY_NAME =\n '__next_instant_validation_boundary__'\n\nexport const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'\nexport const INSTANT_SLOT_MARKER_SUFFIX = '__'\n"],"names":["INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","INSTANT_VALIDATION_BOUNDARY_NAME"],"mappings":";;;;;;;;;;;;;;;IAGaA,0BAA0B,EAAA;eAA1BA;;IACAC,0BAA0B,EAAA;eAA1BA;;IAJAC,gCAAgC,EAAA;eAAhCA;;;AAAN,MAAMA,mCACX;AAEK,MAAMF,6BAA6B;AACnC,MAAMC,6BAA6B","ignoreList":[0]}}, + {"offset": {"line": 22499, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/app-render/instant-validation/boundary-tracking.tsx"],"sourcesContent":["export type ValidationBoundaryTracking = {\n /**\n * Map from boundary id (the SegmentPath where a validation boundary is\n * placed) to the file paths of modules inside that boundary's subtree.\n * When the boundary spans multiple parallel slots, each slot contributes\n * its own first-found module path so all unrendered segments can be\n * reported together.\n */\n requiredIds: Map\n renderedIds: Set\n}\n\nexport function createValidationBoundaryTracking(): ValidationBoundaryTracking {\n return {\n requiredIds: new Map(),\n renderedIds: new Set(),\n }\n}\n\nexport function allRequiredBoundariesRendered(\n state: ValidationBoundaryTracking\n): boolean {\n for (const id of state.requiredIds.keys()) {\n if (!state.renderedIds.has(id)) {\n return false\n }\n }\n return true\n}\n"],"names":["allRequiredBoundariesRendered","createValidationBoundaryTracking","requiredIds","Map","renderedIds","Set","state","id","keys","has"],"mappings":";;;;;;;;;;;;;;IAmBgBA,6BAA6B,EAAA;eAA7BA;;IAPAC,gCAAgC,EAAA;eAAhCA;;;AAAT,SAASA;IACd,OAAO;QACLC,aAAa,IAAIC;QACjBC,aAAa,IAAIC;IACnB;AACF;AAEO,SAASL,8BACdM,KAAiC;IAEjC,KAAK,MAAMC,MAAMD,MAAMJ,WAAW,CAACM,IAAI,GAAI;QACzC,IAAI,CAACF,MAAMF,WAAW,CAACK,GAAG,CAACF,KAAK;YAC9B,OAAO;QACT;IACF;IACA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 22538, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/app-render/staged-rendering.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../../shared/lib/promise-with-resolvers'\n\nexport enum RenderStage {\n Before = 1,\n //\n ShellStatic = 11,\n Static = 13,\n //\n ShellRuntime = 21,\n Runtime = 23,\n //\n Dynamic = 30,\n //\n Abandoned = 40,\n}\n\nexport type AdvanceableRenderStage = Exclude<\n RenderStage,\n RenderStage.Before | RenderStage.Abandoned\n>\n\nexport const RENDER_STAGE_ADVANCE_ORDER: AdvanceableRenderStage[] = [\n RenderStage.ShellStatic,\n RenderStage.Static,\n //\n RenderStage.ShellRuntime,\n RenderStage.Runtime,\n //\n RenderStage.Dynamic,\n]\n\nexport function getNextStage(\n stage: Exclude\n) {\n return RENDER_STAGE_ADVANCE_ORDER[\n RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1\n ]\n}\n\nexport function isAdvanceableRenderStage(\n stage: RenderStage\n): stage is AdvanceableRenderStage {\n return RenderStage.Before < stage && stage <= RenderStage.Dynamic\n}\n\nexport enum SyncIOMode {\n /** Sync IO does not error in any stage. */\n Untracked = 1,\n /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */\n AllowedInRuntimeOrDynamic = 2,\n /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */\n AllowedInDynamic = 3,\n}\n\nexport class StagedRenderingController {\n private abortSignal: AbortSignal | null\n private abandonController: AbortController | null\n private syncIOMode: SyncIOMode\n public readonly finalStage: AdvanceableRenderStage | null\n\n currentStage: RenderStage = RenderStage.Before\n\n syncInterruptReason: Error | null = null\n\n triggers: Record = {\n [RenderStage.ShellStatic]: createStageTrigger(),\n [RenderStage.Static]: createStageTrigger(),\n //\n [RenderStage.ShellRuntime]: createStageTrigger(),\n [RenderStage.Runtime]: createStageTrigger(),\n //\n [RenderStage.Dynamic]: createStageTrigger(),\n }\n\n constructor({\n abortSignal,\n abandonController,\n syncIO,\n finalStage,\n }: {\n abortSignal: AbortSignal | null\n abandonController: AbortController | null\n syncIO: SyncIOMode\n finalStage: AdvanceableRenderStage | null\n }) {\n this.abortSignal = abortSignal\n this.abandonController = abandonController\n this.syncIOMode = syncIO\n this.finalStage = finalStage\n\n if (abortSignal) {\n abortSignal.addEventListener(\n 'abort',\n () => {\n // Reject all stage promises that haven't already been resolved.\n // `cancelStageTrigger` is a noop if the trigger already resolved.\n const { reason } = abortSignal\n for (const trigger of Object.values(this.triggers)) {\n cancelStageTrigger(trigger, reason)\n }\n },\n { once: true }\n )\n }\n\n if (abandonController) {\n abandonController.signal.addEventListener(\n 'abort',\n () => {\n this.abandonRender()\n },\n { once: true }\n )\n }\n }\n\n onStage(stage: AdvanceableRenderStage, callback: () => void) {\n addSyncTriggerListener(this.triggers[stage], callback)\n }\n\n shouldTrackSyncInterrupt(): boolean {\n if (this.syncIOMode === SyncIOMode.Untracked) {\n return false\n }\n\n switch (this.currentStage) {\n case RenderStage.Before:\n // If we haven't started the render yet, it can't be interrupted.\n return false\n case RenderStage.ShellStatic:\n case RenderStage.Static:\n return true\n case RenderStage.ShellRuntime:\n case RenderStage.Runtime: {\n switch (this.syncIOMode) {\n case SyncIOMode.AllowedInRuntimeOrDynamic: {\n // Before `partialPrefetching`: Sync IO only errors in static stages.\n return false\n }\n case SyncIOMode.AllowedInDynamic: {\n return true\n }\n }\n // NOT a fallthrough, but eslint doesn't understand that\n }\n case RenderStage.Dynamic:\n case RenderStage.Abandoned:\n return false\n default:\n this.currentStage satisfies never\n return false\n }\n }\n\n /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */\n syncInterruptCurrentStageWithReason(reason: Error) {\n const { currentStage } = this\n if (\n currentStage === RenderStage.Before ||\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Not interruptible. Defensive noop.\n return\n }\n\n // If Sync IO occurs during an abandonable render, we trigger the abandon.\n // The abandon listener will call abandonRender which advances through\n // stages to let caches fill before marking as Abandoned.\n if (this.abandonController) {\n this.abandonController.abort()\n return\n }\n\n if (this.abortSignal) {\n // If this is an abortable render, we capture the interruption reason and stop advancing.\n // We don't release any more promises.\n // The caller is expected to abort the signal.\n this.syncInterruptReason = reason\n this.currentStage = RenderStage.Abandoned\n return\n }\n\n // If we're in a non-abandonable & non-abortable render,\n // we need to advance to the Dynamic stage and capture the interruption reason.\n // (in dev, this will be the restarted render)\n this.syncInterruptReason = reason\n this.advanceStage(RenderStage.Dynamic)\n }\n\n getSyncInterruptReason() {\n return this.syncInterruptReason\n }\n\n getStageEndTime(stage: Exclude) {\n return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity\n }\n\n private abandonRender() {\n // In staged rendering, only the initial render is abandonable.\n // We can abandon the initial render if\n // 1. We notice a cache miss, and need to wait for caches to fill\n // 2. A sync IO error occurs, and the render should be interrupted\n // (this might be a lazy intitialization of a module,\n // so we still want to restart in this case and see if it still occurs)\n // In either case, we'll be doing another render after this one,\n // so we only want to unblock the next stage, not Dynamic, because\n // unblocking the dynamic stage would likely lead to wasted (uncached) IO.\n\n const { currentStage } = this\n\n if (currentStage === RenderStage.Before) {\n throw new InvariantError(\n \"A render that hasn't started yet cannot be abandoned\"\n )\n }\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // We shouldn't ever trigger an abandon in these. Defensive noop.\n return\n }\n\n // Resolve all stages after the current one, up to runtime (excluding dynamic)\n const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(\n RenderStage.Dynamic\n )\n for (let i = nextStageIx; i < dynamicStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n\n this.currentStage = RenderStage.Abandoned\n }\n\n advanceStage(targetStage: AdvanceableRenderStage) {\n if (this.finalStage !== null && targetStage > this.finalStage) {\n throw new InvariantError(\n `Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`\n )\n }\n const { currentStage } = this\n\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Terminal stages, nowhere left to advance.\n return\n }\n\n // If we're already at the target stage or beyond, do nothing.\n if (targetStage <= currentStage) {\n return\n }\n\n this.currentStage = targetStage\n\n // Resolve all stages between the current stage and the target.\n const nextStageIx =\n currentStage === RenderStage.Before\n ? 0\n : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage)\n for (let i = nextStageIx; i <= targetStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n }\n\n private resolveStage(stage: AdvanceableRenderStage) {\n fireStageTrigger(this.triggers[stage])\n }\n\n private getStagePromise(stage: AdvanceableRenderStage): Promise {\n return this.triggers[stage].promise\n }\n\n waitForStage(stage: AdvanceableRenderStage) {\n return this.getStagePromise(stage)\n }\n\n delayUntilStage(\n stage: AdvanceableRenderStage,\n displayName: string | undefined,\n resolvedValue: T\n ): Promise {\n const stagePromise = this.getStagePromise(stage)\n\n const promise =\n process.env.NODE_ENV === 'development'\n ? makeDevtoolsIOPromiseFromIOTrigger(\n stagePromise,\n displayName,\n resolvedValue\n )\n : stagePromise.then(() => resolvedValue)\n\n // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked.\n // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).\n // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.\n if (this.abortSignal) {\n promise.catch(ignoreReject)\n }\n return promise\n }\n}\n\nfunction ignoreReject() {}\n\n// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,\n// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`\n// is confusing, we should clean it up.\nfunction makeDevtoolsIOPromiseFromIOTrigger(\n ioTrigger: Promise,\n displayName: string | undefined,\n resolvedValue: T\n): Promise {\n // If we create a `new Promise` and give it a displayName\n // (with no userspace code above us in the stack)\n // React Devtools will use it as the IO cause when determining \"suspended by\".\n // In particular, it should shadow any inner IO that resolved/rejected the promise\n // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)\n const promise = new Promise((resolve, reject) => {\n ioTrigger.then(resolve.bind(null, resolvedValue), reject)\n })\n if (displayName !== undefined) {\n // @ts-expect-error\n promise.displayName = displayName\n }\n return promise\n}\n\ntype StageTrigger = {\n state: 'pending' | 'triggered' | 'cancelled'\n triggeredAt: number | null\n promise: Promise\n _listeners: Array<() => void>\n _resolvePromise: () => void\n _rejectPromise: (reason: unknown) => void\n}\n\nfunction addSyncTriggerListener(trigger: StageTrigger, listener: () => void) {\n if (trigger.state === 'pending') {\n trigger._listeners.push(listener)\n } else {\n listener()\n }\n}\n\nfunction createStageTrigger(): StageTrigger {\n const { promise, resolve, reject } = createPromiseWithResolvers()\n return {\n state: 'pending',\n triggeredAt: null,\n promise,\n _listeners: [],\n _resolvePromise: resolve,\n _rejectPromise: reject,\n }\n}\n\nfunction fireStageTrigger(trigger: StageTrigger) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'triggered'\n trigger.triggeredAt = performance.now() + performance.timeOrigin\n try {\n const { _listeners: listeners } = trigger\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n listeners.length = 0\n } finally {\n trigger._resolvePromise()\n }\n}\n\nfunction cancelStageTrigger(trigger: StageTrigger, reason: unknown) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'cancelled'\n // we didn't trigger, so don't save `triggeredAt`.\n\n // We're not gonna fire the listeners, we may as well free them.\n trigger._listeners.length = 0\n\n // Suppress unhandled rejection warnings for promises that no one is awaiting.\n trigger.promise.catch(ignoreReject)\n trigger._rejectPromise(reason)\n}\n"],"names":["RENDER_STAGE_ADVANCE_ORDER","RenderStage","StagedRenderingController","SyncIOMode","getNextStage","isAdvanceableRenderStage","stage","indexOf","constructor","abortSignal","abandonController","syncIO","finalStage","currentStage","syncInterruptReason","triggers","createStageTrigger","syncIOMode","addEventListener","reason","trigger","Object","values","cancelStageTrigger","once","signal","abandonRender","onStage","callback","addSyncTriggerListener","shouldTrackSyncInterrupt","syncInterruptCurrentStageWithReason","abort","advanceStage","getSyncInterruptReason","getStageEndTime","triggeredAt","Infinity","InvariantError","nextStageIx","dynamicStageIx","i","resolveStage","targetStage","targetStageIx","fireStageTrigger","getStagePromise","promise","waitForStage","delayUntilStage","displayName","resolvedValue","stagePromise","process","env","NODE_ENV","makeDevtoolsIOPromiseFromIOTrigger","then","catch","ignoreReject","ioTrigger","Promise","resolve","reject","bind","undefined","listener","state","_listeners","push","createPromiseWithResolvers","_resolvePromise","_rejectPromise","performance","now","timeOrigin","listeners","length"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 22863, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import {\n RenderStage,\n type AdvanceableRenderStage,\n} from './app-render/staged-rendering'\nimport type {\n RequestStore,\n WorkUnitStore,\n} from './app-render/work-unit-async-storage.external'\nimport { workUnitAsyncStorage } from './app-render/work-unit-async-storage.external'\nimport { getServerReact, getClientReact } from './runtime-reacts.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\nconst CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'\n\nexport class ClientHookDynamicError extends Error {\n public readonly digest = CLIENT_HOOK_DYNAMIC\n\n constructor(route: string, expression: string) {\n super(\n `Route \"${route}\": Next.js encountered URL data \\`${expression}\\` in a Client Component outside of \\`\\`.\\n\\n` +\n `This blocks prerendering because the value is only available at runtime.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Wrap the component in \\`\\` so the hook value streams in after prerendering\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`\n )\n }\n}\n\nexport function isClientHookDynamicError(\n err: unknown\n): err is ClientHookDynamicError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === CLIENT_HOOK_DYNAMIC\n}\n\ntype AbortListeners = Array<() => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * Constructs a promise that never resolves, standing in for *dynamic* data:\n * data that is only available during a real dynamic request and hangs in\n * every kind of prerender — `io()`, `connection()`, uncached `fetch()`.\n *\n * This is primarily useful for cacheComponents where we use promise\n * resolution timing to determine which parts of a render can be included in a\n * prerender.\n *\n * Records nothing on the prerender store: the promise's holes are only ever\n * filled by a real dynamic request, so a runtime prefetch response would have\n * the same holes as the static one. If the data source would resolve during a\n * runtime prerender, use `makeRuntimeHangingPromise` instead.\n *\n * @internal\n */\nexport function makeDynamicHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\nexport function makeUntrackedHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for *runtime* data:\n * data that hangs during a static prerender but is available during a runtime\n * prerender (the kind that backs a runtime prefetch request: request data\n * like cookies and headers is available, but the render is still not a real\n * dynamic request). Examples: cookies, headers, fallback params,\n * searchParams, and cache entries that are excluded only from static\n * prerenders.\n *\n * Creating one of these during a static prerender records on the prerender\n * store that a runtime prefetch would produce more content than the static\n * response (`runtimeDataAccessed`), which the segment prefetch encoding uses\n * to tell the client whether a runtime prefetch request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * `workUnitStore` may be null ONLY when the caller tracks the access itself\n * at observation time instead of creation time. This is for promises the\n * framework creates eagerly whether or not anything reads them (e.g. the\n * `searchParams` prop constructed for every page): recording at creation\n * would mark every render. Such a caller MUST call `trackRuntimeDataAccessed`\n * from every path that observes the promise (e.g. the proxy traps for\n * `then`/`status`), against the work unit store active at access time.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n *\n * @internal\n */\nexport function makeRuntimeHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n if (workUnitStore !== null) {\n trackRuntimeDataAccessed(workUnitStore)\n }\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Variant of `makeRuntimeHangingPromise` for *fallback-param* data: fallback\n * route params and values derived solely from them (`params`, `rootParams`,\n * `pathname` during a fallback prerender). Like every runtime data access it\n * records the access on the prerender store's response-level flag, but its\n * effect on the build-time static-prefetch hint differs — on a\n * fallback-upgradeable route the access is transient (a concrete prerender\n * resolves it), so it leaves the hint intact. See\n * `trackFallbackParamsAccessed`.\n *\n * As with `makeRuntimeHangingPromise`, `workUnitStore` may be null ONLY when\n * the caller tracks the access itself at observation time instead of creation\n * time, by calling `trackFallbackParamsAccessed` from every path that\n * observes the promise.\n *\n * @internal\n */\nexport function makeFallbackParamsHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n if (workUnitStore !== null) {\n trackFallbackParamsAccessed(workUnitStore)\n }\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for data that is only\n * accessible in a later *stage* of rendering than this render reaches — e.g.\n * a prefetchable short-stale cache entry that's excluded from shells when the\n * render ends at the shell stage, or params during a runtime-prefetch render\n * that stops before the stage where params resolve.\n *\n * A render that runs through the later stage would include the data; in\n * particular a runtime prefetch renders through its later stages, so on a\n * static prerender store this records `runtimeDataAccessed`, same as\n * `makeRuntimeHangingPromise`.\n *\n * @internal\n */\nexport function makeStageHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n trackRuntimeDataAccessed(workUnitStore)\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved during a runtime prerender. No-op for all other\n * store types.\n *\n * `makeRuntimeHangingPromise` and `makeStageHangingPromise` call this\n * automatically; call it directly only where the access is observed\n * separately from the promise's creation (see the null `workUnitStore` case\n * of `makeRuntimeHangingPromise`), or where the prerender is aborted\n * synchronously instead of hanging.\n *\n * For fallback-param data, use `trackFallbackParamsAccessed` instead. When\n * unsure, this is the conservative choice: it unconditionally clears the\n * static-prefetch hint.\n */\nexport function trackRuntimeDataAccessed(workUnitStore: WorkUnitStore): void {\n trackRuntimeDataAccessedImpl(workUnitStore, false)\n}\n\n/**\n * Fallback-param variant of `trackRuntimeDataAccessed`, for accesses of\n * fallback route params and values derived solely from them. It records the\n * response-level flag all the same, but only clears the build-time\n * static-prefetch hint when the route is not fallback-upgradeable — on an\n * upgradeable route the access is transient, since ISR later produces a\n * concrete prerender that resolves it.\n */\nexport function trackFallbackParamsAccessed(\n workUnitStore: WorkUnitStore\n): void {\n trackRuntimeDataAccessedImpl(workUnitStore, true)\n}\n\nfunction trackRuntimeDataAccessedImpl(\n workUnitStore: WorkUnitStore,\n isFallbackParamAccess: boolean\n): void {\n switch (workUnitStore.type) {\n case 'prerender': {\n // Response-level flag (the payload's `u`, forwarded to segment\n // responses as `needsRuntimeRequest`): resolved for every kind of\n // access — a pre-upgrade fallback response must keep reporting that\n // a runtime request would return more. The fulfillment row lands at\n // the current position in the Flight stream, which is what makes the\n // value rewindable per stage. Promise resolution is idempotent, so\n // repeated accesses are free.\n workUnitStore.runtimeDataAccessed?.resolve(true)\n\n // Hint cell (holds the build-constant\n // PrefetchHint.ShouldAttemptStaticPrefetch value directly): a\n // fallback-param access is transient when the route is\n // fallback-upgradeable — ISR later produces the concrete prerender a\n // static prefetch attempt would hit — so it leaves the hint intact.\n // (Until that upgrade, the response-level flag above keeps directing\n // the client to a runtime fallback; the hint only costs a wasted\n // static attempt in the interim.) Every other access clears it.\n const hintCell = workUnitStore.shouldAttemptStaticPrefetch\n if (\n hintCell !== null &&\n (!isFallbackParamAccess || !workUnitStore.isFallbackUpgradeable)\n ) {\n hintCell.current = false\n }\n break\n }\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'generate-static-params':\n // Only the modern server prerender tracks this; see the field docs on\n // PrerenderStoreModernServer.\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nexport function makeClientHookHangingPromise(\n signal: AbortSignal,\n error: ClientHookDynamicError\n): Promise {\n return makeHangingPromiseWithError(signal, error)\n}\n\nfunction makeHangingPromiseWithError(\n signal: AbortSignal,\n error: Error\n): Promise {\n if (signal.aborted) {\n return Promise.reject(error)\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(null, error)\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\n/**\n * Creates a promise that will be triggered when another promise resolves.\n * It will not emit unhandled rejections, which is important if the trigger\n * is a promise that might itself get rejected (e.g. when a prerender/render\n * are aborted due to sync IO)\n */\nexport function makePromiseFromTrigger(\n trigger: Promise,\n value: T\n): Promise {\n const promise = trigger.then(() => value)\n promise.catch(ignoreReject)\n return promise\n}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: AdvanceableRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n\nexport const RENDER_STAGES_BY_DATA_KIND = {\n sessionData: RenderStage.ShellRuntime as const,\n staticLinkData: RenderStage.Static as const,\n runtimeLinkData: RenderStage.Runtime as const,\n}\n\nexport function applyOwnerStack(error: Error): Error {\n if (process.env.NODE_ENV !== 'production') {\n let ownerStack: string | undefined | null\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // captureOwnerStack() returns the owner stack for the current React\n // rendering context. Inside a cache scope this only includes the inner\n // component tree. The outer owner stack (captured before entering the\n // cache boundary in use-cache-wrapper.ts) is stored on the cache store.\n // We concatenate both to get the full component tree.\n const innerOwnerStack =\n getClientReact()?.captureOwnerStack?.() ??\n getServerReact()?.captureOwnerStack?.()\n\n switch (workUnitStore?.type) {\n case 'cache':\n case 'private-cache':\n ownerStack =\n (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') ||\n undefined\n break\n case 'unstable-cache':\n case 'request':\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'prerender-client':\n case 'validation-client':\n case 'generate-static-params':\n case undefined:\n ownerStack = innerOwnerStack\n break\n default:\n workUnitStore satisfies never\n }\n\n if (ownerStack) {\n let stack = ownerStack\n\n if (error.stack) {\n const frames: string[] = []\n\n for (const frame of error.stack.split('\\n').slice(1)) {\n if (frame.includes('react_stack_bottom_frame')) {\n break\n }\n\n frames.push(frame)\n }\n\n stack = '\\n' + frames.join('\\n') + stack\n }\n\n error.stack = error.name + ': ' + error.message + stack\n }\n }\n\n return error\n}\n"],"names":["ClientHookDynamicError","RENDER_STAGES_BY_DATA_KIND","applyOwnerStack","isClientHookDynamicError","isHangingPromiseRejectionError","makeClientHookHangingPromise","makeDevtoolsIOAwarePromise","makeDynamicHangingPromise","makeFallbackParamsHangingPromise","makePromiseFromTrigger","makeRuntimeHangingPromise","makeStageHangingPromise","makeUntrackedHangingPromise","trackFallbackParamsAccessed","trackRuntimeDataAccessed","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","CLIENT_HOOK_DYNAMIC","abortListenersBySignal","WeakMap","signal","makeHangingPromiseWithError","workUnitStore","trackRuntimeDataAccessedImpl","isFallbackParamAccess","type","runtimeDataAccessed","resolve","hintCell","shouldAttemptStaticPrefetch","isFallbackUpgradeable","current","error","aborted","Promise","reject","hangingPromise","_","boundRejection","bind","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","trigger","value","promise","then","underlying","requestStore","stage","stagedRendering","delayUntilStage","undefined","setTimeout","sessionData","RenderStage","ShellRuntime","staticLinkData","Static","runtimeLinkData","Runtime","process","env","NODE_ENV","getClientReact","getServerReact","ownerStack","workUnitAsyncStorage","getStore","innerOwnerStack","captureOwnerStack","outerOwnerStack","stack","frames","frame","split","slice","includes","join","name","message"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 23148, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/request/connection.ts"],"sourcesContent":["import { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport {\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n postponeWithTracking,\n throwToInterruptStaticGeneration,\n trackDynamicDataInDynamicRender,\n} from '../app-render/dynamic-rendering'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n makeDynamicHangingPromise,\n makeDevtoolsIOAwarePromise,\n} from '../dynamic-rendering-utils'\nimport { isRequestApiAllowedInCurrentPhase } from './utils'\nimport { applyOwnerStack } from '../dynamic-rendering-utils'\nimport { RenderStage } from '../app-render/staged-rendering'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\n/**\n * This function allows you to indicate that you require an actual user Request before continuing.\n *\n * During prerendering it will never resolve and during rendering it resolves immediately.\n */\nexport function connection(): Promise {\n const callingExpression = 'connection'\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workStore) {\n if (workUnitStore && !isRequestApiAllowedInCurrentPhase(workUnitStore)) {\n throw new Error(\n `Route ${workStore.route} used \\`connection()\\` inside \\`after()\\` while rendering. The \\`connection()\\` function is used to indicate the subsequent code must only run when there is an actual Request, but \\`after()\\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`\n )\n }\n\n if (workStore.forceStatic) {\n // When using forceStatic, we override all other logic and always just\n // return a resolving promise without tracking.\n return Promise.resolve(undefined)\n }\n\n if (workStore.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${workStore.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`connection()\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache': {\n const error = new Error(\n `Route ${workStore.route} used \\`connection()\\` inside \"use cache\". The \\`connection()\\` function is used to indicate the subsequent code must only run when there is an actual request, but caches must be able to be produced before a request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n Error.captureStackTrace(error, connection)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n }\n case 'private-cache': {\n // It might not be intuitive to throw for private caches as well, but\n // we don't consider runtime prefetches as \"actual requests\" (in the\n // navigation sense), despite allowing them to read cookies.\n const error = new Error(\n `Route ${workStore.route} used \\`connection()\\` inside \"use cache: private\". The \\`connection()\\` function is used to indicate the subsequent code must only run when there is an actual navigation request, but caches must be able to be produced before a navigation request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n Error.captureStackTrace(error, connection)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n }\n case 'unstable-cache':\n throw new Error(\n `Route ${workStore.route} used \\`connection()\\` inside a function cached with \\`unstable_cache()\\`. The \\`connection()\\` function is used to indicate the subsequent code must only run when there is an actual Request, but caches must be able to be produced before a Request so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`\n )\n case 'generate-static-params':\n throw new Error(\n `Route ${workStore.route} used \\`connection()\\` inside \\`generateStaticParams\\`. This is not supported because \\`generateStaticParams\\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n // We return a promise that never resolves to allow the prerender to\n // stall at this point.\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n '`connection()`'\n )\n case 'validation-client': {\n // TODO(NAR-789): make this consistent with the actual browser behavior when we change it.\n // Until then, erroring is fine.\n const exportName = '`connection`'\n throw new InvariantError(\n `${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`\n )\n }\n case 'prerender-ppr':\n // We use React's postpone API to interrupt rendering here to create a\n // dynamic hole\n return postponeWithTracking(\n workStore.route,\n 'connection',\n workUnitStore.dynamicTracking\n )\n case 'prerender-legacy':\n // We throw an error here to interrupt prerendering to mark the route\n // as dynamic\n return throwToInterruptStaticGeneration(\n 'connection',\n workStore,\n workUnitStore\n )\n case 'request':\n trackDynamicDataInDynamicRender(workUnitStore)\n if (process.env.NODE_ENV === 'development') {\n // Semantically we only need the dev tracking when running in `next dev`\n // but since you would never use next dev with production NODE_ENV we use this\n // as a proxy so we can statically exclude this code from production builds.\n if (workUnitStore.asyncApiPromises) {\n return workUnitStore.asyncApiPromises.connection\n }\n return makeDevtoolsIOAwarePromise(\n undefined,\n workUnitStore,\n RenderStage.Dynamic\n )\n } else if (workUnitStore.asyncApiPromises) {\n return workUnitStore.asyncApiPromises.connection\n } else {\n return Promise.resolve(undefined)\n }\n default:\n workUnitStore satisfies never\n }\n }\n }\n\n // If we end up here, there was no work store or work unit store present.\n // TODO(NAR-789): connection() is not currently statically prevented from being imported in client components,\n // so we always error about a missing work unit store.\n throwForMissingRequestStore(callingExpression)\n}\n"],"names":["connection","callingExpression","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","isRequestApiAllowedInCurrentPhase","Error","route","forceStatic","Promise","resolve","undefined","dynamicShouldError","StaticGenBailoutError","type","error","captureStackTrace","applyOwnerStack","invalidDynamicUsageError","makeDynamicHangingPromise","renderSignal","exportName","InvariantError","postponeWithTracking","dynamicTracking","throwToInterruptStaticGeneration","trackDynamicDataInDynamicRender","process","env","NODE_ENV","asyncApiPromises","makeDevtoolsIOAwarePromise","RenderStage","Dynamic","throwForMissingRequestStore"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 23281, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/request/utils.ts"],"sourcesContent":["import { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { actionAsyncStorage } from '../app-render/action-async-storage.external'\nimport { afterTaskAsyncStorage } from '../app-render/after-task-async-storage.external'\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport type { WorkUnitStore } from '../app-render/work-unit-async-storage.external'\n\nexport function throwWithStaticGenerationBailoutErrorWithDynamicError(\n route: string,\n expression: string\n): never {\n throw new StaticGenBailoutError(\n `Route ${route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n}\n\nexport function throwForSearchParamsAccessInUseCache(\n workStore: WorkStore,\n constructorOpt: Function\n): never {\n const error = new Error(\n `Route ${workStore.route} used \\`searchParams\\` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \\`searchParams\\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n\n Error.captureStackTrace(error, constructorOpt)\n workStore.invalidDynamicUsageError ??= error\n\n throw error\n}\n\nexport function isRequestApiAllowedInCurrentPhase(\n workUnitStore: WorkUnitStore\n): boolean {\n switch (workUnitStore.phase) {\n case 'action':\n case 'render': {\n // The request is still in progress. The API may be disallowed for other reasons,\n // but not because of phase.\n return true\n }\n case 'after': {\n // The request has finished.\n\n // If we're in a Route Handler or a Server Action,\n // request APIs can be called everywhere, even in after().\n const actionStore = actionAsyncStorage.getStore()\n if (actionStore && (actionStore.isAppRoute || actionStore.isAction)) {\n return true\n }\n\n const afterTaskStore = afterTaskAsyncStorage.getStore()\n if (afterTaskStore) {\n // We're in an `after` callback. Request APIs are callable if\n // the `after()` call happened in an action phase:\n // - in a Route Handler\n // - in a Server Action's body (but not the render after)\n //\n // TODO(after): Is it even possible to have `phase === 'action'` but no `actionStore`?\n // We should revisit this setup and simplify this.\n return afterTaskStore.rootTaskSpawnPhase === 'action'\n }\n\n // Otherwise, we must be in a page, in the `after` phase.\n // We don't allow calling request APIs here because we'd miss\n // them during prerendering and wouldn't know that the page is dynamic.\n return false\n }\n }\n}\n"],"names":["isRequestApiAllowedInCurrentPhase","throwForSearchParamsAccessInUseCache","throwWithStaticGenerationBailoutErrorWithDynamicError","route","expression","StaticGenBailoutError","workStore","constructorOpt","error","Error","captureStackTrace","invalidDynamicUsageError","workUnitStore","phase","actionStore","actionAsyncStorage","getStore","isAppRoute","isAction","afterTaskStore","afterTaskAsyncStorage","rootTaskSpawnPhase"],"mappings":";;;;;;;;;;;;;;;IA6BgBA,iCAAiC,EAAA;eAAjCA;;IAdAC,oCAAoC,EAAA;eAApCA;;IATAC,qDAAqD,EAAA;eAArDA;;;yCANsB;4CACH;+CACG;AAI/B,SAASA,sDACdC,KAAa,EACbC,UAAkB;IAElB,MAAM,OAAA,cAEL,CAFK,IAAIC,yBAAAA,qBAAqB,CAC7B,CAAC,MAAM,EAAEF,MAAM,4EAA4E,EAAEC,WAAW,0HAA0H,CAAC,GAD/N,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEO,SAASH,qCACdK,SAAoB,EACpBC,cAAwB;IAExB,MAAMC,QAAQ,OAAA,cAEb,CAFa,IAAIC,MAChB,CAAC,MAAM,EAAEH,UAAUH,KAAK,CAAC,2XAA2X,CAAC,GADzY,qBAAA;eAAA;oBAAA;sBAAA;IAEd;IAEAM,MAAMC,iBAAiB,CAACF,OAAOD;IAC/BD,UAAUK,wBAAwB,KAAKH;IAEvC,MAAMA;AACR;AAEO,SAASR,kCACdY,aAA4B;IAE5B,OAAQA,cAAcC,KAAK;QACzB,KAAK;QACL,KAAK;YAAU;gBACb,iFAAiF;gBACjF,4BAA4B;gBAC5B,OAAO;YACT;QACA,KAAK;YAAS;gBACZ,4BAA4B;gBAE5B,kDAAkD;gBAClD,0DAA0D;gBAC1D,MAAMC,cAAcC,4BAAAA,kBAAkB,CAACC,QAAQ;gBAC/C,IAAIF,eAAgBA,CAAAA,YAAYG,UAAU,IAAIH,YAAYI,QAAO,GAAI;oBACnE,OAAO;gBACT;gBAEA,MAAMC,iBAAiBC,+BAAAA,qBAAqB,CAACJ,QAAQ;gBACrD,IAAIG,gBAAgB;oBAClB,6DAA6D;oBAC7D,kDAAkD;oBAClD,uBAAuB;oBACvB,yDAAyD;oBACzD,EAAE;oBACF,sFAAsF;oBACtF,kDAAkD;oBAClD,OAAOA,eAAeE,kBAAkB,KAAK;gBAC/C;gBAEA,yDAAyD;gBACzD,6DAA6D;gBAC7D,uEAAuE;gBACvE,OAAO;YACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 23366, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 23385, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/route-modules/app-page/vendored/rsc/react.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.React\n"],"names":["module","exports","require","vendored","React"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,+HACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK","ignoreList":[0]}}, + {"offset": {"line": 23390, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/error.ts"],"sourcesContent":["export class PageSignatureError extends Error {\n constructor({ page }: { page: string }) {\n super(`The middleware \"${page}\" accepts an async API directly with the form:\n \n export function middleware(request, event) {\n return NextResponse.redirect('/new-location')\n }\n \n Read more: https://nextjs.org/docs/messages/middleware-new-signature\n `)\n }\n}\n\nexport class RemovedPageError extends Error {\n constructor() {\n super(`The request.page has been deprecated in favour of \\`URLPattern\\`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n `)\n }\n}\n\nexport class RemovedUAError extends Error {\n constructor() {\n super(`The request.ua has been removed in favour of \\`userAgent\\` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n `)\n }\n}\n"],"names":["PageSignatureError","RemovedPageError","RemovedUAError","Error","constructor","page"],"mappings":";;;;;;;;;;;;;;;IAAaA,kBAAkB,EAAA;eAAlBA;;IAaAC,gBAAgB,EAAA;eAAhBA;;IAQAC,cAAc,EAAA;eAAdA;;;AArBN,MAAMF,2BAA2BG;IACtCC,YAAY,EAAEC,IAAI,EAAoB,CAAE;QACtC,KAAK,CAAC,CAAC,gBAAgB,EAAEA,KAAK;;;;;;;EAOhC,CAAC;QAPC,OAAA,cAOA,CAPA,IAOA,EAPA,qBAAA;mBAAA;wBAAA;0BAAA;QAOD;IACD;AACF;AAEO,MAAMJ,yBAAyBE;IACpCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;QAFC,OAAA,cAEA,CAFA,IAEA,EAFA,qBAAA;mBAAA;wBAAA;0BAAA;QAED;IACD;AACF;AAEO,MAAMF,uBAAuBC;IAClCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;QAFC,OAAA,cAEA,CAFA,IAEA,EAFA,qBAAA;mBAAA;wBAAA;0BAAA;QAED;IACD;AACF","ignoreList":[0]}}, + {"offset": {"line": 23460, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/next-url.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /^(?:127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)$/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n const parsed = new URL(String(url), base && String(base))\n if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {\n parsed.hostname = 'localhost'\n }\n return parsed\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n"],"names":["NextURL","REGEX_LOCALHOST_HOSTNAME","parseURL","url","base","parsed","URL","String","test","hostname","Internal","Symbol","constructor","input","baseOrOpts","opts","options","basePath","analyze","info","getNextPathnameInfo","pathname","nextConfig","parseData","process","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","i18nProvider","getHostname","headers","domainLocale","detectDomainLocale","i18n","domains","defaultLocale","buildId","locale","trailingSlash","formatPathname","formatNextPathnameInfo","forceLocale","undefined","formatSearch","search","locales","includes","TypeError","searchParams","host","value","port","protocol","href","hash","origin","password","username","startsWith","toString","toJSON","for","clone"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 23660, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/adapters/reflect.ts"],"sourcesContent":["export class ReflectAdapter {\n static get(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n"],"names":["ReflectAdapter","get","target","prop","receiver","value","Reflect","bind","set","has","deleteProperty"],"mappings":";;;+BAAaA,kBAAAA;;;eAAAA;;;AAAN,MAAMA;IACX,OAAOC,IACLC,MAAS,EACTC,IAAqB,EACrBC,QAAiB,EACZ;QACL,MAAMC,QAAQC,QAAQL,GAAG,CAACC,QAAQC,MAAMC;QACxC,IAAI,OAAOC,UAAU,YAAY;YAC/B,OAAOA,MAAME,IAAI,CAACL;QACpB;QAEA,OAAOG;IACT;IAEA,OAAOG,IACLN,MAAS,EACTC,IAAqB,EACrBE,KAAU,EACVD,QAAa,EACJ;QACT,OAAOE,QAAQE,GAAG,CAACN,QAAQC,MAAME,OAAOD;IAC1C;IAEA,OAAOK,IAAsBP,MAAS,EAAEC,IAAqB,EAAW;QACtE,OAAOG,QAAQG,GAAG,CAACP,QAAQC;IAC7B;IAEA,OAAOO,eACLR,MAAS,EACTC,IAAqB,EACZ;QACT,OAAOG,QAAQI,cAAc,CAACR,QAAQC;IACxC;AACF","ignoreList":[0]}}, + {"offset": {"line": 23691, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/cookies.ts"],"sourcesContent":["export {\n RequestCookies,\n ResponseCookies,\n stringifyCookie,\n} from 'next/dist/compiled/@edge-runtime/cookies'\n"],"names":["RequestCookies","ResponseCookies","stringifyCookie"],"mappings":";;;;;;;;;;;;;;;IACEA,cAAc,EAAA;eAAdA,SAAAA,cAAc;;IACdC,eAAe,EAAA;eAAfA,SAAAA,eAAe;;IACfC,eAAe,EAAA;eAAfA,SAAAA,eAAe;;;yBACV","ignoreList":[0]}}, + {"offset": {"line": 23721, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/image-response.ts"],"sourcesContent":["/**\n * @deprecated ImageResponse moved from \"next/server\" to \"next/og\" since Next.js 14, please import from \"next/og\" instead.\n * Migration with codemods: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#next-og-import\n */\nexport function ImageResponse(): never {\n throw new Error(\n 'ImageResponse moved from \"next/server\" to \"next/og\" since Next.js 14, please import from \"next/og\" instead'\n )\n}\n"],"names":["ImageResponse","Error"],"mappings":"AAAA;;;CAGC;;;+BACeA,iBAAAA;;;eAAAA;;;AAAT,SAASA;IACd,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,+GADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF","ignoreList":[0]}}, + {"offset": {"line": 23744, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/request.ts"],"sourcesContent":["import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n /** @internal */\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n"],"names":["INTERNALS","NextRequest","Symbol","Request","constructor","input","init","url","String","validateURL","process","env","NEXT_RUNTIME","body","duplex","nextUrl","NextURL","headers","toNodeOutgoingHttpHeaders","nextConfig","cookies","RequestCookies","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","toString","for","bodyUsed","cache","credentials","destination","Object","fromEntries","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","signal","page","RemovedPageError","ua","RemovedUAError"],"mappings":";;;;;;;;;;;;;;IAMaA,SAAS,EAAA;eAATA;;IAOAC,WAAW,EAAA;eAAXA;;;yBAZW;uBAC+B;uBACN;yBAClB;AAExB,MAAMD,YAAYE,OAAO;AAOzB,MAAMD,oBAAoBE;IAQ/BC,YAAYC,KAAwB,EAAEC,OAAoB,CAAC,CAAC,CAAE;QAC5D,MAAMC,MACJ,OAAOF,UAAU,YAAY,SAASA,QAAQA,MAAME,GAAG,GAAGC,OAAOH;QAEnEI,CAAAA,GAAAA,OAAAA,WAAW,EAACF;QAEZ,2DAA2D;QAC3D,oDAAoD;QACpD,sDAAsD;QACtD,oCAAoC;QACpC,IAAIG,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;YACvC,IAAIN,KAAKO,IAAI,IAAIP,KAAKQ,MAAM,KAAK,QAAQ;gBACvCR,KAAKQ,MAAM,GAAG;YAChB;QACF;QAEA,IAAIT,iBAAiBF,SAAS,KAAK,CAACE,OAAOC;aACtC,KAAK,CAACC,KAAKD;QAEhB,MAAMS,UAAU,IAAIC,SAAAA,OAAO,CAACT,KAAK;YAC/BU,SAASC,CAAAA,GAAAA,OAAAA,yBAAyB,EAAC,IAAI,CAACD,OAAO;YAC/CE,YAAYb,KAAKa,UAAU;QAC7B;QACA,IAAI,CAACnB,UAAU,GAAG;YAChBoB,SAAS,IAAIC,SAAAA,cAAc,CAAC,IAAI,CAACJ,OAAO;YACxCF;YACAR,KAAKG,QAAQC,GAAG,CAACW,0BACbf,QAD+C,kBAE/CQ,QAAQQ,QAAQ;QACtB;IACF;IAEA,CAACrB,OAAOsB,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLJ,SAAS,IAAI,CAACA,OAAO;YACrBL,SAAS,IAAI,CAACA,OAAO;YACrBR,KAAK,IAAI,CAACA,GAAG;YACb,kCAAkC;YAClCkB,UAAU,IAAI,CAACA,QAAQ;YACvBC,OAAO,IAAI,CAACA,KAAK;YACjBC,aAAa,IAAI,CAACA,WAAW;YAC7BC,aAAa,IAAI,CAACA,WAAW;YAC7BX,SAASY,OAAOC,WAAW,CAAC,IAAI,CAACb,OAAO;YACxCc,WAAW,IAAI,CAACA,SAAS;YACzBC,WAAW,IAAI,CAACA,SAAS;YACzBC,QAAQ,IAAI,CAACA,MAAM;YACnBC,MAAM,IAAI,CAACA,IAAI;YACfC,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBC,gBAAgB,IAAI,CAACA,cAAc;YACnCC,QAAQ,IAAI,CAACA,MAAM;QACrB;IACF;IAEA,IAAWlB,UAAU;QACnB,OAAO,IAAI,CAACpB,UAAU,CAACoB,OAAO;IAChC;IAEA,IAAWL,UAAU;QACnB,OAAO,IAAI,CAACf,UAAU,CAACe,OAAO;IAChC;IAEA;;;;GAIC,GACD,IAAWwB,OAAO;QAChB,MAAM,IAAIC,OAAAA,gBAAgB;IAC5B;IAEA;;;;GAIC,GACD,IAAWC,KAAK;QACd,MAAM,IAAIC,OAAAA,cAAc;IAC1B;IAEA,IAAWnC,MAAM;QACf,OAAO,IAAI,CAACP,UAAU,CAACO,GAAG;IAC5B;AACF","ignoreList":[0]}}, + {"offset": {"line": 23844, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/response.ts"],"sourcesContent":["import { stringifyCookie } from '../../web/spec-extension/cookies'\nimport type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { ReflectAdapter } from './adapters/reflect'\n\nimport { ResponseCookies } from './cookies'\n\nconst INTERNALS = Symbol('internal response')\nconst REDIRECTS = new Set([301, 302, 303, 307, 308])\n\nfunction handleMiddlewareField(\n init: MiddlewareResponseInit | undefined,\n headers: Headers\n) {\n if (init?.request?.headers) {\n if (!(init.request.headers instanceof Headers)) {\n throw new Error('request.headers must be an instance of Headers')\n }\n\n const keys = []\n for (const [key, value] of init.request.headers) {\n headers.set('x-middleware-request-' + key, value)\n keys.push(key)\n }\n\n headers.set('x-middleware-override-headers', keys.join(','))\n }\n}\n\n/**\n * This class extends the [Web `Response` API](https://developer.mozilla.org/docs/Web/API/Response) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextResponse`](https://nextjs.org/docs/app/api-reference/functions/next-response)\n */\nexport class NextResponse extends Response {\n [INTERNALS]: {\n cookies: ResponseCookies\n url?: NextURL\n body?: Body\n }\n\n constructor(body?: BodyInit | null, init: ResponseInit = {}) {\n super(body, init)\n\n const headers = this.headers\n const cookies = new ResponseCookies(headers)\n\n const cookiesProxy = new Proxy(cookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n case 'set': {\n return (...args: [string, string]) => {\n const result = Reflect.apply(target[prop], target, args)\n const newHeaders = new Headers(headers)\n\n if (result instanceof ResponseCookies) {\n headers.set(\n 'x-middleware-set-cookie',\n result\n .getAll()\n .map((cookie) => stringifyCookie(cookie))\n .join(',')\n )\n }\n\n handleMiddlewareField(init, newHeaders)\n return result\n }\n }\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n this[INTERNALS] = {\n cookies: cookiesProxy,\n url: init.url\n ? new NextURL(init.url, {\n headers: toNodeOutgoingHttpHeaders(headers),\n nextConfig: init.nextConfig,\n })\n : undefined,\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n url: this.url,\n // rest of props come from Response\n body: this.body,\n bodyUsed: this.bodyUsed,\n headers: Object.fromEntries(this.headers),\n ok: this.ok,\n redirected: this.redirected,\n status: this.status,\n statusText: this.statusText,\n type: this.type,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n static json(\n body: JsonBody,\n init?: ResponseInit\n ): NextResponse {\n const response: Response = Response.json(body, init)\n return new NextResponse(response.body, response)\n }\n\n static redirect(url: string | NextURL | URL, init?: number | ResponseInit) {\n const status = typeof init === 'number' ? init : (init?.status ?? 307)\n if (!REDIRECTS.has(status)) {\n throw new RangeError(\n 'Failed to execute \"redirect\" on \"response\": Invalid status code'\n )\n }\n const initObj = typeof init === 'object' ? init : {}\n const headers = new Headers(initObj?.headers)\n headers.set('Location', validateURL(url))\n\n return new NextResponse(null, {\n ...initObj,\n headers,\n status,\n })\n }\n\n static rewrite(\n destination: string | NextURL | URL,\n init?: MiddlewareResponseInit\n ) {\n const headers = new Headers(init?.headers)\n headers.set('x-middleware-rewrite', validateURL(destination))\n\n handleMiddlewareField(init, headers)\n return new NextResponse(null, { ...init, headers })\n }\n\n static next(init?: MiddlewareResponseInit) {\n const headers = new Headers(init?.headers)\n headers.set('x-middleware-next', '1')\n\n handleMiddlewareField(init, headers)\n return new NextResponse(null, { ...init, headers })\n }\n}\n\ninterface ResponseInit extends globalThis.ResponseInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig\n trailingSlash?: boolean\n }\n url?: string\n}\n\ninterface ModifiedRequest {\n /**\n * If this is set, the request headers will be overridden with this value.\n */\n headers?: Headers\n}\n\ninterface MiddlewareResponseInit extends globalThis.ResponseInit {\n /**\n * These fields will override the request from clients.\n */\n request?: ModifiedRequest\n}\n"],"names":["NextResponse","INTERNALS","Symbol","REDIRECTS","Set","handleMiddlewareField","init","headers","request","Headers","Error","keys","key","value","set","push","join","Response","constructor","body","cookies","ResponseCookies","cookiesProxy","Proxy","get","target","prop","receiver","args","result","Reflect","apply","newHeaders","getAll","map","cookie","stringifyCookie","ReflectAdapter","url","NextURL","toNodeOutgoingHttpHeaders","nextConfig","undefined","for","bodyUsed","Object","fromEntries","ok","redirected","status","statusText","type","json","response","redirect","has","RangeError","initObj","validateURL","rewrite","destination","next"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 23981, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/url-pattern.ts"],"sourcesContent":["const GlobalURLPattern =\n typeof URLPattern === 'undefined' ? undefined : URLPattern\n\nexport { GlobalURLPattern as URLPattern }\n"],"names":["URLPattern","GlobalURLPattern","undefined"],"mappings":";;;+BAG6BA,cAAAA;;;eAApBC;;;AAHT,MAAMA,mBACJ,OAAOD,eAAe,cAAcE,YAAYF","ignoreList":[0]}}, + {"offset": {"line": 23995, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/spec-extension/user-agent.ts"],"sourcesContent":["import parseua from 'next/dist/compiled/ua-parser-js'\n\ninterface UserAgent {\n isBot: boolean\n ua: string\n browser: {\n name?: string\n version?: string\n major?: string\n }\n device: {\n model?: string\n type?: string\n vendor?: string\n }\n engine: {\n name?: string\n version?: string\n }\n os: {\n name?: string\n version?: string\n }\n cpu: {\n architecture?: string\n }\n}\n\nexport function isBot(input: string): boolean {\n return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(\n input\n )\n}\n\nexport function userAgentFromString(input: string | undefined): UserAgent {\n return {\n ...parseua(input),\n isBot: input === undefined ? false : isBot(input),\n }\n}\n\nexport function userAgent({ headers }: { headers: Headers }): UserAgent {\n return userAgentFromString(headers.get('user-agent') || undefined)\n}\n"],"names":["isBot","userAgent","userAgentFromString","input","test","parseua","undefined","headers","get"],"mappings":";;;;;;;;;;;;;;;IA4BgBA,KAAK,EAAA;eAALA;;IAaAC,SAAS,EAAA;eAATA;;IAPAC,mBAAmB,EAAA;eAAnBA;;;mEAlCI;;;;;;AA4Bb,SAASF,MAAMG,KAAa;IACjC,OAAO,iXAAiXC,IAAI,CAC1XD;AAEJ;AAEO,SAASD,oBAAoBC,KAAyB;IAC3D,OAAO;QACL,GAAGE,CAAAA,GAAAA,YAAAA,OAAO,EAACF,MAAM;QACjBH,OAAOG,UAAUG,YAAY,QAAQN,MAAMG;IAC7C;AACF;AAEO,SAASF,UAAU,EAAEM,OAAO,EAAwB;IACzD,OAAOL,oBAAoBK,QAAQC,GAAG,CAAC,iBAAiBF;AAC1D","ignoreList":[0]}}, + {"offset": {"line": 24042, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/server/web/utils.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n"],"names":["fromNodeOutgoingHttpHeaders","normalizeNextQueryParam","splitCookiesString","toNodeOutgoingHttpHeaders","validateURL","nodeHeaders","headers","Headers","key","value","Object","entries","values","Array","isArray","v","toString","append","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","cookies","toLowerCase","url","String","URL","error","Error","cause","prefixes","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","prefix","startsWith"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 24194, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/get-hostname.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n"],"names":["getHostname","parsed","headers","hostname","host","Array","isArray","toString","split","toLowerCase"],"mappings":";;;+BAQgBA,eAAAA;;;eAAAA;;;AAAT,SAASA,YACdC,MAAoC,EACpCC,OAA6B;IAE7B,2EAA2E;IAC3E,YAAY;IACZ,IAAIC;IACJ,IAAID,SAASE,QAAQ,CAACC,MAAMC,OAAO,CAACJ,QAAQE,IAAI,GAAG;QACjDD,WAAWD,QAAQE,IAAI,CAACG,QAAQ,GAAGC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IACrD,OAAO,IAAIP,OAAOE,QAAQ,EAAE;QAC1BA,WAAWF,OAAOE,QAAQ;IAC5B,OAAO;IAEP,OAAOA,SAASM,WAAW;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 24218, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts"],"sourcesContent":["import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n"],"names":["detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale"],"mappings":";;;+BAEgBA,sBAAAA;;;eAAAA;;;AAAT,SAASA,mBACdC,WAAqC,EACrCC,QAAiB,EACjBC,cAAuB;IAEvB,IAAI,CAACF,aAAa;IAElB,IAAIE,gBAAgB;QAClBA,iBAAiBA,eAAeC,WAAW;IAC7C;IAEA,KAAK,MAAMC,QAAQJ,YAAa;QAC9B,yBAAyB;QACzB,MAAMK,iBAAiBD,KAAKE,MAAM,EAAEC,MAAM,KAAK,EAAE,CAAC,EAAE,CAACJ;QACrD,IACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,aAAa,CAACL,WAAW,MACjDC,KAAKK,OAAO,EAAEC,KAAK,CAACC,SAAWA,OAAOR,WAAW,OAAOD,iBACxD;YACA,OAAOE;QACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 24244, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts"],"sourcesContent":["export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n"],"names":["normalizeLocalePath","cache","WeakMap","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length"],"mappings":";;;+BAqBgBA,uBAAAA;;;eAAAA;;;AAhBhB;;;;CAIC,GACD,MAAMC,QAAQ,IAAIC;AAWX,SAASF,oBACdG,QAAgB,EAChBC,OAA2B;IAE3B,sDAAsD;IACtD,IAAI,CAACA,SAAS,OAAO;QAAED;IAAS;IAEhC,iEAAiE;IACjE,IAAIE,oBAAoBJ,MAAMK,GAAG,CAACF;IAClC,IAAI,CAACC,mBAAmB;QACtBA,oBAAoBD,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,WAAW;QAC9DR,MAAMS,GAAG,CAACN,SAASC;IACrB;IAEA,IAAIM;IAEJ,oEAAoE;IACpE,yEAAyE;IACzE,MAAMC,WAAWT,SAASU,KAAK,CAAC,KAAK;IAErC,0EAA0E;IAC1E,UAAU;IACV,IAAI,CAACD,QAAQ,CAAC,EAAE,EAAE,OAAO;QAAET;IAAS;IAEpC,0DAA0D;IAC1D,MAAMW,UAAUF,QAAQ,CAAC,EAAE,CAACH,WAAW;IAEvC,yEAAyE;IACzE,mCAAmC;IACnC,MAAMM,QAAQV,kBAAkBW,OAAO,CAACF;IACxC,IAAIC,QAAQ,GAAG,OAAO;QAAEZ;IAAS;IAEjC,oCAAoC;IACpCQ,iBAAiBP,OAAO,CAACW,MAAM;IAE/B,gDAAgD;IAChDZ,WAAWA,SAASc,KAAK,CAACN,eAAeO,MAAM,GAAG,MAAM;IAExD,OAAO;QAAEf;QAAUQ;IAAe;AACpC","ignoreList":[0]}}, + {"offset": {"line": 24299, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/instant-messages.ts"],"sourcesContent":["export function createUnrenderedSegmentError(\n route: string,\n missingFiles: readonly string[]\n): Error {\n let message = `Route \"${route}\": Could not validate that a segment in your UI has instant navigation.`\n if (missingFiles.length > 0) {\n const label =\n missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'\n message +=\n `\\n\\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` +\n `\\n\\n${label}:\\n${missingFiles.map((p) => ` ${p}`).join('\\n')}` +\n `\\n\\nWays to fix this:` +\n `\\n - [render] Render the dropped segment` +\n `\\n - [ignore] Set \\`export const instant = false\\` to opt the dropped segment out of instant-navigation validation` +\n `\\n\\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`\n }\n return new Error(message)\n}\n\nexport function createLinkPrefetchPartialError(pathname: string): Error {\n return new Error(\n `Next.js encountered dynamic data during prefetching for \"${pathname}\".\\n\\n` +\n `This will lead to slower, more expensive prefetches.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [upgrade] Opt into Partial Prefetching by exporting \\`const prefetch = 'partial'\\` from the page or layout, or by setting \\`partialPrefetching: true\\` in next.config to opt the whole app in\\n` +\n ` - [disable] Remove \\`prefetch={true}\\` from the to use the default prefetch\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to opt the route out of instant-navigation validation\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`\n )\n}\n"],"names":["createLinkPrefetchPartialError","createUnrenderedSegmentError","route","missingFiles","message","length","label","map","p","join","Error","pathname"],"mappings":";;;;;;;;;;;;;;IAmBgBA,8BAA8B,EAAA;eAA9BA;;IAnBAC,4BAA4B,EAAA;eAA5BA;;;AAAT,SAASA,6BACdC,KAAa,EACbC,YAA+B;IAE/B,IAAIC,UAAU,CAAC,OAAO,EAAEF,MAAM,uEAAuE,CAAC;IACtG,IAAIC,aAAaE,MAAM,GAAG,GAAG;QAC3B,MAAMC,QACJH,aAAaE,MAAM,KAAK,IAAI,oBAAoB;QAClDD,WACE,CAAC,6GAA6G,CAAC,GAC/G,CAAC,IAAI,EAAEE,MAAM,GAAG,EAAEH,aAAaI,GAAG,CAAC,CAACC,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO,GAChE,CAAC,qBAAqB,CAAC,GACvB,CAAC,yCAAyC,CAAC,GAC3C,CAAC,mHAAmH,CAAC,GACrH,CAAC,2EAA2E,CAAC;IACjF;IACA,OAAO,OAAA,cAAkB,CAAlB,IAAIC,MAAMN,UAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAiB;AAC1B;AAEO,SAASJ,+BAA+BW,QAAgB;IAC7D,OAAO,OAAA,cAQN,CARM,IAAID,MACT,CAAC,yDAAyD,EAAEC,SAAS,MAAM,CAAC,GAC1E,CAAC,wDAAwD,CAAC,GAC1D,CAAC,mBAAmB,CAAC,GACrB,CAAC,mMAAmM,CAAC,GACrM,CAAC,sFAAsF,CAAC,GACxF,CAAC,2GAA2G,CAAC,GAC7G,CAAC,0EAA0E,CAAC,GAPzE,qBAAA;eAAA;oBAAA;sBAAA;IAQP;AACF","ignoreList":[0]}}, + {"offset": {"line": 24343, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;+BAAaA,kBAAAA;;;eAAAA;;;AAAN,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAFF,OAAA,cAGC,CAHD,IAGC,EAHD,qBAAA;mBAAA;wBAAA;0BAAA;QAGA;QACA,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 24367, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts"],"sourcesContent":["// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n"],"names":["BailoutToCSRError","isBailoutToCSRError","BAILOUT_TO_CSR","Error","constructor","reason","digest","err"],"mappings":"AAAA,+GAA+G;;;;;;;;;;;;;;;IAIlGA,iBAAiB,EAAA;eAAjBA;;IASGC,mBAAmB,EAAA;eAAnBA;;;AAZhB,MAAMC,iBAAiB;AAGhB,MAAMF,0BAA0BG;IAGrCC,YAA4BC,MAAc,CAAE;QAC1C,KAAK,CAAC,CAAC,mCAAmC,EAAEA,QAAQ,GAAA,IAAA,CAD1BA,MAAAA,GAAAA,QAAAA,IAAAA,CAFZC,MAAAA,GAASJ;IAIzB;AACF;AAGO,SAASD,oBAAoBM,GAAY;IAC9C,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAID,MAAM,KAAKJ;AACxB","ignoreList":[0]}}, + {"offset": {"line": 24405, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/promise-with-resolvers.ts"],"sourcesContent":["export function createPromiseWithResolvers(): PromiseWithResolvers {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike) => void\n let reject: (reason: any) => void\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n"],"names":["createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej"],"mappings":";;;+BAAgBA,8BAAAA;;;eAAAA;;;AAAT,SAASA;IACd,iDAAiD;IACjD,IAAIC;IACJ,IAAIC;IACJ,MAAMC,UAAU,IAAIC,QAAW,CAACC,KAAKC;QACnCL,UAAUI;QACVH,SAASI;IACX;IACA,OAAO;QAAEL,SAASA;QAAUC,QAAQA;QAASC;IAAQ;AACvD","ignoreList":[0]}}, + {"offset": {"line": 24432, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/add-locale.ts"],"sourcesContent":["import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n"],"names":["addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase","pathHasPrefix","addPathPrefix"],"mappings":";;;+BAQgBA,aAAAA;;;eAAAA;;;+BARc;+BACA;AAOvB,SAASA,UACdC,IAAY,EACZC,MAAuB,EACvBC,aAAsB,EACtBC,YAAsB;IAEtB,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,CAACF,UAAUA,WAAWC,eAAe,OAAOF;IAEhD,MAAMI,QAAQJ,KAAKK,WAAW;IAE9B,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAACF,cAAc;QACjB,IAAIG,CAAAA,GAAAA,eAAAA,aAAa,EAACF,OAAO,SAAS,OAAOJ;QACzC,IAAIM,CAAAA,GAAAA,eAAAA,aAAa,EAACF,OAAO,CAAC,CAAC,EAAEH,OAAOI,WAAW,IAAI,GAAG,OAAOL;IAC/D;IAEA,qCAAqC;IACrC,OAAOO,CAAAA,GAAAA,eAAAA,aAAa,EAACP,MAAM,CAAC,CAAC,EAAEC,QAAQ;AACzC","ignoreList":[0]}}, + {"offset": {"line": 24461, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n"],"names":["addPathPrefix","path","prefix","startsWith","pathname","query","hash","parsePath"],"mappings":";;;+BAMgBA,iBAAAA;;;eAAAA;;;2BANU;AAMnB,SAASA,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACN;IAC5C,OAAO,GAAGC,SAASE,WAAWC,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 24482, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n"],"names":["addPathSuffix","path","suffix","startsWith","pathname","query","hash","parsePath"],"mappings":";;;+BAOgBA,iBAAAA;;;eAAAA;;;2BAPU;AAOnB,SAASA,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACN;IAC5C,OAAO,GAAGG,WAAWF,SAASG,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 24503, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts"],"sourcesContent":["import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n"],"names":["formatNextPathnameInfo","info","pathname","addLocale","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","removeTrailingSlash","addPathSuffix","addPathPrefix","basePath","endsWith"],"mappings":";;;+BAWgBA,0BAAAA;;;eAAAA;;;qCAVoB;+BACN;+BACA;2BACJ;AAOnB,SAASA,uBAAuBC,IAAkB;IACvD,IAAIC,WAAWC,CAAAA,GAAAA,WAAAA,SAAS,EACtBF,KAAKC,QAAQ,EACbD,KAAKG,MAAM,EACXH,KAAKI,OAAO,GAAGC,YAAYL,KAAKM,aAAa,EAC7CN,KAAKO,YAAY;IAGnB,IAAIP,KAAKI,OAAO,IAAI,CAACJ,KAAKQ,aAAa,EAAE;QACvCP,WAAWQ,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACR;IACjC;IAEA,IAAID,KAAKI,OAAO,EAAE;QAChBH,WAAWS,CAAAA,GAAAA,eAAAA,aAAa,EACtBC,CAAAA,GAAAA,eAAAA,aAAa,EAACV,UAAU,CAAC,YAAY,EAAED,KAAKI,OAAO,EAAE,GACrDJ,KAAKC,QAAQ,KAAK,MAAM,eAAe;IAE3C;IAEAA,WAAWU,CAAAA,GAAAA,eAAAA,aAAa,EAACV,UAAUD,KAAKY,QAAQ;IAChD,OAAO,CAACZ,KAAKI,OAAO,IAAIJ,KAAKQ,aAAa,GACtC,CAACP,SAASY,QAAQ,CAAC,OACjBH,CAAAA,GAAAA,eAAAA,aAAa,EAACT,UAAU,OACxBA,WACFQ,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACR;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 24531, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts"],"sourcesContent":["import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n"],"names":["getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathHasPrefix","removePathPrefix","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","normalizeLocalePath","locales","locale","detectedLocale"],"mappings":";;;+BAoDgBA,uBAAAA;;;eAAAA;;;qCApDoB;kCACH;+BACH;AAkDvB,SAASA,oBACdC,QAAgB,EAChBC,OAAgB;IAEhB,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGH,QAAQI,UAAU,IAAI,CAAC;IACjE,MAAMC,OAAyB;QAC7BN;QACAI,eAAeJ,aAAa,MAAMA,SAASO,QAAQ,CAAC,OAAOH;IAC7D;IAEA,IAAIF,YAAYM,CAAAA,GAAAA,eAAAA,aAAa,EAACF,KAAKN,QAAQ,EAAEE,WAAW;QACtDI,KAAKN,QAAQ,GAAGS,CAAAA,GAAAA,kBAAAA,gBAAgB,EAACH,KAAKN,QAAQ,EAAEE;QAChDI,KAAKJ,QAAQ,GAAGA;IAClB;IACA,IAAIQ,uBAAuBJ,KAAKN,QAAQ;IAExC,IACEM,KAAKN,QAAQ,CAACW,UAAU,CAAC,mBACzBL,KAAKN,QAAQ,CAACO,QAAQ,CAAC,UACvB;QACA,MAAMK,QAAQN,KAAKN,QAAQ,CACxBa,OAAO,CAAC,oBAAoB,IAC5BA,OAAO,CAAC,WAAW,IACnBC,KAAK,CAAC;QAET,MAAMC,UAAUH,KAAK,CAAC,EAAE;QACxBN,KAAKS,OAAO,GAAGA;QACfL,uBACEE,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,MAAMI,KAAK,CAAC,GAAGC,IAAI,CAAC,MAAM,GAAG;QAE1D,sDAAsD;QACtD,kDAAkD;QAClD,IAAIhB,QAAQiB,SAAS,KAAK,MAAM;YAC9BZ,KAAKN,QAAQ,GAAGU;QAClB;IACF;IAEA,4EAA4E;IAC5E,yBAAyB;IACzB,IAAIP,MAAM;QACR,IAAIgB,SAASlB,QAAQmB,YAAY,GAC7BnB,QAAQmB,YAAY,CAACC,OAAO,CAACf,KAAKN,QAAQ,IAC1CsB,CAAAA,GAAAA,qBAAAA,mBAAmB,EAAChB,KAAKN,QAAQ,EAAEG,KAAKoB,OAAO;QAEnDjB,KAAKkB,MAAM,GAAGL,OAAOM,cAAc;QACnCnB,KAAKN,QAAQ,GAAGmB,OAAOnB,QAAQ,IAAIM,KAAKN,QAAQ;QAEhD,IAAI,CAACmB,OAAOM,cAAc,IAAInB,KAAKS,OAAO,EAAE;YAC1CI,SAASlB,QAAQmB,YAAY,GACzBnB,QAAQmB,YAAY,CAACC,OAAO,CAACX,wBAC7BY,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACZ,sBAAsBP,KAAKoB,OAAO;YAE1D,IAAIJ,OAAOM,cAAc,EAAE;gBACzBnB,KAAKkB,MAAM,GAAGL,OAAOM,cAAc;YACrC;QACF;IACF;IACA,OAAOnB;AACT","ignoreList":[0]}}, + {"offset": {"line": 24584, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/parse-path.ts"],"sourcesContent":["/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n"],"names":["parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice"],"mappings":"AAAA;;;;CAIC;;;+BACeA,aAAAA;;;eAAAA;;;AAAT,SAASA,UAAUC,IAAY;IACpC,MAAMC,YAAYD,KAAKE,OAAO,CAAC;IAC/B,MAAMC,aAAaH,KAAKE,OAAO,CAAC;IAChC,MAAME,WAAWD,aAAa,CAAC,KAAMF,CAAAA,YAAY,KAAKE,aAAaF,SAAQ;IAE3E,IAAIG,YAAYH,YAAY,CAAC,GAAG;QAC9B,OAAO;YACLI,UAAUL,KAAKM,SAAS,CAAC,GAAGF,WAAWD,aAAaF;YACpDM,OAAOH,WACHJ,KAAKM,SAAS,CAACH,YAAYF,YAAY,CAAC,IAAIA,YAAYO,aACxD;YACJC,MAAMR,YAAY,CAAC,IAAID,KAAKU,KAAK,CAACT,aAAa;QACjD;IACF;IAEA,OAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;IAAG;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 24618, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n"],"names":["pathHasPrefix","path","prefix","pathname","parsePath","startsWith"],"mappings":";;;+BASgBA,iBAAAA;;;eAAAA;;;2BATU;AASnB,SAASA,cAAcC,IAAY,EAAEC,MAAc;IACxD,IAAI,OAAOD,SAAS,UAAU;QAC5B,OAAO;IACT;IAEA,MAAM,EAAEE,QAAQ,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACH;IAC/B,OAAOE,aAAaD,UAAUC,SAASE,UAAU,CAACH,SAAS;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 24639, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts"],"sourcesContent":["import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n"],"names":["removePathPrefix","path","prefix","pathHasPrefix","withoutPrefix","slice","length","startsWith"],"mappings":";;;+BAUgBA,oBAAAA;;;eAAAA;;;+BAVc;AAUvB,SAASA,iBAAiBC,IAAY,EAAEC,MAAc;IAC3D,yEAAyE;IACzE,0EAA0E;IAC1E,kBAAkB;IAClB,EAAE;IACF,oBAAoB;IACpB,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,IAAI,CAACC,CAAAA,GAAAA,eAAAA,aAAa,EAACF,MAAMC,SAAS;QAChC,OAAOD;IACT;IAEA,+CAA+C;IAC/C,MAAMG,gBAAgBH,KAAKI,KAAK,CAACH,OAAOI,MAAM;IAE9C,2EAA2E;IAC3E,IAAIF,cAAcG,UAAU,CAAC,MAAM;QACjC,OAAOH;IACT;IAEA,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,CAAC,CAAC,EAAEA,eAAe;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 24679, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts"],"sourcesContent":["/**\n * Removes the trailing slash for a given route or page path. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n *\n * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of\n * compiling and executing a RegExp on every call (~3-5x faster).\n */\nexport function removeTrailingSlash(route: string) {\n return route.charCodeAt(route.length - 1) === 47 && route.length > 1\n ? route.slice(0, -1)\n : route\n}\n"],"names":["removeTrailingSlash","route","charCodeAt","length","slice"],"mappings":"AAAA;;;;;;;CAOC;;;+BACeA,uBAAAA;;;eAAAA;;;AAAT,SAASA,oBAAoBC,KAAa;IAC/C,OAAOA,MAAMC,UAAU,CAACD,MAAME,MAAM,GAAG,OAAO,MAAMF,MAAME,MAAM,GAAG,IAC/DF,MAAMG,KAAK,CAAC,GAAG,CAAC,KAChBH;AACN","ignoreList":[0]}}, + {"offset": {"line": 24701, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/next/server.js"],"sourcesContent":["const serverExports = {\n NextRequest: require('next/dist/server/web/spec-extension/request')\n .NextRequest,\n NextResponse: require('next/dist/server/web/spec-extension/response')\n .NextResponse,\n ImageResponse: require('next/dist/server/web/spec-extension/image-response')\n .ImageResponse,\n userAgentFromString: require('next/dist/server/web/spec-extension/user-agent')\n .userAgentFromString,\n userAgent: require('next/dist/server/web/spec-extension/user-agent')\n .userAgent,\n URLPattern: require('next/dist/server/web/spec-extension/url-pattern')\n .URLPattern,\n after: require('next/dist/server/after').after,\n connection: require('next/dist/server/request/connection').connection,\n}\n\n// https://nodejs.org/api/esm.html#commonjs-namespaces\n// When importing CommonJS modules, the module.exports object is provided as the default export\nmodule.exports = serverExports\n\n// make import { xxx } from 'next/server' work\nexports.NextRequest = serverExports.NextRequest\nexports.NextResponse = serverExports.NextResponse\nexports.ImageResponse = serverExports.ImageResponse\nexports.userAgentFromString = serverExports.userAgentFromString\nexports.userAgent = serverExports.userAgent\nexports.URLPattern = serverExports.URLPattern\nexports.after = serverExports.after\nexports.connection = serverExports.connection\n"],"names":["serverExports","NextRequest","NextResponse","ImageResponse","userAgentFromString","userAgent","URLPattern","after","connection","module","exports"],"mappings":"AAAA,MAAMA,gBAAgB;IACpBC,aAAa,2HACVA,WAAW;IACdC,cAAc,4HACXA,YAAY;IACfC,eAAe,kIACZA,aAAa;IAChBC,qBAAqB,8HAClBA,mBAAmB;IACtBC,WAAW,8HACRA,SAAS;IACZC,YAAY,+HACTA,UAAU;IACbC,OAAO,4GAAkCA,KAAK;IAC9CC,YAAY,mHAA+CA,UAAU;AACvE;AAEA,sDAAsD;AACtD,+FAA+F;AAC/FC,OAAOC,OAAO,GAAGV;AAEjB,8CAA8C;AAC9CU,QAAQT,WAAW,GAAGD,cAAcC,WAAW;AAC/CS,QAAQR,YAAY,GAAGF,cAAcE,YAAY;AACjDQ,QAAQP,aAAa,GAAGH,cAAcG,aAAa;AACnDO,QAAQN,mBAAmB,GAAGJ,cAAcI,mBAAmB;AAC/DM,QAAQL,SAAS,GAAGL,cAAcK,SAAS;AAC3CK,QAAQJ,UAAU,GAAGN,cAAcM,UAAU;AAC7CI,QAAQH,KAAK,GAAGP,cAAcO,KAAK;AACnCG,QAAQF,UAAU,GAAGR,cAAcQ,UAAU","ignoreList":[0]}}, + {"offset": {"line": 24726, "column": 0}, "map": {"version":3,"sources":["file:///Users/luulam/Developer/tool/9router/node_modules/node-machine-id/dist/index.js"],"sourcesContent":["!function(t,n){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=n(require(\"child_process\"),require(\"crypto\")):\"function\"==typeof define&&define.amd?define([\"child_process\",\"crypto\"],n):\"object\"==typeof exports?exports[\"electron-machine-id\"]=n(require(\"child_process\"),require(\"crypto\")):t[\"electron-machine-id\"]=n(t.child_process,t.crypto)}(this,function(t,n){return function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={exports:{},id:e,loaded:!1};return t[e].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=t,n.c=r,n.p=\"\",n(0)}([function(t,n,r){t.exports=r(34)},function(t,n,r){var e=r(29)(\"wks\"),o=r(33),i=r(2).Symbol,c=\"function\"==typeof i,u=t.exports=function(t){return e[t]||(e[t]=c&&i[t]||(c?i:o)(\"Symbol.\"+t))};u.store=e},function(t,n){var r=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=r)},function(t,n,r){var e=r(9);t.exports=function(t){if(!e(t))throw TypeError(t+\" is not an object!\");return t}},function(t,n,r){t.exports=!r(24)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,n,r){var e=r(12),o=r(17);t.exports=r(4)?function(t,n,r){return e.f(t,n,o(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n){var r=t.exports={version:\"2.4.0\"};\"number\"==typeof __e&&(__e=r)},function(t,n,r){var e=r(14);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){var r={}.hasOwnProperty;t.exports=function(t,n){return r.call(t,n)}},function(t,n){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,n){t.exports={}},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n,r){var e=r(3),o=r(26),i=r(32),c=Object.defineProperty;n.f=r(4)?Object.defineProperty:function(t,n,r){if(e(t),n=i(n,!0),e(r),o)try{return c(t,n,r)}catch(t){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported!\");return\"value\"in r&&(t[n]=r.value),t}},function(t,n,r){var e=r(42),o=r(15);t.exports=function(t){return e(o(t))}},function(t,n){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on \"+t);return t}},function(t,n,r){var e=r(9),o=r(2).document,i=e(o)&&e(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,r){var e=r(12).f,o=r(8),i=r(1)(\"toStringTag\");t.exports=function(t,n,r){t&&!o(t=r?t:t.prototype,i)&&e(t,i,{configurable:!0,value:n})}},function(t,n,r){var e=r(29)(\"keys\"),o=r(33);t.exports=function(t){return e[t]||(e[t]=o(t))}},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n,r){var e=r(11),o=r(1)(\"toStringTag\"),i=\"Arguments\"==e(function(){return arguments}()),c=function(t,n){try{return t[n]}catch(t){}};t.exports=function(t){var n,r,u;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(r=c(n=Object(t),o))?r:i?e(n):\"Object\"==(u=e(n))&&\"function\"==typeof n.callee?\"Arguments\":u}},function(t,n){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,n,r){var e=r(2),o=r(6),i=r(7),c=r(5),u=\"prototype\",s=function(t,n,r){var f,a,p,l=t&s.F,v=t&s.G,h=t&s.S,d=t&s.P,y=t&s.B,_=t&s.W,x=v?o:o[n]||(o[n]={}),m=x[u],w=v?e:h?e[n]:(e[n]||{})[u];v&&(r=n);for(f in r)a=!l&&w&&void 0!==w[f],a&&f in x||(p=a?w[f]:r[f],x[f]=v&&\"function\"!=typeof w[f]?r[f]:y&&a?i(p,e):_&&w[f]==p?function(t){var n=function(n,r,e){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,r)}return new t(n,r,e)}return t.apply(this,arguments)};return n[u]=t[u],n}(p):d&&\"function\"==typeof p?i(Function.call,p):p,d&&((x.virtual||(x.virtual={}))[f]=p,t&s.R&&m&&!m[f]&&c(m,f,p)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n,r){t.exports=r(2).document&&document.documentElement},function(t,n,r){t.exports=!r(4)&&!r(24)(function(){return 7!=Object.defineProperty(r(16)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,n,r){\"use strict\";var e=r(28),o=r(23),i=r(57),c=r(5),u=r(8),s=r(10),f=r(45),a=r(18),p=r(52),l=r(1)(\"iterator\"),v=!([].keys&&\"next\"in[].keys()),h=\"@@iterator\",d=\"keys\",y=\"values\",_=function(){return this};t.exports=function(t,n,r,x,m,w,g){f(r,n,x);var b,O,j,S=function(t){if(!v&&t in T)return T[t];switch(t){case d:return function(){return new r(this,t)};case y:return function(){return new r(this,t)}}return function(){return new r(this,t)}},E=n+\" Iterator\",P=m==y,M=!1,T=t.prototype,A=T[l]||T[h]||m&&T[m],k=A||S(m),C=m?P?S(\"entries\"):k:void 0,I=\"Array\"==n?T.entries||A:A;if(I&&(j=p(I.call(new t)),j!==Object.prototype&&(a(j,E,!0),e||u(j,l)||c(j,l,_))),P&&A&&A.name!==y&&(M=!0,k=function(){return A.call(this)}),e&&!g||!v&&!M&&T[l]||c(T,l,k),s[n]=k,s[E]=_,m)if(b={values:P?k:S(y),keys:w?k:S(d),entries:C},g)for(O in b)O in T||i(T,O,b[O]);else o(o.P+o.F*(v||M),n,b);return b}},function(t,n){t.exports=!0},function(t,n,r){var e=r(2),o=\"__core-js_shared__\",i=e[o]||(e[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,n,r){var e,o,i,c=r(7),u=r(41),s=r(25),f=r(16),a=r(2),p=a.process,l=a.setImmediate,v=a.clearImmediate,h=a.MessageChannel,d=0,y={},_=\"onreadystatechange\",x=function(){var t=+this;if(y.hasOwnProperty(t)){var n=y[t];delete y[t],n()}},m=function(t){x.call(t.data)};l&&v||(l=function(t){for(var n=[],r=1;arguments.length>r;)n.push(arguments[r++]);return y[++d]=function(){u(\"function\"==typeof t?t:Function(t),n)},e(d),d},v=function(t){delete y[t]},\"process\"==r(11)(p)?e=function(t){p.nextTick(c(x,t,1))}:h?(o=new h,i=o.port2,o.port1.onmessage=m,e=c(i.postMessage,i,1)):a.addEventListener&&\"function\"==typeof postMessage&&!a.importScripts?(e=function(t){a.postMessage(t+\"\",\"*\")},a.addEventListener(\"message\",m,!1)):e=_ in f(\"script\")?function(t){s.appendChild(f(\"script\"))[_]=function(){s.removeChild(this),x.call(t)}}:function(t){setTimeout(c(x,t,1),0)}),t.exports={set:l,clear:v}},function(t,n,r){var e=r(20),o=Math.min;t.exports=function(t){return t>0?o(e(t),9007199254740991):0}},function(t,n,r){var e=r(9);t.exports=function(t,n){if(!e(t))return t;var r,o;if(n&&\"function\"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;if(\"function\"==typeof(r=t.valueOf)&&!e(o=r.call(t)))return o;if(!n&&\"function\"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;throw TypeError(\"Can't convert object to primitive value\")}},function(t,n){var r=0,e=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++r+e).toString(36))}},function(t,n,r){\"use strict\";function e(t){return t&&t.__esModule?t:{default:t}}function o(){return\"win32\"!==process.platform?\"\":\"ia32\"===process.arch&&process.env.hasOwnProperty(\"PROCESSOR_ARCHITEW6432\")?\"mixed\":\"native\"}function i(t){return(0,l.createHash)(\"sha256\").update(t).digest(\"hex\")}function c(t){switch(h){case\"darwin\":return t.split(\"IOPlatformUUID\")[1].split(\"\\n\")[0].replace(/\\=|\\s+|\\\"/gi,\"\").toLowerCase();case\"win32\":return t.toString().split(\"REG_SZ\")[1].replace(/\\r+|\\n+|\\s+/gi,\"\").toLowerCase();case\"linux\":return t.toString().replace(/\\r+|\\n+|\\s+/gi,\"\").toLowerCase();case\"freebsd\":return t.toString().replace(/\\r+|\\n+|\\s+/gi,\"\").toLowerCase();default:throw new Error(\"Unsupported platform: \"+process.platform)}}function u(t){var n=c((0,p.execSync)(y[h]).toString());return t?n:i(n)}function s(t){return new a.default(function(n,r){return(0,p.exec)(y[h],{},function(e,o,u){if(e)return r(new Error(\"Error while obtaining machine id: \"+e.stack));var s=c(o.toString());return n(t?s:i(s))})})}Object.defineProperty(n,\"__esModule\",{value:!0});var f=r(35),a=e(f);n.machineIdSync=u,n.machineId=s;var p=r(70),l=r(71),v=process,h=v.platform,d={native:\"%windir%\\\\System32\",mixed:\"%windir%\\\\sysnative\\\\cmd.exe /c %windir%\\\\System32\"},y={darwin:\"ioreg -rd1 -c IOPlatformExpertDevice\",win32:d[o()]+\"\\\\REG.exe QUERY HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography /v MachineGuid\",linux:\"( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname ) | head -n 1 || :\",freebsd:\"kenv -q smbios.system.uuid || sysctl -n kern.hostuuid\"}},function(t,n,r){t.exports={default:r(36),__esModule:!0}},function(t,n,r){r(66),r(68),r(69),r(67),t.exports=r(6).Promise},function(t,n){t.exports=function(){}},function(t,n){t.exports=function(t,n,r,e){if(!(t instanceof n)||void 0!==e&&e in t)throw TypeError(r+\": incorrect invocation!\");return t}},function(t,n,r){var e=r(13),o=r(31),i=r(62);t.exports=function(t){return function(n,r,c){var u,s=e(n),f=o(s.length),a=i(c,f);if(t&&r!=r){for(;f>a;)if(u=s[a++],u!=u)return!0}else for(;f>a;a++)if((t||a in s)&&s[a]===r)return t||a||0;return!t&&-1}}},function(t,n,r){var e=r(7),o=r(44),i=r(43),c=r(3),u=r(31),s=r(64),f={},a={},n=t.exports=function(t,n,r,p,l){var v,h,d,y,_=l?function(){return t}:s(t),x=e(r,p,n?2:1),m=0;if(\"function\"!=typeof _)throw TypeError(t+\" is not iterable!\");if(i(_)){for(v=u(t.length);v>m;m++)if(y=n?x(c(h=t[m])[0],h[1]):x(t[m]),y===f||y===a)return y}else for(d=_.call(t);!(h=d.next()).done;)if(y=o(d,x,h.value,n),y===f||y===a)return y};n.BREAK=f,n.RETURN=a},function(t,n){t.exports=function(t,n,r){var e=void 0===r;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},function(t,n,r){var e=r(11);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==e(t)?t.split(\"\"):Object(t)}},function(t,n,r){var e=r(10),o=r(1)(\"iterator\"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||i[o]===t)}},function(t,n,r){var e=r(3);t.exports=function(t,n,r,o){try{return o?n(e(r)[0],r[1]):n(r)}catch(n){var i=t.return;throw void 0!==i&&e(i.call(t)),n}}},function(t,n,r){\"use strict\";var e=r(49),o=r(17),i=r(18),c={};r(5)(c,r(1)(\"iterator\"),function(){return this}),t.exports=function(t,n,r){t.prototype=e(c,{next:o(1,r)}),i(t,n+\" Iterator\")}},function(t,n,r){var e=r(1)(\"iterator\"),o=!1;try{var i=[7][e]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(t){}t.exports=function(t,n){if(!n&&!o)return!1;var r=!1;try{var i=[7],c=i[e]();c.next=function(){return{done:r=!0}},i[e]=function(){return c},t(i)}catch(t){}return r}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n,r){var e=r(2),o=r(30).set,i=e.MutationObserver||e.WebKitMutationObserver,c=e.process,u=e.Promise,s=\"process\"==r(11)(c);t.exports=function(){var t,n,r,f=function(){var e,o;for(s&&(e=c.domain)&&e.exit();t;){o=t.fn,t=t.next;try{o()}catch(e){throw t?r():n=void 0,e}}n=void 0,e&&e.enter()};if(s)r=function(){c.nextTick(f)};else if(i){var a=!0,p=document.createTextNode(\"\");new i(f).observe(p,{characterData:!0}),r=function(){p.data=a=!a}}else if(u&&u.resolve){var l=u.resolve();r=function(){l.then(f)}}else r=function(){o.call(e,f)};return function(e){var o={fn:e,next:void 0};n&&(n.next=o),t||(t=o,r()),n=o}}},function(t,n,r){var e=r(3),o=r(50),i=r(22),c=r(19)(\"IE_PROTO\"),u=function(){},s=\"prototype\",f=function(){var t,n=r(16)(\"iframe\"),e=i.length,o=\">\";for(n.style.display=\"none\",r(25).appendChild(n),n.src=\"javascript:\",t=n.contentWindow.document,t.open(),t.write(\"