9router 0.3.5 → 0.3.6
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 +27 -27
- 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_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/[id]/test-models/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/test-batch/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/database/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/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/tunnel/disable/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tunnel/status/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/chart/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/usage/stream/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/embeddings/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_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_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/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +27 -27
- package/app/.next/server/chunks/6186.js +15 -10
- package/app/.next/server/chunks/8694.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/{8729-951e89428876ccdd.js → 8729-341f5eb6223fedbb.js} +1 -1
- package/app/package.json +1 -1
- package/app/src/mitm/manager.js +60 -28
- package/app/src/mitm/server.js +1 -1
- package/cli.js +3 -4
- package/package.json +1 -1
- package/src/cli/tray/icon.ico +0 -0
- package/src/cli/tray/icon.png +0 -0
- package/src/cli/tray/tray.js +5 -3
- /package/app/.next/static/{hy44YEjBRcDsk_ehZG7mz → 0Lp-BbOX46czOm0uiIhuq}/_buildManifest.js +0 -0
- /package/app/.next/static/{hy44YEjBRcDsk_ehZG7mz → 0Lp-BbOX46czOm0uiIhuq}/_ssgManifest.js +0 -0
package/app/src/mitm/manager.js
CHANGED
|
@@ -12,6 +12,8 @@ const { generateCert } = require("./cert/generate");
|
|
|
12
12
|
const { installCert } = require("./cert/install");
|
|
13
13
|
|
|
14
14
|
const MITM_PORT = 443;
|
|
15
|
+
// On Windows, node listens on HIGH_PORT and netsh portproxy forwards 443 → HIGH_PORT
|
|
16
|
+
const WIN_NODE_PORT = 8443;
|
|
15
17
|
const PID_FILE = path.join(os.homedir(), ".9router", "mitm", ".mitm.pid");
|
|
16
18
|
|
|
17
19
|
// Resolve server.js path robustly:
|
|
@@ -276,11 +278,12 @@ async function killLeftoverMitm(sudoPassword) {
|
|
|
276
278
|
* Returns { ok, pid } on success, null on timeout.
|
|
277
279
|
*/
|
|
278
280
|
function pollMitmHealth(timeoutMs) {
|
|
281
|
+
const healthPort = IS_WIN ? WIN_NODE_PORT : MITM_PORT;
|
|
279
282
|
return new Promise((resolve) => {
|
|
280
283
|
const deadline = Date.now() + timeoutMs;
|
|
281
284
|
const check = () => {
|
|
282
285
|
const req = https.request(
|
|
283
|
-
{ hostname: "127.0.0.1", port:
|
|
286
|
+
{ hostname: "127.0.0.1", port: healthPort, path: "/_mitm_health", method: "GET", rejectUnauthorized: false },
|
|
284
287
|
(res) => {
|
|
285
288
|
let body = "";
|
|
286
289
|
res.on("data", (d) => { body += d; });
|
|
@@ -407,49 +410,60 @@ async function startMitm(apiKey, sudoPassword) {
|
|
|
407
410
|
console.log("Starting MITM server...");
|
|
408
411
|
|
|
409
412
|
if (IS_WIN) {
|
|
410
|
-
// Windows: single UAC prompt does cert install + DNS + server start all at once
|
|
411
413
|
const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
|
|
412
414
|
const TARGET_HOSTS_WIN = ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"];
|
|
413
|
-
|
|
414
|
-
// Escape paths for PowerShell single-quoted strings
|
|
415
415
|
const esc = (s) => s.replace(/'/g, "''");
|
|
416
|
-
const nodePsPath = esc(process.execPath);
|
|
417
|
-
const serverPsPath = esc(SERVER_PATH);
|
|
418
416
|
const certPsPath = esc(certPath);
|
|
419
417
|
const hostsPsPath = esc(hostsFile);
|
|
420
418
|
|
|
421
|
-
// Build DNS add lines for each host
|
|
422
419
|
const dnsAddLines = TARGET_HOSTS_WIN.map(h =>
|
|
423
420
|
`if (-not (Select-String -Path '${hostsPsPath}' -Pattern '${h}' -Quiet)) { Add-Content -Path '${hostsPsPath}' -Value "127.0.0.1 ${h}" }`
|
|
424
421
|
).join("\n");
|
|
425
422
|
|
|
426
|
-
|
|
423
|
+
// Phase 1: single UAC — cert + DNS + netsh urlacl + netsh portproxy
|
|
424
|
+
const setupScript = `
|
|
427
425
|
# 1. Install cert if not already in Root store
|
|
428
426
|
$certCheck = & certutil -store Root 'daily-cloudcode-pa.googleapis.com' 2>&1
|
|
429
427
|
if ($LASTEXITCODE -ne 0) {
|
|
430
428
|
& certutil -addstore Root '${certPsPath}' | Out-Null
|
|
431
429
|
}
|
|
432
430
|
|
|
433
|
-
# 2. Add DNS entries
|
|
431
|
+
# 2. Add DNS entries
|
|
434
432
|
${dnsAddLines}
|
|
435
433
|
& ipconfig /flushdns | Out-Null
|
|
436
434
|
|
|
437
|
-
# 3.
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
435
|
+
# 3. Allow node to bind port ${WIN_NODE_PORT} without admin
|
|
436
|
+
& netsh http add urlacl url=https://+:${WIN_NODE_PORT}/ user=Everyone | Out-Null
|
|
437
|
+
|
|
438
|
+
# 4. Forward :443 → :${WIN_NODE_PORT} (portproxy)
|
|
439
|
+
& netsh interface portproxy delete v4tov4 listenport=${MITM_PORT} listenaddress=0.0.0.0 2>&1 | Out-Null
|
|
440
|
+
& netsh interface portproxy add v4tov4 listenport=${MITM_PORT} listenaddress=0.0.0.0 connectport=${WIN_NODE_PORT} connectaddress=127.0.0.1 | Out-Null
|
|
441
441
|
`.trim();
|
|
442
442
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
443
|
+
const tmpSetup = path.join(os.tmpdir(), `mitm_setup_${Date.now()}.ps1`);
|
|
444
|
+
fs.writeFileSync(tmpSetup, setupScript, "utf8");
|
|
445
|
+
|
|
446
|
+
// Run elevated setup — single UAC prompt, wait for completion
|
|
447
|
+
await new Promise((resolve, reject) => {
|
|
448
|
+
const setupProc = spawn("powershell", [
|
|
449
|
+
"-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden",
|
|
450
|
+
"-Command",
|
|
451
|
+
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpSetup)}' -ErrorAction SilentlyContinue`
|
|
452
|
+
], { stdio: "ignore", windowsHide: true });
|
|
453
|
+
setupProc.on("close", () => resolve());
|
|
454
|
+
setupProc.on("error", reject);
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
if (_updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
|
|
446
458
|
|
|
447
|
-
//
|
|
448
|
-
serverProcess = spawn(
|
|
449
|
-
|
|
450
|
-
"
|
|
451
|
-
|
|
452
|
-
|
|
459
|
+
// Phase 2: start node server on WIN_NODE_PORT — no admin needed
|
|
460
|
+
serverProcess = spawn(process.execPath, [SERVER_PATH], {
|
|
461
|
+
env: { ...process.env, ROUTER_API_KEY: apiKey, NODE_ENV: "production", MITM_PORT: String(WIN_NODE_PORT) },
|
|
462
|
+
stdio: "ignore",
|
|
463
|
+
windowsHide: true,
|
|
464
|
+
detached: true,
|
|
465
|
+
});
|
|
466
|
+
serverProcess.unref();
|
|
453
467
|
} else {
|
|
454
468
|
// macOS/Linux: install cert + add DNS (requires sudo), then spawn server
|
|
455
469
|
const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
|
|
@@ -508,10 +522,7 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
508
522
|
throw new Error(`MITM server failed to start. ${reason}`);
|
|
509
523
|
}
|
|
510
524
|
|
|
511
|
-
// On Windows,
|
|
512
|
-
if (IS_WIN && _updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
|
|
513
|
-
|
|
514
|
-
// On Windows, use real PID from health check (launcher exits immediately after UAC)
|
|
525
|
+
// On Windows, use real PID from health check (node detached, serverProcess.pid may differ)
|
|
515
526
|
if (IS_WIN && health.pid) {
|
|
516
527
|
serverPid = health.pid;
|
|
517
528
|
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
@@ -552,8 +563,29 @@ async function stopMitm(sudoPassword) {
|
|
|
552
563
|
serverPid = null;
|
|
553
564
|
}
|
|
554
565
|
|
|
555
|
-
|
|
556
|
-
|
|
566
|
+
if (IS_WIN) {
|
|
567
|
+
// Cleanup netsh portproxy + urlacl — single UAC prompt
|
|
568
|
+
const cleanupScript = `
|
|
569
|
+
& netsh interface portproxy delete v4tov4 listenport=${MITM_PORT} listenaddress=0.0.0.0 2>&1 | Out-Null
|
|
570
|
+
& netsh http delete urlacl url=https://+:${WIN_NODE_PORT}/ 2>&1 | Out-Null
|
|
571
|
+
`.trim();
|
|
572
|
+
const tmpCleanup = path.join(os.tmpdir(), `mitm_cleanup_${Date.now()}.ps1`);
|
|
573
|
+
fs.writeFileSync(tmpCleanup, cleanupScript, "utf8");
|
|
574
|
+
const esc = (s) => s.replace(/'/g, "''");
|
|
575
|
+
await new Promise((resolve) => {
|
|
576
|
+
const p = spawn("powershell", [
|
|
577
|
+
"-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden",
|
|
578
|
+
"-Command",
|
|
579
|
+
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpCleanup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpCleanup)}' -ErrorAction SilentlyContinue`
|
|
580
|
+
], { stdio: "ignore", windowsHide: true });
|
|
581
|
+
p.on("close", resolve);
|
|
582
|
+
p.on("error", resolve);
|
|
583
|
+
});
|
|
584
|
+
await removeDNSEntry(sudoPassword);
|
|
585
|
+
} else {
|
|
586
|
+
console.log("Removing DNS entry...");
|
|
587
|
+
await removeDNSEntry(sudoPassword);
|
|
588
|
+
}
|
|
557
589
|
|
|
558
590
|
try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
|
|
559
591
|
|
package/app/src/mitm/server.js
CHANGED
|
@@ -11,7 +11,7 @@ const TARGET_HOSTS = [
|
|
|
11
11
|
"daily-cloudcode-pa.googleapis.com",
|
|
12
12
|
"cloudcode-pa.googleapis.com"
|
|
13
13
|
];
|
|
14
|
-
const LOCAL_PORT = 443;
|
|
14
|
+
const LOCAL_PORT = parseInt(process.env.MITM_PORT || "443", 10);
|
|
15
15
|
const ROUTER_URL = "http://localhost:20128/v1/chat/completions";
|
|
16
16
|
const API_KEY = process.env.ROUTER_API_KEY;
|
|
17
17
|
const DB_FILE = path.join(os.homedir(), ".9router", "db.json");
|
package/cli.js
CHANGED
|
@@ -360,11 +360,10 @@ fi
|
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
const spawnOpts = platform === "win32"
|
|
363
|
-
? { stdio: "ignore",
|
|
364
|
-
: {
|
|
363
|
+
? { stdio: "ignore", shell: true } // cmd /c start opens new window
|
|
364
|
+
: { stdio: "inherit" }; // show progress in current terminal
|
|
365
365
|
const child = spawn(shellCmd[0], shellCmd[1], spawnOpts);
|
|
366
|
-
child.
|
|
367
|
-
process.exit(0);
|
|
366
|
+
child.on("close", () => process.exit(0));
|
|
368
367
|
} catch (err) {
|
|
369
368
|
console.error(`⚠️ Update failed: ${err.message}`);
|
|
370
369
|
console.log(` Run manually: npm install -g ${pkg.name}@latest\n`);
|
package/package.json
CHANGED
|
Binary file
|
package/src/cli/tray/icon.png
CHANGED
|
Binary file
|
package/src/cli/tray/tray.js
CHANGED
|
@@ -5,16 +5,18 @@ const path = require("path");
|
|
|
5
5
|
let trayInstance = null;
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Get icon base64 from file
|
|
8
|
+
* Get icon base64 from file — use .ico on Windows, .png on macOS/Linux
|
|
9
9
|
*/
|
|
10
10
|
function getIconBase64() {
|
|
11
|
+
const isWin = process.platform === "win32";
|
|
12
|
+
const iconFile = isWin ? "icon.ico" : "icon.png";
|
|
11
13
|
try {
|
|
12
|
-
const iconPath = path.join(__dirname,
|
|
14
|
+
const iconPath = path.join(__dirname, iconFile);
|
|
13
15
|
if (fs.existsSync(iconPath)) {
|
|
14
16
|
return fs.readFileSync(iconPath).toString("base64");
|
|
15
17
|
}
|
|
16
18
|
} catch (e) {}
|
|
17
|
-
// Fallback: minimal green dot icon
|
|
19
|
+
// Fallback: minimal green dot icon (PNG)
|
|
18
20
|
return "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHpJREFUOE9jYBgFgwEwMjIy/Gdg+P8fyP4PxP8ZGBgEcBnGyMjIsICBgSEAhyH/gfgBUNN8XJoZsdkCVL8Ah+b/QPwbqvkBMvk/AwMDAzYX/GdgYAhAN+A/SICRWAMYGfFEJSMjzriEiwDR/xmIa2RkZCSqnZERb3QCAAo3KxzxbKe1AAAAAElFTkSuQmCC";
|
|
19
21
|
}
|
|
20
22
|
|
|
File without changes
|
|
File without changes
|