9router 0.3.7 → 0.3.9
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 +35 -35
- 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 +35 -35
- package/app/.next/server/chunks/6186.js +12 -23
- 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-34f7f0844b464ca0.js → 8729-4580b1f9160e0d05.js} +1 -1
- package/app/package.json +1 -1
- package/app/src/mitm/manager.js +69 -76
- package/cli.js +4 -3
- package/package.json +1 -1
- /package/app/.next/static/{O7zv0v3lkhShT-i4HrmmA → q0QYF_Zfw0WVfoFaOHw7X}/_buildManifest.js +0 -0
- /package/app/.next/static/{O7zv0v3lkhShT-i4HrmmA → q0QYF_Zfw0WVfoFaOHw7X}/_ssgManifest.js +0 -0
package/app/src/mitm/manager.js
CHANGED
|
@@ -276,12 +276,11 @@ 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;
|
|
280
279
|
return new Promise((resolve) => {
|
|
281
280
|
const deadline = Date.now() + timeoutMs;
|
|
282
281
|
const check = () => {
|
|
283
282
|
const req = https.request(
|
|
284
|
-
{ hostname: "127.0.0.1", port:
|
|
283
|
+
{ hostname: "127.0.0.1", port: 443, path: "/_mitm_health", method: "GET", rejectUnauthorized: false },
|
|
285
284
|
(res) => {
|
|
286
285
|
let body = "";
|
|
287
286
|
res.on("data", (d) => { body += d; });
|
|
@@ -413,54 +412,75 @@ async function startMitm(apiKey, sudoPassword) {
|
|
|
413
412
|
const esc = (s) => s.replace(/'/g, "''");
|
|
414
413
|
const certPsPath = esc(certPath);
|
|
415
414
|
const hostsPsPath = esc(hostsFile);
|
|
416
|
-
const nodePsPath = esc(process.execPath);
|
|
417
|
-
const serverPsPath = esc(SERVER_PATH);
|
|
418
415
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
416
|
+
// Check if one-time setup is already done (urlacl granted + cert installed + DNS added)
|
|
417
|
+
const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
|
|
418
|
+
const setupDone = settings.mitmWinSetupDone && fs.existsSync(certPath) && checkDNSEntry();
|
|
419
|
+
|
|
420
|
+
if (!setupDone) {
|
|
421
|
+
// Phase 1: single UAC prompt — cert + DNS + netsh urlacl (one-time setup)
|
|
422
|
+
const dnsAddLines = TARGET_HOSTS_WIN.map(h =>
|
|
423
|
+
`if (-not (Select-String -Path '${hostsPsPath}' -Pattern '${h}' -Quiet)) { Add-Content -Path '${hostsPsPath}' -Value "127.0.0.1 ${h}" }`
|
|
424
|
+
).join("\n");
|
|
425
|
+
|
|
426
|
+
const ts = Date.now();
|
|
427
|
+
const tmpSetup = path.join(os.tmpdir(), `mitm_setup_${ts}.ps1`);
|
|
428
|
+
const tmpDone = path.join(os.tmpdir(), `mitm_done_${ts}.tmp`);
|
|
429
|
+
const tmpDonePsPath = esc(tmpDone);
|
|
422
430
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
const setupScript = `
|
|
426
|
-
# 1. Install cert to Root store if not present
|
|
431
|
+
const setupScript = `
|
|
432
|
+
# 1. Install cert to Root store
|
|
427
433
|
$certCheck = & certutil -store Root 'daily-cloudcode-pa.googleapis.com' 2>&1
|
|
428
|
-
if ($LASTEXITCODE -ne 0) {
|
|
429
|
-
& certutil -addstore Root '${certPsPath}' | Out-Null
|
|
430
|
-
}
|
|
434
|
+
if ($LASTEXITCODE -ne 0) { & certutil -addstore Root '${certPsPath}' | Out-Null }
|
|
431
435
|
|
|
432
|
-
# 2. Add DNS entries
|
|
436
|
+
# 2. Add DNS entries
|
|
433
437
|
${dnsAddLines}
|
|
434
438
|
& ipconfig /flushdns | Out-Null
|
|
435
439
|
|
|
436
|
-
# 3. Grant
|
|
437
|
-
|
|
440
|
+
# 3. Grant current user permission to bind port 443 (no more UAC needed after this)
|
|
441
|
+
$sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
|
|
442
|
+
& netsh http add urlacl url=https://+:443/ sddl="D:(A;;GX;;;$sid)" | Out-Null
|
|
438
443
|
|
|
439
|
-
# 4.
|
|
440
|
-
|
|
441
|
-
$env:NODE_ENV = 'production'
|
|
442
|
-
Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -WindowStyle Hidden
|
|
444
|
+
# 4. Write sentinel file so JS knows setup is complete
|
|
445
|
+
Set-Content -Path '${tmpDonePsPath}' -Value 'done' -Force
|
|
443
446
|
`.trim();
|
|
444
447
|
|
|
445
|
-
|
|
446
|
-
fs.writeFileSync(tmpSetup, setupScript, "utf8");
|
|
448
|
+
fs.writeFileSync(tmpSetup, setupScript, "utf8");
|
|
447
449
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
"-NoProfile", "-WindowStyle", "Hidden",
|
|
450
|
+
// Trigger elevated script — UAC will appear for user to confirm
|
|
451
|
+
spawn("powershell", [
|
|
452
|
+
"-NoProfile", "-NonInteractive",
|
|
452
453
|
"-Command",
|
|
453
|
-
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs
|
|
454
|
-
], { stdio: "ignore", windowsHide: true });
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
454
|
+
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs`
|
|
455
|
+
], { stdio: "ignore", windowsHide: true }).unref();
|
|
456
|
+
|
|
457
|
+
// Poll sentinel file — wait up to 60s for user to confirm UAC + script to finish
|
|
458
|
+
await new Promise((resolve, reject) => {
|
|
459
|
+
const deadline = Date.now() + 60000;
|
|
460
|
+
const interval = setInterval(() => {
|
|
461
|
+
if (fs.existsSync(tmpDone)) {
|
|
462
|
+
clearInterval(interval);
|
|
463
|
+
try { fs.unlinkSync(tmpDone); } catch { /* ignore */ }
|
|
464
|
+
try { fs.unlinkSync(tmpSetup); } catch { /* ignore */ }
|
|
465
|
+
resolve();
|
|
466
|
+
} else if (Date.now() > deadline) {
|
|
467
|
+
clearInterval(interval);
|
|
468
|
+
reject(new Error("Setup timed out. Please confirm the UAC prompt and try again."));
|
|
469
|
+
}
|
|
470
|
+
}, 500);
|
|
471
|
+
});
|
|
458
472
|
|
|
459
|
-
|
|
473
|
+
if (_updateSettings) await _updateSettings({ mitmWinSetupDone: true, mitmCertInstalled: true }).catch(() => { });
|
|
474
|
+
}
|
|
460
475
|
|
|
461
|
-
//
|
|
462
|
-
|
|
463
|
-
|
|
476
|
+
// Phase 2: spawn node directly — no UAC needed (urlacl already granted)
|
|
477
|
+
serverProcess = spawn(process.execPath, [SERVER_PATH], {
|
|
478
|
+
detached: true,
|
|
479
|
+
stdio: "ignore",
|
|
480
|
+
windowsHide: true,
|
|
481
|
+
env: { ...process.env, ROUTER_API_KEY: apiKey, NODE_ENV: "production" },
|
|
482
|
+
});
|
|
483
|
+
serverProcess.unref();
|
|
464
484
|
} else {
|
|
465
485
|
// macOS/Linux: install cert + add DNS (requires sudo), then spawn server
|
|
466
486
|
const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
|
|
@@ -483,8 +503,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
483
503
|
serverProcess.stdin.end();
|
|
484
504
|
}
|
|
485
505
|
|
|
486
|
-
serverPid =
|
|
487
|
-
|
|
506
|
+
serverPid = serverProcess.pid;
|
|
507
|
+
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
488
508
|
|
|
489
509
|
let startError = null;
|
|
490
510
|
if (!IS_WIN) {
|
|
@@ -508,7 +528,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
508
528
|
}
|
|
509
529
|
|
|
510
530
|
// Wait for server to be ready by polling health endpoint
|
|
511
|
-
|
|
531
|
+
// Windows: allow extra time for urlacl setup + node startup on first run
|
|
532
|
+
const health = await pollMitmHealth(IS_WIN ? 20000 : 8000);
|
|
512
533
|
|
|
513
534
|
if (!health) {
|
|
514
535
|
if (IS_WIN) serverProcess = null;
|
|
@@ -519,7 +540,10 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
519
540
|
throw new Error(`MITM server failed to start. ${reason}`);
|
|
520
541
|
}
|
|
521
542
|
|
|
522
|
-
// On Windows,
|
|
543
|
+
// On Windows, mark cert as installed after successful start
|
|
544
|
+
if (IS_WIN && _updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
|
|
545
|
+
|
|
546
|
+
// On Windows, use real PID from health check (launcher exits immediately after UAC)
|
|
523
547
|
if (IS_WIN && health.pid) {
|
|
524
548
|
serverPid = health.pid;
|
|
525
549
|
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
@@ -560,45 +584,14 @@ async function stopMitm(sudoPassword) {
|
|
|
560
584
|
serverPid = null;
|
|
561
585
|
}
|
|
562
586
|
|
|
563
|
-
|
|
564
|
-
|
|
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
|
-
}
|
|
587
|
+
console.log("Removing DNS entry...");
|
|
588
|
+
await removeDNSEntry(sudoPassword);
|
|
599
589
|
|
|
600
590
|
try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
|
|
601
591
|
|
|
592
|
+
// Reset win setup flag so DNS gets re-added on next start
|
|
593
|
+
if (IS_WIN && _updateSettings) await _updateSettings({ mitmWinSetupDone: false }).catch(() => { });
|
|
594
|
+
|
|
602
595
|
await saveMitmSettings(false, null);
|
|
603
596
|
|
|
604
597
|
return { running: false, pid: null };
|
package/cli.js
CHANGED
|
@@ -360,10 +360,11 @@ fi
|
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
const spawnOpts = platform === "win32"
|
|
363
|
-
? { stdio: "ignore",
|
|
364
|
-
: { stdio: "
|
|
363
|
+
? { stdio: "ignore", windowsHide: true }
|
|
364
|
+
: { detached: true, stdio: "ignore" };
|
|
365
365
|
const child = spawn(shellCmd[0], shellCmd[1], spawnOpts);
|
|
366
|
-
child.
|
|
366
|
+
child.unref();
|
|
367
|
+
process.exit(0);
|
|
367
368
|
} catch (err) {
|
|
368
369
|
console.error(`⚠️ Update failed: ${err.message}`);
|
|
369
370
|
console.log(` Run manually: npm install -g ${pkg.name}@latest\n`);
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|