9router 0.3.5 → 0.3.7
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 +33 -33
- 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 +33 -33
- package/app/.next/server/chunks/6186.js +18 -7
- 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-34f7f0844b464ca0.js} +1 -1
- package/app/package.json +1 -1
- package/app/src/mitm/manager.js +69 -27
- 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 → O7zv0v3lkhShT-i4HrmmA}/_buildManifest.js +0 -0
- /package/app/.next/static/{hy44YEjBRcDsk_ehZG7mz → O7zv0v3lkhShT-i4HrmmA}/_ssgManifest.js +0 -0
package/app/src/mitm/manager.js
CHANGED
|
@@ -276,11 +276,12 @@ async function killLeftoverMitm(sudoPassword) {
|
|
|
276
276
|
* Returns { ok, pid } on success, null on timeout.
|
|
277
277
|
*/
|
|
278
278
|
function pollMitmHealth(timeoutMs) {
|
|
279
|
+
const healthPort = MITM_PORT;
|
|
279
280
|
return new Promise((resolve) => {
|
|
280
281
|
const deadline = Date.now() + timeoutMs;
|
|
281
282
|
const check = () => {
|
|
282
283
|
const req = https.request(
|
|
283
|
-
{ hostname: "127.0.0.1", port:
|
|
284
|
+
{ hostname: "127.0.0.1", port: healthPort, path: "/_mitm_health", method: "GET", rejectUnauthorized: false },
|
|
284
285
|
(res) => {
|
|
285
286
|
let body = "";
|
|
286
287
|
res.on("data", (d) => { body += d; });
|
|
@@ -407,24 +408,22 @@ async function startMitm(apiKey, sudoPassword) {
|
|
|
407
408
|
console.log("Starting MITM server...");
|
|
408
409
|
|
|
409
410
|
if (IS_WIN) {
|
|
410
|
-
// Windows: single UAC prompt does cert install + DNS + server start all at once
|
|
411
411
|
const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
|
|
412
412
|
const TARGET_HOSTS_WIN = ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"];
|
|
413
|
-
|
|
414
|
-
// Escape paths for PowerShell single-quoted strings
|
|
415
413
|
const esc = (s) => s.replace(/'/g, "''");
|
|
416
|
-
const nodePsPath = esc(process.execPath);
|
|
417
|
-
const serverPsPath = esc(SERVER_PATH);
|
|
418
414
|
const certPsPath = esc(certPath);
|
|
419
415
|
const hostsPsPath = esc(hostsFile);
|
|
416
|
+
const nodePsPath = esc(process.execPath);
|
|
417
|
+
const serverPsPath = esc(SERVER_PATH);
|
|
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
|
-
|
|
427
|
-
|
|
423
|
+
// Single elevated script: cert + DNS + urlacl (allow node to bind 443) + start node
|
|
424
|
+
// urlacl grants non-admin processes permission to bind port 443 via HTTP.sys
|
|
425
|
+
const setupScript = `
|
|
426
|
+
# 1. Install cert to Root store if not present
|
|
428
427
|
$certCheck = & certutil -store Root 'daily-cloudcode-pa.googleapis.com' 2>&1
|
|
429
428
|
if ($LASTEXITCODE -ne 0) {
|
|
430
429
|
& certutil -addstore Root '${certPsPath}' | Out-Null
|
|
@@ -434,22 +433,34 @@ if ($LASTEXITCODE -ne 0) {
|
|
|
434
433
|
${dnsAddLines}
|
|
435
434
|
& ipconfig /flushdns | Out-Null
|
|
436
435
|
|
|
437
|
-
# 3.
|
|
436
|
+
# 3. Grant permission for any user to bind HTTPS port 443 (no admin needed after this)
|
|
437
|
+
& netsh http add urlacl url=https://+:${MITM_PORT}/ user=Everyone 2>&1 | Out-Null
|
|
438
|
+
|
|
439
|
+
# 4. Start node MITM server (now allowed to bind 443 without admin)
|
|
438
440
|
$env:ROUTER_API_KEY = '${esc(apiKey)}'
|
|
439
441
|
$env:NODE_ENV = 'production'
|
|
440
442
|
Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -WindowStyle Hidden
|
|
441
443
|
`.trim();
|
|
442
444
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
445
|
+
const tmpSetup = path.join(os.tmpdir(), `mitm_setup_${Date.now()}.ps1`);
|
|
446
|
+
fs.writeFileSync(tmpSetup, setupScript, "utf8");
|
|
447
|
+
|
|
448
|
+
// Outer spawn WITHOUT -NonInteractive so UAC dialog can appear
|
|
449
|
+
await new Promise((resolve, reject) => {
|
|
450
|
+
const setupProc = spawn("powershell", [
|
|
451
|
+
"-NoProfile", "-WindowStyle", "Hidden",
|
|
452
|
+
"-Command",
|
|
453
|
+
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpSetup)}' -ErrorAction SilentlyContinue`
|
|
454
|
+
], { stdio: "ignore", windowsHide: true });
|
|
455
|
+
setupProc.on("close", () => resolve());
|
|
456
|
+
setupProc.on("error", reject);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
if (_updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
|
|
446
460
|
|
|
447
|
-
//
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
"-Command",
|
|
451
|
-
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${tmpScript}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpScript)}' -ErrorAction SilentlyContinue`
|
|
452
|
-
], { stdio: "ignore", windowsHide: true });
|
|
461
|
+
// serverProcess reference not available (started inside elevated script)
|
|
462
|
+
// PID will be captured from health check response
|
|
463
|
+
serverProcess = { pid: null, killed: false };
|
|
453
464
|
} else {
|
|
454
465
|
// macOS/Linux: install cert + add DNS (requires sudo), then spawn server
|
|
455
466
|
const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
|
|
@@ -472,8 +483,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
472
483
|
serverProcess.stdin.end();
|
|
473
484
|
}
|
|
474
485
|
|
|
475
|
-
serverPid = serverProcess.pid;
|
|
476
|
-
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
486
|
+
serverPid = IS_WIN ? null : serverProcess.pid;
|
|
487
|
+
if (serverPid) fs.writeFileSync(PID_FILE, String(serverPid));
|
|
477
488
|
|
|
478
489
|
let startError = null;
|
|
479
490
|
if (!IS_WIN) {
|
|
@@ -508,10 +519,7 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
508
519
|
throw new Error(`MITM server failed to start. ${reason}`);
|
|
509
520
|
}
|
|
510
521
|
|
|
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)
|
|
522
|
+
// On Windows, use real PID from health check (node detached, serverProcess.pid may differ)
|
|
515
523
|
if (IS_WIN && health.pid) {
|
|
516
524
|
serverPid = health.pid;
|
|
517
525
|
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
@@ -552,8 +560,42 @@ async function stopMitm(sudoPassword) {
|
|
|
552
560
|
serverPid = null;
|
|
553
561
|
}
|
|
554
562
|
|
|
555
|
-
|
|
556
|
-
|
|
563
|
+
if (IS_WIN) {
|
|
564
|
+
// Cleanup: remove DNS entries + urlacl — single UAC prompt
|
|
565
|
+
const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
|
|
566
|
+
const TARGET_HOSTS_WIN = ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"];
|
|
567
|
+
const esc = (s) => s.replace(/'/g, "''");
|
|
568
|
+
const hostsPsPath = esc(hostsFile);
|
|
569
|
+
|
|
570
|
+
const content = fs.readFileSync(hostsFile, "utf8");
|
|
571
|
+
const filtered = content.split(/\r?\n/).filter(l => !TARGET_HOSTS_WIN.some(h => l.includes(h))).join("\r\n");
|
|
572
|
+
const tmpHosts = path.join(os.tmpdir(), "hosts_filtered.tmp");
|
|
573
|
+
fs.writeFileSync(tmpHosts, filtered, "utf8");
|
|
574
|
+
|
|
575
|
+
const cleanupScript = `
|
|
576
|
+
# Remove DNS entries
|
|
577
|
+
Copy-Item -Path '${esc(tmpHosts)}' -Destination '${hostsPsPath}' -Force
|
|
578
|
+
& ipconfig /flushdns | Out-Null
|
|
579
|
+
Remove-Item '${esc(tmpHosts)}' -ErrorAction SilentlyContinue
|
|
580
|
+
|
|
581
|
+
# Remove urlacl
|
|
582
|
+
& netsh http delete urlacl url=https://+:${MITM_PORT}/ 2>&1 | Out-Null
|
|
583
|
+
`.trim();
|
|
584
|
+
const tmpCleanup = path.join(os.tmpdir(), `mitm_cleanup_${Date.now()}.ps1`);
|
|
585
|
+
fs.writeFileSync(tmpCleanup, cleanupScript, "utf8");
|
|
586
|
+
await new Promise((resolve) => {
|
|
587
|
+
const p = spawn("powershell", [
|
|
588
|
+
"-NoProfile", "-WindowStyle", "Hidden",
|
|
589
|
+
"-Command",
|
|
590
|
+
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpCleanup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpCleanup)}' -ErrorAction SilentlyContinue`
|
|
591
|
+
], { stdio: "ignore", windowsHide: true });
|
|
592
|
+
p.on("close", resolve);
|
|
593
|
+
p.on("error", resolve);
|
|
594
|
+
});
|
|
595
|
+
} else {
|
|
596
|
+
console.log("Removing DNS entry...");
|
|
597
|
+
await removeDNSEntry(sudoPassword);
|
|
598
|
+
}
|
|
557
599
|
|
|
558
600
|
try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
|
|
559
601
|
|
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
|