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
package/cli/app/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# v1.0.151 (2026-07-27)
|
|
2
|
+
|
|
3
|
+
## Fixes
|
|
4
|
+
- **Deterministic DataImpulse sticky sessions**: CodeBuddy CN now initializes pasted proxies with sequential CN-accessible exit checks, preventing parallel first requests from racing sticky-port assignment and falsely reporting an immediate rotation.
|
|
5
|
+
- **Exit-aligned CloakBrowser identity**: the verified residential exit is applied directly to WebRTC, timezone, and locale flags instead of allowing failed foreign echo services to substitute the proxy gateway address.
|
|
6
|
+
- **Safe pre-purchase verification**: browser-context checks use the same sequential fallback order and compare the initial exit with the exit immediately before the 5sim purchase, without modifying pasted credentials or Proxy Pool data.
|
|
7
|
+
|
|
8
|
+
# v1.0.150 (2026-07-27)
|
|
9
|
+
|
|
10
|
+
## Fixes
|
|
11
|
+
- **Coherent pasted-proxy browser identity**: CodeBuddy CN manual-proxy jobs now preserve CloakBrowser's binary-level exit IP, WebRTC, timezone, locale, and native viewport instead of overwriting them from the SMS number region.
|
|
12
|
+
- **Safe sticky-egress preflight**: manual proxies are verified against multiple exit-IP services at launch and immediately before the 5sim purchase, so unverifiable, rotating, or changed exits fail before a phone number is ordered.
|
|
13
|
+
- **Isolated manual registrations**: pasted-proxy jobs enforce one worker and recycle the complete CloakBrowser process between accounts, including cleanup after unexpected worker failures, without changing Proxy Pool selection or data.
|
|
14
|
+
|
|
1
15
|
# v1.0.149 (2026-07-27)
|
|
2
16
|
|
|
3
17
|
## Fixes
|
package/cli/app/package.json
CHANGED
package/cli/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
|
+
import net from "node:net";
|
|
4
|
+
import { ProxyAgent, fetch as undiciFetch } from "undici";
|
|
3
5
|
|
|
4
6
|
const requireFromHere = createRequire(import.meta.url);
|
|
5
7
|
|
|
@@ -12,6 +14,28 @@ const requireFromHere = createRequire(import.meta.url);
|
|
|
12
14
|
export const DEFAULT_BULK_IMPORT_ENGINE = "cloakbrowser";
|
|
13
15
|
|
|
14
16
|
const SUPPORTED_ENGINES = new Set(["cloakbrowser"]);
|
|
17
|
+
const CLOAK_PROXY_PROFILES = new WeakMap();
|
|
18
|
+
|
|
19
|
+
export const PROXY_EGRESS_ECHO_URLS = Object.freeze([
|
|
20
|
+
"https://myip.ipip.net",
|
|
21
|
+
"https://ip.3322.net",
|
|
22
|
+
"https://cip.cc",
|
|
23
|
+
]);
|
|
24
|
+
|
|
25
|
+
const PROXY_GEO_PROFILES = Object.freeze({
|
|
26
|
+
CN: { timezone: "Asia/Shanghai", locale: "zh-CN" },
|
|
27
|
+
HK: { timezone: "Asia/Hong_Kong", locale: "zh-HK" },
|
|
28
|
+
MO: { timezone: "Asia/Macau", locale: "zh-MO" },
|
|
29
|
+
TW: { timezone: "Asia/Taipei", locale: "zh-TW" },
|
|
30
|
+
SG: { timezone: "Asia/Singapore", locale: "en-SG" },
|
|
31
|
+
JP: { timezone: "Asia/Tokyo", locale: "ja-JP" },
|
|
32
|
+
KR: { timezone: "Asia/Seoul", locale: "ko-KR" },
|
|
33
|
+
US: { locale: "en-US" },
|
|
34
|
+
GB: { locale: "en-GB" },
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const DEFAULT_PROXY_PROBE_TIMEOUT_MS = 8_000;
|
|
38
|
+
const DEFAULT_PROXY_GEO_TIMEOUT_MS = 5_000;
|
|
15
39
|
|
|
16
40
|
export function normalizeBulkImportEngine(value) {
|
|
17
41
|
if (typeof value !== "string" || !value.trim()) return DEFAULT_BULK_IMPORT_ENGINE;
|
|
@@ -207,12 +231,250 @@ export async function newStealthContext(browser, options = {}) {
|
|
|
207
231
|
return context;
|
|
208
232
|
}
|
|
209
233
|
|
|
234
|
+
export function parseProxyEgressIp(value) {
|
|
235
|
+
const raw = String(value || "").trim();
|
|
236
|
+
if (!raw) return null;
|
|
237
|
+
if (net.isIP(raw)) return raw;
|
|
238
|
+
|
|
239
|
+
try {
|
|
240
|
+
const parsed = JSON.parse(raw);
|
|
241
|
+
for (const key of ["ip", "query", "address", "origin"]) {
|
|
242
|
+
const candidate = String(parsed?.[key] || "").trim();
|
|
243
|
+
if (net.isIP(candidate)) return candidate;
|
|
244
|
+
}
|
|
245
|
+
} catch {
|
|
246
|
+
// Plain-text echo services are expected here.
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
for (const match of raw.matchAll(/(?:\d{1,3}\.){3}\d{1,3}/g)) {
|
|
250
|
+
if (net.isIP(match[0])) return match[0];
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const tokens = raw.split(/[\s,;()[\]{}<>"'=\uFF1A]+/);
|
|
254
|
+
for (const token of tokens) {
|
|
255
|
+
const candidate = token.replace(/^[^0-9a-f:]+|[^0-9a-f:]+$/gi, "");
|
|
256
|
+
if (candidate.includes(":") && net.isIP(candidate)) return candidate;
|
|
257
|
+
}
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function inferProxyRegionalProfile(proxyUrl) {
|
|
262
|
+
try {
|
|
263
|
+
const parsed = new URL(String(proxyUrl || "").trim());
|
|
264
|
+
const username = decodeURIComponent(parsed.username || "");
|
|
265
|
+
const matches = [...username.matchAll(/(?:^|__)cr\.([a-z]{2})(?=__|$)/gi)];
|
|
266
|
+
const countryCode = matches.at(-1)?.[1]?.toUpperCase() || null;
|
|
267
|
+
const regional = countryCode ? PROXY_GEO_PROFILES[countryCode] : null;
|
|
268
|
+
return regional?.timezone && regional?.locale
|
|
269
|
+
? { countryCode, ...regional, source: "proxy-country" }
|
|
270
|
+
: null;
|
|
271
|
+
} catch {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
async function closeProxyAgent(agent) {
|
|
277
|
+
if (!agent) return;
|
|
278
|
+
if (typeof agent.close === "function") {
|
|
279
|
+
await Promise.resolve(agent.close()).catch(() => null);
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
if (typeof agent.destroy === "function") {
|
|
283
|
+
await Promise.resolve(agent.destroy()).catch(() => null);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Pin a fresh sticky proxy with one request at a time. Parallel first-use
|
|
289
|
+
* requests can race session assignment on providers such as DataImpulse.
|
|
290
|
+
*/
|
|
291
|
+
export async function probeProxyEgressBeforeLaunch(
|
|
292
|
+
proxyUrl,
|
|
293
|
+
{
|
|
294
|
+
timeoutMs = DEFAULT_PROXY_PROBE_TIMEOUT_MS,
|
|
295
|
+
urls = PROXY_EGRESS_ECHO_URLS,
|
|
296
|
+
fetchImpl = undiciFetch,
|
|
297
|
+
createProxyAgent = (url) => new ProxyAgent(url),
|
|
298
|
+
} = {},
|
|
299
|
+
) {
|
|
300
|
+
let agent = null;
|
|
301
|
+
const attemptedUrls = [];
|
|
302
|
+
let lastError = null;
|
|
303
|
+
|
|
304
|
+
try {
|
|
305
|
+
try {
|
|
306
|
+
agent = createProxyAgent(proxyUrl);
|
|
307
|
+
} catch {
|
|
308
|
+
return {
|
|
309
|
+
ok: false,
|
|
310
|
+
ip: null,
|
|
311
|
+
url: null,
|
|
312
|
+
attempts: 0,
|
|
313
|
+
attemptedUrls,
|
|
314
|
+
error: "proxy agent setup failed",
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
for (const url of urls) {
|
|
319
|
+
attemptedUrls.push(url);
|
|
320
|
+
try {
|
|
321
|
+
const response = await fetchImpl(url, {
|
|
322
|
+
dispatcher: agent,
|
|
323
|
+
redirect: "follow",
|
|
324
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
325
|
+
headers: {
|
|
326
|
+
Accept: "text/plain, application/json;q=0.9, */*;q=0.1",
|
|
327
|
+
"Cache-Control": "no-cache",
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
if (!response?.ok) {
|
|
331
|
+
lastError = `HTTP ${response?.status || 0}`;
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const ip = parseProxyEgressIp(await response.text());
|
|
335
|
+
if (!ip) {
|
|
336
|
+
lastError = "exit-IP response was not recognized";
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
ok: true,
|
|
341
|
+
ip,
|
|
342
|
+
url,
|
|
343
|
+
attempts: attemptedUrls.length,
|
|
344
|
+
attemptedUrls,
|
|
345
|
+
error: null,
|
|
346
|
+
};
|
|
347
|
+
} catch (error) {
|
|
348
|
+
lastError = error?.name === "TimeoutError"
|
|
349
|
+
? `timed out after ${timeoutMs}ms`
|
|
350
|
+
: "request failed";
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return {
|
|
355
|
+
ok: false,
|
|
356
|
+
ip: null,
|
|
357
|
+
url: null,
|
|
358
|
+
attempts: attemptedUrls.length,
|
|
359
|
+
attemptedUrls,
|
|
360
|
+
error: lastError || "all exit-IP services failed",
|
|
361
|
+
};
|
|
362
|
+
} finally {
|
|
363
|
+
await closeProxyAgent(agent);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
async function lookupProxyGeoProfile(
|
|
368
|
+
egressIp,
|
|
369
|
+
{ timeoutMs = DEFAULT_PROXY_GEO_TIMEOUT_MS, fetchImpl = undiciFetch } = {},
|
|
370
|
+
) {
|
|
371
|
+
try {
|
|
372
|
+
const response = await fetchImpl(`https://ipwho.is/${encodeURIComponent(egressIp)}`, {
|
|
373
|
+
redirect: "follow",
|
|
374
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
375
|
+
headers: { Accept: "application/json" },
|
|
376
|
+
});
|
|
377
|
+
if (!response?.ok) return null;
|
|
378
|
+
const data = await response.json();
|
|
379
|
+
if (data?.success === false) return null;
|
|
380
|
+
const countryCode = String(data?.country_code || "").trim().toUpperCase();
|
|
381
|
+
const timezone = String(data?.timezone?.id || "").trim();
|
|
382
|
+
const locale = PROXY_GEO_PROFILES[countryCode]?.locale
|
|
383
|
+
|| (countryCode ? `en-${countryCode}` : "");
|
|
384
|
+
return timezone && locale
|
|
385
|
+
? { countryCode: countryCode || null, timezone, locale, source: "ip-geo" }
|
|
386
|
+
: null;
|
|
387
|
+
} catch {
|
|
388
|
+
return null;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export async function resolveProxyLaunchProfile(proxyUrl, options = {}) {
|
|
393
|
+
const probe = await probeProxyEgressBeforeLaunch(proxyUrl, options);
|
|
394
|
+
if (!probe.ok || !probe.ip) {
|
|
395
|
+
const error = new Error(
|
|
396
|
+
`Manual proxy exit IP could not be verified before browser launch (${probe.error || "no response"}); no phone number was purchased`,
|
|
397
|
+
);
|
|
398
|
+
error.code = "CLOAKBROWSER_PROXY_EGRESS_UNAVAILABLE";
|
|
399
|
+
throw error;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
const regional = inferProxyRegionalProfile(proxyUrl)
|
|
403
|
+
|| await lookupProxyGeoProfile(probe.ip, options);
|
|
404
|
+
if (!regional?.timezone || !regional?.locale) {
|
|
405
|
+
const error = new Error(
|
|
406
|
+
"Manual proxy region could not be aligned with CloakBrowser; no phone number was purchased",
|
|
407
|
+
);
|
|
408
|
+
error.code = "CLOAKBROWSER_PROXY_GEOIP_UNAVAILABLE";
|
|
409
|
+
throw error;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
return Object.freeze({
|
|
413
|
+
egressIp: probe.ip,
|
|
414
|
+
timezone: regional.timezone,
|
|
415
|
+
locale: regional.locale,
|
|
416
|
+
countryCode: regional.countryCode || null,
|
|
417
|
+
source: regional.source,
|
|
418
|
+
probeUrl: probe.url,
|
|
419
|
+
probeAttempts: probe.attempts,
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export function buildVerifiedProxyLaunchOptions(launchOpts, proxyProfile) {
|
|
424
|
+
const managedPrefixes = [
|
|
425
|
+
"--fingerprint-webrtc-ip=",
|
|
426
|
+
"--fingerprint-timezone=",
|
|
427
|
+
"--fingerprint-locale=",
|
|
428
|
+
"--lang=",
|
|
429
|
+
];
|
|
430
|
+
const args = (launchOpts?.args || []).filter(
|
|
431
|
+
(arg) => !managedPrefixes.some((prefix) => String(arg).startsWith(prefix)),
|
|
432
|
+
);
|
|
433
|
+
args.push(
|
|
434
|
+
`--fingerprint-webrtc-ip=${proxyProfile.egressIp}`,
|
|
435
|
+
`--fingerprint-timezone=${proxyProfile.timezone}`,
|
|
436
|
+
`--lang=${proxyProfile.locale}`,
|
|
437
|
+
`--fingerprint-locale=${proxyProfile.locale}`,
|
|
438
|
+
);
|
|
439
|
+
return {
|
|
440
|
+
...launchOpts,
|
|
441
|
+
args,
|
|
442
|
+
timezone: proxyProfile.timezone,
|
|
443
|
+
locale: proxyProfile.locale,
|
|
444
|
+
geoip: false,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
|
|
210
448
|
/**
|
|
211
449
|
* CloakBrowser — sole bulk-import engine (patched stealth Chromium).
|
|
212
450
|
* Prefer headed (headless=false); Turnstile / Google bot checks often fail headless.
|
|
213
451
|
* Auto-installs into ~/.zevai/runtime via cloakbrowserRuntime.
|
|
214
452
|
*/
|
|
215
|
-
|
|
453
|
+
export function extractCloakProxyProfile(args = []) {
|
|
454
|
+
const readFlag = (name) => {
|
|
455
|
+
const prefix = `${name}=`;
|
|
456
|
+
const value = (args || []).find((arg) => String(arg).startsWith(prefix));
|
|
457
|
+
return value ? String(value).slice(prefix.length) : null;
|
|
458
|
+
};
|
|
459
|
+
return {
|
|
460
|
+
egressIp: readFlag("--fingerprint-webrtc-ip"),
|
|
461
|
+
timezone: readFlag("--fingerprint-timezone"),
|
|
462
|
+
locale: readFlag("--fingerprint-locale") || readFlag("--lang"),
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
export function getCloakProxyProfile(browser) {
|
|
467
|
+
return browser && typeof browser === "object"
|
|
468
|
+
? CLOAK_PROXY_PROFILES.get(browser) || null
|
|
469
|
+
: null;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
async function launchCloakbrowser({
|
|
473
|
+
proxyUrl,
|
|
474
|
+
headless = false,
|
|
475
|
+
windowSize = null,
|
|
476
|
+
requireProxyGeoip = false,
|
|
477
|
+
} = {}) {
|
|
216
478
|
const { ensureDisplayForHeadedBrowser } = await import("./displayEnv.js");
|
|
217
479
|
|
|
218
480
|
const runtime = loadRuntimeHelper("cloakbrowserRuntime");
|
|
@@ -259,18 +521,37 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
259
521
|
launchOpts.geoip = true;
|
|
260
522
|
}
|
|
261
523
|
if (windowSize?.width && windowSize?.height) {
|
|
262
|
-
|
|
524
|
+
// Keep headed contexts at viewport:null so dimensions follow the real Xvfb
|
|
525
|
+
// window. A Playwright viewport here overrides CloakBrowser's coherent window.
|
|
526
|
+
launchOpts.args = [`--window-size=${windowSize.width},${windowSize.height}`];
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
let effectiveLaunchOpts = launchOpts;
|
|
530
|
+
let proxyProfile = null;
|
|
531
|
+
if (proxyUrl && requireProxyGeoip) {
|
|
532
|
+
// Resolve the exit ourselves through CN-accessible endpoints. CloakBrowser's
|
|
533
|
+
// foreign echo fallbacks can time out and mistake the gateway IP for the exit.
|
|
534
|
+
proxyProfile = await resolveProxyLaunchProfile(proxyUrl);
|
|
535
|
+
effectiveLaunchOpts = buildVerifiedProxyLaunchOptions(launchOpts, proxyProfile);
|
|
263
536
|
}
|
|
264
537
|
|
|
265
538
|
try {
|
|
266
539
|
// Do not wrap with stock stealth scripts — CloakBrowser patches at binary level.
|
|
267
|
-
|
|
540
|
+
const browser = await cloak.launch(effectiveLaunchOpts);
|
|
541
|
+
if (proxyProfile) {
|
|
542
|
+
CLOAK_PROXY_PROFILES.set(browser, Object.freeze({ ...proxyProfile }));
|
|
543
|
+
}
|
|
544
|
+
return browser;
|
|
268
545
|
} catch (error) {
|
|
269
546
|
const msg = String(error?.message || error || "");
|
|
270
547
|
if (!useHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
|
|
271
548
|
const display = ensureDisplayForHeadedBrowser();
|
|
272
549
|
if (display.ok) {
|
|
273
|
-
|
|
550
|
+
const browser = await cloak.launch(effectiveLaunchOpts);
|
|
551
|
+
if (proxyProfile) {
|
|
552
|
+
CLOAK_PROXY_PROFILES.set(browser, Object.freeze({ ...proxyProfile }));
|
|
553
|
+
}
|
|
554
|
+
return browser;
|
|
274
555
|
}
|
|
275
556
|
const friendly = new Error(
|
|
276
557
|
`${msg}\n\nVPS has no display. Install a virtual screen then retry:\n` +
|
|
@@ -299,6 +580,7 @@ export async function launchBulkImportBrowser({
|
|
|
299
580
|
proxyUrl,
|
|
300
581
|
headless = false,
|
|
301
582
|
windowSize = null,
|
|
583
|
+
requireProxyGeoip = false,
|
|
302
584
|
} = {}) {
|
|
303
585
|
// engine arg kept for API compatibility; always cloakbrowser.
|
|
304
586
|
void normalizeBulkImportEngine(engine);
|
|
@@ -306,6 +588,7 @@ export async function launchBulkImportBrowser({
|
|
|
306
588
|
proxyUrl,
|
|
307
589
|
headless: headless === true,
|
|
308
590
|
windowSize,
|
|
591
|
+
requireProxyGeoip,
|
|
309
592
|
});
|
|
310
593
|
}
|
|
311
594
|
|