zevairouter 1.0.149 → 1.0.151
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/CHANGELOG.md +14 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +11 -11
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback.html +1 -1
- package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.html +1 -1
- package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing.html +1 -1
- package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/login.html +1 -1
- package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app-paths-manifest.json +11 -11
- package/cli/app/.next-cli-build/server/chunks/1019.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4566.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5000.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/9621.js +1 -1
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/pages/404.html +1 -1
- package/cli/app/.next-cli-build/server/pages/500.html +1 -1
- package/cli/app/.next-cli-build/static/chunks/{620-104e711e028e5a60.js → 620-e4b9eeb811dd9f2e.js} +1 -1
- package/cli/app/CHANGELOG.md +14 -0
- package/cli/app/package.json +1 -1
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/src/lib/oauth/services/bulkImportBrowserEngine.js +287 -4
- package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +216 -7
- package/src/lib/oauth/services/kiroBulkImportManager.js +12 -9
- /package/cli/app/.next-cli-build/static/{w0fFe0wlenV7JedZI_N94 → nSCRy0gnXuQuQ0zz0lV8w}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{w0fFe0wlenV7JedZI_N94 → nSCRy0gnXuQuQ0zz0lV8w}/_ssgManifest.js +0 -0
|
@@ -40,7 +40,12 @@ import {
|
|
|
40
40
|
defaultPollForToken,
|
|
41
41
|
fetchCodeBuddyLoginAccount,
|
|
42
42
|
} from "./codebuddyBulkImportManager.js";
|
|
43
|
-
import {
|
|
43
|
+
import {
|
|
44
|
+
forceCloseBrowser,
|
|
45
|
+
getCloakProxyProfile,
|
|
46
|
+
parseProxyEgressIp,
|
|
47
|
+
PROXY_EGRESS_ECHO_URLS,
|
|
48
|
+
} from "./bulkImportBrowserEngine.js";
|
|
44
49
|
|
|
45
50
|
const CODEBUDDY_CN_PROVIDER_ID = "codebuddy-cn";
|
|
46
51
|
const CODEBUDDY_CN_LABEL = "CodeBuddy CN";
|
|
@@ -82,6 +87,7 @@ const CODEBUDDY_CN_MANUAL_TIMEOUT_MS = 8 * 60_000;
|
|
|
82
87
|
const CODEBUDDY_CN_LOW_MEM_MANUAL_TIMEOUT_MS = 3 * 60_000;
|
|
83
88
|
const CODEBUDDY_CN_RESOURCE_CLOSE_TIMEOUT_MS = 5_000;
|
|
84
89
|
const CODEBUDDY_CN_FIVESIM_SETTLE_TIMEOUT_MS = 12_000;
|
|
90
|
+
const CODEBUDDY_CN_EGRESS_PROBE_TIMEOUT_MS = 6_000;
|
|
85
91
|
const CODEBUDDY_CN_API_KEY_OUTCOME_UNKNOWN = "CN_API_KEY_OUTCOME_UNKNOWN";
|
|
86
92
|
const CODEBUDDY_CN_ACCOUNT_RESTRICTED = "CN_ACCOUNT_RESTRICTED";
|
|
87
93
|
|
|
@@ -127,6 +133,105 @@ function clampCnConcurrency(value) {
|
|
|
127
133
|
return Math.min(hardMax, Math.max(CODEBUDDY_CN_MIN_CONCURRENCY, parsed));
|
|
128
134
|
}
|
|
129
135
|
|
|
136
|
+
function resolveCnJobConcurrency(value, { manualProxy = false } = {}) {
|
|
137
|
+
return manualProxy ? 1 : clampCnConcurrency(value);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function parseEgressIp(value) {
|
|
141
|
+
return parseProxyEgressIp(value);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async function probeCodeBuddyProxyEgress(
|
|
145
|
+
context,
|
|
146
|
+
{ timeoutMs = CODEBUDDY_CN_EGRESS_PROBE_TIMEOUT_MS } = {},
|
|
147
|
+
) {
|
|
148
|
+
let requestContext = null;
|
|
149
|
+
try {
|
|
150
|
+
requestContext = context?.request || null;
|
|
151
|
+
} catch {
|
|
152
|
+
requestContext = null;
|
|
153
|
+
}
|
|
154
|
+
if (!requestContext || typeof requestContext.get !== "function") {
|
|
155
|
+
return { ok: false, ip: null, ips: [], samples: 0, error: "context request unavailable" };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const attemptedUrls = [];
|
|
159
|
+
let lastError = null;
|
|
160
|
+
for (const url of PROXY_EGRESS_ECHO_URLS) {
|
|
161
|
+
attemptedUrls.push(url);
|
|
162
|
+
let response = null;
|
|
163
|
+
try {
|
|
164
|
+
response = await requestContext.get(url, {
|
|
165
|
+
timeout: timeoutMs,
|
|
166
|
+
failOnStatusCode: false,
|
|
167
|
+
headers: {
|
|
168
|
+
Accept: "text/plain, application/json;q=0.9, */*;q=0.1",
|
|
169
|
+
"Cache-Control": "no-cache",
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
if (response.status() < 200 || response.status() >= 300) {
|
|
173
|
+
lastError = `HTTP ${response.status()}`;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const ip = parseEgressIp(await response.text().catch(() => ""));
|
|
177
|
+
if (!ip) {
|
|
178
|
+
lastError = "exit-IP response was not recognized";
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
ok: true,
|
|
183
|
+
ip,
|
|
184
|
+
ips: [ip],
|
|
185
|
+
samples: 1,
|
|
186
|
+
attempts: attemptedUrls.length,
|
|
187
|
+
attemptedUrls,
|
|
188
|
+
unstable: false,
|
|
189
|
+
error: null,
|
|
190
|
+
};
|
|
191
|
+
} catch (error) {
|
|
192
|
+
lastError = error?.name === "TimeoutError"
|
|
193
|
+
? `timed out after ${timeoutMs}ms`
|
|
194
|
+
: "request failed";
|
|
195
|
+
} finally {
|
|
196
|
+
if (typeof response?.dispose === "function") {
|
|
197
|
+
await Promise.resolve(response.dispose()).catch(() => null);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
ok: false,
|
|
203
|
+
ip: null,
|
|
204
|
+
ips: [],
|
|
205
|
+
samples: 0,
|
|
206
|
+
attempts: attemptedUrls.length,
|
|
207
|
+
attemptedUrls,
|
|
208
|
+
unstable: false,
|
|
209
|
+
error: lastError || "all exit-IP services failed",
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function requireStableProxyEgress(probe, expectedIp = null) {
|
|
214
|
+
if (probe?.unstable) {
|
|
215
|
+
throw Object.assign(
|
|
216
|
+
new Error("Manual proxy rotated between exit IPs during preflight; no phone number was purchased"),
|
|
217
|
+
{ code: "CN_PROXY_EGRESS_UNSTABLE" },
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
if (!probe?.ok || !probe?.ip) {
|
|
221
|
+
throw Object.assign(
|
|
222
|
+
new Error(`Manual proxy exit IP could not be verified (${probe?.error || "no response"}); no phone number was purchased`),
|
|
223
|
+
{ code: "CN_PROXY_EGRESS_UNVERIFIED" },
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
if (expectedIp && probe.ip !== expectedIp) {
|
|
227
|
+
throw Object.assign(
|
|
228
|
+
new Error("Manual proxy exit IP changed after CloakBrowser GeoIP alignment; no phone number was purchased"),
|
|
229
|
+
{ code: "CN_PROXY_EGRESS_CHANGED" },
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
return probe.ip;
|
|
233
|
+
}
|
|
234
|
+
|
|
130
235
|
async function withTimeoutCleanup(
|
|
131
236
|
task,
|
|
132
237
|
{
|
|
@@ -388,6 +493,7 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
388
493
|
proxyUrl,
|
|
389
494
|
headless,
|
|
390
495
|
windowSize: { width: 1280, height: 900 },
|
|
496
|
+
requireProxyGeoip: job?.proxyPoolMode === "manual" && Boolean(proxyUrl),
|
|
391
497
|
});
|
|
392
498
|
return withTimeoutCleanup(launchTask, {
|
|
393
499
|
timeoutMs: CODEBUDDY_CN_BROWSER_LAUNCH_TIMEOUT_MS,
|
|
@@ -472,7 +578,7 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
472
578
|
const job = {
|
|
473
579
|
jobId,
|
|
474
580
|
status: "running",
|
|
475
|
-
concurrency:
|
|
581
|
+
concurrency: resolveCnJobConcurrency(concurrency, { manualProxy: Boolean(manualProxy) }),
|
|
476
582
|
proxyPoolMode: manualProxy ? "manual" : (proxyPoolMode || "none"),
|
|
477
583
|
proxyUrls,
|
|
478
584
|
region: resolvedRegion,
|
|
@@ -496,6 +602,9 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
496
602
|
// Unique Chromium fingerprint seed per account (viewport/HW/screen noise).
|
|
497
603
|
fingerprintSeed: randomUUID(),
|
|
498
604
|
proxyUrl: null,
|
|
605
|
+
egressIp: null,
|
|
606
|
+
proxyTimezone: null,
|
|
607
|
+
proxyLocale: null,
|
|
499
608
|
abortController: new AbortController(),
|
|
500
609
|
status: "queued",
|
|
501
610
|
error: null,
|
|
@@ -544,6 +653,7 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
544
653
|
let fiveSimOrderId = null;
|
|
545
654
|
let smsReceived = false;
|
|
546
655
|
let context = null;
|
|
656
|
+
let verifiedEgressIp = null;
|
|
547
657
|
|
|
548
658
|
try {
|
|
549
659
|
// Step 1: Get 5sim API key from settings
|
|
@@ -569,16 +679,14 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
569
679
|
// Step 2: Create browser context FIRST — if proxy/browser fails, we never buy a number.
|
|
570
680
|
this.setAccountStep(account, "creating_browser", "Creating browser context (before 5sim order)");
|
|
571
681
|
await this.persistJobSnapshot(job, { forcePreview: true });
|
|
572
|
-
// CloakBrowser
|
|
573
|
-
//
|
|
574
|
-
// cause of 账号访问受限 right after OTP). Per-account fingerprint seed —
|
|
575
|
-
// sticky residential IP alone still clusters if every session shares HW.
|
|
576
|
-
if (!account.fingerprintSeed) account.fingerprintSeed = randomUUID();
|
|
682
|
+
// CloakBrowser owns the process-wide fingerprint, timezone, locale, and
|
|
683
|
+
// WebRTC profile. Playwright context overrides would reintroduce CDP tells.
|
|
577
684
|
const contextTask = createFreshContext(job.browser, account.proxyUrl, {
|
|
578
685
|
profile: "codebuddy-cn",
|
|
579
686
|
region: job.region || "hongkong",
|
|
580
687
|
fingerprintSeed: account.fingerprintSeed,
|
|
581
688
|
lowMemory: isLowMemHost(),
|
|
689
|
+
nativeCloakProfile: job.proxyPoolMode === "manual",
|
|
582
690
|
});
|
|
583
691
|
const freshContext = await withTimeoutCleanup(contextTask, {
|
|
584
692
|
timeoutMs: CODEBUDDY_CN_CONTEXT_TIMEOUT_MS,
|
|
@@ -590,6 +698,27 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
590
698
|
const page = freshContext.page;
|
|
591
699
|
account.runtimeSession = { context, page };
|
|
592
700
|
|
|
701
|
+
if (job.proxyPoolMode === "manual" && account.proxyUrl) {
|
|
702
|
+
this.setAccountStep(
|
|
703
|
+
account,
|
|
704
|
+
"checking_proxy_egress",
|
|
705
|
+
"Verifying pasted proxy exit IP before opening the registration form",
|
|
706
|
+
);
|
|
707
|
+
await this.persistJobSnapshot(job, { forcePreview: false });
|
|
708
|
+
const launchProfile = getCloakProxyProfile(job.browser);
|
|
709
|
+
const egressProbe = await probeCodeBuddyProxyEgress(context);
|
|
710
|
+
verifiedEgressIp = requireStableProxyEgress(egressProbe, launchProfile?.egressIp || null);
|
|
711
|
+
account.egressIp = verifiedEgressIp;
|
|
712
|
+
account.proxyTimezone = launchProfile?.timezone || null;
|
|
713
|
+
account.proxyLocale = launchProfile?.locale || null;
|
|
714
|
+
this.setAccountStep(
|
|
715
|
+
account,
|
|
716
|
+
"proxy_egress_ready",
|
|
717
|
+
`Manual proxy verified: ${verifiedEgressIp} (${egressProbe.samples} checks, ${account.proxyTimezone || "timezone unknown"}, ${account.proxyLocale || "locale unknown"})`,
|
|
718
|
+
);
|
|
719
|
+
await this.persistJobSnapshot(job, { forcePreview: false });
|
|
720
|
+
}
|
|
721
|
+
|
|
593
722
|
if (job.cancelRequested) {
|
|
594
723
|
throw new Error("Job cancelled before ordering phone number");
|
|
595
724
|
}
|
|
@@ -636,6 +765,22 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
636
765
|
if (job.cancelRequested) {
|
|
637
766
|
throw new Error("Job cancelled before ordering phone number");
|
|
638
767
|
}
|
|
768
|
+
if (job.proxyPoolMode === "manual" && account.proxyUrl) {
|
|
769
|
+
this.setAccountStep(
|
|
770
|
+
account,
|
|
771
|
+
"rechecking_proxy_egress",
|
|
772
|
+
"Registration form is ready — confirming the pasted proxy stayed sticky",
|
|
773
|
+
);
|
|
774
|
+
await this.persistJobSnapshot(job, { forcePreview: false });
|
|
775
|
+
const secondProbe = await probeCodeBuddyProxyEgress(context);
|
|
776
|
+
requireStableProxyEgress(secondProbe, verifiedEgressIp);
|
|
777
|
+
this.setAccountStep(
|
|
778
|
+
account,
|
|
779
|
+
"proxy_egress_confirmed",
|
|
780
|
+
`Manual proxy remained on ${verifiedEgressIp}; safe to purchase one phone number`,
|
|
781
|
+
);
|
|
782
|
+
await this.persistJobSnapshot(job, { forcePreview: false });
|
|
783
|
+
}
|
|
639
784
|
this.setAccountStep(
|
|
640
785
|
account,
|
|
641
786
|
"ordering_number",
|
|
@@ -1483,6 +1628,62 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
1483
1628
|
job.manualFollowups.add(followupPromise);
|
|
1484
1629
|
}
|
|
1485
1630
|
|
|
1631
|
+
/**
|
|
1632
|
+
* A pasted proxy is intentionally single-worker. Recycle the whole CloakBrowser
|
|
1633
|
+
* process between accounts so its binary fingerprint and GeoIP profile cannot
|
|
1634
|
+
* leak from one registration into the next.
|
|
1635
|
+
*/
|
|
1636
|
+
async runWorker(job, workerId) {
|
|
1637
|
+
if (job.proxyPoolMode !== "manual") {
|
|
1638
|
+
return super.runWorker(job, workerId);
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
while (!job.cancelRequested) {
|
|
1642
|
+
const account = this.dequeueAccount(job, workerId);
|
|
1643
|
+
if (!account) return;
|
|
1644
|
+
|
|
1645
|
+
if (!job.browser) {
|
|
1646
|
+
try {
|
|
1647
|
+
job.browser = await this.browserLauncher({
|
|
1648
|
+
...job,
|
|
1649
|
+
proxyUrls: account.proxyUrl ? [account.proxyUrl] : job.proxyUrls,
|
|
1650
|
+
});
|
|
1651
|
+
} catch (error) {
|
|
1652
|
+
this.finalizeAccount(account, "failed", {
|
|
1653
|
+
error: error?.message || "Manual proxy browser launch failed",
|
|
1654
|
+
step: "failed",
|
|
1655
|
+
message: error?.message || "Manual proxy browser launch failed",
|
|
1656
|
+
});
|
|
1657
|
+
await this.persistJobSnapshot(job, { forcePreview: true });
|
|
1658
|
+
continue;
|
|
1659
|
+
}
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1662
|
+
try {
|
|
1663
|
+
await this.processAccount(job, account, workerId);
|
|
1664
|
+
} catch (error) {
|
|
1665
|
+
if (account.status === "running") {
|
|
1666
|
+
this.finalizeAccount(account, "failed", {
|
|
1667
|
+
error: error?.message || "Unexpected manual proxy worker failure",
|
|
1668
|
+
step: "failed",
|
|
1669
|
+
message: error?.message || "Unexpected manual proxy worker failure",
|
|
1670
|
+
});
|
|
1671
|
+
await this.persistJobSnapshot(job, { forcePreview: true });
|
|
1672
|
+
}
|
|
1673
|
+
} finally {
|
|
1674
|
+
if (job.manualFollowups.size > 0) {
|
|
1675
|
+
await Promise.allSettled([...job.manualFollowups]);
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
if (job.browser) {
|
|
1679
|
+
const browser = job.browser;
|
|
1680
|
+
job.browser = null;
|
|
1681
|
+
await forceCloseBrowser(browser).catch(() => null);
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1486
1687
|
/**
|
|
1487
1688
|
* Override cancelJob to abort in-flight 5sim polls AND force-close the browser.
|
|
1488
1689
|
* Previous CN override only aborted controllers — Chromium kept spinning (VPS hang).
|
|
@@ -1589,6 +1790,9 @@ function sanitizeCnJob(job, extras = {}) {
|
|
|
1589
1790
|
phone: account.phone,
|
|
1590
1791
|
fiveSimOrderId: account.fiveSimOrderId,
|
|
1591
1792
|
proxyUrl: account.proxyUrl ? maskProxyUrl(account.proxyUrl) : null,
|
|
1793
|
+
egressIp: account.egressIp || null,
|
|
1794
|
+
proxyTimezone: account.proxyTimezone || null,
|
|
1795
|
+
proxyLocale: account.proxyLocale || null,
|
|
1592
1796
|
status: account.status,
|
|
1593
1797
|
error: account.error,
|
|
1594
1798
|
connectionId: account.connectionId,
|
|
@@ -1643,14 +1847,18 @@ export {
|
|
|
1643
1847
|
|
|
1644
1848
|
export const __test__ = {
|
|
1645
1849
|
clampCnConcurrency,
|
|
1850
|
+
resolveCnJobConcurrency,
|
|
1646
1851
|
sanitizeCnJob,
|
|
1647
1852
|
defaultPhoneFormatter,
|
|
1648
1853
|
defaultSaveCodeBuddyCnConnection,
|
|
1649
1854
|
buildCnSummary,
|
|
1650
1855
|
hasRestrictedConsoleEvidence,
|
|
1651
1856
|
isLoginHtmlProbe,
|
|
1857
|
+
parseEgressIp,
|
|
1652
1858
|
parseConsoleProbeBody,
|
|
1859
|
+
probeCodeBuddyProxyEgress,
|
|
1653
1860
|
probeCodeBuddyConsoleAccounts,
|
|
1861
|
+
requireStableProxyEgress,
|
|
1654
1862
|
withTimeoutCleanup,
|
|
1655
1863
|
AUTOMATION_LIMITS: {
|
|
1656
1864
|
registrationHardTimeoutMs: CODEBUDDY_CN_ACCOUNT_HARD_TIMEOUT_MS,
|
|
@@ -1665,5 +1873,6 @@ export const __test__ = {
|
|
|
1665
1873
|
lowMemoryManualTimeoutMs: CODEBUDDY_CN_LOW_MEM_MANUAL_TIMEOUT_MS,
|
|
1666
1874
|
resourceCloseTimeoutMs: CODEBUDDY_CN_RESOURCE_CLOSE_TIMEOUT_MS,
|
|
1667
1875
|
fiveSimSettleTimeoutMs: CODEBUDDY_CN_FIVESIM_SETTLE_TIMEOUT_MS,
|
|
1876
|
+
egressProbeTimeoutMs: CODEBUDDY_CN_EGRESS_PROBE_TIMEOUT_MS,
|
|
1668
1877
|
},
|
|
1669
1878
|
};
|
|
@@ -384,10 +384,13 @@ export { parsePlaywrightProxy };
|
|
|
384
384
|
* @param {"hongkong"|"china"|string} [opts.region] Used by codebuddy-cn profile
|
|
385
385
|
* @param {string|number} [opts.fingerprintSeed] Per-account seed for viewport/HW fingerprint
|
|
386
386
|
* @param {boolean} [opts.randomizeFingerprint] Force fingerprint even outside codebuddy-cn
|
|
387
|
+
* @param {boolean} [opts.nativeCloakProfile] Keep CloakBrowser's binary profile untouched
|
|
387
388
|
*/
|
|
388
389
|
export async function createFreshContext(browser, proxy, opts = {}) {
|
|
389
390
|
let effectiveProxy = proxy;
|
|
390
391
|
let socksBridge = null;
|
|
392
|
+
const useNativeCloakProfile =
|
|
393
|
+
opts.profile === "codebuddy-cn" && opts.nativeCloakProfile === true;
|
|
391
394
|
|
|
392
395
|
// Chromium cannot authenticate SOCKS5 — bridge to local HTTP proxy first
|
|
393
396
|
if (proxy) {
|
|
@@ -406,9 +409,8 @@ export async function createFreshContext(browser, proxy, opts = {}) {
|
|
|
406
409
|
// Per-account fingerprint (viewport + navigator.* + screen) via init script.
|
|
407
410
|
// Sticky residential IP alone still clusters if every session shares the same HW profile.
|
|
408
411
|
const wantFingerprint =
|
|
409
|
-
|
|
410
|
-
opts.randomizeFingerprint === true ||
|
|
411
|
-
opts.fingerprintSeed != null;
|
|
412
|
+
!useNativeCloakProfile
|
|
413
|
+
&& (opts.randomizeFingerprint === true || opts.fingerprintSeed != null);
|
|
412
414
|
let fingerprint = null;
|
|
413
415
|
if (wantFingerprint) {
|
|
414
416
|
try {
|
|
@@ -434,22 +436,20 @@ export async function createFreshContext(browser, proxy, opts = {}) {
|
|
|
434
436
|
fingerprint = null;
|
|
435
437
|
}
|
|
436
438
|
}
|
|
437
|
-
if (!contextOptions.viewport) {
|
|
439
|
+
if (!contextOptions.viewport && !useNativeCloakProfile) {
|
|
438
440
|
contextOptions.viewport = { width: 1280, height: 900 };
|
|
439
441
|
}
|
|
440
442
|
// Ignore HTTPS errors common through residential proxies / MITM chains
|
|
441
443
|
contextOptions.ignoreHTTPSErrors = true;
|
|
442
444
|
|
|
443
|
-
|
|
444
|
-
if (opts.profile === "codebuddy-cn") {
|
|
445
|
+
if (opts.profile === "codebuddy-cn" && !useNativeCloakProfile) {
|
|
445
446
|
const isChinaMainland = String(opts.region || "").toLowerCase() === "china";
|
|
446
447
|
contextOptions.locale = "zh-CN";
|
|
447
448
|
contextOptions.languages = ["zh-CN", "zh", "en-US", "en"];
|
|
448
449
|
contextOptions.timezoneId = isChinaMainland ? "Asia/Shanghai" : "Asia/Hong_Kong";
|
|
449
|
-
// Approximate city coords matching default 5sim regions (HK vs mainland)
|
|
450
450
|
contextOptions.geolocation = isChinaMainland
|
|
451
|
-
? { longitude: 121.4737, latitude: 31.2304 }
|
|
452
|
-
: { longitude: 114.1694, latitude: 22.3193 };
|
|
451
|
+
? { longitude: 121.4737, latitude: 31.2304 }
|
|
452
|
+
: { longitude: 114.1694, latitude: 22.3193 };
|
|
453
453
|
contextOptions.permissions = ["geolocation"];
|
|
454
454
|
contextOptions.extraHTTPHeaders = {
|
|
455
455
|
...(contextOptions.extraHTTPHeaders || {}),
|
|
@@ -457,6 +457,9 @@ export async function createFreshContext(browser, proxy, opts = {}) {
|
|
|
457
457
|
};
|
|
458
458
|
}
|
|
459
459
|
|
|
460
|
+
// A pasted proxy inherits CloakBrowser's binary-level locale/timezone/WebRTC
|
|
461
|
+
// profile. Phone country and residential proxy country may legitimately differ.
|
|
462
|
+
|
|
460
463
|
// Allow callers to override any field
|
|
461
464
|
if (opts.locale) contextOptions.locale = opts.locale;
|
|
462
465
|
if (opts.timezoneId) contextOptions.timezoneId = opts.timezoneId;
|
|
File without changes
|
|
File without changes
|