9router 0.3.7 → 0.3.8
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 +40 -40
- 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 +40 -40
- package/app/.next/server/chunks/6186.js +10 -24
- 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-106326b7d8698301.js} +1 -1
- package/app/package.json +1 -1
- package/app/src/mitm/manager.js +56 -79
- package/cli.js +4 -3
- package/package.json +1 -1
- /package/app/.next/static/{O7zv0v3lkhShT-i4HrmmA → wIoZyweDWinxA_7Ga0XlS}/_buildManifest.js +0 -0
- /package/app/.next/static/{O7zv0v3lkhShT-i4HrmmA → wIoZyweDWinxA_7Ga0XlS}/_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,59 @@ 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");
|
|
422
425
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
const setupScript = `
|
|
426
|
-
# 1. Install cert to Root store if not present
|
|
426
|
+
const setupScript = `
|
|
427
|
+
# 1. Install cert to Root store
|
|
427
428
|
$certCheck = & certutil -store Root 'daily-cloudcode-pa.googleapis.com' 2>&1
|
|
428
|
-
if ($LASTEXITCODE -ne 0) {
|
|
429
|
-
& certutil -addstore Root '${certPsPath}' | Out-Null
|
|
430
|
-
}
|
|
429
|
+
if ($LASTEXITCODE -ne 0) { & certutil -addstore Root '${certPsPath}' | Out-Null }
|
|
431
430
|
|
|
432
|
-
# 2. Add DNS entries
|
|
431
|
+
# 2. Add DNS entries
|
|
433
432
|
${dnsAddLines}
|
|
434
433
|
& ipconfig /flushdns | Out-Null
|
|
435
434
|
|
|
436
|
-
# 3. Grant
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
# 4. Start node MITM server (now allowed to bind 443 without admin)
|
|
440
|
-
$env:ROUTER_API_KEY = '${esc(apiKey)}'
|
|
441
|
-
$env:NODE_ENV = 'production'
|
|
442
|
-
Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -WindowStyle Hidden
|
|
435
|
+
# 3. Grant current user permission to bind port 443 (no more UAC needed after this)
|
|
436
|
+
$sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
|
|
437
|
+
& netsh http add urlacl url=https://+:443/ sddl="D:(A;;GX;;;$sid)" | Out-Null
|
|
443
438
|
`.trim();
|
|
444
439
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
440
|
+
const tmpSetup = path.join(os.tmpdir(), `mitm_setup_${Date.now()}.ps1`);
|
|
441
|
+
fs.writeFileSync(tmpSetup, setupScript, "utf8");
|
|
442
|
+
|
|
443
|
+
// Run elevated — this is the ONLY UAC prompt
|
|
444
|
+
await new Promise((resolve, reject) => {
|
|
445
|
+
const launcher = spawn("powershell", [
|
|
446
|
+
"-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden",
|
|
447
|
+
"-Command",
|
|
448
|
+
`Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpSetup)}' -ErrorAction SilentlyContinue`
|
|
449
|
+
], { stdio: "ignore", windowsHide: true });
|
|
450
|
+
launcher.on("close", (code) => {
|
|
451
|
+
if (code === 0) resolve();
|
|
452
|
+
else reject(new Error(`Setup script failed with code ${code}`));
|
|
453
|
+
});
|
|
454
|
+
launcher.on("error", reject);
|
|
455
|
+
});
|
|
458
456
|
|
|
459
|
-
|
|
457
|
+
if (_updateSettings) await _updateSettings({ mitmWinSetupDone: true, mitmCertInstalled: true }).catch(() => { });
|
|
458
|
+
}
|
|
460
459
|
|
|
461
|
-
//
|
|
462
|
-
|
|
463
|
-
|
|
460
|
+
// Phase 2: spawn node directly — no UAC needed (urlacl already granted)
|
|
461
|
+
serverProcess = spawn(process.execPath, [SERVER_PATH], {
|
|
462
|
+
detached: true,
|
|
463
|
+
stdio: "ignore",
|
|
464
|
+
windowsHide: true,
|
|
465
|
+
env: { ...process.env, ROUTER_API_KEY: apiKey, NODE_ENV: "production" },
|
|
466
|
+
});
|
|
467
|
+
serverProcess.unref();
|
|
464
468
|
} else {
|
|
465
469
|
// macOS/Linux: install cert + add DNS (requires sudo), then spawn server
|
|
466
470
|
const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
|
|
@@ -483,8 +487,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
483
487
|
serverProcess.stdin.end();
|
|
484
488
|
}
|
|
485
489
|
|
|
486
|
-
serverPid =
|
|
487
|
-
|
|
490
|
+
serverPid = serverProcess.pid;
|
|
491
|
+
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
488
492
|
|
|
489
493
|
let startError = null;
|
|
490
494
|
if (!IS_WIN) {
|
|
@@ -508,7 +512,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
508
512
|
}
|
|
509
513
|
|
|
510
514
|
// Wait for server to be ready by polling health endpoint
|
|
511
|
-
|
|
515
|
+
// Windows: allow extra time for urlacl setup + node startup on first run
|
|
516
|
+
const health = await pollMitmHealth(IS_WIN ? 20000 : 8000);
|
|
512
517
|
|
|
513
518
|
if (!health) {
|
|
514
519
|
if (IS_WIN) serverProcess = null;
|
|
@@ -519,7 +524,10 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
|
|
|
519
524
|
throw new Error(`MITM server failed to start. ${reason}`);
|
|
520
525
|
}
|
|
521
526
|
|
|
522
|
-
// On Windows,
|
|
527
|
+
// On Windows, mark cert as installed after successful start
|
|
528
|
+
if (IS_WIN && _updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
|
|
529
|
+
|
|
530
|
+
// On Windows, use real PID from health check (launcher exits immediately after UAC)
|
|
523
531
|
if (IS_WIN && health.pid) {
|
|
524
532
|
serverPid = health.pid;
|
|
525
533
|
fs.writeFileSync(PID_FILE, String(serverPid));
|
|
@@ -560,45 +568,14 @@ async function stopMitm(sudoPassword) {
|
|
|
560
568
|
serverPid = null;
|
|
561
569
|
}
|
|
562
570
|
|
|
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
|
-
}
|
|
571
|
+
console.log("Removing DNS entry...");
|
|
572
|
+
await removeDNSEntry(sudoPassword);
|
|
599
573
|
|
|
600
574
|
try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
|
|
601
575
|
|
|
576
|
+
// Reset win setup flag so DNS gets re-added on next start
|
|
577
|
+
if (IS_WIN && _updateSettings) await _updateSettings({ mitmWinSetupDone: false }).catch(() => { });
|
|
578
|
+
|
|
602
579
|
await saveMitmSettings(false, null);
|
|
603
580
|
|
|
604
581
|
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
|