9router 0.2.76 → 0.2.78
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/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +34 -34
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +2 -2
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js +1 -1
- package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +2 -2
- package/app/.next/server/app/callback.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +2 -2
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +2 -2
- package/app/.next/server/app/landing.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +3 -3
- package/app/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +34 -34
- package/app/.next/server/chunks/412.js +1 -1
- package/app/.next/server/chunks/8152.js +1 -1
- package/app/.next/server/chunks/8954.js +1 -1
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{1393-ec22348a03d98802.js → 1393-e72d9173010b9d65.js} +1 -1
- package/app/.next/static/chunks/{3624-b4d607564b40b24d.js → 3624-e096f4cf594e2fc8.js} +1 -1
- package/app/.next/static/chunks/{8729-d0b4e0c8d88b1814.js → 8729-fc0f92ed5e5d2411.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-ebe23b0367ddebdc.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-4940a5acf1d029cb.js +1 -0
- package/app/package.json +1 -1
- package/app/src/mitm/manager.js +45 -25
- package/app/src/mitm/server.js +7 -2
- package/package.json +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-000eaf8021eb5f32.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-acb031d56db92fdf.js +0 -1
- /package/app/.next/static/{4_-SlrTLGXafpky2yrplN → jfmN0W_9Gk1asYjgWltrV}/_buildManifest.js +0 -0
- /package/app/.next/static/{4_-SlrTLGXafpky2yrplN → jfmN0W_9Gk1asYjgWltrV}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--jfmN0W_9Gk1asYjgWltrV--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/e4a2c774b676c378.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-34add7e75711617f.js"/><script src="/_next/static/chunks/4bd1b696-bf5e0dbacfa5baef.js" async=""></script><script src="/_next/static/chunks/3794-cd98b5cd5fb65b19.js" async=""></script><script src="/_next/static/chunks/main-app-8bfa111f852aed9b.js" async=""></script><script src="/_next/static/chunks/600-698f3e9fe5d9a2a4.js" async=""></script><script src="/_next/static/chunks/3624-e096f4cf594e2fc8.js" async=""></script><script src="/_next/static/chunks/8729-fc0f92ed5e5d2411.js" async=""></script><script src="/_next/static/chunks/5497-ad7fb90ac4a481cb.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-2951a18467171aa4.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap" as="style"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><title>9Router - AI Infrastructure Management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.svg"/><link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-34add7e75711617f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[1110,[\"600\",\"static/chunks/600-698f3e9fe5d9a2a4.js\",\"3624\",\"static/chunks/3624-e096f4cf594e2fc8.js\",\"8729\",\"static/chunks/8729-fc0f92ed5e5d2411.js\",\"5497\",\"static/chunks/5497-ad7fb90ac4a481cb.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-2951a18467171aa4.js\"],\"ThemeProvider\"]\n3:I[7121,[],\"\"]\n4:I[4581,[],\"\"]\n5:I[484,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[484,[],\"ViewportBoundary\"]\na:I[484,[],\"MetadataBoundary\"]\nc:I[7123,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/e4a2c774b676c378.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\u0026display=swap\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jfmN0W_9Gk1asYjgWltrV\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e4a2c774b676c378.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[6869,[],\"IconMark\"]\n7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"9Router - AI Infrastructure Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$Ld\",\"4\",{}]]\n"])</script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-34add7e75711617f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7121,[],\"\"]\n3:I[4581,[],\"\"]\n4:I[484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[484,[],\"ViewportBoundary\"]\n9:I[484,[],\"MetadataBoundary\"]\nb:I[7123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--jfmN0W_9Gk1asYjgWltrV--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-34add7e75711617f.js"/><script src="/_next/static/chunks/4bd1b696-bf5e0dbacfa5baef.js" async=""></script><script src="/_next/static/chunks/3794-cd98b5cd5fb65b19.js" async=""></script><script src="/_next/static/chunks/main-app-8bfa111f852aed9b.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-34add7e75711617f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7121,[],\"\"]\n3:I[4581,[],\"\"]\n4:I[484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[484,[],\"ViewportBoundary\"]\n9:I[484,[],\"MetadataBoundary\"]\nb:I[7123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jfmN0W_9Gk1asYjgWltrV\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\"node\":{\"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\"node\":{\"00b830cb3ad8ae488716b54de8f59f7a5dff59a87a\":{\"workers\":{\"app/api/cli-tools/claude-settings/route\":{\"moduleId\":\"48101\",\"async\":false}},\"layer\":{\"app/api/cli-tools/claude-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/claude-settings/route.js\",\"exportedName\":\"GET\"},\"00f0521a01f1371abc196c1a806c7d817aba6f24fd\":{\"workers\":{\"app/api/cli-tools/claude-settings/route\":{\"moduleId\":\"48101\",\"async\":false}},\"layer\":{\"app/api/cli-tools/claude-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/claude-settings/route.js\",\"exportedName\":\"DELETE\"},\"406b5421c0d9278c73508c39a731577bf6ed4d02ca\":{\"workers\":{\"app/api/cli-tools/claude-settings/route\":{\"moduleId\":\"48101\",\"async\":false}},\"layer\":{\"app/api/cli-tools/claude-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/claude-settings/route.js\",\"exportedName\":\"POST\"},\"00abc210d509c2a5babe45934cdf44cae1726962fc\":{\"workers\":{\"app/api/cli-tools/codex-settings/route\":{\"moduleId\":\"83722\",\"async\":false}},\"layer\":{\"app/api/cli-tools/codex-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/codex-settings/route.js\",\"exportedName\":\"DELETE\"},\"00fef668d38ed6414dbbb7377ecfdac61e74ecd9c2\":{\"workers\":{\"app/api/cli-tools/codex-settings/route\":{\"moduleId\":\"83722\",\"async\":false}},\"layer\":{\"app/api/cli-tools/codex-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/codex-settings/route.js\",\"exportedName\":\"GET\"},\"401d76d3f257906bfd6662f16431180c76be75d9f0\":{\"workers\":{\"app/api/cli-tools/codex-settings/route\":{\"moduleId\":\"83722\",\"async\":false}},\"layer\":{\"app/api/cli-tools/codex-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/codex-settings/route.js\",\"exportedName\":\"POST\"},\"0037d08db2fa5d1389469ea6e9a3d0ff9d7423e1c7\":{\"workers\":{\"app/api/cli-tools/droid-settings/route\":{\"moduleId\":\"49043\",\"async\":false}},\"layer\":{\"app/api/cli-tools/droid-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/droid-settings/route.js\",\"exportedName\":\"DELETE\"},\"009d98e0ae529f78f46e8404a9524e03a3321240f5\":{\"workers\":{\"app/api/cli-tools/droid-settings/route\":{\"moduleId\":\"49043\",\"async\":false}},\"layer\":{\"app/api/cli-tools/droid-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/droid-settings/route.js\",\"exportedName\":\"GET\"},\"40613914d9a56a3a4950332d356a40550e1766b3c9\":{\"workers\":{\"app/api/cli-tools/droid-settings/route\":{\"moduleId\":\"49043\",\"async\":false}},\"layer\":{\"app/api/cli-tools/droid-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/droid-settings/route.js\",\"exportedName\":\"POST\"},\"00ae22a114a5e0ea29ffb51186f926f0a14a628651\":{\"workers\":{\"app/api/cli-tools/openclaw-settings/route\":{\"moduleId\":\"85589\",\"async\":false}},\"layer\":{\"app/api/cli-tools/openclaw-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/openclaw-settings/route.js\",\"exportedName\":\"DELETE\"},\"00edbbed331af43249c958f0d2d72f5e24364912a1\":{\"workers\":{\"app/api/cli-tools/openclaw-settings/route\":{\"moduleId\":\"85589\",\"async\":false}},\"layer\":{\"app/api/cli-tools/openclaw-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/openclaw-settings/route.js\",\"exportedName\":\"GET\"},\"40b069e711997d56fd1cd254d764ab93da9bc876b6\":{\"workers\":{\"app/api/cli-tools/openclaw-settings/route\":{\"moduleId\":\"85589\",\"async\":false}},\"layer\":{\"app/api/cli-tools/openclaw-settings/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/openclaw-settings/route.js\",\"exportedName\":\"POST\"},\"4020dc1456d7b92cfc27cdc401d0f2b121fc9377c4\":{\"workers\":{\"app/api/cli-tools/antigravity-mitm/alias/route\":{\"moduleId\":\"76200\",\"async\":false}},\"layer\":{\"app/api/cli-tools/antigravity-mitm/alias/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/antigravity-mitm/alias/route.js\",\"exportedName\":\"GET\"},\"40c6354f22d4b97d20eaf7f65d95101321602958f5\":{\"workers\":{\"app/api/cli-tools/antigravity-mitm/alias/route\":{\"moduleId\":\"76200\",\"async\":false}},\"layer\":{\"app/api/cli-tools/antigravity-mitm/alias/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/antigravity-mitm/alias/route.js\",\"exportedName\":\"PUT\"},\"00dcc02aeae88f74d9ec0124fb371c6b098b79905c\":{\"workers\":{\"app/api/cli-tools/antigravity-mitm/route\":{\"moduleId\":\"85298\",\"async\":false}},\"layer\":{\"app/api/cli-tools/antigravity-mitm/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/antigravity-mitm/route.js\",\"exportedName\":\"GET\"},\"400d20ae0577d77ba3f21d96e3193f2eab341eaca1\":{\"workers\":{\"app/api/cli-tools/antigravity-mitm/route\":{\"moduleId\":\"85298\",\"async\":false}},\"layer\":{\"app/api/cli-tools/antigravity-mitm/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/antigravity-mitm/route.js\",\"exportedName\":\"DELETE\"},\"40fb22a5994d3f3d53998969358fe69c9b793a2552\":{\"workers\":{\"app/api/cli-tools/antigravity-mitm/route\":{\"moduleId\":\"85298\",\"async\":false}},\"layer\":{\"app/api/cli-tools/antigravity-mitm/route\":\"rsc\"},\"filename\":\"app/api/cli-tools/antigravity-mitm/route.js\",\"exportedName\":\"POST\"}},\"edge\":{},\"encryptionKey\":\"process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY\"}"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{"
|
|
1
|
+
{"node":{"00b830cb3ad8ae488716b54de8f59f7a5dff59a87a":{"workers":{"app/api/cli-tools/claude-settings/route":{"moduleId":"48101","async":false}},"layer":{"app/api/cli-tools/claude-settings/route":"rsc"},"filename":"app/api/cli-tools/claude-settings/route.js","exportedName":"GET"},"00f0521a01f1371abc196c1a806c7d817aba6f24fd":{"workers":{"app/api/cli-tools/claude-settings/route":{"moduleId":"48101","async":false}},"layer":{"app/api/cli-tools/claude-settings/route":"rsc"},"filename":"app/api/cli-tools/claude-settings/route.js","exportedName":"DELETE"},"406b5421c0d9278c73508c39a731577bf6ed4d02ca":{"workers":{"app/api/cli-tools/claude-settings/route":{"moduleId":"48101","async":false}},"layer":{"app/api/cli-tools/claude-settings/route":"rsc"},"filename":"app/api/cli-tools/claude-settings/route.js","exportedName":"POST"},"00abc210d509c2a5babe45934cdf44cae1726962fc":{"workers":{"app/api/cli-tools/codex-settings/route":{"moduleId":"83722","async":false}},"layer":{"app/api/cli-tools/codex-settings/route":"rsc"},"filename":"app/api/cli-tools/codex-settings/route.js","exportedName":"DELETE"},"00fef668d38ed6414dbbb7377ecfdac61e74ecd9c2":{"workers":{"app/api/cli-tools/codex-settings/route":{"moduleId":"83722","async":false}},"layer":{"app/api/cli-tools/codex-settings/route":"rsc"},"filename":"app/api/cli-tools/codex-settings/route.js","exportedName":"GET"},"401d76d3f257906bfd6662f16431180c76be75d9f0":{"workers":{"app/api/cli-tools/codex-settings/route":{"moduleId":"83722","async":false}},"layer":{"app/api/cli-tools/codex-settings/route":"rsc"},"filename":"app/api/cli-tools/codex-settings/route.js","exportedName":"POST"},"0037d08db2fa5d1389469ea6e9a3d0ff9d7423e1c7":{"workers":{"app/api/cli-tools/droid-settings/route":{"moduleId":"49043","async":false}},"layer":{"app/api/cli-tools/droid-settings/route":"rsc"},"filename":"app/api/cli-tools/droid-settings/route.js","exportedName":"DELETE"},"009d98e0ae529f78f46e8404a9524e03a3321240f5":{"workers":{"app/api/cli-tools/droid-settings/route":{"moduleId":"49043","async":false}},"layer":{"app/api/cli-tools/droid-settings/route":"rsc"},"filename":"app/api/cli-tools/droid-settings/route.js","exportedName":"GET"},"40613914d9a56a3a4950332d356a40550e1766b3c9":{"workers":{"app/api/cli-tools/droid-settings/route":{"moduleId":"49043","async":false}},"layer":{"app/api/cli-tools/droid-settings/route":"rsc"},"filename":"app/api/cli-tools/droid-settings/route.js","exportedName":"POST"},"00ae22a114a5e0ea29ffb51186f926f0a14a628651":{"workers":{"app/api/cli-tools/openclaw-settings/route":{"moduleId":"85589","async":false}},"layer":{"app/api/cli-tools/openclaw-settings/route":"rsc"},"filename":"app/api/cli-tools/openclaw-settings/route.js","exportedName":"DELETE"},"00edbbed331af43249c958f0d2d72f5e24364912a1":{"workers":{"app/api/cli-tools/openclaw-settings/route":{"moduleId":"85589","async":false}},"layer":{"app/api/cli-tools/openclaw-settings/route":"rsc"},"filename":"app/api/cli-tools/openclaw-settings/route.js","exportedName":"GET"},"40b069e711997d56fd1cd254d764ab93da9bc876b6":{"workers":{"app/api/cli-tools/openclaw-settings/route":{"moduleId":"85589","async":false}},"layer":{"app/api/cli-tools/openclaw-settings/route":"rsc"},"filename":"app/api/cli-tools/openclaw-settings/route.js","exportedName":"POST"},"4020dc1456d7b92cfc27cdc401d0f2b121fc9377c4":{"workers":{"app/api/cli-tools/antigravity-mitm/alias/route":{"moduleId":"76200","async":false}},"layer":{"app/api/cli-tools/antigravity-mitm/alias/route":"rsc"},"filename":"app/api/cli-tools/antigravity-mitm/alias/route.js","exportedName":"GET"},"40c6354f22d4b97d20eaf7f65d95101321602958f5":{"workers":{"app/api/cli-tools/antigravity-mitm/alias/route":{"moduleId":"76200","async":false}},"layer":{"app/api/cli-tools/antigravity-mitm/alias/route":"rsc"},"filename":"app/api/cli-tools/antigravity-mitm/alias/route.js","exportedName":"PUT"},"00dcc02aeae88f74d9ec0124fb371c6b098b79905c":{"workers":{"app/api/cli-tools/antigravity-mitm/route":{"moduleId":"85298","async":false}},"layer":{"app/api/cli-tools/antigravity-mitm/route":"rsc"},"filename":"app/api/cli-tools/antigravity-mitm/route.js","exportedName":"GET"},"400d20ae0577d77ba3f21d96e3193f2eab341eaca1":{"workers":{"app/api/cli-tools/antigravity-mitm/route":{"moduleId":"85298","async":false}},"layer":{"app/api/cli-tools/antigravity-mitm/route":"rsc"},"filename":"app/api/cli-tools/antigravity-mitm/route.js","exportedName":"DELETE"},"40fb22a5994d3f3d53998969358fe69c9b793a2552":{"workers":{"app/api/cli-tools/antigravity-mitm/route":{"moduleId":"85298","async":false}},"layer":{"app/api/cli-tools/antigravity-mitm/route":"rsc"},"filename":"app/api/cli-tools/antigravity-mitm/route.js","exportedName":"POST"}},"edge":{},"encryptionKey":"E6OgI/JOYq7mbTvnRXFd/GnwtbNhE8Dcgo/IQqnzEws="}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1393],{1393:(e,s,t)=>{Promise.resolve().then(t.bind(t,5907))},5907:(e,s,t)=>{"use strict";t.d(s,{default:()=>x});var l=t(5155),r=t(2115),a=t(4051),i=t.n(a),n=t(5497),d=t(1059);let o="https://9router.com",c=15e3;function x({machineId:e}){let[s,t]=(0,r.useState)([]),[a,i]=(0,r.useState)(!0),[x,m]=(0,r.useState)(!1),[u,h]=(0,r.useState)(""),[y,p]=(0,r.useState)(null),[g,b]=(0,r.useState)(!1),[f,j]=(0,r.useState)(o),[k,v]=(0,r.useState)(o),[N,w]=(0,r.useState)(!1),[C,S]=(0,r.useState)(!1),[$,_]=(0,r.useState)(!1),[E,P]=(0,r.useState)(!1),[A,W]=(0,r.useState)(null),[O,D]=(0,r.useState)(!1),[T,F]=(0,r.useState)(null),[I,K]=(0,r.useState)(""),{copied:U,copy:L}=(0,d.C)();(0,r.useEffect)(()=>{J(),q()},[]);let R=async(e,s=c)=>{let t=new AbortController,l=setTimeout(()=>t.abort(),s);try{let s=await fetch("/api/sync/cloud",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e}),signal:t.signal}),l=await s.json().catch(()=>({}));return{ok:s.ok,status:s.status,data:l}}catch(e){if(e?.name==="AbortError")return{ok:!1,status:408,data:{error:"Cloud request timeout"}};return{ok:!1,status:500,data:{error:e.message||"Cloud request failed"}}}finally{clearTimeout(l)}},q=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let s=await e.json();b(s.cloudEnabled||!1);let t=s.cloudUrl||o;j(t),v(t)}}catch(e){console.log("Error loading cloud settings:",e)}},J=async()=>{try{let e=await fetch("/api/keys"),s=await e.json();e.ok&&t(s.keys||[])}catch(e){console.log("Error fetching data:",e)}finally{i(!1)}},z=e=>{e?S(!0):_(!0)},Q=async()=>{D(!0),K("syncing");try{let{ok:e,data:s}=await R("enable");e?(K("verifying"),s.verified?(b(!0),F({type:"success",message:"Cloud Proxy connected and verified!"})):(b(!0),F({type:"warning",message:s.verifyError||"Connected but verification failed"})),S(!1),s.createdKey&&await J()):F({type:"error",message:s.error||"Failed to enable cloud"})}catch(e){F({type:"error",message:e.message})}finally{D(!1),K("")}},V=async()=>{D(!0),K("syncing");try{await R("sync"),K("disabling");let{ok:e,data:s}=await R("disable");e?(b(!1),F({type:"success",message:"Cloud disabled"}),_(!1)):F({type:"error",message:s.error||"Failed to disable cloud"})}catch(e){console.log("Error disabling cloud:",e),F({type:"error",message:"Failed to disable cloud"})}finally{D(!1),K("")}},Z=async()=>{let e=k.trim().replace(/\/v1\/?$/,"").replace(/\/+$/,"");if(e){w(!0),W(null);try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({cloudUrl:e})})).ok?(j(e),v(e),W({type:"success",message:"Worker URL saved"})):W({type:"error",message:"Failed to save Worker URL"})}catch(e){W({type:"error",message:e.message})}finally{w(!1)}}},H=async()=>{if(f){D(!0),W(null);try{let{ok:e,data:s}=await R("check",8e3);e?W({type:"success",message:s.message||"Worker is running"}):W({type:"error",message:s.error||"Check failed"})}catch{W({type:"error",message:"Cannot reach worker"})}finally{D(!1)}}},Y=async()=>{if(u.trim())try{let e=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u})}),s=await e.json();e.ok&&(p(s.key),await J(),h(""),m(!1))}catch(e){console.log("Error creating key:",e)}},B=async e=>{if(confirm("Delete this API key?"))try{(await fetch(`/api/keys/${e}`,{method:"DELETE"})).ok&&t(s.filter(s=>s.id!==e))}catch(e){console.log("Error deleting key:",e)}},[G,M]=(0,r.useState)("/v1"),X=f?`${f}/v1`:"";if((0,r.useEffect)(()=>{M(`${window.location.origin}/v1`)},[]),a)return(0,l.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{})]});let ee=g?X:G;return(0,l.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,l.jsxs)(n.Zp,{children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-lg font-semibold",children:"API Endpoint"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:g?"Using Cloud Proxy":"Using Local Server"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)(n.$n,{size:"sm",variant:"secondary",icon:"settings",onClick:()=>P(!0),children:"Setup Cloudflare"}),g?(0,l.jsx)(n.$n,{size:"sm",variant:"secondary",icon:"cloud_off",onClick:()=>z(!1),disabled:O,className:"bg-red-500/10! text-red-500! hover:bg-red-500/20! border-red-500/30!",children:"Disable Cloud"}):(0,l.jsx)(n.$n,{variant:"primary",icon:"cloud_upload",onClick:()=>z(!0),disabled:O||!f,className:"bg-linear-to-r from-primary to-blue-500 hover:from-primary-hover hover:to-blue-600",children:"Enable Cloud"})]})]}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.pd,{value:ee,readOnly:!0,className:`flex-1 font-mono text-sm ${g?"animate-border-glow":""}`}),(0,l.jsx)(n.$n,{variant:"secondary",icon:"endpoint_url"===U?"check":"content_copy",onClick:()=>L(ee,"endpoint_url"),children:"endpoint_url"===U?"Copied!":"Copy"})]}),T&&(0,l.jsx)("div",{className:`mt-3 p-2 rounded text-sm ${"success"===T.type?"bg-green-500/10 text-green-600 dark:text-green-400":"warning"===T.type?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:T.message})]}),(0,l.jsxs)(n.Zp,{children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,l.jsx)("h2",{className:"text-lg font-semibold",children:"API Keys"}),(0,l.jsx)(n.$n,{icon:"add",onClick:()=>m(!0),children:"Create Key"})]}),0===s.length?(0,l.jsxs)("div",{className:"text-center py-12",children:[(0,l.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"vpn_key"})}),(0,l.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No API keys yet"}),(0,l.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create your first API key to get started"}),(0,l.jsx)(n.$n,{icon:"add",onClick:()=>m(!0),children:"Create Key"})]}):(0,l.jsx)("div",{className:"flex flex-col",children:s.map(e=>(0,l.jsxs)("div",{className:"group flex items-center justify-between py-3 border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0",children:[(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsx)("p",{className:"text-sm font-medium",children:e.name}),(0,l.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,l.jsx)("code",{className:"text-xs text-text-muted font-mono",children:e.key}),(0,l.jsx)("button",{onClick:()=>L(e.key,e.id),className:"p-1 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary opacity-0 group-hover:opacity-100 transition-all",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:U===e.id?"check":"content_copy"})})]}),(0,l.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Created ",new Date(e.createdAt).toLocaleDateString()]})]}),(0,l.jsx)("button",{onClick:()=>B(e.id),className:"p-2 hover:bg-red-500/10 rounded text-red-500 opacity-0 group-hover:opacity-100 transition-all",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"})})]},e.id))})]}),(0,l.jsx)(n.aF,{isOpen:E,title:"Setup Cloudflare Worker",onClose:()=>{P(!1),W(null)},children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-3",children:(0,l.jsxs)("p",{className:"text-xs text-blue-700 dark:text-blue-300",children:[(0,l.jsx)("code",{className:"font-semibold",children:"https://9router.com"})," is a pre-configured worker ready to use. You can also deploy your own."]})}),(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-sm font-medium mb-2",children:"Worker URL"}),(0,l.jsx)("div",{className:"flex gap-2",children:(0,l.jsx)(n.pd,{value:k,onChange:e=>v(e.target.value),placeholder:"https://9router.your-subdomain.workers.dev",className:"flex-1 font-mono text-sm"})}),(0,l.jsxs)("p",{className:"text-xs text-text-muted mt-2",children:["Deploy your own worker from ",(0,l.jsx)("code",{className:"text-xs bg-sidebar px-1 py-0.5 rounded",children:"app/cloud/"})," directory."," ",(0,l.jsx)("a",{href:"https://github.com/decolua/9router/tree/main/app/cloud",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"Setup guide →"})]})]}),A&&(0,l.jsx)("div",{className:`p-2 rounded text-sm ${"success"===A.type?"bg-green-500/10 text-green-600 dark:text-green-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:A.message}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:Z,fullWidth:!0,disabled:N||!k.trim()||k.trim().replace(/\/v1\/?$/,"").replace(/\/+$/,"")===f,children:N?"Saving...":"Save"}),(0,l.jsx)(n.$n,{onClick:H,variant:"secondary",fullWidth:!0,disabled:O||!f,icon:"check_circle",children:O?"Checking...":"Check"})]})]})}),(0,l.jsx)(n.aF,{isOpen:C,title:"Enable Cloud Proxy",onClose:()=>S(!1),children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-4",children:[(0,l.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200 font-medium mb-2",children:"What you will get"}),(0,l.jsxs)("ul",{className:"text-sm text-blue-700 dark:text-blue-300 space-y-1",children:[(0,l.jsx)("li",{children:"• Access your API from anywhere in the world"}),(0,l.jsx)("li",{children:"• Share endpoint with your team easily"}),(0,l.jsx)("li",{children:"• No need to open ports or configure firewall"}),(0,l.jsx)("li",{children:"• Fast global edge network"})]})]}),(0,l.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,l.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 font-medium mb-1",children:"Note"}),(0,l.jsxs)("ul",{className:"text-sm text-yellow-700 dark:text-yellow-300 space-y-1",children:[(0,l.jsx)("li",{children:"• Cloud will keep your auth session for 1 day. If not used, it will be automatically deleted."}),(0,l.jsx)("li",{children:"• Cloud is currently unstable with Claude Code OAuth in some cases."})]})]}),O&&(0,l.jsxs)("div",{className:"flex items-center gap-3 p-3 bg-primary/10 border border-primary/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),(0,l.jsx)("div",{className:"flex-1",children:(0,l.jsxs)("p",{className:"text-sm font-medium text-primary",children:["syncing"===I&&"Syncing data to cloud...","verifying"===I&&"Verifying connection..."]})})]}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:Q,fullWidth:!0,disabled:O,children:O?(0,l.jsxs)("span",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"syncing"===I?"Syncing...":"Verifying..."]}):"Enable Cloud"}),(0,l.jsx)(n.$n,{onClick:()=>S(!1),variant:"ghost",fullWidth:!0,disabled:O,children:"Cancel"})]})]})}),(0,l.jsx)(n.aF,{isOpen:x,title:"Create API Key",onClose:()=>{m(!1),h("")},children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)(n.pd,{label:"Key Name",value:u,onChange:e=>h(e.target.value),placeholder:"Production Key"}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:Y,fullWidth:!0,disabled:!u.trim(),children:"Create"}),(0,l.jsx)(n.$n,{onClick:()=>{m(!1),h("")},variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}),(0,l.jsx)(n.aF,{isOpen:!!y,title:"API Key Created",onClose:()=>p(null),children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,l.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 mb-2 font-medium",children:"Save this key now!"}),(0,l.jsx)("p",{className:"text-sm text-yellow-700 dark:text-yellow-300",children:"This is the only time you will see this key. Store it securely."})]}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.pd,{value:y||"",readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,l.jsx)(n.$n,{variant:"secondary",icon:"created_key"===U?"check":"content_copy",onClick:()=>L(y,"created_key"),children:"created_key"===U?"Copied!":"Copy"})]}),(0,l.jsx)(n.$n,{onClick:()=>p(null),fullWidth:!0,children:"Done"})]})}),(0,l.jsx)(n.aF,{isOpen:$,title:"Disable Cloud Proxy",onClose:()=>!O&&_(!1),children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4",children:(0,l.jsxs)("div",{className:"flex items-start gap-3",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-red-600 dark:text-red-400",children:"warning"}),(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-sm text-red-800 dark:text-red-200 font-medium mb-1",children:"Warning"}),(0,l.jsx)("p",{className:"text-sm text-red-700 dark:text-red-300",children:"All auth sessions will be deleted from cloud."})]})]})}),O&&(0,l.jsxs)("div",{className:"flex items-center gap-3 p-3 bg-primary/10 border border-primary/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),(0,l.jsx)("div",{className:"flex-1",children:(0,l.jsxs)("p",{className:"text-sm font-medium text-primary",children:["syncing"===I&&"Syncing latest data...","disabling"===I&&"Disabling cloud..."]})})]}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Are you sure you want to disable cloud proxy?"}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:V,fullWidth:!0,disabled:O,className:"bg-red-500! hover:bg-red-600! text-white!",children:O?(0,l.jsxs)("span",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"syncing"===I?"Syncing...":"Disabling..."]}):"Disable Cloud"}),(0,l.jsx)(n.$n,{onClick:()=>_(!1),variant:"ghost",fullWidth:!0,disabled:O,children:"Cancel"})]})]})})]})}x.propTypes={machineId:i().string.isRequired}}}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1393],{3774:(e,s,t)=>{Promise.resolve().then(t.bind(t,5907))},5907:(e,s,t)=>{"use strict";t.d(s,{default:()=>x});var l=t(5155),r=t(2115),a=t(4051),i=t.n(a),n=t(5497),d=t(1059);let o="https://9router.com",c=15e3;function x({machineId:e}){let[s,t]=(0,r.useState)([]),[a,i]=(0,r.useState)(!0),[x,m]=(0,r.useState)(!1),[u,h]=(0,r.useState)(""),[y,p]=(0,r.useState)(null),[g,b]=(0,r.useState)(!1),[f,j]=(0,r.useState)(o),[k,v]=(0,r.useState)(o),[N,w]=(0,r.useState)(!1),[C,S]=(0,r.useState)(!1),[$,_]=(0,r.useState)(!1),[E,P]=(0,r.useState)(!1),[A,W]=(0,r.useState)(null),[O,D]=(0,r.useState)(!1),[T,F]=(0,r.useState)(null),[I,K]=(0,r.useState)(""),{copied:U,copy:L}=(0,d.C)();(0,r.useEffect)(()=>{J(),q()},[]);let R=async(e,s=c)=>{let t=new AbortController,l=setTimeout(()=>t.abort(),s);try{let s=await fetch("/api/sync/cloud",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e}),signal:t.signal}),l=await s.json().catch(()=>({}));return{ok:s.ok,status:s.status,data:l}}catch(e){if(e?.name==="AbortError")return{ok:!1,status:408,data:{error:"Cloud request timeout"}};return{ok:!1,status:500,data:{error:e.message||"Cloud request failed"}}}finally{clearTimeout(l)}},q=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let s=await e.json();b(s.cloudEnabled||!1);let t=s.cloudUrl||o;j(t),v(t)}}catch(e){console.log("Error loading cloud settings:",e)}},J=async()=>{try{let e=await fetch("/api/keys"),s=await e.json();e.ok&&t(s.keys||[])}catch(e){console.log("Error fetching data:",e)}finally{i(!1)}},z=e=>{e?S(!0):_(!0)},Q=async()=>{D(!0),K("syncing");try{let{ok:e,data:s}=await R("enable");e?(K("verifying"),s.verified?(b(!0),F({type:"success",message:"Cloud Proxy connected and verified!"})):(b(!0),F({type:"warning",message:s.verifyError||"Connected but verification failed"})),S(!1),s.createdKey&&await J()):F({type:"error",message:s.error||"Failed to enable cloud"})}catch(e){F({type:"error",message:e.message})}finally{D(!1),K("")}},V=async()=>{D(!0),K("syncing");try{await R("sync"),K("disabling");let{ok:e,data:s}=await R("disable");e?(b(!1),F({type:"success",message:"Cloud disabled"}),_(!1)):F({type:"error",message:s.error||"Failed to disable cloud"})}catch(e){console.log("Error disabling cloud:",e),F({type:"error",message:"Failed to disable cloud"})}finally{D(!1),K("")}},Z=async()=>{let e=k.trim().replace(/\/v1\/?$/,"").replace(/\/+$/,"");if(e){w(!0),W(null);try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({cloudUrl:e})})).ok?(j(e),v(e),W({type:"success",message:"Worker URL saved"})):W({type:"error",message:"Failed to save Worker URL"})}catch(e){W({type:"error",message:e.message})}finally{w(!1)}}},H=async()=>{if(f){D(!0),W(null);try{let{ok:e,data:s}=await R("check",8e3);e?W({type:"success",message:s.message||"Worker is running"}):W({type:"error",message:s.error||"Check failed"})}catch{W({type:"error",message:"Cannot reach worker"})}finally{D(!1)}}},Y=async()=>{if(u.trim())try{let e=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u})}),s=await e.json();e.ok&&(p(s.key),await J(),h(""),m(!1))}catch(e){console.log("Error creating key:",e)}},B=async e=>{if(confirm("Delete this API key?"))try{(await fetch(`/api/keys/${e}`,{method:"DELETE"})).ok&&t(s.filter(s=>s.id!==e))}catch(e){console.log("Error deleting key:",e)}},[G,M]=(0,r.useState)("/v1"),X=f?`${f}/v1`:"";if((0,r.useEffect)(()=>{M(`${window.location.origin}/v1`)},[]),a)return(0,l.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{})]});let ee=g?X:G;return(0,l.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,l.jsxs)(n.Zp,{children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-lg font-semibold",children:"API Endpoint"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:g?"Using Cloud Proxy":"Using Local Server"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)(n.$n,{size:"sm",variant:"secondary",icon:"settings",onClick:()=>P(!0),children:"Setup Cloudflare"}),g?(0,l.jsx)(n.$n,{size:"sm",variant:"secondary",icon:"cloud_off",onClick:()=>z(!1),disabled:O,className:"bg-red-500/10! text-red-500! hover:bg-red-500/20! border-red-500/30!",children:"Disable Cloud"}):(0,l.jsx)(n.$n,{variant:"primary",icon:"cloud_upload",onClick:()=>z(!0),disabled:O||!f,className:"bg-linear-to-r from-primary to-blue-500 hover:from-primary-hover hover:to-blue-600",children:"Enable Cloud"})]})]}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.pd,{value:ee,readOnly:!0,className:`flex-1 font-mono text-sm ${g?"animate-border-glow":""}`}),(0,l.jsx)(n.$n,{variant:"secondary",icon:"endpoint_url"===U?"check":"content_copy",onClick:()=>L(ee,"endpoint_url"),children:"endpoint_url"===U?"Copied!":"Copy"})]}),T&&(0,l.jsx)("div",{className:`mt-3 p-2 rounded text-sm ${"success"===T.type?"bg-green-500/10 text-green-600 dark:text-green-400":"warning"===T.type?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:T.message})]}),(0,l.jsxs)(n.Zp,{children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,l.jsx)("h2",{className:"text-lg font-semibold",children:"API Keys"}),(0,l.jsx)(n.$n,{icon:"add",onClick:()=>m(!0),children:"Create Key"})]}),0===s.length?(0,l.jsxs)("div",{className:"text-center py-12",children:[(0,l.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"vpn_key"})}),(0,l.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No API keys yet"}),(0,l.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create your first API key to get started"}),(0,l.jsx)(n.$n,{icon:"add",onClick:()=>m(!0),children:"Create Key"})]}):(0,l.jsx)("div",{className:"flex flex-col",children:s.map(e=>(0,l.jsxs)("div",{className:"group flex items-center justify-between py-3 border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0",children:[(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsx)("p",{className:"text-sm font-medium",children:e.name}),(0,l.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,l.jsx)("code",{className:"text-xs text-text-muted font-mono",children:e.key}),(0,l.jsx)("button",{onClick:()=>L(e.key,e.id),className:"p-1 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary opacity-0 group-hover:opacity-100 transition-all",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:U===e.id?"check":"content_copy"})})]}),(0,l.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Created ",new Date(e.createdAt).toLocaleDateString()]})]}),(0,l.jsx)("button",{onClick:()=>B(e.id),className:"p-2 hover:bg-red-500/10 rounded text-red-500 opacity-0 group-hover:opacity-100 transition-all",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"})})]},e.id))})]}),(0,l.jsx)(n.aF,{isOpen:E,title:"Setup Cloudflare Worker",onClose:()=>{P(!1),W(null)},children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-3",children:(0,l.jsxs)("p",{className:"text-xs text-blue-700 dark:text-blue-300",children:[(0,l.jsx)("code",{className:"font-semibold",children:"https://9router.com"})," is a pre-configured worker ready to use. You can also deploy your own."]})}),(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-sm font-medium mb-2",children:"Worker URL"}),(0,l.jsx)("div",{className:"flex gap-2",children:(0,l.jsx)(n.pd,{value:k,onChange:e=>v(e.target.value),placeholder:"https://9router.your-subdomain.workers.dev",className:"flex-1 font-mono text-sm"})}),(0,l.jsxs)("p",{className:"text-xs text-text-muted mt-2",children:["Deploy your own worker from ",(0,l.jsx)("code",{className:"text-xs bg-sidebar px-1 py-0.5 rounded",children:"app/cloud/"})," directory."," ",(0,l.jsx)("a",{href:"https://github.com/decolua/9router/tree/main/app/cloud",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"Setup guide →"})]})]}),A&&(0,l.jsx)("div",{className:`p-2 rounded text-sm ${"success"===A.type?"bg-green-500/10 text-green-600 dark:text-green-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:A.message}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:Z,fullWidth:!0,disabled:N||!k.trim()||k.trim().replace(/\/v1\/?$/,"").replace(/\/+$/,"")===f,children:N?"Saving...":"Save"}),(0,l.jsx)(n.$n,{onClick:H,variant:"secondary",fullWidth:!0,disabled:O||!f,icon:"check_circle",children:O?"Checking...":"Check"})]})]})}),(0,l.jsx)(n.aF,{isOpen:C,title:"Enable Cloud Proxy",onClose:()=>S(!1),children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-4",children:[(0,l.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200 font-medium mb-2",children:"What you will get"}),(0,l.jsxs)("ul",{className:"text-sm text-blue-700 dark:text-blue-300 space-y-1",children:[(0,l.jsx)("li",{children:"• Access your API from anywhere in the world"}),(0,l.jsx)("li",{children:"• Share endpoint with your team easily"}),(0,l.jsx)("li",{children:"• No need to open ports or configure firewall"}),(0,l.jsx)("li",{children:"• Fast global edge network"})]})]}),(0,l.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,l.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 font-medium mb-1",children:"Note"}),(0,l.jsxs)("ul",{className:"text-sm text-yellow-700 dark:text-yellow-300 space-y-1",children:[(0,l.jsx)("li",{children:"• Cloud will keep your auth session for 1 day. If not used, it will be automatically deleted."}),(0,l.jsx)("li",{children:"• Cloud is currently unstable with Claude Code OAuth in some cases."})]})]}),O&&(0,l.jsxs)("div",{className:"flex items-center gap-3 p-3 bg-primary/10 border border-primary/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),(0,l.jsx)("div",{className:"flex-1",children:(0,l.jsxs)("p",{className:"text-sm font-medium text-primary",children:["syncing"===I&&"Syncing data to cloud...","verifying"===I&&"Verifying connection..."]})})]}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:Q,fullWidth:!0,disabled:O,children:O?(0,l.jsxs)("span",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"syncing"===I?"Syncing...":"Verifying..."]}):"Enable Cloud"}),(0,l.jsx)(n.$n,{onClick:()=>S(!1),variant:"ghost",fullWidth:!0,disabled:O,children:"Cancel"})]})]})}),(0,l.jsx)(n.aF,{isOpen:x,title:"Create API Key",onClose:()=>{m(!1),h("")},children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)(n.pd,{label:"Key Name",value:u,onChange:e=>h(e.target.value),placeholder:"Production Key"}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:Y,fullWidth:!0,disabled:!u.trim(),children:"Create"}),(0,l.jsx)(n.$n,{onClick:()=>{m(!1),h("")},variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}),(0,l.jsx)(n.aF,{isOpen:!!y,title:"API Key Created",onClose:()=>p(null),children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,l.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 mb-2 font-medium",children:"Save this key now!"}),(0,l.jsx)("p",{className:"text-sm text-yellow-700 dark:text-yellow-300",children:"This is the only time you will see this key. Store it securely."})]}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.pd,{value:y||"",readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,l.jsx)(n.$n,{variant:"secondary",icon:"created_key"===U?"check":"content_copy",onClick:()=>L(y,"created_key"),children:"created_key"===U?"Copied!":"Copy"})]}),(0,l.jsx)(n.$n,{onClick:()=>p(null),fullWidth:!0,children:"Done"})]})}),(0,l.jsx)(n.aF,{isOpen:$,title:"Disable Cloud Proxy",onClose:()=>!O&&_(!1),children:(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4",children:(0,l.jsxs)("div",{className:"flex items-start gap-3",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-red-600 dark:text-red-400",children:"warning"}),(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-sm text-red-800 dark:text-red-200 font-medium mb-1",children:"Warning"}),(0,l.jsx)("p",{className:"text-sm text-red-700 dark:text-red-300",children:"All auth sessions will be deleted from cloud."})]})]})}),O&&(0,l.jsxs)("div",{className:"flex items-center gap-3 p-3 bg-primary/10 border border-primary/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),(0,l.jsx)("div",{className:"flex-1",children:(0,l.jsxs)("p",{className:"text-sm font-medium text-primary",children:["syncing"===I&&"Syncing latest data...","disabling"===I&&"Disabling cloud..."]})})]}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Are you sure you want to disable cloud proxy?"}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(n.$n,{onClick:V,fullWidth:!0,disabled:O,className:"bg-red-500! hover:bg-red-600! text-white!",children:O?(0,l.jsxs)("span",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"syncing"===I?"Syncing...":"Disabling..."]}):"Disable Cloud"}),(0,l.jsx)(n.$n,{onClick:()=>_(!1),variant:"ghost",fullWidth:!0,disabled:O,children:"Cancel"})]})]})})]})}x.propTypes={machineId:i().string.isRequired}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3624],{91:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={formatUrl:function(){return u},formatWithValidation:function(){return l},urlObjectKeys:function(){return s}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let a=r(6388)._(r(3774)),i=/https?|ftp|gopher|file/;function u(e){let{auth:t,hostname:r}=e,n=e.protocol||"",o=e.pathname||"",u=e.hash||"",s=e.query||"",l=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?l=t+e.host:r&&(l=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(l+=":"+e.port)),s&&"object"==typeof s&&(s=String(a.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||i.test(n))&&!1!==l?(l="//"+(l||""),o&&"/"!==o[0]&&(o="/"+o)):l||(l=""),u&&"#"!==u[0]&&(u="#"+u),c&&"?"!==c[0]&&(c="?"+c),o=o.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${l}${o}${c}${u}`}let s=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function l(e){return u(e)}},857:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return b},NormalizeError:function(){return m},PageNotFoundError:function(){return v},SP:function(){return h},ST:function(){return g},WEB_VITALS:function(){return o},execOnce:function(){return a},getDisplayName:function(){return c},getLocationOrigin:function(){return s},getURL:function(){return l},isAbsoluteUrl:function(){return u},isResSent:function(){return f},loadGetInitialProps:function(){return d},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return P}};for(var n in r)Object.defineProperty(t,n,{enumerable:!0,get:r[n]});let o=["CLS","FCP","FID","INP","LCP","TTFB"];function a(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let i=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,u=e=>i.test(e);function s(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function l(){let{href:e}=window.location,t=s();return e.substring(t.length)}function c(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function d(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await d(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${c(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let h="u">typeof performance,g=h&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class m extends Error{}class v extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class b extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function P(e){return JSON.stringify({message:e.message,stack:e.stack})}},1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>i});var n=r(2115);let o=e=>{let t,r=new Set,n=(e,n)=>{let o="function"==typeof e?e(t):e;if(!Object.is(o,t)){let e=t;t=(null!=n?n:"object"!=typeof o||null===o)?o:Object.assign({},t,o),r.forEach(r=>r(t,e))}},o=()=>t,a={setState:n,getState:o,getInitialState:()=>i,subscribe:e=>(r.add(e),()=>r.delete(e))},i=t=e(n,o,a);return a},a=e=>{let t=e?o(e):o,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},i=e=>e?a(e):a},2114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},3774:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={assign:function(){return u},searchParamsToUrlQuery:function(){return o},urlQueryToSearchParams:function(){return i}};for(var n in r)Object.defineProperty(t,n,{enumerable:!0,get:r[n]});function o(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function a(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function i(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,a(e));else t.set(r,a(n));return t}function u(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},4051:(e,t,r)=>{e.exports=r(4701)()},4701:(e,t,r)=>{"use strict";var n=r(2114);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,a,i){if(i!==n){var u=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},8500:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={default:function(){return m},useLinkStatus:function(){return b}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let a=r(6388),i=r(5155),u=a._(r(2115)),s=r(91),l=r(2909),c=r(1172),f=r(857),p=r(127);r(7284);let d=r(4972),h=r(9470),g=r(7565);function y(e){return"string"==typeof e?e:(0,s.formatUrl)(e)}function m(e){var t;let n,o,a,[s,m]=(0,u.useOptimistic)(d.IDLE_LINK_STATUS),b=(0,u.useRef)(null),{href:S,as:P,children:E,prefetch:O=null,passHref:_,replace:T,shallow:C,scroll:I,onClick:j,onMouseEnter:w,onTouchStart:N,legacyBehavior:R=!1,onNavigate:k,ref:x,unstable_dynamicOnHover:L,...U}=e;n=E,R&&("string"==typeof n||"number"==typeof n)&&(n=(0,i.jsx)("a",{children:n}));let $=u.default.useContext(l.AppRouterContext),A=!1!==O,M=!1!==O?null===(t=O)||"auto"===t?g.FetchStrategy.PPR:g.FetchStrategy.Full:g.FetchStrategy.PPR,{href:F,as:D}=u.default.useMemo(()=>{let e=y(S);return{href:e,as:P?y(P):e}},[S,P]);if(R){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=u.default.Children.only(n)}let z=R?o&&"object"==typeof o&&o.ref:x,B=u.default.useCallback(e=>(null!==$&&(b.current=(0,d.mountLinkInstance)(e,F,$,M,A,m)),()=>{b.current&&((0,d.unmountLinkForCurrentNavigation)(b.current),b.current=null),(0,d.unmountPrefetchableInstance)(e)}),[A,F,$,M,m]),K={ref:(0,c.useMergedRef)(B,z),onClick(e){R||"function"!=typeof j||j(e),R&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(e),!$||e.defaultPrevented||function(e,t,n,o,a,i,s){{let l,{nodeName:c}=e.currentTarget;if("A"===c.toUpperCase()&&((l=e.currentTarget.getAttribute("target"))&&"_self"!==l||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which)||e.currentTarget.hasAttribute("download"))return;if(!(0,h.isLocalURL)(t)){a&&(e.preventDefault(),location.replace(t));return}if(e.preventDefault(),s){let e=!1;if(s({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=r(156);u.default.startTransition(()=>{f(n||t,a?"replace":"push",i??!0,o.current)})}}(e,F,D,b,T,I,k)},onMouseEnter(e){R||"function"!=typeof w||w(e),R&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),$&&A&&(0,d.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){R||"function"!=typeof N||N(e),R&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),$&&A&&(0,d.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,f.isAbsoluteUrl)(D)?K.href=D:R&&!_&&("a"!==o.type||"href"in o.props)||(K.href=(0,p.addBasePath)(D)),a=R?u.default.cloneElement(o,K):(0,i.jsx)("a",{...U,...K,children:n}),(0,i.jsx)(v.Provider,{value:s,children:a})}r(9842);let v=(0,u.createContext)(d.IDLE_LINK_STATUS),b=()=>(0,u.useContext)(v);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9311:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>o});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},o=(e,t)=>(r,o,a)=>{let i,u={storage:function(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;let n=e=>null===e?null:JSON.parse(e,void 0),o=null!=(t=r.getItem(e))?t:null;return o instanceof Promise?o.then(n):n(o)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},s=!1,l=0,c=new Set,f=new Set,p=u.storage;if(!p)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${u.name}', the given storage is currently unavailable.`),r(...e)},o,a);let d=()=>{let e=u.partialize({...o()});return p.setItem(u.name,{state:e,version:u.version})},h=a.setState;a.setState=(e,t)=>(h(e,t),d());let g=e((...e)=>(r(...e),d()),o,a);a.getInitialState=()=>g;let y=()=>{var e,t;if(!p)return;let a=++l;s=!1,c.forEach(e=>{var t;return e(null!=(t=o())?t:g)});let h=(null==(t=u.onRehydrateStorage)?void 0:t.call(u,null!=(e=o())?e:g))||void 0;return n(p.getItem.bind(p))(u.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===u.version)return[!1,e.state];else{if(u.migrate){let t=u.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(a!==l)return;let[n,s]=e;if(r(i=u.merge(s,null!=(t=o())?t:g),!0),n)return d()}).then(()=>{a===l&&(null==h||h(i,void 0),i=o(),s=!0,f.forEach(e=>e(i)))}).catch(e=>{a===l&&(null==h||h(void 0,e))})};return a.persist={setOptions:e=>{u={...u,...e},e.storage&&(p=e.storage)},clearStorage:()=>{null==p||p.removeItem(u.name)},getOptions:()=>u,rehydrate:()=>y(),hasHydrated:()=>s,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(f.add(e),()=>{f.delete(e)})},u.skipHydration||y(),i||g}},9470:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isLocalURL",{enumerable:!0,get:function(){return a}});let n=r(857),o=r(8512);function a(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,o.hasBasePath)(r.pathname)}catch(e){return!1}}},9842:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"errorOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}}}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3624],{91:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={formatUrl:function(){return u},formatWithValidation:function(){return l},urlObjectKeys:function(){return s}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let a=r(6388)._(r(1393)),i=/https?|ftp|gopher|file/;function u(e){let{auth:t,hostname:r}=e,n=e.protocol||"",o=e.pathname||"",u=e.hash||"",s=e.query||"",l=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?l=t+e.host:r&&(l=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(l+=":"+e.port)),s&&"object"==typeof s&&(s=String(a.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||i.test(n))&&!1!==l?(l="//"+(l||""),o&&"/"!==o[0]&&(o="/"+o)):l||(l=""),u&&"#"!==u[0]&&(u="#"+u),c&&"?"!==c[0]&&(c="?"+c),o=o.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${l}${o}${c}${u}`}let s=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function l(e){return u(e)}},857:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return b},NormalizeError:function(){return m},PageNotFoundError:function(){return v},SP:function(){return h},ST:function(){return g},WEB_VITALS:function(){return o},execOnce:function(){return a},getDisplayName:function(){return c},getLocationOrigin:function(){return s},getURL:function(){return l},isAbsoluteUrl:function(){return u},isResSent:function(){return f},loadGetInitialProps:function(){return d},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return P}};for(var n in r)Object.defineProperty(t,n,{enumerable:!0,get:r[n]});let o=["CLS","FCP","FID","INP","LCP","TTFB"];function a(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let i=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,u=e=>i.test(e);function s(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function l(){let{href:e}=window.location,t=s();return e.substring(t.length)}function c(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function d(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await d(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${c(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let h="u">typeof performance,g=h&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class m extends Error{}class v extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class b extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function P(e){return JSON.stringify({message:e.message,stack:e.stack})}},1393:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={assign:function(){return u},searchParamsToUrlQuery:function(){return o},urlQueryToSearchParams:function(){return i}};for(var n in r)Object.defineProperty(t,n,{enumerable:!0,get:r[n]});function o(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function a(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function i(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,a(e));else t.set(r,a(n));return t}function u(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>i});var n=r(2115);let o=e=>{let t,r=new Set,n=(e,n)=>{let o="function"==typeof e?e(t):e;if(!Object.is(o,t)){let e=t;t=(null!=n?n:"object"!=typeof o||null===o)?o:Object.assign({},t,o),r.forEach(r=>r(t,e))}},o=()=>t,a={setState:n,getState:o,getInitialState:()=>i,subscribe:e=>(r.add(e),()=>r.delete(e))},i=t=e(n,o,a);return a},a=e=>{let t=e?o(e):o,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},i=e=>e?a(e):a},2114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4051:(e,t,r)=>{e.exports=r(4701)()},4701:(e,t,r)=>{"use strict";var n=r(2114);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,a,i){if(i!==n){var u=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},8500:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={default:function(){return m},useLinkStatus:function(){return b}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let a=r(6388),i=r(5155),u=a._(r(2115)),s=r(91),l=r(2909),c=r(1172),f=r(857),p=r(127);r(7284);let d=r(4972),h=r(9470),g=r(7565);function y(e){return"string"==typeof e?e:(0,s.formatUrl)(e)}function m(e){var t;let n,o,a,[s,m]=(0,u.useOptimistic)(d.IDLE_LINK_STATUS),b=(0,u.useRef)(null),{href:S,as:P,children:E,prefetch:O=null,passHref:_,replace:T,shallow:C,scroll:I,onClick:j,onMouseEnter:w,onTouchStart:N,legacyBehavior:R=!1,onNavigate:k,ref:x,unstable_dynamicOnHover:L,...U}=e;n=E,R&&("string"==typeof n||"number"==typeof n)&&(n=(0,i.jsx)("a",{children:n}));let $=u.default.useContext(l.AppRouterContext),A=!1!==O,M=!1!==O?null===(t=O)||"auto"===t?g.FetchStrategy.PPR:g.FetchStrategy.Full:g.FetchStrategy.PPR,{href:F,as:D}=u.default.useMemo(()=>{let e=y(S);return{href:e,as:P?y(P):e}},[S,P]);if(R){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=u.default.Children.only(n)}let z=R?o&&"object"==typeof o&&o.ref:x,B=u.default.useCallback(e=>(null!==$&&(b.current=(0,d.mountLinkInstance)(e,F,$,M,A,m)),()=>{b.current&&((0,d.unmountLinkForCurrentNavigation)(b.current),b.current=null),(0,d.unmountPrefetchableInstance)(e)}),[A,F,$,M,m]),K={ref:(0,c.useMergedRef)(B,z),onClick(e){R||"function"!=typeof j||j(e),R&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(e),!$||e.defaultPrevented||function(e,t,n,o,a,i,s){{let l,{nodeName:c}=e.currentTarget;if("A"===c.toUpperCase()&&((l=e.currentTarget.getAttribute("target"))&&"_self"!==l||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which)||e.currentTarget.hasAttribute("download"))return;if(!(0,h.isLocalURL)(t)){a&&(e.preventDefault(),location.replace(t));return}if(e.preventDefault(),s){let e=!1;if(s({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=r(156);u.default.startTransition(()=>{f(n||t,a?"replace":"push",i??!0,o.current)})}}(e,F,D,b,T,I,k)},onMouseEnter(e){R||"function"!=typeof w||w(e),R&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),$&&A&&(0,d.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){R||"function"!=typeof N||N(e),R&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),$&&A&&(0,d.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,f.isAbsoluteUrl)(D)?K.href=D:R&&!_&&("a"!==o.type||"href"in o.props)||(K.href=(0,p.addBasePath)(D)),a=R?u.default.cloneElement(o,K):(0,i.jsx)("a",{...U,...K,children:n}),(0,i.jsx)(v.Provider,{value:s,children:a})}r(9842);let v=(0,u.createContext)(d.IDLE_LINK_STATUS),b=()=>(0,u.useContext)(v);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9311:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>o});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},o=(e,t)=>(r,o,a)=>{let i,u={storage:function(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;let n=e=>null===e?null:JSON.parse(e,void 0),o=null!=(t=r.getItem(e))?t:null;return o instanceof Promise?o.then(n):n(o)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},s=!1,l=0,c=new Set,f=new Set,p=u.storage;if(!p)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${u.name}', the given storage is currently unavailable.`),r(...e)},o,a);let d=()=>{let e=u.partialize({...o()});return p.setItem(u.name,{state:e,version:u.version})},h=a.setState;a.setState=(e,t)=>(h(e,t),d());let g=e((...e)=>(r(...e),d()),o,a);a.getInitialState=()=>g;let y=()=>{var e,t;if(!p)return;let a=++l;s=!1,c.forEach(e=>{var t;return e(null!=(t=o())?t:g)});let h=(null==(t=u.onRehydrateStorage)?void 0:t.call(u,null!=(e=o())?e:g))||void 0;return n(p.getItem.bind(p))(u.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===u.version)return[!1,e.state];else{if(u.migrate){let t=u.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(a!==l)return;let[n,s]=e;if(r(i=u.merge(s,null!=(t=o())?t:g),!0),n)return d()}).then(()=>{a===l&&(null==h||h(i,void 0),i=o(),s=!0,f.forEach(e=>e(i)))}).catch(e=>{a===l&&(null==h||h(void 0,e))})};return a.persist={setOptions:e=>{u={...u,...e},e.storage&&(p=e.storage)},clearStorage:()=>{null==p||p.removeItem(u.name)},getOptions:()=>u,rehydrate:()=>y(),hasHydrated:()=>s,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(f.add(e),()=>{f.delete(e)})},u.skipHydration||y(),i||g}},9470:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isLocalURL",{enumerable:!0,get:function(){return a}});let n=r(857),o=r(8512);function a(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,o.hasBasePath)(r.pathname)}catch(e){return!1}}},9842:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"errorOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8729],{85:(i,e,n)=>{n.d(e,{A:()=>t});var a=n(1934),o=n(9311),d=n(620);function m(i){let e=document.documentElement,n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===i?n:i)?e.classList.add("dark"):e.classList.remove("dark")}let t=(0,a.v)((0,o.Zr)((i,e)=>({theme:d.B2.defaultTheme,setTheme:e=>{i({theme:e}),m(e)},toggleTheme:()=>{let n="dark"===e().theme?"light":"dark";i({theme:n}),m(n)},initTheme:()=>{m(e().theme)}}),{name:d.B2.storageKey}))},620:(i,e,n)=>{n.d(e,{Q2:()=>a.Q2,fg:()=>a.fg,vQ:()=>o,MA:()=>a.MA,zN:()=>a.zN,B2:()=>d});var a=n(2679);n(8777);let o={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.2.
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8729],{85:(i,e,n)=>{n.d(e,{A:()=>t});var a=n(1934),o=n(9311),d=n(620);function m(i){let e=document.documentElement,n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===i?n:i)?e.classList.add("dark"):e.classList.remove("dark")}let t=(0,a.v)((0,o.Zr)((i,e)=>({theme:d.B2.defaultTheme,setTheme:e=>{i({theme:e}),m(e)},toggleTheme:()=>{let n="dark"===e().theme?"light":"dark";i({theme:n}),m(n)},initTheme:()=>{m(e().theme)}}),{name:d.B2.storageKey}))},620:(i,e,n)=>{n.d(e,{Q2:()=>a.Q2,fg:()=>a.fg,vQ:()=>o,MA:()=>a.MA,zN:()=>a.zN,B2:()=>d});var a=n(2679);n(8777);let o={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.2.78"},d={storageKey:"theme",defaultTheme:"system"}},1110:(i,e,n)=>{n.d(e,{ThemeProvider:()=>m});var a=n(5155),o=n(2115),d=n(85);function m({children:i}){let{initTheme:e}=(0,d.A)();return(0,o.useEffect)(()=>{e()},[e]),(0,a.jsx)(a.Fragment,{children:i})}},2679:(i,e,n)=>{n.d(e,{DI:()=>t,IS:()=>a,JH:()=>m,MA:()=>u,Q2:()=>r,fg:()=>d,gb:()=>c,mq:()=>l,wG:()=>s,wb:()=>p,zN:()=>o,zt:()=>g});let a={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"}},o={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"}},d={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#6366F1",textIcon:"OR",passthroughModels:!0},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM Coding (China)",icon:"code",color:"#DC2626",textIcon:"GC"},kimi:{id:"kimi",alias:"kimi",name:"Kimi Coding",icon:"psychology",color:"#1E3A8A",textIcon:"KM"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE"}},m="openai-compatible-",t="anthropic-compatible-";function l(i){return"string"==typeof i&&i.startsWith(m)}function c(i){return"string"==typeof i&&i.startsWith(t)}let r={...a,...o,...d},u={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function g(i){for(let e of Object.values(r))if(e.alias===i||e.id===i)return e;return null}function s(i){let e=r[i];return e?.alias||i}Object.values(r).reduce((i,e)=>(i[e.alias]=e.id,i),{}),Object.values(r).reduce((i,e)=>(i[e.id]=e.alias,i),{});let p=["antigravity","kiro","github"]},3097:(i,e,n)=>{n.d(e,{KC:()=>d,Xg:()=>o,vq:()=>a});let a={cc:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],cx:[{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}],gc:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}],qw:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"}],if:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.6",name:"GLM 4.6"}],ag:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-opus-4-5-thinking",name:"Claude Opus 4.5 Thinking"},{id:"claude-sonnet-4-5-thinking",name:"Claude Sonnet 4.5 Thinking"},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5"},{id:"gemini-3-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"}],gh:[{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.5",name:"Claude Opus 4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"raptor-mini",name:"Raptor Mini"}],kr:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"}],cu:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"}],openai:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"}],anthropic:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}],gemini:[{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}],openrouter:[{id:"auto",name:"Auto (Best Available)"}],glm:[{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],"glm-cn":[{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5",name:"GLM-4.5"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],kimi:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],minimax:[{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},o={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",cursor:"cu",openai:"openai",anthropic:"anthropic",gemini:"gemini",openrouter:"openrouter",glm:"glm","glm-cn":"glm-cn",kimi:"kimi",minimax:"minimax","minimax-cn":"minimax"};function d(i){return a[o[i]||i]||[]}},8777:(i,e,n)=>{n.d(e,{KC:()=>a.KC,Xg:()=>a.Xg});var a=n(3097);Object.entries(n(2679).Q2).filter(([,i])=>i.passthroughModels).map(([i])=>i),Object.entries(a.vq).flatMap(([i,e])=>e.map(e=>({provider:i,model:e.id,name:e.name})))}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099],{},_=>{_.O(0,[600,3624,8729,5497,1393,8441,3794,7358],()=>_(_.s=3774)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6337],{},_=>{_.O(0,[600,3624,8729,5497,1393,8441,3794,7358],()=>_(_.s=3774)),_N_E=_.O()}]);
|
package/app/package.json
CHANGED
package/app/src/mitm/manager.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
const { spawn } = require("child_process");
|
|
1
|
+
const { spawn, exec } = require("child_process");
|
|
2
2
|
const path = require("path");
|
|
3
3
|
const fs = require("fs");
|
|
4
4
|
const os = require("os");
|
|
5
|
-
const { addDNSEntry, removeDNSEntry } = require("./dns/dnsConfig");
|
|
5
|
+
const { addDNSEntry, removeDNSEntry, checkDNSEntry } = require("./dns/dnsConfig");
|
|
6
|
+
|
|
7
|
+
const IS_WIN = process.platform === "win32";
|
|
6
8
|
const { generateCert } = require("./cert/generate");
|
|
7
9
|
const { installCert } = require("./cert/install");
|
|
8
10
|
|
|
@@ -26,6 +28,16 @@ function isProcessAlive(pid) {
|
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
30
|
|
|
31
|
+
// Cross-platform process kill
|
|
32
|
+
function killProcess(pid, force = false) {
|
|
33
|
+
if (IS_WIN) {
|
|
34
|
+
const flag = force ? "/F " : "";
|
|
35
|
+
exec(`taskkill ${flag}/PID ${pid}`, () => {});
|
|
36
|
+
} else {
|
|
37
|
+
process.kill(pid, force ? "SIGKILL" : "SIGTERM");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
29
41
|
/**
|
|
30
42
|
* Get MITM status
|
|
31
43
|
*/
|
|
@@ -51,14 +63,8 @@ async function getMitmStatus() {
|
|
|
51
63
|
}
|
|
52
64
|
}
|
|
53
65
|
|
|
54
|
-
// Check DNS configuration
|
|
55
|
-
|
|
56
|
-
try {
|
|
57
|
-
const hostsContent = fs.readFileSync("/etc/hosts", "utf-8");
|
|
58
|
-
dnsConfigured = hostsContent.includes("daily-cloudcode-pa.googleapis.com");
|
|
59
|
-
} catch {
|
|
60
|
-
// Ignore
|
|
61
|
-
}
|
|
66
|
+
// Check DNS configuration (cross-platform via dnsConfig)
|
|
67
|
+
const dnsConfigured = checkDNSEntry();
|
|
62
68
|
|
|
63
69
|
// Check cert
|
|
64
70
|
const certDir = path.join(os.homedir(), ".9router", "mitm");
|
|
@@ -92,18 +98,32 @@ async function startMitm(apiKey, sudoPassword) {
|
|
|
92
98
|
console.log("Adding DNS entry...");
|
|
93
99
|
await addDNSEntry(sudoPassword);
|
|
94
100
|
|
|
95
|
-
// 4. Start MITM server
|
|
101
|
+
// 4. Start MITM server (port 443 requires elevated privileges)
|
|
96
102
|
console.log("Starting MITM server...");
|
|
97
103
|
const serverPath = path.join(process.cwd(), "src/mitm/server.js");
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
|
|
105
|
+
if (IS_WIN) {
|
|
106
|
+
// Windows: spawn via powershell elevated to bind port 443
|
|
107
|
+
const nodePath = process.execPath;
|
|
108
|
+
const envArgs = `$env:ROUTER_API_KEY='${apiKey}'; $env:NODE_ENV='production'; & '${nodePath}' '${serverPath}'`;
|
|
109
|
+
serverProcess = spawn("powershell", [
|
|
110
|
+
"-Command",
|
|
111
|
+
`Start-Process powershell -ArgumentList '-NoProfile','-Command','${envArgs.replace(/'/g, "''")}' -Verb RunAs -PassThru`
|
|
112
|
+
], {
|
|
113
|
+
detached: false,
|
|
114
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
serverProcess = spawn("node", [serverPath], {
|
|
118
|
+
env: {
|
|
119
|
+
...process.env,
|
|
120
|
+
ROUTER_API_KEY: apiKey,
|
|
121
|
+
NODE_ENV: "production"
|
|
122
|
+
},
|
|
123
|
+
detached: false,
|
|
124
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
125
|
+
});
|
|
126
|
+
}
|
|
107
127
|
|
|
108
128
|
serverPid = serverProcess.pid;
|
|
109
129
|
|
|
@@ -173,10 +193,10 @@ async function stopMitm(sudoPassword) {
|
|
|
173
193
|
const proc = serverProcess;
|
|
174
194
|
if (proc && !proc.killed) {
|
|
175
195
|
console.log("Stopping MITM server...");
|
|
176
|
-
proc.
|
|
196
|
+
killProcess(proc.pid, false);
|
|
177
197
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
178
|
-
if (
|
|
179
|
-
proc.
|
|
198
|
+
if (isProcessAlive(proc.pid)) {
|
|
199
|
+
killProcess(proc.pid, true);
|
|
180
200
|
}
|
|
181
201
|
serverProcess = null;
|
|
182
202
|
serverPid = null;
|
|
@@ -187,10 +207,10 @@ async function stopMitm(sudoPassword) {
|
|
|
187
207
|
const savedPid = parseInt(fs.readFileSync(PID_FILE, "utf-8").trim(), 10);
|
|
188
208
|
if (savedPid && isProcessAlive(savedPid)) {
|
|
189
209
|
console.log(`Killing MITM server (PID: ${savedPid})...`);
|
|
190
|
-
|
|
210
|
+
killProcess(savedPid, false);
|
|
191
211
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
192
212
|
if (isProcessAlive(savedPid)) {
|
|
193
|
-
|
|
213
|
+
killProcess(savedPid, true);
|
|
194
214
|
}
|
|
195
215
|
}
|
|
196
216
|
}
|
package/app/src/mitm/server.js
CHANGED
|
@@ -210,5 +210,10 @@ server.on("error", (error) => {
|
|
|
210
210
|
process.exit(1);
|
|
211
211
|
});
|
|
212
212
|
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
// Graceful shutdown (SIGBREAK for Windows, SIGTERM/SIGINT for Unix)
|
|
214
|
+
const shutdown = () => { server.close(() => process.exit(0)); };
|
|
215
|
+
process.on("SIGTERM", shutdown);
|
|
216
|
+
process.on("SIGINT", shutdown);
|
|
217
|
+
if (process.platform === "win32") {
|
|
218
|
+
process.on("SIGBREAK", shutdown);
|
|
219
|
+
}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099],{},_=>{_.O(0,[600,3624,8729,5497,1393,8441,3794,7358],()=>_(_.s=1393)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6337],{},_=>{_.O(0,[600,3624,8729,5497,1393,8441,3794,7358],()=>_(_.s=1393)),_N_E=_.O()}]);
|
|
File without changes
|
|
File without changes
|