zevairouter 1.0.84 → 1.0.85
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 +5 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +25 -25
- 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/models/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/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/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/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 +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_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 +25 -25
- package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3487.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8157.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/{3702-2ae85ab0e262237e.js → 3702-c33199d84eed99f9.js} +1 -1
- package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
- package/cli/app/package.json +1 -1
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/src/lib/oauth/services/grokXaiEmailAutomation.js +12 -12
- package/src/lib/oauth/services/kiroGoogleAutomation.js +199 -91
- /package/cli/app/.next-cli-build/static/{vfxzLlib7n2DZ-lkAYEUg → R1kyWZTqGzBl4VyH_Yizr}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{vfxzLlib7n2DZ-lkAYEUg → R1kyWZTqGzBl4VyH_Yizr}/_ssgManifest.js +0 -0
|
@@ -412,7 +412,7 @@ async function getFirstVisibleLocator(page, selector) {
|
|
|
412
412
|
return null;
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
async function waitForFirstVisibleLocator(page, selector, { timeout = 15_000, pollInterval =
|
|
415
|
+
async function waitForFirstVisibleLocator(page, selector, { timeout = 15_000, pollInterval = 150 } = {}) {
|
|
416
416
|
const deadline = Date.now() + timeout;
|
|
417
417
|
while (Date.now() < deadline) {
|
|
418
418
|
const found = await getFirstVisibleLocator(page, selector);
|
|
@@ -424,6 +424,62 @@ async function waitForFirstVisibleLocator(page, selector, { timeout = 15_000, po
|
|
|
424
424
|
return null;
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
+
/** Tiny yield only — never use multi-second sleeps for “maybe page will load”. */
|
|
428
|
+
function yieldMs(ms = 50) {
|
|
429
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Wait until a condition is true, polling fast. Replaces fixed sleep after clicks.
|
|
434
|
+
* @returns {Promise<boolean>} true if condition met before timeout
|
|
435
|
+
*/
|
|
436
|
+
async function waitUntil(checkFn, { timeout = 8_000, interval = 100 } = {}) {
|
|
437
|
+
const deadline = Date.now() + timeout;
|
|
438
|
+
while (Date.now() < deadline) {
|
|
439
|
+
try {
|
|
440
|
+
if (await checkFn()) return true;
|
|
441
|
+
} catch {
|
|
442
|
+
/* retry */
|
|
443
|
+
}
|
|
444
|
+
await yieldMs(interval);
|
|
445
|
+
}
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
function isGoogleHostname(url) {
|
|
450
|
+
try {
|
|
451
|
+
const host = new URL(url).hostname;
|
|
452
|
+
return host === "accounts.google.com"
|
|
453
|
+
|| host.endsWith(".accounts.google.com")
|
|
454
|
+
|| /^accounts\.google\./i.test(host);
|
|
455
|
+
} catch {
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/** After navigation/click: wait for URL change or next UI, not a fixed sleep. */
|
|
461
|
+
async function waitForPageAdvance(page, {
|
|
462
|
+
fromUrl = "",
|
|
463
|
+
urlMatch = null,
|
|
464
|
+
selector = null,
|
|
465
|
+
timeout = 8_000,
|
|
466
|
+
} = {}) {
|
|
467
|
+
const startUrl = fromUrl || page.url?.() || "";
|
|
468
|
+
return waitUntil(async () => {
|
|
469
|
+
const url = page.url?.() || "";
|
|
470
|
+
if (urlMatch) {
|
|
471
|
+
if (typeof urlMatch === "function" && urlMatch(url)) return true;
|
|
472
|
+
if (urlMatch instanceof RegExp && urlMatch.test(url)) return true;
|
|
473
|
+
}
|
|
474
|
+
if (url && url !== startUrl && !url.startsWith("about:")) return true;
|
|
475
|
+
if (selector) {
|
|
476
|
+
const found = await getFirstVisibleLocator(page, selector);
|
|
477
|
+
if (found) return true;
|
|
478
|
+
}
|
|
479
|
+
return false;
|
|
480
|
+
}, { timeout, interval: 80 });
|
|
481
|
+
}
|
|
482
|
+
|
|
427
483
|
async function fillInputResilient(locator, value, { timeout = 15_000 } = {}) {
|
|
428
484
|
if (!locator || value == null) return false;
|
|
429
485
|
|
|
@@ -496,12 +552,18 @@ function includesAny(text, markers) {
|
|
|
496
552
|
function isGoogleAuthPage(page) {
|
|
497
553
|
try {
|
|
498
554
|
const url = new URL(page.url());
|
|
499
|
-
return url.hostname === "accounts.google.com"
|
|
555
|
+
return url.hostname === "accounts.google.com"
|
|
556
|
+
|| url.hostname.endsWith(".accounts.google.com")
|
|
557
|
+
|| /^accounts\.google\./i.test(url.hostname);
|
|
500
558
|
} catch {
|
|
501
559
|
return false;
|
|
502
560
|
}
|
|
503
561
|
}
|
|
504
562
|
|
|
563
|
+
function isGrokish(serviceLabel) {
|
|
564
|
+
return /grok/i.test(String(serviceLabel || ""));
|
|
565
|
+
}
|
|
566
|
+
|
|
505
567
|
// Google bounces flagged (headless) browsers:
|
|
506
568
|
// - myaccount.google.com/not-supported
|
|
507
569
|
// - accounts.google.com/v3/signin/rejected ("This browser or app may not be secure")
|
|
@@ -601,14 +663,15 @@ async function waitThroughGoogleInterstitials(page, reportStep, { maxWaitMs = 20
|
|
|
601
663
|
]);
|
|
602
664
|
if (clicked) {
|
|
603
665
|
reportStep?.("selecting_google_account", "Selected account from Google AccountChooser");
|
|
604
|
-
await page
|
|
666
|
+
await waitForPageAdvance(page, { timeout: 5_000 });
|
|
605
667
|
continue;
|
|
606
668
|
}
|
|
607
669
|
}
|
|
608
670
|
|
|
609
671
|
const waiters = [
|
|
610
|
-
page.waitForNavigation({ waitUntil: "domcontentloaded", timeout:
|
|
611
|
-
|
|
672
|
+
page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: 3_000 }).catch(() => null),
|
|
673
|
+
// Cap idle wait low — exit as soon as URL/body changes or success settles.
|
|
674
|
+
yieldMs(400),
|
|
612
675
|
];
|
|
613
676
|
if (successPromise && !isSuccessSettled(successPromise)) {
|
|
614
677
|
waiters.push(successPromise.then(() => null).catch(() => null));
|
|
@@ -1328,28 +1391,38 @@ async function handleXaiDeviceCodeConfirm(page, reportStep, { alreadyAuthed = fa
|
|
|
1328
1391
|
|| (/sign in to grok/i.test(text) && /continue/i.test(text) && !/login with/i.test(text));
|
|
1329
1392
|
if (!isCodeConfirm) return false;
|
|
1330
1393
|
|
|
1394
|
+
const fromUrl = page.url?.() || "";
|
|
1395
|
+
let clicked = false;
|
|
1331
1396
|
try {
|
|
1332
1397
|
const btn = page.getByRole("button", { name: /^Continue$/i }).first();
|
|
1333
|
-
if (await btn.isVisible({ timeout:
|
|
1398
|
+
if (await btn.isVisible({ timeout: 300 }).catch(() => false)) {
|
|
1334
1399
|
await btn.click({ timeout: 5_000 });
|
|
1335
|
-
|
|
1336
|
-
await page.waitForTimeout(1_200);
|
|
1337
|
-
return true;
|
|
1400
|
+
clicked = true;
|
|
1338
1401
|
}
|
|
1339
1402
|
} catch {
|
|
1340
1403
|
/* fall through */
|
|
1341
1404
|
}
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
if (clicked) {
|
|
1348
|
-
reportStep?.("confirming_device_code", "Confirmed device user code on xAI");
|
|
1349
|
-
await page.waitForTimeout(1_200);
|
|
1350
|
-
return true;
|
|
1405
|
+
if (!clicked) {
|
|
1406
|
+
clicked = await clickFirstActionable(page, [
|
|
1407
|
+
'button[type="submit"]:has-text("Continue")',
|
|
1408
|
+
'button:has-text("Continue")',
|
|
1409
|
+
]);
|
|
1351
1410
|
}
|
|
1352
|
-
return false;
|
|
1411
|
+
if (!clicked) return false;
|
|
1412
|
+
|
|
1413
|
+
reportStep?.("confirming_device_code", "Confirmed device user code on xAI");
|
|
1414
|
+
// Event-driven: next screen is Login with Google or URL change — no fixed 1.2s sleep.
|
|
1415
|
+
await waitForPageAdvance(page, {
|
|
1416
|
+
fromUrl,
|
|
1417
|
+
urlMatch: (u) => /sign-in|login|oauth/i.test(u) && u !== fromUrl,
|
|
1418
|
+
selector: [
|
|
1419
|
+
...GOOGLE_LOGIN_BUTTON_SELECTORS.split(", ").slice(0, 8),
|
|
1420
|
+
'button:has-text("Login with Google")',
|
|
1421
|
+
'button:has-text("Login with email")',
|
|
1422
|
+
].join(", "),
|
|
1423
|
+
timeout: 10_000,
|
|
1424
|
+
});
|
|
1425
|
+
return true;
|
|
1353
1426
|
}
|
|
1354
1427
|
|
|
1355
1428
|
async function clickGoogleLoginRole(page) {
|
|
@@ -1404,8 +1477,19 @@ async function ensureProviderTermsChecked(page, reportStep) {
|
|
|
1404
1477
|
|| await locator.click({ force: true, timeout: 3_000 }).then(() => true).catch(() => false);
|
|
1405
1478
|
if (did) {
|
|
1406
1479
|
reportStep?.("accepting_provider_terms", "Accepted provider terms for Google login");
|
|
1407
|
-
//
|
|
1408
|
-
await
|
|
1480
|
+
// Wait until Google button enables — not a blind sleep.
|
|
1481
|
+
await waitUntil(
|
|
1482
|
+
async () => {
|
|
1483
|
+
try {
|
|
1484
|
+
const btn = page.getByRole("button", { name: /google/i }).first();
|
|
1485
|
+
return (await btn.isVisible().catch(() => false))
|
|
1486
|
+
&& (await btn.isEnabled().catch(() => true));
|
|
1487
|
+
} catch {
|
|
1488
|
+
return true;
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1491
|
+
{ timeout: 2_000, interval: 80 },
|
|
1492
|
+
);
|
|
1409
1493
|
return true;
|
|
1410
1494
|
}
|
|
1411
1495
|
} catch {
|
|
@@ -1422,7 +1506,6 @@ async function handleProviderLoginGate(page, reportStep, { allowGoogleClick = tr
|
|
|
1422
1506
|
const confirmedExistingDialog = await clickFirstActionable(page, PRIVACY_CONFIRM_BUTTON_SELECTORS);
|
|
1423
1507
|
if (confirmedExistingDialog) {
|
|
1424
1508
|
reportStep("accepting_provider_privacy_dialog", "Confirmed provider privacy agreement dialog");
|
|
1425
|
-
await page.waitForTimeout(500);
|
|
1426
1509
|
return true;
|
|
1427
1510
|
}
|
|
1428
1511
|
|
|
@@ -1441,39 +1524,29 @@ async function handleProviderLoginGate(page, reportStep, { allowGoogleClick = tr
|
|
|
1441
1524
|
const clickedGoogle = clickedGoogleRole || await clickFirstActionable(page, GOOGLE_LOGIN_BUTTON_SELECTORS);
|
|
1442
1525
|
if (clickedGoogle) {
|
|
1443
1526
|
reportStep("selecting_google_login", "Selecting Google login");
|
|
1444
|
-
await page.waitForTimeout(500);
|
|
1445
1527
|
|
|
1446
1528
|
const confirmedDialog = await clickFirstActionable(page, PRIVACY_CONFIRM_BUTTON_SELECTORS);
|
|
1447
1529
|
if (confirmedDialog) {
|
|
1448
1530
|
reportStep("accepting_provider_privacy_dialog", "Confirmed provider privacy agreement dialog");
|
|
1449
|
-
await page.waitForTimeout(500);
|
|
1450
1531
|
}
|
|
1451
1532
|
|
|
1452
|
-
// Wait for OAuth redirect to Google (or
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|| host.endsWith(".accounts.google.com")
|
|
1460
|
-
|| /^accounts\.google\./i.test(host);
|
|
1461
|
-
} catch {
|
|
1462
|
-
return false;
|
|
1463
|
-
}
|
|
1464
|
-
},
|
|
1465
|
-
{ timeout: 8_000 },
|
|
1466
|
-
);
|
|
1533
|
+
// Wait for OAuth redirect to Google (or email field) — event-driven.
|
|
1534
|
+
const reached = await waitForPageAdvance(page, {
|
|
1535
|
+
urlMatch: (u) => isGoogleHostname(u),
|
|
1536
|
+
selector: EMAIL_INPUT_SELECTOR,
|
|
1537
|
+
timeout: 12_000,
|
|
1538
|
+
});
|
|
1539
|
+
if (reached || isGoogleAuthPage(page)) {
|
|
1467
1540
|
reportStep("google_login_page", "Reached Google sign-in after provider SSO");
|
|
1468
|
-
}
|
|
1469
|
-
// Popup-based Google SSO
|
|
1541
|
+
} else {
|
|
1542
|
+
// Popup-based Google SSO
|
|
1470
1543
|
try {
|
|
1471
1544
|
const ctx = page.context?.();
|
|
1472
1545
|
const pages = ctx?.pages?.() || [];
|
|
1473
1546
|
for (let i = pages.length - 1; i >= 0; i -= 1) {
|
|
1474
1547
|
const p = pages[i];
|
|
1475
1548
|
const u = p.url?.() || "";
|
|
1476
|
-
if (
|
|
1549
|
+
if (isGoogleHostname(u)) {
|
|
1477
1550
|
reportStep("google_login_popup", "Google sign-in opened in a popup");
|
|
1478
1551
|
break;
|
|
1479
1552
|
}
|
|
@@ -1504,12 +1577,11 @@ async function clickXaiDeviceAuthorize(page, reportStep) {
|
|
|
1504
1577
|
for (const re of roles) {
|
|
1505
1578
|
try {
|
|
1506
1579
|
const btn = page.getByRole("button", { name: re }).first();
|
|
1507
|
-
if (await btn.isVisible({ timeout:
|
|
1580
|
+
if (await btn.isVisible({ timeout: 200 }).catch(() => false)) {
|
|
1508
1581
|
const label = (await btn.innerText().catch(() => "")) || "";
|
|
1509
1582
|
if (/google/i.test(label)) continue;
|
|
1510
1583
|
await btn.click({ timeout: 3_000 });
|
|
1511
1584
|
reportStep?.("approving_consent", "Approving xAI device authorization");
|
|
1512
|
-
await page.waitForTimeout(600);
|
|
1513
1585
|
return true;
|
|
1514
1586
|
}
|
|
1515
1587
|
} catch {
|
|
@@ -1818,30 +1890,38 @@ export async function runGoogleAccountAutomation({
|
|
|
1818
1890
|
let deviceApproveAt = 0;
|
|
1819
1891
|
let deviceInvalidReopenAt = 0;
|
|
1820
1892
|
let deviceInvalidReopenCount = 0;
|
|
1821
|
-
|
|
1822
|
-
const
|
|
1823
|
-
|
|
1824
|
-
const GOOGLE_SSO_COOLDOWN_MS = 8_000;
|
|
1825
|
-
// Don't hammer Allow — xAI
|
|
1826
|
-
const DEVICE_APPROVE_COOLDOWN_MS =
|
|
1827
|
-
const DEVICE_INVALID_REOPEN_COOLDOWN_MS =
|
|
1893
|
+
// Cooldowns prevent double-submit only — not artificial pacing.
|
|
1894
|
+
const PASSWORD_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 6_000 : 18_000;
|
|
1895
|
+
const EMAIL_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 3_000 : 8_000;
|
|
1896
|
+
const GOOGLE_SSO_COOLDOWN_MS = isGrokish(serviceLabel) ? 3_000 : 8_000;
|
|
1897
|
+
// Don't hammer Allow — xAI rate_limits rapid device posts.
|
|
1898
|
+
const DEVICE_APPROVE_COOLDOWN_MS = 3_000;
|
|
1899
|
+
const DEVICE_INVALID_REOPEN_COOLDOWN_MS = 4_000;
|
|
1828
1900
|
const DEVICE_INVALID_REOPEN_MAX = 3;
|
|
1829
|
-
const isGrokFlow =
|
|
1901
|
+
const isGrokFlow = isGrokish(serviceLabel);
|
|
1830
1902
|
// Grok does not need the long Kiro SetSID / kiro:// interstitial window.
|
|
1831
|
-
const postPasswordInterstitialMs = isGrokFlow ?
|
|
1832
|
-
|
|
1903
|
+
const postPasswordInterstitialMs = isGrokFlow ? 4_000 : 25_000;
|
|
1904
|
+
// Loop poll: race successPromise — keep tiny so fast networks aren't stalled.
|
|
1905
|
+
const loopTickMs = isGrokFlow ? 120 : 500;
|
|
1833
1906
|
|
|
1834
1907
|
reportStep(openingStep, openingMessage);
|
|
1835
1908
|
await page.goto(authUrl, { waitUntil: "domcontentloaded", timeout: 60_000 });
|
|
1836
|
-
|
|
1837
|
-
await
|
|
1909
|
+
// Wait for interactive UI (Continue / Google / email), not a fixed sleep.
|
|
1910
|
+
await waitUntil(
|
|
1911
|
+
async () =>
|
|
1912
|
+
isGoogleAuthPage(page)
|
|
1913
|
+
|| (await getFirstVisibleLocator(page, 'button:has-text("Continue"), button:has-text("Login with Google"), button:has-text("Google")'))
|
|
1914
|
+
|| (await getFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR)),
|
|
1915
|
+
{ timeout: isGrokFlow ? 6_000 : 12_000, interval: 80 },
|
|
1916
|
+
);
|
|
1917
|
+
if (!isGrokFlow) {
|
|
1918
|
+
await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(8_000));
|
|
1919
|
+
}
|
|
1838
1920
|
|
|
1839
1921
|
// Provider shells (xAI device, CodeBuddy, …) must pick Google SSO first.
|
|
1840
|
-
// Never type credentials into provider user_code / email fields
|
|
1841
|
-
//
|
|
1842
|
-
|
|
1843
|
-
// Retry briefly while SPA mounts Login with Google.
|
|
1844
|
-
for (let attempt = 0; attempt < (isGrokFlow ? 8 : 2); attempt += 1) {
|
|
1922
|
+
// Never type credentials into provider user_code / email fields.
|
|
1923
|
+
// xAI: confirm device user_code first, then Google SSO — event-driven retries.
|
|
1924
|
+
for (let attempt = 0; attempt < (isGrokFlow ? 6 : 2); attempt += 1) {
|
|
1845
1925
|
if (isGoogleAuthPage(page)) break;
|
|
1846
1926
|
if (await handleXaiDeviceCodeConfirm(page, reportStep)) {
|
|
1847
1927
|
continue;
|
|
@@ -1849,15 +1929,27 @@ export async function runGoogleAccountAutomation({
|
|
|
1849
1929
|
if (await handleProviderLoginGate(page, reportStep)) {
|
|
1850
1930
|
googleLoginSelectedAt = Date.now();
|
|
1851
1931
|
if (isGoogleAuthPage(page)) break;
|
|
1932
|
+
// Gate already waited for Google URL; only brief yield if still on provider.
|
|
1933
|
+
await yieldMs(50);
|
|
1934
|
+
continue;
|
|
1852
1935
|
}
|
|
1853
|
-
|
|
1936
|
+
// SPA not ready — poll for buttons, don't sleep 600ms blindly.
|
|
1937
|
+
const ready = await waitUntil(
|
|
1938
|
+
async () =>
|
|
1939
|
+
(await providerHasGoogleLogin(page))
|
|
1940
|
+
|| /enter the code|login with google|continue/i.test(await readPageText(page).catch(() => "")),
|
|
1941
|
+
{ timeout: 800, interval: 80 },
|
|
1942
|
+
);
|
|
1943
|
+
if (!ready) await yieldMs(100);
|
|
1944
|
+
}
|
|
1945
|
+
if (!isGrokFlow) {
|
|
1946
|
+
await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(6_000));
|
|
1854
1947
|
}
|
|
1855
|
-
await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(isGrokFlow ? 4_000 : 8_000));
|
|
1856
1948
|
|
|
1857
1949
|
// Only fill Google email once we are actually on accounts.google.com.
|
|
1858
1950
|
if (isGoogleAuthPage(page)) {
|
|
1859
1951
|
seenGoogleAuth = true;
|
|
1860
|
-
const emailInput = await waitForFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR, { timeout:
|
|
1952
|
+
const emailInput = await waitForFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR, { timeout: 10_000 });
|
|
1861
1953
|
if (emailInput) {
|
|
1862
1954
|
reportStep("entering_email", "Entering Google email");
|
|
1863
1955
|
const filled = await fillInputResilient(emailInput, email);
|
|
@@ -1867,11 +1959,14 @@ export async function runGoogleAccountAutomation({
|
|
|
1867
1959
|
reportStep("submitting_email", "Submitting email");
|
|
1868
1960
|
await clickFirstVisible(page, NEXT_BUTTON_SELECTORS);
|
|
1869
1961
|
emailSubmittedAt = Date.now();
|
|
1870
|
-
// Wait for
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1962
|
+
// Wait for password field (or leave email step) — not fixed sleep.
|
|
1963
|
+
await waitForPageAdvance(page, {
|
|
1964
|
+
selector: PASSWORD_INPUT_SELECTOR,
|
|
1965
|
+
timeout: isGrokFlow ? 8_000 : 12_000,
|
|
1966
|
+
});
|
|
1967
|
+
if (!isGrokFlow) {
|
|
1968
|
+
await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(8_000));
|
|
1969
|
+
}
|
|
1875
1970
|
}
|
|
1876
1971
|
}
|
|
1877
1972
|
} else if (isProviderPage(page)) {
|
|
@@ -1907,7 +2002,7 @@ export async function runGoogleAccountAutomation({
|
|
|
1907
2002
|
const waited = await waitThroughGoogleInterstitials(
|
|
1908
2003
|
page,
|
|
1909
2004
|
reportStep,
|
|
1910
|
-
interstitialOpts(isGrokFlow ?
|
|
2005
|
+
interstitialOpts(isGrokFlow ? 2_500 : 8_000),
|
|
1911
2006
|
);
|
|
1912
2007
|
if (waited) {
|
|
1913
2008
|
continue;
|
|
@@ -1915,11 +2010,11 @@ export async function runGoogleAccountAutomation({
|
|
|
1915
2010
|
|
|
1916
2011
|
const handledGoogleConsent = await handleGoogleConsent(page, reportStep);
|
|
1917
2012
|
if (handledGoogleConsent) {
|
|
1918
|
-
|
|
1919
|
-
page,
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
2013
|
+
if (!isGrokFlow) {
|
|
2014
|
+
await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(12_000));
|
|
2015
|
+
} else {
|
|
2016
|
+
await waitForPageAdvance(page, { timeout: 4_000 });
|
|
2017
|
+
}
|
|
1923
2018
|
continue;
|
|
1924
2019
|
}
|
|
1925
2020
|
|
|
@@ -2009,7 +2104,12 @@ export async function runGoogleAccountAutomation({
|
|
|
2009
2104
|
`Device page error — reopening auth URL (${deviceInvalidReopenCount}/${DEVICE_INVALID_REOPEN_MAX})`,
|
|
2010
2105
|
);
|
|
2011
2106
|
await page.goto(authUrl, { waitUntil: "domcontentloaded", timeout: 60_000 }).catch(() => null);
|
|
2012
|
-
await
|
|
2107
|
+
await waitUntil(
|
|
2108
|
+
async () =>
|
|
2109
|
+
(await getFirstVisibleLocator(page, 'button:has-text("Continue"), button:has-text("Allow"), button:has-text("Authorize")'))
|
|
2110
|
+
|| (await providerHasGoogleLogin(page)),
|
|
2111
|
+
{ timeout: 4_000, interval: 80 },
|
|
2112
|
+
);
|
|
2013
2113
|
continue;
|
|
2014
2114
|
}
|
|
2015
2115
|
|
|
@@ -2063,8 +2163,11 @@ export async function runGoogleAccountAutomation({
|
|
|
2063
2163
|
"waiting_after_password",
|
|
2064
2164
|
`Password already submitted ${Math.round(sincePw / 1000)}s ago — waiting for Google redirect`,
|
|
2065
2165
|
);
|
|
2066
|
-
await waitThroughGoogleInterstitials(
|
|
2067
|
-
|
|
2166
|
+
await waitThroughGoogleInterstitials(
|
|
2167
|
+
page,
|
|
2168
|
+
reportStep,
|
|
2169
|
+
interstitialOpts(isGrokFlow ? 2_000 : 6_000),
|
|
2170
|
+
);
|
|
2068
2171
|
continue;
|
|
2069
2172
|
}
|
|
2070
2173
|
|
|
@@ -2072,17 +2175,15 @@ export async function runGoogleAccountAutomation({
|
|
|
2072
2175
|
const filled = await fillInputResilient(passwordInput, password);
|
|
2073
2176
|
if (filled) {
|
|
2074
2177
|
reportStep("submitting_password", "Submitting password");
|
|
2178
|
+
const prePwUrl = page.url?.() || "";
|
|
2075
2179
|
await clickFirstVisible(page, NEXT_BUTTON_SELECTORS);
|
|
2076
2180
|
passwordSubmittedAt = Date.now();
|
|
2077
|
-
//
|
|
2078
|
-
// loop iteration can re-detect the still-mounted password field.
|
|
2181
|
+
// Leave password challenge via navigation / URL change / success — no 2.5s sleep.
|
|
2079
2182
|
await Promise.race([
|
|
2080
|
-
page.waitForNavigation({ waitUntil: "domcontentloaded", timeout:
|
|
2081
|
-
page
|
|
2183
|
+
page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: isGrokFlow ? 6_000 : 10_000 }).catch(() => null),
|
|
2184
|
+
waitForPageAdvance(page, { fromUrl: prePwUrl, timeout: isGrokFlow ? 6_000 : 10_000 }),
|
|
2185
|
+
successPromise.then(() => null).catch(() => null),
|
|
2082
2186
|
]);
|
|
2083
|
-
// Password submit often lands on empty SetSID while network completes
|
|
2084
|
-
// consent→idpresponse→kiro://. Callback monitor (CDP) settles successPromise.
|
|
2085
|
-
// Grok device poll settles faster — shorter interstitial wait.
|
|
2086
2187
|
await waitThroughGoogleInterstitials(
|
|
2087
2188
|
page,
|
|
2088
2189
|
reportStep,
|
|
@@ -2090,7 +2191,7 @@ export async function runGoogleAccountAutomation({
|
|
|
2090
2191
|
);
|
|
2091
2192
|
} else {
|
|
2092
2193
|
reportStep("password_fill_failed", "Could not fill the Google password field; retrying loop");
|
|
2093
|
-
await
|
|
2194
|
+
await yieldMs(100);
|
|
2094
2195
|
}
|
|
2095
2196
|
continue;
|
|
2096
2197
|
}
|
|
@@ -2103,7 +2204,10 @@ export async function runGoogleAccountAutomation({
|
|
|
2103
2204
|
"waiting_after_email",
|
|
2104
2205
|
`Email already submitted ${Math.round(sinceEmail / 1000)}s ago — waiting for password/next screen`,
|
|
2105
2206
|
);
|
|
2106
|
-
await page
|
|
2207
|
+
await waitForPageAdvance(page, {
|
|
2208
|
+
selector: PASSWORD_INPUT_SELECTOR,
|
|
2209
|
+
timeout: Math.max(200, EMAIL_RESUBMIT_COOLDOWN_MS - sinceEmail),
|
|
2210
|
+
});
|
|
2107
2211
|
continue;
|
|
2108
2212
|
}
|
|
2109
2213
|
|
|
@@ -2113,11 +2217,14 @@ export async function runGoogleAccountAutomation({
|
|
|
2113
2217
|
reportStep("submitting_email", "Submitting email");
|
|
2114
2218
|
await clickFirstVisible(page, NEXT_BUTTON_SELECTORS);
|
|
2115
2219
|
emailSubmittedAt = Date.now();
|
|
2116
|
-
await page
|
|
2220
|
+
await waitForPageAdvance(page, {
|
|
2221
|
+
selector: PASSWORD_INPUT_SELECTOR,
|
|
2222
|
+
timeout: isGrokFlow ? 6_000 : 10_000,
|
|
2223
|
+
});
|
|
2117
2224
|
} else {
|
|
2118
2225
|
reportStep("email_fill_failed", "Could not fill the Google email field; retrying loop");
|
|
2226
|
+
await yieldMs(80);
|
|
2119
2227
|
}
|
|
2120
|
-
await page.waitForTimeout(400);
|
|
2121
2228
|
continue;
|
|
2122
2229
|
}
|
|
2123
2230
|
}
|
|
@@ -2132,7 +2239,7 @@ export async function runGoogleAccountAutomation({
|
|
|
2132
2239
|
if (clickedApprove) {
|
|
2133
2240
|
reportStep("approving_consent", `Approving Google or ${serviceLabel} consent`);
|
|
2134
2241
|
deviceApproveAt = Date.now();
|
|
2135
|
-
await page
|
|
2242
|
+
await waitForPageAdvance(page, { timeout: isGrokFlow ? 2_000 : 4_000 });
|
|
2136
2243
|
continue;
|
|
2137
2244
|
}
|
|
2138
2245
|
}
|
|
@@ -2148,7 +2255,8 @@ export async function runGoogleAccountAutomation({
|
|
|
2148
2255
|
} else {
|
|
2149
2256
|
reportStep("waiting_for_next_screen", `Waiting for the next Google or ${serviceLabel} screen`);
|
|
2150
2257
|
}
|
|
2151
|
-
|
|
2258
|
+
// Only yield — next loop races successPromise + handlers. Fast net = fast exit.
|
|
2259
|
+
await yieldMs(loopTickMs);
|
|
2152
2260
|
}
|
|
2153
2261
|
|
|
2154
2262
|
// Final blocked check before generic needs_manual
|
|
File without changes
|
|
File without changes
|