zevairouter 1.0.134 → 1.0.136
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 +10 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +5 -5
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/required-server-files.json +4 -2
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/auth/login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +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/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +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]/cancel/route.js.nft.json +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]/manual/[workerId]/route.js.nft.json +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/[jobId]/route.js.nft.json +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/latest/route.js.nft.json +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/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +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]/cancel/route.js.nft.json +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]/manual/[workerId]/route.js.nft.json +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/[jobId]/route.js.nft.json +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/latest/route.js.nft.json +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/bulk-import/route.js.nft.json +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/kiro/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +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]/cancel/route.js.nft.json +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]/manual/[workerId]/route.js.nft.json +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/[jobId]/route.js.nft.json +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/latest/route.js.nft.json +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/oauth/qoder/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +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/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +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/providers/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +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/route.js.nft.json +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/translator/console-logs/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +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/route.js.nft.json +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/shutdown/route.js.nft.json +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/api/version/update/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +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.js.nft.json +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.js.nft.json +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 +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
- 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 +1 -1
- 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.js.nft.json +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/manifest.webmanifest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/page.js.nft.json +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 +5 -5
- 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/412.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4566.js +1 -0
- 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 +9 -50
- package/cli/app/.next-cli-build/server/chunks/6269.js +1 -1
- 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/891.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/{5497-deeefbd0aa73d896.js → 5497-471618863a988f25.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/{85-112ea5e56e88ceda.js → 85-b04d094e538fab0d.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/automation/{page-8b7dfe7877ed43a1.js → page-d55c4e337a98302a.js} +1 -1
- package/cli/app/CHANGELOG.md +10 -0
- package/cli/app/cli/hooks/cloakbrowserRuntime.js +15 -7
- package/cli/app/cli/hooks/postinstall.js +12 -11
- package/cli/app/package.json +1 -1
- package/cli/app/server.js +1 -1
- package/cli/hooks/cloakbrowserRuntime.js +15 -7
- package/cli/hooks/postinstall.js +12 -11
- package/cli/package.json +1 -1
- package/next.config.mjs +6 -7
- package/package.json +1 -1
- package/scripts/start-standalone.mjs +3 -6
- package/src/app/(dashboard)/dashboard/automation/page.js +1 -1
- package/src/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -2
- package/src/lib/oauth/services/antigravityBulkImportManager.js +2 -0
- package/src/lib/oauth/services/bulkImportBrowserEngine.js +88 -343
- package/src/lib/oauth/services/cloudflareAiBulkImportManager.js +4 -13
- package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +7 -9
- package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +1 -1
- package/src/lib/oauth/services/kiroBulkImportManager.js +18 -9
- package/src/lib/oauth/services/kiroGoogleAutomation.js +5 -5
- package/src/lib/oauth/services/qoderBulkImportManager.js +7 -1
- package/src/shared/components/BulkAccountAutomationModal.js +3 -4
- package/src/shared/components/CodeBuddyCnPhoneRegisterModal.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8157.js +0 -1
- package/cli/app/cli/hooks/playwrightRuntime.js +0 -235
- package/cli/hooks/playwrightRuntime.js +0 -235
- /package/cli/app/.next-cli-build/static/{G9tIzsfVyPOqAvoGFJp7p → umVx1oTsstlbAeyUcBGhm}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{G9tIzsfVyPOqAvoGFJp7p → umVx1oTsstlbAeyUcBGhm}/_ssgManifest.js +0 -0
|
@@ -3,15 +3,30 @@ import { createRequire } from "node:module";
|
|
|
3
3
|
|
|
4
4
|
const requireFromHere = createRequire(import.meta.url);
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Automation browser engine: CloakBrowser only.
|
|
8
|
+
* Stock Playwright Chromium is retired for bulk import — CloakBrowser is a
|
|
9
|
+
* patched Chromium that passes Turnstile / bot checks (CF, Google, etc.).
|
|
10
|
+
* playwright-core remains a peer of cloakbrowser (drive API only; no stock browser).
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_BULK_IMPORT_ENGINE = "cloakbrowser";
|
|
13
|
+
|
|
14
|
+
const SUPPORTED_ENGINES = new Set(["cloakbrowser"]);
|
|
9
15
|
|
|
10
16
|
export function normalizeBulkImportEngine(value) {
|
|
11
|
-
if (typeof value !== "string") return DEFAULT_BULK_IMPORT_ENGINE;
|
|
17
|
+
if (typeof value !== "string" || !value.trim()) return DEFAULT_BULK_IMPORT_ENGINE;
|
|
12
18
|
const lower = value.trim().toLowerCase();
|
|
13
|
-
// aliases
|
|
14
|
-
if (
|
|
19
|
+
// Legacy aliases: everything maps to cloakbrowser (chromium/camoufox retired).
|
|
20
|
+
if (
|
|
21
|
+
lower === "cloak" ||
|
|
22
|
+
lower === "cloackbrowser" ||
|
|
23
|
+
lower === "cloack" ||
|
|
24
|
+
lower === "cloak-browser" ||
|
|
25
|
+
lower === "chromium" ||
|
|
26
|
+
lower === "chrome" ||
|
|
27
|
+
lower === "camoufox" ||
|
|
28
|
+
lower === "playwright"
|
|
29
|
+
) {
|
|
15
30
|
return "cloakbrowser";
|
|
16
31
|
}
|
|
17
32
|
return SUPPORTED_ENGINES.has(lower) ? lower : DEFAULT_BULK_IMPORT_ENGINE;
|
|
@@ -25,68 +40,14 @@ function loadRuntimeHelper(name) {
|
|
|
25
40
|
}
|
|
26
41
|
}
|
|
27
42
|
|
|
28
|
-
function loadPlaywrightRuntime() {
|
|
29
|
-
return loadRuntimeHelper("playwrightRuntime");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async function importPlaywright() {
|
|
33
|
-
const playwright = await import("playwright");
|
|
34
|
-
return playwright.chromium ?? playwright.default?.chromium ?? null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* WebGL / UA / platform must match. Spoofing Intel Iris on a Linux VPS UA is a
|
|
39
|
-
* classic bot signal and triggers Google CAPTCHA even at high concurrency.
|
|
40
|
-
* (Used to work when fingerprint was consistent or less checked.)
|
|
41
|
-
*/
|
|
42
|
-
function getStealthPlatformProfile() {
|
|
43
|
-
const platform = typeof process !== "undefined" ? process.platform : "linux";
|
|
44
|
-
if (platform === "darwin") {
|
|
45
|
-
return {
|
|
46
|
-
platform,
|
|
47
|
-
languages: ["en-US", "en"],
|
|
48
|
-
webglVendor: "Google Inc. (Apple)",
|
|
49
|
-
webglRenderer: "ANGLE (Apple, ANGLE Metal Renderer: Apple M1, Unspecified Version)",
|
|
50
|
-
uaPlatform: "Macintosh; Intel Mac OS X 10_15_7",
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
if (platform === "win32") {
|
|
54
|
-
return {
|
|
55
|
-
platform,
|
|
56
|
-
languages: ["en-US", "en"],
|
|
57
|
-
webglVendor: "Google Inc. (NVIDIA)",
|
|
58
|
-
webglRenderer: "ANGLE (NVIDIA, NVIDIA GeForce GTX 1660 Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
|
59
|
-
uaPlatform: "Windows NT 10.0; Win64; x64",
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// Linux VPS / Xvfb — Mesa/SwiftShader style, NOT Mac Iris
|
|
63
|
-
return {
|
|
64
|
-
platform: "linux",
|
|
65
|
-
languages: ["en-US", "en"],
|
|
66
|
-
webglVendor: "Google Inc. (Google)",
|
|
67
|
-
webglRenderer: "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
|
|
68
|
-
uaPlatform: "X11; Linux x86_64",
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
43
|
/**
|
|
73
44
|
* Seeded fingerprint so each account/session looks like a different real desktop
|
|
74
45
|
* instead of the same 900x700 + identical navigator.* cluster (Tencent risk signal).
|
|
75
|
-
*
|
|
46
|
+
* Do NOT spoof WebGL (CloakBrowser already patches at binary level).
|
|
76
47
|
*
|
|
77
48
|
* @param {string|number} [seed]
|
|
78
|
-
* @returns {{
|
|
79
|
-
* viewport: { width: number, height: number },
|
|
80
|
-
* deviceScaleFactor: number,
|
|
81
|
-
* hardwareConcurrency: number,
|
|
82
|
-
* deviceMemory: number,
|
|
83
|
-
* maxTouchPoints: number,
|
|
84
|
-
* screen: { width: number, height: number, availWidth: number, availHeight: number, colorDepth: number, pixelDepth: number },
|
|
85
|
-
* seed: string,
|
|
86
|
-
* }}
|
|
87
49
|
*/
|
|
88
50
|
export function buildAccountFingerprint(seed) {
|
|
89
|
-
// Deterministic byte stream from seed (stable retry of same account = same fingerprint).
|
|
90
51
|
let buf = createHash("sha256").update(String(seed ?? `${Date.now()}-${Math.random()}`)).digest();
|
|
91
52
|
let i = 0;
|
|
92
53
|
const nextByte = () => {
|
|
@@ -99,7 +60,6 @@ export function buildAccountFingerprint(seed) {
|
|
|
99
60
|
const next = () => nextByte() / 256;
|
|
100
61
|
const pick = (arr) => arr[Math.floor(next() * arr.length) % arr.length];
|
|
101
62
|
|
|
102
|
-
// Common real desktop resolutions (avoid Playwright default 900x700 bot shape).
|
|
103
63
|
const base = pick([
|
|
104
64
|
{ width: 1366, height: 768 },
|
|
105
65
|
{ width: 1440, height: 900 },
|
|
@@ -111,21 +71,17 @@ export function buildAccountFingerprint(seed) {
|
|
|
111
71
|
{ width: 1680, height: 1050 },
|
|
112
72
|
{ width: 2560, height: 1440 },
|
|
113
73
|
]);
|
|
114
|
-
// Tiny noise so two accounts with same base size still differ slightly.
|
|
115
74
|
const width = base.width - (nextByte() % 17);
|
|
116
75
|
const height = base.height - (nextByte() % 13);
|
|
117
76
|
const taskbar = pick([0, 30, 40, 48]);
|
|
118
77
|
const colorDepth = pick([24, 30, 32]);
|
|
119
|
-
const hardwareConcurrency = pick([4, 6, 8, 8, 12, 16]);
|
|
120
|
-
const deviceMemory = pick([4, 8, 8, 16]);
|
|
121
|
-
const deviceScaleFactor = pick([1, 1, 1.25, 1.5, 2]);
|
|
122
78
|
|
|
123
79
|
return {
|
|
124
80
|
seed: String(seed ?? ""),
|
|
125
81
|
viewport: { width, height },
|
|
126
|
-
deviceScaleFactor,
|
|
127
|
-
hardwareConcurrency,
|
|
128
|
-
deviceMemory,
|
|
82
|
+
deviceScaleFactor: pick([1, 1, 1.25, 1.5, 2]),
|
|
83
|
+
hardwareConcurrency: pick([4, 6, 8, 8, 12, 16]),
|
|
84
|
+
deviceMemory: pick([4, 8, 8, 16]),
|
|
129
85
|
maxTouchPoints: 0,
|
|
130
86
|
screen: {
|
|
131
87
|
width,
|
|
@@ -138,31 +94,24 @@ export function buildAccountFingerprint(seed) {
|
|
|
138
94
|
};
|
|
139
95
|
}
|
|
140
96
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const fp = overrides.fingerprint && typeof overrides.fingerprint === "object"
|
|
147
|
-
? overrides.fingerprint
|
|
148
|
-
: null;
|
|
149
|
-
// Inject as JSON so quotes in renderer strings stay safe.
|
|
97
|
+
/**
|
|
98
|
+
* Light init script for per-account HW/screen noise.
|
|
99
|
+
* Avoids webdriver/WebGL patches that conflict with CloakBrowser binary stealth.
|
|
100
|
+
*/
|
|
101
|
+
export function buildFingerprintInitScript({ languages, fingerprint } = {}) {
|
|
150
102
|
return `
|
|
151
103
|
(() => {
|
|
152
104
|
const profile = ${JSON.stringify({
|
|
153
|
-
languages,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
maxTouchPoints: fp?.maxTouchPoints ?? null,
|
|
159
|
-
screen: fp?.screen ?? null,
|
|
105
|
+
languages: Array.isArray(languages) ? languages : null,
|
|
106
|
+
hardwareConcurrency: fingerprint?.hardwareConcurrency ?? null,
|
|
107
|
+
deviceMemory: fingerprint?.deviceMemory ?? null,
|
|
108
|
+
maxTouchPoints: fingerprint?.maxTouchPoints ?? null,
|
|
109
|
+
screen: fingerprint?.screen ?? null,
|
|
160
110
|
})};
|
|
161
111
|
try {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
Object.defineProperty(navigator, 'languages', { get: () => profile.languages.slice() });
|
|
112
|
+
if (Array.isArray(profile.languages) && profile.languages.length) {
|
|
113
|
+
Object.defineProperty(navigator, 'languages', { get: () => profile.languages.slice() });
|
|
114
|
+
}
|
|
166
115
|
} catch {}
|
|
167
116
|
try {
|
|
168
117
|
if (typeof profile.hardwareConcurrency === 'number') {
|
|
@@ -189,242 +138,42 @@ function buildStealthInitScript(overrides = {}) {
|
|
|
189
138
|
}
|
|
190
139
|
}
|
|
191
140
|
} catch {}
|
|
192
|
-
try {
|
|
193
|
-
Object.defineProperty(navigator, 'plugins', {
|
|
194
|
-
get: () => {
|
|
195
|
-
const plugins = [
|
|
196
|
-
{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
|
|
197
|
-
{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
|
|
198
|
-
{ name: 'Native Client', filename: 'internal-nacl-plugin', description: '' },
|
|
199
|
-
];
|
|
200
|
-
plugins.length = 3;
|
|
201
|
-
return plugins;
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
} catch {}
|
|
205
|
-
try {
|
|
206
|
-
const _origQuery = window.navigator.permissions.query.bind(window.navigator.permissions);
|
|
207
|
-
window.navigator.permissions.query = (parameters) =>
|
|
208
|
-
parameters && parameters.name === 'notifications'
|
|
209
|
-
? Promise.resolve({ state: Notification.permission })
|
|
210
|
-
: _origQuery(parameters);
|
|
211
|
-
} catch {}
|
|
212
|
-
try {
|
|
213
|
-
if (!window.chrome) window.chrome = {};
|
|
214
|
-
if (!window.chrome.runtime) window.chrome.runtime = {};
|
|
215
|
-
window.chrome.runtime.connect = window.chrome.runtime.connect || function() {};
|
|
216
|
-
window.chrome.runtime.sendMessage = window.chrome.runtime.sendMessage || function() {};
|
|
217
|
-
} catch {}
|
|
218
|
-
try {
|
|
219
|
-
const patch = (Proto) => {
|
|
220
|
-
if (!Proto || !Proto.prototype || !Proto.prototype.getParameter) return;
|
|
221
|
-
const orig = Proto.prototype.getParameter;
|
|
222
|
-
Proto.prototype.getParameter = function(parameter) {
|
|
223
|
-
// UNMASKED_VENDOR_WEBGL / UNMASKED_RENDERER_WEBGL
|
|
224
|
-
if (parameter === 37445) return profile.webglVendor;
|
|
225
|
-
if (parameter === 37446) return profile.webglRenderer;
|
|
226
|
-
return orig.call(this, parameter);
|
|
227
|
-
};
|
|
228
|
-
};
|
|
229
|
-
patch(WebGLRenderingContext);
|
|
230
|
-
if (typeof WebGL2RenderingContext !== 'undefined') patch(WebGL2RenderingContext);
|
|
231
|
-
} catch {}
|
|
232
141
|
})();
|
|
233
142
|
`;
|
|
234
143
|
}
|
|
235
144
|
|
|
236
|
-
function normalizeChromeVersion(browserVersion) {
|
|
237
|
-
const raw = String(browserVersion || "131.0.0.0");
|
|
238
|
-
// Playwright returns "131.0.6778.33" or sometimes "Chrome/131.0.6778.33"
|
|
239
|
-
const m = raw.match(/(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)/);
|
|
240
|
-
return m ? m[1] : "131.0.0.0";
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function getStealthUserAgent(browserVersion) {
|
|
244
|
-
const ver = normalizeChromeVersion(browserVersion);
|
|
245
|
-
const { uaPlatform } = getStealthPlatformProfile();
|
|
246
|
-
return `Mozilla/5.0 (${uaPlatform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${ver} Safari/537.36`;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
function wrapBrowserWithStealth(browser) {
|
|
250
|
-
const origNewContext = browser.newContext.bind(browser);
|
|
251
|
-
browser.newContext = async function (options = {}) {
|
|
252
|
-
// Fix HeadlessChrome in User-Agent — Google detects this server-side
|
|
253
|
-
if (!options.userAgent) {
|
|
254
|
-
let ver = "131.0.0.0";
|
|
255
|
-
try {
|
|
256
|
-
ver = typeof browser.version === "function" ? browser.version() : ver;
|
|
257
|
-
} catch {
|
|
258
|
-
/* ignore */
|
|
259
|
-
}
|
|
260
|
-
options.userAgent = getStealthUserAgent(ver);
|
|
261
|
-
}
|
|
262
|
-
// Default en-US; CodeBuddy CN / other regional flows pass locale+languages explicitly.
|
|
263
|
-
if (!options.locale) options.locale = "en-US";
|
|
264
|
-
// Keep navigator.languages aligned with context locale (mismatch is a common bot signal).
|
|
265
|
-
let languages = options.languages;
|
|
266
|
-
if (!Array.isArray(languages) || !languages.length) {
|
|
267
|
-
if (String(options.locale).toLowerCase().startsWith("zh")) {
|
|
268
|
-
languages = ["zh-CN", "zh", "en-US", "en"];
|
|
269
|
-
} else {
|
|
270
|
-
languages = ["en-US", "en"];
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
// `fingerprint` / `languages` are ours — strip before Playwright newContext.
|
|
274
|
-
const { languages: _drop, fingerprint, ...pwOptions } = { ...options, languages };
|
|
275
|
-
const stealthScript = buildStealthInitScript({ languages, fingerprint });
|
|
276
|
-
const ctx = await origNewContext(pwOptions);
|
|
277
|
-
await ctx.addInitScript(stealthScript);
|
|
278
|
-
return ctx;
|
|
279
|
-
};
|
|
280
|
-
return browser;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
145
|
/**
|
|
284
|
-
*
|
|
285
|
-
*
|
|
146
|
+
* Strip non-Playwright keys from newContext options and attach fingerprint init.
|
|
147
|
+
* CloakBrowser is Playwright-compatible — `languages` / `fingerprint` are ours only.
|
|
148
|
+
*
|
|
149
|
+
* @param {import('playwright-core').Browser} browser
|
|
150
|
+
* @param {object} options
|
|
286
151
|
*/
|
|
287
|
-
async function
|
|
288
|
-
const {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
async function launchChromium({ proxyUrl, headless = true, windowSize = null } = {}) {
|
|
299
|
-
const wantHeadless = headless !== false;
|
|
300
|
-
if (!wantHeadless) {
|
|
301
|
-
await ensureHeadedDisplayOrThrow();
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
// Prefer runtime helper first — under Next/webpack, dynamic import("playwright")
|
|
305
|
-
// often fails even when ~/.zevai/runtime has the package (Kiro mass-fail).
|
|
306
|
-
let chromium = null;
|
|
307
|
-
let importErr = null;
|
|
308
|
-
const runtime = loadPlaywrightRuntime();
|
|
309
|
-
if (runtime?.ensurePlaywrightRuntime) {
|
|
310
|
-
const ready = runtime.ensurePlaywrightRuntime({ silent: false });
|
|
311
|
-
if (ready.ok) {
|
|
312
|
-
const mod = ready.module || runtime.loadPlaywrightModule?.() || runtime.tryRequirePlaywright?.();
|
|
313
|
-
chromium = mod?.chromium ?? null;
|
|
314
|
-
} else if (ready.error) {
|
|
315
|
-
importErr = ready.error;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
if (!chromium) {
|
|
152
|
+
export async function newStealthContext(browser, options = {}) {
|
|
153
|
+
const {
|
|
154
|
+
languages,
|
|
155
|
+
fingerprint,
|
|
156
|
+
...pwOptions
|
|
157
|
+
} = options || {};
|
|
158
|
+
const context = await browser.newContext(pwOptions);
|
|
159
|
+
if (
|
|
160
|
+
(Array.isArray(languages) && languages.length) ||
|
|
161
|
+
(fingerprint && typeof fingerprint === "object")
|
|
162
|
+
) {
|
|
319
163
|
try {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
if (!chromium) {
|
|
327
|
-
const friendly = new Error(
|
|
328
|
-
`Playwright is not installed. Run "npm install -g playwright && npx playwright install chromium" or restart the bulk import to auto-install.`
|
|
329
|
-
);
|
|
330
|
-
friendly.code = "PLAYWRIGHT_PACKAGE_MISSING";
|
|
331
|
-
friendly.cause = importErr;
|
|
332
|
-
throw friendly;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
const width = windowSize?.width || (wantHeadless ? 1920 : 900);
|
|
336
|
-
const height = windowSize?.height || (wantHeadless ? 1080 : 700);
|
|
337
|
-
// Force bundled Chromium — never Google Chrome channel (/opt/google/chrome),
|
|
338
|
-
// which is missing on most VPS and caused "distribution 'chrome' is not found".
|
|
339
|
-
const options = {
|
|
340
|
-
headless: wantHeadless,
|
|
341
|
-
channel: undefined,
|
|
342
|
-
args: [
|
|
343
|
-
"--disable-blink-features=AutomationControlled",
|
|
344
|
-
"--disable-features=IsolateOrigins,site-per-process,AutomationControlled",
|
|
345
|
-
"--disable-infobars",
|
|
346
|
-
"--no-first-run",
|
|
347
|
-
"--no-default-browser-check",
|
|
348
|
-
"--disable-extensions",
|
|
349
|
-
"--disable-popup-blocking",
|
|
350
|
-
"--disable-backgrounding-occluded-windows",
|
|
351
|
-
"--disable-renderer-backgrounding",
|
|
352
|
-
"--disable-background-timer-throttling",
|
|
353
|
-
"--disable-ipc-flooding-protection",
|
|
354
|
-
"--password-store=basic",
|
|
355
|
-
"--use-mock-keychain",
|
|
356
|
-
`--window-size=${width},${height}`,
|
|
357
|
-
...(wantHeadless ? [] : ["--window-position=80,80"]),
|
|
358
|
-
],
|
|
359
|
-
ignoreDefaultArgs: ["--enable-automation"],
|
|
360
|
-
};
|
|
361
|
-
// Explicit bundled Chromium path when it exists (avoids channel=chrome hijack)
|
|
362
|
-
try {
|
|
363
|
-
const { existsSync } = await import("node:fs");
|
|
364
|
-
const exePath = typeof chromium.executablePath === "function" ? chromium.executablePath() : null;
|
|
365
|
-
if (exePath && existsSync(exePath)) options.executablePath = exePath;
|
|
366
|
-
} catch {
|
|
367
|
-
// ignore
|
|
368
|
-
}
|
|
369
|
-
let effectiveProxy = proxyUrl;
|
|
370
|
-
let socksBridge = null;
|
|
371
|
-
if (proxyUrl) {
|
|
372
|
-
const { ensureSocksHttpBridge, isSocksProxyUrl } = await import("./socksHttpBridge.js");
|
|
373
|
-
if (isSocksProxyUrl(proxyUrl)) {
|
|
374
|
-
socksBridge = await ensureSocksHttpBridge(proxyUrl);
|
|
375
|
-
if (socksBridge?.httpProxyUrl) effectiveProxy = socksBridge.httpProxyUrl;
|
|
376
|
-
}
|
|
377
|
-
const { parsePlaywrightProxy } = await import("./proxyUtils.js");
|
|
378
|
-
options.proxy = parsePlaywrightProxy(effectiveProxy) || { server: effectiveProxy };
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
let bridgeOwnedByBrowser = false;
|
|
382
|
-
const wrapLaunchedBrowser = (browser) => {
|
|
383
|
-
if (socksBridge) {
|
|
384
|
-
bridgeOwnedByBrowser = true;
|
|
385
|
-
const close = browser.close.bind(browser);
|
|
386
|
-
browser.close = async () => {
|
|
387
|
-
try {
|
|
388
|
-
return await close();
|
|
389
|
-
} finally {
|
|
390
|
-
await socksBridge.release();
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
return wrapBrowserWithStealth(browser);
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
try {
|
|
398
|
-
const browser = await chromium.launch(options);
|
|
399
|
-
return wrapLaunchedBrowser(browser);
|
|
400
|
-
} catch (error) {
|
|
401
|
-
const msg = String(error?.message || error || "");
|
|
402
|
-
if (!wantHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
|
|
403
|
-
await ensureHeadedDisplayOrThrow();
|
|
404
|
-
const browser = await chromium.launch(options);
|
|
405
|
-
return wrapLaunchedBrowser(browser);
|
|
406
|
-
}
|
|
407
|
-
// Retry without executablePath if channel/chrome confusion remains
|
|
408
|
-
if (/distribution ['\"]chrome['\"]|Executable doesn't exist|chrome-headless-shell/i.test(msg)) {
|
|
409
|
-
try {
|
|
410
|
-
const retryOpts = { ...options };
|
|
411
|
-
delete retryOpts.channel;
|
|
412
|
-
delete retryOpts.executablePath;
|
|
413
|
-
const browser = await chromium.launch(retryOpts);
|
|
414
|
-
return wrapLaunchedBrowser(browser);
|
|
415
|
-
} catch {
|
|
416
|
-
// fall through
|
|
417
|
-
}
|
|
164
|
+
await context.addInitScript(
|
|
165
|
+
buildFingerprintInitScript({ languages, fingerprint }),
|
|
166
|
+
);
|
|
167
|
+
} catch {
|
|
168
|
+
// older drivers may not support addInitScript
|
|
418
169
|
}
|
|
419
|
-
if (!bridgeOwnedByBrowser) await socksBridge?.release();
|
|
420
|
-
throw error;
|
|
421
170
|
}
|
|
171
|
+
return context;
|
|
422
172
|
}
|
|
423
173
|
|
|
424
174
|
/**
|
|
425
|
-
* CloakBrowser — patched stealth Chromium.
|
|
426
|
-
* (
|
|
427
|
-
* Prefer headed (headless=false); Turnstile usually fails headless.
|
|
175
|
+
* CloakBrowser — sole bulk-import engine (patched stealth Chromium).
|
|
176
|
+
* Prefer headed (headless=false); Turnstile / Google bot checks often fail headless.
|
|
428
177
|
* Auto-installs into ~/.zevai/runtime via cloakbrowserRuntime.
|
|
429
178
|
*/
|
|
430
179
|
async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = null } = {}) {
|
|
@@ -433,7 +182,6 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
433
182
|
const runtime = loadRuntimeHelper("cloakbrowserRuntime");
|
|
434
183
|
let cloak = null;
|
|
435
184
|
if (runtime?.ensureCloakbrowserRuntime) {
|
|
436
|
-
// Also installs mmdb-lib (required when geoip: true for proxy timezone match)
|
|
437
185
|
const ready = runtime.ensureCloakbrowserRuntime({ silent: false });
|
|
438
186
|
if (!ready.ok && ready.error) throw ready.error;
|
|
439
187
|
cloak = ready.module || runtime.loadCloakbrowserModule?.();
|
|
@@ -444,7 +192,7 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
444
192
|
cloak = mod?.default || mod;
|
|
445
193
|
} catch (err) {
|
|
446
194
|
const friendly = new Error(
|
|
447
|
-
`cloakbrowser is not installed.
|
|
195
|
+
`cloakbrowser is not installed. Bulk import will auto-install on next run, or run: cd ~/.zevai/runtime && npm install cloakbrowser mmdb-lib playwright-core`,
|
|
448
196
|
);
|
|
449
197
|
friendly.code = "CLOAKBROWSER_PACKAGE_MISSING";
|
|
450
198
|
friendly.cause = err;
|
|
@@ -457,11 +205,10 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
457
205
|
throw err;
|
|
458
206
|
}
|
|
459
207
|
|
|
460
|
-
let useHeadless = headless === true;
|
|
208
|
+
let useHeadless = headless === true;
|
|
461
209
|
if (!useHeadless) {
|
|
462
210
|
const display = ensureDisplayForHeadedBrowser();
|
|
463
211
|
if (!display.ok) {
|
|
464
|
-
// Prefer failing with install steps over silent headless Turnstile failure
|
|
465
212
|
throw display.error;
|
|
466
213
|
}
|
|
467
214
|
}
|
|
@@ -471,8 +218,7 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
471
218
|
humanize: true,
|
|
472
219
|
};
|
|
473
220
|
if (proxyUrl) {
|
|
474
|
-
//
|
|
475
|
-
// timezone/locale to proxy IP (critical for Turnstile / abusive-pattern checks).
|
|
221
|
+
// geoip aligns timezone/locale to proxy IP (Turnstile / abusive-pattern checks).
|
|
476
222
|
launchOpts.proxy = proxyUrl;
|
|
477
223
|
launchOpts.geoip = true;
|
|
478
224
|
}
|
|
@@ -481,10 +227,8 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
481
227
|
}
|
|
482
228
|
|
|
483
229
|
try {
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
// extra webdriver spoofing can conflict with its fingerprint.
|
|
487
|
-
return browser;
|
|
230
|
+
// Do not wrap with stock stealth scripts — CloakBrowser patches at binary level.
|
|
231
|
+
return await cloak.launch(launchOpts);
|
|
488
232
|
} catch (error) {
|
|
489
233
|
const msg = String(error?.message || error || "");
|
|
490
234
|
if (!useHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
|
|
@@ -495,7 +239,7 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
495
239
|
const friendly = new Error(
|
|
496
240
|
`${msg}\n\nVPS has no display. Install a virtual screen then retry:\n` +
|
|
497
241
|
` sudo apt-get update && sudo apt-get install -y xvfb\n` +
|
|
498
|
-
` sudo systemctl restart zevairouter
|
|
242
|
+
` sudo systemctl restart zevairouter\n` +
|
|
499
243
|
`ZevaiRouter auto-starts Xvfb when installed.`,
|
|
500
244
|
);
|
|
501
245
|
friendly.code = "NO_DISPLAY";
|
|
@@ -506,32 +250,35 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
|
|
|
506
250
|
}
|
|
507
251
|
}
|
|
508
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Launch the automation browser (CloakBrowser only).
|
|
255
|
+
* @param {object} [opts]
|
|
256
|
+
* @param {string} [opts.engine] ignored (always cloakbrowser; kept for API compat)
|
|
257
|
+
* @param {string|null} [opts.proxyUrl]
|
|
258
|
+
* @param {boolean} [opts.headless] default false (headed — Turnstile/Google)
|
|
259
|
+
* @param {{width:number,height:number}|null} [opts.windowSize]
|
|
260
|
+
*/
|
|
509
261
|
export async function launchBulkImportBrowser({
|
|
510
262
|
engine = DEFAULT_BULK_IMPORT_ENGINE,
|
|
511
263
|
proxyUrl,
|
|
512
|
-
headless =
|
|
264
|
+
headless = false,
|
|
513
265
|
windowSize = null,
|
|
514
266
|
} = {}) {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
});
|
|
523
|
-
}
|
|
524
|
-
return launchChromium({ proxyUrl, headless, windowSize });
|
|
267
|
+
// engine arg kept for API compatibility; always cloakbrowser.
|
|
268
|
+
void normalizeBulkImportEngine(engine);
|
|
269
|
+
return launchCloakbrowser({
|
|
270
|
+
proxyUrl,
|
|
271
|
+
headless: headless === true,
|
|
272
|
+
windowSize,
|
|
273
|
+
});
|
|
525
274
|
}
|
|
526
275
|
|
|
527
|
-
export function makeBrowserLauncher({ engine, proxyUrl, headless =
|
|
276
|
+
export function makeBrowserLauncher({ engine, proxyUrl, headless = false, windowSize = null } = {}) {
|
|
528
277
|
return () => launchBulkImportBrowser({ engine, proxyUrl, headless, windowSize });
|
|
529
278
|
}
|
|
530
279
|
|
|
531
280
|
/**
|
|
532
|
-
* Force-close
|
|
533
|
-
* the browser is stuck on a blackholed proxy / spinning renderer — on a 2GB VPS
|
|
534
|
-
* that pins CPU until reboot. Always race close() with a kill of the process tree.
|
|
281
|
+
* Force-close browser. Graceful close can hang on blackholed proxy / spinning renderer.
|
|
535
282
|
*/
|
|
536
283
|
export async function forceCloseBrowser(browser, { timeoutMs = 4_000 } = {}) {
|
|
537
284
|
if (!browser) return;
|
|
@@ -556,11 +303,9 @@ export async function forceCloseBrowser(browser, { timeoutMs = 4_000 } = {}) {
|
|
|
556
303
|
}
|
|
557
304
|
|
|
558
305
|
if (pid && Number.isFinite(pid) && pid > 1) {
|
|
559
|
-
// Still alive? SIGTERM then SIGKILL. Also try process-group kill (negative pid)
|
|
560
|
-
// so Chromium helper children die with the parent.
|
|
561
306
|
for (const signal of ["SIGTERM", "SIGKILL"]) {
|
|
562
307
|
try {
|
|
563
|
-
process.kill(pid, 0);
|
|
308
|
+
process.kill(pid, 0);
|
|
564
309
|
} catch {
|
|
565
310
|
break;
|
|
566
311
|
}
|
|
@@ -572,7 +317,7 @@ export async function forceCloseBrowser(browser, { timeoutMs = 4_000 } = {}) {
|
|
|
572
317
|
try {
|
|
573
318
|
process.kill(-pid, signal);
|
|
574
319
|
} catch {
|
|
575
|
-
// ignore
|
|
320
|
+
// ignore
|
|
576
321
|
}
|
|
577
322
|
if (signal === "SIGTERM") {
|
|
578
323
|
await new Promise((r) => setTimeout(r, 400));
|
|
@@ -255,21 +255,12 @@ async function defaultSaveCloudflareAiConnection({ apiKey, accountId, email, acc
|
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
async function defaultBrowserLauncher(job) {
|
|
258
|
-
const { launchBulkImportBrowser
|
|
259
|
-
|
|
260
|
-
);
|
|
261
|
-
// Cloudflare Turnstile on dash.cloudflare.com routinely blocks plain Playwright
|
|
262
|
-
// Chromium. CloakBrowser (patched Chromium) is the engine that used to pass it.
|
|
263
|
-
const engine = normalizeBulkImportEngine(
|
|
264
|
-
job?.engine || process.env.ZEVAI_CLOUDFLARE_ENGINE || "cloakbrowser",
|
|
265
|
-
);
|
|
258
|
+
const { launchBulkImportBrowser } = await import("./bulkImportBrowserEngine.js");
|
|
259
|
+
// All automation uses CloakBrowser (stock Chromium dropped). Headed by default.
|
|
266
260
|
const envHeadless = process.env.ZEVAI_CLOUDFLARE_HEADLESS ?? process.env.ZEVAI_KIRO_HEADLESS;
|
|
267
|
-
|
|
268
|
-
if (envHeadless === "1" || envHeadless === "true") headless = true;
|
|
269
|
-
else if (envHeadless === "0" || envHeadless === "false") headless = false;
|
|
270
|
-
else headless = false; // headed — Turnstile fails headless almost always
|
|
261
|
+
const headless = envHeadless === "1" || envHeadless === "true";
|
|
271
262
|
return launchBulkImportBrowser({
|
|
272
|
-
engine,
|
|
263
|
+
engine: job?.engine || "cloakbrowser",
|
|
273
264
|
headless,
|
|
274
265
|
windowSize: { width: 1280, height: 900 },
|
|
275
266
|
});
|
|
@@ -162,9 +162,7 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
162
162
|
pollIntervalMs = CODEBUDDY_CN_CONFIG.pollInterval,
|
|
163
163
|
storageName = "codebuddy-cn-bulk-import",
|
|
164
164
|
} = {}) {
|
|
165
|
-
//
|
|
166
|
-
// Linux VPS: default headless to cut RAM/CPU (2GB boxes OOM on headed+Xvfb).
|
|
167
|
-
// Desktop (macOS/Windows): headed so the operator can watch / solve captcha.
|
|
165
|
+
// CloakBrowser-only: proxy on launch + geoip. Headed by default (Turnstile/Tencent).
|
|
168
166
|
// Override: ZEVAI_CN_HEADLESS=0|1
|
|
169
167
|
const cnBrowserLauncher = browserLauncher || (async (job) => {
|
|
170
168
|
const { launchBulkImportBrowser } = await import("./bulkImportBrowserEngine.js");
|
|
@@ -172,13 +170,14 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
172
170
|
? job.proxyUrls[0]
|
|
173
171
|
: null;
|
|
174
172
|
const envHeadless = process.env.ZEVAI_CN_HEADLESS;
|
|
175
|
-
let headless =
|
|
173
|
+
let headless = false;
|
|
176
174
|
if (envHeadless === "0" || envHeadless === "false") headless = false;
|
|
177
175
|
if (envHeadless === "1" || envHeadless === "true") headless = true;
|
|
178
176
|
return launchBulkImportBrowser({
|
|
177
|
+
engine: job?.engine || "cloakbrowser",
|
|
179
178
|
proxyUrl,
|
|
180
179
|
headless,
|
|
181
|
-
windowSize: { width:
|
|
180
|
+
windowSize: { width: 1280, height: 900 },
|
|
182
181
|
});
|
|
183
182
|
});
|
|
184
183
|
super({ browserLauncher: cnBrowserLauncher, storageName });
|
|
@@ -354,11 +353,10 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
|
|
|
354
353
|
// Step 2: Create browser context FIRST — if proxy/browser fails, we never buy a number.
|
|
355
354
|
this.setAccountStep(account, "creating_browser", "Creating browser context (before 5sim order)");
|
|
356
355
|
await this.persistJobSnapshot(job, { forcePreview: true });
|
|
357
|
-
//
|
|
356
|
+
// CloakBrowser stack: zh-CN locale + HK/CN timezone so Tencent risk
|
|
358
357
|
// scoring does not see EN-US browser on residential CN/HK egress (common
|
|
359
|
-
// cause of 账号访问受限 right after OTP).
|
|
360
|
-
//
|
|
361
|
-
// alone still clusters if every session shares the same 900x700 + HW profile.
|
|
358
|
+
// cause of 账号访问受限 right after OTP). Per-account fingerprint seed —
|
|
359
|
+
// sticky residential IP alone still clusters if every session shares HW.
|
|
362
360
|
if (!account.fingerprintSeed) account.fingerprintSeed = randomUUID();
|
|
363
361
|
const freshContext = await createFreshContext(job.browser, account.proxyUrl, {
|
|
364
362
|
profile: "codebuddy-cn",
|
|
@@ -122,7 +122,7 @@ const IFRAME_ERROR_SELECTORS = [
|
|
|
122
122
|
* Run the phone-number registration automation.
|
|
123
123
|
*
|
|
124
124
|
* @param {object} opts
|
|
125
|
-
* @param {import('playwright').Page} opts.page
|
|
125
|
+
* @param {import('playwright-core').Page} opts.page Browser page (from createFreshContext)
|
|
126
126
|
* @param {string} [opts.phone] Pre-ordered phone (legacy). Prefer resolvePhone.
|
|
127
127
|
* @param {function} [opts.resolvePhone] async () => phone — called ONLY after login form
|
|
128
128
|
* is ready so 5sim is not billed if proxy/nav fails.
|