keyrouter 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -24
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +15 -15
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-injection/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/saml/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codewhale-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/crush-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/forge-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/smelt-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-injection.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-injection.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/prompt-injection.segments/!KGRhc2hib2FyZCk/dashboard/prompt-injection/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/prompt-injection.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/prompt-injection.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +3 -3
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +15 -15
- package/app/.next-cli-build/server/chunks/1051.js +1 -1
- package/app/.next-cli-build/server/chunks/1350.js +1 -1
- package/app/.next-cli-build/server/chunks/2172.js +1 -1
- package/app/.next-cli-build/server/chunks/241.js +1 -1
- package/app/.next-cli-build/server/chunks/5299.js +9 -9
- package/app/.next-cli-build/server/chunks/5330.js +1 -1
- package/app/.next-cli-build/server/chunks/6457.js +2 -2
- package/app/.next-cli-build/server/chunks/6844.js +1 -1
- package/app/.next-cli-build/server/chunks/8128.js +1 -1
- package/app/.next-cli-build/server/chunks/8682.js +1 -1
- package/app/.next-cli-build/server/chunks/869.js +1 -1
- package/app/.next-cli-build/server/chunks/9100.js +1 -1
- package/app/.next-cli-build/server/chunks/915.js +1 -1
- package/app/.next-cli-build/server/chunks/9604.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +2 -2
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/{5497-b15e05f4ba4dba78.js → 5497-54a2c3dfa292cd6f.js} +1 -1
- package/app/.next-cli-build/static/chunks/761-00700c1c25957243.js +132 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-7feaa4a67a8eb771.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-f01d3cbfee3be6ee.js → page-3529b621905c9456.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-c7eb81dfb0b4fd77.js +1 -0
- package/app/.next-cli-build/static/chunks/app/landing/page-38fc3c430a1a29dc.js +1 -0
- package/app/.next-cli-build/static/chunks/app/{layout-5422d1fa60776fe5.js → layout-47a7f93a93a7249c.js} +1 -1
- package/app/package.json +1 -1
- package/app/public/i18n/literals/fa.json +1 -1
- package/app/public/i18n/literals/id.json +1 -1
- package/app/public/i18n/literals/km.json +1 -1
- package/app/public/i18n/literals/pt-BR.json +1 -1
- package/app/public/i18n/literals/th.json +1 -1
- package/app/public/i18n/literals/zh-CN.json +1 -1
- package/app/public/icons/icon-192.svg +3 -1
- package/app/public/icons/icon-512.svg +3 -1
- package/app/src/lib/updater/updater.js +2 -2
- package/app/src/mitm/server.js +1 -1
- package/app/src/shared/utils/apiKey.js +1 -1
- package/cli.js +7 -7
- package/hooks/trayRuntime.js +1 -1
- package/package.json +1 -1
- package/src/cli/api/client.js +2 -2
- package/src/cli/commands/connect.js +4 -4
- package/src/cli/commands/xaiVideo.js +1 -1
- package/src/cli/menus/providers.js +1 -1
- package/src/cli/menus/settings.js +1 -1
- package/src/cli/tray/icon.ico +0 -0
- package/src/cli/tray/icon.png +0 -0
- package/src/cli/utils/input.js +18 -11
- package/app/.next-cli-build/static/chunks/761-3602d74d7fb3c4f7.js +0 -132
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-8e4de2642dc5b61a.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-879d27966cca2817.js +0 -1
- package/app/.next-cli-build/static/chunks/app/landing/page-a571fd8ce400407b.js +0 -1
- /package/app/.next-cli-build/static/{Ubl3m4xjT44gfS_ASKhN2 → OQlH5Y4fdrzSgUpl8Gw_9}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{Ubl3m4xjT44gfS_ASKhN2 → OQlH5Y4fdrzSgUpl8Gw_9}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=8128,exports.ids=[7247,8128],exports.modules={10079:(a,b,c)=>{function d(a){let b=(a||"").trim();return b?b.replace(/^bearer\s+/i,"").replace(/^cookie:/i,"").trim():""}function e(a,b){let c=d(a);if(!c)return"";let e=function(a){let b,c=(a||"").trim();if(!c||!c.startsWith("["))return null;try{b=JSON.parse(c)}catch{return null}if(!Array.isArray(b))return null;if(0===b.length)return"";let d=[];for(let a=0;a<b.length;a++){let c=b[a];if(!c||"object"!=typeof c||Array.isArray(c))throw Error(`Invalid cookie JSON at index ${a}: expected an object`);if("string"!=typeof c.name||!c.name)throw Error(`Invalid cookie JSON at index ${a}: missing required field 'name'`);if("string"!=typeof c.value)throw Error(`Invalid cookie JSON at index ${a}: missing required field 'value'`);d.push(`${c.name}=${c.value}`)}return d.join("; ")}(c);return null!==e?e:c.includes("=")?c:`${b}=${c}`}c.d(b,{$J:()=>h,EU:()=>g,lT:()=>i,p1:()=>e});let f=new Set(["path","domain","expires","max-age","secure","httponly","samesite"]);function g(a,b){let c=[];for(let d of String(a||"").split(";")){let a=d.trim();if(!a)continue;let e=a.indexOf("=");if(e<=0)continue;let g=a.slice(0,e).trim(),h=a.slice(e+1).trim();if(!g||!h||f.has(g.toLowerCase()))continue;let i=String(b||"").replace(/^\./,"");g.startsWith("__Host-")?c.push({name:g,value:h,domain:i,path:"/",secure:!0}):c.push({name:g,value:h,domain:b,path:"/",secure:!0})}return c}function h(a,b){let c=d(a);if(!c)return"";if(c.includes(";")){let a=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=c.match(RegExp("(?:^|;\\s*)"+a+"=([^;\\s]+)"));return d?d[1]:""}let e=`${b}=`;return c.startsWith(e)?c.slice(e.length):c}function i(a){let b=h(a,"sso");if(!b)return"";let c=[`sso=${b}`];for(let b of["sso-rw","cf_clearance","__cf_bm"])if(RegExp("(?:^|;\\s*)"+b+"=").test(a)){let d=h(a,b);d&&c.push(`${b}=${d}`)}return c.join("; ")}},20742:(a,b,c)=>{let d;c.d(b,{A:()=>r});var e=c(31421),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(73136),k=c(26182);let l={"playwright-core":"^1.62.1","wreq-js":"^3.2.0"};function m(){return i().join((0,k.S)(),"runtime")}function n(a){let b=String(a?.code||"");return"MODULE_NOT_FOUND"===b||"ERR_MODULE_NOT_FOUND"===b}async function o(a,b){let c,d,f,h,j=m(),k=await (c=m(),g().mkdirSync(c,{recursive:!0}),d=i().join(c,"package.json"),!g().existsSync(d)&&g().writeFileSync(d,JSON.stringify({name:"keyrouter-runtime",private:!0},null,2)),f="win32"===process.platform?"npm.cmd":"npm",h=["install","--no-audit","--no-fund","--prefer-online",`${a}@${b}`],new Promise(a=>{let b=(0,e.spawn)(f,h,{cwd:c,stdio:["ignore","pipe","pipe"],shell:"win32"===process.platform}),d="";b.stderr?.on("data",a=>{d+=String(a)}),b.on("error",b=>a({ok:!1,stderr:String(b.message||b)})),b.on("close",b=>a({ok:0===b,stderr:d}))}));if(!k.ok){let c=(k.stderr.match(/npm ERR! ?(.+)/)||[])[1]||k.stderr.split("\n").filter(Boolean).pop()||"unknown npm error";throw Error(`${a} is missing and the on-demand install failed (${String(c).slice(0,160)}) — install it manually: cd "${j}" && npm install ${a}@${b}`)}}let p=new Map;async function q(a){try{return await import(a)}catch(a){if(!n(a))throw a}let b=(await (d??=import("node:module").then(a=>a.createRequire)))(i().join(m(),"package.json"));try{return await import((0,j.pathToFileURL)(b.resolve(a)).href)}catch(a){if(!n(a))throw a}let c=l[a]||"latest",e=()=>import((0,j.pathToFileURL)(b.resolve(a)).href);await o(a,c);try{return await e()}catch(b){if(!n(b))throw b;return g().rmSync(i().join(m(),"node_modules",a),{recursive:!0,force:!0}),await o(a,c),e()}}function r(a){return p.has(a)||p.set(a,q(a).finally(()=>p.delete(a))),p.get(a)}},22115:(a,b,c)=>{c.d(b,{CO:()=>e,X7:()=>j,ZB:()=>i,jm:()=>h});var d=c(20742);let e="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36",f=null;async function g(){return f||(f=(async()=>{let a=await (0,d.A)("wreq-js");if("function"!=typeof a.createSession)throw Error("wreq-js runtime is missing createSession");return a.createSession({browser:"chrome_146",os:"macos"})})().catch(a=>{throw f=null,a})),f}class h extends Error{constructor(a){super(a),this.name="GrokTlsUnavailableError"}}function i(a){return"string"==typeof a&&/just a moment|attention required|cf-mitigated/i.test(a)}async function j(a,{method:b="GET",headers:c={},body:d,timeoutMs:e=12e4,signal:f}={}){let i;try{i=await g()}catch(a){throw new h(`wreq-js unavailable (${a instanceof Error?a.message:"unknown"}) — install the optional wreq-js dependency to use Grok Web`)}let k={method:b.toUpperCase(),headers:c,redirect:"follow",timeout:e};void 0!==d&&(k.body=d),f&&(k.signal=f);let l=await i.fetch(a,k),m=await l.arrayBuffer(),n={};try{l.headers&&"function"==typeof l.headers.forEach&&l.headers.forEach((a,b)=>{n[b]=a})}catch{}return new Response(m,{status:l.status,headers:n})}},26182:(a,b,c)=>{c.d(b,{S:()=>k});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h);let j=null;function k(){if(j)return j;for(let a of[process.env.DATA_DIR,i().join(g().homedir(),".keyrouter"),i().join(g().tmpdir(),"keyrouter")].filter(Boolean))try{return e().mkdirSync(a,{recursive:!0}),e().accessSync(a,e().constants.W_OK),j=a,a}catch{}return j=process.cwd()}},39006:a=>{a.exports={rE:"1.0.0"}},39326:(a,b,c)=>{c.d(b,{B:()=>h,p:()=>g});var d=c(71998);function e(a){return null==a?"":String(a).trim()}let f=new Map;function g(a,b,c){if(!a||0===a.length)return null;if(1===a.length)return a[0];if("round-robin"===b){let b=f.get(c)||{index:-1};return b.index=(b.index+1)%a.length,f.set(c,b),a[b.index]}return"random"===b?a[Math.floor(Math.random()*a.length)]:a[0]}async function h(a={}){try{let b=e(a?.proxyPoolId),c="__none__"===b?"":b,f=function(a={}){let b=a?.connectionProxyEnabled===!0;return{connectionProxyEnabled:b,connectionProxyUrl:e(a?.connectionProxyUrl),connectionNoProxy:e(a?.connectionNoProxy)}}(a),g=!1;if(c){let a=await (0,d.hr)(c),b=e(a?.proxyUrl),f=e(a?.noProxy),h=a&&!0===a.isActive&&b;if(g=a?.strictProxy===!0,h){if("vercel"===a.type||"cloudflare"===a.type||"deno"===a.type||"netlify"===a.type)return{source:a.type,proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:f,strictProxy:!0===a.strictProxy,vercelRelayUrl:b};return{source:"pool",proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!0,connectionProxyUrl:b,connectionNoProxy:f,strictProxy:!0===a.strictProxy}}}if(f.connectionProxyEnabled&&f.connectionProxyUrl)return{source:"legacy",proxyPoolId:c||null,proxyPool:null,strictProxy:g,...f};return{source:"none",proxyPoolId:c||null,proxyPool:null,strictProxy:g,...f}}catch(a){return console.error("[resolveConnectionProxyConfig] Failed to resolve proxy config:",a),{source:"error",proxyPoolId:null,proxyPool:null,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:"",strictProxy:!1}}}},52284:(a,b,c)=>{c.d(b,{w$:()=>e});let d=c(39006).rE||"0.0.0";function e(a,b={}){let c,f=(c=function(a){if("string"!=typeof a)return"";let b=a.trim();return b?b.toLowerCase().startsWith("workos:")?b:/^eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/.test(b)?`workos:${b}`:b:""}(a))?`Bearer ${c}`:"",g={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","User-Agent":`KeyRouter/${d}`,"X-PLATFORM":process.platform||"unknown","X-PLATFORM-VERSION":process.version||"unknown","X-CLIENT-TYPE":"keyrouter","X-CLIENT-VERSION":d,"X-CORE-VERSION":d,"X-IS-MULTIROOT":"false",...b};return f&&(g.Authorization=f),g}},57247:(a,b,c)=>{c.d(b,{KC:()=>t,OA:()=>p,PROVIDER_MODELS:()=>e.vq,SM:()=>j,V2:()=>q,Xg:()=>s,cY:()=>u,ez:()=>o,fZ:()=>k,kt:()=>r,ux:()=>n});var d=c(8499),e=c(26070),f=c(99511),g=c(59096),h=c(14170);let i=a=>!a||["oc","opencode","ocg","opencode-go","ocz","opencode-zen"].includes(a);function j(a){return e.vq[a]||[]}function k(a){let b=e.vq[a];return b?.[0]?.id||null}let l=new Set(["kr","kiro"]);function m(a,b,c){if(!a)return;let d="string"==typeof b?b.replace(/\([^()]+\)\s*$/,"").trim():b,e=a.find(a=>a.id===b||a.id===d);if(e)return e;if(!l.has(c))return;let g=(0,f.Kq)(d);if(g!==d)return a.find(a=>a.id===g)}function n(a,b){if(i(a)&&(0,g.nh)(b))return h.h.OPENAI_RESPONSES;let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?(0,f.gr)(d):i(a)&&(0,g.i8)(b)?.targetFormat||null}function o(a,b){let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?(0,f.ec)(d):i(a)?(0,g.i8)(b)?.supportedFormats||[h.h.OPENAI]:null}function p(a,b){let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?.kind||d?.type||null}function q(a,b){return m(e.vq[a],b,a)||null}function r(a,b,c=null){let d="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,f=d?d[0]:"",h=f?b.slice(0,d.index).trim():b,i=e.vq[a],j=f?f.slice(1,-1).trim().toLowerCase():"",k="xhigh"===j||"max"===j?"high":"minimal"===j?"low":j;if(!k&&c&&"object"==typeof c){let a=c.reasoning_effort||c.output_config?.effort||("object"==typeof c.reasoning?c.reasoning?.effort:null);if("string"==typeof a&&a){let b=a.toLowerCase().trim();k="xhigh"===b||"max"===b?"high":"minimal"===b?"low":b}else if(c.thinking&&"object"==typeof c.thinking){let a=Number(c.thinking.budget_tokens);Number.isFinite(a)&&a>0&&(k=a>16384?"high":a<=4096?"low":"medium")}}let l=k?`${h}-${k}`:null,n=l&&m(i,l,a)||m(i,h,a),o=n?.upstreamModelId||n?.id;if(o){let a=o.match(/\([^()]+\)\s*$/),b=a?.[0]||"";return(b?o.slice(0,a.index).trim():o)+(f||(b&&k?`(${k})`:b))}return"cx"===a&&"string"==typeof h&&h.endsWith(g.d5)?h.slice(0,-g.d5.length)+f:h+f}Object.fromEntries(d.default.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias]));let s=Object.fromEntries(d.default.map(a=>[a.id,a.alias||a.id]));function t(a){let b=s[a]||a;return e.vq[b]||[]}function u(a,b){return(0,f.g5)(m(e.vq[a],b,a))}},66328:(a,b,c)=>{c.d(b,{F:()=>A});var d=c(89718),e=c(39326),f=c(74926),g=c(40615),h=c(57247),i=c(19696),j=c(35024),k=c(75924),l=c(90737),m=c(29493),n=c(93943),o=c(92990),p=c(52284),q=c(50980);let r={claude:{checkExpiry:!0,refreshable:!0},codex:{url:"https://chatgpt.com/backend-api/codex/responses",method:"POST",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"Content-Type":"application/json",originator:"codex_cli_rs","User-Agent":`codex_cli_rs/${k.Ch}`},body:JSON.stringify({model:"gpt-5.3-codex",input:[],stream:!1,store:!1}),acceptStatuses:[400],refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"KeyRouter",Accept:"application/vnd.github+json"}},iflow:{buildUrl:a=>`https://iflow.cn/api/oauth/getUserInfo?accessToken=${encodeURIComponent(a)}`,method:"GET",noAuth:!0},kiro:{checkExpiry:!0,refreshable:!0},qoder:{url:"https://openapi.qoder.sh/api/v1/userinfo",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!1},"qoder-cn":{url:"https://openapi.qoder.com.cn/api/v1/userinfo",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!1},kimi:{checkExpiry:!0,refreshable:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},cursor:{tokenExists:!0},kilocode:{url:`${o.MZ.apiBaseUrl}/api/profile`,method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},cline:{refreshable:!0},gitlab:{url:"https://gitlab.com/api/v4/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},"codebuddy-cn":{tokenExists:!0},"codebuddy-intl":{tokenExists:!0},kimchi:{url:o.Td.validationUrl||"https://api.cast.ai/v1/llm/openai/supported-providers",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{Accept:"application/json","User-Agent":"kimchi/0.1.40"},refreshable:!1},"grok-cli":{url:j.xq["grok-cli"]?.userUrl||"https://cli-chat-proxy.grok.com/v1/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{Accept:"application/json",...j.xq["grok-cli"]?.headers||{"User-Agent":l.hY,"x-xai-token-auth":"xai-grok-cli","x-grok-client-identifier":"grok-pager","x-grok-client-version":l.uG}},refreshable:!0,acceptStatuses:[402],softFailMessage:{402:"Connected, but Grok Build credits are exhausted (spending limit). Add credits or upgrade SuperGrok."}},muse:{url:"https://api.meta.ai/v1/models",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"x-api-version":"1.0.0"},refreshable:!1},nous:{url:m.b,method:"POST",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"Content-Type":"application/json"},body:JSON.stringify({model:m.UK,messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1}),refreshable:!0,useApiKey:!0}};function s(a,b,c=""){if(!a)return{valid:!1,error:"No response",soft:!1};let d=a.status;if(!(a.ok||b?.acceptStatuses&&b.acceptStatuses.includes(d)))return 401===d?{valid:!1,error:"Token invalid or revoked",soft:!1}:403===d?{valid:!1,error:"Access denied",soft:!1}:{valid:!1,error:`API returned ${d}`,soft:!1};if(!a.ok&&b?.acceptStatuses?.includes(d)){let a=b.softFailMessage||{};if(a[d])return{valid:!0,error:a[d],soft:!0}}return{valid:!0,error:null,soft:!1}}async function t(a){return await fetch("https://api.cline.bot/api/v1/users/me",{method:"GET",headers:(0,p.w$)(a,{Accept:"application/json"})})}let u=JSON.stringify({metadata:{ideType:"IDE_UNSPECIFIED",platform:"PLATFORM_UNSPECIFIED",pluginType:"GEMINI"}});async function v(a,b,c=null){let d="antigravity"===a.provider?o.YT.loadCodeAssistUserAgent||"antigravity/hub/2.24.0 darwin/arm64":"google-api-nodejs-client/9.15.1 gemini-cli/0.34.0",e=await y("https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",{method:"POST",headers:{Authorization:`Bearer ${b}`,"Content-Type":"application/json","User-Agent":d},body:u},c);return e.ok?{valid:!0,error:null}:{valid:!1,error:function(a,b){if(!a)return b;try{let b=JSON.parse(a),c=b?.error?.message||b?.message||b?.error;if("string"==typeof c&&c.trim())return c.trim();if(c)return JSON.stringify(c)}catch{}return a.trim()||b}(await e.text().catch(()=>""),`API returned ${e.status}`),status:e.status}}async function w(a){let b=a.provider,c=a.refreshToken;if(!c)return null;try{if("gemini-cli"===b||"antigravity"===b){let a="gemini-cli"===b?o.LT:o.YT,d=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:a.clientId,client_secret:a.clientSecret,grant_type:"refresh_token",refresh_token:c})});if(!d.ok)return null;let e=await d.json();return{accessToken:e.access_token,expiresIn:e.expires_in,refreshToken:e.refresh_token||c}}if("codex"===b||"grok-cli"===b||"xai"===b||"nous"===b)return await (0,n.Vq)(b,a,console);if("claude"===b){let a=await fetch(o.OV.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:c,client_id:o.OV.clientId})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("kiro"===b){let b=a.providerSpecificData||{},d=b.clientId||a.clientId,e=b.clientSecret||a.clientSecret,f=b.region||a.region;if(d&&e){let a=`https://oidc.${f||"us-east-1"}.amazonaws.com/token`,b=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:d,clientSecret:e,refreshToken:c,grantType:"refresh_token"})});if(!b.ok)return null;let g=await b.json();return{accessToken:g.accessToken,expiresIn:g.expiresIn||3600,refreshToken:g.refreshToken||c}}let g=await fetch(o.Tx.socialRefreshUrl,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"kiro-cli/1.0.0"},body:JSON.stringify({refreshToken:c})});if(!g.ok)return null;let h=await g.json();return{accessToken:h.accessToken,expiresIn:h.expiresIn||3600,refreshToken:h.refreshToken||c}}if("cline"===b){let a=await fetch(o.lB.refreshUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:c,grantType:"refresh_token",clientType:"extension"})});if(!a.ok)return null;let b=await a.json(),d=b?.data||b,e=d?.expiresAt?Math.max(1,Math.floor((new Date(d.expiresAt).getTime()-Date.now())/1e3)):3600;return{accessToken:d?.accessToken,expiresIn:e,refreshToken:d?.refreshToken||c}}return null}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}async function x(a,b=null){let c=r[a.provider];if(!c)return{valid:!1,error:"Provider test not supported",refreshed:!1};if(!a.accessToken)return{valid:!1,error:"No access token",refreshed:!1};if(c.tokenExists)return{valid:!0,error:null,refreshed:!1,newTokens:null};let d=c.useApiKey&&a.apiKey||a.accessToken,e=!1,f=null,g=(0,n.fp)(a.provider,a);if(c.refreshable&&g&&a.refreshToken){let b=await w(a);if(!b)return{valid:!1,error:"Token expired and refresh failed",refreshed:!1};d=c.useApiKey&&b.apiKey||b.accessToken,e=!0,f=b}if(c.checkExpiry)return e?{valid:!0,error:null,refreshed:e,newTokens:f}:g?{valid:!1,error:"Token expired",refreshed:!1}:{valid:!0,error:null,refreshed:!1,newTokens:null};if("gemini-cli"===a.provider||"antigravity"===a.provider){let g=await v(a,d,b);if(g.valid)return{valid:!0,error:null,refreshed:e,newTokens:f};if(401===g.status&&c.refreshable&&!e&&a.refreshToken){let c=await w(a);if(c?.accessToken){let d=await v(a,c.accessToken,b);return d.valid?{valid:!0,error:null,refreshed:!0,newTokens:c}:{valid:!1,error:d.error,refreshed:!0,newTokens:c}}return{valid:!1,error:"Token invalid or revoked",refreshed:!1}}return{valid:!1,error:g.error,refreshed:e}}if("cline"===a.provider){let b=async a=>{let b=await t(a);return b.ok?{valid:!0,error:null,refreshed:e,newTokens:f}:401===b.status?{valid:!1,error:"Token invalid or revoked",refreshed:e}:403===b.status?{valid:!1,error:"Access denied",refreshed:e}:{valid:!1,error:`API returned ${b.status}`,refreshed:e}},c=await b(d);if(c.valid||"Token invalid or revoked"!==c.error||!a.refreshToken)return c;let g=await w(a);return g?.accessToken?(e=!0,f=g,d=g.accessToken,await b(d)):{valid:!1,error:"Token invalid or revoked",refreshed:!1}}try{let g=c.buildUrl?c.buildUrl(d):c.url,h=c.noAuth?{...c.extraHeaders}:{[c.authHeader]:`${c.authPrefix}${d}`,...c.extraHeaders},i={method:c.method,headers:h};c.body&&(i.body=c.body);let j=await y(g,i,b),k=j.ok?"":await j.text().catch(()=>""),l=s(j,c,k);if(l.valid)return{valid:!0,error:l.soft?l.error:null,warning:l.soft?l.error:null,refreshed:e,newTokens:f};if(401===j.status&&c.refreshable&&!e&&a.refreshToken){let d=await w(a);if(d){let a=c.useApiKey&&d.apiKey||d.accessToken,e=c.buildUrl?c.buildUrl(a):g,f=c.noAuth?{...c.extraHeaders}:{[c.authHeader]:`${c.authPrefix}${a}`,...c.extraHeaders},h={method:c.method,headers:f};c.body&&(h.body=c.body);let i=await y(e,h,b),j=i.ok?"":await i.text().catch(()=>""),k=s(i,c,j);if(k.valid)return{valid:!0,error:k.soft?k.error:null,warning:k.soft?k.error:null,refreshed:!0,newTokens:d}}return{valid:!1,error:"Token invalid or revoked",refreshed:!1}}return{valid:!1,error:l.error,refreshed:e}}catch(a){return{valid:!1,error:a.message,refreshed:e}}}async function y(a,b={},d=null){if(b.signal||(b.signal=AbortSignal.timeout(15e3)),d?.vercelRelayUrl){let{proxyAwareFetch:e}=await Promise.resolve().then(c.bind(c,39609));return e(a,b,{vercelRelayUrl:d.vercelRelayUrl})}if(!d?.connectionProxyEnabled||!d?.connectionProxyUrl)return fetch(a,b);let{proxyAwareFetch:e}=await Promise.resolve().then(c.bind(c,39609));return e(a,b,{connectionProxyEnabled:!0,connectionProxyUrl:d.connectionProxyUrl,connectionNoProxy:d.connectionNoProxy||""})}async function z(a,b=null){if((0,g.mq)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{let d=await y(`${c.replace(/\/$/,"")}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}if((0,g.gb)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{(c=c.replace(/\/$/,"")).endsWith("/messages")&&(c=c.slice(0,-9));let d=`${c}/v1/messages`,e=a.defaultModel||"claude-3-haiku-20240307",f=await y(d,{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json",Authorization:`Bearer ${a.apiKey}`},body:JSON.stringify({model:e,max_tokens:1,messages:[{role:"user",content:"test"}]})},b),g=401!==f.status&&403!==f.status;return{valid:g,error:g?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}if(g.AI_PROVIDERS[a.provider]?.credentialForm==="aws")try{return await (0,i.jL)(a,(a,c)=>y(a,c,b))}catch(a){return{valid:!1,error:a.message}}if((0,q.b7)(a.provider)){let b=await (0,q.TZ)(a.provider,a.apiKey||"");return"valid"===b.status?{valid:!0,error:null}:"invalid"===b.status?{valid:!1,error:b.error}:{valid:!0,error:`Could not verify the session: ${b.error}`}}try{switch(a.provider){case"commandcode":{let c=await y("https://api.commandcode.ai/alpha/whoami?limits=1",{headers:{Authorization:`Bearer ${a.apiKey}`,Accept:"application/json"}},b),d=c.ok;return{valid:d,error:d?null:401===c.status||403===c.status?"Invalid API key":`Command Code API error (${c.status})`}}case"cloudflare-ai":{let c=(a.providerSpecificData||{}).accountId;if(!c)return{valid:!1,error:"Missing Account ID"};let d=`https://api.cloudflare.com/client/v4/accounts/${c}/ai/v1/chat/completions`,e=await y(d,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:(0,h.fZ)("cloudflare-ai"),messages:[{role:"user",content:"test"}],max_tokens:1})},b),f=401!==e.status&&403!==e.status&&404!==e.status;return{valid:f,error:f?null:"Invalid API token or Account ID"}}case"azure":{let c=a.providerSpecificData||{},d=(c.azureEndpoint||"").replace(/\/$/,""),e=c.deployment||"gpt-4",f=c.apiVersion||"2024-10-01-preview",g=`${d}/openai/deployments/${e}/chat/completions?api-version=${f}`,h={"api-key":a.apiKey,"Content-Type":"application/json"};c.organization&&(h["OpenAI-Organization"]=c.organization);let i=await y(g,{method:"POST",headers:h,body:JSON.stringify({messages:[{role:"user",content:"test"}],max_completion_tokens:1})},b),j=401!==i.status&&403!==i.status;return{valid:j,error:j?null:"Invalid API key or Azure configuration"}}case"openai":{let c=await y("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"vercel-ai-gateway":{let c=await y("https://ai-gateway.vercel.sh/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"anthropic":{let c=await y("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"claude-3-haiku-20240307",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"gemini":{let c=await y(`https://generativelanguage.googleapis.com/v1/models?key=${a.apiKey}`,{},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"openrouter":{let c=await y("https://openrouter.ai/api/v1/auth/key",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nous":{let c=(0,m.HN)(a.apiKey),d=await y(c.url,{...c.options,signal:AbortSignal.timeout(8e3)},b),e=(0,m.Yn)(d.status);return{valid:e,error:e?null:(0,m.K5)(d.status)}}case"glm":{let c=await y("https://api.z.ai/api/anthropic/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"glm-cn":{let c=await y("https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"minimax":case"minimax-cn":{let c=await y({minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages"}[a.provider],{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"minimax-m2",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"kimi":{let c=await y("https://api.kimi.com/coding/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"kimi-latest",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"alicode":case"alicode-intl":case"alims-intl":{let c="alicode-intl"===a.provider?"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions":"alims-intl"===a.provider?"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions":"https://coding.dashscope.aliyuncs.com/v1/chat/completions",d=await y(c,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,h.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),e=401!==d.status&&403!==d.status;return{valid:e,error:e?null:"Invalid API key"}}case"volcengine-ark":case"byteplus":{let c=await y(j.xq[a.provider]?.baseUrl,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,h.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"deepseek":{let c=await y("https://api.deepseek.com/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"groq":{let c=await y("https://api.groq.com/openai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"mistral":{let c=await y("https://api.mistral.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"xai":{let c=await y("https://api.x.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nvidia":{let c=await y("https://integrate.api.nvidia.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"perplexity":{let c=await y("https://api.perplexity.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"together":{let c=await y("https://api.together.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fireworks":{let c=await y("https://api.fireworks.ai/inference/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cerebras":{let c=await y("https://api.cerebras.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cohere":{let c=await y("https://api.cohere.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nebius":{let c=await y("https://api.studio.nebius.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"siliconflow":{let c=await y("https://api.siliconflow.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"hyperbolic":{let c=await y("https://api.hyperbolic.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"tokenharbor":case"dahl":case"atria":case"agnes":case"bai":case"muse":case"runcrate":{let c=j.xq[a.provider],d=await y(c.validateUrl,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key"}}case"ollama":{let b=await fetch("https://ollama.com/api/tags",{headers:{Authorization:`Bearer ${a.apiKey}`}});return{valid:b.ok,error:b.ok?null:"Invalid API key"}}case"ollama-local":{let b=(0,j.Ak)(a),c=await fetch(`${b}/api/tags`);return{valid:c.ok,error:c.ok?null:`Ollama not reachable at ${b}`}}case"deepgram":{let c=await y("https://api.deepgram.com/v1/projects",{headers:{Authorization:`Token ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"assemblyai":{let c=await y("https://api.assemblyai.com/v1/account",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nanobanana":{let c=await y("https://api.nanobananaapi.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fal-ai":{let c=await y("https://api.fal.ai/v1/models?limit=1",{headers:{Authorization:`Key ${a.apiKey}`}},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"chutes":{let c=await y("https://llm.chutes.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"grok-web":{let c=a.apiKey.startsWith("sso=")?a.apiKey.slice(4):a.apiKey,d=a=>Array.from(crypto.getRandomValues(new Uint8Array(a)),a=>a.toString(16).padStart(2,"0")).join(""),e=Buffer.from("e:TypeError: Cannot read properties of null (reading 'children')").toString("base64"),f=await y("https://grok.com/rest/app-chat/conversations/new",{method:"POST",headers:{Accept:"*/*","Content-Type":"application/json",Cookie:`sso=${c}`,Origin:"https://grok.com",Referer:"https://grok.com/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","x-statsig-id":e,"x-xai-request-id":crypto.randomUUID(),traceparent:`00-${d(16)}-${d(8)}-00`},body:JSON.stringify({temporary:!0,modelName:"grok-4",message:"ping",fileAttachments:[],imageAttachments:[],disableSearch:!1,enableImageGeneration:!1,sendFinalMetadata:!0})},b),g=401!==f.status&&403!==f.status;return{valid:g,error:g?null:"Invalid SSO cookie"}}case"perplexity-web":{let c=a.apiKey;c.startsWith("__Secure-next-auth.session-token=")&&(c=c.slice(33));let d=await y("https://www.perplexity.ai/api/auth/session",{method:"GET",headers:{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",Cookie:`__Secure-next-auth.session-token=${c}`}},b);if(!d.ok)return{valid:!1,error:"Invalid session cookie"};let e=await d.json().catch(()=>null),f=!!(e&&e.user);return{valid:f,error:f?null:"Session expired — re-paste cookie"}}case"opencode":{let a=await y("https://opencode.ai/zen/v1/models",{headers:{Authorization:"Bearer public","User-Agent":"opencode/1.18.31"}},b);return{valid:a.ok,error:a.ok?null:"OpenCode free tier unavailable"}}case"opencode-go":{let c=await y("https://opencode.ai/zen/go/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a.apiKey}`},body:JSON.stringify({model:(0,h.fZ)("opencode-go"),messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"xiaomi-mimo":case"xiaomi-tokenplan":{let c=await y(`${{"xiaomi-mimo":"https://api.xiaomimimo.com/v1","xiaomi-tokenplan":"https://token-plan-sgp.xiaomimimo.com/v1"}[a.provider]}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"blackbox":{let c=j.xq.blackbox?.baseUrl?.replace(/\/chat\/completions$/,"")||"https://api.blackbox.ai/v1",d=await y(`${c}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key"}}case"qoder":case"qoder-cn":{let c="qoder-cn"===provider?"https://openapi.qoder.com.cn/api/v1/jobToken/exchange":"https://openapi.qoder.sh/api/v1/jobToken/exchange",d=a.apiKey||"",e=d.startsWith("pt-")?d:`pt-${d}`,f=await y(c,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","Cosy-Version":"1.0.1","Cosy-ClientType":"5"},body:JSON.stringify({personal_token:e})},b);return{valid:f.ok,error:f.ok?null:"Invalid Personal Access Token"}}case"llm7":{let c=a.providerSpecificData?.baseUrl||"https://api.llm7.io/v1",d=await y(`${c.replace(/\/$/,"")}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}case"sensenova":{let c=j.xq.sensenova?.validateUrl||"https://token.sensenova.cn/v1/models",d=await y(c,{method:"GET",headers:{Authorization:"Bearer "+a.apiKey,Accept:"application/json"}},b),e=d.ok;return{valid:e,error:e?null:401===d.status||403===d.status?"Invalid API key":`SenseNova API error (${d.status})`}}case"kimchi":{let c=o.Td.validationUrl||"https://api.cast.ai/v1/llm/openai/supported-providers",d=await y(c,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${a.apiKey}`,"User-Agent":"kimchi/0.1.40"}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key",refreshed:!1}}default:return{valid:!1,error:"Provider test not supported"}}}catch(a){return{valid:!1,error:a.message}}}async function A(a){let b,c=await (0,d.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",latencyMs:0,testedAt:new Date().toISOString()};let g=await (0,e.B)(c.providerSpecificData||{});if(g.connectionProxyEnabled&&g.connectionProxyUrl&&!g.vercelRelayUrl){let b=await (0,f.C)({proxyUrl:g.connectionProxyUrl});if(!b.ok){let c=b.error||`Proxy test failed with status ${b.status}`;return await (0,d.updateProviderConnection)(a,{testStatus:"error",lastError:c,lastErrorAt:new Date().toISOString()}),{valid:!1,error:c,latencyMs:0,testedAt:new Date().toISOString()}}}let h=Date.now();b="apikey"===c.authType||"cookie"===c.authType?await z(c,g):await x(c,g);let i=Date.now()-h,j=b.valid&&(b.warning||b.error),k={testStatus:b.valid?"active":"error",lastError:b.valid?j||null:b.error,lastErrorAt:b.valid?j?new Date().toISOString():null:new Date().toISOString()};return b.refreshed&&b.newTokens&&(b.newTokens.accessToken&&(k.accessToken=b.newTokens.accessToken),b.newTokens.refreshToken&&(k.refreshToken=b.newTokens.refreshToken),b.newTokens.apiKey&&(k.apiKey=b.newTokens.apiKey),b.newTokens.idToken&&(k.idToken=b.newTokens.idToken),b.newTokens.lastRefreshAt&&(k.lastRefreshAt=b.newTokens.lastRefreshAt),b.newTokens.expiresIn&&(k.expiresIn=b.newTokens.expiresIn),b.newTokens.expiresIn?k.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString():b.newTokens.expiresAt&&(k.expiresAt=b.newTokens.expiresAt),b.newTokens.providerSpecificData&&(k.providerSpecificData={...c.providerSpecificData||{},...b.newTokens.providerSpecificData})),await (0,d.updateProviderConnection)(a,k),{valid:b.valid,error:b.error,refreshed:!!b.refreshed,latencyMs:i,testedAt:new Date().toISOString()}}},74926:(a,b,c)=>{c.d(b,{C:()=>f});var d=c(47774);function e(a){return null==a?"":String(a).trim()}async function f({proxyUrl:a,testUrl:b,timeoutMs:c}={}){let g,h=e(a);if(!h)return{ok:!1,status:400,error:"proxyUrl is required"};let i=e(b)||"https://google.com/",j=Number(c),k=Number.isFinite(j)&&j>0?Math.min(j,3e4):8e3;try{try{g=new d.ProxyAgent({uri:h})}catch(a){return{ok:!1,status:400,error:`Invalid proxy URL: ${a?.message||String(a)}`}}let a=new AbortController,b=Date.now(),c=setTimeout(()=>a.abort(),k);try{let c=await (0,d.hd)(i,{method:"HEAD",dispatcher:g,signal:a.signal,headers:{"User-Agent":"KeyRouter"}});return{ok:c.ok,status:c.status,statusText:c.statusText,url:i,elapsedMs:Date.now()-b}}catch(b){let a=b?.name==="AbortError"?"Proxy test timed out":function(a){if(!a)return"Unknown error";let b=a?.message||String(a),c=a?.cause?.code||a?.code,d=a?.cause?.message;return d&&d!==b?c?`${b}: ${d} (${c})`:`${b}: ${d}`:c&&!b.includes(c)?`${b} (${c})`:b}(b);return{ok:!1,status:500,error:a}}finally{clearTimeout(c)}}finally{try{await g?.close?.()}catch{}}}},78959:(a,b,c)=>{c.d(b,{$U:()=>d,RK:()=>g,pb:()=>e,uB:()=>f});let d="data: [DONE]\n\n",e={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"},f={"Content-Type":"text/event-stream","Cache-Control":"no-cache","X-Accel-Buffering":"no"},g={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}},82543:(a,b,c)=>{function d(a,b="__Secure-1PSID"){let c=a.trim();if(!c)return"";let e=function(a){if(!a.startsWith("{"))return[];try{let b=JSON.parse(a),c=b.cookies&&"object"==typeof b.cookies&&!Array.isArray(b.cookies)?b.cookies:b;return Object.entries(c).filter(([,a])=>"string"==typeof a&&a.trim().length>0).map(([a,b])=>`${a}=${String(b).trim()}`)}catch{return[]}}(c);return e.length>0?e.join("; "):c.includes("=")?c:`${b}=${c}`}function e(a){let b=d(a.trim().replace(/^cookie:\s*/i,"")),c=b.split(";").map(a=>a.trim()).find(a=>a.toLowerCase().startsWith("__secure-1psid="));return c&&0!==c.slice(c.indexOf("=")+1).trim().length?b:null}c.d(b,{L:()=>d,m:()=>e})},92990:(a,b,c)=>{c.d(b,{DI:()=>i,DV:()=>A,LT:()=>j,MZ:()=>v,Nl:()=>z,Nu:()=>p,OV:()=>h,RY:()=>I,S6:()=>s,SK:()=>F,Td:()=>B,Tx:()=>q,WN:()=>t,Ww:()=>K,YT:()=>n,Z2:()=>J,ZL:()=>m,_0:()=>H,aV:()=>u,cD:()=>o,eD:()=>G,f7:()=>y,hF:()=>k,lB:()=>w,oe:()=>E,qp:()=>C,sA:()=>D,t3:()=>l,w1:()=>x});var d=c(21820),e=c(74129),f=c(26070);function g(){let a=(0,d.platform)(),b=(0,d.arch)();return"darwin"===a?"arm64"===b?2:1:"linux"===a?"arm64"===b?4:3:5*("win32"===a)}let h={...f.sr.claude},i={...f.sr.codex},j={...e.dG,...f.sr["gemini-cli"]},k={...f.sr.qoder},l={...f.sr["qoder-cn"]},m={...f.sr.iflow},n={...e.XP,...f.sr.antigravity,loadCodeAssistClientMetadata:JSON.stringify({ideType:9,platform:g(),pluginType:2})};function o(){return{ideType:9,platform:g(),pluginType:2}}({...f.sr.openai});let p={...f.sr.github},q={...f.sr.kiro},r=/^[a-z]{2}-[a-z]+-\d{1,2}$/;function s(a){if("string"!=typeof a||!r.test(a))throw Error("Invalid region");return a}let t={...f.sr.cursor,tokenStoragePaths:{linux:"~/.config/Cursor/User/globalStorage/state.vscdb",macos:"/Users/<user>/Library/Application Support/Cursor/User/globalStorage/state.vscdb",windows:"%APPDATA%\\Cursor\\User\\globalStorage\\state.vscdb"}},u={...f.sr.kimi,clientId:process.env.KIMI_CODING_OAUTH_CLIENT_ID||process.env.KIMI_OAUTH_CLIENT_ID||f.xq.kimi?.clientId||f.sr.kimi?.clientId},v={...f.sr.kilocode},w={...f.sr.cline},x={...f.sr.clinepass},y={...f.sr.gitlab},z={...f.sr["codebuddy-cn"]},A={...f.sr["codebuddy-intl"]},B={...f.sr.kimchi},C={...f.sr["grok-cli"]},D={...f.sr.muse},E={platformUrl:process.env.MIMO_PLATFORM_URL||"https://platform.xiaomimimo.com",defaultBaseUrl:"https://api.xiaomimimo.com/v1",kn:"mimocode",callbackPath:"/",timeoutMs:3e5},F={clientId:"ono9krqynydwx5",clientSecret:"-",loginGuidanceUrls:["https://api.marscode.com/cloudide/api/v3/trae/GetLoginGuidance","https://api.trae.ai/cloudide/api/v3/trae/GetLoginGuidance","https://www.trae.ai/cloudide/api/v3/trae/GetLoginGuidance"],apiOrigins:["https://api.marscode.com","https://api.trae.ai","https://www.trae.ai","https://www.marscode.com"],exchangeTokenPath:"/cloudide/api/v3/trae/oauth/ExchangeToken",getUserInfoPath:"/cloudide/api/v3/trae/GetUserInfo",authorizationPath:"/authorization",callbackPath:"/callback",minAppVersion:"3.5.54",defaultAppVersion:"3.5.54",defaultAppType:"stable",defaultPluginVersion:"local",defaultDeviceId:"0",userAgent:"Trae/1.0.0 antigravity-cockpit-tools",webUrl:"https://www.trae.ai",authScheme:"Cloud-IDE-JWT",tokenLifetimeDays:14,oauthTimeoutMs:6e5},G={clientId:"3GUryQ7ldAeKEuD2obYnppsnmj58eP5u",authBaseUrl:"https://www.windsurf.com",signInPath:"/windsurf/signin",registerApiBaseUrl:"https://register.windsurf.com",registerPath:"/exa.seat_management_pb.SeatManagementService/RegisterUser",oneTimeAuthPath:"/exa.seat_management_pb.SeatManagementService/GetOneTimeAuthToken",currentUserPath:"/exa.seat_management_pb.SeatManagementService/GetCurrentUser",planStatusPath:"/exa.seat_management_pb.SeatManagementService/GetPlanStatus",userStatusPath:"/exa.seat_management_pb.SeatManagementService/GetUserStatus",defaultApiServerUrl:"https://server.codeium.com",firebaseApiKey:"AIzaSyDsOl-1XpT5err0Tcn0TFFod1H8gVGIycY",callbackPath:"/windsurf-auth-callback",userAgent:"antigravity-cockpit-tools",oauthTimeoutMs:6e5},H={...f.sr.glm},I={webBaseUrl:"https://zed.dev",cloudBaseUrl:"https://cloud.zed.dev",llmBaseUrl:"https://cloud.zed.dev",defaultNativeAppPort:58443,oauthTimeoutMs:6e5},J={clientId:"hermes-cli",portalBaseUrl:"https://portal.nousresearch.com",deviceCodeUrl:"https://portal.nousresearch.com/api/oauth/device/code",tokenUrl:"https://portal.nousresearch.com/api/oauth/token",agentKeyUrl:"https://portal.nousresearch.com/api/oauth/agent-key",inferenceBaseUrl:"https://inference-api.nousresearch.com/v1",scope:"inference:invoke inference:mint_agent_key"},K=3e5}};
|
|
1
|
+
"use strict";exports.id=8128,exports.ids=[7247,8128],exports.modules={10079:(a,b,c)=>{function d(a){let b=(a||"").trim();return b?b.replace(/^bearer\s+/i,"").replace(/^cookie:/i,"").trim():""}function e(a,b){let c=d(a);if(!c)return"";let e=function(a){let b,c=(a||"").trim();if(!c||!c.startsWith("["))return null;try{b=JSON.parse(c)}catch{return null}if(!Array.isArray(b))return null;if(0===b.length)return"";let d=[];for(let a=0;a<b.length;a++){let c=b[a];if(!c||"object"!=typeof c||Array.isArray(c))throw Error(`Invalid cookie JSON at index ${a}: expected an object`);if("string"!=typeof c.name||!c.name)throw Error(`Invalid cookie JSON at index ${a}: missing required field 'name'`);if("string"!=typeof c.value)throw Error(`Invalid cookie JSON at index ${a}: missing required field 'value'`);d.push(`${c.name}=${c.value}`)}return d.join("; ")}(c);return null!==e?e:c.includes("=")?c:`${b}=${c}`}c.d(b,{$J:()=>h,EU:()=>g,lT:()=>i,p1:()=>e});let f=new Set(["path","domain","expires","max-age","secure","httponly","samesite"]);function g(a,b){let c=[];for(let d of String(a||"").split(";")){let a=d.trim();if(!a)continue;let e=a.indexOf("=");if(e<=0)continue;let g=a.slice(0,e).trim(),h=a.slice(e+1).trim();if(!g||!h||f.has(g.toLowerCase()))continue;let i=String(b||"").replace(/^\./,"");g.startsWith("__Host-")?c.push({name:g,value:h,domain:i,path:"/",secure:!0}):c.push({name:g,value:h,domain:b,path:"/",secure:!0})}return c}function h(a,b){let c=d(a);if(!c)return"";if(c.includes(";")){let a=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=c.match(RegExp("(?:^|;\\s*)"+a+"=([^;\\s]+)"));return d?d[1]:""}let e=`${b}=`;return c.startsWith(e)?c.slice(e.length):c}function i(a){let b=h(a,"sso");if(!b)return"";let c=[`sso=${b}`];for(let b of["sso-rw","cf_clearance","__cf_bm"])if(RegExp("(?:^|;\\s*)"+b+"=").test(a)){let d=h(a,b);d&&c.push(`${b}=${d}`)}return c.join("; ")}},20742:(a,b,c)=>{let d;c.d(b,{A:()=>r});var e=c(31421),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(73136),k=c(26182);let l={"playwright-core":"^1.62.1","wreq-js":"^3.2.0"};function m(){return i().join((0,k.S)(),"runtime")}function n(a){let b=String(a?.code||"");return"MODULE_NOT_FOUND"===b||"ERR_MODULE_NOT_FOUND"===b}async function o(a,b){let c,d,f,h,j=m(),k=await (c=m(),g().mkdirSync(c,{recursive:!0}),d=i().join(c,"package.json"),!g().existsSync(d)&&g().writeFileSync(d,JSON.stringify({name:"keyrouter-runtime",private:!0},null,2)),f="win32"===process.platform?"npm.cmd":"npm",h=["install","--no-audit","--no-fund","--prefer-online",`${a}@${b}`],new Promise(a=>{let b=(0,e.spawn)(f,h,{cwd:c,stdio:["ignore","pipe","pipe"],shell:"win32"===process.platform}),d="";b.stderr?.on("data",a=>{d+=String(a)}),b.on("error",b=>a({ok:!1,stderr:String(b.message||b)})),b.on("close",b=>a({ok:0===b,stderr:d}))}));if(!k.ok){let c=(k.stderr.match(/npm ERR! ?(.+)/)||[])[1]||k.stderr.split("\n").filter(Boolean).pop()||"unknown npm error";throw Error(`${a} is missing and the on-demand install failed (${String(c).slice(0,160)}) — install it manually: cd "${j}" && npm install ${a}@${b}`)}}let p=new Map;async function q(a){try{return await import(a)}catch(a){if(!n(a))throw a}let b=(await (d??=import("node:module").then(a=>a.createRequire)))(i().join(m(),"package.json"));try{return await import((0,j.pathToFileURL)(b.resolve(a)).href)}catch(a){if(!n(a))throw a}let c=l[a]||"latest",e=()=>import((0,j.pathToFileURL)(b.resolve(a)).href);await o(a,c);try{return await e()}catch(b){if(!n(b))throw b;return g().rmSync(i().join(m(),"node_modules",a),{recursive:!0,force:!0}),await o(a,c),e()}}function r(a){return p.has(a)||p.set(a,q(a).finally(()=>p.delete(a))),p.get(a)}},22115:(a,b,c)=>{c.d(b,{CO:()=>e,X7:()=>j,ZB:()=>i,jm:()=>h});var d=c(20742);let e="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36",f=null;async function g(){return f||(f=(async()=>{let a=await (0,d.A)("wreq-js");if("function"!=typeof a.createSession)throw Error("wreq-js runtime is missing createSession");return a.createSession({browser:"chrome_146",os:"macos"})})().catch(a=>{throw f=null,a})),f}class h extends Error{constructor(a){super(a),this.name="GrokTlsUnavailableError"}}function i(a){return"string"==typeof a&&/just a moment|attention required|cf-mitigated/i.test(a)}async function j(a,{method:b="GET",headers:c={},body:d,timeoutMs:e=12e4,signal:f}={}){let i;try{i=await g()}catch(a){throw new h(`wreq-js unavailable (${a instanceof Error?a.message:"unknown"}) — install the optional wreq-js dependency to use Grok Web`)}let k={method:b.toUpperCase(),headers:c,redirect:"follow",timeout:e};void 0!==d&&(k.body=d),f&&(k.signal=f);let l=await i.fetch(a,k),m=await l.arrayBuffer(),n={};try{l.headers&&"function"==typeof l.headers.forEach&&l.headers.forEach((a,b)=>{n[b]=a})}catch{}return new Response(m,{status:l.status,headers:n})}},26182:(a,b,c)=>{c.d(b,{S:()=>k});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h);let j=null;function k(){if(j)return j;for(let a of[process.env.DATA_DIR,i().join(g().homedir(),".keyrouter"),i().join(g().tmpdir(),"keyrouter")].filter(Boolean))try{return e().mkdirSync(a,{recursive:!0}),e().accessSync(a,e().constants.W_OK),j=a,a}catch{}return j=process.cwd()}},39006:a=>{a.exports={rE:"1.0.2"}},39326:(a,b,c)=>{c.d(b,{B:()=>h,p:()=>g});var d=c(71998);function e(a){return null==a?"":String(a).trim()}let f=new Map;function g(a,b,c){if(!a||0===a.length)return null;if(1===a.length)return a[0];if("round-robin"===b){let b=f.get(c)||{index:-1};return b.index=(b.index+1)%a.length,f.set(c,b),a[b.index]}return"random"===b?a[Math.floor(Math.random()*a.length)]:a[0]}async function h(a={}){try{let b=e(a?.proxyPoolId),c="__none__"===b?"":b,f=function(a={}){let b=a?.connectionProxyEnabled===!0;return{connectionProxyEnabled:b,connectionProxyUrl:e(a?.connectionProxyUrl),connectionNoProxy:e(a?.connectionNoProxy)}}(a),g=!1;if(c){let a=await (0,d.hr)(c),b=e(a?.proxyUrl),f=e(a?.noProxy),h=a&&!0===a.isActive&&b;if(g=a?.strictProxy===!0,h){if("vercel"===a.type||"cloudflare"===a.type||"deno"===a.type||"netlify"===a.type)return{source:a.type,proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:f,strictProxy:!0===a.strictProxy,vercelRelayUrl:b};return{source:"pool",proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!0,connectionProxyUrl:b,connectionNoProxy:f,strictProxy:!0===a.strictProxy}}}if(f.connectionProxyEnabled&&f.connectionProxyUrl)return{source:"legacy",proxyPoolId:c||null,proxyPool:null,strictProxy:g,...f};return{source:"none",proxyPoolId:c||null,proxyPool:null,strictProxy:g,...f}}catch(a){return console.error("[resolveConnectionProxyConfig] Failed to resolve proxy config:",a),{source:"error",proxyPoolId:null,proxyPool:null,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:"",strictProxy:!1}}}},52284:(a,b,c)=>{c.d(b,{w$:()=>e});let d=c(39006).rE||"0.0.0";function e(a,b={}){let c,f=(c=function(a){if("string"!=typeof a)return"";let b=a.trim();return b?b.toLowerCase().startsWith("workos:")?b:/^eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/.test(b)?`workos:${b}`:b:""}(a))?`Bearer ${c}`:"",g={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","User-Agent":`KeyRouter/${d}`,"X-PLATFORM":process.platform||"unknown","X-PLATFORM-VERSION":process.version||"unknown","X-CLIENT-TYPE":"keyrouter","X-CLIENT-VERSION":d,"X-CORE-VERSION":d,"X-IS-MULTIROOT":"false",...b};return f&&(g.Authorization=f),g}},57247:(a,b,c)=>{c.d(b,{KC:()=>t,OA:()=>p,PROVIDER_MODELS:()=>e.vq,SM:()=>j,V2:()=>q,Xg:()=>s,cY:()=>u,ez:()=>o,fZ:()=>k,kt:()=>r,ux:()=>n});var d=c(8499),e=c(26070),f=c(99511),g=c(59096),h=c(14170);let i=a=>!a||["oc","opencode","ocg","opencode-go","ocz","opencode-zen"].includes(a);function j(a){return e.vq[a]||[]}function k(a){let b=e.vq[a];return b?.[0]?.id||null}let l=new Set(["kr","kiro"]);function m(a,b,c){if(!a)return;let d="string"==typeof b?b.replace(/\([^()]+\)\s*$/,"").trim():b,e=a.find(a=>a.id===b||a.id===d);if(e)return e;if(!l.has(c))return;let g=(0,f.Kq)(d);if(g!==d)return a.find(a=>a.id===g)}function n(a,b){if(i(a)&&(0,g.nh)(b))return h.h.OPENAI_RESPONSES;let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?(0,f.gr)(d):i(a)&&(0,g.i8)(b)?.targetFormat||null}function o(a,b){let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?(0,f.ec)(d):i(a)?(0,g.i8)(b)?.supportedFormats||[h.h.OPENAI]:null}function p(a,b){let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?.kind||d?.type||null}function q(a,b){return m(e.vq[a],b,a)||null}function r(a,b,c=null){let d="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,f=d?d[0]:"",h=f?b.slice(0,d.index).trim():b,i=e.vq[a],j=f?f.slice(1,-1).trim().toLowerCase():"",k="xhigh"===j||"max"===j?"high":"minimal"===j?"low":j;if(!k&&c&&"object"==typeof c){let a=c.reasoning_effort||c.output_config?.effort||("object"==typeof c.reasoning?c.reasoning?.effort:null);if("string"==typeof a&&a){let b=a.toLowerCase().trim();k="xhigh"===b||"max"===b?"high":"minimal"===b?"low":b}else if(c.thinking&&"object"==typeof c.thinking){let a=Number(c.thinking.budget_tokens);Number.isFinite(a)&&a>0&&(k=a>16384?"high":a<=4096?"low":"medium")}}let l=k?`${h}-${k}`:null,n=l&&m(i,l,a)||m(i,h,a),o=n?.upstreamModelId||n?.id;if(o){let a=o.match(/\([^()]+\)\s*$/),b=a?.[0]||"";return(b?o.slice(0,a.index).trim():o)+(f||(b&&k?`(${k})`:b))}return"cx"===a&&"string"==typeof h&&h.endsWith(g.d5)?h.slice(0,-g.d5.length)+f:h+f}Object.fromEntries(d.default.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias]));let s=Object.fromEntries(d.default.map(a=>[a.id,a.alias||a.id]));function t(a){let b=s[a]||a;return e.vq[b]||[]}function u(a,b){return(0,f.g5)(m(e.vq[a],b,a))}},66328:(a,b,c)=>{c.d(b,{F:()=>A});var d=c(89718),e=c(39326),f=c(74926),g=c(40615),h=c(57247),i=c(19696),j=c(35024),k=c(75924),l=c(90737),m=c(29493),n=c(93943),o=c(92990),p=c(52284),q=c(50980);let r={claude:{checkExpiry:!0,refreshable:!0},codex:{url:"https://chatgpt.com/backend-api/codex/responses",method:"POST",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"Content-Type":"application/json",originator:"codex_cli_rs","User-Agent":`codex_cli_rs/${k.Ch}`},body:JSON.stringify({model:"gpt-5.3-codex",input:[],stream:!1,store:!1}),acceptStatuses:[400],refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"KeyRouter",Accept:"application/vnd.github+json"}},iflow:{buildUrl:a=>`https://iflow.cn/api/oauth/getUserInfo?accessToken=${encodeURIComponent(a)}`,method:"GET",noAuth:!0},kiro:{checkExpiry:!0,refreshable:!0},qoder:{url:"https://openapi.qoder.sh/api/v1/userinfo",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!1},"qoder-cn":{url:"https://openapi.qoder.com.cn/api/v1/userinfo",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!1},kimi:{checkExpiry:!0,refreshable:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},cursor:{tokenExists:!0},kilocode:{url:`${o.MZ.apiBaseUrl}/api/profile`,method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},cline:{refreshable:!0},gitlab:{url:"https://gitlab.com/api/v4/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},"codebuddy-cn":{tokenExists:!0},"codebuddy-intl":{tokenExists:!0},kimchi:{url:o.Td.validationUrl||"https://api.cast.ai/v1/llm/openai/supported-providers",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{Accept:"application/json","User-Agent":"kimchi/0.1.40"},refreshable:!1},"grok-cli":{url:j.xq["grok-cli"]?.userUrl||"https://cli-chat-proxy.grok.com/v1/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{Accept:"application/json",...j.xq["grok-cli"]?.headers||{"User-Agent":l.hY,"x-xai-token-auth":"xai-grok-cli","x-grok-client-identifier":"grok-pager","x-grok-client-version":l.uG}},refreshable:!0,acceptStatuses:[402],softFailMessage:{402:"Connected, but Grok Build credits are exhausted (spending limit). Add credits or upgrade SuperGrok."}},muse:{url:"https://api.meta.ai/v1/models",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"x-api-version":"1.0.0"},refreshable:!1},nous:{url:m.b,method:"POST",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"Content-Type":"application/json"},body:JSON.stringify({model:m.UK,messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1}),refreshable:!0,useApiKey:!0}};function s(a,b,c=""){if(!a)return{valid:!1,error:"No response",soft:!1};let d=a.status;if(!(a.ok||b?.acceptStatuses&&b.acceptStatuses.includes(d)))return 401===d?{valid:!1,error:"Token invalid or revoked",soft:!1}:403===d?{valid:!1,error:"Access denied",soft:!1}:{valid:!1,error:`API returned ${d}`,soft:!1};if(!a.ok&&b?.acceptStatuses?.includes(d)){let a=b.softFailMessage||{};if(a[d])return{valid:!0,error:a[d],soft:!0}}return{valid:!0,error:null,soft:!1}}async function t(a){return await fetch("https://api.cline.bot/api/v1/users/me",{method:"GET",headers:(0,p.w$)(a,{Accept:"application/json"})})}let u=JSON.stringify({metadata:{ideType:"IDE_UNSPECIFIED",platform:"PLATFORM_UNSPECIFIED",pluginType:"GEMINI"}});async function v(a,b,c=null){let d="antigravity"===a.provider?o.YT.loadCodeAssistUserAgent||"antigravity/hub/2.24.0 darwin/arm64":"google-api-nodejs-client/9.15.1 gemini-cli/0.34.0",e=await y("https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",{method:"POST",headers:{Authorization:`Bearer ${b}`,"Content-Type":"application/json","User-Agent":d},body:u},c);return e.ok?{valid:!0,error:null}:{valid:!1,error:function(a,b){if(!a)return b;try{let b=JSON.parse(a),c=b?.error?.message||b?.message||b?.error;if("string"==typeof c&&c.trim())return c.trim();if(c)return JSON.stringify(c)}catch{}return a.trim()||b}(await e.text().catch(()=>""),`API returned ${e.status}`),status:e.status}}async function w(a){let b=a.provider,c=a.refreshToken;if(!c)return null;try{if("gemini-cli"===b||"antigravity"===b){let a="gemini-cli"===b?o.LT:o.YT,d=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:a.clientId,client_secret:a.clientSecret,grant_type:"refresh_token",refresh_token:c})});if(!d.ok)return null;let e=await d.json();return{accessToken:e.access_token,expiresIn:e.expires_in,refreshToken:e.refresh_token||c}}if("codex"===b||"grok-cli"===b||"xai"===b||"nous"===b)return await (0,n.Vq)(b,a,console);if("claude"===b){let a=await fetch(o.OV.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:c,client_id:o.OV.clientId})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("kiro"===b){let b=a.providerSpecificData||{},d=b.clientId||a.clientId,e=b.clientSecret||a.clientSecret,f=b.region||a.region;if(d&&e){let a=`https://oidc.${f||"us-east-1"}.amazonaws.com/token`,b=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:d,clientSecret:e,refreshToken:c,grantType:"refresh_token"})});if(!b.ok)return null;let g=await b.json();return{accessToken:g.accessToken,expiresIn:g.expiresIn||3600,refreshToken:g.refreshToken||c}}let g=await fetch(o.Tx.socialRefreshUrl,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"kiro-cli/1.0.0"},body:JSON.stringify({refreshToken:c})});if(!g.ok)return null;let h=await g.json();return{accessToken:h.accessToken,expiresIn:h.expiresIn||3600,refreshToken:h.refreshToken||c}}if("cline"===b){let a=await fetch(o.lB.refreshUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:c,grantType:"refresh_token",clientType:"extension"})});if(!a.ok)return null;let b=await a.json(),d=b?.data||b,e=d?.expiresAt?Math.max(1,Math.floor((new Date(d.expiresAt).getTime()-Date.now())/1e3)):3600;return{accessToken:d?.accessToken,expiresIn:e,refreshToken:d?.refreshToken||c}}return null}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}async function x(a,b=null){let c=r[a.provider];if(!c)return{valid:!1,error:"Provider test not supported",refreshed:!1};if(!a.accessToken)return{valid:!1,error:"No access token",refreshed:!1};if(c.tokenExists)return{valid:!0,error:null,refreshed:!1,newTokens:null};let d=c.useApiKey&&a.apiKey||a.accessToken,e=!1,f=null,g=(0,n.fp)(a.provider,a);if(c.refreshable&&g&&a.refreshToken){let b=await w(a);if(!b)return{valid:!1,error:"Token expired and refresh failed",refreshed:!1};d=c.useApiKey&&b.apiKey||b.accessToken,e=!0,f=b}if(c.checkExpiry)return e?{valid:!0,error:null,refreshed:e,newTokens:f}:g?{valid:!1,error:"Token expired",refreshed:!1}:{valid:!0,error:null,refreshed:!1,newTokens:null};if("gemini-cli"===a.provider||"antigravity"===a.provider){let g=await v(a,d,b);if(g.valid)return{valid:!0,error:null,refreshed:e,newTokens:f};if(401===g.status&&c.refreshable&&!e&&a.refreshToken){let c=await w(a);if(c?.accessToken){let d=await v(a,c.accessToken,b);return d.valid?{valid:!0,error:null,refreshed:!0,newTokens:c}:{valid:!1,error:d.error,refreshed:!0,newTokens:c}}return{valid:!1,error:"Token invalid or revoked",refreshed:!1}}return{valid:!1,error:g.error,refreshed:e}}if("cline"===a.provider){let b=async a=>{let b=await t(a);return b.ok?{valid:!0,error:null,refreshed:e,newTokens:f}:401===b.status?{valid:!1,error:"Token invalid or revoked",refreshed:e}:403===b.status?{valid:!1,error:"Access denied",refreshed:e}:{valid:!1,error:`API returned ${b.status}`,refreshed:e}},c=await b(d);if(c.valid||"Token invalid or revoked"!==c.error||!a.refreshToken)return c;let g=await w(a);return g?.accessToken?(e=!0,f=g,d=g.accessToken,await b(d)):{valid:!1,error:"Token invalid or revoked",refreshed:!1}}try{let g=c.buildUrl?c.buildUrl(d):c.url,h=c.noAuth?{...c.extraHeaders}:{[c.authHeader]:`${c.authPrefix}${d}`,...c.extraHeaders},i={method:c.method,headers:h};c.body&&(i.body=c.body);let j=await y(g,i,b),k=j.ok?"":await j.text().catch(()=>""),l=s(j,c,k);if(l.valid)return{valid:!0,error:l.soft?l.error:null,warning:l.soft?l.error:null,refreshed:e,newTokens:f};if(401===j.status&&c.refreshable&&!e&&a.refreshToken){let d=await w(a);if(d){let a=c.useApiKey&&d.apiKey||d.accessToken,e=c.buildUrl?c.buildUrl(a):g,f=c.noAuth?{...c.extraHeaders}:{[c.authHeader]:`${c.authPrefix}${a}`,...c.extraHeaders},h={method:c.method,headers:f};c.body&&(h.body=c.body);let i=await y(e,h,b),j=i.ok?"":await i.text().catch(()=>""),k=s(i,c,j);if(k.valid)return{valid:!0,error:k.soft?k.error:null,warning:k.soft?k.error:null,refreshed:!0,newTokens:d}}return{valid:!1,error:"Token invalid or revoked",refreshed:!1}}return{valid:!1,error:l.error,refreshed:e}}catch(a){return{valid:!1,error:a.message,refreshed:e}}}async function y(a,b={},d=null){if(b.signal||(b.signal=AbortSignal.timeout(15e3)),d?.vercelRelayUrl){let{proxyAwareFetch:e}=await Promise.resolve().then(c.bind(c,39609));return e(a,b,{vercelRelayUrl:d.vercelRelayUrl})}if(!d?.connectionProxyEnabled||!d?.connectionProxyUrl)return fetch(a,b);let{proxyAwareFetch:e}=await Promise.resolve().then(c.bind(c,39609));return e(a,b,{connectionProxyEnabled:!0,connectionProxyUrl:d.connectionProxyUrl,connectionNoProxy:d.connectionNoProxy||""})}async function z(a,b=null){if((0,g.mq)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{let d=await y(`${c.replace(/\/$/,"")}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}if((0,g.gb)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{(c=c.replace(/\/$/,"")).endsWith("/messages")&&(c=c.slice(0,-9));let d=`${c}/v1/messages`,e=a.defaultModel||"claude-3-haiku-20240307",f=await y(d,{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json",Authorization:`Bearer ${a.apiKey}`},body:JSON.stringify({model:e,max_tokens:1,messages:[{role:"user",content:"test"}]})},b),g=401!==f.status&&403!==f.status;return{valid:g,error:g?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}if(g.AI_PROVIDERS[a.provider]?.credentialForm==="aws")try{return await (0,i.jL)(a,(a,c)=>y(a,c,b))}catch(a){return{valid:!1,error:a.message}}if((0,q.b7)(a.provider)){let b=await (0,q.TZ)(a.provider,a.apiKey||"");return"valid"===b.status?{valid:!0,error:null}:"invalid"===b.status?{valid:!1,error:b.error}:{valid:!0,error:`Could not verify the session: ${b.error}`}}try{switch(a.provider){case"commandcode":{let c=await y("https://api.commandcode.ai/alpha/whoami?limits=1",{headers:{Authorization:`Bearer ${a.apiKey}`,Accept:"application/json"}},b),d=c.ok;return{valid:d,error:d?null:401===c.status||403===c.status?"Invalid API key":`Command Code API error (${c.status})`}}case"cloudflare-ai":{let c=(a.providerSpecificData||{}).accountId;if(!c)return{valid:!1,error:"Missing Account ID"};let d=`https://api.cloudflare.com/client/v4/accounts/${c}/ai/v1/chat/completions`,e=await y(d,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:(0,h.fZ)("cloudflare-ai"),messages:[{role:"user",content:"test"}],max_tokens:1})},b),f=401!==e.status&&403!==e.status&&404!==e.status;return{valid:f,error:f?null:"Invalid API token or Account ID"}}case"azure":{let c=a.providerSpecificData||{},d=(c.azureEndpoint||"").replace(/\/$/,""),e=c.deployment||"gpt-4",f=c.apiVersion||"2024-10-01-preview",g=`${d}/openai/deployments/${e}/chat/completions?api-version=${f}`,h={"api-key":a.apiKey,"Content-Type":"application/json"};c.organization&&(h["OpenAI-Organization"]=c.organization);let i=await y(g,{method:"POST",headers:h,body:JSON.stringify({messages:[{role:"user",content:"test"}],max_completion_tokens:1})},b),j=401!==i.status&&403!==i.status;return{valid:j,error:j?null:"Invalid API key or Azure configuration"}}case"openai":{let c=await y("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"vercel-ai-gateway":{let c=await y("https://ai-gateway.vercel.sh/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"anthropic":{let c=await y("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"claude-3-haiku-20240307",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"gemini":{let c=await y(`https://generativelanguage.googleapis.com/v1/models?key=${a.apiKey}`,{},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"openrouter":{let c=await y("https://openrouter.ai/api/v1/auth/key",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nous":{let c=(0,m.HN)(a.apiKey),d=await y(c.url,{...c.options,signal:AbortSignal.timeout(8e3)},b),e=(0,m.Yn)(d.status);return{valid:e,error:e?null:(0,m.K5)(d.status)}}case"glm":{let c=await y("https://api.z.ai/api/anthropic/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"glm-cn":{let c=await y("https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"minimax":case"minimax-cn":{let c=await y({minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages"}[a.provider],{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"minimax-m2",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"kimi":{let c=await y("https://api.kimi.com/coding/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"kimi-latest",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"alicode":case"alicode-intl":case"alims-intl":{let c="alicode-intl"===a.provider?"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions":"alims-intl"===a.provider?"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions":"https://coding.dashscope.aliyuncs.com/v1/chat/completions",d=await y(c,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,h.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),e=401!==d.status&&403!==d.status;return{valid:e,error:e?null:"Invalid API key"}}case"volcengine-ark":case"byteplus":{let c=await y(j.xq[a.provider]?.baseUrl,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,h.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"deepseek":{let c=await y("https://api.deepseek.com/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"groq":{let c=await y("https://api.groq.com/openai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"mistral":{let c=await y("https://api.mistral.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"xai":{let c=await y("https://api.x.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nvidia":{let c=await y("https://integrate.api.nvidia.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"perplexity":{let c=await y("https://api.perplexity.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"together":{let c=await y("https://api.together.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fireworks":{let c=await y("https://api.fireworks.ai/inference/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cerebras":{let c=await y("https://api.cerebras.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cohere":{let c=await y("https://api.cohere.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nebius":{let c=await y("https://api.studio.nebius.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"siliconflow":{let c=await y("https://api.siliconflow.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"hyperbolic":{let c=await y("https://api.hyperbolic.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"tokenharbor":case"dahl":case"atria":case"agnes":case"bai":case"muse":case"runcrate":{let c=j.xq[a.provider],d=await y(c.validateUrl,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key"}}case"ollama":{let b=await fetch("https://ollama.com/api/tags",{headers:{Authorization:`Bearer ${a.apiKey}`}});return{valid:b.ok,error:b.ok?null:"Invalid API key"}}case"ollama-local":{let b=(0,j.Ak)(a),c=await fetch(`${b}/api/tags`);return{valid:c.ok,error:c.ok?null:`Ollama not reachable at ${b}`}}case"deepgram":{let c=await y("https://api.deepgram.com/v1/projects",{headers:{Authorization:`Token ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"assemblyai":{let c=await y("https://api.assemblyai.com/v1/account",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nanobanana":{let c=await y("https://api.nanobananaapi.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fal-ai":{let c=await y("https://api.fal.ai/v1/models?limit=1",{headers:{Authorization:`Key ${a.apiKey}`}},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"chutes":{let c=await y("https://llm.chutes.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"grok-web":{let c=a.apiKey.startsWith("sso=")?a.apiKey.slice(4):a.apiKey,d=a=>Array.from(crypto.getRandomValues(new Uint8Array(a)),a=>a.toString(16).padStart(2,"0")).join(""),e=Buffer.from("e:TypeError: Cannot read properties of null (reading 'children')").toString("base64"),f=await y("https://grok.com/rest/app-chat/conversations/new",{method:"POST",headers:{Accept:"*/*","Content-Type":"application/json",Cookie:`sso=${c}`,Origin:"https://grok.com",Referer:"https://grok.com/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","x-statsig-id":e,"x-xai-request-id":crypto.randomUUID(),traceparent:`00-${d(16)}-${d(8)}-00`},body:JSON.stringify({temporary:!0,modelName:"grok-4",message:"ping",fileAttachments:[],imageAttachments:[],disableSearch:!1,enableImageGeneration:!1,sendFinalMetadata:!0})},b),g=401!==f.status&&403!==f.status;return{valid:g,error:g?null:"Invalid SSO cookie"}}case"perplexity-web":{let c=a.apiKey;c.startsWith("__Secure-next-auth.session-token=")&&(c=c.slice(33));let d=await y("https://www.perplexity.ai/api/auth/session",{method:"GET",headers:{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",Cookie:`__Secure-next-auth.session-token=${c}`}},b);if(!d.ok)return{valid:!1,error:"Invalid session cookie"};let e=await d.json().catch(()=>null),f=!!(e&&e.user);return{valid:f,error:f?null:"Session expired — re-paste cookie"}}case"opencode":{let a=await y("https://opencode.ai/zen/v1/models",{headers:{Authorization:"Bearer public","User-Agent":"opencode/1.18.31"}},b);return{valid:a.ok,error:a.ok?null:"OpenCode free tier unavailable"}}case"opencode-go":{let c=await y("https://opencode.ai/zen/go/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a.apiKey}`},body:JSON.stringify({model:(0,h.fZ)("opencode-go"),messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"xiaomi-mimo":case"xiaomi-tokenplan":{let c=await y(`${{"xiaomi-mimo":"https://api.xiaomimimo.com/v1","xiaomi-tokenplan":"https://token-plan-sgp.xiaomimimo.com/v1"}[a.provider]}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"blackbox":{let c=j.xq.blackbox?.baseUrl?.replace(/\/chat\/completions$/,"")||"https://api.blackbox.ai/v1",d=await y(`${c}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key"}}case"qoder":case"qoder-cn":{let c="qoder-cn"===provider?"https://openapi.qoder.com.cn/api/v1/jobToken/exchange":"https://openapi.qoder.sh/api/v1/jobToken/exchange",d=a.apiKey||"",e=d.startsWith("pt-")?d:`pt-${d}`,f=await y(c,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","Cosy-Version":"1.0.1","Cosy-ClientType":"5"},body:JSON.stringify({personal_token:e})},b);return{valid:f.ok,error:f.ok?null:"Invalid Personal Access Token"}}case"llm7":{let c=a.providerSpecificData?.baseUrl||"https://api.llm7.io/v1",d=await y(`${c.replace(/\/$/,"")}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}case"sensenova":{let c=j.xq.sensenova?.validateUrl||"https://token.sensenova.cn/v1/models",d=await y(c,{method:"GET",headers:{Authorization:"Bearer "+a.apiKey,Accept:"application/json"}},b),e=d.ok;return{valid:e,error:e?null:401===d.status||403===d.status?"Invalid API key":`SenseNova API error (${d.status})`}}case"kimchi":{let c=o.Td.validationUrl||"https://api.cast.ai/v1/llm/openai/supported-providers",d=await y(c,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${a.apiKey}`,"User-Agent":"kimchi/0.1.40"}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key",refreshed:!1}}default:return{valid:!1,error:"Provider test not supported"}}}catch(a){return{valid:!1,error:a.message}}}async function A(a){let b,c=await (0,d.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",latencyMs:0,testedAt:new Date().toISOString()};let g=await (0,e.B)(c.providerSpecificData||{});if(g.connectionProxyEnabled&&g.connectionProxyUrl&&!g.vercelRelayUrl){let b=await (0,f.C)({proxyUrl:g.connectionProxyUrl});if(!b.ok){let c=b.error||`Proxy test failed with status ${b.status}`;return await (0,d.updateProviderConnection)(a,{testStatus:"error",lastError:c,lastErrorAt:new Date().toISOString()}),{valid:!1,error:c,latencyMs:0,testedAt:new Date().toISOString()}}}let h=Date.now();b="apikey"===c.authType||"cookie"===c.authType?await z(c,g):await x(c,g);let i=Date.now()-h,j=b.valid&&(b.warning||b.error),k={testStatus:b.valid?"active":"error",lastError:b.valid?j||null:b.error,lastErrorAt:b.valid?j?new Date().toISOString():null:new Date().toISOString()};return b.refreshed&&b.newTokens&&(b.newTokens.accessToken&&(k.accessToken=b.newTokens.accessToken),b.newTokens.refreshToken&&(k.refreshToken=b.newTokens.refreshToken),b.newTokens.apiKey&&(k.apiKey=b.newTokens.apiKey),b.newTokens.idToken&&(k.idToken=b.newTokens.idToken),b.newTokens.lastRefreshAt&&(k.lastRefreshAt=b.newTokens.lastRefreshAt),b.newTokens.expiresIn&&(k.expiresIn=b.newTokens.expiresIn),b.newTokens.expiresIn?k.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString():b.newTokens.expiresAt&&(k.expiresAt=b.newTokens.expiresAt),b.newTokens.providerSpecificData&&(k.providerSpecificData={...c.providerSpecificData||{},...b.newTokens.providerSpecificData})),await (0,d.updateProviderConnection)(a,k),{valid:b.valid,error:b.error,refreshed:!!b.refreshed,latencyMs:i,testedAt:new Date().toISOString()}}},74926:(a,b,c)=>{c.d(b,{C:()=>f});var d=c(47774);function e(a){return null==a?"":String(a).trim()}async function f({proxyUrl:a,testUrl:b,timeoutMs:c}={}){let g,h=e(a);if(!h)return{ok:!1,status:400,error:"proxyUrl is required"};let i=e(b)||"https://google.com/",j=Number(c),k=Number.isFinite(j)&&j>0?Math.min(j,3e4):8e3;try{try{g=new d.ProxyAgent({uri:h})}catch(a){return{ok:!1,status:400,error:`Invalid proxy URL: ${a?.message||String(a)}`}}let a=new AbortController,b=Date.now(),c=setTimeout(()=>a.abort(),k);try{let c=await (0,d.hd)(i,{method:"HEAD",dispatcher:g,signal:a.signal,headers:{"User-Agent":"KeyRouter"}});return{ok:c.ok,status:c.status,statusText:c.statusText,url:i,elapsedMs:Date.now()-b}}catch(b){let a=b?.name==="AbortError"?"Proxy test timed out":function(a){if(!a)return"Unknown error";let b=a?.message||String(a),c=a?.cause?.code||a?.code,d=a?.cause?.message;return d&&d!==b?c?`${b}: ${d} (${c})`:`${b}: ${d}`:c&&!b.includes(c)?`${b} (${c})`:b}(b);return{ok:!1,status:500,error:a}}finally{clearTimeout(c)}}finally{try{await g?.close?.()}catch{}}}},78959:(a,b,c)=>{c.d(b,{$U:()=>d,RK:()=>g,pb:()=>e,uB:()=>f});let d="data: [DONE]\n\n",e={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"},f={"Content-Type":"text/event-stream","Cache-Control":"no-cache","X-Accel-Buffering":"no"},g={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}},82543:(a,b,c)=>{function d(a,b="__Secure-1PSID"){let c=a.trim();if(!c)return"";let e=function(a){if(!a.startsWith("{"))return[];try{let b=JSON.parse(a),c=b.cookies&&"object"==typeof b.cookies&&!Array.isArray(b.cookies)?b.cookies:b;return Object.entries(c).filter(([,a])=>"string"==typeof a&&a.trim().length>0).map(([a,b])=>`${a}=${String(b).trim()}`)}catch{return[]}}(c);return e.length>0?e.join("; "):c.includes("=")?c:`${b}=${c}`}function e(a){let b=d(a.trim().replace(/^cookie:\s*/i,"")),c=b.split(";").map(a=>a.trim()).find(a=>a.toLowerCase().startsWith("__secure-1psid="));return c&&0!==c.slice(c.indexOf("=")+1).trim().length?b:null}c.d(b,{L:()=>d,m:()=>e})},92990:(a,b,c)=>{c.d(b,{DI:()=>i,DV:()=>A,LT:()=>j,MZ:()=>v,Nl:()=>z,Nu:()=>p,OV:()=>h,RY:()=>I,S6:()=>s,SK:()=>F,Td:()=>B,Tx:()=>q,WN:()=>t,Ww:()=>K,YT:()=>n,Z2:()=>J,ZL:()=>m,_0:()=>H,aV:()=>u,cD:()=>o,eD:()=>G,f7:()=>y,hF:()=>k,lB:()=>w,oe:()=>E,qp:()=>C,sA:()=>D,t3:()=>l,w1:()=>x});var d=c(21820),e=c(74129),f=c(26070);function g(){let a=(0,d.platform)(),b=(0,d.arch)();return"darwin"===a?"arm64"===b?2:1:"linux"===a?"arm64"===b?4:3:5*("win32"===a)}let h={...f.sr.claude},i={...f.sr.codex},j={...e.dG,...f.sr["gemini-cli"]},k={...f.sr.qoder},l={...f.sr["qoder-cn"]},m={...f.sr.iflow},n={...e.XP,...f.sr.antigravity,loadCodeAssistClientMetadata:JSON.stringify({ideType:9,platform:g(),pluginType:2})};function o(){return{ideType:9,platform:g(),pluginType:2}}({...f.sr.openai});let p={...f.sr.github},q={...f.sr.kiro},r=/^[a-z]{2}-[a-z]+-\d{1,2}$/;function s(a){if("string"!=typeof a||!r.test(a))throw Error("Invalid region");return a}let t={...f.sr.cursor,tokenStoragePaths:{linux:"~/.config/Cursor/User/globalStorage/state.vscdb",macos:"/Users/<user>/Library/Application Support/Cursor/User/globalStorage/state.vscdb",windows:"%APPDATA%\\Cursor\\User\\globalStorage\\state.vscdb"}},u={...f.sr.kimi,clientId:process.env.KIMI_CODING_OAUTH_CLIENT_ID||process.env.KIMI_OAUTH_CLIENT_ID||f.xq.kimi?.clientId||f.sr.kimi?.clientId},v={...f.sr.kilocode},w={...f.sr.cline},x={...f.sr.clinepass},y={...f.sr.gitlab},z={...f.sr["codebuddy-cn"]},A={...f.sr["codebuddy-intl"]},B={...f.sr.kimchi},C={...f.sr["grok-cli"]},D={...f.sr.muse},E={platformUrl:process.env.MIMO_PLATFORM_URL||"https://platform.xiaomimimo.com",defaultBaseUrl:"https://api.xiaomimimo.com/v1",kn:"mimocode",callbackPath:"/",timeoutMs:3e5},F={clientId:"ono9krqynydwx5",clientSecret:"-",loginGuidanceUrls:["https://api.marscode.com/cloudide/api/v3/trae/GetLoginGuidance","https://api.trae.ai/cloudide/api/v3/trae/GetLoginGuidance","https://www.trae.ai/cloudide/api/v3/trae/GetLoginGuidance"],apiOrigins:["https://api.marscode.com","https://api.trae.ai","https://www.trae.ai","https://www.marscode.com"],exchangeTokenPath:"/cloudide/api/v3/trae/oauth/ExchangeToken",getUserInfoPath:"/cloudide/api/v3/trae/GetUserInfo",authorizationPath:"/authorization",callbackPath:"/callback",minAppVersion:"3.5.54",defaultAppVersion:"3.5.54",defaultAppType:"stable",defaultPluginVersion:"local",defaultDeviceId:"0",userAgent:"Trae/1.0.0 antigravity-cockpit-tools",webUrl:"https://www.trae.ai",authScheme:"Cloud-IDE-JWT",tokenLifetimeDays:14,oauthTimeoutMs:6e5},G={clientId:"3GUryQ7ldAeKEuD2obYnppsnmj58eP5u",authBaseUrl:"https://www.windsurf.com",signInPath:"/windsurf/signin",registerApiBaseUrl:"https://register.windsurf.com",registerPath:"/exa.seat_management_pb.SeatManagementService/RegisterUser",oneTimeAuthPath:"/exa.seat_management_pb.SeatManagementService/GetOneTimeAuthToken",currentUserPath:"/exa.seat_management_pb.SeatManagementService/GetCurrentUser",planStatusPath:"/exa.seat_management_pb.SeatManagementService/GetPlanStatus",userStatusPath:"/exa.seat_management_pb.SeatManagementService/GetUserStatus",defaultApiServerUrl:"https://server.codeium.com",firebaseApiKey:"AIzaSyDsOl-1XpT5err0Tcn0TFFod1H8gVGIycY",callbackPath:"/windsurf-auth-callback",userAgent:"antigravity-cockpit-tools",oauthTimeoutMs:6e5},H={...f.sr.glm},I={webBaseUrl:"https://zed.dev",cloudBaseUrl:"https://cloud.zed.dev",llmBaseUrl:"https://cloud.zed.dev",defaultNativeAppPort:58443,oauthTimeoutMs:6e5},J={clientId:"hermes-cli",portalBaseUrl:"https://portal.nousresearch.com",deviceCodeUrl:"https://portal.nousresearch.com/api/oauth/device/code",tokenUrl:"https://portal.nousresearch.com/api/oauth/token",agentKeyUrl:"https://portal.nousresearch.com/api/oauth/agent-key",inferenceBaseUrl:"https://inference-api.nousresearch.com/v1",scope:"inference:invoke inference:mint_agent_key"},K=3e5}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
exports.id=8682,exports.ids=[8682],exports.modules={39936:(a,b,c)=>{Promise.resolve().then(c.bind(c,51747))},51747:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/keyzakyy/Projects/keyrouter/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/keyzakyy/Projects/keyrouter/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js","default")},52960:(a,b,c)=>{Promise.resolve().then(c.bind(c,54780))},54603:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>q});var d=c(19713),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.n,"machine-id"),m=h().join(k.n,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt",c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.n,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="kr-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},54780:(a,b,c)=>{"use strict";c.d(b,{default:()=>s});var d=c(48249),e=c(67484),f=c(49885),g=c.n(f),h=c(50412),i=c(50377),j=c(67960),k=c(91937);function l({status:a,className:b=""}){return(0,d.jsx)("div",{className:`p-2 rounded text-sm ${b} ${"success"===a.type?"bg-green-500/10 text-green-600 dark:text-green-400":"warning"===a.type?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"info"===a.type?"bg-blue-500/10 text-blue-600 dark:text-blue-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:a.message.split(/(https?:\/\/[^\s]+)/g).map((a,b)=>/^https?:\/\//.test(a)?(0,d.jsx)("a",{href:a,target:"_blank",rel:"noreferrer",className:"underline font-medium",children:a},b):a)})}function m({message:a,action:b,title:c="Security notice"}){return(0,d.jsxs)("div",{className:"flex items-center gap-3 rounded-xl border border-amber-500/25 bg-amber-500/[0.07] p-4",children:[(0,d.jsx)("span",{className:"grid size-9 shrink-0 place-items-center rounded-lg bg-amber-500/15 text-amber-600 dark:text-amber-400",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"warning"})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"text-[13px] font-semibold text-amber-700 dark:text-amber-300",children:c}),(0,d.jsx)("p",{className:"mt-0.5 text-xs leading-relaxed text-amber-700/80 dark:text-amber-400/80",children:a})]}),b&&(0,d.jsx)("a",{href:b.href,className:"shrink-0 rounded-lg bg-amber-500/15 px-3 py-1.5 font-mono text-[11px] font-medium uppercase tracking-wider text-amber-700 transition-colors hover:bg-amber-500/25 dark:text-amber-300",onClick:b.href.startsWith("#")?a=>{a.preventDefault(),document.getElementById(b.href.slice(1))?.scrollIntoView({behavior:"smooth"})}:void 0,children:b.label})]})}function n({apiKey:a,onChange:b,onRequestRestrict:c}){let f=a.access||{restricted:!1,allow:[]},[g,i]=(0,e.useState)(!1),[j,k]=(0,e.useState)([]),[l,m]=(0,e.useState)({}),o=async()=>{i(!0);try{let[a,b]=await Promise.all([fetch("/api/providers"),fetch("/api/models/alias")]);a.ok&&k((await a.json()).connections||[]),b.ok&&m((await b.json()).aliases||{})}catch(a){console.log("Error loading picker data:",a)}},p=a=>b({restricted:!0,allow:a}),q=a=>p(f.allow.filter(b=>b!==a));return(0,d.jsxs)("div",{className:"mt-2","data-testid":"key-access",children:[(0,d.jsx)(h.lM,{size:"sm",checked:f.restricted,label:"Restrict access",onChange:a=>a?c():b({restricted:!1,allow:f.allow})}),f.restricted&&(0,d.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-1.5",children:[0===f.allow.length&&(0,d.jsx)("span",{className:"text-xs text-warning",children:"No combos or models allowed - this key can call nothing."}),f.allow.map(a=>(0,d.jsxs)("span",{className:"flex items-center gap-1 rounded-[4px] border border-border bg-surface-2 px-2 py-0.5 font-mono text-xs text-text-main",children:[a,(0,d.jsx)("button",{onClick:()=>q(a),className:"rounded text-text-muted hover:text-red-500",title:`Remove ${a}`,"aria-label":`Remove ${a}`,children:(0,d.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"12px"},children:"close"})})]},a)),(0,d.jsxs)("button",{onClick:o,className:"flex items-center gap-0.5 rounded-[4px] border border-dashed border-text-subtle px-2 py-0.5 text-xs font-medium text-text-muted hover:border-text-main hover:text-text-main",children:[(0,d.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"14px"},children:"add"}),"Add combo or model"]})]}),g&&(0,d.jsx)(h.rq,{isOpen:g,onClose:()=>i(!1),onSelect:a=>{let b=a?.value;b&&!f.allow.some(a=>a.toLowerCase()===b.toLowerCase())&&p([...f.allow,b])},onDeselect:a=>q(f.allow.find(b=>b.toLowerCase()===String(a?.value).toLowerCase())),activeProviders:j,modelAliases:l,title:`Allowed for "${a.name}"`,addedModelValues:f.allow,closeOnSelect:!1})]})}n.propTypes={apiKey:g().shape({id:g().string.isRequired,name:g().string,access:g().shape({restricted:g().bool,allow:g().arrayOf(g().string)})}).isRequired,onChange:g().func.isRequired,onRequestRestrict:g().func.isRequired};var o=c(71404);function p({value:a,copyId:b,copied:c,onCopy:e,size:f="sm",onOpen:g,className:h}){let i="lg"===f,j=c===b;return(0,d.jsxs)("div",{className:(0,o.cn)("flex items-center gap-2 rounded-md border bg-surface pl-3 pr-1","border-border focus-within:border-text-subtle focus-within:ring-1 focus-within:ring-text-subtle/50 transition",i?"h-11":"h-9",h),children:[(0,d.jsx)("span",{className:(0,o.cn)("material-symbols-outlined shrink-0 text-text-subtle",i?"text-[18px]":"text-[15px]"),children:"link"}),(0,d.jsx)("span",{className:(0,o.cn)("min-w-0 flex-1 truncate font-mono text-text-main",i?"text-[13px] sm:text-sm":"text-[12px]"),title:a,children:a}),g&&(0,d.jsx)("button",{type:"button",onClick:g,className:"grid size-7 shrink-0 place-items-center rounded-[4px] text-text-muted transition hover:bg-surface-2 hover:text-text-main",title:"Open endpoint","aria-label":"Open endpoint",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"open_in_new"})}),(0,d.jsx)("button",{type:"button",onClick:()=>e(a,b),className:(0,o.cn)("grid shrink-0 place-items-center rounded-[4px] transition",i?"size-8":"size-7",j?"bg-success/12 text-success":"text-text-muted hover:bg-surface-2 hover:text-text-main"),title:"Copy","aria-label":"Copy to clipboard",children:(0,d.jsx)("span",{className:(0,o.cn)("material-symbols-outlined",i?"text-[18px]":"text-[16px]"),children:j?"check":"content_copy"})})]})}p.propTypes={value:g().string.isRequired,copyId:g().string.isRequired,copied:g().string,onCopy:g().func.isRequired,size:g().oneOf(["sm","lg"]),onOpen:g().func,className:g().string};let q={ok:{pill:"bg-success/10 text-success border border-success/20",chip:"bg-success/10 text-success",dot:"bg-success"},busy:{pill:"bg-warning/10 text-warning border border-warning/20",chip:"bg-warning/10 text-warning",dot:"bg-warning animate-pulse"},off:{pill:"bg-surface-2 text-text-muted border border-border",chip:"bg-surface-2 text-text-muted",dot:"bg-text-subtle/40"},error:{pill:"bg-danger/10 text-danger border border-danger/20",chip:"bg-danger/10 text-danger",dot:"bg-danger"}};function r({icon:a,label:b,desc:c,tone:e="off",toneLabel:f,children:g}){let h=q[e]||q.off;return(0,d.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-4 transition-colors",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3.5",children:[(0,d.jsx)("div",{className:(0,o.cn)("grid size-10 shrink-0 place-items-center rounded-xl",h.chip),children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:a})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1 pt-0.5",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1",children:[(0,d.jsx)("span",{className:"font-display text-[15px] font-semibold text-text-main",children:b}),(0,d.jsxs)("span",{className:(0,o.cn)("inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider",h.pill),children:[(0,d.jsx)("span",{className:(0,o.cn)("size-1.5 rounded-full",h.dot)}),f]})]}),(0,d.jsx)("p",{className:"mt-0.5 font-mono text-[11px] leading-relaxed text-text-muted",children:c})]})]}),(0,d.jsx)("div",{className:"mt-4",children:g})]})}function s({machineId:a}){let[b,c]=(0,e.useState)([]),[f,g]=(0,e.useState)(!0),[o,q]=(0,e.useState)(!1),[t,u]=(0,e.useState)(""),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(!0),[D,E]=(0,e.useState)(!0),[F,G]=(0,e.useState)(!1),[H,I]=(0,e.useState)(!0),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(""),[P,Q]=(0,e.useState)(""),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(""),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(!1),[Z,$]=(0,e.useState)(!1),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(""),[af,ag]=(0,e.useState)(!1),[ah,ai]=(0,e.useState)(""),[aj,ak]=(0,e.useState)(null),[al,am]=(0,e.useState)(""),[an,ao]=(0,e.useState)(""),[ap,aq]=(0,e.useState)(null),[ar,as]=(0,e.useState)(!1),[at,au]=(0,e.useState)([]),[av,aw]=(0,e.useState)(""),[ax,ay]=(0,e.useState)(!1),[az,aA]=(0,e.useState)(!1),[aB,aC]=(0,e.useState)(!1),aD=(0,e.useRef)(null);(0,e.useRef)(0),(0,e.useRef)(0),(0,e.useRef)(!1),(0,e.useRef)(!1),(0,e.useRef)(!1),(0,e.useRef)(!1);let[aE,aF]=(0,e.useState)(!1),[aG,aH]=(0,e.useState)(!1),[aI,aJ]=(0,e.useState)(new Set),[aK,aL]=(0,e.useState)(!1),{copied:aM,copy:aN}=(0,i.C)(),aO=!B||!D,aP=B?"Change the default dashboard password before activating the tunnel.":'Enable "Require login" and set a custom password before activating the tunnel.',aQ=b.filter(a=>"Default Key"===a.name),aR=b.filter(a=>"Default Key"!==a.name);(0,e.useCallback)((a,b,c,d,e,f)=>{b.current?(c.current=0,d(!0),e.current||(e.current=!0,f(!0))):(c.current+=1,c.current>=j.t6&&d(!1))},[]);let aS=async a=>{try{await k.A.getState().patchSettings({requireApiKey:a})&&A(a)}catch(a){console.log("Error updating requireApiKey:",a)}},aT=async()=>{try{let a=async()=>{let a=await fetch("/api/keys");return a.ok&&(await a.json()).keys||[]},b=await a();if(0===b.length)try{(await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:"Default Key"})})).ok&&(b=await a())}catch{}c(b)}catch(a){console.log("Error fetching data:",a)}finally{g(!1)}},aU=async(...a)=>{S(!0),U("Waiting for tunnel ready...");let b=a.filter(Boolean).map(a=>`${a}/api/health`),c=Date.now();for(;Date.now()-c<j.Cp;){if(await new Promise(a=>setTimeout(a,j.Hx)),await Promise.any(b.map(async a=>{if((await fetch(a,{mode:"cors",cache:"no-store"})).ok)return!0;throw Error("not ready")})).catch(()=>!1))return K(!0),S(!1),U(""),!0;if((Date.now()-c)%1e4<j.Hx)try{let a=await fetch("/api/tunnel/status");if(a.ok){let b=await a.json();if(!b.tunnel?.enabled)return W({type:"error",message:"Tunnel process stopped unexpectedly."}),S(!1),U(""),!1}}catch{}}return W({type:"error",message:"Tunnel created but not reachable. Please try again."}),S(!1),U(""),!1},aV=async()=>{Y(!1),S(!0),W(null),U("Creating tunnel...");let a=!0;(async()=>{for(;a;){try{let b=await fetch("/api/tunnel/status");if(b.ok){let c=await b.json();c.download?.downloading?U(`Downloading cloudflared... ${c.download.progress}%`):a&&U("Creating tunnel...")}}catch{}await new Promise(a=>setTimeout(a,1e3))}})();try{let b=await fetch("/api/tunnel/enable",{method:"POST"});a=!1;let c=await b.json();if(!b.ok)return void W({type:"error",message:c.error||"Failed to enable tunnel"});let d=c.tunnelUrl;if(!d)return void W({type:"error",message:"No tunnel URL returned"});O(d),Q(c.publicUrl||""),await aU(c.publicUrl,d)}catch(a){W({type:"error",message:a.message})}finally{a=!1,S(!1),U("")}},aW=async()=>{S(!0),W(null);try{let a=await fetch("/api/tunnel/disable",{method:"POST"}),b=await a.json();a.ok?(K(!1),O(""),$(!1),W({type:"success",message:"Tunnel disabled"})):W({type:"error",message:b.error||"Failed to disable tunnel"})}catch(a){W({type:"error",message:a.message})}finally{S(!1)}},aX=async()=>{aq(null);try{let a=await fetch("/api/tunnel/tailscale-check");if(a.ok){let b=await a.json();return aq(b.installed),b}}catch{}return aq(!1),{installed:!1}},aY=async()=>{as(!0),ak(null),au([]);try{let a=await fetch("/api/tunnel/tailscale-install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:av})});aw("");let b=a.body.getReader(),c=new TextDecoder,d="";for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(d=f.pop()||"",f)){let b=a.split("\n"),c="progress",d=null;for(let a of b)if(a.startsWith("event: ")&&(c=a.slice(7).trim()),a.startsWith("data: "))try{d=JSON.parse(a.slice(6))}catch{}if(d)if("progress"===c)au(a=>[...a.slice(-50),d.message]);else if("done"===c){aq(!0),as(!1),aA(!1),a0();return}else"error"===c&&ak({type:"error",message:d.error||"Install failed"})}}}catch(a){ak({type:"error",message:a.message})}finally{as(!1)}},aZ=async a=>{ai("Waiting for Tailscale ready...");let b=`${a}/api/health`,c=Date.now();for(;Date.now()-c<j.Cp;){await new Promise(a=>setTimeout(a,j.Hx));try{let a=await fetch(b,{mode:"no-cors",cache:"no-store"});if(a.ok||"opaque"===a.type)return!0}catch{}}return!1},a$=(a,b)=>{am(a),ao(b)},a_=()=>{am(""),ao("")},a0=async()=>{aA(!1),ay(!0),ag(!0),ak(null),ai("Connecting..."),a_();try{let a=await fetch("/api/tunnel/tailscale-enable",{method:"POST"}),b=await a.json();if(a.ok&&b.success){ae(b.tunnelUrl||"");let a=await aZ(b.tunnelUrl);aa(!0),ak(a?null:{type:"warning",message:"Connected but not reachable yet."});return}if(b.needsLogin&&b.authUrl){a$(b.authUrl,"Open Login Page"),ai('Login required - click "Open Login Page" to continue');for(let a=0;a<40;a++){await new Promise(a=>setTimeout(a,3e3));try{let a=await fetch("/api/tunnel/tailscale-check");if(a.ok&&(await a.json()).loggedIn){a_(),ai("Starting funnel...");let a=await fetch("/api/tunnel/tailscale-enable",{method:"POST"}),b=await a.json();if(a.ok&&b.success){ae(b.tunnelUrl||"");let a=await aZ(b.tunnelUrl);aa(!0),ak(a?null:{type:"warning",message:"Connected but not reachable yet."})}else b.funnelNotEnabled&&b.enableUrl?await a1(b.enableUrl):ak({type:"error",message:b.error||"Failed to start funnel"});return}}catch{}}a_(),ak({type:"error",message:"Login timed out. Please try again."});return}if(b.funnelNotEnabled&&b.enableUrl)return void await a1(b.enableUrl);ak({type:"error",message:b.error||"Failed to connect"})}catch(a){ak({type:"error",message:a.message})}finally{ag(!1),ay(!1),ai(""),a_()}},a1=async a=>{a$(a,"Open Funnel Settings"),ai('Click "Open Funnel Settings" to enable Funnel...');for(let a=0;a<40;a++){await new Promise(a=>setTimeout(a,3e3));try{let a=await fetch("/api/tunnel/tailscale-enable",{method:"POST"}),b=await a.json();if(a.ok&&b.success){a_(),ae(b.tunnelUrl||"");let a=await aZ(b.tunnelUrl);aa(!0),ak(a?null:{type:"warning",message:"Connected but not reachable yet."});return}if(b.funnelNotEnabled)continue;if(b.error){a_(),ak({type:"error",message:b.error});return}}catch{}}a_(),ak({type:"error",message:"Timed out waiting for Funnel to be enabled."})},a2=async()=>{ag(!0),ak(null);try{let a=await fetch("/api/tunnel/tailscale-disable",{method:"POST"}),b=await a.json();a.ok?(aa(!1),ae(""),aC(!1),ak({type:"success",message:"Tailscale disabled"})):ak({type:"error",message:b.error||"Failed to disable Tailscale"})}catch(a){ak({type:"error",message:a.message})}finally{ag(!1)}},a3=async()=>{ak(null),au([]);let a=await aX();a?.installed&&a?.hasCachedPassword?a0():aA(!0)},a4=async()=>{if(t.trim())try{let a=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})}),b=await a.json();a.ok&&(w(b.key),await aT(),u(""),q(!1))}catch(a){console.log("Error creating key:",a)}},a5=async a=>{y({title:"Delete API Key",message:"Delete this API key?",onConfirm:async()=>{y(null);try{(await fetch(`/api/keys/${a}`,{method:"DELETE"})).ok&&(c(b.filter(b=>b.id!==a)),aJ(b=>{let c=new Set(b);return c.delete(a),c}))}catch(a){console.log("Error deleting key:",a)}}})},a6=async(a,b)=>{try{(await fetch(`/api/keys/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:b})})).ok&&c(c=>c.map(c=>c.id===a?{...c,isActive:b}:c))}catch(a){console.log("Error toggling key:",a)}},a7=async(a,b)=>{try{let d=await fetch(`/api/keys/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({access:b})}),e=await d.json().catch(()=>({}));d.ok&&e.key?c(b=>b.map(b=>b.id===a?{...b,access:e.key.access}:b)):console.log("Error updating key access:",e.error||d.status)}catch(a){console.log("Error updating key access:",a)}},a8=a=>!a||a.length<=10?a||"":a.slice(0,6)+"•".repeat(a.length-10)+a.slice(-4),a9=a=>{aJ(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[ba,bb]=(0,e.useState)("/v1");if(f)return(0,d.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,d.jsx)(h.Qv,{}),(0,d.jsx)(h.Qv,{})]});let bc=J?L?"ok":"busy":R||H?"busy":V?.type==="error"?"error":"off",bd=J?L?"Connected":aE?"Reconnecting":"Connecting":R?"Starting":H?"Checking":V?.type==="error"?"Error":"Off",be=_?ab?"ok":"busy":af||ax?"busy":aj?.type==="error"?"error":"off",bf=_?ab?"Connected":aG?"Reconnecting":"Connecting":af||ax?"Starting":aj?.type==="error"?"Error":"Off";return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsxs)(h.Zp,{children:[(0,d.jsx)("h2",{className:"font-display text-lg font-semibold text-text-main",children:"OpenAI-compatible base URL"}),(0,d.jsx)("p",{className:"mt-1 font-mono text-[10px] uppercase tracking-wider text-text-subtle",children:"One address in front of every provider connection."}),(0,d.jsx)("div",{className:"mt-3",children:(0,d.jsx)(p,{value:ba,copyId:"local_url",copied:aM,onCopy:aN,size:"lg",onOpen:()=>window.open(ba,"_blank","noopener,noreferrer")})})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 items-start gap-6 lg:grid-cols-[1fr_520px] lg:items-stretch",children:[(0,d.jsx)("div",{className:"flex flex-col",children:(0,d.jsxs)(h.Zp,{className:"h-full",children:[(0,d.jsx)("div",{className:"mb-3 flex items-center justify-between",children:(0,d.jsx)("h2",{className:"font-display text-base font-semibold text-text-main",children:"Remote access"})}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsx)(r,{icon:"cloud_upload",label:"Cloudflare Tunnel",desc:"Public HTTPS address from Cloudflare - no port forwarding.",tone:bc,toneLabel:bd,children:J&&!R&&L?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(p,{value:`${P||N}/v1`,copyId:"tunnel_url",copied:aM,onCopy:aN,className:"flex-1"}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>$(!0),children:"Stop"})]}):!J||R||L?R?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),T||"Creating tunnel…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>{S(!1),U("")},children:"Stop"})]}):V?.type==="error"?(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-start gap-2 rounded-md border border-danger/25 bg-danger/5 px-3 py-2 text-xs text-danger",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"error"}),(0,d.jsx)("span",{className:"min-w-0",children:V.message})]}),(0,d.jsx)(h.$n,{size:"sm",icon:"cloud_upload",onClick:()=>Y(!0),children:"Retry"})]}):H?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),"Checking…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"close",onClick:()=>I(!1),children:"Skip"})]}):(0,d.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,d.jsx)("p",{className:"font-mono text-[10px] text-text-subtle",children:"Requires login + API key."}),(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"cloud_upload",onClick:()=>{aO?W({type:"error",message:`Security required: ${aP}`}):z?Y(!0):W({type:"error",message:'Security required: Enable "Require API key" before activating the tunnel.'})},children:"Enable"})]}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-warning/25 bg-warning/5 px-3 py-2 text-xs text-warning",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),aE?"Tunnel reconnecting…":"Tunnel checking…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>$(!0),children:"Stop"})]})}),(0,d.jsx)(r,{icon:"vpn_lock",label:"Tailscale Funnel",desc:"Private HTTPS host on your tailnet - invite-only by default.",tone:be,toneLabel:bf,children:_&&!af&&ab?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(p,{value:`${ad}/v1`,copyId:"ts_url",copied:aM,onCopy:aN,className:"flex-1"}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>aC(!0),children:"Stop"})]}):!_||af||ab?af||ax?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),ah||"Connecting…"]}),al&&(0,d.jsx)(h.$n,{size:"sm",icon:"open_in_new",onClick:()=>window.open(al,"tailscale_auth","width=600,height=700,noopener,noreferrer"),children:an||"Open"}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>{ag(!1),ay(!1),ai(""),a_()},children:"Stop"})]}):aj?.type==="error"?(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-start gap-2 rounded-md border border-danger/25 bg-danger/5 px-3 py-2 text-xs text-danger",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"error"}),(0,d.jsx)("span",{className:"min-w-0",children:aj.message})]}),(0,d.jsx)(h.$n,{size:"sm",icon:"vpn_lock",onClick:a3,children:"Retry"})]}):(0,d.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,d.jsx)("p",{className:"font-mono text-[10px] text-text-subtle",children:"Requires a Tailscale account."}),(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"vpn_lock",onClick:()=>{aO?ak({type:"error",message:`Security required: ${aP}`}):a3()},children:"Enable"})]}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-warning/25 bg-warning/5 px-3 py-2 text-xs text-warning",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),aG?"Tailscale reconnecting…":"Tailscale checking…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>aC(!0),children:"Stop"})]})})]}),aO&&!J&&!_&&(0,d.jsx)("div",{className:"mt-4",children:(0,d.jsx)(m,{message:aP,action:{label:"Open settings",href:"/dashboard/profile"}})})]})}),(0,d.jsxs)(h.Zp,{id:"require-api-key",className:"scroll-mt-24 flex h-full flex-col",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("h2",{className:"flex items-center gap-2 font-display text-lg font-semibold text-text-main",children:["API keys",(0,d.jsx)("span",{className:"rounded-[5px] bg-surface-2 px-2 py-0.5 font-mono text-[11px] uppercase tracking-wider text-text-muted",children:b.length})]}),(0,d.jsx)("p",{className:"mt-1 font-mono text-[10px] uppercase tracking-wider text-text-subtle",children:"Keys authenticate clients against this gateway."})]}),(0,d.jsx)(h.$n,{icon:"add",className:"font-display",onClick:()=>q(!0),children:"Create key"})]}),(0,d.jsxs)("div",{className:"mt-4 flex items-center justify-between gap-3 rounded-xl bg-surface p-4",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("span",{className:`grid size-9 shrink-0 place-items-center rounded-lg transition-colors ${z?"bg-primary text-white":"bg-surface-2 text-text-muted"}`,children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"vpn_key"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("p",{className:"font-display text-[15px] font-semibold text-text-main",children:"Require API key"}),(0,d.jsx)("span",{className:"rounded-full bg-surface-2 px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider text-text-muted",children:z?"On":"Off"})]}),(0,d.jsx)("p",{className:"mt-0.5 truncate font-mono text-[10px] text-text-muted",children:z?"Rejects missing keys":"Any client accepted"})]})]}),(0,d.jsx)(h.lM,{checked:z,onChange:()=>aS(!z)})]}),aK&&!z&&(0,d.jsx)("div",{className:"mt-3",children:(0,d.jsx)(m,{message:"Endpoint is exposed without an API key."})}),0===aR.length?(0,d.jsxs)("div",{className:"mt-4 rounded-md border border-dashed border-border px-6 py-10 text-center",children:[(0,d.jsx)("div",{className:"mx-auto mb-3 grid size-12 place-items-center rounded-md bg-surface-2 text-text-muted",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[24px]",children:"vpn_key"})}),(0,d.jsx)("p",{className:"font-medium text-text-main",children:"No keys yet"}),(0,d.jsx)("p",{className:"mx-auto mt-1 mb-4 max-w-xs text-sm text-text-muted",children:"Create a key, then point your client at the endpoint above."}),(0,d.jsx)(h.$n,{icon:"add",className:"font-display",onClick:()=>q(!0),children:"Create key"})]}):(0,d.jsx)("div",{className:"mt-3 flex flex-col gap-2",children:aR.map(a=>(0,d.jsxs)("div",{className:`group rounded-xl border border-border-subtle bg-surface px-3.5 py-3 transition ${!1===a.isActive?"opacity-60":""}`,children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsx)("div",{className:"flex min-w-0 items-center gap-2.5",children:(0,d.jsx)("div",{className:"min-w-0",children:(0,d.jsx)("p",{className:"truncate font-display text-[15px] font-semibold text-text-main",children:a.name})})}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,d.jsx)(h.lM,{size:"sm",checked:a.isActive??!0,onChange:b=>{a.isActive&&!b?y({title:"Pause API Key",message:`Pause API key "${a.name}"?
|
|
1
|
+
exports.id=8682,exports.ids=[8682],exports.modules={39936:(a,b,c)=>{Promise.resolve().then(c.bind(c,51747))},51747:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/keyzakyy/Projects/keyrouter/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/keyzakyy/Projects/keyrouter/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js","default")},52960:(a,b,c)=>{Promise.resolve().then(c.bind(c,54780))},54603:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>q});var d=c(19713),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.n,"machine-id"),m=h().join(k.n,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||process.env.MACHINE_ID_SALT||"keyrouter-salt",c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.n,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="kr-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},54780:(a,b,c)=>{"use strict";c.d(b,{default:()=>s});var d=c(48249),e=c(67484),f=c(49885),g=c.n(f),h=c(50412),i=c(50377),j=c(67960),k=c(91937);function l({status:a,className:b=""}){return(0,d.jsx)("div",{className:`p-2 rounded text-sm ${b} ${"success"===a.type?"bg-green-500/10 text-green-600 dark:text-green-400":"warning"===a.type?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"info"===a.type?"bg-blue-500/10 text-blue-600 dark:text-blue-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:a.message.split(/(https?:\/\/[^\s]+)/g).map((a,b)=>/^https?:\/\//.test(a)?(0,d.jsx)("a",{href:a,target:"_blank",rel:"noreferrer",className:"underline font-medium",children:a},b):a)})}function m({message:a,action:b,title:c="Security notice"}){return(0,d.jsxs)("div",{className:"flex items-center gap-3 rounded-xl border border-amber-500/25 bg-amber-500/[0.07] p-4",children:[(0,d.jsx)("span",{className:"grid size-9 shrink-0 place-items-center rounded-lg bg-amber-500/15 text-amber-600 dark:text-amber-400",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"warning"})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"text-[13px] font-semibold text-amber-700 dark:text-amber-300",children:c}),(0,d.jsx)("p",{className:"mt-0.5 text-xs leading-relaxed text-amber-700/80 dark:text-amber-400/80",children:a})]}),b&&(0,d.jsx)("a",{href:b.href,className:"shrink-0 rounded-lg bg-amber-500/15 px-3 py-1.5 font-mono text-[11px] font-medium uppercase tracking-wider text-amber-700 transition-colors hover:bg-amber-500/25 dark:text-amber-300",onClick:b.href.startsWith("#")?a=>{a.preventDefault(),document.getElementById(b.href.slice(1))?.scrollIntoView({behavior:"smooth"})}:void 0,children:b.label})]})}function n({apiKey:a,onChange:b,onRequestRestrict:c}){let f=a.access||{restricted:!1,allow:[]},[g,i]=(0,e.useState)(!1),[j,k]=(0,e.useState)([]),[l,m]=(0,e.useState)({}),o=async()=>{i(!0);try{let[a,b]=await Promise.all([fetch("/api/providers"),fetch("/api/models/alias")]);a.ok&&k((await a.json()).connections||[]),b.ok&&m((await b.json()).aliases||{})}catch(a){console.log("Error loading picker data:",a)}},p=a=>b({restricted:!0,allow:a}),q=a=>p(f.allow.filter(b=>b!==a));return(0,d.jsxs)("div",{className:"mt-2","data-testid":"key-access",children:[(0,d.jsx)(h.lM,{size:"sm",checked:f.restricted,label:"Restrict access",onChange:a=>a?c():b({restricted:!1,allow:f.allow})}),f.restricted&&(0,d.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-1.5",children:[0===f.allow.length&&(0,d.jsx)("span",{className:"text-xs text-warning",children:"No combos or models allowed - this key can call nothing."}),f.allow.map(a=>(0,d.jsxs)("span",{className:"flex items-center gap-1 rounded-[4px] border border-border bg-surface-2 px-2 py-0.5 font-mono text-xs text-text-main",children:[a,(0,d.jsx)("button",{onClick:()=>q(a),className:"rounded text-text-muted hover:text-red-500",title:`Remove ${a}`,"aria-label":`Remove ${a}`,children:(0,d.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"12px"},children:"close"})})]},a)),(0,d.jsxs)("button",{onClick:o,className:"flex items-center gap-0.5 rounded-[4px] border border-dashed border-text-subtle px-2 py-0.5 text-xs font-medium text-text-muted hover:border-text-main hover:text-text-main",children:[(0,d.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"14px"},children:"add"}),"Add combo or model"]})]}),g&&(0,d.jsx)(h.rq,{isOpen:g,onClose:()=>i(!1),onSelect:a=>{let b=a?.value;b&&!f.allow.some(a=>a.toLowerCase()===b.toLowerCase())&&p([...f.allow,b])},onDeselect:a=>q(f.allow.find(b=>b.toLowerCase()===String(a?.value).toLowerCase())),activeProviders:j,modelAliases:l,title:`Allowed for "${a.name}"`,addedModelValues:f.allow,closeOnSelect:!1})]})}n.propTypes={apiKey:g().shape({id:g().string.isRequired,name:g().string,access:g().shape({restricted:g().bool,allow:g().arrayOf(g().string)})}).isRequired,onChange:g().func.isRequired,onRequestRestrict:g().func.isRequired};var o=c(71404);function p({value:a,copyId:b,copied:c,onCopy:e,size:f="sm",onOpen:g,className:h}){let i="lg"===f,j=c===b;return(0,d.jsxs)("div",{className:(0,o.cn)("flex items-center gap-2 rounded-md border bg-surface pl-3 pr-1","border-border focus-within:border-text-subtle focus-within:ring-1 focus-within:ring-text-subtle/50 transition",i?"h-11":"h-9",h),children:[(0,d.jsx)("span",{className:(0,o.cn)("material-symbols-outlined shrink-0 text-text-subtle",i?"text-[18px]":"text-[15px]"),children:"link"}),(0,d.jsx)("span",{className:(0,o.cn)("min-w-0 flex-1 truncate font-mono text-text-main",i?"text-[13px] sm:text-sm":"text-[12px]"),title:a,children:a}),g&&(0,d.jsx)("button",{type:"button",onClick:g,className:"grid size-7 shrink-0 place-items-center rounded-[4px] text-text-muted transition hover:bg-surface-2 hover:text-text-main",title:"Open endpoint","aria-label":"Open endpoint",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"open_in_new"})}),(0,d.jsx)("button",{type:"button",onClick:()=>e(a,b),className:(0,o.cn)("grid shrink-0 place-items-center rounded-[4px] transition",i?"size-8":"size-7",j?"bg-success/12 text-success":"text-text-muted hover:bg-surface-2 hover:text-text-main"),title:"Copy","aria-label":"Copy to clipboard",children:(0,d.jsx)("span",{className:(0,o.cn)("material-symbols-outlined",i?"text-[18px]":"text-[16px]"),children:j?"check":"content_copy"})})]})}p.propTypes={value:g().string.isRequired,copyId:g().string.isRequired,copied:g().string,onCopy:g().func.isRequired,size:g().oneOf(["sm","lg"]),onOpen:g().func,className:g().string};let q={ok:{pill:"bg-success/10 text-success border border-success/20",chip:"bg-success/10 text-success",dot:"bg-success"},busy:{pill:"bg-warning/10 text-warning border border-warning/20",chip:"bg-warning/10 text-warning",dot:"bg-warning animate-pulse"},off:{pill:"bg-surface-2 text-text-muted border border-border",chip:"bg-surface-2 text-text-muted",dot:"bg-text-subtle/40"},error:{pill:"bg-danger/10 text-danger border border-danger/20",chip:"bg-danger/10 text-danger",dot:"bg-danger"}};function r({icon:a,label:b,desc:c,tone:e="off",toneLabel:f,children:g}){let h=q[e]||q.off;return(0,d.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-4 transition-colors",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3.5",children:[(0,d.jsx)("div",{className:(0,o.cn)("grid size-10 shrink-0 place-items-center rounded-xl",h.chip),children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:a})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1 pt-0.5",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1",children:[(0,d.jsx)("span",{className:"font-display text-[15px] font-semibold text-text-main",children:b}),(0,d.jsxs)("span",{className:(0,o.cn)("inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider",h.pill),children:[(0,d.jsx)("span",{className:(0,o.cn)("size-1.5 rounded-full",h.dot)}),f]})]}),(0,d.jsx)("p",{className:"mt-0.5 font-mono text-[11px] leading-relaxed text-text-muted",children:c})]})]}),(0,d.jsx)("div",{className:"mt-4",children:g})]})}function s({machineId:a}){let[b,c]=(0,e.useState)([]),[f,g]=(0,e.useState)(!0),[o,q]=(0,e.useState)(!1),[t,u]=(0,e.useState)(""),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(!0),[D,E]=(0,e.useState)(!0),[F,G]=(0,e.useState)(!1),[H,I]=(0,e.useState)(!0),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(""),[P,Q]=(0,e.useState)(""),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(""),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(!1),[Z,$]=(0,e.useState)(!1),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(""),[af,ag]=(0,e.useState)(!1),[ah,ai]=(0,e.useState)(""),[aj,ak]=(0,e.useState)(null),[al,am]=(0,e.useState)(""),[an,ao]=(0,e.useState)(""),[ap,aq]=(0,e.useState)(null),[ar,as]=(0,e.useState)(!1),[at,au]=(0,e.useState)([]),[av,aw]=(0,e.useState)(""),[ax,ay]=(0,e.useState)(!1),[az,aA]=(0,e.useState)(!1),[aB,aC]=(0,e.useState)(!1),aD=(0,e.useRef)(null);(0,e.useRef)(0),(0,e.useRef)(0),(0,e.useRef)(!1),(0,e.useRef)(!1),(0,e.useRef)(!1),(0,e.useRef)(!1);let[aE,aF]=(0,e.useState)(!1),[aG,aH]=(0,e.useState)(!1),[aI,aJ]=(0,e.useState)(new Set),[aK,aL]=(0,e.useState)(!1),{copied:aM,copy:aN}=(0,i.C)(),aO=!B||!D,aP=B?"Change the default dashboard password before activating the tunnel.":'Enable "Require login" and set a custom password before activating the tunnel.',aQ=b.filter(a=>"Default Key"===a.name),aR=b.filter(a=>"Default Key"!==a.name);(0,e.useCallback)((a,b,c,d,e,f)=>{b.current?(c.current=0,d(!0),e.current||(e.current=!0,f(!0))):(c.current+=1,c.current>=j.t6&&d(!1))},[]);let aS=async a=>{try{await k.A.getState().patchSettings({requireApiKey:a})&&A(a)}catch(a){console.log("Error updating requireApiKey:",a)}},aT=async()=>{try{let a=async()=>{let a=await fetch("/api/keys");return a.ok&&(await a.json()).keys||[]},b=await a();if(0===b.length)try{(await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:"Default Key"})})).ok&&(b=await a())}catch{}c(b)}catch(a){console.log("Error fetching data:",a)}finally{g(!1)}},aU=async(...a)=>{S(!0),U("Waiting for tunnel ready...");let b=a.filter(Boolean).map(a=>`${a}/api/health`),c=Date.now();for(;Date.now()-c<j.Cp;){if(await new Promise(a=>setTimeout(a,j.Hx)),await Promise.any(b.map(async a=>{if((await fetch(a,{mode:"cors",cache:"no-store"})).ok)return!0;throw Error("not ready")})).catch(()=>!1))return K(!0),S(!1),U(""),!0;if((Date.now()-c)%1e4<j.Hx)try{let a=await fetch("/api/tunnel/status");if(a.ok){let b=await a.json();if(!b.tunnel?.enabled)return W({type:"error",message:"Tunnel process stopped unexpectedly."}),S(!1),U(""),!1}}catch{}}return W({type:"error",message:"Tunnel created but not reachable. Please try again."}),S(!1),U(""),!1},aV=async()=>{Y(!1),S(!0),W(null),U("Creating tunnel...");let a=!0;(async()=>{for(;a;){try{let b=await fetch("/api/tunnel/status");if(b.ok){let c=await b.json();c.download?.downloading?U(`Downloading cloudflared... ${c.download.progress}%`):a&&U("Creating tunnel...")}}catch{}await new Promise(a=>setTimeout(a,1e3))}})();try{let b=await fetch("/api/tunnel/enable",{method:"POST"});a=!1;let c=await b.json();if(!b.ok)return void W({type:"error",message:c.error||"Failed to enable tunnel"});let d=c.tunnelUrl;if(!d)return void W({type:"error",message:"No tunnel URL returned"});O(d),Q(c.publicUrl||""),await aU(c.publicUrl,d)}catch(a){W({type:"error",message:a.message})}finally{a=!1,S(!1),U("")}},aW=async()=>{S(!0),W(null);try{let a=await fetch("/api/tunnel/disable",{method:"POST"}),b=await a.json();a.ok?(K(!1),O(""),$(!1),W({type:"success",message:"Tunnel disabled"})):W({type:"error",message:b.error||"Failed to disable tunnel"})}catch(a){W({type:"error",message:a.message})}finally{S(!1)}},aX=async()=>{aq(null);try{let a=await fetch("/api/tunnel/tailscale-check");if(a.ok){let b=await a.json();return aq(b.installed),b}}catch{}return aq(!1),{installed:!1}},aY=async()=>{as(!0),ak(null),au([]);try{let a=await fetch("/api/tunnel/tailscale-install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:av})});aw("");let b=a.body.getReader(),c=new TextDecoder,d="";for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(d=f.pop()||"",f)){let b=a.split("\n"),c="progress",d=null;for(let a of b)if(a.startsWith("event: ")&&(c=a.slice(7).trim()),a.startsWith("data: "))try{d=JSON.parse(a.slice(6))}catch{}if(d)if("progress"===c)au(a=>[...a.slice(-50),d.message]);else if("done"===c){aq(!0),as(!1),aA(!1),a0();return}else"error"===c&&ak({type:"error",message:d.error||"Install failed"})}}}catch(a){ak({type:"error",message:a.message})}finally{as(!1)}},aZ=async a=>{ai("Waiting for Tailscale ready...");let b=`${a}/api/health`,c=Date.now();for(;Date.now()-c<j.Cp;){await new Promise(a=>setTimeout(a,j.Hx));try{let a=await fetch(b,{mode:"no-cors",cache:"no-store"});if(a.ok||"opaque"===a.type)return!0}catch{}}return!1},a$=(a,b)=>{am(a),ao(b)},a_=()=>{am(""),ao("")},a0=async()=>{aA(!1),ay(!0),ag(!0),ak(null),ai("Connecting..."),a_();try{let a=await fetch("/api/tunnel/tailscale-enable",{method:"POST"}),b=await a.json();if(a.ok&&b.success){ae(b.tunnelUrl||"");let a=await aZ(b.tunnelUrl);aa(!0),ak(a?null:{type:"warning",message:"Connected but not reachable yet."});return}if(b.needsLogin&&b.authUrl){a$(b.authUrl,"Open Login Page"),ai('Login required - click "Open Login Page" to continue');for(let a=0;a<40;a++){await new Promise(a=>setTimeout(a,3e3));try{let a=await fetch("/api/tunnel/tailscale-check");if(a.ok&&(await a.json()).loggedIn){a_(),ai("Starting funnel...");let a=await fetch("/api/tunnel/tailscale-enable",{method:"POST"}),b=await a.json();if(a.ok&&b.success){ae(b.tunnelUrl||"");let a=await aZ(b.tunnelUrl);aa(!0),ak(a?null:{type:"warning",message:"Connected but not reachable yet."})}else b.funnelNotEnabled&&b.enableUrl?await a1(b.enableUrl):ak({type:"error",message:b.error||"Failed to start funnel"});return}}catch{}}a_(),ak({type:"error",message:"Login timed out. Please try again."});return}if(b.funnelNotEnabled&&b.enableUrl)return void await a1(b.enableUrl);ak({type:"error",message:b.error||"Failed to connect"})}catch(a){ak({type:"error",message:a.message})}finally{ag(!1),ay(!1),ai(""),a_()}},a1=async a=>{a$(a,"Open Funnel Settings"),ai('Click "Open Funnel Settings" to enable Funnel...');for(let a=0;a<40;a++){await new Promise(a=>setTimeout(a,3e3));try{let a=await fetch("/api/tunnel/tailscale-enable",{method:"POST"}),b=await a.json();if(a.ok&&b.success){a_(),ae(b.tunnelUrl||"");let a=await aZ(b.tunnelUrl);aa(!0),ak(a?null:{type:"warning",message:"Connected but not reachable yet."});return}if(b.funnelNotEnabled)continue;if(b.error){a_(),ak({type:"error",message:b.error});return}}catch{}}a_(),ak({type:"error",message:"Timed out waiting for Funnel to be enabled."})},a2=async()=>{ag(!0),ak(null);try{let a=await fetch("/api/tunnel/tailscale-disable",{method:"POST"}),b=await a.json();a.ok?(aa(!1),ae(""),aC(!1),ak({type:"success",message:"Tailscale disabled"})):ak({type:"error",message:b.error||"Failed to disable Tailscale"})}catch(a){ak({type:"error",message:a.message})}finally{ag(!1)}},a3=async()=>{ak(null),au([]);let a=await aX();a?.installed&&a?.hasCachedPassword?a0():aA(!0)},a4=async()=>{if(t.trim())try{let a=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})}),b=await a.json();a.ok&&(w(b.key),await aT(),u(""),q(!1))}catch(a){console.log("Error creating key:",a)}},a5=async a=>{y({title:"Delete API Key",message:"Delete this API key?",onConfirm:async()=>{y(null);try{(await fetch(`/api/keys/${a}`,{method:"DELETE"})).ok&&(c(b.filter(b=>b.id!==a)),aJ(b=>{let c=new Set(b);return c.delete(a),c}))}catch(a){console.log("Error deleting key:",a)}}})},a6=async(a,b)=>{try{(await fetch(`/api/keys/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:b})})).ok&&c(c=>c.map(c=>c.id===a?{...c,isActive:b}:c))}catch(a){console.log("Error toggling key:",a)}},a7=async(a,b)=>{try{let d=await fetch(`/api/keys/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({access:b})}),e=await d.json().catch(()=>({}));d.ok&&e.key?c(b=>b.map(b=>b.id===a?{...b,access:e.key.access}:b)):console.log("Error updating key access:",e.error||d.status)}catch(a){console.log("Error updating key access:",a)}},a8=a=>!a||a.length<=10?a||"":a.slice(0,6)+"•".repeat(a.length-10)+a.slice(-4),a9=a=>{aJ(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[ba,bb]=(0,e.useState)("/v1");if(f)return(0,d.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,d.jsx)(h.Qv,{}),(0,d.jsx)(h.Qv,{})]});let bc=J?L?"ok":"busy":R||H?"busy":V?.type==="error"?"error":"off",bd=J?L?"Connected":aE?"Reconnecting":"Connecting":R?"Starting":H?"Checking":V?.type==="error"?"Error":"Off",be=_?ab?"ok":"busy":af||ax?"busy":aj?.type==="error"?"error":"off",bf=_?ab?"Connected":aG?"Reconnecting":"Connecting":af||ax?"Starting":aj?.type==="error"?"Error":"Off";return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsxs)(h.Zp,{children:[(0,d.jsx)("h2",{className:"font-display text-lg font-semibold text-text-main",children:"OpenAI-compatible base URL"}),(0,d.jsx)("p",{className:"mt-1 font-mono text-[10px] uppercase tracking-wider text-text-subtle",children:"One address in front of every provider connection."}),(0,d.jsx)("div",{className:"mt-3",children:(0,d.jsx)(p,{value:ba,copyId:"local_url",copied:aM,onCopy:aN,size:"lg",onOpen:()=>window.open(ba,"_blank","noopener,noreferrer")})})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 items-start gap-6 lg:grid-cols-[1fr_520px] lg:items-stretch",children:[(0,d.jsx)("div",{className:"flex flex-col",children:(0,d.jsxs)(h.Zp,{className:"h-full",children:[(0,d.jsx)("div",{className:"mb-3 flex items-center justify-between",children:(0,d.jsx)("h2",{className:"font-display text-base font-semibold text-text-main",children:"Remote access"})}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsx)(r,{icon:"cloud_upload",label:"Cloudflare Tunnel",desc:"Public HTTPS address from Cloudflare - no port forwarding.",tone:bc,toneLabel:bd,children:J&&!R&&L?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(p,{value:`${P||N}/v1`,copyId:"tunnel_url",copied:aM,onCopy:aN,className:"flex-1"}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>$(!0),children:"Stop"})]}):!J||R||L?R?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),T||"Creating tunnel…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>{S(!1),U("")},children:"Stop"})]}):V?.type==="error"?(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-start gap-2 rounded-md border border-danger/25 bg-danger/5 px-3 py-2 text-xs text-danger",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"error"}),(0,d.jsx)("span",{className:"min-w-0",children:V.message})]}),(0,d.jsx)(h.$n,{size:"sm",icon:"cloud_upload",onClick:()=>Y(!0),children:"Retry"})]}):H?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),"Checking…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"close",onClick:()=>I(!1),children:"Skip"})]}):(0,d.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,d.jsx)("p",{className:"font-mono text-[10px] text-text-subtle",children:"Requires login + API key."}),(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"cloud_upload",onClick:()=>{aO?W({type:"error",message:`Security required: ${aP}`}):z?Y(!0):W({type:"error",message:'Security required: Enable "Require API key" before activating the tunnel.'})},children:"Enable"})]}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-warning/25 bg-warning/5 px-3 py-2 text-xs text-warning",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),aE?"Tunnel reconnecting…":"Tunnel checking…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>$(!0),children:"Stop"})]})}),(0,d.jsx)(r,{icon:"vpn_lock",label:"Tailscale Funnel",desc:"Private HTTPS host on your tailnet - invite-only by default.",tone:be,toneLabel:bf,children:_&&!af&&ab?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(p,{value:`${ad}/v1`,copyId:"ts_url",copied:aM,onCopy:aN,className:"flex-1"}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>aC(!0),children:"Stop"})]}):!_||af||ab?af||ax?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),ah||"Connecting…"]}),al&&(0,d.jsx)(h.$n,{size:"sm",icon:"open_in_new",onClick:()=>window.open(al,"tailscale_auth","width=600,height=700,noopener,noreferrer"),children:an||"Open"}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>{ag(!1),ay(!1),ai(""),a_()},children:"Stop"})]}):aj?.type==="error"?(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-start gap-2 rounded-md border border-danger/25 bg-danger/5 px-3 py-2 text-xs text-danger",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"error"}),(0,d.jsx)("span",{className:"min-w-0",children:aj.message})]}),(0,d.jsx)(h.$n,{size:"sm",icon:"vpn_lock",onClick:a3,children:"Retry"})]}):(0,d.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,d.jsx)("p",{className:"font-mono text-[10px] text-text-subtle",children:"Requires a Tailscale account."}),(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"vpn_lock",onClick:()=>{aO?ak({type:"error",message:`Security required: ${aP}`}):a3()},children:"Enable"})]}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-warning/25 bg-warning/5 px-3 py-2 text-xs text-warning",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[15px]",children:"progress_activity"}),aG?"Tailscale reconnecting…":"Tailscale checking…"]}),(0,d.jsx)(h.$n,{size:"sm",variant:"outline",icon:"power_settings_new",onClick:()=>aC(!0),children:"Stop"})]})})]}),aO&&!J&&!_&&(0,d.jsx)("div",{className:"mt-4",children:(0,d.jsx)(m,{message:aP,action:{label:"Open settings",href:"/dashboard/profile"}})})]})}),(0,d.jsxs)(h.Zp,{id:"require-api-key",className:"scroll-mt-24 flex h-full flex-col",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("h2",{className:"flex items-center gap-2 font-display text-lg font-semibold text-text-main",children:["API keys",(0,d.jsx)("span",{className:"rounded-[5px] bg-surface-2 px-2 py-0.5 font-mono text-[11px] uppercase tracking-wider text-text-muted",children:b.length})]}),(0,d.jsx)("p",{className:"mt-1 font-mono text-[10px] uppercase tracking-wider text-text-subtle",children:"Keys authenticate clients against this gateway."})]}),(0,d.jsx)(h.$n,{icon:"add",className:"font-display",onClick:()=>q(!0),children:"Create key"})]}),(0,d.jsxs)("div",{className:"mt-4 flex items-center justify-between gap-3 rounded-xl bg-surface p-4",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("span",{className:`grid size-9 shrink-0 place-items-center rounded-lg transition-colors ${z?"bg-primary text-white":"bg-surface-2 text-text-muted"}`,children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"vpn_key"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("p",{className:"font-display text-[15px] font-semibold text-text-main",children:"Require API key"}),(0,d.jsx)("span",{className:"rounded-full bg-surface-2 px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider text-text-muted",children:z?"On":"Off"})]}),(0,d.jsx)("p",{className:"mt-0.5 truncate font-mono text-[10px] text-text-muted",children:z?"Rejects missing keys":"Any client accepted"})]})]}),(0,d.jsx)(h.lM,{checked:z,onChange:()=>aS(!z)})]}),aK&&!z&&(0,d.jsx)("div",{className:"mt-3",children:(0,d.jsx)(m,{message:"Endpoint is exposed without an API key."})}),0===aR.length?(0,d.jsxs)("div",{className:"mt-4 rounded-md border border-dashed border-border px-6 py-10 text-center",children:[(0,d.jsx)("div",{className:"mx-auto mb-3 grid size-12 place-items-center rounded-md bg-surface-2 text-text-muted",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[24px]",children:"vpn_key"})}),(0,d.jsx)("p",{className:"font-medium text-text-main",children:"No keys yet"}),(0,d.jsx)("p",{className:"mx-auto mt-1 mb-4 max-w-xs text-sm text-text-muted",children:"Create a key, then point your client at the endpoint above."}),(0,d.jsx)(h.$n,{icon:"add",className:"font-display",onClick:()=>q(!0),children:"Create key"})]}):(0,d.jsx)("div",{className:"mt-3 flex flex-col gap-2",children:aR.map(a=>(0,d.jsxs)("div",{className:`group rounded-xl border border-border-subtle bg-surface px-3.5 py-3 transition ${!1===a.isActive?"opacity-60":""}`,children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsx)("div",{className:"flex min-w-0 items-center gap-2.5",children:(0,d.jsx)("div",{className:"min-w-0",children:(0,d.jsx)("p",{className:"truncate font-display text-[15px] font-semibold text-text-main",children:a.name})})}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,d.jsx)(h.lM,{size:"sm",checked:a.isActive??!0,onChange:b=>{a.isActive&&!b?y({title:"Pause API Key",message:`Pause API key "${a.name}"?
|
|
2
2
|
|
|
3
3
|
This key will stop working immediately but can be resumed later.`,onConfirm:async()=>{y(null),a6(a.id,b)}}):a6(a.id,b)},title:a.isActive?"Pause key":"Resume key"}),(0,d.jsx)("button",{onClick:()=>a5(a.id),className:"grid size-8 place-items-center rounded-lg text-text-muted transition hover:bg-danger/10 hover:text-danger",title:"Delete key",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[17px]",children:"delete"})})]})]}),(0,d.jsxs)("div",{className:"mt-3 flex items-center gap-1.5",children:[(0,d.jsx)("code",{className:"min-w-0 flex-1 truncate rounded-lg bg-bg px-3 py-2 font-mono text-[11.5px] text-text-muted",children:aI.has(a.id)?a.key:a8(a.key)}),(0,d.jsx)("button",{onClick:()=>a9(a.id),className:"grid size-9 shrink-0 place-items-center rounded-lg text-text-muted transition hover:bg-surface-2 hover:text-text-main",title:aI.has(a.id)?"Hide key":"Show key",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:aI.has(a.id)?"visibility_off":"visibility"})}),(0,d.jsx)("button",{onClick:()=>aN(a.key,a.id),className:`grid size-9 shrink-0 place-items-center rounded-lg transition ${aM===a.id?"bg-success/10 text-success":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,title:"Copy key",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:aM===a.id?"check":"content_copy"})})]}),!1===a.isActive&&(0,d.jsxs)("p",{className:"mt-2 flex items-center gap-1 text-[11px] text-warning",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"pause_circle"}),"Paused - clients using this key get rejected."]}),(0,d.jsx)("div",{className:"mt-3",children:(0,d.jsx)(n,{apiKey:a,onChange:b=>a7(a.id,b),onRequestRestrict:()=>y({title:"Restrict API Key",message:`Restrict API key "${a.name}"?
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=869,exports.ids=[615,869,7247],exports.modules={30869:(a,b,c)=>{c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"keyrouter",installCmd:"npm i -g keyrouter",installCmdLatest:"npm i -g keyrouter@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:500,statusPort:
|
|
1
|
+
"use strict";exports.id=869,exports.ids=[615,869,7247],exports.modules={30869:(a,b,c)=>{c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"keyrouter",installCmd:"npm i -g keyrouter",installCmdLatest:"npm i -g keyrouter@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:500,statusPort:20132,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,appPort:20131},h={maxLines:200,pollIntervalMs:1e3},i={tickIntervalMs:6e4,pingLeadMs:5e3,refreshAheadMs:3e5,failureCooldownMs:9e5,providers:{claude:{settingsKey:"claudeAutoPing",quotaKey:"session (5h)",pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1},codex:{settingsKey:"codexAutoPing",quotaKey:"session",pingWhenResetAtSlides:!0,resetAtDriftMs:3e4,minPingIntervalMs:6e5,skipWhenBlockingQuotaExhausted:!0,pingModel:"gpt-5.6-terra",pingText:"hi",pingInstructions:"Reply with OK.",pingReasoningEffort:"none"}}}},39006:a=>{a.exports={rE:"1.0.2"}},40615:(a,b,c)=>{c.d(b,{AI_PROVIDERS:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>y,wb:()=>x,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,rs:()=>u});var d=c(8499);let e="⚠️ 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.";Object.fromEntries(d.default.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","credentialFallback","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.default.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{},...a.apiKeyOptionalWith?{apiKeyOptionalWith:a.apiKeyOptionalWith}:{},...a.credentialForm?{credentialForm:a.credentialForm}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a)return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=d.default.filter(a=>a.features?.usage).map(a=>a.id),y=d.default.filter(a=>a.features?.usageApikey).map(a=>a.id)},57247:(a,b,c)=>{c.d(b,{KC:()=>t,OA:()=>p,PROVIDER_MODELS:()=>e.vq,SM:()=>j,V2:()=>q,Xg:()=>s,cY:()=>u,ez:()=>o,fZ:()=>k,kt:()=>r,ux:()=>n});var d=c(8499),e=c(26070),f=c(99511),g=c(59096),h=c(14170);let i=a=>!a||["oc","opencode","ocg","opencode-go","ocz","opencode-zen"].includes(a);function j(a){return e.vq[a]||[]}function k(a){let b=e.vq[a];return b?.[0]?.id||null}let l=new Set(["kr","kiro"]);function m(a,b,c){if(!a)return;let d="string"==typeof b?b.replace(/\([^()]+\)\s*$/,"").trim():b,e=a.find(a=>a.id===b||a.id===d);if(e)return e;if(!l.has(c))return;let g=(0,f.Kq)(d);if(g!==d)return a.find(a=>a.id===g)}function n(a,b){if(i(a)&&(0,g.nh)(b))return h.h.OPENAI_RESPONSES;let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?(0,f.gr)(d):i(a)&&(0,g.i8)(b)?.targetFormat||null}function o(a,b){let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?(0,f.ec)(d):i(a)?(0,g.i8)(b)?.supportedFormats||[h.h.OPENAI]:null}function p(a,b){let c=e.vq[a];if(!c)return null;let d=m(c,b,a);return d?.kind||d?.type||null}function q(a,b){return m(e.vq[a],b,a)||null}function r(a,b,c=null){let d="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,f=d?d[0]:"",h=f?b.slice(0,d.index).trim():b,i=e.vq[a],j=f?f.slice(1,-1).trim().toLowerCase():"",k="xhigh"===j||"max"===j?"high":"minimal"===j?"low":j;if(!k&&c&&"object"==typeof c){let a=c.reasoning_effort||c.output_config?.effort||("object"==typeof c.reasoning?c.reasoning?.effort:null);if("string"==typeof a&&a){let b=a.toLowerCase().trim();k="xhigh"===b||"max"===b?"high":"minimal"===b?"low":b}else if(c.thinking&&"object"==typeof c.thinking){let a=Number(c.thinking.budget_tokens);Number.isFinite(a)&&a>0&&(k=a>16384?"high":a<=4096?"low":"medium")}}let l=k?`${h}-${k}`:null,n=l&&m(i,l,a)||m(i,h,a),o=n?.upstreamModelId||n?.id;if(o){let a=o.match(/\([^()]+\)\s*$/),b=a?.[0]||"";return(b?o.slice(0,a.index).trim():o)+(f||(b&&k?`(${k})`:b))}return"cx"===a&&"string"==typeof h&&h.endsWith(g.d5)?h.slice(0,-g.d5.length)+f:h+f}Object.fromEntries(d.default.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias]));let s=Object.fromEntries(d.default.map(a=>[a.id,a.alias||a.id]));function t(a){let b=s[a]||a;return e.vq[b]||[]}function u(a,b){return(0,f.g5)(m(e.vq[a],b,a))}},81329:(a,b,c)=>{c.d(b,{CP:()=>f,Xg:()=>d.Xg,bs:()=>g,eh:()=>e,vq:()=>d.PROVIDER_MODELS,zc:()=>i});var d=c(57247);new Set(Object.entries(c(40615).AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a));let e=Object.entries(d.PROVIDER_MODELS).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),f=(a,b=null)=>a?.kind||a?.type||b,g={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-blue-500"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-amber-500"}},h={"gemini-live":{label:"Gemini Live (realtime WebSocket)",desc:"Streams audio over bidiGenerateContent and returns incremental transcription segments"}};function i(a){return"string"==typeof a&&Object.prototype.hasOwnProperty.call(h,a.trim())}Object.freeze(Object.keys(h))}};
|
|
@@ -6,7 +6,7 @@ exports.id=9100,exports.ids=[9100],exports.modules={644:(a,b,c)=>{"use strict";f
|
|
|
6
6
|
ON CONFLICT(id) DO UPDATE SET
|
|
7
7
|
provider=excluded.provider, authType=excluded.authType, name=excluded.name,
|
|
8
8
|
email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,
|
|
9
|
-
data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function k(a={}){let b=await (0,e.c)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let f=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,d).map(i);return g.sort((a,b)=>(a.priority||999)-(b.priority||999)),g}async function l(a){return i((await (0,e.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}function m(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(i);c.sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}),c.forEach((b,c)=>{let d=c+1;(b.priority||0)!==d&&a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[d,b.id])})}async function n(a){let b,c=await (0,e.c)(),f=new Date().toISOString();return c.transaction(()=>{var e;let k="apikey"===a.authType&&!!a.name,l=k?c.all("SELECT * FROM providerConnections WHERE provider = ? AND authType = ? AND name = ?",[a.provider,"apikey",a.name]).map(i):c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(i),m=k?c.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a.provider])?.n??l.length:l.length,n=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.username,c=a.providerSpecificData?.chatgptAccountId;n=l.find(d=>{if("oauth"!==d.authType||d.email!==a.email)return!1;if("codex"===a.provider){let a=d.providerSpecificData?.chatgptAccountId;return!!c&&!!a&&c===a}let e=d.providerSpecificData?.chatgptAccountId;if(c&&e)return c===e;if(c&&!e||!c&&e)return!1;let f=d.providerSpecificData?.username;return b&&f?b===f:!b&&!f})}else"apikey"===a.authType&&a.name&&(n=l.find(b=>"apikey"===b.authType&&b.name===a.name));if(n){if(!1===a.allowOverwrite){let b=Error(`A connection named "${n.name}" already exists for provider "${a.provider}". Pass allowOverwrite: true to replace it.`);throw b.code="PROVIDER_NAME_CONFLICT",b.existingId=n.id,b.existingName=n.name,b}let d=h(n,a),e={...n,...d,updatedAt:f};j(c,e),b=e;return}let o=a.name||null;o||"oauth"!==a.authType&&"access_token"!==a.authType||(e=a.email||`Account ${m+1}`,o="github"===a.provider&&(a.providerSpecificData?.githubLogin||a.providerSpecificData?.githubEmail||a.email||a.providerSpecificData?.githubName)||e);let p=a.priority;if(!p){let b=c.get("SELECT MAX(priority) AS m FROM providerConnections WHERE provider = ?",[a.provider]);p=(b?.m||0)+1}let q={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:o,priority:p,isActive:void 0===a.isActive||a.isActive,createdAt:f,updatedAt:f};for(let b of g)void 0!==a[b]&&null!==a[b]&&(q[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(q.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(q.email=a.email),j(c,q),b=q}),b}async function o(a,b){let c,d=await (0,e.c)();return d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e){c=null;return}let f=i(e),g=h(f,b),k={...f,...g,updatedAt:new Date().toISOString()};j(d,k),void 0!==b.priority&&m(d,f.provider),c=k}),c}async function p(a){let b=await (0,e.c)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),m(b,d.provider),c=!0)}),c}async function q(a){let b=await (0,e.c)(),c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a]);return b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),c?.n||0}async function r(a){let b=await (0,e.c)();b.transaction(()=>m(b,a))}async function s(){let a=await (0,e.c)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=i(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&j(a,e)}}),c}},9460:(a,b,c)=>{"use strict";c.d(b,{L9:()=>r,OM:()=>j,S8:()=>o,fv:()=>l,getMitmAlias:()=>q,o5:()=>k,uL:()=>p,uv:()=>n});var d=c(5684),e=c(644),f=c(22846);let g=(0,f.U)("modelAliases"),h=(0,f.U)("customModels"),i=(0,f.U)("mitmAlias");async function j(){return await g.getAll()}async function k(a,b){await g.set(a,b)}async function l(a){await g.remove(a)}function m(a,b,c){return`${a}|${b}|${c}`}async function n(){return Object.values(await h.getAll())}async function o({providerAlias:a,id:b,type:c="llm",name:f,caps:g,transport:h}){let i=m(a,b,c),j=await (0,d.c)(),k=!1;return j.transaction(()=>{let d=j.get("SELECT value FROM kv WHERE scope = 'customModels' AND key = ?",[i]);if(d){let a={...(0,e.q)(d.value)||{},...f?{name:f}:{},...g?{caps:g}:{},...h?{transport:h}:{}};j.run("UPDATE kv SET value = ? WHERE scope = 'customModels' AND key = ?",[(0,e.s)(a),i]);return}let l=(0,e.s)({providerAlias:a,id:b,type:c,name:f||b,...g?{caps:g}:{},...h?{transport:h}:{}});j.run("INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[i,l]),k=!0}),k}async function p({providerAlias:a,id:b,type:c="llm"}){await h.remove(m(a,b,c))}async function q(a){return a?await i.get(a)||{}:await i.getAll()}async function r(a,b){await i.set(a,b||{})}},22846:(a,b,c)=>{"use strict";c.d(b,{U:()=>f});var d=c(5684),e=c(644);function f(a){return{async get(b,c=null){let f=(await (0,d.c)()).get("SELECT value FROM kv WHERE scope = ? AND key = ?",[a,b]);return f?(0,e.q)(f.value,c):c},async getAll(){let b=(await (0,d.c)()).all("SELECT key, value FROM kv WHERE scope = ?",[a]),c={};for(let a of b)c[a.key]=(0,e.q)(a.value);return c},async set(b,c){(await (0,d.c)()).run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,b,(0,e.s)(c)])},async setMany(b){let c=await (0,d.c)();c.transaction(()=>{for(let[d,f]of Object.entries(b))c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,d,(0,e.s)(f)])})},async remove(b){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ? AND key = ?",[a,b])},async clear(){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ?",[a])}}}},33666:(a,b,c)=>{"use strict";c.d(b,{M7:()=>h,aB:()=>g,xE:()=>f});var d=c(38606);function e(a){if(!Array.isArray(a))return[];let b=new Set,c=[];for(let d of a){if("string"!=typeof d)continue;let a=d.trim();if(!a)continue;let e=a.toLowerCase();b.has(e)||(b.add(e),c.push(a))}return c}function f(a,b){if(1!==a&&!0!==a)return{restricted:!1,allow:[]};let c=[];if("string"==typeof b&&b)try{c=JSON.parse(b)}catch{c=[]}return{restricted:!0,allow:e(c)}}function g(a){let b=a||d.M0;return{accessRestricted:+!!b.restricted,accessAllow:JSON.stringify(b.restricted?e(b.allow):[])}}function h(a){if(!a||"object"!=typeof a||Array.isArray(a))return{ok:!1,error:"access must be an object { restricted, allow }"};let b=Object.keys(a).filter(a=>"restricted"!==a&&"allow"!==a);if(b.length)return{ok:!1,error:`access: unexpected field(s) ${b.join(", ")}`};if("boolean"!=typeof a.restricted)return{ok:!1,error:"access.restricted must be a boolean"};let c=void 0===a.allow?[]:a.allow;return!Array.isArray(c)||c.some(a=>"string"!=typeof a)?{ok:!1,error:"access.allow must be an array of strings"}:c.length>d.lO?{ok:!1,error:`access.allow has more than ${d.lO} entries`}:c.some(a=>a.trim().length>d.AM)?{ok:!1,error:`access.allow entries must be at most ${d.AM} characters`}:{ok:!0,value:{restricted:a.restricted,allow:e(c)}}}},38606:(a,b,c)=>{"use strict";c.d(b,{AM:()=>e,Cq:()=>i,M0:()=>f,WR:()=>h,YR:()=>g,lO:()=>d});let d=200,e=256,f=Object.freeze({restricted:!1,allow:Object.freeze([])}),g=Object.freeze(["webSearch","webFetch"]),h="combo";function i(a){return`This API key is not allowed to use model "${a}"`}},41898:(a,b,c)=>{"use strict";c.d(b,{Ln:()=>R,yz:()=>C,sA:()=>N,y0:()=>I,My:()=>V,FS:()=>z,fp:()=>P,Gb:()=>B,oN:()=>L,kj:()=>G,yK:()=>T,zz:()=>K,js:()=>_,dG:()=>W,pE:()=>A,WG:()=>Q,Zd:()=>M,zI:()=>H,GT:()=>U});var d=c(22846),e=c(1541),f=c(9460),g=c(1129);async function h(a,b,c){if(!a||"object"!=typeof a||Array.isArray(a))return a;let d=new Map;for(let a of Array.isArray(b)?b:[])a&&"string"==typeof a.name&&Array.isArray(a.models)&&d.set(a.name,a.models);let e=(a,b)=>{if(b.has(a))return[];b.add(a);let c=d.get(a);if(!c)return[];let f=[];for(let a of c)"string"==typeof a&&(d.has(a)?f.push(...e(a,b)):f.push(a));return f},f=[];for(let a of d.keys())f.push(...e(a,new Set));let g=async a=>{let b=a.indexOf("/");if(b<=0)return null;let d=a.slice(0,b),e=a.slice(b+1),f=c?await c(d):d;return f?`${f}/${e}`:null},h=a=>{let b=a.indexOf("/");return b>0?a.slice(b+1):a},i={...a};for(let[b,c]of Object.entries(a)){let a=[];if(0===(a=d.has(b)?e(b,new Set):f.filter(a=>h(a)===b)).length)continue;let j=new Set;for(let b of a){let a=await g(b);a&&j.add(a)}if(0!==j.size){for(let a of j)a in i||(i[a]=c);delete i[b]}}return i}async function i(a,b,c){if(!a||"object"!=typeof a||Array.isArray(a))return a;let d={};for(let[e,f]of Object.entries(a))d[e]=await h(f,b,c);return d}let j=(0,d.U)("promptInjections"),k=(0,d.U)("soulPrompts"),l=(0,d.U)("promptPresets"),m="global",n="byKey",o="prompts",p="byKeyModel",q="variants",r="list";function s(a){if(!a||"object"!=typeof a)return null;let b={position:"prepend"===a.position?"prepend":"append",enabled:!1!==a.enabled,updatedAt:a.updatedAt||null,templateName:"string"==typeof a.templateName&&a.templateName.trim()?a.templateName.trim().slice(0,80):null,name:"string"==typeof a.name&&a.name.trim()?a.name.trim().slice(0,80):"string"==typeof a.label&&a.label.trim()?a.label.trim().slice(0,80):null};if("chat"===a.mode){let c=function(a){if(!Array.isArray(a))return[];let b=[];for(let c of a){if(!c||"object"!=typeof c)continue;let a="assistant"===c.role?"assistant":"user"===c.role?"user":null,d="string"==typeof c.content?c.content:"";if(a&&d.trim()&&b.push({role:a,content:d}),b.length>=50)break}return b}(a.turns);return c.length?{mode:"chat",content:"",turns:c,...b}:null}let c="string"==typeof a.content?a.content:"";return c.trim()?{mode:"single",content:c,turns:[],...b}:null}function t(a){let b={};if(!a||"object"!=typeof a)return b;for(let[c,d]of Object.entries(a)){let a=s(d);c&&a&&(b[c]=a)}return b}function u(a={}){return s({mode:a.mode,content:a.content,turns:a.turns,position:a.position,enabled:a.enabled,templateName:a.templateName,name:a.name||a.label,updatedAt:new Date().toISOString()})}let v=!1;async function w(){if(!v)try{let[a,b,c]=await Promise.all([j.get(m,null),j.get(n,null),j.get(o,null)]);if(a||b||c){v=!0;return}let[d,e,f]=await Promise.all([k.get(m,null),k.get(n,null),k.get(o,null)]);d&&await j.set(m,d),e&&await j.set(n,e),f&&await j.set(o,f),v=!0}catch{}}let x=!1;async function y(){if(!x)try{let[a,b]=await Promise.all([j.get(o,null),j.get(p,null)]),d=a=>a&&"object"==typeof a&&Object.keys(a).length>0;if(!d(a)&&!(b&&"object"==typeof b&&Object.values(b).some(d))){x=!0;return}let[f,k]=await Promise.all([(0,e.Uv)(),(0,g.getProviderNodes)()]),{resolveProviderAlias:l}=await Promise.all([c.e(8499),c.e(669)]).then(c.bind(c,40669)),m=function(a,b){let c=new Map;for(let b of Array.isArray(a)?a:[]){if(!b||!b.id)continue;let a=b.prefix||b.data&&b.data.prefix;"string"==typeof a&&a&&c.set(a,b.id)}return a=>c.has(a)?c.get(a):b?b(a):a}(k,l),n=!1;if(d(a)){let b=await h(a,f,m);JSON.stringify(b)!==JSON.stringify(a)&&(await j.set(o,b),n=!0)}if(b&&"object"==typeof b){let a=await i(b,f,m);JSON.stringify(a)!==JSON.stringify(b)&&(await j.set(p,a),n=!0)}n&&Z(),x=!0}catch{}}async function z(){return await w(),s(await j.get(m,null))}async function A(a={}){await w();let b=u(a);return b?await j.set(m,b):await j.remove(m),Z(),b}async function B(){return await w(),await y(),t(await j.get(o,null))}async function C(a){let b=await B();return a in b&&(delete b[a],await j.set(o,b),Z(),!0)}function D(a){let b="string"==typeof a?a.trim():"";return!b||b.length>80||b.includes("/")?null:b}function E(a){if(!a||"object"!=typeof a)return null;let b="string"==typeof a.model?a.model.trim():"";if(!b.includes("/"))return null;let c=s(a);if(!c)return null;let d={...c,model:b,comboId:"string"==typeof a.comboId&&a.comboId?a.comboId:null},e=function(a){if(!a||"object"!=typeof a)return null;let b={},c=Number(a.temperature);Number.isFinite(c)&&c>=0&&c<=2&&(b.temperature=c);let d=Number(a.top_p);Number.isFinite(d)&&d>0&&d<=1&&(b.top_p=d);let e=Number(a.max_tokens);return Number.isFinite(e)&&Number.isInteger(e)&&e>=1&&e<=1e6&&(b.max_tokens=e),Object.keys(b).length?b:null}(a.sampling);return e&&(d.sampling=e),d}function F(a){let b={};if(!a||"object"!=typeof a)return b;for(let[c,d]of Object.entries(a)){if(!D(c))continue;let a=E(d);a&&(b[c]=a)}return b}async function G(){return await w(),F(await j.get(q,null))}async function H(a,b={}){let c=D(a);if(!c)return null;let d=await G(),h=E({...b,updatedAt:new Date().toISOString()});if(!h)return c in d&&await I(c),null;let i=await (0,g.getProviderNodes)().catch(()=>[]),k=(0,g.resolveRoutableBacking)(h.model,i);if(null===k)return null;let l=k===h.model?h:{...h,model:k};if(!(c in d)&&await (0,e.Dj)(c).catch(()=>null))return null;if(!(c in d)){let a=await (0,f.OM)().catch(()=>({}));if(a&&"object"==typeof a&&c in a)return null}return d[c]={...l,comboId:null},await j.set(q,d),Z(),d[c]}async function I(a){let b=D(a);if(!b)return!1;let c=await G(),d=c[b];if(!d)return!1;if(d.comboId){let a=await (0,e.L)(d.comboId).catch(()=>null);a&&a.name===b&&await (0,e.CG)(a.id).catch(()=>{})}return delete c[b],await j.set(q,c),Z(),!0}let J=null;async function K(){try{await y();let a=await j.get(o,null);if(!a||"object"!=typeof a||!Object.keys(a).length||null!==J&&JSON.stringify(a)===J)return 0;let b=await G(),c=await (0,e.Uv)().catch(()=>[]),d=new Set([...Object.keys(b),...c.map(a=>a.name)]),f={},g=0,h=!1;for(let[c,e]of Object.entries(a))try{let a=s(e);if(!a||!c.includes("/")){f[c]=e;continue}let h=a.name||function(a){let b=a.indexOf("/"),c=b>0?a.slice(0,b):"custom",d=c.startsWith("openai-compatible-chat-")?"custom":c,e=a.slice(a.lastIndexOf("/")+1).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"model";return`${d}-${e}`.slice(0,80)}(c),i=h.slice(0,80),j=2;for(;d.has(i);){let a=`-${j++}`;i=h.slice(0,80-a.length)+a}b[i]={...a,model:c,comboId:null},d.add(i),g++}catch{f[c]=e,h=!0}return h||(J=JSON.stringify(f)),await j.set(q,b),Object.keys(f).length?await j.set(o,f):await j.remove(o),Z(),g}catch{return 0}}async function L(){return await w(),t(await j.get(n,null))}async function M(a,b={}){let c="string"==typeof a?a.trim():"";if(!c)return null;let d=await L(),e=u(b);return e?d[c]=e:delete d[c],await j.set(n,d),Z(),e}async function N(a){let b=await L();return a in b&&(delete b[a],await j.set(n,b),Z(),!0)}function O(a){let b={};if(!a||"object"!=typeof a)return b;for(let[c,d]of Object.entries(a)){let a=t(d);c&&Object.keys(a).length&&(b[c]=a)}return b}async function P(){return await w(),await y(),O(await j.get(p,null))}async function Q(a,b,c={}){let d="string"==typeof a?a.trim():"",e="string"==typeof b?b.trim():"";if(!d||!e)return null;let f=await P(),g=u(c);return g?(f[d]||(f[d]={}),f[d][e]=g):f[d]&&(delete f[d][e],Object.keys(f[d]).length||delete f[d]),await j.set(p,f),Z(),g}async function R(a,b){let c=await P();return!!c[a]&&b in c[a]&&(delete c[a][b],Object.keys(c[a]).length||delete c[a],await j.set(p,c),Z(),!0)}function S(a){if(!a||"object"!=typeof a)return null;let b="string"==typeof a.id?a.id.trim():"",c="string"==typeof a.name?a.name.trim().slice(0,80):"";if(!b||!c)return null;let d=s(a);return d?{id:b,name:c,...d}:null}async function T(){var a=await l.get(r,null);if(!Array.isArray(a))return[];let b=[];for(let c of a){let a=S(c);a&&b.push(a)}return b}async function U(a={}){let b=await T(),c="string"==typeof a.id&&a.id.trim()?a.id.trim():`tpl-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,d=S({...a,id:c,updatedAt:new Date().toISOString()});if(!d)return null;let e=b.findIndex(a=>a.id===c);return e>=0?b[e]=d:b.push(d),await l.set(r,b),d}async function V(a){let b=await T(),c=b.filter(b=>b.id!==a);return c.length!==b.length&&(await l.set(r,c),!0)}function W({global:a,byKey:b,byModel:c,byKeyModel:d,byVariant:e}={},f={}){let g=[],h=(a,b)=>{b&&b.enabled&&("chat"===b.mode?g.push({name:a,mode:"chat",turns:b.turns,position:b.position}):g.push({name:a,mode:"single",text:b.content,position:b.position}))};h("global",s(a)),f.apiKeyId&&h("user",t(b)[f.apiKeyId]);let i=null;if("string"==typeof f.requestedModel&&f.requestedModel&&!f.requestedModel.includes("/")){let a=F(e)[f.requestedModel];a&&a.enabled&&(i={name:f.requestedModel,entry:a})}if(i&&h(i.name,i.entry),!i){let a=[f.resolvedModel].filter(a=>"string"==typeof a&&a),b=b=>{for(let c of a){let a=b[c];if(a&&a.enabled)return{name:c,entry:a}}return null},e=b(t(c));if(e&&h(e.name,e.entry),f.apiKeyId){let a=O(d)[f.apiKeyId];if(a){let c=b(a);c&&h(c.name,c.entry)}}}return g}let X=null,Y=null;function Z(){X=null}async function $(){return X&&Date.now()-X.at<3e3?X:(Y||(Y=(async()=>{await K().catch(()=>{});let[a,b,c,d,e]=await Promise.all([z(),L(),B(),P(),G()]);return X={at:Date.now(),global:a,byKey:b,byModel:c,byKeyModel:d,byVariant:e}})().finally(()=>{Y=null})),Y)}async function _(a={}){try{let b=await $();return W(b,a)}catch{return[]}}},42655:(a,b,c)=>{"use strict";c.d(b,{Xx:()=>j,exportSettings:()=>k,getSettings:()=>i});var d=c(5684),e=c(644);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},quotaVisibility:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},capacityAdapter:{vision:{enabled:!0,roundRobin:!1,models:[]},pdf:{enabled:!1,roundRobin:!1,models:[]},audioInput:{enabled:!0,roundRobin:!1,models:[]},videoInput:{enabled:!1,roundRobin:!1,models:[]}},requireLogin:!0,requireApiKey:!0,tunnelDashboardAccess:!0,authMode:"password",ssoType:"oidc",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",samlEntryPoint:"",samlIssuer:"urn:keyrouter:sp",samlCert:"",samlLoginLabel:"Sign in with SAML SSO",samlAttributeEmail:"email",samlAttributeName:"name",enableObservability:!1,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20128",dnsToolEnabled:{},rtkEnabled:!0,headroomEnabled:!1,headroomUrl:process.env.HEADROOM_URL||"http://localhost:8787",headroomCompressUserMessages:!1,headroomTimeoutMs:3e3,cavemanEnabled:!1,cavemanLevel:"full",ponytailEnabled:!1,ponytailLevel:"full",customPromptEnabled:!1,customPrompt:"",pxpipeEnabled:!1,pxpipeAutoInstall:!0,pxpipeMinChars:25e3,pxpipeTimeoutMs:15e3,providerOverrides:{}};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}function h(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);if(b.capacityAdapter&&"object"==typeof b.capacityAdapter)for(let a of Object.keys(b.capacityAdapter)){let c=b.capacityAdapter[a];Array.isArray(c?.models)&&(c.models=c.models.map(a=>"oc/mimo-v2.5-free"===a?"oc/mimo-v2.6-flash-free":a))}return b}async function i(){return h(await g())}async function j(a){let b,c=await (0,d.c)();return c.transaction(function(){let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])}),h(b)}async function k(){return await g()}},49120:(a,b,c)=>{"use strict";c.d(b,{n:()=>l});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="keyrouter";function k(){return"win32"===process.platform?g().join(process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming"),j):g().join(i().homedir(),`.${j}`)}let l=function(){let a=process.env.DATA_DIR;if(!a)return k();if("win32"===process.platform&&/^\//.test(a))return console.warn(`[DATA_DIR] '${a}' is a Unix path on Windows → fallback to default`),k();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),k();throw b}}()},62674:(a,b,c)=>{"use strict";function d(a,b,c=null){let e=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return e?e.value:c}function e(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}c.d(b,{dy:()=>d,np:()=>e}),c(5684)},74452:(a,b,c)=>{"use strict";c.r(b),c.d(b,{createApiKey:()=>l,deleteApiKey:()=>n,getApiKeyById:()=>j,getApiKeyByKey:()=>k,getApiKeys:()=>i,updateApiKey:()=>m,validateApiKey:()=>o});var d=c(94755),e=c(5684),f=c(33666),g=c(38606);function h(a){return a?{id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,access:(0,f.xE)(a.accessRestricted,a.accessAllow)}:null}async function i(){return(await (0,e.c)()).all("SELECT * FROM apiKeys ORDER BY createdAt ASC").map(h)}async function j(a){return h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE id = ?",[a]))}async function k(a){return a?h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE key = ?",[a])):null}async function l(a,b){if(!b)throw Error("machineId is required");let h=await (0,e.c)(),{generateApiKeyWithMachine:i}=await c.e(6844).then(c.bind(c,86844)),j=i(b),k={id:(0,d.A)(),name:a,key:j.key,machineId:b,isActive:!0,createdAt:new Date().toISOString(),access:{restricted:!1,allow:[]}},l=(0,f.aB)(g.M0);return h.run("INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt, accessRestricted, accessAllow) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",[k.id,k.key,k.name,k.machineId,1,k.createdAt,l.accessRestricted,l.accessAllow]),k}async function m(a,b){let c=await (0,e.c)(),d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!e)return;let g={...h(e),...b},i=(0,f.aB)(g.access);c.run("UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, accessRestricted = ?, accessAllow = ? WHERE id = ?",[g.key,g.name,g.machineId,+!!g.isActive,i.accessRestricted,i.accessAllow,a]),d=h(c.get("SELECT * FROM apiKeys WHERE id = ?",[a]))}),d}async function n(a){let b=(await (0,e.c)()).run("DELETE FROM apiKeys WHERE id = ?",[a]);return(b?.changes??0)>0}async function o(a){let b=(await (0,e.c)()).get("SELECT isActive FROM apiKeys WHERE key = ?",[a]);return!!b&&(1===b.isActive||!0===b.isActive)}},78335:()=>{},83192:(a,b,c)=>{"use strict";c.d(b,{S8:()=>u.S8,E5:()=>U,bI:()=>i.cleanupProviderConnections,Iq:()=>s.createApiKey,jd:()=>t.jd,iE:()=>i.createProviderConnection,i0:()=>j.createProviderNode,ZO:()=>p,Lh:()=>s.deleteApiKey,CG:()=>t.CG,uL:()=>u.uL,Ln:()=>ag.Ln,yz:()=>ag.yz,sA:()=>ag.sA,y0:()=>ag.y0,fv:()=>u.fv,My:()=>ag.My,fK:()=>i.deleteProviderConnection,op:()=>i.deleteProviderConnectionsByProvider,Pc:()=>j.deleteProviderNode,Yd:()=>r,tm:()=>y,oF:()=>z,zP:()=>ah,rg:()=>P,yg:()=>s.getApiKeyById,mY:()=>s.getApiKeyByKey,PX:()=>s.getApiKeys,j$:()=>T,L:()=>t.L,Dj:()=>t.Dj,Uv:()=>t.Uv,uv:()=>u.uv,vF:()=>x,Lk:()=>ae,FS:()=>ag.FS,fp:()=>ag.fp,Gb:()=>ag.Gb,oN:()=>ag.oN,kj:()=>ag.kj,c:()=>u.getMitmAlias,OM:()=>u.OM,r4:()=>v.r4,yK:()=>ag.yK,Mc:()=>i.getProviderConnectionById,P:()=>i.getProviderConnections,Qu:()=>j.getProviderNodeById,Fh:()=>j.getProviderNodes,hr:()=>o,ui:()=>n,Zx:()=>V,SL:()=>ad,mt:()=>h.getSettings,BY:()=>S,K1:()=>ai,zz:()=>ag.zz,VT:()=>v.VT,yF:()=>v.yF,js:()=>ag.js,ox:()=>ac,sZ:()=>Q,pE:()=>ag.pE,WG:()=>ag.WG,Zd:()=>ag.Zd,zI:()=>ag.zI,L9:()=>u.L9,o5:()=>u.o5,_V:()=>I,uw:()=>O,XW:()=>s.updateApiKey,oG:()=>t.oG,KJ:()=>v.KJ,rj:()=>i.updateProviderConnection,ho:()=>j.updateProviderNode,Q_:()=>q,Xx:()=>h.Xx,GT:()=>ag.GT,ek:()=>s.validateApiKey});var d=c(5684),e=c(644),f=c(33666),g=c(38606),h=c(42655),i=c(5781),j=c(1129),k=c(94755);function l(a){return a?{...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive||!0===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function m(a,b){let c=function(a){let{id:b,isActive:c,testStatus:d,createdAt:f,updatedAt:g,...h}=a;return{id:b,isActive:+(!1!==c),testStatus:d??null,data:(0,e.s)(h),createdAt:f,updatedAt:g}}(b);a.run(`INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)
|
|
9
|
+
data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function k(a={}){let b=await (0,e.c)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let f=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,d).map(i);return g.sort((a,b)=>(a.priority||999)-(b.priority||999)),g}async function l(a){return i((await (0,e.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}function m(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(i);c.sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}),c.forEach((b,c)=>{let d=c+1;(b.priority||0)!==d&&a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[d,b.id])})}async function n(a){let b,c=await (0,e.c)(),f=new Date().toISOString();return c.transaction(()=>{var e;let k="apikey"===a.authType&&!!a.name,l=k?c.all("SELECT * FROM providerConnections WHERE provider = ? AND authType = ? AND name = ?",[a.provider,"apikey",a.name]).map(i):c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(i),m=k?c.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a.provider])?.n??l.length:l.length,n=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.username,c=a.providerSpecificData?.chatgptAccountId;n=l.find(d=>{if("oauth"!==d.authType||d.email!==a.email)return!1;if("codex"===a.provider){let a=d.providerSpecificData?.chatgptAccountId;return!!c&&!!a&&c===a}let e=d.providerSpecificData?.chatgptAccountId;if(c&&e)return c===e;if(c&&!e||!c&&e)return!1;let f=d.providerSpecificData?.username;return b&&f?b===f:!b&&!f})}else"apikey"===a.authType&&a.name&&(n=l.find(b=>"apikey"===b.authType&&b.name===a.name));if(n){if(!1===a.allowOverwrite){let b=Error(`A connection named "${n.name}" already exists for provider "${a.provider}". Pass allowOverwrite: true to replace it.`);throw b.code="PROVIDER_NAME_CONFLICT",b.existingId=n.id,b.existingName=n.name,b}let d=h(n,a),e={...n,...d,updatedAt:f};j(c,e),b=e;return}let o=a.name||null;o||"oauth"!==a.authType&&"access_token"!==a.authType||(e=a.email||`Account ${m+1}`,o="github"===a.provider&&(a.providerSpecificData?.githubLogin||a.providerSpecificData?.githubEmail||a.email||a.providerSpecificData?.githubName)||e);let p=a.priority;if(!p){let b=c.get("SELECT MAX(priority) AS m FROM providerConnections WHERE provider = ?",[a.provider]);p=(b?.m||0)+1}let q={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:o,priority:p,isActive:void 0===a.isActive||a.isActive,createdAt:f,updatedAt:f};for(let b of g)void 0!==a[b]&&null!==a[b]&&(q[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(q.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(q.email=a.email),j(c,q),b=q}),b}async function o(a,b){let c,d=await (0,e.c)();return d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e){c=null;return}let f=i(e),g=h(f,b),k={...f,...g,updatedAt:new Date().toISOString()};j(d,k),void 0!==b.priority&&m(d,f.provider),c=k}),c}async function p(a){let b=await (0,e.c)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),m(b,d.provider),c=!0)}),c}async function q(a){let b=await (0,e.c)(),c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a]);return b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),c?.n||0}async function r(a){let b=await (0,e.c)();b.transaction(()=>m(b,a))}async function s(){let a=await (0,e.c)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=i(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&j(a,e)}}),c}},9460:(a,b,c)=>{"use strict";c.d(b,{L9:()=>r,OM:()=>j,S8:()=>o,fv:()=>l,getMitmAlias:()=>q,o5:()=>k,uL:()=>p,uv:()=>n});var d=c(5684),e=c(644),f=c(22846);let g=(0,f.U)("modelAliases"),h=(0,f.U)("customModels"),i=(0,f.U)("mitmAlias");async function j(){return await g.getAll()}async function k(a,b){await g.set(a,b)}async function l(a){await g.remove(a)}function m(a,b,c){return`${a}|${b}|${c}`}async function n(){return Object.values(await h.getAll())}async function o({providerAlias:a,id:b,type:c="llm",name:f,caps:g,transport:h}){let i=m(a,b,c),j=await (0,d.c)(),k=!1;return j.transaction(()=>{let d=j.get("SELECT value FROM kv WHERE scope = 'customModels' AND key = ?",[i]);if(d){let a={...(0,e.q)(d.value)||{},...f?{name:f}:{},...g?{caps:g}:{},...h?{transport:h}:{}};j.run("UPDATE kv SET value = ? WHERE scope = 'customModels' AND key = ?",[(0,e.s)(a),i]);return}let l=(0,e.s)({providerAlias:a,id:b,type:c,name:f||b,...g?{caps:g}:{},...h?{transport:h}:{}});j.run("INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[i,l]),k=!0}),k}async function p({providerAlias:a,id:b,type:c="llm"}){await h.remove(m(a,b,c))}async function q(a){return a?await i.get(a)||{}:await i.getAll()}async function r(a,b){await i.set(a,b||{})}},22846:(a,b,c)=>{"use strict";c.d(b,{U:()=>f});var d=c(5684),e=c(644);function f(a){return{async get(b,c=null){let f=(await (0,d.c)()).get("SELECT value FROM kv WHERE scope = ? AND key = ?",[a,b]);return f?(0,e.q)(f.value,c):c},async getAll(){let b=(await (0,d.c)()).all("SELECT key, value FROM kv WHERE scope = ?",[a]),c={};for(let a of b)c[a.key]=(0,e.q)(a.value);return c},async set(b,c){(await (0,d.c)()).run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,b,(0,e.s)(c)])},async setMany(b){let c=await (0,d.c)();c.transaction(()=>{for(let[d,f]of Object.entries(b))c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,d,(0,e.s)(f)])})},async remove(b){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ? AND key = ?",[a,b])},async clear(){(await (0,d.c)()).run("DELETE FROM kv WHERE scope = ?",[a])}}}},33666:(a,b,c)=>{"use strict";c.d(b,{M7:()=>h,aB:()=>g,xE:()=>f});var d=c(38606);function e(a){if(!Array.isArray(a))return[];let b=new Set,c=[];for(let d of a){if("string"!=typeof d)continue;let a=d.trim();if(!a)continue;let e=a.toLowerCase();b.has(e)||(b.add(e),c.push(a))}return c}function f(a,b){if(1!==a&&!0!==a)return{restricted:!1,allow:[]};let c=[];if("string"==typeof b&&b)try{c=JSON.parse(b)}catch{c=[]}return{restricted:!0,allow:e(c)}}function g(a){let b=a||d.M0;return{accessRestricted:+!!b.restricted,accessAllow:JSON.stringify(b.restricted?e(b.allow):[])}}function h(a){if(!a||"object"!=typeof a||Array.isArray(a))return{ok:!1,error:"access must be an object { restricted, allow }"};let b=Object.keys(a).filter(a=>"restricted"!==a&&"allow"!==a);if(b.length)return{ok:!1,error:`access: unexpected field(s) ${b.join(", ")}`};if("boolean"!=typeof a.restricted)return{ok:!1,error:"access.restricted must be a boolean"};let c=void 0===a.allow?[]:a.allow;return!Array.isArray(c)||c.some(a=>"string"!=typeof a)?{ok:!1,error:"access.allow must be an array of strings"}:c.length>d.lO?{ok:!1,error:`access.allow has more than ${d.lO} entries`}:c.some(a=>a.trim().length>d.AM)?{ok:!1,error:`access.allow entries must be at most ${d.AM} characters`}:{ok:!0,value:{restricted:a.restricted,allow:e(c)}}}},38606:(a,b,c)=>{"use strict";c.d(b,{AM:()=>e,Cq:()=>i,M0:()=>f,WR:()=>h,YR:()=>g,lO:()=>d});let d=200,e=256,f=Object.freeze({restricted:!1,allow:Object.freeze([])}),g=Object.freeze(["webSearch","webFetch"]),h="combo";function i(a){return`This API key is not allowed to use model "${a}"`}},41898:(a,b,c)=>{"use strict";c.d(b,{Ln:()=>R,yz:()=>C,sA:()=>N,y0:()=>I,My:()=>V,FS:()=>z,fp:()=>P,Gb:()=>B,oN:()=>L,kj:()=>G,yK:()=>T,zz:()=>K,js:()=>_,dG:()=>W,pE:()=>A,WG:()=>Q,Zd:()=>M,zI:()=>H,GT:()=>U});var d=c(22846),e=c(1541),f=c(9460),g=c(1129);async function h(a,b,c){if(!a||"object"!=typeof a||Array.isArray(a))return a;let d=new Map;for(let a of Array.isArray(b)?b:[])a&&"string"==typeof a.name&&Array.isArray(a.models)&&d.set(a.name,a.models);let e=(a,b)=>{if(b.has(a))return[];b.add(a);let c=d.get(a);if(!c)return[];let f=[];for(let a of c)"string"==typeof a&&(d.has(a)?f.push(...e(a,b)):f.push(a));return f},f=[];for(let a of d.keys())f.push(...e(a,new Set));let g=async a=>{let b=a.indexOf("/");if(b<=0)return null;let d=a.slice(0,b),e=a.slice(b+1),f=c?await c(d):d;return f?`${f}/${e}`:null},h=a=>{let b=a.indexOf("/");return b>0?a.slice(b+1):a},i={...a};for(let[b,c]of Object.entries(a)){let a=[];if(0===(a=d.has(b)?e(b,new Set):f.filter(a=>h(a)===b)).length)continue;let j=new Set;for(let b of a){let a=await g(b);a&&j.add(a)}if(0!==j.size){for(let a of j)a in i||(i[a]=c);delete i[b]}}return i}async function i(a,b,c){if(!a||"object"!=typeof a||Array.isArray(a))return a;let d={};for(let[e,f]of Object.entries(a))d[e]=await h(f,b,c);return d}let j=(0,d.U)("promptInjections"),k=(0,d.U)("soulPrompts"),l=(0,d.U)("promptPresets"),m="global",n="byKey",o="prompts",p="byKeyModel",q="variants",r="list";function s(a){if(!a||"object"!=typeof a)return null;let b={position:"prepend"===a.position?"prepend":"append",enabled:!1!==a.enabled,updatedAt:a.updatedAt||null,templateName:"string"==typeof a.templateName&&a.templateName.trim()?a.templateName.trim().slice(0,80):null,name:"string"==typeof a.name&&a.name.trim()?a.name.trim().slice(0,80):"string"==typeof a.label&&a.label.trim()?a.label.trim().slice(0,80):null};if("chat"===a.mode){let c=function(a){if(!Array.isArray(a))return[];let b=[];for(let c of a){if(!c||"object"!=typeof c)continue;let a="assistant"===c.role?"assistant":"user"===c.role?"user":null,d="string"==typeof c.content?c.content:"";if(a&&d.trim()&&b.push({role:a,content:d}),b.length>=50)break}return b}(a.turns);return c.length?{mode:"chat",content:"",turns:c,...b}:null}let c="string"==typeof a.content?a.content:"";return c.trim()?{mode:"single",content:c,turns:[],...b}:null}function t(a){let b={};if(!a||"object"!=typeof a)return b;for(let[c,d]of Object.entries(a)){let a=s(d);c&&a&&(b[c]=a)}return b}function u(a={}){return s({mode:a.mode,content:a.content,turns:a.turns,position:a.position,enabled:a.enabled,templateName:a.templateName,name:a.name||a.label,updatedAt:new Date().toISOString()})}let v=!1;async function w(){if(!v)try{let[a,b,c]=await Promise.all([j.get(m,null),j.get(n,null),j.get(o,null)]);if(a||b||c){v=!0;return}let[d,e,f]=await Promise.all([k.get(m,null),k.get(n,null),k.get(o,null)]);d&&await j.set(m,d),e&&await j.set(n,e),f&&await j.set(o,f),v=!0}catch{}}let x=!1;async function y(){if(!x)try{let[a,b]=await Promise.all([j.get(o,null),j.get(p,null)]),d=a=>a&&"object"==typeof a&&Object.keys(a).length>0;if(!d(a)&&!(b&&"object"==typeof b&&Object.values(b).some(d))){x=!0;return}let[f,k]=await Promise.all([(0,e.Uv)(),(0,g.getProviderNodes)()]),{resolveProviderAlias:l}=await Promise.all([c.e(8499),c.e(669)]).then(c.bind(c,40669)),m=function(a,b){let c=new Map;for(let b of Array.isArray(a)?a:[]){if(!b||!b.id)continue;let a=b.prefix||b.data&&b.data.prefix;"string"==typeof a&&a&&c.set(a,b.id)}return a=>c.has(a)?c.get(a):b?b(a):a}(k,l),n=!1;if(d(a)){let b=await h(a,f,m);JSON.stringify(b)!==JSON.stringify(a)&&(await j.set(o,b),n=!0)}if(b&&"object"==typeof b){let a=await i(b,f,m);JSON.stringify(a)!==JSON.stringify(b)&&(await j.set(p,a),n=!0)}n&&Z(),x=!0}catch{}}async function z(){return await w(),s(await j.get(m,null))}async function A(a={}){await w();let b=u(a);return b?await j.set(m,b):await j.remove(m),Z(),b}async function B(){return await w(),await y(),t(await j.get(o,null))}async function C(a){let b=await B();return a in b&&(delete b[a],await j.set(o,b),Z(),!0)}function D(a){let b="string"==typeof a?a.trim():"";return!b||b.length>80||b.includes("/")?null:b}function E(a){if(!a||"object"!=typeof a)return null;let b="string"==typeof a.model?a.model.trim():"";if(!b.includes("/"))return null;let c=s(a);if(!c)return null;let d={...c,model:b,comboId:"string"==typeof a.comboId&&a.comboId?a.comboId:null},e=function(a){if(!a||"object"!=typeof a)return null;let b={},c=Number(a.temperature);Number.isFinite(c)&&c>=0&&c<=2&&(b.temperature=c);let d=Number(a.top_p);Number.isFinite(d)&&d>0&&d<=1&&(b.top_p=d);let e=Number(a.max_tokens);return Number.isFinite(e)&&Number.isInteger(e)&&e>=1&&e<=1e6&&(b.max_tokens=e),Object.keys(b).length?b:null}(a.sampling);return e&&(d.sampling=e),d}function F(a){let b={};if(!a||"object"!=typeof a)return b;for(let[c,d]of Object.entries(a)){if(!D(c))continue;let a=E(d);a&&(b[c]=a)}return b}async function G(){return await w(),F(await j.get(q,null))}async function H(a,b={}){let c=D(a);if(!c)return null;let d=await G(),h=E({...b,updatedAt:new Date().toISOString()});if(!h)return c in d&&await I(c),null;let i=await (0,g.getProviderNodes)().catch(()=>[]),k=(0,g.resolveRoutableBacking)(h.model,i);if(null===k)return null;let l=k===h.model?h:{...h,model:k};if(!(c in d)&&await (0,e.Dj)(c).catch(()=>null))return null;if(!(c in d)){let a=await (0,f.OM)().catch(()=>({}));if(a&&"object"==typeof a&&c in a)return null}return d[c]={...l,comboId:null},await j.set(q,d),Z(),d[c]}async function I(a){let b=D(a);if(!b)return!1;let c=await G(),d=c[b];if(!d)return!1;if(d.comboId){let a=await (0,e.L)(d.comboId).catch(()=>null);a&&a.name===b&&await (0,e.CG)(a.id).catch(()=>{})}return delete c[b],await j.set(q,c),Z(),!0}let J=null;async function K(){try{await y();let a=await j.get(o,null);if(!a||"object"!=typeof a||!Object.keys(a).length||null!==J&&JSON.stringify(a)===J)return 0;let b=await G(),c=await (0,e.Uv)().catch(()=>[]),d=new Set([...Object.keys(b),...c.map(a=>a.name)]),f={},g=0,h=!1;for(let[c,e]of Object.entries(a))try{let a=s(e);if(!a||!c.includes("/")){f[c]=e;continue}let h=a.name||function(a){let b=a.indexOf("/"),c=b>0?a.slice(0,b):"custom",d=c.startsWith("openai-compatible-chat-")?"custom":c,e=a.slice(a.lastIndexOf("/")+1).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"model";return`${d}-${e}`.slice(0,80)}(c),i=h.slice(0,80),j=2;for(;d.has(i);){let a=`-${j++}`;i=h.slice(0,80-a.length)+a}b[i]={...a,model:c,comboId:null},d.add(i),g++}catch{f[c]=e,h=!0}return h||(J=JSON.stringify(f)),await j.set(q,b),Object.keys(f).length?await j.set(o,f):await j.remove(o),Z(),g}catch{return 0}}async function L(){return await w(),t(await j.get(n,null))}async function M(a,b={}){let c="string"==typeof a?a.trim():"";if(!c)return null;let d=await L(),e=u(b);return e?d[c]=e:delete d[c],await j.set(n,d),Z(),e}async function N(a){let b=await L();return a in b&&(delete b[a],await j.set(n,b),Z(),!0)}function O(a){let b={};if(!a||"object"!=typeof a)return b;for(let[c,d]of Object.entries(a)){let a=t(d);c&&Object.keys(a).length&&(b[c]=a)}return b}async function P(){return await w(),await y(),O(await j.get(p,null))}async function Q(a,b,c={}){let d="string"==typeof a?a.trim():"",e="string"==typeof b?b.trim():"";if(!d||!e)return null;let f=await P(),g=u(c);return g?(f[d]||(f[d]={}),f[d][e]=g):f[d]&&(delete f[d][e],Object.keys(f[d]).length||delete f[d]),await j.set(p,f),Z(),g}async function R(a,b){let c=await P();return!!c[a]&&b in c[a]&&(delete c[a][b],Object.keys(c[a]).length||delete c[a],await j.set(p,c),Z(),!0)}function S(a){if(!a||"object"!=typeof a)return null;let b="string"==typeof a.id?a.id.trim():"",c="string"==typeof a.name?a.name.trim().slice(0,80):"";if(!b||!c)return null;let d=s(a);return d?{id:b,name:c,...d}:null}async function T(){var a=await l.get(r,null);if(!Array.isArray(a))return[];let b=[];for(let c of a){let a=S(c);a&&b.push(a)}return b}async function U(a={}){let b=await T(),c="string"==typeof a.id&&a.id.trim()?a.id.trim():`tpl-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,d=S({...a,id:c,updatedAt:new Date().toISOString()});if(!d)return null;let e=b.findIndex(a=>a.id===c);return e>=0?b[e]=d:b.push(d),await l.set(r,b),d}async function V(a){let b=await T(),c=b.filter(b=>b.id!==a);return c.length!==b.length&&(await l.set(r,c),!0)}function W({global:a,byKey:b,byModel:c,byKeyModel:d,byVariant:e}={},f={}){let g=[],h=(a,b)=>{b&&b.enabled&&("chat"===b.mode?g.push({name:a,mode:"chat",turns:b.turns,position:b.position}):g.push({name:a,mode:"single",text:b.content,position:b.position}))};h("global",s(a)),f.apiKeyId&&h("user",t(b)[f.apiKeyId]);let i=null;if("string"==typeof f.requestedModel&&f.requestedModel&&!f.requestedModel.includes("/")){let a=F(e)[f.requestedModel];a&&a.enabled&&(i={name:f.requestedModel,entry:a})}if(i&&h(i.name,i.entry),!i){let a=[f.resolvedModel].filter(a=>"string"==typeof a&&a),b=b=>{for(let c of a){let a=b[c];if(a&&a.enabled)return{name:c,entry:a}}return null},e=b(t(c));if(e&&h(e.name,e.entry),f.apiKeyId){let a=O(d)[f.apiKeyId];if(a){let c=b(a);c&&h(c.name,c.entry)}}}return g}let X=null,Y=null;function Z(){X=null}async function $(){return X&&Date.now()-X.at<3e3?X:(Y||(Y=(async()=>{await K().catch(()=>{});let[a,b,c,d,e]=await Promise.all([z(),L(),B(),P(),G()]);return X={at:Date.now(),global:a,byKey:b,byModel:c,byKeyModel:d,byVariant:e}})().finally(()=>{Y=null})),Y)}async function _(a={}){try{let b=await $();return W(b,a)}catch{return[]}}},42655:(a,b,c)=>{"use strict";c.d(b,{Xx:()=>j,exportSettings:()=>k,getSettings:()=>i});var d=c(5684),e=c(644);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},quotaVisibility:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},capacityAdapter:{vision:{enabled:!0,roundRobin:!1,models:[]},pdf:{enabled:!1,roundRobin:!1,models:[]},audioInput:{enabled:!0,roundRobin:!1,models:[]},videoInput:{enabled:!1,roundRobin:!1,models:[]}},requireLogin:!0,requireApiKey:!0,tunnelDashboardAccess:!0,authMode:"password",ssoType:"oidc",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",samlEntryPoint:"",samlIssuer:"urn:keyrouter:sp",samlCert:"",samlLoginLabel:"Sign in with SAML SSO",samlAttributeEmail:"email",samlAttributeName:"name",enableObservability:!1,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20131",dnsToolEnabled:{},rtkEnabled:!0,headroomEnabled:!1,headroomUrl:process.env.HEADROOM_URL||"http://localhost:8787",headroomCompressUserMessages:!1,headroomTimeoutMs:3e3,cavemanEnabled:!1,cavemanLevel:"full",ponytailEnabled:!1,ponytailLevel:"full",customPromptEnabled:!1,customPrompt:"",pxpipeEnabled:!1,pxpipeAutoInstall:!0,pxpipeMinChars:25e3,pxpipeTimeoutMs:15e3,providerOverrides:{}};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}function h(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);if(b.capacityAdapter&&"object"==typeof b.capacityAdapter)for(let a of Object.keys(b.capacityAdapter)){let c=b.capacityAdapter[a];Array.isArray(c?.models)&&(c.models=c.models.map(a=>"oc/mimo-v2.5-free"===a?"oc/mimo-v2.6-flash-free":a))}return b}async function i(){return h(await g())}async function j(a){let b,c=await (0,d.c)();return c.transaction(function(){let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])}),h(b)}async function k(){return await g()}},49120:(a,b,c)=>{"use strict";c.d(b,{n:()=>l});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="keyrouter";function k(){return"win32"===process.platform?g().join(process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming"),j):g().join(i().homedir(),`.${j}`)}let l=function(){let a=process.env.DATA_DIR;if(!a)return k();if("win32"===process.platform&&/^\//.test(a))return console.warn(`[DATA_DIR] '${a}' is a Unix path on Windows → fallback to default`),k();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),k();throw b}}()},62674:(a,b,c)=>{"use strict";function d(a,b,c=null){let e=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return e?e.value:c}function e(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}c.d(b,{dy:()=>d,np:()=>e}),c(5684)},74452:(a,b,c)=>{"use strict";c.r(b),c.d(b,{createApiKey:()=>l,deleteApiKey:()=>n,getApiKeyById:()=>j,getApiKeyByKey:()=>k,getApiKeys:()=>i,updateApiKey:()=>m,validateApiKey:()=>o});var d=c(94755),e=c(5684),f=c(33666),g=c(38606);function h(a){return a?{id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,access:(0,f.xE)(a.accessRestricted,a.accessAllow)}:null}async function i(){return(await (0,e.c)()).all("SELECT * FROM apiKeys ORDER BY createdAt ASC").map(h)}async function j(a){return h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE id = ?",[a]))}async function k(a){return a?h((await (0,e.c)()).get("SELECT * FROM apiKeys WHERE key = ?",[a])):null}async function l(a,b){if(!b)throw Error("machineId is required");let h=await (0,e.c)(),{generateApiKeyWithMachine:i}=await c.e(6844).then(c.bind(c,86844)),j=i(b),k={id:(0,d.A)(),name:a,key:j.key,machineId:b,isActive:!0,createdAt:new Date().toISOString(),access:{restricted:!1,allow:[]}},l=(0,f.aB)(g.M0);return h.run("INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt, accessRestricted, accessAllow) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",[k.id,k.key,k.name,k.machineId,1,k.createdAt,l.accessRestricted,l.accessAllow]),k}async function m(a,b){let c=await (0,e.c)(),d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!e)return;let g={...h(e),...b},i=(0,f.aB)(g.access);c.run("UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, accessRestricted = ?, accessAllow = ? WHERE id = ?",[g.key,g.name,g.machineId,+!!g.isActive,i.accessRestricted,i.accessAllow,a]),d=h(c.get("SELECT * FROM apiKeys WHERE id = ?",[a]))}),d}async function n(a){let b=(await (0,e.c)()).run("DELETE FROM apiKeys WHERE id = ?",[a]);return(b?.changes??0)>0}async function o(a){let b=(await (0,e.c)()).get("SELECT isActive FROM apiKeys WHERE key = ?",[a]);return!!b&&(1===b.isActive||!0===b.isActive)}},78335:()=>{},83192:(a,b,c)=>{"use strict";c.d(b,{S8:()=>u.S8,E5:()=>U,bI:()=>i.cleanupProviderConnections,Iq:()=>s.createApiKey,jd:()=>t.jd,iE:()=>i.createProviderConnection,i0:()=>j.createProviderNode,ZO:()=>p,Lh:()=>s.deleteApiKey,CG:()=>t.CG,uL:()=>u.uL,Ln:()=>ag.Ln,yz:()=>ag.yz,sA:()=>ag.sA,y0:()=>ag.y0,fv:()=>u.fv,My:()=>ag.My,fK:()=>i.deleteProviderConnection,op:()=>i.deleteProviderConnectionsByProvider,Pc:()=>j.deleteProviderNode,Yd:()=>r,tm:()=>y,oF:()=>z,zP:()=>ah,rg:()=>P,yg:()=>s.getApiKeyById,mY:()=>s.getApiKeyByKey,PX:()=>s.getApiKeys,j$:()=>T,L:()=>t.L,Dj:()=>t.Dj,Uv:()=>t.Uv,uv:()=>u.uv,vF:()=>x,Lk:()=>ae,FS:()=>ag.FS,fp:()=>ag.fp,Gb:()=>ag.Gb,oN:()=>ag.oN,kj:()=>ag.kj,c:()=>u.getMitmAlias,OM:()=>u.OM,r4:()=>v.r4,yK:()=>ag.yK,Mc:()=>i.getProviderConnectionById,P:()=>i.getProviderConnections,Qu:()=>j.getProviderNodeById,Fh:()=>j.getProviderNodes,hr:()=>o,ui:()=>n,Zx:()=>V,SL:()=>ad,mt:()=>h.getSettings,BY:()=>S,K1:()=>ai,zz:()=>ag.zz,VT:()=>v.VT,yF:()=>v.yF,js:()=>ag.js,ox:()=>ac,sZ:()=>Q,pE:()=>ag.pE,WG:()=>ag.WG,Zd:()=>ag.Zd,zI:()=>ag.zI,L9:()=>u.L9,o5:()=>u.o5,_V:()=>I,uw:()=>O,XW:()=>s.updateApiKey,oG:()=>t.oG,KJ:()=>v.KJ,rj:()=>i.updateProviderConnection,ho:()=>j.updateProviderNode,Q_:()=>q,Xx:()=>h.Xx,GT:()=>ag.GT,ek:()=>s.validateApiKey});var d=c(5684),e=c(644),f=c(33666),g=c(38606),h=c(42655),i=c(5781),j=c(1129),k=c(94755);function l(a){return a?{...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive||!0===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function m(a,b){let c=function(a){let{id:b,isActive:c,testStatus:d,createdAt:f,updatedAt:g,...h}=a;return{id:b,isActive:+(!1!==c),testStatus:d??null,data:(0,e.s)(h),createdAt:f,updatedAt:g}}(b);a.run(`INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)
|
|
10
10
|
VALUES(?, ?, ?, ?, ?, ?)
|
|
11
11
|
ON CONFLICT(id) DO UPDATE SET
|
|
12
12
|
isActive=excluded.isActive, testStatus=excluded.testStatus,
|