zevairouter 1.0.66 → 1.0.68
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 +8 -8
- 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 +8 -8
- package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/7276.js +2 -2
- 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-3772f83d7867a26d.js → 3702-9e52be780ed358e2.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/{5497-dd4fed7ea355e6ad.js → 5497-868b3c595af77d1a.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/src/lib/terminal/ptyBridge.py +163 -0
- 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/src/lib/terminal/ptyBridge.py +163 -0
- 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/src/lib/terminal/ptyBridge.py +163 -0
- package/cli/app/cli/hooks/playwrightRuntime.js +84 -17
- package/cli/app/package.json +1 -1
- package/cli/cli.js +10 -1
- package/cli/hooks/playwrightRuntime.js +84 -17
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/src/app/api/version/route.js +163 -22
- package/src/lib/oauth/services/bulkImportBrowserEngine.js +38 -22
- package/src/shared/components/Sidebar.js +7 -4
- /package/cli/app/.next-cli-build/static/{2RSZhfKmiF-DD-v1D0TnS → uAzRelvWR5AOBsQdc-bGC}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{2RSZhfKmiF-DD-v1D0TnS → uAzRelvWR5AOBsQdc-bGC}/_ssgManifest.js +0 -0
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
// Ensure Playwright + Chromium are usable at runtime. `npm i -g zevairouter`
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
2
|
+
// may not ship a resolvable playwright package under webpack/standalone, and
|
|
3
|
+
// does NOT always trigger browser download. We install into ~/.zevai/runtime
|
|
4
|
+
// and resolve with real Node require (not webpack's registry).
|
|
5
|
+
//
|
|
6
|
+
// Bug we fix (Kiro bulk mass-fail):
|
|
7
|
+
// "playwright installed but cannot be required"
|
|
8
|
+
// → package exists under ~/.zevai/runtime/node_modules/playwright but
|
|
9
|
+
// bare require("playwright") is rewritten by webpack and throws.
|
|
10
|
+
// Same pattern as camoufoxRuntime: createRequire + __non_webpack_require__.
|
|
7
11
|
const { spawnSync } = require("child_process");
|
|
12
|
+
const { createRequire } = require("module");
|
|
8
13
|
const fs = require("fs");
|
|
9
14
|
const path = require("path");
|
|
10
15
|
|
|
@@ -13,19 +18,50 @@ const { runNpmInstall, getRuntimeDir, getRuntimeNodeModules } = require("./sqlit
|
|
|
13
18
|
const PLAYWRIGHT_PACKAGE = "playwright";
|
|
14
19
|
const PLAYWRIGHT_VERSION = "^1.54.2";
|
|
15
20
|
|
|
21
|
+
// Webpack rewrites bare require(); __non_webpack_require__ stays real Node require.
|
|
22
|
+
const nodeRequire =
|
|
23
|
+
typeof __non_webpack_require__ === "function" ? __non_webpack_require__ : require;
|
|
24
|
+
|
|
25
|
+
function getRuntimeRequire() {
|
|
26
|
+
try {
|
|
27
|
+
const anchor = path.join(getRuntimeDir(), "noop.js");
|
|
28
|
+
return createRequire(anchor);
|
|
29
|
+
} catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
16
34
|
let cachedReady = null;
|
|
17
35
|
|
|
18
36
|
function tryRequirePlaywright() {
|
|
37
|
+
// 1) Runtime-anchored createRequire (works under webpack + any cwd)
|
|
19
38
|
try {
|
|
20
|
-
|
|
39
|
+
const rreq = getRuntimeRequire();
|
|
40
|
+
const candidate = path.join(getRuntimeNodeModules(), PLAYWRIGHT_PACKAGE);
|
|
41
|
+
if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
|
|
42
|
+
return rreq(candidate);
|
|
43
|
+
}
|
|
44
|
+
} catch {}
|
|
45
|
+
|
|
46
|
+
// 2) Bare real require (global / NODE_PATH)
|
|
47
|
+
try {
|
|
48
|
+
return nodeRequire(PLAYWRIGHT_PACKAGE);
|
|
21
49
|
} catch {}
|
|
50
|
+
|
|
51
|
+
// 3) Absolute path via nodeRequire
|
|
22
52
|
try {
|
|
23
|
-
const
|
|
24
|
-
const candidate = path.join(runtimeNm, PLAYWRIGHT_PACKAGE);
|
|
53
|
+
const candidate = path.join(getRuntimeNodeModules(), PLAYWRIGHT_PACKAGE);
|
|
25
54
|
if (fs.existsSync(path.join(candidate, "package.json"))) {
|
|
26
|
-
return
|
|
55
|
+
return nodeRequire(candidate);
|
|
27
56
|
}
|
|
28
57
|
} catch {}
|
|
58
|
+
|
|
59
|
+
// 4) Resolve from process cwd node_modules (dev)
|
|
60
|
+
try {
|
|
61
|
+
const rreq = createRequire(path.join(process.cwd(), "package.json"));
|
|
62
|
+
return rreq(PLAYWRIGHT_PACKAGE);
|
|
63
|
+
} catch {}
|
|
64
|
+
|
|
29
65
|
return null;
|
|
30
66
|
}
|
|
31
67
|
|
|
@@ -45,11 +81,22 @@ function isChromiumBinaryAvailable() {
|
|
|
45
81
|
function findCli() {
|
|
46
82
|
const candidates = [];
|
|
47
83
|
try {
|
|
48
|
-
const
|
|
84
|
+
const rreq = getRuntimeRequire();
|
|
85
|
+
if (rreq) {
|
|
86
|
+
try {
|
|
87
|
+
candidates.push(path.join(path.dirname(rreq.resolve(`${PLAYWRIGHT_PACKAGE}/package.json`)), "cli.js"));
|
|
88
|
+
} catch {}
|
|
89
|
+
try {
|
|
90
|
+
candidates.push(path.join(path.dirname(rreq.resolve("playwright-core/package.json")), "cli.js"));
|
|
91
|
+
} catch {}
|
|
92
|
+
}
|
|
93
|
+
} catch {}
|
|
94
|
+
try {
|
|
95
|
+
const pwPkg = nodeRequire.resolve("playwright/package.json");
|
|
49
96
|
candidates.push(path.join(path.dirname(pwPkg), "cli.js"));
|
|
50
97
|
} catch {}
|
|
51
98
|
try {
|
|
52
|
-
const pwCorePkg =
|
|
99
|
+
const pwCorePkg = nodeRequire.resolve("playwright-core/package.json");
|
|
53
100
|
candidates.push(path.join(path.dirname(pwCorePkg), "cli.js"));
|
|
54
101
|
} catch {}
|
|
55
102
|
try {
|
|
@@ -81,9 +128,17 @@ function ensurePlaywrightPackage({ silent = false } = {}) {
|
|
|
81
128
|
};
|
|
82
129
|
}
|
|
83
130
|
|
|
131
|
+
// Clear any half-state and re-resolve with createRequire
|
|
132
|
+
cachedReady = null;
|
|
84
133
|
const installed = tryRequirePlaywright();
|
|
85
134
|
if (!installed) {
|
|
86
|
-
return {
|
|
135
|
+
return {
|
|
136
|
+
ok: false,
|
|
137
|
+
reason:
|
|
138
|
+
"playwright installed into ~/.zevai/runtime but cannot be required " +
|
|
139
|
+
"(webpack/module path). Restart zevai after install, or run: " +
|
|
140
|
+
'node -e "require(require(\'path\').join(require(\'os\').homedir(),\'.zevai/runtime/node_modules/playwright\'))"',
|
|
141
|
+
};
|
|
87
142
|
}
|
|
88
143
|
return { ok: true, module: installed };
|
|
89
144
|
}
|
|
@@ -96,10 +151,18 @@ function runInstall({ silent = false, timeout = 600_000 } = {}) {
|
|
|
96
151
|
|
|
97
152
|
if (!silent) console.log("\u23f3 Downloading Playwright Chromium (first run, ~150MB)...");
|
|
98
153
|
|
|
154
|
+
// Never honor channel=chrome — Kiro bulk needs bundled Chromium, not /opt/google/chrome
|
|
155
|
+
const env = {
|
|
156
|
+
...process.env,
|
|
157
|
+
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: undefined,
|
|
158
|
+
};
|
|
159
|
+
delete env.PLAYWRIGHT_CHROMIUM_CHANNEL;
|
|
160
|
+
|
|
99
161
|
const res = spawnSync(process.execPath, [cliPath, "install", "chromium"], {
|
|
100
162
|
stdio: silent ? ["ignore", "pipe", "pipe"] : "inherit",
|
|
101
163
|
timeout,
|
|
102
164
|
encoding: "utf8",
|
|
165
|
+
env,
|
|
103
166
|
});
|
|
104
167
|
|
|
105
168
|
if (res.status === 0) {
|
|
@@ -118,14 +181,17 @@ function runInstall({ silent = false, timeout = 600_000 } = {}) {
|
|
|
118
181
|
}
|
|
119
182
|
|
|
120
183
|
function ensurePlaywrightRuntime({ silent = false, timeout } = {}) {
|
|
121
|
-
if (cachedReady === true)
|
|
184
|
+
if (cachedReady === true) {
|
|
185
|
+
const mod = tryRequirePlaywright();
|
|
186
|
+
return { ok: true, module: mod };
|
|
187
|
+
}
|
|
122
188
|
|
|
123
189
|
const pkg = ensurePlaywrightPackage({ silent });
|
|
124
190
|
if (!pkg.ok) {
|
|
125
191
|
cachedReady = false;
|
|
126
192
|
const error = new Error(
|
|
127
193
|
`Playwright not available. ${pkg.reason}. ` +
|
|
128
|
-
|
|
194
|
+
`Run "npm install -g playwright && npx playwright install chromium" manually, then retry.`
|
|
129
195
|
);
|
|
130
196
|
error.code = "PLAYWRIGHT_PACKAGE_MISSING";
|
|
131
197
|
return { ok: false, error };
|
|
@@ -133,19 +199,19 @@ function ensurePlaywrightRuntime({ silent = false, timeout } = {}) {
|
|
|
133
199
|
|
|
134
200
|
if (isChromiumBinaryAvailable()) {
|
|
135
201
|
cachedReady = true;
|
|
136
|
-
return { ok: true, module: pkg.module };
|
|
202
|
+
return { ok: true, module: pkg.module || tryRequirePlaywright() };
|
|
137
203
|
}
|
|
138
204
|
|
|
139
205
|
const result = runInstall({ silent, timeout });
|
|
140
206
|
if (result.ok && isChromiumBinaryAvailable()) {
|
|
141
207
|
cachedReady = true;
|
|
142
|
-
return { ok: true, module: pkg.module };
|
|
208
|
+
return { ok: true, module: pkg.module || tryRequirePlaywright() };
|
|
143
209
|
}
|
|
144
210
|
|
|
145
211
|
cachedReady = false;
|
|
146
212
|
const error = new Error(
|
|
147
213
|
`Playwright Chromium not available. ${result.reason}. ` +
|
|
148
|
-
|
|
214
|
+
`Run "npx playwright install chromium" manually, then retry.`
|
|
149
215
|
);
|
|
150
216
|
error.code = "PLAYWRIGHT_CHROMIUM_MISSING";
|
|
151
217
|
return { ok: false, error };
|
|
@@ -165,4 +231,5 @@ module.exports = {
|
|
|
165
231
|
isChromiumBinaryAvailable,
|
|
166
232
|
resetCache,
|
|
167
233
|
findPlaywrightCli: findCli,
|
|
234
|
+
tryRequirePlaywright,
|
|
168
235
|
};
|
package/cli/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,34 +1,69 @@
|
|
|
1
|
+
import fs from "fs";
|
|
1
2
|
import https from "https";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { createRequire } from "module";
|
|
2
5
|
import pkg from "../../../../package.json" with { type: "json" };
|
|
3
6
|
|
|
7
|
+
export const dynamic = "force-dynamic";
|
|
8
|
+
export const revalidate = 0;
|
|
9
|
+
|
|
4
10
|
const NPM_PACKAGE_NAME = "zevairouter";
|
|
5
11
|
|
|
6
|
-
// Fetch latest version from npm registry
|
|
7
|
-
function
|
|
12
|
+
// Fetch latest version from npm registry (and common CN mirror fallback).
|
|
13
|
+
function fetchLatestFromUrl(url) {
|
|
8
14
|
return new Promise((resolve) => {
|
|
9
|
-
const req = https.get(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
res.on("end", () => {
|
|
16
|
-
try {
|
|
17
|
-
resolve(JSON.parse(data).version || null);
|
|
18
|
-
} catch {
|
|
19
|
-
resolve(null);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
15
|
+
const req = https.get(url, { timeout: 4000 }, (res) => {
|
|
16
|
+
// follow one redirect
|
|
17
|
+
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
18
|
+
res.resume();
|
|
19
|
+
fetchLatestFromUrl(res.headers.location).then(resolve);
|
|
20
|
+
return;
|
|
22
21
|
}
|
|
23
|
-
|
|
22
|
+
let data = "";
|
|
23
|
+
res.on("data", (chunk) => (data += chunk));
|
|
24
|
+
res.on("end", () => {
|
|
25
|
+
try {
|
|
26
|
+
resolve(JSON.parse(data).version || null);
|
|
27
|
+
} catch {
|
|
28
|
+
resolve(null);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
24
32
|
req.on("error", () => resolve(null));
|
|
25
|
-
req.on("timeout", () => {
|
|
33
|
+
req.on("timeout", () => {
|
|
34
|
+
req.destroy();
|
|
35
|
+
resolve(null);
|
|
36
|
+
});
|
|
26
37
|
});
|
|
27
38
|
}
|
|
28
39
|
|
|
40
|
+
async function fetchLatestVersion() {
|
|
41
|
+
const urls = [
|
|
42
|
+
`https://registry.npmjs.org/${NPM_PACKAGE_NAME}/latest`,
|
|
43
|
+
// npmmirror is what many CN/VPS installs hit via npm config — keep in sync
|
|
44
|
+
`https://registry.npmmirror.com/${NPM_PACKAGE_NAME}/latest`,
|
|
45
|
+
];
|
|
46
|
+
for (const url of urls) {
|
|
47
|
+
const v = await fetchLatestFromUrl(url);
|
|
48
|
+
if (v) return v;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function parseSemver(v) {
|
|
54
|
+
const m = String(v || "")
|
|
55
|
+
.trim()
|
|
56
|
+
.replace(/^v/i, "")
|
|
57
|
+
.match(/^(\d+)\.(\d+)\.(\d+)/);
|
|
58
|
+
if (!m) return null;
|
|
59
|
+
return [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** @returns {1|0|-1} a>b → 1, a<b → -1, equal/unparseable → 0 */
|
|
29
63
|
function compareVersions(a, b) {
|
|
30
|
-
const pa = a
|
|
31
|
-
const pb = b
|
|
64
|
+
const pa = parseSemver(a);
|
|
65
|
+
const pb = parseSemver(b);
|
|
66
|
+
if (!pa || !pb) return 0;
|
|
32
67
|
for (let i = 0; i < 3; i++) {
|
|
33
68
|
if (pa[i] > pb[i]) return 1;
|
|
34
69
|
if (pa[i] < pb[i]) return -1;
|
|
@@ -36,10 +71,116 @@ function compareVersions(a, b) {
|
|
|
36
71
|
return 0;
|
|
37
72
|
}
|
|
38
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Resolve the *installed* package version from disk at request time.
|
|
76
|
+
* Prefer this over the webpack-inlined build-time import so a global npm
|
|
77
|
+
* upgrade + process restart always reflects the new package, and so we can
|
|
78
|
+
* detect "CLI updated but old server still running" mismatches.
|
|
79
|
+
*/
|
|
80
|
+
function readJsonVersion(filePath) {
|
|
81
|
+
try {
|
|
82
|
+
if (!filePath || !fs.existsSync(filePath)) return null;
|
|
83
|
+
const v = JSON.parse(fs.readFileSync(filePath, "utf8"))?.version;
|
|
84
|
+
return typeof v === "string" && v.trim() ? v.trim() : null;
|
|
85
|
+
} catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function resolveInstalledVersion() {
|
|
91
|
+
const candidates = [];
|
|
92
|
+
|
|
93
|
+
// 1) Walk up from process.cwd() (standalone often starts in cli/app)
|
|
94
|
+
try {
|
|
95
|
+
let dir = process.cwd();
|
|
96
|
+
for (let i = 0; i < 6; i++) {
|
|
97
|
+
candidates.push(path.join(dir, "package.json"));
|
|
98
|
+
candidates.push(path.join(dir, "cli", "package.json"));
|
|
99
|
+
const parent = path.dirname(dir);
|
|
100
|
+
if (parent === dir) break;
|
|
101
|
+
dir = parent;
|
|
102
|
+
}
|
|
103
|
+
} catch {
|
|
104
|
+
// ignore
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 2) Resolve the published package root via Node module resolution
|
|
108
|
+
try {
|
|
109
|
+
const requireFromCwd = createRequire(path.join(process.cwd(), "package.json"));
|
|
110
|
+
candidates.unshift(requireFromCwd.resolve(`${NPM_PACKAGE_NAME}/package.json`));
|
|
111
|
+
} catch {
|
|
112
|
+
// ignore
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
// When server lives under .../zevairouter/cli/app, package root is ../..
|
|
116
|
+
candidates.unshift(path.resolve(process.cwd(), "../../package.json"));
|
|
117
|
+
candidates.unshift(path.resolve(process.cwd(), "../package.json"));
|
|
118
|
+
} catch {
|
|
119
|
+
// ignore
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 3) dirname of the running node entry (server.js / cli.js)
|
|
123
|
+
try {
|
|
124
|
+
if (typeof process.argv?.[1] === "string") {
|
|
125
|
+
let dir = path.dirname(path.resolve(process.argv[1]));
|
|
126
|
+
for (let i = 0; i < 5; i++) {
|
|
127
|
+
candidates.push(path.join(dir, "package.json"));
|
|
128
|
+
const parent = path.dirname(dir);
|
|
129
|
+
if (parent === dir) break;
|
|
130
|
+
dir = parent;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
} catch {
|
|
134
|
+
// ignore
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const seen = new Set();
|
|
138
|
+
for (const file of candidates) {
|
|
139
|
+
const abs = path.resolve(file);
|
|
140
|
+
if (seen.has(abs)) continue;
|
|
141
|
+
seen.add(abs);
|
|
142
|
+
const v = readJsonVersion(abs);
|
|
143
|
+
if (!v) continue;
|
|
144
|
+
// Prefer our package only (skip random nested package.json)
|
|
145
|
+
try {
|
|
146
|
+
const name = JSON.parse(fs.readFileSync(abs, "utf8"))?.name;
|
|
147
|
+
if (name && name !== NPM_PACKAGE_NAME && name !== "zevairouter-cli") continue;
|
|
148
|
+
} catch {
|
|
149
|
+
// keep version anyway
|
|
150
|
+
}
|
|
151
|
+
return v;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// 4) Build-time fallback (webpack-inlined)
|
|
155
|
+
return typeof pkg?.version === "string" ? pkg.version : "0.0.0";
|
|
156
|
+
}
|
|
157
|
+
|
|
39
158
|
export async function GET() {
|
|
159
|
+
const buildVersion = typeof pkg?.version === "string" ? pkg.version : null;
|
|
160
|
+
const installedVersion = resolveInstalledVersion();
|
|
161
|
+
// What the dashboard should treat as "this server": prefer disk install, then build
|
|
162
|
+
const currentVersion = installedVersion || buildVersion || "0.0.0";
|
|
163
|
+
|
|
40
164
|
const latestVersion = await fetchLatestVersion();
|
|
41
|
-
const
|
|
42
|
-
|
|
165
|
+
const hasUpdate = latestVersion
|
|
166
|
+
? compareVersions(latestVersion, currentVersion) > 0
|
|
167
|
+
: false;
|
|
43
168
|
|
|
44
|
-
return Response.json(
|
|
169
|
+
return Response.json(
|
|
170
|
+
{
|
|
171
|
+
currentVersion,
|
|
172
|
+
installedVersion,
|
|
173
|
+
buildVersion,
|
|
174
|
+
latestVersion,
|
|
175
|
+
hasUpdate,
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
headers: {
|
|
179
|
+
// Never let browser / proxy / Next cache a stale "please update" banner
|
|
180
|
+
"Cache-Control": "no-store, no-cache, must-revalidate, max-age=0",
|
|
181
|
+
Pragma: "no-cache",
|
|
182
|
+
Expires: "0",
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
);
|
|
45
186
|
}
|
|
@@ -112,32 +112,25 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
|
|
|
112
112
|
await ensureHeadedDisplayOrThrow();
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
// Prefer runtime helper first — under Next/webpack, dynamic import("playwright")
|
|
116
|
+
// often fails even when ~/.zevai/runtime has the package (Kiro mass-fail).
|
|
115
117
|
let chromium = null;
|
|
116
118
|
let importErr = null;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
const runtime = loadRuntimeHelper("playwrightRuntime");
|
|
120
|
+
if (runtime?.ensurePlaywrightRuntime) {
|
|
121
|
+
const ready = runtime.ensurePlaywrightRuntime({ silent: false });
|
|
122
|
+
if (ready.ok) {
|
|
123
|
+
const mod = ready.module || runtime.loadPlaywrightModule?.() || runtime.tryRequirePlaywright?.();
|
|
124
|
+
chromium = mod?.chromium ?? null;
|
|
125
|
+
} else if (ready.error) {
|
|
126
|
+
importErr = ready.error;
|
|
127
|
+
}
|
|
121
128
|
}
|
|
122
|
-
|
|
123
129
|
if (!chromium) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
chromium = await importPlaywright();
|
|
130
|
-
} catch (err) {
|
|
131
|
-
importErr = err;
|
|
132
|
-
}
|
|
133
|
-
if (!chromium) {
|
|
134
|
-
const mod = ready.module || runtime.loadPlaywrightModule?.();
|
|
135
|
-
chromium = mod?.chromium ?? null;
|
|
136
|
-
}
|
|
137
|
-
} else if (ready.error) {
|
|
138
|
-
if (importErr) ready.error.cause = importErr;
|
|
139
|
-
throw ready.error;
|
|
140
|
-
}
|
|
130
|
+
try {
|
|
131
|
+
chromium = await importPlaywright();
|
|
132
|
+
} catch (err) {
|
|
133
|
+
importErr = err;
|
|
141
134
|
}
|
|
142
135
|
}
|
|
143
136
|
|
|
@@ -152,8 +145,11 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
|
|
|
152
145
|
|
|
153
146
|
const width = windowSize?.width || (wantHeadless ? 1920 : 900);
|
|
154
147
|
const height = windowSize?.height || (wantHeadless ? 1080 : 700);
|
|
148
|
+
// Force bundled Chromium — never Google Chrome channel (/opt/google/chrome),
|
|
149
|
+
// which is missing on most VPS and caused "distribution 'chrome' is not found".
|
|
155
150
|
const options = {
|
|
156
151
|
headless: wantHeadless,
|
|
152
|
+
channel: undefined,
|
|
157
153
|
args: [
|
|
158
154
|
"--disable-blink-features=AutomationControlled",
|
|
159
155
|
"--disable-features=IsolateOrigins,site-per-process,AutomationControlled",
|
|
@@ -173,6 +169,14 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
|
|
|
173
169
|
],
|
|
174
170
|
ignoreDefaultArgs: ["--enable-automation"],
|
|
175
171
|
};
|
|
172
|
+
// Explicit bundled Chromium path when it exists (avoids channel=chrome hijack)
|
|
173
|
+
try {
|
|
174
|
+
const { existsSync } = await import("node:fs");
|
|
175
|
+
const exePath = typeof chromium.executablePath === "function" ? chromium.executablePath() : null;
|
|
176
|
+
if (exePath && existsSync(exePath)) options.executablePath = exePath;
|
|
177
|
+
} catch {
|
|
178
|
+
// ignore
|
|
179
|
+
}
|
|
176
180
|
if (proxyUrl) {
|
|
177
181
|
const { parsePlaywrightProxy } = await import("./proxyUtils.js");
|
|
178
182
|
options.proxy = parsePlaywrightProxy(proxyUrl) || { server: proxyUrl };
|
|
@@ -188,6 +192,18 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
|
|
|
188
192
|
const browser = await chromium.launch(options);
|
|
189
193
|
return wrapBrowserWithStealth(browser);
|
|
190
194
|
}
|
|
195
|
+
// Retry without executablePath if channel/chrome confusion remains
|
|
196
|
+
if (/distribution ['\"]chrome['\"]|Executable doesn't exist|chrome-headless-shell/i.test(msg)) {
|
|
197
|
+
try {
|
|
198
|
+
const retryOpts = { ...options };
|
|
199
|
+
delete retryOpts.channel;
|
|
200
|
+
delete retryOpts.executablePath;
|
|
201
|
+
const browser = await chromium.launch(retryOpts);
|
|
202
|
+
return wrapBrowserWithStealth(browser);
|
|
203
|
+
} catch {
|
|
204
|
+
// fall through
|
|
205
|
+
}
|
|
206
|
+
}
|
|
191
207
|
throw error;
|
|
192
208
|
}
|
|
193
209
|
}
|
|
@@ -72,11 +72,14 @@ export default function Sidebar({ onClose }) {
|
|
|
72
72
|
.catch(() => {});
|
|
73
73
|
}, []);
|
|
74
74
|
|
|
75
|
-
// Lazy check for new npm version on mount
|
|
75
|
+
// Lazy check for new npm version on mount (no-store: avoid sticky update banner)
|
|
76
76
|
useEffect(() => {
|
|
77
|
-
fetch("/api/version")
|
|
78
|
-
.then(res => res.json())
|
|
79
|
-
.then(data => {
|
|
77
|
+
fetch("/api/version", { cache: "no-store" })
|
|
78
|
+
.then((res) => res.json())
|
|
79
|
+
.then((data) => {
|
|
80
|
+
if (data?.hasUpdate) setUpdateInfo(data);
|
|
81
|
+
else setUpdateInfo(null);
|
|
82
|
+
})
|
|
80
83
|
.catch(() => {});
|
|
81
84
|
}, []);
|
|
82
85
|
|
|
File without changes
|
|
File without changes
|