zevairouter 1.1.33 → 1.1.34
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 +35 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +13 -13
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/prerender-manifest.json +4 -4
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -16
- package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
- package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +3 -15
- package/cli/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -3
- package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js +2 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/videos/[id]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/dashboard/media/videos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-token/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/codebuddy/discover-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/opencode/discover-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
- package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/quota-stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/quota-stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/routing-stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback.html +1 -1
- package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.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 +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.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 +3 -3
- 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/_full.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.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/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.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/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/skills.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.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 +3 -3
- 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/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing.html +1 -1
- package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/login.html +1 -1
- package/cli/app/.next-cli-build/server/app/login.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_full.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 +3 -3
- package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/provider-icons/[provider]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app-paths-manifest.json +13 -13
- package/cli/app/.next-cli-build/server/chunks/1131.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/1133.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/1283.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/1350.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/2238.js +1 -0
- package/cli/app/.next-cli-build/server/chunks/2442.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/2456.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/{440.js → 3294.js} +3 -4
- package/cli/app/.next-cli-build/server/chunks/3477.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3593.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3721.js +4 -4
- package/cli/app/.next-cli-build/server/chunks/3792.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3949.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/3999.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/40.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4055.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4322.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/437.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4493.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4586.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/4780.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4827.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4897.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5217.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5330.js +9 -11
- package/cli/app/.next-cli-build/server/chunks/5434.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5436.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5800.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5949.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/6182.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/6252.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/6846.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/6936.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/7170.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/7319.js +24 -27
- package/cli/app/.next-cli-build/server/chunks/773.js +1 -0
- package/cli/app/.next-cli-build/server/chunks/8239.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8655.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8895.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/9489.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/{2750.js → 9528.js} +3 -2
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/middleware.js +2 -2
- 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/server/preview-props.json +3 -3
- package/cli/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/cli/app/.next-cli-build/static/chunks/{5497-a9a321ee476bd2ce.js → 5497-00e385b36b5faf04.js} +2 -2
- package/cli/app/.next-cli-build/static/chunks/620-f497c666bb6c6074.js +1 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-9c505cf411125a6a.js +3 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-4bd92dec9d25dff3.js +1 -0
- package/cli/app/CHANGELOG.md +35 -0
- package/cli/app/cli/hooks/postinstall.js +0 -12
- package/cli/app/cli/hooks/startupRuntime.js +0 -10
- package/cli/app/package.json +1 -1
- package/cli/app/src/lib/db/adapters/sqljsAdapter.js +82 -15
- package/cli/app/src/lib/db/migrate.js +27 -3
- package/cli/app/src/mitm/server.js +32 -34
- package/cli/cli.js +3 -7
- package/cli/hooks/postinstall.js +0 -12
- package/cli/hooks/startupRuntime.js +0 -10
- package/cli/package.json +1 -1
- package/cli/src/cli/terminalUI.js +21 -5
- package/package.json +1 -1
- package/cli/app/.next-cli-build/server/chunks/1585.js +0 -1
- package/cli/app/.next-cli-build/server/chunks/3912.js +0 -2
- package/cli/app/.next-cli-build/static/chunks/620-46999209a961b94a.js +0 -1
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-e9fcb79ca412ea2c.js +0 -3
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-7b3b291fb9d2dc65.js +0 -1
- package/cli/app/cli/hooks/notionTlsRuntime.js +0 -57
- package/cli/app/public/providers/notion-ai.png +0 -0
- package/cli/hooks/notionTlsRuntime.js +0 -57
- /package/cli/app/.next-cli-build/static/{5wTkpSETl1nKGKUkK-OM5 → QnZGjZBbNqQkbGSTiHVnz}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{5wTkpSETl1nKGKUkK-OM5 → QnZGjZBbNqQkbGSTiHVnz}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
exports.id=5949,exports.ids=[5949],exports.modules={6848:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),{getRuntimeDir:f,getRuntimeNodeModules:g,runNpmInstall:h,summarizeNpmError:i}=c(24344),j="tls-client-node",k="0.2.0";function l(){return d.existsSync(e.join(g(),j,"package.json"))}a.exports={ensureNotionTlsRuntime:function({silent:a=!1,timeout:b=3e5}={}){let c,g;if(l())return{ok:!0,already:!0};let m=(c=f(),d.mkdirSync(c,{recursive:!0}),g=e.join(c,"package.json"),d.existsSync(g)||d.writeFileSync(g,JSON.stringify({name:"zevai-runtime",version:"1.0.0",private:!0},null,2)),c),n=h({cwd:m,pkgs:[`${j}@${k}`],timeout:b});return n.ok||a||(console.warn(`[zevai][runtime] Notion TLS install skipped: ${i(n.stderr||n.stdout)}`),console.warn(`[zevai][runtime] Retry: cd "${m}" && npm install ${j}@${k}`)),{ok:n.ok&&l()}},hasNotionTlsRuntime:l}},24344:(a,b,c)=>{"use strict";let{execSync:d,spawnSync:e}=c(79646),f=c(29021),g=c(21820),h=c(33873),i="zevai";function j(){return h.join(process.env.DATA_DIR?process.env.DATA_DIR:"win32"===process.platform?h.join(process.env.APPDATA||g.homedir(),i):h.join(g.homedir(),`.${i}`),"runtime")}function k(){return h.join(j(),"node_modules")}function l(){let a=j();f.existsSync(a)||f.mkdirSync(a,{recursive:!0});let b=h.join(a,"package.json");return f.existsSync(b)||f.writeFileSync(b,JSON.stringify({name:"zevai-runtime",version:"1.0.0",private:!0,description:"User-writable runtime deps for ZevaiRouter (better-sqlite3 native binary)"},null,2)),a}function m(a){return f.existsSync(h.join(k(),a,"package.json"))}function n(){let a=h.join(k(),"better-sqlite3","build","Release","better_sqlite3.node");if(!f.existsSync(a))return!1;try{let b=f.openSync(a,"r"),c=Buffer.alloc(4);f.readSync(b,c,0,4,0),f.closeSync(b);let d=c.toString("hex");if("linux"===process.platform)return d.startsWith("7f454c46");if("darwin"===process.platform)return d.startsWith("cffaedfe")||d.startsWith("cefaedfe");if("win32"===process.platform)return d.startsWith("4d5a");return!0}catch{return!1}}function o(a=""){let b=String(a);if(/ENOTFOUND|ETIMEDOUT|EAI_AGAIN|network|getaddrinfo/i.test(b))return"No internet connection or registry unreachable";if(/EACCES|EPERM|permission denied/i.test(b))return"Permission denied (check folder permissions)";if(/ENOSPC|no space/i.test(b))return"Not enough disk space";if(/node-gyp|gyp ERR|python|MSBuild|Visual Studio|Xcode/i.test(b))return"Missing build tools (Xcode CLT / Python / VS Build Tools)";if(/ETARGET|version.*not found/i.test(b))return"Package version not found on registry";let c=b.match(/npm ERR! (.+)/);if(c)return c[1].slice(0,200);let d=b.trim().split(/\r?\n/).filter(Boolean).pop();return d?d.slice(0,200):"Unknown error"}function p({cwd:a,pkgs:b,extraArgs:c=[],timeout:d=18e4}){let g=["install",...b,"--save","--no-audit","--no-fund","--prefer-online","--loglevel=error",...c.filter(a=>"--no-save"!==a)],i="win32"===process.platform?"npm.cmd":"npm",j=g,k="win32"===process.platform;try{let a=h.join(h.dirname(process.execPath),"..","lib","node_modules","npm","bin","npm-cli.js");f.existsSync(a)&&(i=process.execPath,j=[a,...g],k=!1)}catch{}let l=e(i,j,{cwd:a,stdio:["ignore","pipe","pipe"],timeout:d,shell:k,encoding:"utf8"});return{ok:0===l.status,code:l.status,stderr:l.stderr||"",stdout:l.stdout||""}}a.exports={ensureSqliteRuntime:function({silent:a=!1}={}){return(l(),m("better-sqlite3")&&n())?(a||console.log("✅ SQLite engine ready"),{betterSqlite:!0}):{betterSqlite:function(a,b={}){let c=l(),d=b.optional?["--no-save"]:[];b.silent||console.log("⏳ Installing SQLite engine (first run)...");let e=p({cwd:c,pkgs:a,extraArgs:d,timeout:b.timeout||18e4});if(!e.ok&&!b.silent){let b=o(e.stderr);console.warn("⚠️ SQLite engine install failed — using fallback"),console.warn(` Reason: ${b}`),console.warn(` Retry: cd "${c}" && npm install ${a.join(" ")}`)}return e.ok}(["better-sqlite3@12.6.2"],{optional:!0,silent:a})&&m("better-sqlite3")&&n()}},buildEnvWithRuntime:function(a=process.env){let b=[k(),h.join(__dirname,"..","app","node_modules"),h.join(__dirname,"..","..","node_modules"),a.NODE_PATH||""].filter(Boolean).join(h.delimiter);return{...a,NODE_PATH:b}},getRuntimeDir:j,getRuntimeNodeModules:k,runNpmInstall:p,summarizeNpmError:o}},50982:(a,b,c)=>{var d={"./cloakbrowserRuntime":99436,"./cloakbrowserRuntime.js":99436,"./notionTlsRuntime":6848,"./notionTlsRuntime.js":6848,"./postinstall":77897,"./postinstall.js":77897,"./safeGlobalInstall":65185,"./safeGlobalInstall.js":65185,"./sqliteRuntime":24344,"./sqliteRuntime.js":24344,"./startupRuntime":83445,"./startupRuntime.js":83445,"./streamCommand":69069,"./streamCommand.js":69069,"./trayRuntime":52784,"./trayRuntime.js":52784};function e(a){return c(f(a))}function f(a){if(!c.o(d,a)){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}return d[a]}e.keys=function(){return Object.keys(d)},e.resolve=f,a.exports=e,e.id=50982},51029:a=>{function b(a){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}b.keys=()=>[],b.resolve=b,b.id=51029,a.exports=b},52784:(a,b,c)=>{"use strict";let{spawnSync:d}=c(79646),e=c(29021),f=c(33873),{getRuntimeDir:g,getRuntimeNodeModules:h,runNpmInstall:i,summarizeNpmError:j}=c(24344),k="systray2",l="systray";function m(){return e.existsSync(f.join(h(),k,"package.json"))}function n({silent:a=!1}={}){if("win32"===process.platform)return;let b="darwin"===process.platform?"tray_darwin_release":"tray_linux_release",c=f.join(h(),k,"traybin",b);if(e.existsSync(c))try{e.chmodSync(c,493)}catch(b){a||console.warn(`[zevai][runtime] chmod tray bin failed: ${b.message}`)}}a.exports={ensureTrayRuntime:function({silent:a=!1}={}){if(!function({silent:a=!1}={}){for(let b of[f.join(h(),l),f.join(__dirname,"..","node_modules",l)])if(e.existsSync(b))try{e.rmSync(b,{recursive:!0,force:!0}),a||console.log(`[zevai][runtime] removed legacy systray: ${b}`)}catch(c){a||console.warn(`[zevai][runtime] failed to remove ${b}: ${c.message}`)}}({silent:a}),"win32"===process.platform)return{systray:!1,skipped:!0};if(m())return n({silent:a}),a||console.log("✅ System tray ready"),{systray:!0};let b=function(a,{silent:b=!1}={}){let c,d,h=(c=g(),e.existsSync(c)||e.mkdirSync(c,{recursive:!0}),d=f.join(c,"package.json"),e.existsSync(d)||e.writeFileSync(d,JSON.stringify({name:"zevai-runtime",version:"1.0.0",private:!0},null,2)),c);b||console.log("⏳ Installing system tray (first run)...");let k=i({cwd:h,pkgs:a,extraArgs:["--no-save"],timeout:12e4});if(!k.ok&&!b){let b=j(k.stderr);console.warn("⚠️ System tray install failed — tray disabled"),console.warn(` Reason: ${b}`),console.warn(` Retry: cd "${h}" && npm install ${a.join(" ")}`)}return k.ok}([`${k}@2.1.4`],{silent:a});return b&&n({silent:a}),{systray:b&&m()}}}},65185:(a,b,c)=>{"use strict";a=c.nmd(a);let{execFileSync:d,spawnSync:e}=c(79646),f=c(29021),g=c(21820),h=c(33873),i="zevairouter",j="zevai";function k(a){console.log(`[zevai-install] ${a}`)}function l(a){console.warn(`[zevai-install] ${a}`)}function m(){let a=process.platform;return"darwin"===a?{id:"mac",label:"macOS"}:"win32"===a?{id:"windows",label:"Windows"}:"linux"===a?{id:"linux",label:"Linux"}:{id:a,label:a}}function n(){let a=h.dirname(process.execPath);for(let b of"win32"===process.platform?[h.join(a,"node_modules","npm","bin","npm-cli.js"),h.join(a,"npm.cmd"),h.join(a,"npm"),"npm.cmd","npm"]:[h.join(a,"npm"),h.join(a,"..","lib","node_modules","npm","bin","npm-cli.js")])if("npm"!==b&&"npm.cmd"!==b&&f.existsSync(b))return b;try{let a="win32"===process.platform?"where":"which",b=d(a,["npm"],{encoding:"utf8"}).trim().split(/\r?\n/)[0];if(b)return b}catch{}return"win32"===process.platform?"npm.cmd":"npm"}function o(a,b,c={}){let d={...process.env,npm_config_fund:"false",npm_config_audit:"false",npm_config_update_notifier:"false",npm_node_execpath:process.execPath},i=a.endsWith("npm-cli.js"),j=i?process.execPath:a,k=i?[a,...b]:b;if(c.stream){let a=f.mkdtempSync(h.join(g.tmpdir(),"zevai-command-")),b=h.join(a,"result.json");try{let a=h.join(__dirname,"streamCommand.js"),g=e(process.execPath,[a,b,j,...k],{env:{...d,ZEVAI_STREAM_COMMAND_SHELL:"win32"!==process.platform||i?"0":"1"},stdio:"inherit",timeout:c.timeout||6e5,windowsHide:!0}),l={};try{l=JSON.parse(f.readFileSync(b,"utf8"))}catch{}return{ok:0===g.status&&0===l.status,status:l.status??g.status,stdout:l.stdout||"",stderr:l.stderr||"",error:g.error||l.error||null}}finally{try{f.rmSync(a,{recursive:!0,force:!0})}catch{}}}let l=e(j,k,{encoding:"utf8",env:d,shell:"win32"===process.platform&&!i,timeout:c.timeout||6e5});return{ok:0===l.status,status:l.status,stdout:l.stdout||"",stderr:l.stderr||"",error:l.error}}function p(a){let b=(o(a,["root","-g"],{timeout:3e4}).stdout||"").trim().split(/\r?\n/).filter(Boolean).pop();return b&&f.existsSync(b)?b:"win32"===process.platform?h.join(h.dirname(process.execPath),"node_modules"):h.join(h.dirname(process.execPath),"..","lib","node_modules")}function q(a){let b=(o(a,["prefix","-g"],{timeout:3e4}).stdout||"").trim().split(/\r?\n/).filter(Boolean).pop();if(b&&f.existsSync(b)){if("win32"===process.platform)return b;let a=h.join(b,"bin");if(f.existsSync(a))return a}return h.dirname(process.execPath)}function r(a){let b=h.join(a,i);f.existsSync(b)&&(k(`Removing previous install: ${b}`),f.rmSync(b,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}));try{for(let b of f.readdirSync(a))if(b.startsWith(`.${i}-`)||b===`.${i}`){let c=h.join(a,b);k(`Removing leftover: ${c}`),f.rmSync(c,{recursive:!0,force:!0,maxRetries:5,retryDelay:200})}}catch{}}function s(a){for(let b of"win32"===process.platform?[`${j}.cmd`,`${j}`,`${j}.ps1`]:[j]){let c=h.join(a,b);try{f.existsSync(c)&&f.rmSync(c,{force:!0})}catch{}}}function t(){return"win32"===process.platform?[`${j}.cmd`,j,`${j}.ps1`]:[j]}function u(a,b=f){try{return b.lstatSync(a),!0}catch{return!1}}function v(a,b){let c=h.join(a,i);if(!f.existsSync(h.join(c,"package.json")))return null;let d=f.mkdtempSync(h.join(g.tmpdir(),"zevai-install-rollback-")),e=h.join(d,i),j=h.join(d,"bin");try{for(let a of(f.cpSync(c,e,{recursive:!0,preserveTimestamps:!0,verbatimSymlinks:!0}),f.mkdirSync(j,{recursive:!0}),t())){let c=h.join(b,a);u(c)&&f.cpSync(c,h.join(j,a),{preserveTimestamps:!0,verbatimSymlinks:!0})}return{backupRoot:d,packageBackup:e,binBackup:j}}catch(a){try{f.rmSync(d,{recursive:!0,force:!0})}catch{}throw a}}function w(a,b,c){if(!a)return;let d=h.join(b,i);for(let b of(f.rmSync(d,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}),f.cpSync(a.packageBackup,d,{recursive:!0,preserveTimestamps:!0,verbatimSymlinks:!0}),s(c),t())){let d=h.join(a.binBackup,b);if(!u(d))continue;let e=h.join(c,b);f.lstatSync(d).isSymbolicLink()?f.symlinkSync(f.readlinkSync(d),e):f.cpSync(d,e,{preserveTimestamps:!0,verbatimSymlinks:!0})}}function x(a){if(a)try{f.rmSync(a.backupRoot,{recursive:!0,force:!0})}catch{}}function y(a,b=f){try{let c=h.join(a,i,"package.json"),d=JSON.parse(b.readFileSync(c,"utf8"));return{name:d?.name||null,version:d?.version||null}}catch{return null}}function z(a,b=f){return y(a,b)?.version||null}function A(a,b=f){try{return b.existsSync(h.join(a,i,"package.json"))}catch{return!1}}function B(a={},b=f){let c=String(a.version||"latest").replace(/^v(?=\d)/,""),d=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(c);if(!a.localArtifact){let b=a.packageSpec||`${i}@${c}`;return("latest"===c||d)&&b===`${i}@${c}`?{ok:!0,kind:"registry",packageSpec:b,expectedVersion:d?c:null}:{ok:!1,error:"Version must be 'latest' or an exact semantic version (for example 1.2.3)."}}if(!0!==a.allowLocalArtifact||!d)return{ok:!1,error:"Local artifacts require explicit opt-in and an exact expected version."};try{let d=h.resolve(String(a.localArtifact)),e=b.lstatSync(d);if(!e.isFile()||e.isSymbolicLink()||".tgz"!==h.extname(d))throw Error("Local artifact must be a regular .tgz file, not a directory or symlink.");let f=b.realpathSync(d);if(f!==d)throw Error("Local artifact path must already be canonical and contain no symlink components.");return{ok:!0,kind:"local-artifact",packageSpec:f,expectedVersion:c}}catch(a){return{ok:!1,error:a.message}}}function C(a={}){let b=m(),c=a.dependencies||{},d=c.fs||f,g=c.runNpm||o,t=c.resolveNpmForThisNode||n,u=c.getGlobalRoot||p,D=c.getGlobalBin||q,E=c.spawnSync||e,F=B(a,d);if(!F.ok)return{ok:!1,nodePath:process.execPath,npmPath:"",globalRoot:"",platform:b,error:F.error};let G=t(),H=u(G),I=D(G),J=A(H,d),K=J?z(H,d):null,L=null;if(J&&!a.externalRollback)try{L=v(H,I),k(`rollback snapshot: ${L.backupRoot}`)}catch(a){return{ok:!1,nodePath:process.execPath,npmPath:G,globalRoot:H,platform:b,version:K||void 0,error:`Refusing to update without a rollback snapshot: ${a.message}`}}k(`OS: ${b.label} (${process.platform}/${process.arch})`),k(`Node: ${process.version} @ ${process.execPath}`),k(`npm: ${G}`),k(`global root: ${H}`),k(`global bin: ${I}`),k(`installing: ${F.packageSpec}${K?` (was ${K})`:""}`);let M=!0===a.forceClean;M&&!J?(r(H),s(I)):M&&J&&l("forceClean requested but existing package kept until install succeeds (OOM-safe)");let N=["install","-g",F.packageSpec];"registry"===F.kind&&N.push("--prefer-online"),process.env.npm_config_registry||process.env.ZEVAI_NPM_REGISTRY&&N.push("--registry",process.env.ZEVAI_NPM_REGISTRY);let O=g(G,N,{timeout:6e5,stream:!0}),P=`${O.stderr}
|
|
1
|
+
exports.id=5949,exports.ids=[5949],exports.modules={24344:(a,b,c)=>{"use strict";let{execSync:d,spawnSync:e}=c(79646),f=c(29021),g=c(21820),h=c(33873),i="zevai";function j(){return h.join(process.env.DATA_DIR?process.env.DATA_DIR:"win32"===process.platform?h.join(process.env.APPDATA||g.homedir(),i):h.join(g.homedir(),`.${i}`),"runtime")}function k(){return h.join(j(),"node_modules")}function l(){let a=j();f.existsSync(a)||f.mkdirSync(a,{recursive:!0});let b=h.join(a,"package.json");return f.existsSync(b)||f.writeFileSync(b,JSON.stringify({name:"zevai-runtime",version:"1.0.0",private:!0,description:"User-writable runtime deps for ZevaiRouter (better-sqlite3 native binary)"},null,2)),a}function m(a){return f.existsSync(h.join(k(),a,"package.json"))}function n(){let a=h.join(k(),"better-sqlite3","build","Release","better_sqlite3.node");if(!f.existsSync(a))return!1;try{let b=f.openSync(a,"r"),c=Buffer.alloc(4);f.readSync(b,c,0,4,0),f.closeSync(b);let d=c.toString("hex");if("linux"===process.platform)return d.startsWith("7f454c46");if("darwin"===process.platform)return d.startsWith("cffaedfe")||d.startsWith("cefaedfe");if("win32"===process.platform)return d.startsWith("4d5a");return!0}catch{return!1}}function o(a=""){let b=String(a);if(/ENOTFOUND|ETIMEDOUT|EAI_AGAIN|network|getaddrinfo/i.test(b))return"No internet connection or registry unreachable";if(/EACCES|EPERM|permission denied/i.test(b))return"Permission denied (check folder permissions)";if(/ENOSPC|no space/i.test(b))return"Not enough disk space";if(/node-gyp|gyp ERR|python|MSBuild|Visual Studio|Xcode/i.test(b))return"Missing build tools (Xcode CLT / Python / VS Build Tools)";if(/ETARGET|version.*not found/i.test(b))return"Package version not found on registry";let c=b.match(/npm ERR! (.+)/);if(c)return c[1].slice(0,200);let d=b.trim().split(/\r?\n/).filter(Boolean).pop();return d?d.slice(0,200):"Unknown error"}function p({cwd:a,pkgs:b,extraArgs:c=[],timeout:d=18e4}){let g=["install",...b,"--save","--no-audit","--no-fund","--prefer-online","--loglevel=error",...c.filter(a=>"--no-save"!==a)],i="win32"===process.platform?"npm.cmd":"npm",j=g,k="win32"===process.platform;try{let a=h.join(h.dirname(process.execPath),"..","lib","node_modules","npm","bin","npm-cli.js");f.existsSync(a)&&(i=process.execPath,j=[a,...g],k=!1)}catch{}let l=e(i,j,{cwd:a,stdio:["ignore","pipe","pipe"],timeout:d,shell:k,encoding:"utf8"});return{ok:0===l.status,code:l.status,stderr:l.stderr||"",stdout:l.stdout||""}}a.exports={ensureSqliteRuntime:function({silent:a=!1}={}){return(l(),m("better-sqlite3")&&n())?(a||console.log("✅ SQLite engine ready"),{betterSqlite:!0}):{betterSqlite:function(a,b={}){let c=l(),d=b.optional?["--no-save"]:[];b.silent||console.log("⏳ Installing SQLite engine (first run)...");let e=p({cwd:c,pkgs:a,extraArgs:d,timeout:b.timeout||18e4});if(!e.ok&&!b.silent){let b=o(e.stderr);console.warn("⚠️ SQLite engine install failed — using fallback"),console.warn(` Reason: ${b}`),console.warn(` Retry: cd "${c}" && npm install ${a.join(" ")}`)}return e.ok}(["better-sqlite3@12.6.2"],{optional:!0,silent:a})&&m("better-sqlite3")&&n()}},buildEnvWithRuntime:function(a=process.env){let b=[k(),h.join(__dirname,"..","app","node_modules"),h.join(__dirname,"..","..","node_modules"),a.NODE_PATH||""].filter(Boolean).join(h.delimiter);return{...a,NODE_PATH:b}},getRuntimeDir:j,getRuntimeNodeModules:k,runNpmInstall:p,summarizeNpmError:o}},50982:(a,b,c)=>{var d={"./cloakbrowserRuntime":99436,"./cloakbrowserRuntime.js":99436,"./postinstall":77897,"./postinstall.js":77897,"./safeGlobalInstall":65185,"./safeGlobalInstall.js":65185,"./sqliteRuntime":24344,"./sqliteRuntime.js":24344,"./startupRuntime":83445,"./startupRuntime.js":83445,"./streamCommand":69069,"./streamCommand.js":69069,"./trayRuntime":52784,"./trayRuntime.js":52784};function e(a){return c(f(a))}function f(a){if(!c.o(d,a)){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}return d[a]}e.keys=function(){return Object.keys(d)},e.resolve=f,a.exports=e,e.id=50982},51029:a=>{function b(a){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}b.keys=()=>[],b.resolve=b,b.id=51029,a.exports=b},52784:(a,b,c)=>{"use strict";let{spawnSync:d}=c(79646),e=c(29021),f=c(33873),{getRuntimeDir:g,getRuntimeNodeModules:h,runNpmInstall:i,summarizeNpmError:j}=c(24344),k="systray2",l="systray";function m(){return e.existsSync(f.join(h(),k,"package.json"))}function n({silent:a=!1}={}){if("win32"===process.platform)return;let b="darwin"===process.platform?"tray_darwin_release":"tray_linux_release",c=f.join(h(),k,"traybin",b);if(e.existsSync(c))try{e.chmodSync(c,493)}catch(b){a||console.warn(`[zevai][runtime] chmod tray bin failed: ${b.message}`)}}a.exports={ensureTrayRuntime:function({silent:a=!1}={}){if(!function({silent:a=!1}={}){for(let b of[f.join(h(),l),f.join(__dirname,"..","node_modules",l)])if(e.existsSync(b))try{e.rmSync(b,{recursive:!0,force:!0}),a||console.log(`[zevai][runtime] removed legacy systray: ${b}`)}catch(c){a||console.warn(`[zevai][runtime] failed to remove ${b}: ${c.message}`)}}({silent:a}),"win32"===process.platform)return{systray:!1,skipped:!0};if(m())return n({silent:a}),a||console.log("✅ System tray ready"),{systray:!0};let b=function(a,{silent:b=!1}={}){let c,d,h=(c=g(),e.existsSync(c)||e.mkdirSync(c,{recursive:!0}),d=f.join(c,"package.json"),e.existsSync(d)||e.writeFileSync(d,JSON.stringify({name:"zevai-runtime",version:"1.0.0",private:!0},null,2)),c);b||console.log("⏳ Installing system tray (first run)...");let k=i({cwd:h,pkgs:a,extraArgs:["--no-save"],timeout:12e4});if(!k.ok&&!b){let b=j(k.stderr);console.warn("⚠️ System tray install failed — tray disabled"),console.warn(` Reason: ${b}`),console.warn(` Retry: cd "${h}" && npm install ${a.join(" ")}`)}return k.ok}([`${k}@2.1.4`],{silent:a});return b&&n({silent:a}),{systray:b&&m()}}}},65185:(a,b,c)=>{"use strict";a=c.nmd(a);let{execFileSync:d,spawnSync:e}=c(79646),f=c(29021),g=c(21820),h=c(33873),i="zevairouter",j="zevai";function k(a){console.log(`[zevai-install] ${a}`)}function l(a){console.warn(`[zevai-install] ${a}`)}function m(){let a=process.platform;return"darwin"===a?{id:"mac",label:"macOS"}:"win32"===a?{id:"windows",label:"Windows"}:"linux"===a?{id:"linux",label:"Linux"}:{id:a,label:a}}function n(){let a=h.dirname(process.execPath);for(let b of"win32"===process.platform?[h.join(a,"node_modules","npm","bin","npm-cli.js"),h.join(a,"npm.cmd"),h.join(a,"npm"),"npm.cmd","npm"]:[h.join(a,"npm"),h.join(a,"..","lib","node_modules","npm","bin","npm-cli.js")])if("npm"!==b&&"npm.cmd"!==b&&f.existsSync(b))return b;try{let a="win32"===process.platform?"where":"which",b=d(a,["npm"],{encoding:"utf8"}).trim().split(/\r?\n/)[0];if(b)return b}catch{}return"win32"===process.platform?"npm.cmd":"npm"}function o(a,b,c={}){let d={...process.env,npm_config_fund:"false",npm_config_audit:"false",npm_config_update_notifier:"false",npm_node_execpath:process.execPath},i=a.endsWith("npm-cli.js"),j=i?process.execPath:a,k=i?[a,...b]:b;if(c.stream){let a=f.mkdtempSync(h.join(g.tmpdir(),"zevai-command-")),b=h.join(a,"result.json");try{let a=h.join(__dirname,"streamCommand.js"),g=e(process.execPath,[a,b,j,...k],{env:{...d,ZEVAI_STREAM_COMMAND_SHELL:"win32"!==process.platform||i?"0":"1"},stdio:"inherit",timeout:c.timeout||6e5,windowsHide:!0}),l={};try{l=JSON.parse(f.readFileSync(b,"utf8"))}catch{}return{ok:0===g.status&&0===l.status,status:l.status??g.status,stdout:l.stdout||"",stderr:l.stderr||"",error:g.error||l.error||null}}finally{try{f.rmSync(a,{recursive:!0,force:!0})}catch{}}}let l=e(j,k,{encoding:"utf8",env:d,shell:"win32"===process.platform&&!i,timeout:c.timeout||6e5});return{ok:0===l.status,status:l.status,stdout:l.stdout||"",stderr:l.stderr||"",error:l.error}}function p(a){let b=(o(a,["root","-g"],{timeout:3e4}).stdout||"").trim().split(/\r?\n/).filter(Boolean).pop();return b&&f.existsSync(b)?b:"win32"===process.platform?h.join(h.dirname(process.execPath),"node_modules"):h.join(h.dirname(process.execPath),"..","lib","node_modules")}function q(a){let b=(o(a,["prefix","-g"],{timeout:3e4}).stdout||"").trim().split(/\r?\n/).filter(Boolean).pop();if(b&&f.existsSync(b)){if("win32"===process.platform)return b;let a=h.join(b,"bin");if(f.existsSync(a))return a}return h.dirname(process.execPath)}function r(a){let b=h.join(a,i);f.existsSync(b)&&(k(`Removing previous install: ${b}`),f.rmSync(b,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}));try{for(let b of f.readdirSync(a))if(b.startsWith(`.${i}-`)||b===`.${i}`){let c=h.join(a,b);k(`Removing leftover: ${c}`),f.rmSync(c,{recursive:!0,force:!0,maxRetries:5,retryDelay:200})}}catch{}}function s(a){for(let b of"win32"===process.platform?[`${j}.cmd`,`${j}`,`${j}.ps1`]:[j]){let c=h.join(a,b);try{f.existsSync(c)&&f.rmSync(c,{force:!0})}catch{}}}function t(){return"win32"===process.platform?[`${j}.cmd`,j,`${j}.ps1`]:[j]}function u(a,b=f){try{return b.lstatSync(a),!0}catch{return!1}}function v(a,b){let c=h.join(a,i);if(!f.existsSync(h.join(c,"package.json")))return null;let d=f.mkdtempSync(h.join(g.tmpdir(),"zevai-install-rollback-")),e=h.join(d,i),j=h.join(d,"bin");try{for(let a of(f.cpSync(c,e,{recursive:!0,preserveTimestamps:!0,verbatimSymlinks:!0}),f.mkdirSync(j,{recursive:!0}),t())){let c=h.join(b,a);u(c)&&f.cpSync(c,h.join(j,a),{preserveTimestamps:!0,verbatimSymlinks:!0})}return{backupRoot:d,packageBackup:e,binBackup:j}}catch(a){try{f.rmSync(d,{recursive:!0,force:!0})}catch{}throw a}}function w(a,b,c){if(!a)return;let d=h.join(b,i);for(let b of(f.rmSync(d,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}),f.cpSync(a.packageBackup,d,{recursive:!0,preserveTimestamps:!0,verbatimSymlinks:!0}),s(c),t())){let d=h.join(a.binBackup,b);if(!u(d))continue;let e=h.join(c,b);f.lstatSync(d).isSymbolicLink()?f.symlinkSync(f.readlinkSync(d),e):f.cpSync(d,e,{preserveTimestamps:!0,verbatimSymlinks:!0})}}function x(a){if(a)try{f.rmSync(a.backupRoot,{recursive:!0,force:!0})}catch{}}function y(a,b=f){try{let c=h.join(a,i,"package.json"),d=JSON.parse(b.readFileSync(c,"utf8"));return{name:d?.name||null,version:d?.version||null}}catch{return null}}function z(a,b=f){return y(a,b)?.version||null}function A(a,b=f){try{return b.existsSync(h.join(a,i,"package.json"))}catch{return!1}}function B(a={},b=f){let c=String(a.version||"latest").replace(/^v(?=\d)/,""),d=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(c);if(!a.localArtifact){let b=a.packageSpec||`${i}@${c}`;return("latest"===c||d)&&b===`${i}@${c}`?{ok:!0,kind:"registry",packageSpec:b,expectedVersion:d?c:null}:{ok:!1,error:"Version must be 'latest' or an exact semantic version (for example 1.2.3)."}}if(!0!==a.allowLocalArtifact||!d)return{ok:!1,error:"Local artifacts require explicit opt-in and an exact expected version."};try{let d=h.resolve(String(a.localArtifact)),e=b.lstatSync(d);if(!e.isFile()||e.isSymbolicLink()||".tgz"!==h.extname(d))throw Error("Local artifact must be a regular .tgz file, not a directory or symlink.");let f=b.realpathSync(d);if(f!==d)throw Error("Local artifact path must already be canonical and contain no symlink components.");return{ok:!0,kind:"local-artifact",packageSpec:f,expectedVersion:c}}catch(a){return{ok:!1,error:a.message}}}function C(a={}){let b=m(),c=a.dependencies||{},d=c.fs||f,g=c.runNpm||o,t=c.resolveNpmForThisNode||n,u=c.getGlobalRoot||p,D=c.getGlobalBin||q,E=c.spawnSync||e,F=B(a,d);if(!F.ok)return{ok:!1,nodePath:process.execPath,npmPath:"",globalRoot:"",platform:b,error:F.error};let G=t(),H=u(G),I=D(G),J=A(H,d),K=J?z(H,d):null,L=null;if(J&&!a.externalRollback)try{L=v(H,I),k(`rollback snapshot: ${L.backupRoot}`)}catch(a){return{ok:!1,nodePath:process.execPath,npmPath:G,globalRoot:H,platform:b,version:K||void 0,error:`Refusing to update without a rollback snapshot: ${a.message}`}}k(`OS: ${b.label} (${process.platform}/${process.arch})`),k(`Node: ${process.version} @ ${process.execPath}`),k(`npm: ${G}`),k(`global root: ${H}`),k(`global bin: ${I}`),k(`installing: ${F.packageSpec}${K?` (was ${K})`:""}`);let M=!0===a.forceClean;M&&!J?(r(H),s(I)):M&&J&&l("forceClean requested but existing package kept until install succeeds (OOM-safe)");let N=["install","-g",F.packageSpec];"registry"===F.kind&&N.push("--prefer-online"),process.env.npm_config_registry||process.env.ZEVAI_NPM_REGISTRY&&N.push("--registry",process.env.ZEVAI_NPM_REGISTRY);let O=g(G,N,{timeout:6e5,stream:!0}),P=`${O.stderr}
|
|
2
2
|
${O.stdout}
|
|
3
3
|
${O.error||""}`;if(!O.ok&&/ENOTEMPTY|directory not empty|rename/i.test(P)){l("ENOTEMPTY/rename failed — force-clean and retry once");try{r(H),s(I),O=g(G,N,{timeout:6e5,stream:!0}),P=`${O.stderr}
|
|
4
4
|
${O.stdout}
|
|
@@ -58,4 +58,4 @@ Done. Run: zevai --version`),d.zevaiPath&&console.log(`Binary: ${d.zevaiPath}`)
|
|
|
58
58
|
VPS has no display. Install a virtual screen then retry:
|
|
59
59
|
sudo apt-get update && sudo apt-get install -y xvfb
|
|
60
60
|
sudo systemctl restart zevairouter
|
|
61
|
-
ZevaiRouter auto-starts Xvfb when installed.`);throw c.code="NO_DISPLAY",c.cause=b,c}throw b}}async function K({engine:a=h,proxyUrl:b,headless:c=!1,windowSize:d=null,requireProxyGeoip:e=!1,timeoutMs:f=m}={}){return r(a),w(J({proxyUrl:b,headless:!0===c,windowSize:d,requireProxyGeoip:e}),{timeoutMs:f,message:`CloakBrowser launch timed out after ${Math.round(f/1e3)}s`,code:"BROWSER_LAUNCH_TIMEOUT",onLateResolve:a=>M(a)})}function L({engine:a,proxyUrl:b,headless:c=!1,windowSize:d=null}={}){return()=>K({engine:a,proxyUrl:b,headless:c,windowSize:d})}async function M(a,{timeoutMs:b=4e3}={}){if(!a)return;let c=G(a),d=Number(c?.pid),e=Number.isFinite(d)&&d>1?d:null;try{await w(Promise.resolve().then(()=>a.close()),{timeoutMs:b,message:`Browser close timed out after ${b}ms`,code:"BROWSER_CLOSE_TIMEOUT"})}catch{}let f=()=>{if(!c||null!=c.exitCode||null!=c.signalCode)return!1;if(!e)return!0;try{return process.kill(e,0),!0}catch{return!1}};if(c&&f()){let a=a=>{if(e&&"win32"!==process.platform)try{process.kill(-e,a)}catch{}try{"function"==typeof c.kill?c.kill(a):e&&process.kill(e,a)}catch{}};a("SIGTERM"),await new Promise(a=>setTimeout(a,400)),f()&&a("SIGKILL")}}},77897:(a,b,c)=>{let d=c(33873),e=c(29021);process.env.NPM_CONFIG_FUND="false",process.env.NPM_CONFIG_AUDIT="false",process.env.NPM_CONFIG_UPDATE_NOTIFIER="false",process.env.NPM_CONFIG_LOGLEVEL=process.env.NPM_CONFIG_LOGLEVEL||"error";let{ensureSqliteRuntime:f,runNpmInstall:g,getRuntimeDir:h}=c(24344),{ensureTrayRuntime:i}=c(52784),{ensureCloakbrowserRuntime:j}=c(99436),{
|
|
61
|
+
ZevaiRouter auto-starts Xvfb when installed.`);throw c.code="NO_DISPLAY",c.cause=b,c}throw b}}async function K({engine:a=h,proxyUrl:b,headless:c=!1,windowSize:d=null,requireProxyGeoip:e=!1,timeoutMs:f=m}={}){return r(a),w(J({proxyUrl:b,headless:!0===c,windowSize:d,requireProxyGeoip:e}),{timeoutMs:f,message:`CloakBrowser launch timed out after ${Math.round(f/1e3)}s`,code:"BROWSER_LAUNCH_TIMEOUT",onLateResolve:a=>M(a)})}function L({engine:a,proxyUrl:b,headless:c=!1,windowSize:d=null}={}){return()=>K({engine:a,proxyUrl:b,headless:c,windowSize:d})}async function M(a,{timeoutMs:b=4e3}={}){if(!a)return;let c=G(a),d=Number(c?.pid),e=Number.isFinite(d)&&d>1?d:null;try{await w(Promise.resolve().then(()=>a.close()),{timeoutMs:b,message:`Browser close timed out after ${b}ms`,code:"BROWSER_CLOSE_TIMEOUT"})}catch{}let f=()=>{if(!c||null!=c.exitCode||null!=c.signalCode)return!1;if(!e)return!0;try{return process.kill(e,0),!0}catch{return!1}};if(c&&f()){let a=a=>{if(e&&"win32"!==process.platform)try{process.kill(-e,a)}catch{}try{"function"==typeof c.kill?c.kill(a):e&&process.kill(e,a)}catch{}};a("SIGTERM"),await new Promise(a=>setTimeout(a,400)),f()&&a("SIGKILL")}}},77897:(a,b,c)=>{let d=c(33873),e=c(29021);process.env.NPM_CONFIG_FUND="false",process.env.NPM_CONFIG_AUDIT="false",process.env.NPM_CONFIG_UPDATE_NOTIFIER="false",process.env.NPM_CONFIG_LOGLEVEL=process.env.NPM_CONFIG_LOGLEVEL||"error";let{ensureSqliteRuntime:f,runNpmInstall:g,getRuntimeDir:h}=c(24344),{ensureTrayRuntime:i}=c(52784),{ensureCloakbrowserRuntime:j}=c(99436),{hasBuiltInNodeSqlite:k}=c(83445),l=String(process.env.ZEVAI_MINIMAL_POSTINSTALL||"").toLowerCase(),m="0"!==l&&"false"!==l,n="1"===process.env.ZEVAI_SKIP_RUNTIME_POSTINSTALL||"true"===process.env.ZEVAI_SKIP_RUNTIME_POSTINSTALL;function o(a){console.log(`[zevai] ${a}`)}function p(a){console.warn(`[zevai] ${a}`)}(async function(){if(n)return void o("Runtime warm-up skipped by ZEVAI_SKIP_RUNTIME_POSTINSTALL");if(o(m?"Minimal postinstall (ZEVAI_MINIMAL_POSTINSTALL=1) — browsers install on first use":"Preparing full runtime so all features work after this install…"),k())o("✓ Built-in node:sqlite engine ready");else try{f({silent:!0}).betterSqlite?o("✓ SQLite native engine ready"):p("SQLite native engine unavailable — the bundled sql.js fallback will be used")}catch(a){p(`SQLite native warm-up skipped: ${a.message} — the bundled fallback remains available`)}try{let a=i({silent:!0});a.systray||a.skipped?o(a.skipped?"\xb7 Native tray helper not required on Windows":"✓ System tray helper ready"):p("System tray helper unavailable — start with `zevai` in the terminal")}catch(a){p(`Tray warm-up skipped: ${a.message}`)}if(m)return void o("Done (minimal). Automation downloads CloakBrowser on first use.");try{let a=j({silent:!0});if(a.ok)if("function"!=typeof a.module?.ensureBinary)p("CloakBrowser package is installed but ensureBinary() is unavailable");else{let b=await a.module.ensureBinary();if(!b||!e.existsSync(b))throw Error("binary download completed without an executable path");o(`✓ CloakBrowser binary ready (${b})`),function(){try{let{getRuntimeNodeModules:a}=c(24344),b=a(),f=d.join(__dirname,"..","app","node_modules");if(!e.existsSync(d.join(f,"next")))return;for(let a of["playwright-core","cloakbrowser","mmdb-lib"]){let c=d.join(b,a),g=d.join(f,a);e.existsSync(d.join(c,"package.json"))&&(e.existsSync(g)&&e.rmSync(g,{recursive:!0,force:!0}),e.cpSync(c,g,{recursive:!0}))}o("CloakBrowser runtime linked into app bundle")}catch{}}()}else p(`CloakBrowser packages unavailable: ${a.error?.message||a.reason||"unknown"}`)}catch(a){p(`CloakBrowser binary warm-up failed: ${a.message}. Automation will retry on first use.`)}try{let a=function(){if("win32"===process.platform)return{ok:!0,skipped:"windows uses pipe shell"};try{return c(Object(function(){var a=Error("Cannot find module 'node-pty'");throw a.code="MODULE_NOT_FOUND",a}())),{ok:!0,already:!0}}catch{}return g({cwd:h(),pkgs:["node-pty@^1.1.0"],timeout:3e5}).ok?{ok:!0}:{ok:!1,reason:"native build failed (terminal still works via python PTY / pipe)"}}();a.ok?o(a.already?"✓ node-pty already available":"✓ node-pty ready (web terminal)"):a.skipped?o(`\xb7 node-pty skipped (${a.skipped})`):p(`node-pty skipped: ${a.reason||"unknown"} — terminal still works`)}catch(a){p(`node-pty skipped: ${a.message}`)}o("Runtime warm-up finished. Start with: zevai")})().catch(a=>{console.error(`[zevai] postinstall failed: ${a.stack||a.message}`),process.exitCode=1})},83445:(a,b,c)=>{"use strict";let{builtinModules:d}=c(98995);function e(a=d){return a.includes("node:sqlite")||a.includes("sqlite")}a.exports={hasBuiltInNodeSqlite:e,prepareStartupRuntime:function({trayMode:a=!1,modules:b=d,loadSqliteRuntime:f=()=>c(24344),loadTrayRuntime:g=()=>c(52784)}={}){let h=f();if(!e(b))try{h.ensureSqliteRuntime({silent:!0})}catch{}if(a)try{g().ensureTrayRuntime({silent:!0})}catch{}return{buildEnvWithRuntime:h.buildEnvWithRuntime}}}},99436:(a,b,c)=>{"use strict";let{createRequire:d}=c(8086),e=c(29021),f=c(33873),{runNpmInstall:g,getRuntimeDir:h,getRuntimeNodeModules:i,summarizeNpmError:j,buildEnvWithRuntime:k}=c(24344),l="cloakbrowser",m="^0.5.2",n="mmdb-lib",o="^3.0.2",p="playwright-core",q="^1.54.2",r="function"==typeof require?require:c(51029);function s(){try{let a=f.join(h(),"noop.js");return d(a)}catch{return null}}let t=null;function u(a){return e.existsSync(f.join(i(),a,"package.json"))}function v(a){let b=String(a||"").trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/);return b?{major:Number.parseInt(b[1],10),minor:Number.parseInt(b[2],10),patch:Number.parseInt(b[3],10),prerelease:b[4]?b[4].split("."):[]}:null}function w(a,b){for(let c of["major","minor","patch"])if(a[c]!==b[c])return a[c]<b[c]?-1:1;return function(a,b){if(0===a.length&&0===b.length)return 0;if(0===a.length)return 1;if(0===b.length)return -1;let c=Math.max(a.length,b.length);for(let d=0;d<c;d+=1){if(void 0===a[d])return -1;if(void 0===b[d])return 1;if(a[d]===b[d])continue;let c=/^\d+$/.test(a[d]),e=/^\d+$/.test(b[d]);if(c&&e)return Number.parseInt(a[d],10)<Number.parseInt(b[d],10)?-1:1;if(c!==e)return c?-1:1;return a[d]<b[d]?-1:1}return 0}(a.prerelease,b.prerelease)}function x(a,b){let c,d=v(a),e=String(b||"").trim().match(/^\^\s*(.+)$/),f=v(e?.[1]);return!!d&&!!f&&(!(d.prerelease.length>0)||0!==f.prerelease.length)&&(c=f.major>0?{major:f.major+1,minor:0,patch:0,prerelease:[]}:f.minor>0?{major:0,minor:f.minor+1,patch:0,prerelease:[]}:{major:0,minor:0,patch:f.patch+1,prerelease:[]},w(d,f)>=0&&0>w(d,c))}function y(a){try{let b=JSON.parse(e.readFileSync(f.join(i(),a,"package.json"),"utf8"));return"string"==typeof b.version?b.version:null}catch{return null}}function z(a,b){return!!a?.launch&&x(b,m)}function A(){try{let a=s(),b=f.join(i(),l);if(a&&e.existsSync(f.join(b,"package.json")))return a(b)}catch{}try{return r(l)}catch{}try{let a=f.join(i(),l);if(e.existsSync(f.join(a,"package.json")))return r(a)}catch{}return null}function B(){try{let a=s(),b=f.join(i(),n);if(a&&e.existsSync(f.join(b,"package.json")))return a(b)}catch{}try{return r(n)}catch{}return null}a.exports={ensureCloakbrowserRuntime:function({silent:a=!1}={}){let b=y(l);if(t?.ok&&z(t.module,b)&&B()&&u(p))return t;try{let a=k(process.env);if(a.NODE_PATH&&!process.env.NODE_PATH?.includes(i())){process.env.NODE_PATH=a.NODE_PATH;try{c(8086).Module._initPaths()}catch{}}}catch{}let d=A(),e=!z(d,b),r=!B()&&!u(n),s=!u(p);if(e||r||s){let b=[];e&&b.push(`${l}@${m}`),r&&b.push(`${n}@${o}`),s&&b.push(`${p}@${q}`),a||console.log(`[cloakbrowser] Installing ${b.join(", ")} into runtime…`);let d=g({cwd:h(),pkgs:b,timeout:3e5});if(!d.ok){let a=j(d.stderr||d.stdout||""),c=Error(`Failed to install ${b.join(", ")}. On the host run: cd "${h()}" && npm install ${b.join(" ")} — ${a}`);return c.code="CLOAKBROWSER_INSTALL_FAILED",{ok:!1,error:c}}e&&function(a){let b=`${f.join(i(),a)}${f.sep}`;for(let a of Object.keys(c.c))a.startsWith(b)&&delete c.c[a]}(l)}if(d=A(),b=y(l),!d?.launch){let a=Error(`cloakbrowser installed but launch() is missing. Reinstall: cd "${h()}" && npm install ${l}@${m} ${n}@${o} ${p}@${q}`);return a.code="CLOAKBROWSER_API_MISMATCH",{ok:!1,error:a}}if(!x(b,m)){let a=Error(`cloakbrowser version mismatch: installed ${b||"unknown"}, required ${m}. Reinstall: cd "${h()}" && npm install ${l}@${m}`);return a.code="CLOAKBROWSER_VERSION_MISMATCH",{ok:!1,error:a}}if(!B()&&!u(n)){let a=Error(`mmdb-lib is required for geoip: true. Install: cd "${h()}" && npm install ${n}@${o}`);return a.code="MMDB_MISSING",{ok:!1,error:a}}return t={ok:!0,module:d,version:b}},loadCloakbrowserModule:function(){return A()},CLOAKBROWSER_PACKAGE:l,CLOAKBROWSER_VERSION:m,MMDB_PACKAGE:n,MMDB_VERSION:o,PLAYWRIGHT_CORE_PACKAGE:p,PLAYWRIGHT_CORE_VERSION:q,__test__:{parseSemver:v,compareSemver:w,satisfiesCaretRange:x,isCloakbrowserRuntimeCompatible:z}}}};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";exports.id=6182,exports.ids=[6182],exports.modules={8578:(a,b,c)=>{let d=c(33873),e=c(29021),f=c(15296),{MITM_DIR:g}=c(82193),h=d.join(g,"rootCA.key"),i=d.join(g,"rootCA.crt");function j(a){try{let b=f.pki.certificateFromPem(e.readFileSync(a,"utf8")),c=new Date(Date.now()+2592e6);return b.validity.notAfter<c}catch{return!0}}a.exports={generateRootCA:async function a(){let a=e.existsSync(h)&&e.existsSync(i);if(a&&!j(i))return console.log("✅ Root CA already exists"),{key:h,cert:i};if(a){console.log("\uD83D\uDD10 Root CA expired or expiring soon — regenerating...");try{e.unlinkSync(h)}catch{}try{e.unlinkSync(i)}catch{}}e.existsSync(g)||e.mkdirSync(g,{recursive:!0}),console.log("\uD83D\uDD10 Generating Root CA certificate...");let b=f.pki.rsa.generateKeyPair(2048),c=f.pki.createCertificate();c.publicKey=b.publicKey,c.serialNumber="01",c.validity.notBefore=new Date,c.validity.notAfter=new Date,c.validity.notAfter.setFullYear(c.validity.notBefore.getFullYear()+10);let d=[{name:"commonName",value:"ZevaiRouter MITM Root CA"},{name:"organizationName",value:"ZevaiRouter"},{name:"countryName",value:"US"}];c.setSubject(d),c.setIssuer(d),c.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),c.sign(b.privateKey,f.md.sha256.create());let
|
|
1
|
+
"use strict";exports.id=6182,exports.ids=[6182],exports.modules={8578:(a,b,c)=>{let d=c(33873),e=c(29021),f=c(15296),{MITM_DIR:g}=c(82193),h=d.join(g,"rootCA.key"),i=d.join(g,"rootCA.crt");function j(a){try{let b=f.pki.certificateFromPem(e.readFileSync(a,"utf8")),c=new Date(Date.now()+2592e6);return b.validity.notAfter<c}catch{return!0}}function k(){if("win32"!==process.platform){try{e.chmodSync(g,448)}catch{}try{e.chmodSync(h,384)}catch{}}}a.exports={generateRootCA:async function a(){let a=e.existsSync(h)&&e.existsSync(i);if(a&&!j(i))return k(),console.log("✅ Root CA already exists"),{key:h,cert:i};if(a){console.log("\uD83D\uDD10 Root CA expired or expiring soon — regenerating...");try{e.unlinkSync(h)}catch{}try{e.unlinkSync(i)}catch{}}e.existsSync(g)||e.mkdirSync(g,{recursive:!0,mode:448}),console.log("\uD83D\uDD10 Generating Root CA certificate...");let b=f.pki.rsa.generateKeyPair(2048),c=f.pki.createCertificate();c.publicKey=b.publicKey,c.serialNumber="01",c.validity.notBefore=new Date,c.validity.notAfter=new Date,c.validity.notAfter.setFullYear(c.validity.notBefore.getFullYear()+10);let d=[{name:"commonName",value:"ZevaiRouter MITM Root CA"},{name:"organizationName",value:"ZevaiRouter"},{name:"countryName",value:"US"}];c.setSubject(d),c.setIssuer(d),c.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),c.sign(b.privateKey,f.md.sha256.create());let l=f.pki.privateKeyToPem(b.privateKey),m=f.pki.certificateToPem(c);return e.writeFileSync(h,l,{mode:384}),e.writeFileSync(i,m),k(),console.log("✅ Root CA generated successfully"),{key:h,cert:i}},loadRootCA:function(){if(!e.existsSync(h)||!e.existsSync(i))throw Error("Root CA not found. Generate it first.");let a=e.readFileSync(h,"utf8"),b=e.readFileSync(i,"utf8");return{key:f.pki.privateKeyFromPem(a),cert:f.pki.certificateFromPem(b)}},generateLeafCert:function(a,b){let c=f.pki.rsa.generateKeyPair(2048),d=f.pki.createCertificate();return d.publicKey=c.publicKey,d.serialNumber=Math.floor(1e6*Math.random()).toString(),d.validity.notBefore=new Date,d.validity.notAfter=new Date,d.validity.notAfter.setFullYear(d.validity.notBefore.getFullYear()+1),d.setSubject([{name:"commonName",value:a}]),d.setIssuer(b.cert.subject.attributes),d.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:a},{type:2,value:`*.${a}`}]}]),d.sign(b.key,f.md.sha256.create()),{key:f.pki.privateKeyToPem(c.privateKey),cert:f.pki.certificateToPem(d)}},isCertExpired:j,ROOT_CA_CERT_PATH:i,ROOT_CA_KEY_PATH:h}},9631:(a,b,c)=>{let d=c(29021),e=c(55511),{exec:f}=c(79646),{execWithPassword:g,isSudoAvailable:h}=c(66936),{runElevatedPowerShell:i,quotePs:j}=c(64809),{log:k,err:l}=c(87777),m="win32"===process.platform,n="darwin"===process.platform,o=[{dir:"/usr/local/share/ca-certificates",cmd:"update-ca-certificates"},{dir:"/etc/ca-certificates/trust-source/anchors",cmd:"update-ca-trust"},{dir:"/etc/pki/ca-trust/source/anchors",cmd:"update-ca-trust"},{dir:"/etc/pki/trust/anchors",cmd:"update-ca-certificates"}];function p(){for(let a of o)if(d.existsSync(a.dir))return a;return o[0]}let q="ZevaiRouter MITM Root CA";function r(a){let b=d.readFileSync(a,"utf-8"),c=Buffer.from(b.replace(/-----[^-]+-----/g,"").replace(/\s/g,""),"base64");return e.createHash("sha1").update(c).digest("hex").toUpperCase().match(/.{2}/g).join(":")}async function s(a){var b,c;return m?(b=a,new Promise(a=>{let c;try{c=r(b).replace(/:/g,"")}catch{return a(!1)}f(`certutil -store Root ${c}`,{windowsHide:!0},b=>{a(!b)})})):n?(c=a,new Promise(a=>{try{let b=r(c).replace(/:/g,"");f(`security find-certificate -a -c "${q}" -Z /Library/Keychains/System.keychain 2>/dev/null`,{windowsHide:!0},(d,e)=>{if(d||!e||!RegExp(`SHA-1 hash:\\s*${b}`,"i").test(e))return a(!1);f(`security verify-cert -c "${c}" -p ssl -k /Library/Keychains/System.keychain 2>/dev/null`,{windowsHide:!0},b=>{a(!b)})})}catch{a(!1)}})):function(a){try{return Promise.resolve(r(x())===r(a))}catch{return Promise.resolve(!1)}}(a)}async function t(a,b){let c,d=[q,(c=Buffer.from("OQ==","base64").toString("ascii"),`${c}Router MITM Root CA`)].map(a=>`security delete-certificate -c "${a}" /Library/Keychains/System.keychain 2>/dev/null || true`).join(" && "),e=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${b}"`;try{await g(`${d} && ${e}`,a),k("\uD83D\uDD10 Cert: ✅ installed to system keychain")}catch(a){throw Error(a.message?.includes("canceled")?"User canceled authorization":"Certificate install failed")}}async function u(a){let b=`
|
|
2
2
|
certutil -delstore Root ${j(q)} 2>$null | Out-Null
|
|
3
3
|
$exit = & certutil -addstore Root ${j(a)} 2>&1
|
|
4
4
|
if ($LASTEXITCODE -ne 0) { throw "certutil exit $LASTEXITCODE" }
|
|
5
|
-
`;try{await i(b),k("\uD83D\uDD10 Cert: ✅ installed to Windows Root store")}catch(a){throw Error(`Failed to install certificate: ${a.message}`)}}async function v(a,b){let c=r(b).replace(/:/g,""),d=`security delete-certificate -Z "${c}" /Library/Keychains/System.keychain`;try{await g(d,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from system keychain")}catch(a){throw Error("Failed to uninstall certificate")}}async function w(){let a=`certutil -delstore Root ${j(q)}`;try{await i(a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Windows Root store")}catch(a){throw Error(`Failed to uninstall certificate: ${a.message}`)}}async function
|
|
5
|
+
`;try{await i(b),k("\uD83D\uDD10 Cert: ✅ installed to Windows Root store")}catch(a){throw Error(`Failed to install certificate: ${a.message}`)}}async function v(a,b){let c=r(b).replace(/:/g,""),d=`security delete-certificate -Z "${c}" /Library/Keychains/System.keychain`;try{await g(d,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from system keychain")}catch(a){throw Error("Failed to uninstall certificate")}}async function w(){let a=`certutil -delstore Root ${j(q)}`;try{await i(a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Windows Root store")}catch(a){throw Error(`Failed to uninstall certificate: ${a.message}`)}}function x(){return`${p().dir}/zevai-root-ca.crt`}async function y(a,b="add"){let c="ZevaiRouter MITM Root CA",d=`
|
|
6
6
|
if ! command -v certutil &> /dev/null; then
|
|
7
7
|
exit 0
|
|
8
8
|
fi
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
fi
|
|
37
37
|
fi
|
|
38
38
|
done
|
|
39
|
-
`;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function y(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await x(b,"add");return}let c=p(),d=`${c.dir}/zevai-root-ca.crt`,e=`cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(e,a),await x(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function z(a){if(await x(null,"delete"),!h())return;let b=p(),c=`${b.dir}/zevai-root-ca.crt`,d=`rm -f "${c}" && (${b.cmd} 2>/dev/null || true)`;try{await g(d,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Linux trust store and user browser databases")}catch(a){throw Error("Failed to uninstall certificate")}}a.exports={installCert:async function a(a,b){if(!d.existsSync(b))throw Error(`Certificate file not found: ${b}`);await s(b)?k("\uD83D\uDD10 Cert: already trusted ✅"):m?await u(b):n?await t(a,b):await y(a,b)},uninstallCert:async function a(a,b){await s(b)?m?await w():n?await v(a,b):await z(a):k("\uD83D\uDD10 Cert: not found in system store")},checkCertInstalled:s}},26033:(a,b,c)=>{c(33873),c(29021);let{MITM_DIR:d}=c(82193),{generateRootCA:e,loadRootCA:f,generateLeafCert:g}=c(8578);a.exports={generateCert:async function a(){return await e()},getCertForDomain:function(a){try{let b=f(),c=g(a,b);return{key:c.key,cert:c.cert}}catch(b){return console.error(`Failed to generate cert for ${a}:`,b.message),null}}}},96182:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(33873),h=c(29021),i=c(21820),j=c(91645),k=c(55591),l=c(55511),{addDNSEntry:m,removeDNSEntry:n,removeAllDNSEntries:o,removeAllDNSEntriesSync:p,checkAllDNSStatus:q,TOOL_HOSTS:r,isSudoAvailable:s,isSudoPasswordRequired:t}=c(66936),{isAdmin:u}=c(64809),v="win32"===process.platform,w="darwin"===process.platform,{generateCert:x}=c(26033),{installCert:y,uninstallCert:z}=c(9631),{isCertExpired:A}=c(8578),{DATA_DIR:B,MITM_DIR:C}=c(82193),{log:D,err:E}=c(87777),{LSOF_BIN:F}=c(17511),{isProcessAlive:G,writePidFile:H,resolveVerifiedPid:I,removePidFile:J}=c(15754),K="http://localhost:1997";function L(a){return null==a||""===a?"''":`'${String(a).replace(/'/g,"'\\''")}'`}async function M(){if(!ai)return K;try{let a=await ai(),b=a&&null!=a.mitmRouterBaseUrl?String(a.mitmRouterBaseUrl).trim():"";if(!b)return K;let c=new URL(b);if("http:"!==c.protocol&&"https:"!==c.protocol)return K;return b.replace(/\/+$/,"")}catch{return K}}let N=g.join(C,".mitm.pid"),O=[5e3,1e4,2e4,3e4,6e4],P=0,Q=0,R=!1,S=0,T=!1,U=new WeakSet;function V({isCurrent:a,intentional:b,code:c,restarting:d}){return a?b?{clearState:!0,restart:!1}:{clearState:!0,restart:0!==c&&!d}:{clearState:!1,restart:!1}}function W(){if(process.env.MITM_SERVER_PATH)return process.env.MITM_SERVER_PATH;let a=g.join(__dirname,"server.js");if(h.existsSync(a))return a;let b=g.join(process.cwd(),"src","mitm","server.js");if(h.existsSync(b))return b;let c=g.join(process.cwd(),"..","src","mitm","server.js");return h.existsSync(c)?c:b}function X(a){try{if(!a||!h.existsSync(a)||!a.includes(`${g.sep}node_modules${g.sep}`))return a;let b=g.join(B,"runtime","mitm"),c=g.join(b,"server.js");if(h.existsSync(c))try{let b=h.statSync(a),d=h.statSync(c);if(b.size===d.size&&d.mtimeMs>=b.mtimeMs)return c}catch{}return h.mkdirSync(b,{recursive:!0}),h.copyFileSync(a,c),c}catch(b){try{D(`[MITM] runtime copy failed: ${b.message}`)}catch{}return a}}let Y=X(W()),Z="aes-256-gcm",$="zevai-mitm-pwd",_=String.fromCharCode(57,114,111,117,116,101,114)+"-mitm-pwd",aa=null,ab=null;function ac(){return globalThis.__mitmSudoPassword||null}function ad(a){globalThis.__mitmSudoPassword=a}let ae=/(mitm[\\/]server\.js|mitm[\\/]+server\b)/i;function af({dropStalePidFile:a=!0}={}){let b=I(N,{commandPattern:ae});return!b.pid&&b.pidFileStale&&a&&("pid_recycled"===b.reason&&D(`⚠️ Ignoring recycled PID in ${N} — not the MITM server; leaving it alone`),J(N)),b}function ag(a,b=!1,e=null){if(v)d(`taskkill ${b?"/F ":""}/PID ${a}`,{windowsHide:!0},()=>{});else{let f=b?"KILL":"TERM",g=`pkill -${f} -P ${a} 2>/dev/null; kill -${f} ${a} 2>/dev/null`;if(e||s()){let{execWithPassword:a}=c(66936);a(g,e||"").catch(()=>d(g,{windowsHide:!0},()=>{}))}else d(g,{windowsHide:!0},()=>{})}}function ah(a=$){try{let{machineIdSync:b}=c(19713),d=b();return l.createHash("sha256").update(d+a).digest()}catch{return l.createHash("sha256").update(a).digest()}}let ai=null,aj=null;async function ak(a,b){if(aj)try{let c,d,e,f,g,h={mitmEnabled:a};b&&(c=ah($),d=l.randomBytes(12),e=l.createCipheriv(Z,c,d),f=Buffer.concat([e.update(b,"utf8"),e.final()]),g=e.getAuthTag(),h.mitmSudoEncrypted=`${d.toString("hex")}:${g.toString("hex")}:${f.toString("hex")}`),await aj(h)}catch(a){E(`Failed to save settings: ${a.message}`)}}async function al(){if(aj)try{await aj({mitmSudoEncrypted:null})}catch(a){E(`Failed to clear encrypted password: ${a.message}`)}}async function am(){if(!ai)return null;try{var a;let b,c=await ai();if(!c.mitmSudoEncrypted)return null;return a=c.mitmSudoEncrypted,(b=b=>{try{let[c,d,e]=a.split(":");if(!c||!d||!e)return null;let f=ah(b),g=l.createDecipheriv(Z,f,Buffer.from(c,"hex"));return g.setAuthTag(Buffer.from(d,"hex")),Buffer.concat([g.update(Buffer.from(e,"hex")),g.final()]).toString("utf8")}catch{return null}})($)||b(_)}catch{return null}}async function an(a,b){if(aj&&ai)try{let c={...(await ai()).dnsToolEnabled||{},[a]:b};await aj({dnsToolEnabled:c})}catch(a){E(`Failed to save DNS state: ${a.message}`)}}async function ao(){if(!ai)return{};try{return(await ai()).dnsToolEnabled||{}}catch{return{}}}async function ap(a){let b=await ao(),c=a||ac()||await am();for(let[a,d]of Object.entries(b))if(d&&r[a])try{await m(a,c)}catch(b){E(`DNS ${a}: restore failed — ${b.message}`)}}async function aq(){return v?u():!(!u()&&t())||!!(ac()||await am())}function ar(a){return new Promise(a=>{v?d('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{windowsHide:!0},(b,c)=>{if(b)return a(null);let e=parseInt(c.trim(),10);if(!e||e<=4)return a(null);d(`tasklist /FI "PID eq ${e}" /FO CSV /NH`,{windowsHide:!0},(b,c)=>{let d=c?.match(/"([^"]+)"/);a({pid:e,name:d?d[1]:"unknown"})})}):d(`${F} -nP -iTCP:443 -sTCP:LISTEN -t`,{windowsHide:!0},(b,c)=>{if(b||!c?.trim())return a(null);let e=parseInt(c.trim().split("\n")[0],10);if(!e||isNaN(e))return a(null);d(`ps -p ${e} -o comm=`,{windowsHide:!0},(b,c)=>{a({pid:e,name:c?.trim()||"unknown"})})})})}async function as(a){if(aa&&!aa.killed){U.add(aa);try{aa.kill("SIGKILL")}catch{}aa=null,ab=null}try{let{pid:b}=af({dropStalePidFile:!1});b&&(ag(b,!0,a),await new Promise(a=>setTimeout(a,500))),J(N)}catch{}if(!v&&Y)try{let b=L(Y);if(a||s()){let{execWithPassword:d}=c(66936);await d(`pkill -SIGKILL -f ${b} 2>/dev/null || true`,a||"").catch(()=>{})}else d(`pkill -SIGKILL -f ${b} 2>/dev/null || true`,{windowsHide:!0},()=>{});await new Promise(a=>setTimeout(a,500))}catch{}}function at(a,b=443){return new Promise(c=>{let d=Date.now()+a,e=!1,f=null,g=null,h=a=>{if(!e){if(e=!0,clearTimeout(f),clearTimeout(i),g)try{g.destroy()}catch{}c(a)}},i=setTimeout(()=>h(null),a),j=()=>{if(e)return;let a=d-Date.now();if(a<=0)return h(null);f=setTimeout(l,Math.min(500,a))},l=()=>{if(e)return;let a=k.request({hostname:"127.0.0.1",port:b,path:"/_mitm_health",method:"GET",rejectUnauthorized:!1,timeout:Math.max(500,Math.min(2e3,d-Date.now()))},a=>{let b="";a.on("data",a=>{b+=a}),a.on("end",()=>{let a=null;try{a=JSON.parse(b)}catch{}if(a?.ok===!0)return h({ok:!0,pid:a.pid||null});j()}),a.on("error",j)});g=a,a.on("timeout",()=>{try{a.destroy()}catch{}}),a.on("error",j),a.end()};l()})}async function au(){let a=null!==aa&&!aa.killed,b=ab;if(!a)try{let{pid:c}=af();c&&(a=!0,b=c)}catch{}let d=q(),e=g.join(C,"rootCA.crt"),f=h.existsSync(e),{checkCertInstalled:i}=c(9631),j=!!f&&await i(e);return{running:a,pid:b,certExists:f,certTrusted:j,dnsStatus:d}}function av({restarting:a,blocked:b,count:c,lastStartAt:d,lastAttemptAt:e,now:f,maxRestarts:g,resetMs:h,delays:i}){if(a||b)return{proceed:!1,reason:a?"in-flight":"blocked"};let j=(d||0)>(e||0)&&f-d>=h?0:c;return j>=g?{proceed:!1,reason:"exhausted",count:j}:{proceed:!0,count:j+1,delay:i[Math.min(j,i.length-1)]}}async function aw(a){let b=av({restarting:R,blocked:T,count:P,lastStartAt:Q,lastAttemptAt:S,now:Date.now(),maxRestarts:5,resetMs:6e4,delays:O});if(!b.proceed)return void("exhausted"===b.reason?E("Max restart attempts reached. Giving up."):"blocked"===b.reason&&E("Auto-restart blocked: sudo password was rejected. Restart MITM from the dashboard."));P=b.count,S=Date.now(),R=!0;let c=!1;D(`Restarting in ${b.delay/1e3}s... (${P}/5)`),await new Promise(a=>setTimeout(a,b.delay));try{let b=ai?await ai():null;if(b&&!b.mitmEnabled)return void D("MITM disabled, skipping restart");let c=ac()||await am();if(!c&&!v)return void E("No cached password, cannot auto-restart");await ay(a,c),D("\uD83D\uDD04 Restarted successfully"),P=0}catch(a){E(`Restart attempt ${P}/5 failed: ${a.message}`),c=!0}finally{R=!1}c&&aw(a)}async function ax(a,b){if(a&&a.pid){if(v)try{f(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${a.pid} -Force -ErrorAction SilentlyContinue"`,{windowsHide:!0})}catch{}else try{let{execWithPassword:d}=c(66936);b||s()?await d(`kill -9 ${a.pid}`,b||""):f(`kill -9 ${a.pid}`,{windowsHide:!0})}catch{}await new Promise(a=>setTimeout(a,800))}}async function ay(a,b,k=!1){if(!aa||aa.killed)try{let{pid:a}=af();if(a)return ab=a,D(`♻️ Reusing existing process (PID: ${a})`),await ak(!0,b),b&&ad(b),{running:!0,pid:a}}catch{}if(aa&&!aa.killed)throw Error("MITM server is already running");if(await as(b),!v){let a=await new Promise(a=>{let b=j.createServer();b.once("error",b=>{"EADDRINUSE"===b.code?a("in-use"):a("no-permission")}),b.once("listening",()=>{b.close(()=>a("free"))}),b.listen(443,"127.0.0.1")});if("in-use"===a||"no-permission"===a){let a=await ar(b);if(a){let c=a.name.includes("/")?a.name.split("/").filter(Boolean).pop():a.name;if(k)D(`Killing process on port 443 (PID ${a.pid}, name=${c})...`),await ax(a,b);else{let b=Error(`Port 443 is already in use by "${c}" (PID ${a.pid}).`);throw b.code="PORT_443_BUSY",b.portOwner={pid:a.pid,name:c},b}}}}let l=g.join(C,"rootCA.crt"),m=g.join(C,"rootCA.key"),n=h.existsSync(l)&&h.existsSync(m);if(!n||A(l)){if(n){D("\uD83D\uDD10 Cert expired — uninstalling old cert...");let a=b||ac()||await am();try{await z(a,l)}catch{}}D("\uD83D\uDD10 Generating Root CA..."),await x()}let{checkCertInstalled:o}=c(9631),p=await o(l),r=!v&&!w&&!s();if(p)D("\uD83D\uDD10 Cert: already trusted ✅");else{D("\uD83D\uDD10 Cert: not trusted → installing...");let a=b||ac()||await am();if(r)D(`🔐 Cert: skipping system trust (no sudo). Install ${l} as a trusted CA on machines that use this proxy.`);else{if(!a&&t())throw Error("Sudo password required to install Root CA certificate");try{await y(a,l),D("\uD83D\uDD10 Cert: ✅ trusted")}catch(a){throw Error(`Failed to trust certificate: ${a.message}`)}}}let u=Y;if((!u||!h.existsSync(u))&&(D(`[MITM] server.js missing at ${u} → recopying`),!(u=X(W()))||!h.existsSync(u)))throw Error(`MITM server.js not found at ${u}. Reinstall zevairouter.`);let B=await M();if(D(`🚀 Starting server... (router: ${B})`),v){let c=await ar(b);if(c)if(k)D(`Killing process on port 443 (PID ${c.pid}, name=${c.name})...`),await ax(c,b);else{let a=Error(`Port 443 is already in use by "${c.name}" (PID ${c.pid}).`);throw a.code="PORT_443_BUSY",a.portOwner={pid:c.pid,name:c.name},a}aa=e(process.execPath,[u],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:B}}),aj&&await aj({mitmCertInstalled:!0}).catch(()=>{})}else if(s()){(aa=e("sudo",["-S","-E","sh","-c",[`HOME=${L(i.homedir())}`,`ROUTER_API_KEY=${L(a)}`,`MITM_ROUTER_BASE=${L(B)}`,"NODE_ENV=production",L(process.execPath),L(u)].join(" ")],{detached:!1,windowsHide:!0,stdio:["pipe","pipe","pipe"]})).stdin.on("error",a=>{D(`[MITM] sudo stdin closed early: ${a.code||a.message}`)});try{aa.stdin.write(`${b}
|
|
39
|
+
`;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function z(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await y(b,"add");return}let c=p(),d=`${c.dir}/zevai-root-ca.crt`,e=`cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(e,a),await y(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function A(a){if(await y(null,"delete"),!h())return;let b=p(),c=`${b.dir}/zevai-root-ca.crt`,d=`rm -f "${c}" && (${b.cmd} 2>/dev/null || true)`;try{await g(d,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Linux trust store and user browser databases")}catch(a){throw Error("Failed to uninstall certificate")}}a.exports={installCert:async function a(a,b){if(!d.existsSync(b))throw Error(`Certificate file not found: ${b}`);await s(b)?k("\uD83D\uDD10 Cert: already trusted ✅"):m?await u(b):n?await t(a,b):await z(a,b)},uninstallCert:async function a(a,b){(m||n?await s(b):d.existsSync(x()))?m?await w():n?await v(a,b):await A(a):k("\uD83D\uDD10 Cert: not found in system store")},checkCertInstalled:s}},26033:(a,b,c)=>{c(33873),c(29021);let{MITM_DIR:d}=c(82193),{generateRootCA:e,loadRootCA:f,generateLeafCert:g}=c(8578);a.exports={generateCert:async function a(){return await e()},getCertForDomain:function(a){try{let b=f(),c=g(a,b);return{key:c.key,cert:c.cert}}catch(b){return console.error(`Failed to generate cert for ${a}:`,b.message),null}}}},96182:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(33873),h=c(29021),i=c(21820),j=c(91645),k=c(55591),l=c(55511),{addDNSEntry:m,removeDNSEntry:n,removeAllDNSEntries:o,removeAllDNSEntriesSync:p,checkAllDNSStatus:q,TOOL_HOSTS:r,isSudoAvailable:s,isSudoPasswordRequired:t}=c(66936),{isAdmin:u}=c(64809),v="win32"===process.platform,w="darwin"===process.platform,{generateCert:x}=c(26033),{installCert:y,uninstallCert:z}=c(9631),{isCertExpired:A}=c(8578),{DATA_DIR:B,MITM_DIR:C}=c(82193),{log:D,err:E}=c(87777),{LSOF_BIN:F}=c(17511),{isProcessAlive:G,writePidFile:H,resolveVerifiedPid:I,removePidFile:J}=c(15754),K="http://localhost:1997";function L(a){return null==a||""===a?"''":`'${String(a).replace(/'/g,"'\\''")}'`}async function M(){if(!ai)return K;try{let a=await ai(),b=a&&null!=a.mitmRouterBaseUrl?String(a.mitmRouterBaseUrl).trim():"";if(!b)return K;let c=new URL(b);if("http:"!==c.protocol&&"https:"!==c.protocol)return K;return b.replace(/\/+$/,"")}catch{return K}}let N=g.join(C,".mitm.pid"),O=[5e3,1e4,2e4,3e4,6e4],P=0,Q=0,R=!1,S=0,T=!1,U=new WeakSet;function V({isCurrent:a,intentional:b,code:c,restarting:d}){return a?b?{clearState:!0,restart:!1}:{clearState:!0,restart:0!==c&&!d}:{clearState:!1,restart:!1}}function W(){if(process.env.MITM_SERVER_PATH)return process.env.MITM_SERVER_PATH;let a=g.join(__dirname,"server.js");if(h.existsSync(a))return a;let b=g.join(process.cwd(),"src","mitm","server.js");if(h.existsSync(b))return b;let c=g.join(process.cwd(),"..","src","mitm","server.js");return h.existsSync(c)?c:b}function X(a){try{if(!a||!h.existsSync(a)||!a.includes(`${g.sep}node_modules${g.sep}`))return a;let b=g.join(B,"runtime","mitm"),c=g.join(b,"server.js");if(h.existsSync(c))try{let b=h.statSync(a),d=h.statSync(c);if(b.size===d.size&&d.mtimeMs>=b.mtimeMs)return c}catch{}return h.mkdirSync(b,{recursive:!0}),h.copyFileSync(a,c),c}catch(b){try{D(`[MITM] runtime copy failed: ${b.message}`)}catch{}return a}}let Y=X(W()),Z="aes-256-gcm",$="zevai-mitm-pwd",_=String.fromCharCode(57,114,111,117,116,101,114)+"-mitm-pwd",aa=null,ab=null;function ac(){return globalThis.__mitmSudoPassword||null}function ad(a){globalThis.__mitmSudoPassword=a}let ae=/(mitm[\\/]server\.js|mitm[\\/]+server\b)/i;function af({dropStalePidFile:a=!0}={}){let b=I(N,{commandPattern:ae});return!b.pid&&b.pidFileStale&&a&&("pid_recycled"===b.reason&&D(`⚠️ Ignoring recycled PID in ${N} — not the MITM server; leaving it alone`),J(N)),b}function ag(a,b=!1,e=null){if(v)d(`taskkill ${b?"/F ":""}/PID ${a}`,{windowsHide:!0},()=>{});else{let f=b?"KILL":"TERM",g=`pkill -${f} -P ${a} 2>/dev/null; kill -${f} ${a} 2>/dev/null`;if(e||s()){let{execWithPassword:a}=c(66936);a(g,e||"").catch(()=>d(g,{windowsHide:!0},()=>{}))}else d(g,{windowsHide:!0},()=>{})}}function ah(a=$){try{let{machineIdSync:b}=c(19713),d=b();return l.createHash("sha256").update(d+a).digest()}catch{return l.createHash("sha256").update(a).digest()}}let ai=null,aj=null;async function ak(a,b){if(aj)try{let c,d,e,f,g,h={mitmEnabled:a};b&&(c=ah($),d=l.randomBytes(12),e=l.createCipheriv(Z,c,d),f=Buffer.concat([e.update(b,"utf8"),e.final()]),g=e.getAuthTag(),h.mitmSudoEncrypted=`${d.toString("hex")}:${g.toString("hex")}:${f.toString("hex")}`),await aj(h)}catch(a){E(`Failed to save settings: ${a.message}`)}}async function al(){if(aj)try{await aj({mitmSudoEncrypted:null})}catch(a){E(`Failed to clear encrypted password: ${a.message}`)}}async function am(){if(!ai)return null;try{var a;let b,c=await ai();if(!c.mitmSudoEncrypted)return null;return a=c.mitmSudoEncrypted,(b=b=>{try{let[c,d,e]=a.split(":");if(!c||!d||!e)return null;let f=ah(b),g=l.createDecipheriv(Z,f,Buffer.from(c,"hex"));return g.setAuthTag(Buffer.from(d,"hex")),Buffer.concat([g.update(Buffer.from(e,"hex")),g.final()]).toString("utf8")}catch{return null}})($)||b(_)}catch{return null}}async function an(a,b){if(aj&&ai)try{let c={...(await ai()).dnsToolEnabled||{},[a]:b};await aj({dnsToolEnabled:c})}catch(a){E(`Failed to save DNS state: ${a.message}`)}}async function ao(){if(!ai)return{};try{return(await ai()).dnsToolEnabled||{}}catch{return{}}}async function ap(a){let b=await ao(),c=a||ac()||await am();for(let[a,d]of Object.entries(b))if(d&&r[a])try{await m(a,c)}catch(b){E(`DNS ${a}: restore failed — ${b.message}`)}}async function aq(){return v?u():!(!u()&&t())||!!(ac()||await am())}function ar(a){return new Promise(a=>{v?d('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{windowsHide:!0},(b,c)=>{if(b)return a(null);let e=parseInt(c.trim(),10);if(!e||e<=4)return a(null);d(`tasklist /FI "PID eq ${e}" /FO CSV /NH`,{windowsHide:!0},(b,c)=>{let d=c?.match(/"([^"]+)"/);a({pid:e,name:d?d[1]:"unknown"})})}):d(`${F} -nP -iTCP:443 -sTCP:LISTEN -t`,{windowsHide:!0},(b,c)=>{if(b||!c?.trim())return a(null);let e=parseInt(c.trim().split("\n")[0],10);if(!e||isNaN(e))return a(null);d(`ps -p ${e} -o comm=`,{windowsHide:!0},(b,c)=>{a({pid:e,name:c?.trim()||"unknown"})})})})}async function as(a){if(aa&&!aa.killed){U.add(aa);try{aa.kill("SIGKILL")}catch{}aa=null,ab=null}try{let{pid:b}=af({dropStalePidFile:!1});b&&(ag(b,!0,a),await new Promise(a=>setTimeout(a,500))),J(N)}catch{}if(!v&&Y)try{let b=L(Y);if(a||s()){let{execWithPassword:d}=c(66936);await d(`pkill -SIGKILL -f ${b} 2>/dev/null || true`,a||"").catch(()=>{})}else d(`pkill -SIGKILL -f ${b} 2>/dev/null || true`,{windowsHide:!0},()=>{});await new Promise(a=>setTimeout(a,500))}catch{}}function at(a,b=443){return new Promise(c=>{let d=Date.now()+a,e=!1,f=null,g=null,h=a=>{if(!e){if(e=!0,clearTimeout(f),clearTimeout(i),g)try{g.destroy()}catch{}c(a)}},i=setTimeout(()=>h(null),a),j=()=>{if(e)return;let a=d-Date.now();if(a<=0)return h(null);f=setTimeout(l,Math.min(500,a))},l=()=>{if(e)return;let a=k.request({hostname:"127.0.0.1",port:b,path:"/_mitm_health",method:"GET",rejectUnauthorized:!1,timeout:Math.max(500,Math.min(2e3,d-Date.now()))},a=>{let b="";a.on("data",a=>{b+=a}),a.on("end",()=>{let a=null;try{a=JSON.parse(b)}catch{}if(a?.ok===!0)return h({ok:!0,pid:a.pid||null});j()}),a.on("error",j)});g=a,a.on("timeout",()=>{try{a.destroy()}catch{}}),a.on("error",j),a.end()};l()})}async function au(){let a=null!==aa&&!aa.killed,b=ab;if(!a)try{let{pid:c}=af();c&&(a=!0,b=c)}catch{}let d=q(),e=g.join(C,"rootCA.crt"),f=h.existsSync(e),{checkCertInstalled:i}=c(9631),j=!!f&&await i(e);return{running:a,pid:b,certExists:f,certTrusted:j,dnsStatus:d}}function av({restarting:a,blocked:b,count:c,lastStartAt:d,lastAttemptAt:e,now:f,maxRestarts:g,resetMs:h,delays:i}){if(a||b)return{proceed:!1,reason:a?"in-flight":"blocked"};let j=(d||0)>(e||0)&&f-d>=h?0:c;return j>=g?{proceed:!1,reason:"exhausted",count:j}:{proceed:!0,count:j+1,delay:i[Math.min(j,i.length-1)]}}async function aw(a){let b=av({restarting:R,blocked:T,count:P,lastStartAt:Q,lastAttemptAt:S,now:Date.now(),maxRestarts:5,resetMs:6e4,delays:O});if(!b.proceed)return void("exhausted"===b.reason?E("Max restart attempts reached. Giving up."):"blocked"===b.reason&&E("Auto-restart blocked: sudo password was rejected. Restart MITM from the dashboard."));P=b.count,S=Date.now(),R=!0;let c=!1;D(`Restarting in ${b.delay/1e3}s... (${P}/5)`),await new Promise(a=>setTimeout(a,b.delay));try{let b=ai?await ai():null;if(b&&!b.mitmEnabled)return void D("MITM disabled, skipping restart");let c=ac()||await am();if(!c&&!v)return void E("No cached password, cannot auto-restart");await ay(a,c),D("\uD83D\uDD04 Restarted successfully"),P=0}catch(a){E(`Restart attempt ${P}/5 failed: ${a.message}`),c=!0}finally{R=!1}c&&aw(a)}async function ax(a,b){if(a&&a.pid){if(v)try{f(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${a.pid} -Force -ErrorAction SilentlyContinue"`,{windowsHide:!0})}catch{}else try{let{execWithPassword:d}=c(66936);b||s()?await d(`kill -9 ${a.pid}`,b||""):f(`kill -9 ${a.pid}`,{windowsHide:!0})}catch{}await new Promise(a=>setTimeout(a,800))}}async function ay(a,b,k=!1){if(!aa||aa.killed)try{let{pid:a}=af();if(a)return ab=a,D(`♻️ Reusing existing process (PID: ${a})`),await ak(!0,b),b&&ad(b),{running:!0,pid:a}}catch{}if(aa&&!aa.killed)throw Error("MITM server is already running");if(await as(b),!v){let a=await new Promise(a=>{let b=j.createServer();b.once("error",b=>{"EADDRINUSE"===b.code?a("in-use"):a("no-permission")}),b.once("listening",()=>{b.close(()=>a("free"))}),b.listen(443,"127.0.0.1")});if("in-use"===a||"no-permission"===a){let a=await ar(b);if(a){let c=a.name.includes("/")?a.name.split("/").filter(Boolean).pop():a.name;if(k)D(`Killing process on port 443 (PID ${a.pid}, name=${c})...`),await ax(a,b);else{let b=Error(`Port 443 is already in use by "${c}" (PID ${a.pid}).`);throw b.code="PORT_443_BUSY",b.portOwner={pid:a.pid,name:c},b}}}}let l=g.join(C,"rootCA.crt"),m=g.join(C,"rootCA.key"),n=h.existsSync(l)&&h.existsSync(m);if(!n||A(l)){if(n){D("\uD83D\uDD10 Cert expired — uninstalling old cert...");let a=b||ac()||await am();try{await z(a,l)}catch{}}D("\uD83D\uDD10 Generating Root CA..."),await x()}let{checkCertInstalled:o}=c(9631),p=await o(l),r=!v&&!w&&!s();if(p)D("\uD83D\uDD10 Cert: already trusted ✅");else{D("\uD83D\uDD10 Cert: not trusted → installing...");let a=b||ac()||await am();if(r)D(`🔐 Cert: skipping system trust (no sudo). Install ${l} as a trusted CA on machines that use this proxy.`);else{if(!a&&t())throw Error("Sudo password required to install Root CA certificate");try{await y(a,l),D("\uD83D\uDD10 Cert: ✅ trusted")}catch(a){throw Error(`Failed to trust certificate: ${a.message}`)}}}let u=Y;if((!u||!h.existsSync(u))&&(D(`[MITM] server.js missing at ${u} → recopying`),!(u=X(W()))||!h.existsSync(u)))throw Error(`MITM server.js not found at ${u}. Reinstall zevairouter.`);let B=await M();if(D(`🚀 Starting server... (router: ${B})`),v){let c=await ar(b);if(c)if(k)D(`Killing process on port 443 (PID ${c.pid}, name=${c.name})...`),await ax(c,b);else{let a=Error(`Port 443 is already in use by "${c.name}" (PID ${c.pid}).`);throw a.code="PORT_443_BUSY",a.portOwner={pid:c.pid,name:c.name},a}aa=e(process.execPath,[u],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:B}}),aj&&await aj({mitmCertInstalled:!0}).catch(()=>{})}else if(s()){(aa=e("sudo",["-S","-E","sh","-c",[`HOME=${L(i.homedir())}`,`ROUTER_API_KEY=${L(a)}`,`MITM_ROUTER_BASE=${L(B)}`,"NODE_ENV=production",L(process.execPath),L(u)].join(" ")],{detached:!1,windowsHide:!0,stdio:["pipe","pipe","pipe"]})).stdin.on("error",a=>{D(`[MITM] sudo stdin closed early: ${a.code||a.message}`)});try{aa.stdin.write(`${b}
|
|
40
40
|
`),aa.stdin.end()}catch(a){D(`[MITM] could not hand the password to sudo: ${a.code||a.message}`)}}else aa=e(process.execPath,[u],{detached:!1,windowsHide:!0,cwd:i.tmpdir(),stdio:["ignore","pipe","pipe"],env:{...process.env,ROUTER_API_KEY:a,NODE_ENV:"production",MITM_ROUTER_BASE:B}});if(aa&&(H(N,ab=aa.pid,{kind:"mitm-server"}),Q=Date.now()),w){let a=g.join(C,"rootCA.crt");h.existsSync(a)&&d(`launchctl setenv NODE_EXTRA_CA_CERTS "${a}"`,{windowsHide:!0},b=>{b?D(`[launchctl] Failed to set NODE_EXTRA_CA_CERTS: ${b.message}`):D(`[launchctl] NODE_EXTRA_CA_CERTS set to ${a}`)})}else if(v){let a=g.join(C,"rootCA.crt");h.existsSync(a)&&d(`setx NODE_EXTRA_CA_CERTS "${a}"`,{windowsHide:!0},a=>{a?D(`[setx] Failed to set NODE_EXTRA_CA_CERTS: ${a.message}`):D("[setx] NODE_EXTRA_CA_CERTS set for current user")})}let G=null;if(aa){aa.on("error",a=>{G=`spawn failed: ${a.code||a.message}`,E(`[MITM] ${G}`)}),aa.stdout.on("data",a=>{process.stdout.write(a)}),aa.stderr.on("data",a=>{let b=a.toString().trim();b&&(v||!b.includes("Password:")&&!b.includes("password for"))&&(b.includes("[MITM]")?process.stderr.write(`${b}
|
|
41
41
|
`):E(b),G=b),!v&&(b.includes("incorrect password")||b.includes("no password was provided"))&&(ad(null),al().catch(()=>{}),T=!0)});let b=aa;b.on("exit",c=>{let d=V({isCurrent:aa===b,intentional:U.has(b),code:c,restarting:R});if(D(`Server exited (code: ${c})${d.clearState?"":" (stale process, ignoring)"}`),d.clearState){aa=null,ab=null;try{h.unlinkSync(N)}catch{}d.restart&&aw(a)}})}let I=await at(8e3,443);if(!I){if(aa&&!aa.killed){U.add(aa);try{aa.kill()}catch{}aa=null,ab=null;try{h.unlinkSync(N)}catch{}}let a=function(){try{if(v){let a=f('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{encoding:"utf8",windowsHide:!0}).trim(),b=parseInt(a,10);if(b&&b>4){let a=f(`tasklist /FI "PID eq ${b}" /FO CSV /NH`,{encoding:"utf8",windowsHide:!0}).match(/"([^"]+)"/);if(a)return a[1].replace(".exe","")}}else{let a=f(`${F} -nP -iTCP:443 -sTCP:LISTEN`,{encoding:"utf8",windowsHide:!0}).trim().split("\n");if(a.length>1)return a[1].split(/\s+/)[0]}}catch{}return null}(),b=a?` Port 443 already in use by ${a}.`:"",c=G||`Check sudo password or port 443 access.${b}`;throw Error(`MITM server failed to start. ${c}`)}for(let[a,b]of(aj&&await aj({mitmCertInstalled:!0}).catch(()=>{}),D(`✅ Server healthy (PID: ${ab||I.pid})`),Object.entries(q())))D(`🌐 DNS ${a}: ${b?"✅ active":"❌ inactive"}`);return await ak(!0,b),b&&ad(b),T=!1,{running:!0,pid:ab}}async function az(a,{preserveEnabled:b=!1}={}){R=!0,P=0,D("⏹ Stopping server...");let e=aa,f=e&&!e.killed?e.pid:af({dropStalePidFile:!1}).pid;if(e&&U.add(e),f&&G(f)&&(D(`Killing server (PID: ${f})...`),ag(f,!1,a),await new Promise(a=>setTimeout(a,1e3)),G(f)&&ag(f,!0,a)),aa=null,ab=null,v){let a=g.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"),b=Object.values(r).flat();try{let{isAdmin:d,runElevatedPowerShell:e,quotePs:f}=c(64809);if(d()){let d=h.readFileSync(a,"utf8"),e=d.split(/\r?\n/).filter(a=>!b.some(b=>a.includes(b))).join("\r\n").replace(/[\r\n\s]+$/g,"")+"\r\n";e!==d&&h.writeFileSync(a,e,"utf8");try{c(79646).execSync("ipconfig /flushdns",{windowsHide:!0,stdio:"ignore"})}catch{}D("\uD83C\uDF10 DNS: ✅ all tool hosts removed")}else{let c=b.map(f).join(","),d=`
|
|
42
42
|
$hosts = @(${c})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6252,exports.ids=[6252],exports.modules={66252:(a,b,c)=>{c.d(b,{createSqlJsAdapter:()=>
|
|
1
|
+
"use strict";exports.id=6252,exports.ids=[6252],exports.modules={66252:(a,b,c)=>{c.d(b,{createSqlJsAdapter:()=>o});var d=c(77598),e=c(73024),f=c.n(e),g=c(46293),h=c.n(g),i=c(34050);let j=null;async function k(){return j||(j=await h()())}let l=Symbol.for("zevairouter.sqljs.heldLocks"),m=globalThis[l]||=new Set;function n(a){return Error(`sql.js database is already owned by process ${a}`)}async function o(a,b={}){let c,e,g=`${a}.sqljs.lock`;!function(a){for(let b=0;b<5;b+=1){if(function(a){let b=`${a}.${process.pid}.${(0,d.randomUUID)()}.tmp`;f().writeFileSync(b,String(process.pid),{mode:384});try{return f().linkSync(b,a),!0}catch(a){if("EEXIST"===a.code)return!1;throw a}finally{f().rmSync(b,{force:!0})}}(a))return;let b=function(a){try{return f().readFileSync(a,"utf8")}catch(a){if("ENOENT"===a.code)return null;throw a}}(a);if(null===b||!function(a,b){let c=/^\d+$/.test(a.trim())?Number(a.trim()):0;if(!Number.isSafeInteger(c)||c<=0)return!0;if(c===process.pid){if(m.has(b))throw n(c);return!0}try{process.kill(c,0)}catch(a){if("ESRCH"===a.code)return!0;if("EPERM"!==a.code)throw a}throw n(c)}(b,a))continue;let c=`${a}.${process.pid}.${(0,d.randomUUID)()}.stale`;try{f().renameSync(a,c)}catch(a){if("ENOENT"===a.code)continue;throw a}let e=f().readFileSync(c,"utf8");if(e!==b){try{f().linkSync(c,a)}catch{}throw f().rmSync(c,{force:!0}),n(e.trim()||"unknown")}f().rmSync(c,{force:!0})}throw Error(`Could not acquire sql.js database lock ${a}`)}(g),m.add(g);let h=()=>{m.delete(g);try{f().readFileSync(g,"utf8")===String(process.pid)&&f().rmSync(g,{force:!0})}catch{}};try{c=await k()}catch(a){throw h(),a}try{b.beforeOpen?.({filePath:a});let d=f().existsSync(a)?f().readFileSync(a):null;(e=new c.Database(d)).exec(i.oG)}catch(a){try{e?.close()}catch{}throw h(),a}let j=!1,l=0,p=null;function q(){if(!p)return;let b=Error(`sql.js database at ${a} is unusable: the initial write failed and no persisted image exists to recover from`);throw b.cause=p,b}function r(){let c=e.export(),d=`${a}.tmp-${process.pid}`;j=!0;try{b.beforePersist?.({filePath:a,tempPath:d}),f().writeFileSync(d,Buffer.from(c),{mode:384}),f().renameSync(d,a),j=!1}catch(a){try{f().rmSync(d,{force:!0})}catch{}throw a}}function s(b){let d,g=null;try{f().existsSync(a)&&(g=f().readFileSync(a))}catch(a){throw b.rewindError=a,b}var h=g;try{(d=new c.Database(h)).exec(i.oG)}catch(a){try{d?.close()}catch{}throw a}let k=e;e=d,j=!1;try{k.close()}catch{}null===g&&(p=b)}function t(a){if(q(),l>0)return a();try{let b=a();return r(),b}catch(a){throw s(a),a}}function u(a){if(!(!a||Array.isArray(a)&&0===a.length))return a}let v=!1;return{driver:"sql.js",run:function(a,b=[]){return t(()=>{let c=e.prepare(a);try{for(c.bind(u(b));c.step(););let a=e.getRowsModified(),d=e.exec("SELECT last_insert_rowid() as id")[0]?.values?.[0]?.[0]??null;return{changes:a,lastInsertRowid:d}}finally{c.free()}})},get:function(a,b=[]){q();let c=e.prepare(a);try{if(c.bind(u(b)),c.step())return c.getAsObject();return}finally{c.free()}},all:function(a,b=[]){q();let c=e.prepare(a);try{c.bind(u(b));let a=[];for(;c.step();)a.push(c.getAsObject());return a}finally{c.free()}},exec:function(a){return t(()=>e.exec(a))},transaction:function(a){q();let b=`sp_${Math.random().toString(36).slice(2)}`,c=0===l;e.exec(`SAVEPOINT ${b}`),l++;let d=!1;try{let f=a();return e.exec(`RELEASE ${b}`),d=!0,l--,c&&r(),f}catch(a){if(!d){l--;try{e.exec(`ROLLBACK TO ${b}`),e.exec(`RELEASE ${b}`)}catch{}}throw c&&s(a),a}},close:function(){if(v)return;v=!0;let a=null;try{j&&r()}catch(b){a=b}finally{try{e.close()}catch(b){a||=b}finally{h()}}if(a)throw a},get raw(){return e}}}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6846,exports.ids=[6846],exports.modules={11410:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{M:()=>k});var e=c(89718),f=c(29240),g=c(43659),h=c(41004),i=c(79489),j=a([i]);async function k(a,b){if(!a)return{finish:a=>a};let d=await (0,e.uH)(a);if(b&&!(0,f.GJ)(b,d))return{error:(0,g.yj)(h.gx.FORBIDDEN,`Model ${b} is not allowed for this API key`)};let{checkApiKeyBudget:j,admitApiKeyRequest:k}=await Promise.resolve().then(c.bind(c,93999)),l=await j(a);if(!l.allowed)return{error:(0,g.yj)(l.error?h.gx.SERVICE_UNAVAILABLE:h.gx.PAYMENT_REQUIRED,l.reason||"Budget exceeded")};let m=await k(a);if(!m.allowed){let a=m.retryAfter?{"Retry-After":String(m.retryAfter)}:void 0;return{error:new Response(JSON.stringify({error:{message:m.reason}}),{status:m.status||429,headers:{"Content-Type":"application/json",...a}})}}return{policy:d,finish:a=>(0,i.L)(a,m.release,m.touch)}}i=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},56895:(a,b,c)=>{c.d(b,{WY:()=>ap,F8:()=>ar,NJ:()=>aq});var d,e=c(43659),f=c(41004),g=c(8590),h=c(35024),i=c(83477),j=c(75681),k=c(48806),l=c(87098),m=c(17559),n=c(25433),o=c(34204),p=c(15082),q=c(90874),r=c(79875),s=c(91861),t=c(64991);let u=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/,v=new Set(["free","freeTier","oauth","apikey"]),w=new Set(["none","oauth","apikey"]),x=new Set(["llm","embedding","image","imageToText","music","stt","tts","video","webFetch","webSearch"]),y=new Set(["antigravity","claude","codex","commandcode","cursor","gemini","gemini-cli","kiro","ollama","openai","openai-response","openai-responses","vertex"]),z=new Set(["public","trusted-local","loopback-service"]),A=new Set(["terminal","kiro-eventstream","none"]),B=["embeddingConfig","imageConfig","imageToTextConfig","musicConfig","sttConfig","ttsConfig","videoConfig"],C=["connectMs","firstEventMs","progressIdleMs","absoluteMs"],D=Object.freeze({quotaSource:Object.freeze({strategy:"none",provenance:"none"}),deadlineProfile:Object.freeze({connectMs:15e3,firstEventMs:6e4,progressIdleMs:6e4,absoluteMs:3e5}),integrityProfile:Object.freeze({mode:"terminal",requireTerminal:!0})});class E extends Error{constructor(a,b){super(`Invalid provider descriptor ${a}: ${b}`),this.name="ProviderDescriptorError",this.path=a}}function F(a,b){throw new E(a,b)}function G(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function H(a,b){"string"==typeof a&&u.test(a)||F(b,"must be a stable lowercase ID")}function I(a,b,c){Array.isArray(a)&&0!==a.length||F(b,"must be a non-empty array");let d=new Set;for(let e of a)"string"==typeof e&&c.has(e)||F(b,"contains an unsupported value"),d.has(e)&&F(b,"contains a duplicate value"),d.add(e)}function J(a){let b=[];for(let[c,d]of Object.entries(a||{}))/(?:base|validate|responses|messages|token|auth|refresh)urls?$/i.test(c)&&("string"==typeof d?b.push(d):Array.isArray(d)&&b.push(...d));return b}function K(a,b,c="public"){for(let d of J(a)){let a;try{a=new URL(d)}catch{F(b,"contains a malformed endpoint")}(a.username||a.password)&&F(b,"endpoint credentials are not allowed"),"public"===c&&"https:"!==a.protocol&&F(b,"public endpoints must use HTTPS"),"public"===c||["http:","https:"].includes(a.protocol)||F(b,"trusted local endpoints must use HTTP or HTTPS")}}function L(a,b){Array.isArray(a)&&0!==a.length||F(b,"must contain a static fallback");let c=new Set;for(let d of a)G(d)&&"string"==typeof d.id&&0!==d.id.length||F(b,"contains a model without an ID"),c.has(d.id)&&F(b,`contains duplicate model ${d.id}`),c.add(d.id)}function M(a,b){for(let c of(G(a)||F(b,"must be an object"),C))(!Number.isInteger(a[c])||a[c]<1e3||a[c]>9e5)&&F(`${b}.${c}`,"must be between 1000 and 900000 milliseconds");a.absoluteMs<a.connectMs&&F(`${b}.absoluteMs`,"must cover connect time")}let N={id:"antigravity",alias:"ag",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.antigravity},serviceKinds:j.AI_PROVIDERS.antigravity.serviceKinds,capabilities:{streaming:!0,tools:!0,thinking:!0},transport:h.xq.antigravity,models:i.vq.ag,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:{...D.deadlineProfile,variants:{thinking:{connectMs:D.deadlineProfile.connectMs,firstEventMs:f.iL,progressIdleMs:f.SI,absoluteMs:f.P4}}},integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"quota-or-model"}},O={id:"kiro",alias:"kr",category:"oauth",authModes:j.AI_PROVIDERS.kiro.authModes,display:{...j.AI_PROVIDERS.kiro},serviceKinds:["llm"],capabilities:{streaming:!0,tools:!0,thinking:!0},transport:h.xq.kiro,models:i.vq.kr,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:(0,t.JJ)("kiro"),deadlineProfile:D.deadlineProfile,integrityProfile:{mode:"kiro-eventstream",requireTerminal:!0,verifiedWindowMs:9e5,cleanProbesToRecover:5,memoryLimitBytes:2097152,maxBytes:0x4000000},dashboard:{connection:"oauth-or-apikey",validation:"profile-or-model"}},P={id:"codex",alias:"cx",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.codex},serviceKinds:j.AI_PROVIDERS.codex.serviceKinds,capabilities:{streaming:!0,tools:!0,thinking:!0},transport:h.xq.codex,models:i.vq.cx,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:D.deadlineProfile,integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"catalog-or-quota"}},Q={id:"cursor",alias:"cu",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.cursor},serviceKinds:["llm"],capabilities:{streaming:!0,tools:!0,liveCatalog:!0},transport:h.xq.cursor,models:i.vq.cu,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:D.deadlineProfile,integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"account-or-model"}},R={id:"github",alias:"gh",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.github},serviceKinds:j.AI_PROVIDERS.github.serviceKinds,capabilities:{streaming:!0,tools:!0,responseEscalation:!0},transport:h.xq.github,models:i.vq.gh,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:D.deadlineProfile,integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"quota-or-model"},embeddingConfig:j.AI_PROVIDERS.github.embeddingConfig},S=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","modelsFetcher","mediaPriority","hiddenKinds"],T=[k.A,l.A,m.A,n.A,o.A,p.A,q.A,r.A,s.A,N,O,P,Q,R];function U(a={}){return Object.fromEntries(S.filter(b=>void 0!==a[b]).map(b=>[b,a[b]]))}let V=new Set([...Object.keys(j.AI_PROVIDERS),...Object.keys(h.xq)]),W=new Map(T.map(a=>[a.id,a])),X=new Set(["antigravity","kiro","codex","cursor","github"]),Y={};for(let a of V){let b=function(a){let b=j.AI_PROVIDERS[a]||{},c=b.alias||a;return{id:a,alias:c,category:b.noAuth?"free":b.hasOAuth?"oauth":"apikey",authModes:b.authModes,hasOAuth:b.hasOAuth,noAuth:b.noAuth,passthroughModels:b.passthroughModels,display:function(a={}){let b=new Set(S);return Object.fromEntries(Object.entries(a).filter(([a])=>!b.has(a)))}(b),transport:h.xq[a],models:i.vq[c]||i.vq[a]||[],...U(b)}}(a),c=W.has(a)?(d=W.get(a),{...b,...d,display:{...b.display,...d.display},transport:{...b.transport,...d.transport},models:function(a=[],b=[]){let c=new Map;for(let d of[...a,...b])d?.id&&c.set(d.id,{...c.get(d.id),...d});return[...c.values()]}(b.models,d.models)}):b;Y[a]=X.has(a)?function(a,{optional:b=!1}={}){try{return function(a){if(G(a)||F("root","must be an object"),H(a.id,"id"),H(a.alias,"alias"),void 0!==a.aliases)for(let b of(Array.isArray(a.aliases)||F("aliases","must be an array"),a.aliases))H(b,"aliases");v.has(a.category)||F("category","is unsupported"),I(a.authModes,"authModes",w),I(a.serviceKinds,"serviceKinds",x),G(a.display)&&"string"==typeof a.display.name&&a.display.name.trim()||F("display.name","is required"),G(a.capabilities)||F("capabilities","must be an object"),G(a.transport)||F("transport","must be an object"),y.has(a.transport.format)||F("transport.format","is unsupported");let b=a.transport.trustClass||"public";z.has(b)||F("transport.trustClass","is unsupported"),0===J(a.transport).length&&F("transport","requires an endpoint"),K(a.transport,"transport",b),L(a.models,"models"),G(a.quotaSource)&&"string"==typeof a.quotaSource.strategy&&"string"==typeof a.quotaSource.provenance||F("quotaSource","must declare strategy and provenance"),G(c=a.refreshProfile)||F("refreshProfile","must be an object"),(!Number.isInteger(c.maxConcurrent)||c.maxConcurrent<1)&&F("refreshProfile.maxConcurrent","must be a positive integer"),(!Number.isInteger(c.minDelayMs)||c.minDelayMs<0)&&F("refreshProfile.minDelayMs","must be a non-negative integer");var c,d=a.deadlineProfile;if(M(d,"deadlineProfile"),void 0!==d.variants)for(let[a,b]of(G(d.variants)||F("deadlineProfile.variants","must be an object"),Object.entries(d.variants)))M(b,`deadlineProfile.variants.${a}`);var e=a.integrityProfile;for(let a of(G(e)&&A.has(e.mode)||F("integrityProfile.mode","is unsupported"),"boolean"!=typeof e.requireTerminal&&F("integrityProfile.requireTerminal","must be boolean"),["memoryLimitBytes","maxBytes","verifiedWindowMs","cleanProbesToRecover"]))void 0!==e[a]&&(!Number.isInteger(e[a])||e[a]<=0)&&F(`integrityProfile.${a}`,"must be a positive integer");G(a.dashboard)&&"string"==typeof a.dashboard.connection&&"string"==typeof a.dashboard.validation||F("dashboard","must declare connection and validation modes");for(let b of B){let c=a[b];void 0!==c&&(G(c)||F(b,"must be an object"),K(c,b,c.trustClass||"public"),void 0!==c.models&&L(c.models,`${b}.models`))}return function a(b,c=new WeakMap){if(null===b||"object"!=typeof b)return b;if(c.has(b))return c.get(b);let d=Array.isArray(b)?[]:{};for(let[e,f]of(c.set(b,d),Object.entries(b)))d[e]=a(f,c);return Object.freeze(d)}(a)}(a)}catch(d){let c;if(!b)throw d;return Object.freeze({id:"string"==typeof a?.id&&u.test(a.id)?a.id:"optional-provider",disabled:!0,diagnostic:(c=d instanceof E?d.path:"unknown",`Provider descriptor disabled: invalid ${c}`.slice(0,160))})}}(c):c}let Z={},$={},_={};for(let a of Object.values(Y)){a.transport&&(Z[a.id]=a.transport),$[a.alias||a.id]=a.models||[];let b=U(a);Object.keys(b).length>0&&(_[a.id]=b)}let aa="application/json";function ab(a){let b=Error(a);return b.status=400,b}let ac="application/json",ad=new Set(["veo-3.1-generate-preview","veo-3.1-fast-generate-preview","veo-3.0-generate-001","veo-2.0-generate-001"]),ae={duration:"durationSeconds",aspect_ratio:"aspectRatio",resolution:"resolution",negative_prompt:"negativePrompt",seed:"seed",storage_uri:"storageUri",generate_audio:"generateAudio"};function af(a){let b=Error(a);return b.status=400,b}function ag(a){return"string"==typeof a&&a.length>0&&"."!==a&&".."!==a&&/^[A-Za-z0-9._~-]+$/.test(a)}function ah(a){if("string"!=typeof a)return null;let b=a.split("/");return 10===b.length&&"projects"===b[0]&&"locations"===b[2]&&"publishers"===b[4]&&"google"===b[5]&&"models"===b[6]&&"operations"===b[8]&&ag(b[1])&&ag(b[3])&&ag(b[7])&&ag(b[9])?{name:a,project:b[1],location:b[3],model:b[7],operation:b[9]}:null}function ai(a){if("string"!=typeof a||!/^[A-Za-z0-9_-]+$/.test(a))return null;try{let b=Buffer.from(a,"base64url").toString("utf8");if(Buffer.from(b,"utf8").toString("base64url")!==a)return null;return ah(b)?.name||null}catch{return null}}function aj(a){return`https://${a}-aiplatform.googleapis.com/v1`}function ak(a){return Response.json(a,{headers:{"Access-Control-Allow-Origin":"*"}})}let al={openrouter:{buildRequest({config:a,action:b,requestId:c,model:d,parsedBody:e,contentType:f,token:g}){let i=a.baseUrl.replace(/\/$/,""),j={Accept:aa,...h.xq.openrouter.headers};if(g&&(j.Authorization=`Bearer ${g}`),c)return{url:`${i}/${encodeURIComponent(c)}`,init:{method:"GET",headers:j}};if("generations"!==b)throw ab(`OpenRouter does not support video action: ${b}`);if(f?.split(";",1)[0].trim().toLowerCase()!==aa||!e||"object"!=typeof e||Array.isArray(e))throw ab("OpenRouter video generation requires an application/json object body");return j["Content-Type"]=aa,{url:i,init:{method:"POST",headers:j,body:JSON.stringify({...e,model:d})}}},parseResponse:async a=>new Response(await a.arrayBuffer(),{status:a.status,headers:{"Content-Type":a.headers.get("content-type")||aa,"Access-Control-Allow-Origin":"*"}})},vertex:{buildRequest({action:a,requestId:b,model:c,parsedBody:d,credentials:e}){let f={Accept:ac,"Content-Type":ac};if(e?.accessToken&&(f.Authorization=`Bearer ${e.accessToken}`),b){let a=ai(b),c=a&&ah(a);if(!c)throw af("Invalid Vertex operation ID");if(!ad.has(c.model))throw af("Invalid or unsupported Vertex video model");return{url:`${aj(c.location)}/projects/${c.project}/locations/${c.location}/publishers/google/models/${c.model}:fetchPredictOperation`,init:{method:"POST",headers:f,body:JSON.stringify({operationName:a})}}}if("generations"!==a)throw af(`Vertex does not support video action: ${a}`);if(!ag(c)||!ad.has(c))throw af("Invalid or unsupported Vertex video model");if(!d||"object"!=typeof d||Array.isArray(d))throw af("Vertex video generation requires a JSON object body");let{project:g,location:h}=function(a){let b=function(a){let b=a?.apiKey;if(b&&"object"==typeof b)return b;if("string"!=typeof b||!b.trim().startsWith("{"))return null;try{let a=JSON.parse(b);return a&&"object"==typeof a?a:null}catch{return null}}(a),c=a?.projectId||a?.providerSpecificData?.projectId||b?.project_id,d=a?.providerSpecificData?.location||"us-central1";if(!ag(c))throw af("Invalid or missing Vertex project ID");if(!ag(d))throw af("Invalid Vertex location");return{project:c,location:d}}(e),i={prompt:d.prompt};void 0!==d.image&&(i.image=d.image);let j={};for(let[a,b]of Object.entries(ae))void 0!==d[a]&&(j[b]=d[a]);return{url:`${aj(h)}/projects/${g}/locations/${h}/publishers/google/models/${c}:predictLongRunning`,init:{method:"POST",headers:f,body:JSON.stringify({instances:[i],parameters:j})}}},async parseResponse(a,{requestId:b}){let c=await a.json();if(!b){var d;let a=ah(d=c?.name)?Buffer.from(d,"utf8").toString("base64url"):null;if(!a)throw af("Vertex returned an invalid operation name");return ak({request_id:a,status:"pending"})}if(!c?.done){let a=c?.metadata?.progressPercent;return Number.isFinite(a)?ak({status:"processing",progress:a}):ak({status:"pending"})}if(c.error){let a=ai(b),d=String(c.error.message||"");return ak({status:"failed",error:{code:c.error.code,message:a?d.split(a).join("[redacted]"):d}})}let e=c?.response?.videos?.[0];return e?.gcsUri!==void 0?ak({status:"done",video:{url:e.gcsUri}}):e?.bytesBase64Encoded!==void 0?ak({status:"done",video:{b64_json:e.bytesBase64Encoded}}):ak({status:"done"})}}},am=Number(process.env.VIDEO_FETCH_TIMEOUT_MS),an=Number.isFinite(am)?Math.max(5e3,Math.min(am,6e5)):12e4,ao=new Set(["generations","edits","extensions"]);function ap(a){return _[a]?.videoConfig||null}function aq(a,b=null){if(!a)return a;let c=String(a).replace(/Bearer\s+[A-Za-z0-9._~+/=-]{8,}/gi,"Bearer [redacted]");for(let a of["accessToken","refreshToken","apiKey"]){let d=b?.[a];"string"==typeof d&&d.length>=8&&(c=c.split(d).join("[redacted]"))}return c}async function ar({provider:a,action:b=null,requestId:c=null,rawBody:d=null,model:h=null,parsedBody:i=null,contentType:j=null,idempotencyKey:k=null,credentials:l,signal:m,timeoutMs:n=an,log:o,prepareCredentials:p,onCredentialsRefreshed:q}){let r,s,t=ap(a);if(!t)return(0,e.A1)(f.gx.BAD_REQUEST,`Provider '${a}' does not support video generation`);if(!c&&!ao.has(b))return(0,e.A1)(f.gx.BAD_REQUEST,`Unknown video action: ${b}`);let u=al[a]||null,v="vertex"===a||"vertex-partner"===a,w=c?"GET":"POST",x=(s="function"==typeof AbortSignal?.timeout?AbortSignal.timeout(n):null,m&&s&&"function"==typeof AbortSignal.any?AbortSignal.any([m,s]):m||s||void 0),y=()=>v?l?.accessToken:l?.accessToken||l?.apiKey,z=a=>u.buildRequest({config:t,action:b,requestId:c,model:h,parsedBody:i,rawBody:d,contentType:j,token:a,idempotencyKey:k,credentials:l}),A=null;if(u)try{A=z(y())}catch(b){if(b?.status===f.gx.BAD_REQUEST)return(0,e.A1)(f.gx.BAD_REQUEST,b.message);return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video request build failed: ${b.message}`,l))}if(p){let b=await p(l);if(b&&(l=b),u)try{A=z(y())}catch(b){if(b?.status===f.gx.BAD_REQUEST)return(0,e.A1)(f.gx.BAD_REQUEST,b.message);return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video request build failed: ${b.message}`,l))}}let B=(a,e=null)=>{let f;if(u){let b=e||z(a);return fetch(b.url,{...b.init,signal:x})}return fetch((f=t.baseUrl.replace(/\/$/,""),c?`${f}/${encodeURIComponent(c)}`:`${f}/${b}`),{method:w,headers:function({token:a,contentType:b,idempotencyKey:c}){let d={Accept:"application/json"};if(a&&(d.Authorization=`Bearer ${a}`),b&&(d["Content-Type"]=b),c){let a=String(c).replace(/[\r\n\t]/g,"").slice(0,256);a&&(d["Idempotency-Key"]=a)}return d}({token:a,contentType:"POST"===w?j:null,idempotencyKey:"POST"===w?k:null}),body:"POST"===w?d:void 0,signal:x})};if(v&&!l?.accessToken){let b;try{b=await (0,g.$B)(a,l,o)}catch(b){return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video access token mint failed: ${b.message}`,l))}if(!b?.accessToken)return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video access token mint failed`,l));Object.assign(l,b),q&&await q(b),A=z(y())}try{r=await B(y(),A)}catch(b){if(b?.status===f.gx.BAD_REQUEST)return(0,e.A1)(f.gx.BAD_REQUEST,b.message);if(b?.name==="AbortError"||b?.name==="TimeoutError")return(0,e.A1)(f.gx.REQUEST_TIMEOUT,`[${a}] video ${w} aborted: ${b.message}`);return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video upstream fetch failed: ${b.message}`,l))}if((r.status===f.gx.UNAUTHORIZED||r.status===f.gx.FORBIDDEN)&&(l?.refreshToken||v)){let b=null;try{b=await (0,g.$B)(a,l,o)}catch(b){o?.warn?.("TOKEN",`${a} | video refresh error: ${aq(b.message,l)}`)}if(b?.accessToken){o?.info?.("TOKEN",`${a.toUpperCase()} | refreshed for video ${w}`),Object.assign(l,b),q&&await q(b);try{await r.body?.cancel?.()}catch{}try{r=await B(y())}catch(b){return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video retry after refresh failed: ${b.message}`,l))}}else o?.warn?.("TOKEN",`${a.toUpperCase()} | video refresh failed — account needs re-auth`)}if(r.ok&&u)return{success:!0,response:await u.parseResponse(r,{config:t,provider:a,action:b,requestId:c,model:h,parsedBody:i})};let C=await r.text().catch(()=>"");if(!r.ok){let b=aq(C||`HTTP ${r.status}`,l);return(0,e.A1)(r.status,`[${a}] ${b.slice(0,2e3)}`)}return{success:!0,response:new Response(C,{status:r.status,headers:{"Content-Type":r.headers.get("content-type")||"application/json","Access-Control-Allow-Origin":"*"}})}}},96846:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{g:()=>t,s:()=>v});var e=c(80238),f=c(89718),g=c(38775),h=c(56895),i=c(43659),j=c(41004),k=c(58136),l=c(11410),m=c(7803),n=a([l]);function o(a){return a.headers.get("x-zevai-connection-id")||a.headers.get("x-connection-id")||null}l=(n.then?(await n)():n)[0];let w=new Set([j.gx.UNAUTHORIZED,j.gx.FORBIDDEN,j.gx.RATE_LIMITED]);async function p(a){let b=(0,e.Tr)(a);if((await (0,f.mt)()).requireApiKey){if(!b)return(0,i.yj)(j.gx.UNAUTHORIZED,"Missing API key");if(!await (0,e.kI)(b))return(0,i.yj)(j.gx.UNAUTHORIZED,"Invalid API key")}return null}async function q(a){let b,c=a.headers.get("content-type")||"",d=Number.isFinite(b=Number(process.env.MAX_VIDEO_REQUEST_BYTES))?Math.max(1024,Math.min(b,0x4000000)):0x2000000,e=Number(a.headers.get("content-length"));if(Number.isFinite(e)&&e>d)return{error:(0,i.yj)(j.gx.PAYLOAD_TOO_LARGE,"Video request body is too large")};if(c.includes("application/json")){let b,e=await a.text();if(Buffer.byteLength(e)>d)return{error:(0,i.yj)(j.gx.PAYLOAD_TOO_LARGE,"Video request body is too large")};try{b=JSON.parse(e)}catch{return{error:(0,i.yj)(j.gx.BAD_REQUEST,"Invalid JSON body")}}return{raw:e,parsed:b,contentType:c}}let f=Buffer.from(await a.arrayBuffer());return f.byteLength>d?{error:(0,i.yj)(j.gx.PAYLOAD_TOO_LARGE,"Video request body is too large")}:{raw:f,parsed:null,contentType:c}}async function r(a){if(!a?.model)return{provider:"xai",model:null};let b=String(a.model),c=await (0,g.mA)(b);return c.provider?(0,h.WY)(c.provider)?{provider:c.provider,model:c.model}:b.includes("/")?{error:(0,i.yj)(j.gx.BAD_REQUEST,`Provider '${c.provider}' does not support video generation`)}:{provider:"xai",model:b}:{error:(0,i.yj)(j.gx.BAD_REQUEST,"Combos are not supported for video generation")}}function s(a,b){if(!b)return a;let c=new Headers(a.headers);return c.set("x-zevai-connection-id",String(b)),c.set("x-connection-id",String(b)),c.set("Access-Control-Expose-Headers","x-zevai-connection-id, x-connection-id"),new Response(a.body,{status:a.status,headers:c})}async function t(a,b){let c=await p(a);if(c)return c;let d=await q(a);if(d.error)return d.error;let f=await r(d.parsed);if(f.error)return f.error;let{provider:g,model:h}=f,i=await (0,l.M)((0,e.Tr)(a),d.parsed?.model?String(d.parsed.model):null);return i.error?i.error:i.finish(await u(a,b,d,g,h))}async function u(a,b,c,d,f){let g=c.raw;c.parsed&&f&&c.parsed.model!==f&&(g=JSON.stringify({...c.parsed,model:f}));let l=o(a),n=(0,e.Tr)(a),p=a.headers.get("idempotency-key")||null,q=new Set,r=null,t=null;for(;;){let o=await (0,e.c1)(d,q,f,{preferredConnectionId:l,...n?{apiKey:n}:{}});if(!o||o.allRateLimited){if(o?.allRateLimited){let a=r||o.lastError||"Unavailable",b=t||Number(o.lastErrorCode)||j.gx.SERVICE_UNAVAILABLE;return(0,i.wO)(b,`[${d}/${f||"video"}] ${a}`,o.retryAfter,o.retryAfterHuman)}if(0===q.size)return(0,i.yj)(j.gx.BAD_REQUEST,`No credentials for provider: ${d}`);return(0,i.yj)(t||j.gx.SERVICE_UNAVAILABLE,r||"All accounts unavailable")}let u=await (0,h.F8)({provider:d,action:b,model:f,parsedBody:c.parsed,rawBody:g,contentType:c.contentType||null,idempotencyKey:p,credentials:o,prepareCredentials:async a=>(Object.assign(a,await (0,k.eU)(d,a)),a),signal:a.signal,log:m,onCredentialsRefreshed:async a=>{await (0,k.vN)(o.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})}});if(u.success)return await (0,e.Pt)(o.connectionId,o,f),m.info("VIDEO",`${d.toUpperCase()} | ${b} accepted (connection ${o.connectionId})`),s(u.response,o.connectionId);let{shouldFallback:v}=await (0,e.vk)(o.connectionId,u.status,(0,h.NJ)(u.error,o),d,f);if(v&&w.has(u.status)){q.add(o.connectionId),r=u.error,t=u.status;continue}return u.response}}async function v(a,b){let c=await p(a);if(c)return c;if(!b)return(0,i.yj)(j.gx.BAD_REQUEST,"Missing video request id");if(String(b).length>256)return(0,i.yj)(j.gx.BAD_REQUEST,"Video request id is too long");let d=o(a),g=d?await (0,f.Mc)(d):null,l=g?.provider&&(0,h.WY)(g.provider)?g.provider:null,n=new URL(a.url).searchParams.get("provider");if(!l&&n&&!(0,h.WY)(n))return(0,i.yj)(j.gx.BAD_REQUEST,`Provider '${n}' does not support video generation`);let q=l||n||"xai",r=!!d,t=(0,e.Tr)(a),u=await (0,e.c1)(q,null,null,{preferredConnectionId:d,strictPreferred:r,...t?{apiKey:t}:{}});if(!u||u.allRateLimited)return(0,i.yj)(j.gx.BAD_REQUEST,`No credentials for provider: ${q}`);let v=await (0,h.F8)({provider:q,requestId:b,credentials:u,prepareCredentials:async a=>(Object.assign(a,await (0,k.eU)(q,a)),a),signal:a.signal,log:m,onCredentialsRefreshed:async a=>{await (0,k.vN)(u.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})}});return v.success?(await (0,e.Pt)(u.connectionId,u,null),s(v.response,u.connectionId)):(await (0,e.vk)(u.connectionId,v.status,(0,h.NJ)(v.error,u),q,null),v.response)}d()}catch(a){d(a)}})}};
|
|
1
|
+
"use strict";exports.id=6846,exports.ids=[6846],exports.modules={11410:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{M:()=>k});var e=c(89718),f=c(29240),g=c(43659),h=c(41004),i=c(79489),j=a([i]);async function k(a,b){if(!a)return{run:a=>a()};let d=await (0,e.uH)(a);if(b&&!(0,f.GJ)(b,d))return{error:(0,g.yj)(h.gx.FORBIDDEN,`Model ${b} is not allowed for this API key`)};let{checkApiKeyBudget:j,admitApiKeyRequest:k}=await Promise.resolve().then(c.bind(c,93999)),l=await j(a);if(!l.allowed)return{error:(0,g.yj)(l.error?h.gx.SERVICE_UNAVAILABLE:h.gx.PAYMENT_REQUIRED,l.reason||"Budget exceeded")};let m=await k(a);if(!m.allowed){let a=m.retryAfter?{"Retry-After":String(m.retryAfter)}:void 0;return{error:new Response(JSON.stringify({error:{message:m.reason}}),{status:m.status||429,headers:{"Content-Type":"application/json",...a}})}}return{policy:d,run:async a=>{let b;try{b=await a()}catch(a){throw m.release?.(),a}return(0,i.L)(b,m.release,m.touch)}}}i=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},56895:(a,b,c)=>{c.d(b,{WY:()=>ap,F8:()=>ar,NJ:()=>aq});var d,e=c(43659),f=c(41004),g=c(8590),h=c(35024),i=c(83477),j=c(75681),k=c(48806),l=c(87098),m=c(17559),n=c(25433),o=c(34204),p=c(15082),q=c(90874),r=c(79875),s=c(91861),t=c(64991);let u=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/,v=new Set(["free","freeTier","oauth","apikey"]),w=new Set(["none","oauth","apikey"]),x=new Set(["llm","embedding","image","imageToText","music","stt","tts","video","webFetch","webSearch"]),y=new Set(["antigravity","claude","codex","commandcode","cursor","gemini","gemini-cli","kiro","ollama","openai","openai-response","openai-responses","vertex"]),z=new Set(["public","trusted-local","loopback-service"]),A=new Set(["terminal","kiro-eventstream","none"]),B=["embeddingConfig","imageConfig","imageToTextConfig","musicConfig","sttConfig","ttsConfig","videoConfig"],C=["connectMs","firstEventMs","progressIdleMs","absoluteMs"],D=Object.freeze({quotaSource:Object.freeze({strategy:"none",provenance:"none"}),deadlineProfile:Object.freeze({connectMs:15e3,firstEventMs:6e4,progressIdleMs:6e4,absoluteMs:3e5}),integrityProfile:Object.freeze({mode:"terminal",requireTerminal:!0})});class E extends Error{constructor(a,b){super(`Invalid provider descriptor ${a}: ${b}`),this.name="ProviderDescriptorError",this.path=a}}function F(a,b){throw new E(a,b)}function G(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function H(a,b){"string"==typeof a&&u.test(a)||F(b,"must be a stable lowercase ID")}function I(a,b,c){Array.isArray(a)&&0!==a.length||F(b,"must be a non-empty array");let d=new Set;for(let e of a)"string"==typeof e&&c.has(e)||F(b,"contains an unsupported value"),d.has(e)&&F(b,"contains a duplicate value"),d.add(e)}function J(a){let b=[];for(let[c,d]of Object.entries(a||{}))/(?:base|validate|responses|messages|token|auth|refresh)urls?$/i.test(c)&&("string"==typeof d?b.push(d):Array.isArray(d)&&b.push(...d));return b}function K(a,b,c="public"){for(let d of J(a)){let a;try{a=new URL(d)}catch{F(b,"contains a malformed endpoint")}(a.username||a.password)&&F(b,"endpoint credentials are not allowed"),"public"===c&&"https:"!==a.protocol&&F(b,"public endpoints must use HTTPS"),"public"===c||["http:","https:"].includes(a.protocol)||F(b,"trusted local endpoints must use HTTP or HTTPS")}}function L(a,b){Array.isArray(a)&&0!==a.length||F(b,"must contain a static fallback");let c=new Set;for(let d of a)G(d)&&"string"==typeof d.id&&0!==d.id.length||F(b,"contains a model without an ID"),c.has(d.id)&&F(b,`contains duplicate model ${d.id}`),c.add(d.id)}function M(a,b){for(let c of(G(a)||F(b,"must be an object"),C))(!Number.isInteger(a[c])||a[c]<1e3||a[c]>9e5)&&F(`${b}.${c}`,"must be between 1000 and 900000 milliseconds");a.absoluteMs<a.connectMs&&F(`${b}.absoluteMs`,"must cover connect time")}let N={id:"antigravity",alias:"ag",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.antigravity},serviceKinds:j.AI_PROVIDERS.antigravity.serviceKinds,capabilities:{streaming:!0,tools:!0,thinking:!0},transport:h.xq.antigravity,models:i.vq.ag,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:{...D.deadlineProfile,variants:{thinking:{connectMs:D.deadlineProfile.connectMs,firstEventMs:f.iL,progressIdleMs:f.SI,absoluteMs:f.P4}}},integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"quota-or-model"}},O={id:"kiro",alias:"kr",category:"oauth",authModes:j.AI_PROVIDERS.kiro.authModes,display:{...j.AI_PROVIDERS.kiro},serviceKinds:["llm"],capabilities:{streaming:!0,tools:!0,thinking:!0},transport:h.xq.kiro,models:i.vq.kr,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:(0,t.JJ)("kiro"),deadlineProfile:D.deadlineProfile,integrityProfile:{mode:"kiro-eventstream",requireTerminal:!0,verifiedWindowMs:9e5,cleanProbesToRecover:5,memoryLimitBytes:2097152,maxBytes:0x4000000},dashboard:{connection:"oauth-or-apikey",validation:"profile-or-model"}},P={id:"codex",alias:"cx",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.codex},serviceKinds:j.AI_PROVIDERS.codex.serviceKinds,capabilities:{streaming:!0,tools:!0,thinking:!0},transport:h.xq.codex,models:i.vq.cx,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:D.deadlineProfile,integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"catalog-or-quota"}},Q={id:"cursor",alias:"cu",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.cursor},serviceKinds:["llm"],capabilities:{streaming:!0,tools:!0,liveCatalog:!0},transport:h.xq.cursor,models:i.vq.cu,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:D.deadlineProfile,integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"account-or-model"}},R={id:"github",alias:"gh",category:"oauth",authModes:["oauth"],display:{...j.AI_PROVIDERS.github},serviceKinds:j.AI_PROVIDERS.github.serviceKinds,capabilities:{streaming:!0,tools:!0,responseEscalation:!0},transport:h.xq.github,models:i.vq.gh,quotaSource:{strategy:"provider-api",provenance:"live-or-last-success"},refreshProfile:t.Wk,deadlineProfile:D.deadlineProfile,integrityProfile:D.integrityProfile,dashboard:{connection:"oauth",validation:"quota-or-model"},embeddingConfig:j.AI_PROVIDERS.github.embeddingConfig},S=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","modelsFetcher","mediaPriority","hiddenKinds"],T=[k.A,l.A,m.A,n.A,o.A,p.A,q.A,r.A,s.A,N,O,P,Q,R];function U(a={}){return Object.fromEntries(S.filter(b=>void 0!==a[b]).map(b=>[b,a[b]]))}let V=new Set([...Object.keys(j.AI_PROVIDERS),...Object.keys(h.xq)]),W=new Map(T.map(a=>[a.id,a])),X=new Set(["antigravity","kiro","codex","cursor","github"]),Y={};for(let a of V){let b=function(a){let b=j.AI_PROVIDERS[a]||{},c=b.alias||a;return{id:a,alias:c,category:b.noAuth?"free":b.hasOAuth?"oauth":"apikey",authModes:b.authModes,hasOAuth:b.hasOAuth,noAuth:b.noAuth,passthroughModels:b.passthroughModels,display:function(a={}){let b=new Set(S);return Object.fromEntries(Object.entries(a).filter(([a])=>!b.has(a)))}(b),transport:h.xq[a],models:i.vq[c]||i.vq[a]||[],...U(b)}}(a),c=W.has(a)?(d=W.get(a),{...b,...d,display:{...b.display,...d.display},transport:{...b.transport,...d.transport},models:function(a=[],b=[]){let c=new Map;for(let d of[...a,...b])d?.id&&c.set(d.id,{...c.get(d.id),...d});return[...c.values()]}(b.models,d.models)}):b;Y[a]=X.has(a)?function(a,{optional:b=!1}={}){try{return function(a){if(G(a)||F("root","must be an object"),H(a.id,"id"),H(a.alias,"alias"),void 0!==a.aliases)for(let b of(Array.isArray(a.aliases)||F("aliases","must be an array"),a.aliases))H(b,"aliases");v.has(a.category)||F("category","is unsupported"),I(a.authModes,"authModes",w),I(a.serviceKinds,"serviceKinds",x),G(a.display)&&"string"==typeof a.display.name&&a.display.name.trim()||F("display.name","is required"),G(a.capabilities)||F("capabilities","must be an object"),G(a.transport)||F("transport","must be an object"),y.has(a.transport.format)||F("transport.format","is unsupported");let b=a.transport.trustClass||"public";z.has(b)||F("transport.trustClass","is unsupported"),0===J(a.transport).length&&F("transport","requires an endpoint"),K(a.transport,"transport",b),L(a.models,"models"),G(a.quotaSource)&&"string"==typeof a.quotaSource.strategy&&"string"==typeof a.quotaSource.provenance||F("quotaSource","must declare strategy and provenance"),G(c=a.refreshProfile)||F("refreshProfile","must be an object"),(!Number.isInteger(c.maxConcurrent)||c.maxConcurrent<1)&&F("refreshProfile.maxConcurrent","must be a positive integer"),(!Number.isInteger(c.minDelayMs)||c.minDelayMs<0)&&F("refreshProfile.minDelayMs","must be a non-negative integer");var c,d=a.deadlineProfile;if(M(d,"deadlineProfile"),void 0!==d.variants)for(let[a,b]of(G(d.variants)||F("deadlineProfile.variants","must be an object"),Object.entries(d.variants)))M(b,`deadlineProfile.variants.${a}`);var e=a.integrityProfile;for(let a of(G(e)&&A.has(e.mode)||F("integrityProfile.mode","is unsupported"),"boolean"!=typeof e.requireTerminal&&F("integrityProfile.requireTerminal","must be boolean"),["memoryLimitBytes","maxBytes","verifiedWindowMs","cleanProbesToRecover"]))void 0!==e[a]&&(!Number.isInteger(e[a])||e[a]<=0)&&F(`integrityProfile.${a}`,"must be a positive integer");G(a.dashboard)&&"string"==typeof a.dashboard.connection&&"string"==typeof a.dashboard.validation||F("dashboard","must declare connection and validation modes");for(let b of B){let c=a[b];void 0!==c&&(G(c)||F(b,"must be an object"),K(c,b,c.trustClass||"public"),void 0!==c.models&&L(c.models,`${b}.models`))}return function a(b,c=new WeakMap){if(null===b||"object"!=typeof b)return b;if(c.has(b))return c.get(b);let d=Array.isArray(b)?[]:{};for(let[e,f]of(c.set(b,d),Object.entries(b)))d[e]=a(f,c);return Object.freeze(d)}(a)}(a)}catch(d){let c;if(!b)throw d;return Object.freeze({id:"string"==typeof a?.id&&u.test(a.id)?a.id:"optional-provider",disabled:!0,diagnostic:(c=d instanceof E?d.path:"unknown",`Provider descriptor disabled: invalid ${c}`.slice(0,160))})}}(c):c}let Z={},$={},_={};for(let a of Object.values(Y)){a.transport&&(Z[a.id]=a.transport),$[a.alias||a.id]=a.models||[];let b=U(a);Object.keys(b).length>0&&(_[a.id]=b)}let aa="application/json";function ab(a){let b=Error(a);return b.status=400,b}let ac="application/json",ad=new Set(["veo-3.1-generate-preview","veo-3.1-fast-generate-preview","veo-3.0-generate-001","veo-2.0-generate-001"]),ae={duration:"durationSeconds",aspect_ratio:"aspectRatio",resolution:"resolution",negative_prompt:"negativePrompt",seed:"seed",storage_uri:"storageUri",generate_audio:"generateAudio"};function af(a){let b=Error(a);return b.status=400,b}function ag(a){return"string"==typeof a&&a.length>0&&"."!==a&&".."!==a&&/^[A-Za-z0-9._~-]+$/.test(a)}function ah(a){if("string"!=typeof a)return null;let b=a.split("/");return 10===b.length&&"projects"===b[0]&&"locations"===b[2]&&"publishers"===b[4]&&"google"===b[5]&&"models"===b[6]&&"operations"===b[8]&&ag(b[1])&&ag(b[3])&&ag(b[7])&&ag(b[9])?{name:a,project:b[1],location:b[3],model:b[7],operation:b[9]}:null}function ai(a){if("string"!=typeof a||!/^[A-Za-z0-9_-]+$/.test(a))return null;try{let b=Buffer.from(a,"base64url").toString("utf8");if(Buffer.from(b,"utf8").toString("base64url")!==a)return null;return ah(b)?.name||null}catch{return null}}function aj(a){return`https://${a}-aiplatform.googleapis.com/v1`}function ak(a){return Response.json(a,{headers:{"Access-Control-Allow-Origin":"*"}})}let al={openrouter:{buildRequest({config:a,action:b,requestId:c,model:d,parsedBody:e,contentType:f,token:g}){let i=a.baseUrl.replace(/\/$/,""),j={Accept:aa,...h.xq.openrouter.headers};if(g&&(j.Authorization=`Bearer ${g}`),c)return{url:`${i}/${encodeURIComponent(c)}`,init:{method:"GET",headers:j}};if("generations"!==b)throw ab(`OpenRouter does not support video action: ${b}`);if(f?.split(";",1)[0].trim().toLowerCase()!==aa||!e||"object"!=typeof e||Array.isArray(e))throw ab("OpenRouter video generation requires an application/json object body");return j["Content-Type"]=aa,{url:i,init:{method:"POST",headers:j,body:JSON.stringify({...e,model:d})}}},parseResponse:async a=>new Response(await a.arrayBuffer(),{status:a.status,headers:{"Content-Type":a.headers.get("content-type")||aa,"Access-Control-Allow-Origin":"*"}})},vertex:{buildRequest({action:a,requestId:b,model:c,parsedBody:d,credentials:e}){let f={Accept:ac,"Content-Type":ac};if(e?.accessToken&&(f.Authorization=`Bearer ${e.accessToken}`),b){let a=ai(b),c=a&&ah(a);if(!c)throw af("Invalid Vertex operation ID");if(!ad.has(c.model))throw af("Invalid or unsupported Vertex video model");return{url:`${aj(c.location)}/projects/${c.project}/locations/${c.location}/publishers/google/models/${c.model}:fetchPredictOperation`,init:{method:"POST",headers:f,body:JSON.stringify({operationName:a})}}}if("generations"!==a)throw af(`Vertex does not support video action: ${a}`);if(!ag(c)||!ad.has(c))throw af("Invalid or unsupported Vertex video model");if(!d||"object"!=typeof d||Array.isArray(d))throw af("Vertex video generation requires a JSON object body");let{project:g,location:h}=function(a){let b=function(a){let b=a?.apiKey;if(b&&"object"==typeof b)return b;if("string"!=typeof b||!b.trim().startsWith("{"))return null;try{let a=JSON.parse(b);return a&&"object"==typeof a?a:null}catch{return null}}(a),c=a?.projectId||a?.providerSpecificData?.projectId||b?.project_id,d=a?.providerSpecificData?.location||"us-central1";if(!ag(c))throw af("Invalid or missing Vertex project ID");if(!ag(d))throw af("Invalid Vertex location");return{project:c,location:d}}(e),i={prompt:d.prompt};void 0!==d.image&&(i.image=d.image);let j={};for(let[a,b]of Object.entries(ae))void 0!==d[a]&&(j[b]=d[a]);return{url:`${aj(h)}/projects/${g}/locations/${h}/publishers/google/models/${c}:predictLongRunning`,init:{method:"POST",headers:f,body:JSON.stringify({instances:[i],parameters:j})}}},async parseResponse(a,{requestId:b}){let c=await a.json();if(!b){var d;let a=ah(d=c?.name)?Buffer.from(d,"utf8").toString("base64url"):null;if(!a)throw af("Vertex returned an invalid operation name");return ak({request_id:a,status:"pending"})}if(!c?.done){let a=c?.metadata?.progressPercent;return Number.isFinite(a)?ak({status:"processing",progress:a}):ak({status:"pending"})}if(c.error){let a=ai(b),d=String(c.error.message||"");return ak({status:"failed",error:{code:c.error.code,message:a?d.split(a).join("[redacted]"):d}})}let e=c?.response?.videos?.[0];return e?.gcsUri!==void 0?ak({status:"done",video:{url:e.gcsUri}}):e?.bytesBase64Encoded!==void 0?ak({status:"done",video:{b64_json:e.bytesBase64Encoded}}):ak({status:"done"})}}},am=Number(process.env.VIDEO_FETCH_TIMEOUT_MS),an=Number.isFinite(am)?Math.max(5e3,Math.min(am,6e5)):12e4,ao=new Set(["generations","edits","extensions"]);function ap(a){return _[a]?.videoConfig||null}function aq(a,b=null){if(!a)return a;let c=String(a).replace(/Bearer\s+[A-Za-z0-9._~+/=-]{8,}/gi,"Bearer [redacted]");for(let a of["accessToken","refreshToken","apiKey"]){let d=b?.[a];"string"==typeof d&&d.length>=8&&(c=c.split(d).join("[redacted]"))}return c}async function ar({provider:a,action:b=null,requestId:c=null,rawBody:d=null,model:h=null,parsedBody:i=null,contentType:j=null,idempotencyKey:k=null,credentials:l,signal:m,timeoutMs:n=an,log:o,prepareCredentials:p,onCredentialsRefreshed:q}){let r,s,t=ap(a);if(!t)return(0,e.A1)(f.gx.BAD_REQUEST,`Provider '${a}' does not support video generation`);if(!c&&!ao.has(b))return(0,e.A1)(f.gx.BAD_REQUEST,`Unknown video action: ${b}`);let u=al[a]||null,v="vertex"===a||"vertex-partner"===a,w=c?"GET":"POST",x=(s="function"==typeof AbortSignal?.timeout?AbortSignal.timeout(n):null,m&&s&&"function"==typeof AbortSignal.any?AbortSignal.any([m,s]):m||s||void 0),y=()=>v?l?.accessToken:l?.accessToken||l?.apiKey,z=a=>u.buildRequest({config:t,action:b,requestId:c,model:h,parsedBody:i,rawBody:d,contentType:j,token:a,idempotencyKey:k,credentials:l}),A=null;if(u)try{A=z(y())}catch(b){if(b?.status===f.gx.BAD_REQUEST)return(0,e.A1)(f.gx.BAD_REQUEST,b.message);return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video request build failed: ${b.message}`,l))}if(p){let b=await p(l);if(b&&(l=b),u)try{A=z(y())}catch(b){if(b?.status===f.gx.BAD_REQUEST)return(0,e.A1)(f.gx.BAD_REQUEST,b.message);return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video request build failed: ${b.message}`,l))}}let B=(a,e=null)=>{let f;if(u){let b=e||z(a);return fetch(b.url,{...b.init,signal:x})}return fetch((f=t.baseUrl.replace(/\/$/,""),c?`${f}/${encodeURIComponent(c)}`:`${f}/${b}`),{method:w,headers:function({token:a,contentType:b,idempotencyKey:c}){let d={Accept:"application/json"};if(a&&(d.Authorization=`Bearer ${a}`),b&&(d["Content-Type"]=b),c){let a=String(c).replace(/[\r\n\t]/g,"").slice(0,256);a&&(d["Idempotency-Key"]=a)}return d}({token:a,contentType:"POST"===w?j:null,idempotencyKey:"POST"===w?k:null}),body:"POST"===w?d:void 0,signal:x})};if(v&&!l?.accessToken){let b;try{b=await (0,g.$B)(a,l,o)}catch(b){return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video access token mint failed: ${b.message}`,l))}if(!b?.accessToken)return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video access token mint failed`,l));Object.assign(l,b),q&&await q(b),A=z(y())}try{r=await B(y(),A)}catch(b){if(b?.status===f.gx.BAD_REQUEST)return(0,e.A1)(f.gx.BAD_REQUEST,b.message);if(b?.name==="AbortError"||b?.name==="TimeoutError")return(0,e.A1)(f.gx.REQUEST_TIMEOUT,`[${a}] video ${w} aborted: ${b.message}`);return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video upstream fetch failed: ${b.message}`,l))}if((r.status===f.gx.UNAUTHORIZED||r.status===f.gx.FORBIDDEN)&&(l?.refreshToken||v)){let b=null;try{b=await (0,g.$B)(a,l,o)}catch(b){o?.warn?.("TOKEN",`${a} | video refresh error: ${aq(b.message,l)}`)}if(b?.accessToken){o?.info?.("TOKEN",`${a.toUpperCase()} | refreshed for video ${w}`),Object.assign(l,b),q&&await q(b);try{await r.body?.cancel?.()}catch{}try{r=await B(y())}catch(b){return(0,e.A1)(f.gx.BAD_GATEWAY,aq(`[${a}] video retry after refresh failed: ${b.message}`,l))}}else o?.warn?.("TOKEN",`${a.toUpperCase()} | video refresh failed — account needs re-auth`)}if(r.ok&&u)return{success:!0,response:await u.parseResponse(r,{config:t,provider:a,action:b,requestId:c,model:h,parsedBody:i})};let C=await r.text().catch(()=>"");if(!r.ok){let b=aq(C||`HTTP ${r.status}`,l);return(0,e.A1)(r.status,`[${a}] ${b.slice(0,2e3)}`)}return{success:!0,response:new Response(C,{status:r.status,headers:{"Content-Type":r.headers.get("content-type")||"application/json","Access-Control-Allow-Origin":"*"}})}}},96846:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{g:()=>t,s:()=>v});var e=c(80238),f=c(89718),g=c(38775),h=c(56895),i=c(43659),j=c(41004),k=c(58136),l=c(11410),m=c(7803),n=a([l]);function o(a){return a.headers.get("x-zevai-connection-id")||a.headers.get("x-connection-id")||null}l=(n.then?(await n)():n)[0];let w=new Set([j.gx.UNAUTHORIZED,j.gx.FORBIDDEN,j.gx.RATE_LIMITED]);async function p(a){let b=(0,e.Tr)(a);if((await (0,f.mt)()).requireApiKey){if(!b)return(0,i.yj)(j.gx.UNAUTHORIZED,"Missing API key");if(!await (0,e.kI)(b))return(0,i.yj)(j.gx.UNAUTHORIZED,"Invalid API key")}return null}async function q(a){let b,c=a.headers.get("content-type")||"",d=Number.isFinite(b=Number(process.env.MAX_VIDEO_REQUEST_BYTES))?Math.max(1024,Math.min(b,0x4000000)):0x2000000,e=Number(a.headers.get("content-length"));if(Number.isFinite(e)&&e>d)return{error:(0,i.yj)(j.gx.PAYLOAD_TOO_LARGE,"Video request body is too large")};if(c.includes("application/json")){let b,e=await a.text();if(Buffer.byteLength(e)>d)return{error:(0,i.yj)(j.gx.PAYLOAD_TOO_LARGE,"Video request body is too large")};try{b=JSON.parse(e)}catch{return{error:(0,i.yj)(j.gx.BAD_REQUEST,"Invalid JSON body")}}return{raw:e,parsed:b,contentType:c}}let f=Buffer.from(await a.arrayBuffer());return f.byteLength>d?{error:(0,i.yj)(j.gx.PAYLOAD_TOO_LARGE,"Video request body is too large")}:{raw:f,parsed:null,contentType:c}}async function r(a){if(!a?.model)return{provider:"xai",model:null};let b=String(a.model),c=await (0,g.mA)(b);return c.provider?(0,h.WY)(c.provider)?{provider:c.provider,model:c.model}:b.includes("/")?{error:(0,i.yj)(j.gx.BAD_REQUEST,`Provider '${c.provider}' does not support video generation`)}:{provider:"xai",model:b}:{error:(0,i.yj)(j.gx.BAD_REQUEST,"Combos are not supported for video generation")}}function s(a,b){if(!b)return a;let c=new Headers(a.headers);return c.set("x-zevai-connection-id",String(b)),c.set("x-connection-id",String(b)),c.set("Access-Control-Expose-Headers","x-zevai-connection-id, x-connection-id"),new Response(a.body,{status:a.status,headers:c})}async function t(a,b){let c=await p(a);if(c)return c;let d=await q(a);if(d.error)return d.error;let f=await r(d.parsed);if(f.error)return f.error;let{provider:g,model:h}=f,i=await (0,l.M)((0,e.Tr)(a),d.parsed?.model?String(d.parsed.model):null);return i.error?i.error:i.run(()=>u(a,b,d,g,h))}async function u(a,b,c,d,f){let g=c.raw;c.parsed&&f&&c.parsed.model!==f&&(g=JSON.stringify({...c.parsed,model:f}));let l=o(a),n=(0,e.Tr)(a),p=a.headers.get("idempotency-key")||null,q=new Set,r=null,t=null;for(;;){let o=await (0,e.c1)(d,q,f,{preferredConnectionId:l,...n?{apiKey:n}:{}});if(!o||o.allRateLimited){if(o?.allRateLimited){let a=r||o.lastError||"Unavailable",b=t||Number(o.lastErrorCode)||j.gx.SERVICE_UNAVAILABLE;return(0,i.wO)(b,`[${d}/${f||"video"}] ${a}`,o.retryAfter,o.retryAfterHuman)}if(0===q.size)return(0,i.yj)(j.gx.BAD_REQUEST,`No credentials for provider: ${d}`);return(0,i.yj)(t||j.gx.SERVICE_UNAVAILABLE,r||"All accounts unavailable")}let u=await (0,h.F8)({provider:d,action:b,model:f,parsedBody:c.parsed,rawBody:g,contentType:c.contentType||null,idempotencyKey:p,credentials:o,prepareCredentials:async a=>(Object.assign(a,await (0,k.eU)(d,a)),a),signal:a.signal,log:m,onCredentialsRefreshed:async a=>{await (0,k.vN)(o.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})}});if(u.success)return await (0,e.Pt)(o.connectionId,o,f),m.info("VIDEO",`${d.toUpperCase()} | ${b} accepted (connection ${o.connectionId})`),s(u.response,o.connectionId);let{shouldFallback:v}=await (0,e.vk)(o.connectionId,u.status,(0,h.NJ)(u.error,o),d,f);if(v&&w.has(u.status)){q.add(o.connectionId),r=u.error,t=u.status;continue}return u.response}}async function v(a,b){let c=await p(a);if(c)return c;if(!b)return(0,i.yj)(j.gx.BAD_REQUEST,"Missing video request id");if(String(b).length>256)return(0,i.yj)(j.gx.BAD_REQUEST,"Video request id is too long");let d=o(a),g=d?await (0,f.Mc)(d):null,l=g?.provider&&(0,h.WY)(g.provider)?g.provider:null,n=new URL(a.url).searchParams.get("provider");if(!l&&n&&!(0,h.WY)(n))return(0,i.yj)(j.gx.BAD_REQUEST,`Provider '${n}' does not support video generation`);let q=l||n||"xai",r=!!d,t=(0,e.Tr)(a),u=await (0,e.c1)(q,null,null,{preferredConnectionId:d,strictPreferred:r,...t?{apiKey:t}:{}});if(!u||u.allRateLimited)return(0,i.yj)(j.gx.BAD_REQUEST,`No credentials for provider: ${q}`);let v=await (0,h.F8)({provider:q,requestId:b,credentials:u,prepareCredentials:async a=>(Object.assign(a,await (0,k.eU)(q,a)),a),signal:a.signal,log:m,onCredentialsRefreshed:async a=>{await (0,k.vN)(u.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})}});return v.success?(await (0,e.Pt)(u.connectionId,u,null),s(v.response,u.connectionId)):(await (0,e.vk)(u.connectionId,v.status,(0,h.NJ)(v.error,u),q,null),v.response)}d()}catch(a){d(a)}})}};
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
) -Verb RunAs -Wait -PassThru -WindowStyle Hidden;
|
|
6
6
|
if ($proc.ExitCode -ne 0) { throw "Elevated command exited with code $($proc.ExitCode)" }
|
|
7
7
|
`;return new Promise((a,b)=>{d(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${h(c)}`,{windowsHide:!0},(c,d,e)=>{if(c){let a=e||c.message;a.includes("canceled by the user")||a.includes("operation was canceled")?b(Error("User canceled UAC prompt")):b(Error(a))}else a(d)})})},quotePs:h}},66936:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(29021),h=c(33873);c(21820);let{log:i,err:j}=c(87777),{TOOL_HOSTS:k}=c(85341),{runElevatedPowerShell:l,isAdmin:m}=c(64809);function n(a,b,c){let d=`${a}.zevai.new`,e=`${a}.zevai.bak`;try{g.writeFileSync(d,c,"utf8");try{g.unlinkSync(e)}catch{}g.renameSync(a,e);try{g.renameSync(d,a)}catch(c){try{g.renameSync(e,a)}catch{g.writeFileSync(a,b,"utf8")}throw c}try{g.unlinkSync(e)}catch{}}finally{try{g.unlinkSync(d)}catch{}}}let o="win32"===process.platform,p="darwin"===process.platform,q=o?h.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function r(){if(o)return!1;try{return f("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function s(){if(o||!r())return!0;try{return f("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function t(a,b){return new Promise((c,d)=>{let f=r(),g=f?e("sudo",["-S","sh","-c",a],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):e("sh",["-c",a],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),h="",i="";g.stdout.on("data",a=>{h+=a}),g.stderr.on("data",a=>{i+=a}),g.on("close",a=>{0===a?c(h):d(Error(i||`Exit code ${a}`))}),f&&(g.stdin.write(`${b}
|
|
8
|
-
`),g.stdin.end())})}
|
|
8
|
+
`),g.stdin.end())})}let u="# zevairouter";function v(a){let b=a.indexOf("#"),c=(-1===b?a:a.slice(0,b)).trim(),d=-1===b?"":a.slice(b).trim();if(!c)return null;let[e,...f]=c.split(/\s+/);return{ip:e,names:f.map(a=>a.toLowerCase()),comment:d}}function w(a,b){let c=b.toLowerCase();return a.split(/\r?\n/).some(a=>{let b=v(a);return b?.ip==="127.0.0.1"&&b.names.includes(c)})}function x(a,b){let c=v(a);return!!c&&"127.0.0.1"===c.ip&&1===c.names.length&&(!c.comment||c.comment===u)&&b.some(a=>a.toLowerCase()===c.names[0])}function y(a,b,c){return a.split(/\r?\n/).filter(a=>!x(a,b)).join(c).replace(/[\r\n\s]+$/g,"")+c}async function z(a){o||(p?await t("dscacheutil -flushcache && killall -HUP mDNSResponder",a):await t("resolvectl flush-caches 2>/dev/null || true",a))}function A(a=null){try{let b=g.readFileSync(q,"utf8");if(a)return w(b,a);return k.antigravity.every(a=>w(b,a))}catch{return!1}}async function B(a,b){let c=k[a];if(!c)throw Error(`Unknown tool: ${a}`);let d=c.filter(a=>!A(a));if(0===d.length)return void i(`🌐 DNS ${a}: already active`);try{if(o){let a=g.readFileSync(q,"utf8"),b=a.replace(/[\r\n\s]+$/g,""),c=d.map(a=>`127.0.0.1 ${a} ${u}`).join("\r\n"),e=`${b}\r
|
|
9
9
|
${c}\r
|
|
10
|
-
`;n(q,a,e),await l("ipconfig /flushdns | Out-Null")}else{let a=g.readFileSync(q,"utf8").replace(/[\r\n\s]+$/g,""),c=d.map(a=>`127.0.0.1 ${a}`).join("\n"),e=`${a}
|
|
10
|
+
`;n(q,a,e),await l("ipconfig /flushdns | Out-Null")}else{let a=g.readFileSync(q,"utf8").replace(/[\r\n\s]+$/g,""),c=d.map(a=>`127.0.0.1 ${a} ${u}`).join("\n"),e=`${a}
|
|
11
11
|
${c}
|
|
12
|
-
`.replace(/'/g,"'\\''");await t(`printf '%s' '${e}' | tee ${q} > /dev/null`,b),await
|
|
12
|
+
`.replace(/'/g,"'\\''");await t(`printf '%s' '${e}' | tee ${q} > /dev/null`,b),await z(b)}i(`🌐 DNS ${a}: ✅ added ${d.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":`Failed to add DNS entry: ${a.message}`)}}async function C(a,b){let c=k[a];if(!c)throw Error(`Unknown tool: ${a}`);let d=(()=>{try{return g.readFileSync(q,"utf8")}catch{return""}})(),e=c.filter(a=>d.split(/\r?\n/).some(b=>x(b,[a])));if(0===e.length)return void i(`🌐 DNS ${a}: already inactive`);try{if(o){let a=g.readFileSync(q,"utf8"),b=y(a,e,"\r\n");n(q,a,b),await l("ipconfig /flushdns | Out-Null")}else{let a=g.readFileSync(q,"utf8"),c=y(a,e,"\n").replace(/'/g,"'\\''");await t(`printf '%s' '${c}' | tee ${q} > /dev/null`,b),await z(b)}i(`🌐 DNS ${a}: ✅ removed ${e.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":`Failed to remove DNS entry: ${a.message}`)}}async function D(a){for(let b of Object.keys(k))try{await C(b,a)}catch(a){j(`DNS ${b}: failed to remove — ${a.message}`)}}a.exports={TOOL_HOSTS:k,addDNSEntry:B,removeDNSEntry:C,removeAllDNSEntries:D,removeAllDNSEntriesSync:function(){try{if(!g.existsSync(q))return;let a=Object.values(k).flat(),b=g.readFileSync(q,"utf8"),c=y(b,a,o?"\r\n":"\n");if(c===b)return;if(g.writeFileSync(q,c,"utf8"),o)try{f("ipconfig /flushdns",{windowsHide:!0,stdio:"ignore"})}catch{}else if(p)try{f("dscacheutil -flushcache && killall -HUP mDNSResponder",{stdio:"ignore"})}catch{}else try{f("resolvectl flush-caches 2>/dev/null || true",{stdio:"ignore"})}catch{}}catch{}},execWithPassword:t,isSudoAvailable:r,canRunSudoWithoutPassword:s,isSudoPasswordRequired:function(){return!o&&r()&&!s()},checkDNSEntry:A,checkAllDNSStatus:function(){try{let a=g.readFileSync(q,"utf8"),b={};for(let[c,d]of Object.entries(k))b[c]=d.every(b=>w(a,b));return b}catch{return Object.fromEntries(Object.keys(k).map(a=>[a,!1]))}},__test__:{hostsHasRedirect:w,stripRouterEntries:y}}},82193:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),g="zevai";function h(){return"win32"===process.platform?e.join(process.env.APPDATA||e.join(f.homedir(),"AppData","Roaming"),g):e.join(f.homedir(),`.${g}`)}let i=function(){let a=process.env.DATA_DIR;if(!a)return h();try{return d.mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${g}`),h();throw b}}(),j=e.join(i,"mitm");a.exports={DATA_DIR:i,MITM_DIR:j}},85341:a=>{a.exports={TOOL_HOSTS:{antigravity:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"],copilot:["api.individual.githubcopilot.com"],kiro:["q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com"],cursor:["api2.cursor.sh"]}}},87777:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(74075),{DATA_DIR:g}=c(82193),{LOG_BLACKLIST_URL_PARTS:h}=c(17511);function i(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let j=e.join(g,"logs","mitm");d.existsSync(j)||d.mkdirSync(j,{recursive:!0});let k=/^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;function l(a,b=80){return String(a).replace(/[^a-zA-Z0-9]/g,"_").substring(0,b)}function m(a){return!!a&&h.some(b=>a.includes(b))}a.exports={log:a=>console.log(`[${i()}] [MITM] ${a}`),err:a=>console.error(`[${i()}] ❌ [MITM] ${a}`),dumpRequest:function(a,b,c="raw"){if(m(a.url))return null;try{let f=new Date().toISOString().replace(/[:.]/g,"-"),g=l((a.headers.host||"")+a.url),h=e.join(j,`${f}_${c}_${g}.req.json`),i=null;try{i=JSON.parse(b.toString())}catch{}return d.writeFileSync(h,JSON.stringify({method:a.method,url:a.url,host:a.headers.host,headers:a.headers,body:i??b.toString("utf8")},null,2)),h}catch{return null}},createResponseDumper:function(a,b="raw"){if(m(a.url))return null;let c=new Date().toISOString().replace(/[:.]/g,"-"),g=l((a.headers.host||"")+a.url),h=e.join(j,`${c}_${b}_${g}.res.txt`),i=0,n={},o=[];return{writeHeader:(a,b)=>{i=a,n=b||{}},writeChunk:a=>{null!=a&&o.push(Buffer.isBuffer(a)?a:Buffer.from(a))},end:()=>{try{let a=Buffer.concat(o),b=n["content-encoding"]||n["Content-Encoding"],c=(function(a,b){if(!a||0===a.length)return a;try{let c=(b||"").toLowerCase();if(c.includes("gzip"))return f.gunzipSync(a);if(c.includes("br"))return f.brotliDecompressSync(a);if(c.includes("deflate"))return f.inflateSync(a)}catch{}return a})(a,b).toString("utf8");if(k.test(c))return;let e={...n};delete e["content-encoding"],delete e["Content-Encoding"];let g=`STATUS: ${i}
|
|
13
13
|
HEADERS: ${JSON.stringify(e,null,2)}
|
|
14
14
|
---BODY---
|
|
15
15
|
${c}`;d.writeFileSync(h,g)}catch{}},file:h}},clearDumpDir:function(){try{if(!d.existsSync(j))return;for(let a of d.readdirSync(j))try{d.rmSync(e.join(j,a),{recursive:!0,force:!0})}catch{}}catch{}}}}};
|