omniroute 3.4.7 → 3.4.8
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/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +15 -15
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +11 -11
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +5 -5
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +14 -14
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/completions/route.js +14 -14
- package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +10 -10
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +16 -16
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route.js +5 -5
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/moderations/route.js +9 -9
- package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/music/generations/route.js +10 -10
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +16 -16
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +7 -7
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +10 -10
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/rerank/route.js +9 -9
- package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/[...path]/route.js +16 -16
- package/app/.next/server/app/api/v1/responses/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +16 -16
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js +5 -5
- package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/analytics/route.js +7 -7
- package/app/.next/server/app/api/v1/search/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route.js +10 -10
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +14 -14
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0nxyldc._.js → [root-of-the-server]__0-zca2p._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0urvs3.._.js → [root-of-the-server]__01hbf~_._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__01ojood._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__030_-af._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0j~-yu1._.js → [root-of-the-server]__03l6k3k._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__01b8762._.js → [root-of-the-server]__05~jdzu._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__07eee_s._.js → [root-of-the-server]__08~6j3q._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0a8ozdb._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0bd4ccn._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0_a98vk._.js → [root-of-the-server]__0d6bqbw._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0_c_.ye._.js → [root-of-the-server]__0f2rz58._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0jp3yj4._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__06stuoz._.js → [root-of-the-server]__0jvnjwl._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0mj7x5~._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0n-~kvf._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0-y3k-t._.js → [root-of-the-server]__0nzi7ym._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0ofxxzh._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0uu3t5x._.js → [root-of-the-server]__0pd~24c._.js} +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0s1dq3.._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0tsl88m._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0u5-mph._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0vi3.0k._.js → [root-of-the-server]__0uryxsh._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0lwc40h._.js → [root-of-the-server]__0v1kwmx._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__04y3b4q._.js → [root-of-the-server]__0vt49c9._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0pylsu2._.js → [root-of-the-server]__0vy97gy._.js} +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0~s45~f._.js → [root-of-the-server]__0wd~o5b._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0x5yxjy._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0vmajf6._.js → [root-of-the-server]__0x_hqjb._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0~0hd.s._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__10~-ypp._.js → [root-of-the-server]__11ptf~3._.js} +1 -1
- package/app/.next/server/chunks/_00.pgsp._.js +1 -1
- package/app/.next/server/chunks/_013gowh._.js +1 -1
- package/app/.next/server/chunks/{_0ucpa5q._.js → _02._8wx._.js} +1 -1
- package/app/.next/server/chunks/_036lxbr._.js +1 -1
- package/app/.next/server/chunks/_05reh6o._.js +1 -1
- package/app/.next/server/chunks/{_0-~thzo._.js → _083_x9z._.js} +2 -2
- package/app/.next/server/chunks/_083a5zg._.js +1 -1
- package/app/.next/server/chunks/{_004r3br._.js → _08cwbl2._.js} +2 -2
- package/app/.next/server/chunks/_0a3.3sc._.js +1 -1
- package/app/.next/server/chunks/_0c.abwr._.js +1 -1
- package/app/.next/server/chunks/_0dfpto1._.js +1 -1
- package/app/.next/server/chunks/_0due8oe._.js +1 -1
- package/app/.next/server/chunks/_0h-j8c2._.js +1 -1
- package/app/.next/server/chunks/_0vx-r0i._.js +2 -2
- package/app/.next/server/chunks/_0w4f3bm._.js +1 -1
- package/app/.next/server/chunks/_10.rw9f._.js +1 -1
- package/app/.next/server/chunks/open-sse_0dawtxk._.js +2 -2
- package/app/.next/server/chunks/open-sse_0p~.88y._.js +1 -1
- package/app/.next/server/chunks/open-sse_0sthby3._.js +1 -1
- package/app/.next/server/chunks/src_0cbm0~g._.js +1 -1
- package/app/.next/server/chunks/src_shared_utils_apiKey_ts_0gzf59_._.js +1 -1
- package/app/.next/server/chunks/src_shared_utils_apiKey_ts_12~h.oz._.js +1 -1
- package/app/.next/server/chunks/ssr/_008ht2n._.js +1 -1
- package/app/.next/server/chunks/ssr/_0oo1f90._.js +1 -1
- package/app/.next/server/chunks/ssr/src_04s-8a5._.js +1 -1
- package/app/.next/server/chunks/ssr/src_0vjsxxr._.js +1 -1
- package/app/.next/server/chunks/ssr/src_shared_utils_apiKey_ts_0l8g1z8._.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +3 -3
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/0ipwpwjb2g0uv.js +1 -0
- package/app/.next/static/chunks/0~c--kcvaumm~.js +1 -0
- package/app/.next/static/chunks/{02q7h~xz7j6i3.js → 0~v1trn07bitv.js} +1 -1
- package/app/CHANGELOG.md +12 -0
- package/app/bin/reset-password.mjs +3 -1
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/config/registryUtils.ts +1 -0
- package/app/open-sse/config/videoRegistry.ts +1 -3
- package/app/open-sse/executors/antigravity.ts +22 -12
- package/app/open-sse/executors/gemini-cli.ts +3 -1
- package/app/open-sse/executors/qoder.ts +1 -8
- package/app/open-sse/handlers/audioSpeech.ts +1 -0
- package/app/open-sse/handlers/chatCore.ts +2 -1
- package/app/open-sse/handlers/embeddings.ts +1 -0
- package/app/open-sse/handlers/imageGeneration.ts +6 -2
- package/app/open-sse/handlers/musicGeneration.ts +9 -2
- package/app/open-sse/handlers/search.ts +1 -0
- package/app/open-sse/handlers/videoGeneration.ts +11 -3
- package/app/open-sse/mcp-server/index.ts +0 -1
- package/app/open-sse/package.json +1 -1
- package/app/open-sse/services/claudeCodeCompatible.ts +2 -2
- package/app/open-sse/services/modelCapabilities.ts +3 -4
- package/app/open-sse/services/qoderCli.ts +5 -2
- package/app/open-sse/services/tokenRefresh.ts +3 -1
- package/app/open-sse/services/usage.ts +13 -9
- package/app/open-sse/services/workflowFSM.ts +298 -61
- package/app/open-sse/translator/index.ts +5 -1
- package/app/open-sse/translator/response/gemini-to-openai.ts +5 -1
- package/app/open-sse/utils/progressTracker.ts +4 -1
- package/app/open-sse/utils/stream.ts +7 -1
- package/app/open-sse/utils/streamPayloadCollector.ts +5 -1
- package/app/package-lock.json +3 -3
- package/app/package.json +1 -1
- package/app/scripts/check-route-validation.mjs +3 -1
- package/app/scripts/i18n/apply-priority-overrides.mjs +7 -1
- package/app/scripts/prepublish.mjs +2 -2
- package/app/scripts/run-protocol-clients-tests.mjs +7 -1
- package/app/src/app/(dashboard)/dashboard/analytics/components/DiversityScoreCard.tsx +1 -1
- package/app/src/app/(dashboard)/dashboard/auto-combo/page.tsx +0 -1
- package/app/src/app/(dashboard)/dashboard/media/MediaPageClient.tsx +9 -3
- package/app/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +25 -23
- package/app/src/app/(dashboard)/dashboard/search-tools/components/SearchHistory.tsx +3 -1
- package/app/src/app/api/auth/status/route.ts +1 -3
- package/app/src/app/api/mcp/sse/route.ts +2 -2
- package/app/src/app/api/mcp/status/route.ts +1 -2
- package/app/src/app/api/mcp/stream/route.ts +5 -3
- package/app/src/app/api/openapi/spec/route.ts +4 -1
- package/app/src/app/api/openapi/try/route.ts +4 -1
- package/app/src/app/api/providers/[id]/models/route.ts +4 -4
- package/app/src/app/api/providers/[id]/sync-models/route.ts +9 -3
- package/app/src/app/api/settings/auto-disable-accounts/route.ts +6 -1
- package/app/src/app/api/skills/[id]/route.ts +4 -1
- package/app/src/app/api/v1/issues/report/route.ts +9 -1
- package/app/src/app/api/v1beta/models/route.ts +8 -6
- package/app/src/app/api/webhooks/[id]/route.ts +9 -7
- package/app/src/domain/fallbackPolicy.ts +0 -1
- package/app/src/domain/modelAvailability.ts +0 -1
- package/app/src/domain/providerExpiration.ts +2 -6
- package/app/src/lib/db/models.ts +23 -13
- package/app/src/lib/evals/evalRunner.ts +0 -1
- package/app/src/lib/evals/scheduler.ts +2 -6
- package/app/src/lib/oauth/services/antigravity.ts +6 -1
- package/app/src/lib/oauth/services/kiro.ts +12 -2
- package/app/src/lib/oauth/services/oauth.ts +10 -2
- package/app/src/lib/oauth/utils/server.ts +4 -1
- package/app/src/lib/plugins/index.ts +2 -8
- package/app/src/lib/usageAnalytics.ts +5 -1
- package/app/src/mitm/manager.js +1 -1
- package/app/src/mitm/manager.ts +1 -1
- package/app/src/shared/components/Button.tsx +0 -1
- package/app/src/shared/components/Card.tsx +0 -2
- package/app/src/shared/components/FilterBar.tsx +4 -12
- package/app/src/shared/components/Input.tsx +1 -1
- package/app/src/shared/components/Modal.tsx +0 -1
- package/app/src/shared/components/NotificationToast.tsx +1 -3
- package/app/src/shared/components/Select.tsx +1 -1
- package/app/src/shared/components/Sidebar.tsx +3 -3
- package/app/src/shared/components/ThemeToggle.tsx +7 -1
- package/app/src/shared/constants/cliCompatProviders.ts +0 -1
- package/app/src/shared/constants/errorCodes.ts +114 -19
- package/app/src/shared/utils/apiKey.ts +2 -4
- package/app/src/shared/utils/fetchTimeout.ts +0 -1
- package/app/src/shared/utils/inputSanitizer.ts +8 -4
- package/app/src/shared/utils/requestTimeout.ts +5 -1
- package/app/src/sse/handlers/chat.ts +1 -0
- package/app/src/sse/services/auth.ts +8 -3
- package/app/src/sse/services/streamState.ts +5 -1
- package/app/src/store/notificationStore.ts +3 -7
- package/app/tests/unit/t20-t22-provider-headers.test.mjs +3 -1
- package/bin/reset-password.mjs +3 -1
- package/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts +5 -1
- package/open-sse/mcp-server/index.ts +0 -1
- package/package.json +1 -1
- package/app/.next/server/chunks/_0-jnvci._.js +0 -19
- package/app/.next/static/chunks/0l88mho31mflv.js +0 -1
- package/app/.next/static/chunks/0wt-4zl7_gil8.js +0 -1
- /package/app/.next/static/{ri1SkwBU-ygQ2qIDe8jf2 → 1dZBzAZ8QsddVCQRQtqjg}/_buildManifest.js +0 -0
- /package/app/.next/static/{ri1SkwBU-ygQ2qIDe8jf2 → 1dZBzAZ8QsddVCQRQtqjg}/_clientMiddlewareManifest.js +0 -0
- /package/app/.next/static/{ri1SkwBU-ygQ2qIDe8jf2 → 1dZBzAZ8QsddVCQRQtqjg}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[582062,e=>{"use strict";let t={"256x256":"1:1","512x512":"1:1","1024x1024":"1:1","1792x1024":"16:9","1024x1792":"9:16","1536x1024":"3:2","1024x1536":"2:3"},a=/^\d+:\d+$/;e.s(["mapImageSize",0,function(e){return e?a.test(e)?e:t[e]??"1:1":"1:1"}])},671528,e=>e.a(async(t,a)=>{try{var r=e.i(573344),s=e.i(582062),o=e.i(312125),i=e.i(397506),n=e.i(333974),l=t([o,i]);async function m({body:e,credentials:t,log:a,resolvedProvider:s=null}){let o,i;if(s){o=s;let t=e.model||"";i=t.startsWith(o+"/")?t.slice(o.length+1):t}else{let t=(0,r.parseImageModel)(e.model);o=t.provider,i=t.model}if(!o)return{success:!1,status:400,error:`Invalid image model: ${e.model}. Use format: provider/model`};let n=(0,r.getImageProvider)(o);if(!n){if(!s)return{success:!1,status:400,error:`Unknown image provider: ${o}`};a&&a.info("IMAGE",`Custom model ${o}/${i} — using OpenAI-compatible handler`);let r={id:o,baseUrl:t?.baseUrl||"https://generativelanguage.googleapis.com/v1beta/openai/images/generations",authType:"apikey",authHeader:"bearer",format:"openai"};return u({model:i,provider:o,providerConfig:r,body:e,credentials:t,log:a})}return"gemini-image"===n.format?p({model:i,providerConfig:n,body:e,credentials:t,log:a}):"imagen3"===n.format?v({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a}):"hyperbolic"===n.format?g({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a}):"nanobanana"===n.format?d({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a}):"sdwebui"===n.format?y({model:i,provider:o,providerConfig:n,body:e,log:a}):"comfyui"===n.format?$({model:i,provider:o,providerConfig:n,body:e,log:a}):u({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a})}async function p({model:e,providerConfig:t,body:a,credentials:r,log:s}){let o=Date.now(),n=`${t.baseUrl}/${e}:generateContent`,l="antigravity",m={model:a.model,prompt:"string"==typeof a.prompt?a.prompt.slice(0,200):String(a.prompt??"").slice(0,200),size:a.size||"default",n:a.n||1},u={contents:[{parts:[{text:a.prompt}]}],generationConfig:{responseModalities:["TEXT","IMAGE"]}},c=r.accessToken||r.apiKey,g={"Content-Type":"application/json",Authorization:`Bearer ${c}`};if(s){let t="string"==typeof a.prompt?a.prompt.slice(0,60):String(a.prompt??"").slice(0,60);s.info("IMAGE",`antigravity/${e} (gemini) | prompt: "${t}..." | format: gemini-image`)}try{let t=await fetch(n,{method:"POST",headers:g,body:JSON.stringify(u)});if(!t.ok){let a=await t.text();return s&&s.error("IMAGE",`antigravity error ${t.status}: ${a.slice(0,200)}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:t.status,model:`antigravity/${e}`,provider:l,duration:Date.now()-o,error:a.slice(0,500),requestBody:m}).catch(()=>{}),{success:!1,status:t.status,error:a}}let r=await t.json(),p=[];for(let e of r.candidates||[]){let t=e.content?.parts||[];for(let e of t)e.inlineData&&p.push({b64_json:e.inlineData.data,revised_prompt:t.find(e=>e.text)?.text||a.prompt})}return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`antigravity/${e}`,provider:l,duration:Date.now()-o,tokens:{prompt_tokens:0,completion_tokens:0},requestBody:m,responseBody:{images_count:p.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:p}}}catch(t){return s&&s.error("IMAGE",`antigravity fetch error: ${t.message}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`antigravity/${e}`,provider:l,duration:Date.now()-o,error:t.message,requestBody:m}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${t.message}`}}}async function u({model:e,provider:t,providerConfig:a,body:r,credentials:s,log:o}){let n=Date.now(),l={model:r.model,prompt:"string"==typeof r.prompt?r.prompt.slice(0,200):String(r.prompt??"").slice(0,200),size:r.size||"default",n:r.n||1,quality:r.quality||void 0},m={model:e,prompt:r.prompt};void 0!==r.n&&(m.n=r.n),void 0!==r.size&&(m.size=r.size),void 0!==r.quality&&(m.quality=r.quality),void 0!==r.response_format&&(m.response_format=r.response_format),void 0!==r.style&&(m.style=r.style);let p={"Content-Type":"application/json"},g=s.apiKey||s.accessToken;if("bearer"===a.authHeader?p.Authorization=`Bearer ${g}`:"x-api-key"===a.authHeader&&(p["x-api-key"]=g),o){let a="string"==typeof r.prompt?r.prompt.slice(0,60):String(r.prompt??"").slice(0,60);o.info("IMAGE",`${t}/${e} | prompt: "${a}..." | size: ${r.size||"default"}`)}let d=JSON.stringify(m),h=await c(a.baseUrl,p,d,t,o);return!h.success&&a.fallbackUrl&&[404,410,502,503].includes(h.status)&&(o&&o.info("IMAGE",`${t}: primary URL failed (${h.status}), trying fallback...`),h=await c(a.fallbackUrl,p,d,t,o)),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:h.status||(h.success?200:502),model:`${t}/${e}`,provider:t,duration:Date.now()-n,tokens:{prompt_tokens:0,completion_tokens:0},error:h.success?null:"string"==typeof h.error?h.error.slice(0,500):null,requestBody:l,responseBody:h.success?{images_count:h.data?.data?.length||0}:null}).catch(()=>{}),h}async function c(e,t,a,r,s){try{let o=await fetch(e,{method:"POST",headers:t,body:a});if(!o.ok){let e=await o.text();return s&&s.error("IMAGE",`${r} error ${o.status}: ${e.slice(0,200)}`),{success:!1,status:o.status,error:e}}let i=await o.json();return{success:!0,data:{created:i.created||Math.floor(Date.now()/1e3),data:i.data||[]}}}catch(e){return s&&s.error("IMAGE",`${r} fetch error: ${e.message}`),{success:!1,status:502,error:`Image provider error: ${e.message}`}}}async function g({model:e,provider:t,providerConfig:a,body:r,credentials:s,log:o}){let n=Date.now(),l=s.apiKey||s.accessToken,[m,p]=(r.size||"1024x1024").split("x").map(Number),u={model_name:e,prompt:r.prompt,height:p||1024,width:m||1024,backend:"auto"};if(o){let a=String(r.prompt??"").slice(0,60);o.info("IMAGE",`${t}/${e} (hyperbolic) | prompt: "${a}..."`)}try{let s=await fetch(a.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify(u)});if(!s.ok){let a=await s.text();return o&&o.error("IMAGE",`${t} error ${s.status}: ${a.slice(0,200)}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:s.status,model:`${t}/${e}`,provider:t,duration:Date.now()-n,error:a.slice(0,500)}).catch(()=>{}),{success:!1,status:s.status,error:a}}let m=((await s.json()).images||[]).map(e=>({b64_json:e.image,revised_prompt:r.prompt}));return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-n,responseBody:{images_count:m.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:m}}}catch(a){return o&&o.error("IMAGE",`${t} fetch error: ${a.message}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-n,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function d({model:e,provider:t,providerConfig:a,body:r,credentials:o,log:n}){let l=Date.now(),m=o.apiKey||o.accessToken,p="nanobanana-pro"===e,u=p&&a.proUrl?a.proUrl:a.baseUrl,c=a.statusUrl,g="string"==typeof r.aspectRatio?r.aspectRatio:"string"==typeof r.aspect_ratio?r.aspect_ratio:(0,s.mapImageSize)(r.size),y="string"==typeof r.resolution?r.resolution:function(e){if("string"!=typeof e)return null;let[t,a]=e.split("x"),r=Number(t),s=Number(a);if(!Number.isFinite(r)||!Number.isFinite(s)||r<=0||s<=0)return null;let o=Math.max(r,s);return o<=1024?"1K":o<=2048?"2K":"4K"}(r.size)||"1K";"hd"===r.quality&&"1K"===y&&(y="2K");let $=p?{prompt:r.prompt,resolution:y,aspectRatio:g,...Array.isArray(r.imageUrls)?{imageUrls:r.imageUrls}:{}}:{prompt:r.prompt,type:Array.isArray(r.imageUrls)&&r.imageUrls.length>0?"IMAGETOIAMGE":"TEXTTOIAMGE",numImages:Number.isFinite(r.n)?Math.max(1,Number(r.n)):1,image_size:g,...Array.isArray(r.imageUrls)?{imageUrls:r.imageUrls}:{}};if(n){let a=String(r.prompt??"").slice(0,60);n.info("IMAGE",`${t}/${e} (nanobanana ${p?"pro":"flash"}) | prompt: "${a}..."`)}try{let a=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`},body:JSON.stringify($)});if(!a.ok){let r=await a.text();return n&&n.error("IMAGE",`${t} submit error ${a.status}: ${r.slice(0,200)}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:a.status,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:r.slice(0,500)}).catch(()=>{}),{success:!1,status:a.status,error:r}}let s=await a.json();if(s?.image||Array.isArray(s?.images)||Array.isArray(s?.data)||s?.data?.[0]?.url||s?.data?.[0]?.b64_json){let a=function(e,t){let a=[];if(e.image)a.push({b64_json:e.image,revised_prompt:t});else if(Array.isArray(e.images))for(let r of e.images)a.push({b64_json:"string"==typeof r?r:r?.image||r?.data,revised_prompt:t});else if(Array.isArray(e.data))for(let t of e.data)t&&a.push(t);return{data:a.filter(Boolean)}}(s,r.prompt);return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-l,responseBody:{images_count:a.data?.length||0,mode:"sync"}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:a.data}}}let o=s?.data?.taskId||s?.taskId;if(!o){let a=`NanoBanana submit did not return taskId: ${JSON.stringify(s).slice(0,400)}`;return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a}).catch(()=>{}),{success:!1,status:502,error:a}}if(!c){let a="NanoBanana statusUrl is not configured";return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:500,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a}).catch(()=>{}),{success:!1,status:500,error:a}}let p=f(r.timeout_ms,f(process.env.NANOBANANA_POLL_TIMEOUT_MS,12e4)),g=f(r.poll_interval_ms,f(process.env.NANOBANANA_POLL_INTERVAL_MS,2500)),d=null,y=Date.now()+p;for(;Date.now()<y;){let a=await fetch(`${c}?taskId=${encodeURIComponent(o)}`,{method:"GET",headers:{Authorization:`Bearer ${m}`}});if(!a.ok){let e=await a.text();return n&&n.error("IMAGE",`${t} poll error ${a.status}: ${e.slice(0,200)}`),{success:!1,status:a.status,error:e}}let s=await a.json(),p=s?.data||s;d=p;let u=Number(p?.successFlag);if(1===u){let a=await h(p,r,n);return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-l,responseBody:{images_count:a.length,mode:"async",taskId:o}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:a}}}if(2===u||3===u){let a=p?.errorMessage||`NanoBanana task failed (successFlag=${String(u)})`;return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a.slice(0,500),responseBody:{taskId:o,successFlag:u,errorCode:p?.errorCode??null}}).catch(()=>{}),{success:!1,status:502,error:a}}await function(e){return new Promise(t=>setTimeout(t,e))}(g)}let v=`NanoBanana task timeout after ${p}ms (taskId=${o}, successFlag=${String(d?.successFlag??"unknown")})`;return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:504,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:v,responseBody:{taskId:o,lastSuccessFlag:d?.successFlag??null}}).catch(()=>{}),{success:!1,status:504,error:v}}catch(a){return n&&n.error("IMAGE",`${t} fetch error: ${a.message}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function h(e,t,a){let r=e?.response||{},s=[r?.resultImageUrl,r?.originImageUrl,e?.resultImageUrl,e?.originImageUrl].filter(e=>"string"==typeof e&&e.length>0);if(Array.isArray(r?.resultImageUrls))for(let e of r.resultImageUrls)"string"==typeof e&&e.length>0&&s.push(e);let o=[r?.resultImageBase64,r?.resultImage,e?.resultImageBase64,e?.resultImage].filter(e=>"string"==typeof e&&e.length>0);if(Array.isArray(r?.resultImageBase64List))for(let e of r.resultImageBase64List)"string"==typeof e&&e.length>0&&o.push(e);if("b64_json"===t.response_format){if(o.length>0)return o.map(e=>({b64_json:e,revised_prompt:t.prompt}));if(s.length>0){let e=s[0],a=await fetch(e);if(!a.ok)throw Error(`Failed to fetch NanoBanana result image URL (${a.status})`);let r=await a.arrayBuffer();return[{b64_json:Buffer.from(r).toString("base64"),revised_prompt:t.prompt}]}}return s.length>0?s.map(e=>({url:e,revised_prompt:t.prompt})):o.length>0?o.map(e=>({b64_json:e,revised_prompt:t.prompt})):(a&&a.warn("IMAGE",`NanoBanana task completed without image payload: ${JSON.stringify(e).slice(0,240)}`),[])}function f(e,t){let a=Number(e);return!Number.isFinite(a)||a<=0?t:Math.floor(a)}async function y({model:e,provider:t,providerConfig:a,body:r,log:s}){let o=Date.now(),[n,l]=(r.size||"512x512").split("x").map(Number),m={prompt:r.prompt,negative_prompt:r.negative_prompt||"",width:n||512,height:l||512,steps:r.steps||20,cfg_scale:r.cfg_scale||7,sampler_name:r.sampler||"Euler a",batch_size:r.n||1,override_settings:{sd_model_checkpoint:e}};if(s){let a=String(r.prompt??"").slice(0,60);s.info("IMAGE",`${t}/${e} (sdwebui) | prompt: "${a}..."`)}try{let n=await fetch(a.baseUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)});if(!n.ok){let a=await n.text();return s&&s.error("IMAGE",`${t} error ${n.status}: ${a.slice(0,200)}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:n.status,model:`${t}/${e}`,provider:t,duration:Date.now()-o,error:a.slice(0,500)}).catch(()=>{}),{success:!1,status:n.status,error:a}}let l=((await n.json()).images||[]).map(e=>({b64_json:e,revised_prompt:r.prompt}));return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-o,responseBody:{images_count:l.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:l}}}catch(a){return s&&s.error("IMAGE",`${t} sdwebui error: ${a.message}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-o,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function $({model:e,provider:t,providerConfig:a,body:r,log:s}){let o=Date.now(),[l,m]=(r.size||"1024x1024").split("x").map(Number),p={3:{class_type:"KSampler",inputs:{seed:Math.floor(0x100000000*Math.random()),steps:r.steps||20,cfg:r.cfg_scale||7,sampler_name:"euler",scheduler:"normal",denoise:1,model:["4",0],positive:["6",0],negative:["7",0],latent_image:["5",0]}},4:{class_type:"CheckpointLoaderSimple",inputs:{ckpt_name:e}},5:{class_type:"EmptyLatentImage",inputs:{width:l||1024,height:m||1024,batch_size:r.n||1}},6:{class_type:"CLIPTextEncode",inputs:{text:r.prompt,clip:["4",1]}},7:{class_type:"CLIPTextEncode",inputs:{text:r.negative_prompt||"",clip:["4",1]}},8:{class_type:"VAEDecode",inputs:{samples:["3",0],vae:["4",2]}},9:{class_type:"SaveImage",inputs:{filename_prefix:"omniroute",images:["8",0]}}};if(s){let a=String(r.prompt??"").slice(0,60);s.info("IMAGE",`${t}/${e} (comfyui) | prompt: "${a}..."`)}try{let s=await (0,n.submitComfyWorkflow)(a.baseUrl,p),l=await (0,n.pollComfyResult)(a.baseUrl,s),m=(0,n.extractComfyOutputFiles)(l),u=[];for(let e of m){let t=await (0,n.fetchComfyOutput)(a.baseUrl,e.filename,e.subfolder,e.type),s=Buffer.from(t).toString("base64");u.push({b64_json:s,revised_prompt:r.prompt})}return(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-o,responseBody:{images_count:u.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:u}}}catch(a){return s&&s.error("IMAGE",`${t} comfyui error: ${a.message}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-o,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function v({model:e,provider:t,providerConfig:a,body:r,credentials:o,log:n}){let l=Date.now(),m=o.apiKey||o.accessToken,p=(0,s.mapImageSize)(r.size),u={prompt:r.prompt,aspect_ratio:p,number_of_images:r.n??1};if(n){let a=String(r.prompt??"").slice(0,60);n.info("IMAGE",`${t}/${e} (imagen3) | prompt: "${a}..." | aspect_ratio: ${p}`)}try{let s=await fetch(a.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`},body:JSON.stringify(u)});if(!s.ok){let a=await s.text();return n&&n.error("IMAGE",`${t} error ${s.status}: ${a.slice(0,200)}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:s.status,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a.slice(0,500),requestBody:u}).catch(()=>{}),{success:!1,status:s.status,error:a}}let o=await s.json(),p=[];return Array.isArray(o.images)?p.push(...o.images.map(e=>({b64_json:e.image??e.b64_json??e.url??e,revised_prompt:r.prompt}))):Array.isArray(o.data)?p.push(...o.data):(o.url||o.b64_json||o.image)&&p.push({b64_json:o.image||o.b64_json||o.url,url:o.url,revised_prompt:r.prompt}),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-l,responseBody:{images_count:p.length}}).catch(()=>{}),{success:!0,data:{created:o.created||Math.floor(Date.now()/1e3),data:p}}}catch(r){let a=r instanceof Error?r.message:String(r);return n&&n.error("IMAGE",`${t} fetch error: ${a}`),(0,i.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a}`}}}[o,i]=l.then?(await l)():l,e.s(["handleImageGeneration",0,m]),a()}catch(e){a(e)}},!1)];
|
|
1
|
+
module.exports=[582062,e=>{"use strict";let t={"256x256":"1:1","512x512":"1:1","1024x1024":"1:1","1792x1024":"16:9","1024x1792":"9:16","1536x1024":"3:2","1024x1536":"2:3"},a=/^\d+:\d+$/;e.s(["mapImageSize",0,function(e){return e?a.test(e)?e:t[e]??"1:1":"1:1"}])},671528,e=>e.a(async(t,a)=>{try{var r=e.i(254799),s=e.i(573344),o=e.i(582062),i=e.i(312125),n=e.i(397506),l=e.i(333974),m=t([i,n]);async function p({body:e,credentials:t,log:a,resolvedProvider:r=null}){let o,i;if(r){o=r;let t=e.model||"";i=t.startsWith(o+"/")?t.slice(o.length+1):t}else{let t=(0,s.parseImageModel)(e.model);o=t.provider,i=t.model}if(!o)return{success:!1,status:400,error:`Invalid image model: ${e.model}. Use format: provider/model`};let n=(0,s.getImageProvider)(o);if(!n){if(!r)return{success:!1,status:400,error:`Unknown image provider: ${o}`};a&&a.info("IMAGE",`Custom model ${o}/${i} — using OpenAI-compatible handler`);let s={id:o,baseUrl:t?.baseUrl||"https://generativelanguage.googleapis.com/v1beta/openai/images/generations",authType:"apikey",authHeader:"bearer",format:"openai"};return c({model:i,provider:o,providerConfig:s,body:e,credentials:t,log:a})}return"gemini-image"===n.format?u({model:i,providerConfig:n,body:e,credentials:t,log:a}):"imagen3"===n.format?w({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a}):"hyperbolic"===n.format?d({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a}):"nanobanana"===n.format?h({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a}):"sdwebui"===n.format?$({model:i,provider:o,providerConfig:n,body:e,log:a}):"comfyui"===n.format?v({model:i,provider:o,providerConfig:n,body:e,log:a}):c({model:i,provider:o,providerConfig:n,body:e,credentials:t,log:a})}async function u({model:e,providerConfig:t,body:a,credentials:r,log:s}){let o=Date.now(),i=`${t.baseUrl}/${e}:generateContent`,l="antigravity",m={model:a.model,prompt:"string"==typeof a.prompt?a.prompt.slice(0,200):String(a.prompt??"").slice(0,200),size:a.size||"default",n:a.n||1},p={contents:[{parts:[{text:a.prompt}]}],generationConfig:{responseModalities:["TEXT","IMAGE"]}},c=r.accessToken||r.apiKey,g={"Content-Type":"application/json",Authorization:`Bearer ${c}`};if(s){let t="string"==typeof a.prompt?a.prompt.slice(0,60):String(a.prompt??"").slice(0,60);s.info("IMAGE",`antigravity/${e} (gemini) | prompt: "${t}..." | format: gemini-image`)}try{let t=await fetch(i,{method:"POST",headers:g,body:JSON.stringify(p)});if(!t.ok){let a=await t.text();return s&&s.error("IMAGE",`antigravity error ${t.status}: ${a.slice(0,200)}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:t.status,model:`antigravity/${e}`,provider:l,duration:Date.now()-o,error:a.slice(0,500),requestBody:m}).catch(()=>{}),{success:!1,status:t.status,error:a}}let r=await t.json(),u=[];for(let e of r.candidates||[]){let t=e.content?.parts||[];for(let e of t)e.inlineData&&u.push({b64_json:e.inlineData.data,revised_prompt:t.find(e=>e.text)?.text||a.prompt})}return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`antigravity/${e}`,provider:l,duration:Date.now()-o,tokens:{prompt_tokens:0,completion_tokens:0},requestBody:m,responseBody:{images_count:u.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:u}}}catch(t){return s&&s.error("IMAGE",`antigravity fetch error: ${t.message}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`antigravity/${e}`,provider:l,duration:Date.now()-o,error:t.message,requestBody:m}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${t.message}`}}}async function c({model:e,provider:t,providerConfig:a,body:r,credentials:s,log:o}){let i=Date.now(),l={model:r.model,prompt:"string"==typeof r.prompt?r.prompt.slice(0,200):String(r.prompt??"").slice(0,200),size:r.size||"default",n:r.n||1,quality:r.quality||void 0},m={model:e,prompt:r.prompt};void 0!==r.n&&(m.n=r.n),void 0!==r.size&&(m.size=r.size),void 0!==r.quality&&(m.quality=r.quality),void 0!==r.response_format&&(m.response_format=r.response_format),void 0!==r.style&&(m.style=r.style);let p={"Content-Type":"application/json"},u=s.apiKey||s.accessToken;if("bearer"===a.authHeader?p.Authorization=`Bearer ${u}`:"x-api-key"===a.authHeader&&(p["x-api-key"]=u),o){let a="string"==typeof r.prompt?r.prompt.slice(0,60):String(r.prompt??"").slice(0,60);o.info("IMAGE",`${t}/${e} | prompt: "${a}..." | size: ${r.size||"default"}`)}let d=JSON.stringify(m),h=await g(a.baseUrl,p,d,t,o);return!h.success&&a.fallbackUrl&&[404,410,502,503].includes(h.status)&&(o&&o.info("IMAGE",`${t}: primary URL failed (${h.status}), trying fallback...`),h=await g(a.fallbackUrl,p,d,t,o)),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:h.status||(h.success?200:502),model:`${t}/${e}`,provider:t,duration:Date.now()-i,tokens:{prompt_tokens:0,completion_tokens:0},error:h.success?null:"string"==typeof h.error?h.error.slice(0,500):null,requestBody:l,responseBody:h.success?{images_count:h.data?.data?.length||0}:null}).catch(()=>{}),h}async function g(e,t,a,r,s){try{let o=await fetch(e,{method:"POST",headers:t,body:a});if(!o.ok){let e=await o.text();return s&&s.error("IMAGE",`${r} error ${o.status}: ${e.slice(0,200)}`),{success:!1,status:o.status,error:e}}let i=await o.json();return{success:!0,data:{created:i.created||Math.floor(Date.now()/1e3),data:i.data||[]}}}catch(e){return s&&s.error("IMAGE",`${r} fetch error: ${e.message}`),{success:!1,status:502,error:`Image provider error: ${e.message}`}}}async function d({model:e,provider:t,providerConfig:a,body:r,credentials:s,log:o}){let i=Date.now(),l=s.apiKey||s.accessToken,[m,p]=(r.size||"1024x1024").split("x").map(Number),u={model_name:e,prompt:r.prompt,height:p||1024,width:m||1024,backend:"auto"};if(o){let a=String(r.prompt??"").slice(0,60);o.info("IMAGE",`${t}/${e} (hyperbolic) | prompt: "${a}..."`)}try{let s=await fetch(a.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify(u)});if(!s.ok){let a=await s.text();return o&&o.error("IMAGE",`${t} error ${s.status}: ${a.slice(0,200)}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:s.status,model:`${t}/${e}`,provider:t,duration:Date.now()-i,error:a.slice(0,500)}).catch(()=>{}),{success:!1,status:s.status,error:a}}let m=((await s.json()).images||[]).map(e=>({b64_json:e.image,revised_prompt:r.prompt}));return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-i,responseBody:{images_count:m.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:m}}}catch(a){return o&&o.error("IMAGE",`${t} fetch error: ${a.message}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-i,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function h({model:e,provider:t,providerConfig:a,body:r,credentials:s,log:i}){let l=Date.now(),m=s.apiKey||s.accessToken,p="nanobanana-pro"===e,u=p&&a.proUrl?a.proUrl:a.baseUrl,c=a.statusUrl,g="string"==typeof r.aspectRatio?r.aspectRatio:"string"==typeof r.aspect_ratio?r.aspect_ratio:(0,o.mapImageSize)(r.size),d="string"==typeof r.resolution?r.resolution:function(e){if("string"!=typeof e)return null;let[t,a]=e.split("x"),r=Number(t),s=Number(a);if(!Number.isFinite(r)||!Number.isFinite(s)||r<=0||s<=0)return null;let o=Math.max(r,s);return o<=1024?"1K":o<=2048?"2K":"4K"}(r.size)||"1K";"hd"===r.quality&&"1K"===d&&(d="2K");let $=p?{prompt:r.prompt,resolution:d,aspectRatio:g,...Array.isArray(r.imageUrls)?{imageUrls:r.imageUrls}:{}}:{prompt:r.prompt,type:Array.isArray(r.imageUrls)&&r.imageUrls.length>0?"IMAGETOIAMGE":"TEXTTOIAMGE",numImages:Number.isFinite(r.n)?Math.max(1,Number(r.n)):1,image_size:g,...Array.isArray(r.imageUrls)?{imageUrls:r.imageUrls}:{}};if(i){let a=String(r.prompt??"").slice(0,60);i.info("IMAGE",`${t}/${e} (nanobanana ${p?"pro":"flash"}) | prompt: "${a}..."`)}try{let a=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`},body:JSON.stringify($)});if(!a.ok){let r=await a.text();return i&&i.error("IMAGE",`${t} submit error ${a.status}: ${r.slice(0,200)}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:a.status,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:r.slice(0,500)}).catch(()=>{}),{success:!1,status:a.status,error:r}}let s=await a.json();if(s?.image||Array.isArray(s?.images)||Array.isArray(s?.data)||s?.data?.[0]?.url||s?.data?.[0]?.b64_json){let a=function(e,t){let a=[];if(e.image)a.push({b64_json:e.image,revised_prompt:t});else if(Array.isArray(e.images))for(let r of e.images)a.push({b64_json:"string"==typeof r?r:r?.image||r?.data,revised_prompt:t});else if(Array.isArray(e.data))for(let t of e.data)t&&a.push(t);return{data:a.filter(Boolean)}}(s,r.prompt);return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-l,responseBody:{images_count:a.data?.length||0,mode:"sync"}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:a.data}}}let o=s?.data?.taskId||s?.taskId;if(!o){let a=`NanoBanana submit did not return taskId: ${JSON.stringify(s).slice(0,400)}`;return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a}).catch(()=>{}),{success:!1,status:502,error:a}}if(!c){let a="NanoBanana statusUrl is not configured";return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:500,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a}).catch(()=>{}),{success:!1,status:500,error:a}}let p=y(r.timeout_ms,y(process.env.NANOBANANA_POLL_TIMEOUT_MS,12e4)),g=y(r.poll_interval_ms,y(process.env.NANOBANANA_POLL_INTERVAL_MS,2500)),d=null,h=Date.now()+p;for(;Date.now()<h;){let a=await fetch(`${c}?taskId=${encodeURIComponent(o)}`,{method:"GET",headers:{Authorization:`Bearer ${m}`}});if(!a.ok){let e=await a.text();return i&&i.error("IMAGE",`${t} poll error ${a.status}: ${e.slice(0,200)}`),{success:!1,status:a.status,error:e}}let s=await a.json(),p=s?.data||s;d=p;let u=Number(p?.successFlag);if(1===u){let a=await f(p,r,i);return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-l,responseBody:{images_count:a.length,mode:"async",taskId:o}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:a}}}if(2===u||3===u){let a=p?.errorMessage||`NanoBanana task failed (successFlag=${String(u)})`;return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a.slice(0,500),responseBody:{taskId:o,successFlag:u,errorCode:p?.errorCode??null}}).catch(()=>{}),{success:!1,status:502,error:a}}await function(e){return new Promise(t=>setTimeout(t,e))}(g)}let v=`NanoBanana task timeout after ${p}ms (taskId=${o}, successFlag=${String(d?.successFlag??"unknown")})`;return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:504,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:v,responseBody:{taskId:o,lastSuccessFlag:d?.successFlag??null}}).catch(()=>{}),{success:!1,status:504,error:v}}catch(a){return i&&i.error("IMAGE",`${t} fetch error: ${a.message}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function f(e,t,a){let r=e?.response||{},s=[r?.resultImageUrl,r?.originImageUrl,e?.resultImageUrl,e?.originImageUrl].filter(e=>"string"==typeof e&&e.length>0);if(Array.isArray(r?.resultImageUrls))for(let e of r.resultImageUrls)"string"==typeof e&&e.length>0&&s.push(e);let o=[r?.resultImageBase64,r?.resultImage,e?.resultImageBase64,e?.resultImage].filter(e=>"string"==typeof e&&e.length>0);if(Array.isArray(r?.resultImageBase64List))for(let e of r.resultImageBase64List)"string"==typeof e&&e.length>0&&o.push(e);if("b64_json"===t.response_format){if(o.length>0)return o.map(e=>({b64_json:e,revised_prompt:t.prompt}));if(s.length>0){let e=s[0],a=await fetch(e);if(!a.ok)throw Error(`Failed to fetch NanoBanana result image URL (${a.status})`);let r=await a.arrayBuffer();return[{b64_json:Buffer.from(r).toString("base64"),revised_prompt:t.prompt}]}}return s.length>0?s.map(e=>({url:e,revised_prompt:t.prompt})):o.length>0?o.map(e=>({b64_json:e,revised_prompt:t.prompt})):(a&&a.warn("IMAGE",`NanoBanana task completed without image payload: ${JSON.stringify(e).slice(0,240)}`),[])}function y(e,t){let a=Number(e);return!Number.isFinite(a)||a<=0?t:Math.floor(a)}async function $({model:e,provider:t,providerConfig:a,body:r,log:s}){let o=Date.now(),[i,l]=(r.size||"512x512").split("x").map(Number),m={prompt:r.prompt,negative_prompt:r.negative_prompt||"",width:i||512,height:l||512,steps:r.steps||20,cfg_scale:r.cfg_scale||7,sampler_name:r.sampler||"Euler a",batch_size:r.n||1,override_settings:{sd_model_checkpoint:e}};if(s){let a=String(r.prompt??"").slice(0,60);s.info("IMAGE",`${t}/${e} (sdwebui) | prompt: "${a}..."`)}try{let i=await fetch(a.baseUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)});if(!i.ok){let a=await i.text();return s&&s.error("IMAGE",`${t} error ${i.status}: ${a.slice(0,200)}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:i.status,model:`${t}/${e}`,provider:t,duration:Date.now()-o,error:a.slice(0,500)}).catch(()=>{}),{success:!1,status:i.status,error:a}}let l=((await i.json()).images||[]).map(e=>({b64_json:e,revised_prompt:r.prompt}));return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-o,responseBody:{images_count:l.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:l}}}catch(a){return s&&s.error("IMAGE",`${t} sdwebui error: ${a.message}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-o,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function v({model:e,provider:t,providerConfig:a,body:s,log:o}){let i=Date.now(),[m,p]=(s.size||"1024x1024").split("x").map(Number),u={3:{class_type:"KSampler",inputs:{seed:parseInt((0,r.randomUUID)().replace(/-/g,"").substring(0,8),16)%0x100000000,steps:s.steps||20,cfg:s.cfg_scale||7,sampler_name:"euler",scheduler:"normal",denoise:1,model:["4",0],positive:["6",0],negative:["7",0],latent_image:["5",0]}},4:{class_type:"CheckpointLoaderSimple",inputs:{ckpt_name:e}},5:{class_type:"EmptyLatentImage",inputs:{width:m||1024,height:p||1024,batch_size:s.n||1}},6:{class_type:"CLIPTextEncode",inputs:{text:s.prompt,clip:["4",1]}},7:{class_type:"CLIPTextEncode",inputs:{text:s.negative_prompt||"",clip:["4",1]}},8:{class_type:"VAEDecode",inputs:{samples:["3",0],vae:["4",2]}},9:{class_type:"SaveImage",inputs:{filename_prefix:"omniroute",images:["8",0]}}};if(o){let a=String(s.prompt??"").slice(0,60);o.info("IMAGE",`${t}/${e} (comfyui) | prompt: "${a}..."`)}try{let r=await (0,l.submitComfyWorkflow)(a.baseUrl,u),o=await (0,l.pollComfyResult)(a.baseUrl,r),m=(0,l.extractComfyOutputFiles)(o),p=[];for(let e of m){let t=await (0,l.fetchComfyOutput)(a.baseUrl,e.filename,e.subfolder,e.type),r=Buffer.from(t).toString("base64");p.push({b64_json:r,revised_prompt:s.prompt})}return(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-i,responseBody:{images_count:p.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:p}}}catch(a){return o&&o.error("IMAGE",`${t} comfyui error: ${a.message}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-i,error:a.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function w({model:e,provider:t,providerConfig:a,body:r,credentials:s,log:i}){let l=Date.now(),m=s.apiKey||s.accessToken,p=(0,o.mapImageSize)(r.size),u={prompt:r.prompt,aspect_ratio:p,number_of_images:r.n??1};if(i){let a=String(r.prompt??"").slice(0,60);i.info("IMAGE",`${t}/${e} (imagen3) | prompt: "${a}..." | aspect_ratio: ${p}`)}try{let s=await fetch(a.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`},body:JSON.stringify(u)});if(!s.ok){let a=await s.text();return i&&i.error("IMAGE",`${t} error ${s.status}: ${a.slice(0,200)}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:s.status,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a.slice(0,500),requestBody:u}).catch(()=>{}),{success:!1,status:s.status,error:a}}let o=await s.json(),p=[];return Array.isArray(o.images)?p.push(...o.images.map(e=>({b64_json:e.image??e.b64_json??e.url??e,revised_prompt:r.prompt}))):Array.isArray(o.data)?p.push(...o.data):(o.url||o.b64_json||o.image)&&p.push({b64_json:o.image||o.b64_json||o.url,url:o.url,revised_prompt:r.prompt}),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:200,model:`${t}/${e}`,provider:t,duration:Date.now()-l,responseBody:{images_count:p.length}}).catch(()=>{}),{success:!0,data:{created:o.created||Math.floor(Date.now()/1e3),data:p}}}catch(r){let a=r instanceof Error?r.message:String(r);return i&&i.error("IMAGE",`${t} fetch error: ${a}`),(0,n.saveCallLog)({method:"POST",path:"/v1/images/generations",status:502,model:`${t}/${e}`,provider:t,duration:Date.now()-l,error:a}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${a}`}}}[i,n]=m.then?(await m)():m,e.s(["handleImageGeneration",0,p]),a()}catch(e){a(e)}},!1)];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=open-sse_0p~.88y._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[503536,610766,457858,900930,e=>{"use strict";var t=e.i(359281);function r(e){return"string"==typeof e&&e.startsWith("anthropic-compatible-cc-")}e.i(142225),e.i(666680),e.s(["CLAUDE_CODE_COMPATIBLE_DEFAULT_CHAT_PATH",0,"/v1/messages?beta=true","buildClaudeCodeCompatibleHeaders",0,function(e,t=!1,r){return{"Content-Type":"application/json",Accept:t?"text/event-stream":"application/json","x-api-key":e,"anthropic-version":"2023-06-01","anthropic-beta":"claude-code-20250219,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,effort-2025-11-24","anthropic-dangerous-direct-browser-access":"true","x-app":"cli","User-Agent":"claude-cli/2.1.89 (external, sdk-cli)","X-Stainless-Retry-Count":"0","X-Stainless-Timeout":"300","X-Stainless-Lang":"js","X-Stainless-Package-Version":"0.74.0","X-Stainless-OS":"MacOS","X-Stainless-Arch":"arm64","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v25.8.1","accept-language":"*","sec-fetch-mode":"cors","accept-encoding":"identity",...r?{"X-Claude-Code-Session-Id":r}:{}}},"joinClaudeCodeCompatibleUrl",0,function(e,t){var r;let n,s,o,a;return r=(n=String(e||"").trim().replace(/\/$/,""))?n.replace(/\/(?:v\d+\/)?messages(?:\?[^#]*)?$/i,""):"",s=String(r||"").replace(/\/$/,""),o=String(t||"").startsWith("/")?String(t):`/${String(t||"")}`,(a=s.match(/(\/v\d+)$/i))&&o.toLowerCase().startsWith(`${a[1].toLowerCase()}/`)?`${s}${o.slice(a[1].length)}`:`${s}${o}`}],610766),e.s(["isClaudeCodeCompatible",0,r],457858);let n={codex:{headerOrder:["Host","Content-Type","Authorization","Accept","User-Agent","Accept-Encoding"],bodyFieldOrder:["model","messages","temperature","top_p","max_tokens","stream","tools","tool_choice","response_format","n","stop"],userAgent:"codex-cli"},claude:{headerOrder:["Host","Content-Type","x-api-key","anthropic-version","Accept","User-Agent","Accept-Encoding"],bodyFieldOrder:["model","max_tokens","messages","system","temperature","top_p","top_k","stream","tools","tool_choice","metadata"],userAgent:"claude-code"},"claude-code-compatible":{headerOrder:["Host","Content-Type","x-api-key","anthropic-version","anthropic-beta","anthropic-dangerous-direct-browser-access","x-app","User-Agent","X-Claude-Code-Session-Id","X-Stainless-Retry-Count","X-Stainless-Timeout","X-Stainless-Lang","X-Stainless-Package-Version","X-Stainless-OS","X-Stainless-Arch","X-Stainless-Runtime","X-Stainless-Runtime-Version","Accept","accept-language","sec-fetch-mode","accept-encoding"],bodyFieldOrder:["model","messages","system","tools","metadata","max_tokens","thinking","context_management","output_config","stream"]},github:{headerOrder:["Host","Authorization","X-Request-Id","Vscode-Sessionid","Vscode-Machineid","Editor-Version","Editor-Plugin-Version","Copilot-Integration-Id","Openai-Organization","Openai-Intent","Content-Type","User-Agent","Accept","Accept-Encoding"],bodyFieldOrder:["messages","model","temperature","top_p","max_tokens","n","stream","intent","intent_threshold","intent_content"],userAgent:"GitHubCopilotChat"},antigravity:{headerOrder:["Host","Content-Type","Authorization","User-Agent","Accept","Accept-Encoding"],bodyFieldOrder:["project","model","userAgent","requestType","requestId","request"],userAgent:"antigravity"},qwen:{headerOrder:["Host","Content-Type","Authorization","User-Agent","X-Dashscope-AuthType","X-Dashscope-CacheControl","X-Dashscope-UserAgent","X-Stainless-Arch","X-Stainless-Lang","X-Stainless-Os","X-Stainless-Package-Version","X-Stainless-Retry-Count","X-Stainless-Runtime","X-Stainless-Runtime-Version","Connection","Accept","Accept-Language","Sec-Fetch-Mode","Accept-Encoding"],bodyFieldOrder:["model","messages","temperature","top_p","max_tokens","stream","tools","tool_choice","response_format","n","stop"],userAgent:"QwenCode/0.12.3 (linux; x64)",extraHeaders:{"X-Dashscope-AuthType":"qwen-oauth","X-Dashscope-CacheControl":"enable","X-Dashscope-UserAgent":"QwenCode/0.12.3 (linux; x64)","X-Stainless-Arch":"x64","X-Stainless-Lang":"js","X-Stainless-Os":"Linux","X-Stainless-Package-Version":"5.11.0","X-Stainless-Retry-Count":"1","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v18.19.1",Connection:"keep-alive","Accept-Language":"*","Sec-Fetch-Mode":"cors"}}},s=new Set,o=new Map;function a(e,t,r=[]){let n=r.filter(e=>"string"==typeof e&&e.trim().length>0);if(0===n.length)return t;let s=[t,...n].filter(Boolean);if(s.length<=1)return t;let i=o.get(e)??0,l=i%s.length;return o.set(e,i+1),s[l]}function i(e,t){if(t)for(let[r,n]of Object.entries(t))"string"==typeof r&&r.length>0&&"string"==typeof n&&(e[r]=n)}function l(e,t){let r=new AbortController,n=()=>{r.signal.aborted||r.abort()};return e.aborted||t.aborted?n():(e.addEventListener("abort",n,{once:!0}),t.addEventListener("abort",n,{once:!0})),r.signal}e.s(["getRotatingApiKey",0,a],900930);class c{provider;config;constructor(e,t){this.provider=e,this.config=t}getProvider(){return this.provider}getBaseUrls(){return this.config.baseUrls||(this.config.baseUrl?[this.config.baseUrl]:[])}getFallbackCount(){return this.getBaseUrls().length||1}buildUrl(e,t,r=0,n=null){if(this.provider?.startsWith?.("openai-compatible-")){let e=n?.providerSpecificData,t=("string"==typeof e?.baseUrl?e.baseUrl:"https://api.openai.com/v1").replace(/\/$/,""),r="string"==typeof e?.chatPath&&e.chatPath?e.chatPath:null,s=r&&!("string"!=typeof r||!r.startsWith("/")||r.includes("\0")||r.includes(".."))&&!(r.length>512)&&1?r:null;if(s)return`${t}${s}`;let o=this.provider.includes("responses")?"/responses":"/chat/completions";return`${t}${o}`}let s=this.getBaseUrls();return s[r]||s[0]||this.config.baseUrl}buildHeaders(e,t=!0){let r={"Content-Type":"application/json",...this.config.headers},n=this.config?.id||this.provider;if(n){let e=`${n.toUpperCase().replace(/[^A-Z0-9]/g,"_")}_USER_AGENT`,t=process.env[e]?.trim();t&&(r["User-Agent"]=t,r["user-agent"]&&(r["user-agent"]=t))}if(e.accessToken)r.Authorization=`Bearer ${e.accessToken}`;else if(e.apiKey){let t=e.providerSpecificData?.extraApiKeys??[],n=t.length>0&&e.connectionId?a(e.connectionId,e.apiKey,t):e.apiKey;r.Authorization=`Bearer ${n}`}return t&&(r.Accept="text/event-stream"),r}transformRequest(e,t,r,n){return t}shouldRetry(e,r){return e===t.HTTP_STATUS.RATE_LIMITED&&r+1<this.getFallbackCount()}static RETRY_CONFIG={maxAttempts:2,delayMs:2e3};async refreshCredentials(e,t){return null}needsRefresh(e){return!!e.expiresAt&&new Date(e.expiresAt).getTime()-Date.now()<3e5}parseError(e,t){return{status:e.status,message:t||`HTTP ${e.status}`}}async execute({model:e,body:o,stream:a,credentials:d,signal:u,log:h,extendedContext:p,upstreamExtraHeaders:f}){let g=this.getFallbackCount(),m=null,k=0,w={};for(let y=0;y<g;y++){let T=this.buildUrl(e,a,y,d),_=this.buildHeaders(d,a);if(p){let t=["claude-opus-4-6","claude-sonnet-4-6","claude-sonnet-4-5","claude-sonnet-4"],r=e.replace(/-\d{8}$/,"");if(t.some(t=>r===t||e===t||e.startsWith(t))){let e=_["Anthropic-Beta"];e?_["Anthropic-Beta"]=e+",context-1m-2025-08-07":_["Anthropic-Beta"]="context-1m-2025-08-07"}}let x=await this.transformRequest(e,o,a,d);try{let e=AbortSignal.timeout(t.FETCH_TIMEOUT_MS),o=u?l(u,e):e,a=_,d=JSON.stringify(x);if(function(e){if(r(e))return!0;let t=e?.toLowerCase().replace(/[^a-z0-9]/g,"_");if(s.has(e?.toLowerCase()))return!0;let n=`CLI_COMPAT_${t?.toUpperCase()}`;return"1"===process.env[n]||"true"===process.env[n]||"1"===process.env.CLI_COMPAT_ALL||"true"===process.env.CLI_COMPAT_ALL}(this.provider)){let e=function(e,t,s){let o=n[r(e)?"claude-code-compatible":e?.toLowerCase()];return o?(o.userAgent&&(t["User-Agent"]=o.userAgent),o.extraHeaders&&Object.assign(t,o.extraHeaders),{headers:function(e,t){if(!t?.length||!e)return e;let r={},n=new Map;for(let[t,r]of Object.entries(e))n.set(t.toLowerCase(),[t,r]);for(let e of t){let t=n.get(e.toLowerCase());t&&(r[t[0]]=t[1],n.delete(e.toLowerCase()))}for(let[,[e,t]]of n)r[e]=t;return r}(t,o.headerOrder),bodyString:JSON.stringify(s&&"object"==typeof s&&!Array.isArray(s)?function(e,t){if(!t?.length||!e||"object"!=typeof e)return e;let r={},n=new Set(Object.keys(e));for(let s of t)s in e&&(r[s]=e[s],n.delete(s));for(let t of n)r[t]=e[t];return r}(s,o.bodyFieldOrder):s)}):{headers:t,bodyString:JSON.stringify(s)}}(this.provider,_,x);a=e.headers,d=e.bodyString}i(a,f);let p={method:"POST",headers:a,body:d};o&&(p.signal=o);let g=await fetch(T,p);if(g.status===t.HTTP_STATUS.RATE_LIMITED&&(w[y]??0)<c.RETRY_CONFIG.maxAttempts){w[y]=(w[y]??0)+1;let e=w[y];h?.debug?.("RETRY",`429 intra-retry ${e}/${c.RETRY_CONFIG.maxAttempts} on ${T} — waiting ${c.RETRY_CONFIG.delayMs}ms`),await new Promise(e=>setTimeout(e,c.RETRY_CONFIG.delayMs)),y--;continue}if(this.shouldRetry(g.status,y)){h?.debug?.("RETRY",`${g.status} on ${T}, trying fallback ${y+1}`),k=g.status;continue}return{response:g,url:T,headers:a,transformedBody:x}}catch(r){let e=r instanceof Error?r:Error(String(r));if("TimeoutError"===e.name&&h?.warn?.("TIMEOUT",`Fetch timeout after ${t.FETCH_TIMEOUT_MS}ms on ${T}`),m=e,y+1<g){h?.debug?.("RETRY",`Error on ${T}, trying fallback ${y+1}`);continue}throw e}}throw m||Error(`All ${g} URLs failed with status ${k}`)}}e.s(["BaseExecutor",0,c,"mergeAbortSignals",0,l,"mergeUpstreamExtraHeaders",0,i],503536)},191051,e=>{"use strict";var t=e.i(359281),r=e.i(666680);let n=new Map;async function s(e,r,n,s){let o=t.PROVIDERS[e],a=o?.refreshUrl||o?.tokenUrl;if(!o||!a)return s?.warn?.("TOKEN_REFRESH",`No refresh endpoint configured for provider: ${e}`),null;if(!r)return s?.warn?.("TOKEN_REFRESH",`No refresh token available for provider: ${e}`),null;try{let t=new URLSearchParams({grant_type:"refresh_token",refresh_token:r});o.clientId&&t.set("client_id",o.clientId),o.clientSecret&&t.set("client_secret",o.clientSecret);let n=await fetch(a,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:t});if(!n.ok){let t=await n.text();return s?.error?.("TOKEN_REFRESH",`Failed to refresh token for ${e}`,{status:n.status,error:t}),null}let i=await n.json();return s?.info?.("TOKEN_REFRESH",`Successfully refreshed token for ${e}`,{hasNewAccessToken:!!i.access_token,hasNewRefreshToken:!!i.refresh_token,expiresIn:i.expires_in}),{accessToken:i.access_token,refreshToken:i.refresh_token||r,expiresIn:i.expires_in}}catch(t){return s?.error?.("TOKEN_REFRESH",`Error refreshing token for ${e}`,{error:t.message}),null}}async function o(e,r){let n=t.PROVIDERS.cline?.refreshUrl;if(!n)return r?.warn?.("TOKEN_REFRESH","No refresh URL configured for Cline"),null;try{let t=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:e,grantType:"refresh_token",clientType:"extension"})});if(!t.ok){let e=await t.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Cline token",{status:t.status,error:e}),null}let s=await t.json(),o=s?.data||s,a=o?.expiresAt,i=a?Math.max(1,Math.floor((new Date(a).getTime()-Date.now())/1e3)):void 0;return r?.info?.("TOKEN_REFRESH","Successfully refreshed Cline token",{hasNewAccessToken:!!o?.accessToken,hasNewRefreshToken:!!o?.refreshToken,expiresIn:i}),{accessToken:o?.accessToken,refreshToken:o?.refreshToken||e,expiresIn:i}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Cline token: ${e.message}`),null}}async function a(e,r){let n=t.PROVIDERS["kimi-coding"]?.refreshUrl||t.PROVIDERS["kimi-coding"]?.tokenUrl;if(!n)return r?.warn?.("TOKEN_REFRESH","No refresh URL configured for Kimi Coding"),null;let s="kimi-refresh-"+Date.now(),o="u">typeof process?`${process.platform} ${process.arch}`:"unknown";try{let a=new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS["kimi-coding"]?.clientId||""}),i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","X-Msh-Platform":"omniroute","X-Msh-Version":"2.1.2","X-Msh-Device-Model":o,"X-Msh-Device-Id":s},body:a});if(!i.ok){let e=await i.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Kimi Coding token",{status:i.status,error:e}),null}let l=await i.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Kimi Coding token",{hasNewAccessToken:!!l.access_token,hasNewRefreshToken:!!l.refresh_token,expiresIn:l.expires_in}),{accessToken:l.access_token,refreshToken:l.refresh_token||e,expiresIn:l.expires_in,tokenType:l.token_type,scope:l.scope}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Kimi Coding token: ${e.message}`),null}}async function i(e,r){try{let n=new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.claude.clientId}),s=await fetch(t.OAUTH_ENDPOINTS.anthropic.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","anthropic-beta":"oauth-2025-04-20"},body:n.toString()});if(!s.ok){let e=await s.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Claude OAuth token",{status:s.status,error:e}),null}let o=await s.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Claude OAuth token",{hasNewAccessToken:!!o.access_token,hasNewRefreshToken:!!o.refresh_token,expiresIn:o.expires_in}),{accessToken:o.access_token,refreshToken:o.refresh_token||e,expiresIn:o.expires_in}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Claude token: ${e.message}`),null}}async function l(e,r,n,s){let o=await fetch(t.OAUTH_ENDPOINTS.google.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:r,client_secret:n})});if(!o.ok){let e=await o.text();return s?.error?.("TOKEN_REFRESH","Failed to refresh Google token",{status:o.status,error:e}),null}let a=await o.json();return s?.info?.("TOKEN_REFRESH","Successfully refreshed Google token",{hasNewAccessToken:!!a.access_token,hasNewRefreshToken:!!a.refresh_token,expiresIn:a.expires_in}),{accessToken:a.access_token,refreshToken:a.refresh_token||e,expiresIn:a.expires_in}}async function c(e,r){let n=t.OAUTH_ENDPOINTS.qwen.token;try{let s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.qwen.clientId})});if(200===s.status){let t=await s.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Qwen token",{hasNewAccessToken:!!t.access_token,hasNewRefreshToken:!!t.refresh_token,expiresIn:t.expires_in}),{accessToken:t.access_token,refreshToken:t.refresh_token||e,expiresIn:t.expires_in,providerSpecificData:t.resource_url?{resourceUrl:t.resource_url}:void 0}}{let e=await s.text().catch(()=>""),t=null;try{let r=JSON.parse(e);t=r?.error}catch{}if("invalid_request"===t)return r?.error?.("TOKEN_REFRESH","Qwen refresh token is invalid or expired. Re-authentication required.",{status:s.status}),{error:"invalid_request"};r?.warn?.("TOKEN_REFRESH","Error with Qwen endpoint",{status:s.status,error:e})}}catch(e){r?.warn?.("TOKEN_REFRESH","Network error trying Qwen endpoint",{error:e.message})}return r?.error?.("TOKEN_REFRESH","Failed to refresh Qwen token"),null}async function d(e,r){try{let n=await fetch(t.OAUTH_ENDPOINTS.openai.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.codex.clientId,scope:"openid profile email offline_access"})});if(!n.ok){let e=await n.text(),t=null;try{let r=JSON.parse(e);t=r?.error?.code}catch{}if("refresh_token_reused"===t)return r?.error?.("TOKEN_REFRESH","Codex refresh token already used (rotating token consumed). Re-authentication required.",{status:n.status}),{error:"refresh_token_reused"};return r?.error?.("TOKEN_REFRESH","Failed to refresh Codex token",{status:n.status,error:e}),null}let s=await n.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Codex token",{hasNewAccessToken:!!s.access_token,hasNewRefreshToken:!!s.refresh_token,expiresIn:s.expires_in}),{accessToken:s.access_token,refreshToken:s.refresh_token||e,expiresIn:s.expires_in}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Codex token: ${e.message}`),null}}async function u(e,r,n){try{let s=r?.authMethod,o=r?.clientId,a=r?.clientSecret,i=r?.region;if(o&&a){let t="idc"===s&&i?`https://oidc.${i}.amazonaws.com/token`:"https://oidc.us-east-1.amazonaws.com/token",r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({clientId:o,clientSecret:a,refreshToken:e,grantType:"refresh_token"})});if(!r.ok){let e=await r.text();return n?.error?.("TOKEN_REFRESH","Failed to refresh Kiro AWS token",{status:r.status,error:e}),null}let l=await r.json();return n?.info?.("TOKEN_REFRESH","Successfully refreshed Kiro AWS token",{hasNewAccessToken:!!l.accessToken,expiresIn:l.expiresIn}),{accessToken:l.accessToken,refreshToken:l.refreshToken||e,expiresIn:l.expiresIn}}let l=await fetch(t.PROVIDERS.kiro.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:e})});if(!l.ok){let e=await l.text();return n?.error?.("TOKEN_REFRESH","Failed to refresh Kiro social token",{status:l.status,error:e}),null}let c=await l.json();return n?.info?.("TOKEN_REFRESH","Successfully refreshed Kiro social token",{hasNewAccessToken:!!c.accessToken,expiresIn:c.expiresIn}),{accessToken:c.accessToken,refreshToken:c.refreshToken||e,expiresIn:c.expiresIn}}catch(e){return n?.error?.("TOKEN_REFRESH",`Network error refreshing Kiro token: ${e.message}`),null}}async function h(e,r){if(!t.OAUTH_ENDPOINTS.qoder.token||!t.PROVIDERS.qoder.clientId||!t.PROVIDERS.qoder.clientSecret)return r?.warn?.("TOKEN_REFRESH","Qoder OAuth refresh skipped: browser OAuth is not configured in this environment"),null;let n=btoa(`${t.PROVIDERS.qoder.clientId}:${t.PROVIDERS.qoder.clientSecret}`),s=await fetch(t.OAUTH_ENDPOINTS.qoder.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json",Authorization:`Basic ${n}`},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.qoder.clientId,client_secret:t.PROVIDERS.qoder.clientSecret})});if(!s.ok){let e=await s.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Qoder token",{status:s.status,error:e}),null}let o=await s.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Qoder token",{hasNewAccessToken:!!o.access_token,hasNewRefreshToken:!!o.refresh_token,expiresIn:o.expires_in}),{accessToken:o.access_token,refreshToken:o.refresh_token||e,expiresIn:o.expires_in}}async function p(e,r){let n=await fetch(t.OAUTH_ENDPOINTS.github.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.github.clientId,client_secret:t.PROVIDERS.github.clientSecret})});if(!n.ok){let e=await n.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh GitHub token",{status:n.status,error:e}),null}let s=await n.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed GitHub token",{hasNewAccessToken:!!s.access_token,hasNewRefreshToken:!!s.refresh_token,expiresIn:s.expires_in}),{accessToken:s.access_token,refreshToken:s.refresh_token||e,expiresIn:s.expires_in}}async function f(e,r,n){switch(e){case"gemini":case"gemini-cli":case"antigravity":return await l(r.refreshToken,t.PROVIDERS[e].clientId,t.PROVIDERS[e].clientSecret,n);case"claude":return await i(r.refreshToken,n);case"codex":return await d(r.refreshToken,n);case"qwen":return await c(r.refreshToken,n);case"qoder":return await h(r.refreshToken,n);case"github":return await p(r.refreshToken,n);case"kiro":return await u(r.refreshToken,r.providerSpecificData,n);case"cline":return await o(r.refreshToken,n);case"kimi-coding":return await a(r.refreshToken,n);default:return s(e,r.refreshToken,r,n)}}async function g(e,t,s){var o;let a;if(!t||!t.refreshToken||"string"!=typeof t.refreshToken)return s?.warn?.("TOKEN_REFRESH",`No valid refresh token available for provider: ${e}`),null;let i=(o=t.refreshToken,a=(0,r.createHash)("sha256").update(o).digest("hex"),`${e}:${a}`);if(n.has(i))return s?.info?.("TOKEN_REFRESH",`Reusing in-flight refresh for ${e}`),n.get(i);let l=f(e,t,s).finally(()=>{n.delete(i)});return n.set(i,l),l}e.s(["getAccessToken",0,g,"refreshCodexToken",0,d,"refreshKiroToken",0,u])},482191,e=>{"use strict";var t=e.i(503536);let r=`You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
|
|
1
|
+
module.exports=[503536,610766,457858,900930,e=>{"use strict";var t=e.i(359281);function r(e){return"string"==typeof e&&e.startsWith("anthropic-compatible-cc-")}e.i(142225),e.i(666680),e.s(["CLAUDE_CODE_COMPATIBLE_DEFAULT_CHAT_PATH",0,"/v1/messages?beta=true","buildClaudeCodeCompatibleHeaders",0,function(e,t=!1,r){return{"Content-Type":"application/json",Accept:t?"text/event-stream":"application/json","x-api-key":e,"anthropic-version":"2023-06-01","anthropic-beta":"claude-code-20250219,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,effort-2025-11-24","anthropic-dangerous-direct-browser-access":"true","x-app":"cli","User-Agent":"claude-cli/2.1.89 (external, sdk-cli)","X-Stainless-Retry-Count":"0","X-Stainless-Timeout":"300","X-Stainless-Lang":"js","X-Stainless-Package-Version":"0.74.0","X-Stainless-OS":"MacOS","X-Stainless-Arch":"arm64","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v25.8.1","accept-language":"*","sec-fetch-mode":"cors","accept-encoding":"identity",...r?{"X-Claude-Code-Session-Id":r}:{}}},"joinClaudeCodeCompatibleUrl",0,function(e,t){var r;let n,s,o,a;return r=(n=String(e||"").trim().replace(/\/$/,""))?n.split("?")[0].replace(/\/(?:v\d+\/)?messages$/i,""):"",s=String(r||"").replace(/\/$/,""),o=String(t||"").startsWith("/")?String(t):`/${String(t||"")}`,(a=s.match(/(\/v\d+)$/i))&&o.toLowerCase().startsWith(`${a[1].toLowerCase()}/`)?`${s}${o.slice(a[1].length)}`:`${s}${o}`}],610766),e.s(["isClaudeCodeCompatible",0,r],457858);let n={codex:{headerOrder:["Host","Content-Type","Authorization","Accept","User-Agent","Accept-Encoding"],bodyFieldOrder:["model","messages","temperature","top_p","max_tokens","stream","tools","tool_choice","response_format","n","stop"],userAgent:"codex-cli"},claude:{headerOrder:["Host","Content-Type","x-api-key","anthropic-version","Accept","User-Agent","Accept-Encoding"],bodyFieldOrder:["model","max_tokens","messages","system","temperature","top_p","top_k","stream","tools","tool_choice","metadata"],userAgent:"claude-code"},"claude-code-compatible":{headerOrder:["Host","Content-Type","x-api-key","anthropic-version","anthropic-beta","anthropic-dangerous-direct-browser-access","x-app","User-Agent","X-Claude-Code-Session-Id","X-Stainless-Retry-Count","X-Stainless-Timeout","X-Stainless-Lang","X-Stainless-Package-Version","X-Stainless-OS","X-Stainless-Arch","X-Stainless-Runtime","X-Stainless-Runtime-Version","Accept","accept-language","sec-fetch-mode","accept-encoding"],bodyFieldOrder:["model","messages","system","tools","metadata","max_tokens","thinking","context_management","output_config","stream"]},github:{headerOrder:["Host","Authorization","X-Request-Id","Vscode-Sessionid","Vscode-Machineid","Editor-Version","Editor-Plugin-Version","Copilot-Integration-Id","Openai-Organization","Openai-Intent","Content-Type","User-Agent","Accept","Accept-Encoding"],bodyFieldOrder:["messages","model","temperature","top_p","max_tokens","n","stream","intent","intent_threshold","intent_content"],userAgent:"GitHubCopilotChat"},antigravity:{headerOrder:["Host","Content-Type","Authorization","User-Agent","Accept","Accept-Encoding"],bodyFieldOrder:["project","model","userAgent","requestType","requestId","request"],userAgent:"antigravity"},qwen:{headerOrder:["Host","Content-Type","Authorization","User-Agent","X-Dashscope-AuthType","X-Dashscope-CacheControl","X-Dashscope-UserAgent","X-Stainless-Arch","X-Stainless-Lang","X-Stainless-Os","X-Stainless-Package-Version","X-Stainless-Retry-Count","X-Stainless-Runtime","X-Stainless-Runtime-Version","Connection","Accept","Accept-Language","Sec-Fetch-Mode","Accept-Encoding"],bodyFieldOrder:["model","messages","temperature","top_p","max_tokens","stream","tools","tool_choice","response_format","n","stop"],userAgent:"QwenCode/0.12.3 (linux; x64)",extraHeaders:{"X-Dashscope-AuthType":"qwen-oauth","X-Dashscope-CacheControl":"enable","X-Dashscope-UserAgent":"QwenCode/0.12.3 (linux; x64)","X-Stainless-Arch":"x64","X-Stainless-Lang":"js","X-Stainless-Os":"Linux","X-Stainless-Package-Version":"5.11.0","X-Stainless-Retry-Count":"1","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v18.19.1",Connection:"keep-alive","Accept-Language":"*","Sec-Fetch-Mode":"cors"}}},s=new Set,o=new Map;function a(e,t,r=[]){let n=r.filter(e=>"string"==typeof e&&e.trim().length>0);if(0===n.length)return t;let s=[t,...n].filter(Boolean);if(s.length<=1)return t;let i=o.get(e)??0,l=i%s.length;return o.set(e,i+1),s[l]}function i(e,t){if(t)for(let[r,n]of Object.entries(t))"string"==typeof r&&r.length>0&&"string"==typeof n&&(e[r]=n)}function l(e,t){let r=new AbortController,n=()=>{r.signal.aborted||r.abort()};return e.aborted||t.aborted?n():(e.addEventListener("abort",n,{once:!0}),t.addEventListener("abort",n,{once:!0})),r.signal}e.s(["getRotatingApiKey",0,a],900930);class c{provider;config;constructor(e,t){this.provider=e,this.config=t}getProvider(){return this.provider}getBaseUrls(){return this.config.baseUrls||(this.config.baseUrl?[this.config.baseUrl]:[])}getFallbackCount(){return this.getBaseUrls().length||1}buildUrl(e,t,r=0,n=null){if(this.provider?.startsWith?.("openai-compatible-")){let e=n?.providerSpecificData,t=("string"==typeof e?.baseUrl?e.baseUrl:"https://api.openai.com/v1").replace(/\/$/,""),r="string"==typeof e?.chatPath&&e.chatPath?e.chatPath:null,s=r&&!("string"!=typeof r||!r.startsWith("/")||r.includes("\0")||r.includes(".."))&&!(r.length>512)&&1?r:null;if(s)return`${t}${s}`;let o=this.provider.includes("responses")?"/responses":"/chat/completions";return`${t}${o}`}let s=this.getBaseUrls();return s[r]||s[0]||this.config.baseUrl}buildHeaders(e,t=!0){let r={"Content-Type":"application/json",...this.config.headers},n=this.config?.id||this.provider;if(n){let e=`${n.toUpperCase().replace(/[^A-Z0-9]/g,"_")}_USER_AGENT`,t=process.env[e]?.trim();t&&(r["User-Agent"]=t,r["user-agent"]&&(r["user-agent"]=t))}if(e.accessToken)r.Authorization=`Bearer ${e.accessToken}`;else if(e.apiKey){let t=e.providerSpecificData?.extraApiKeys??[],n=t.length>0&&e.connectionId?a(e.connectionId,e.apiKey,t):e.apiKey;r.Authorization=`Bearer ${n}`}return t&&(r.Accept="text/event-stream"),r}transformRequest(e,t,r,n){return t}shouldRetry(e,r){return e===t.HTTP_STATUS.RATE_LIMITED&&r+1<this.getFallbackCount()}static RETRY_CONFIG={maxAttempts:2,delayMs:2e3};async refreshCredentials(e,t){return null}needsRefresh(e){return!!e.expiresAt&&new Date(e.expiresAt).getTime()-Date.now()<3e5}parseError(e,t){return{status:e.status,message:t||`HTTP ${e.status}`}}async execute({model:e,body:o,stream:a,credentials:d,signal:u,log:h,extendedContext:p,upstreamExtraHeaders:f}){let g=this.getFallbackCount(),m=null,k=0,w={};for(let y=0;y<g;y++){let T=this.buildUrl(e,a,y,d),_=this.buildHeaders(d,a);if(p){let t=["claude-opus-4-6","claude-sonnet-4-6","claude-sonnet-4-5","claude-sonnet-4"],r=e.replace(/-\d{8}$/,"");if(t.some(t=>r===t||e===t||e.startsWith(t))){let e=_["Anthropic-Beta"];e?_["Anthropic-Beta"]=e+",context-1m-2025-08-07":_["Anthropic-Beta"]="context-1m-2025-08-07"}}let x=await this.transformRequest(e,o,a,d);try{let e=AbortSignal.timeout(t.FETCH_TIMEOUT_MS),o=u?l(u,e):e,a=_,d=JSON.stringify(x);if(function(e){if(r(e))return!0;let t=e?.toLowerCase().replace(/[^a-z0-9]/g,"_");if(s.has(e?.toLowerCase()))return!0;let n=`CLI_COMPAT_${t?.toUpperCase()}`;return"1"===process.env[n]||"true"===process.env[n]||"1"===process.env.CLI_COMPAT_ALL||"true"===process.env.CLI_COMPAT_ALL}(this.provider)){let e=function(e,t,s){let o=n[r(e)?"claude-code-compatible":e?.toLowerCase()];return o?(o.userAgent&&(t["User-Agent"]=o.userAgent),o.extraHeaders&&Object.assign(t,o.extraHeaders),{headers:function(e,t){if(!t?.length||!e)return e;let r={},n=new Map;for(let[t,r]of Object.entries(e))n.set(t.toLowerCase(),[t,r]);for(let e of t){let t=n.get(e.toLowerCase());t&&(r[t[0]]=t[1],n.delete(e.toLowerCase()))}for(let[,[e,t]]of n)r[e]=t;return r}(t,o.headerOrder),bodyString:JSON.stringify(s&&"object"==typeof s&&!Array.isArray(s)?function(e,t){if(!t?.length||!e||"object"!=typeof e)return e;let r={},n=new Set(Object.keys(e));for(let s of t)s in e&&(r[s]=e[s],n.delete(s));for(let t of n)r[t]=e[t];return r}(s,o.bodyFieldOrder):s)}):{headers:t,bodyString:JSON.stringify(s)}}(this.provider,_,x);a=e.headers,d=e.bodyString}i(a,f);let p={method:"POST",headers:a,body:d};o&&(p.signal=o);let g=await fetch(T,p);if(g.status===t.HTTP_STATUS.RATE_LIMITED&&(w[y]??0)<c.RETRY_CONFIG.maxAttempts){w[y]=(w[y]??0)+1;let e=w[y];h?.debug?.("RETRY",`429 intra-retry ${e}/${c.RETRY_CONFIG.maxAttempts} on ${T} — waiting ${c.RETRY_CONFIG.delayMs}ms`),await new Promise(e=>setTimeout(e,c.RETRY_CONFIG.delayMs)),y--;continue}if(this.shouldRetry(g.status,y)){h?.debug?.("RETRY",`${g.status} on ${T}, trying fallback ${y+1}`),k=g.status;continue}return{response:g,url:T,headers:a,transformedBody:x}}catch(r){let e=r instanceof Error?r:Error(String(r));if("TimeoutError"===e.name&&h?.warn?.("TIMEOUT",`Fetch timeout after ${t.FETCH_TIMEOUT_MS}ms on ${T}`),m=e,y+1<g){h?.debug?.("RETRY",`Error on ${T}, trying fallback ${y+1}`);continue}throw e}}throw m||Error(`All ${g} URLs failed with status ${k}`)}}e.s(["BaseExecutor",0,c,"mergeAbortSignals",0,l,"mergeUpstreamExtraHeaders",0,i],503536)},191051,e=>{"use strict";var t=e.i(359281),r=e.i(666680);let n=new Map;async function s(e,r,n,s){let o=t.PROVIDERS[e],a=o?.refreshUrl||o?.tokenUrl;if(!o||!a)return s?.warn?.("TOKEN_REFRESH",`No refresh endpoint configured for provider: ${e}`),null;if(!r)return s?.warn?.("TOKEN_REFRESH",`No refresh token available for provider: ${e}`),null;try{let t=new URLSearchParams({grant_type:"refresh_token",refresh_token:r});o.clientId&&t.set("client_id",o.clientId),o.clientSecret&&t.set("client_secret",o.clientSecret);let n=await fetch(a,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:t});if(!n.ok){let t=await n.text();return s?.error?.("TOKEN_REFRESH",`Failed to refresh token for ${e}`,{status:n.status,error:t}),null}let i=await n.json();return s?.info?.("TOKEN_REFRESH",`Successfully refreshed token for ${e}`,{hasNewAccessToken:!!i.access_token,hasNewRefreshToken:!!i.refresh_token,expiresIn:i.expires_in}),{accessToken:i.access_token,refreshToken:i.refresh_token||r,expiresIn:i.expires_in}}catch(t){return s?.error?.("TOKEN_REFRESH",`Error refreshing token for ${e}`,{error:t.message}),null}}async function o(e,r){let n=t.PROVIDERS.cline?.refreshUrl;if(!n)return r?.warn?.("TOKEN_REFRESH","No refresh URL configured for Cline"),null;try{let t=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:e,grantType:"refresh_token",clientType:"extension"})});if(!t.ok){let e=await t.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Cline token",{status:t.status,error:e}),null}let s=await t.json(),o=s?.data||s,a=o?.expiresAt,i=a?Math.max(1,Math.floor((new Date(a).getTime()-Date.now())/1e3)):void 0;return r?.info?.("TOKEN_REFRESH","Successfully refreshed Cline token",{hasNewAccessToken:!!o?.accessToken,hasNewRefreshToken:!!o?.refreshToken,expiresIn:i}),{accessToken:o?.accessToken,refreshToken:o?.refreshToken||e,expiresIn:i}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Cline token: ${e.message}`),null}}async function a(e,r){let n=t.PROVIDERS["kimi-coding"]?.refreshUrl||t.PROVIDERS["kimi-coding"]?.tokenUrl;if(!n)return r?.warn?.("TOKEN_REFRESH","No refresh URL configured for Kimi Coding"),null;let s="kimi-refresh-"+Date.now(),o="u">typeof process?`${process.platform} ${process.arch}`:"unknown";try{let a=new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS["kimi-coding"]?.clientId||""}),i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","X-Msh-Platform":"omniroute","X-Msh-Version":"2.1.2","X-Msh-Device-Model":o,"X-Msh-Device-Id":s},body:a});if(!i.ok){let e=await i.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Kimi Coding token",{status:i.status,error:e}),null}let l=await i.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Kimi Coding token",{hasNewAccessToken:!!l.access_token,hasNewRefreshToken:!!l.refresh_token,expiresIn:l.expires_in}),{accessToken:l.access_token,refreshToken:l.refresh_token||e,expiresIn:l.expires_in,tokenType:l.token_type,scope:l.scope}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Kimi Coding token: ${e.message}`),null}}async function i(e,r){try{let n=new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.claude.clientId}),s=await fetch(t.OAUTH_ENDPOINTS.anthropic.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","anthropic-beta":"oauth-2025-04-20"},body:n.toString()});if(!s.ok){let e=await s.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Claude OAuth token",{status:s.status,error:e}),null}let o=await s.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Claude OAuth token",{hasNewAccessToken:!!o.access_token,hasNewRefreshToken:!!o.refresh_token,expiresIn:o.expires_in}),{accessToken:o.access_token,refreshToken:o.refresh_token||e,expiresIn:o.expires_in}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Claude token: ${e.message}`),null}}async function l(e,r,n,s){let o=await fetch(t.OAUTH_ENDPOINTS.google.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:r,client_secret:n})});if(!o.ok){let e=await o.text();return s?.error?.("TOKEN_REFRESH","Failed to refresh Google token",{status:o.status,error:e}),null}let a=await o.json();return s?.info?.("TOKEN_REFRESH","Successfully refreshed Google token",{hasNewAccessToken:!!a.access_token,hasNewRefreshToken:!!a.refresh_token,expiresIn:a.expires_in}),{accessToken:a.access_token,refreshToken:a.refresh_token||e,expiresIn:a.expires_in}}async function c(e,r){let n=t.OAUTH_ENDPOINTS.qwen.token;try{let s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.qwen.clientId})});if(200===s.status){let t=await s.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Qwen token",{hasNewAccessToken:!!t.access_token,hasNewRefreshToken:!!t.refresh_token,expiresIn:t.expires_in}),{accessToken:t.access_token,refreshToken:t.refresh_token||e,expiresIn:t.expires_in,providerSpecificData:t.resource_url?{resourceUrl:t.resource_url}:void 0}}{let e=await s.text().catch(()=>""),t=null;try{let r=JSON.parse(e);t=r?.error}catch{}if("invalid_request"===t)return r?.error?.("TOKEN_REFRESH","Qwen refresh token is invalid or expired. Re-authentication required.",{status:s.status}),{error:"invalid_request"};r?.warn?.("TOKEN_REFRESH","Error with Qwen endpoint",{status:s.status,error:e})}}catch(e){r?.warn?.("TOKEN_REFRESH","Network error trying Qwen endpoint",{error:e.message})}return r?.error?.("TOKEN_REFRESH","Failed to refresh Qwen token"),null}async function d(e,r){try{let n=await fetch(t.OAUTH_ENDPOINTS.openai.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.codex.clientId,scope:"openid profile email offline_access"})});if(!n.ok){let e=await n.text(),t=null;try{let r=JSON.parse(e);t=r?.error?.code}catch{}if("refresh_token_reused"===t)return r?.error?.("TOKEN_REFRESH","Codex refresh token already used (rotating token consumed). Re-authentication required.",{status:n.status}),{error:"refresh_token_reused"};return r?.error?.("TOKEN_REFRESH","Failed to refresh Codex token",{status:n.status,error:e}),null}let s=await n.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Codex token",{hasNewAccessToken:!!s.access_token,hasNewRefreshToken:!!s.refresh_token,expiresIn:s.expires_in}),{accessToken:s.access_token,refreshToken:s.refresh_token||e,expiresIn:s.expires_in}}catch(e){return r?.error?.("TOKEN_REFRESH",`Network error refreshing Codex token: ${e.message}`),null}}async function u(e,r,n){try{let s=r?.authMethod,o=r?.clientId,a=r?.clientSecret,i=r?.region;if(o&&a){let t="idc"===s&&i?`https://oidc.${i}.amazonaws.com/token`:"https://oidc.us-east-1.amazonaws.com/token",r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({clientId:o,clientSecret:a,refreshToken:e,grantType:"refresh_token"})});if(!r.ok){let e=await r.text();return n?.error?.("TOKEN_REFRESH","Failed to refresh Kiro AWS token",{status:r.status,error:e}),null}let l=await r.json();return n?.info?.("TOKEN_REFRESH","Successfully refreshed Kiro AWS token",{hasNewAccessToken:!!l.accessToken,expiresIn:l.expiresIn}),{accessToken:l.accessToken,refreshToken:l.refreshToken||e,expiresIn:l.expiresIn}}let l=await fetch(t.PROVIDERS.kiro.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:e})});if(!l.ok){let e=await l.text();return n?.error?.("TOKEN_REFRESH","Failed to refresh Kiro social token",{status:l.status,error:e}),null}let c=await l.json();return n?.info?.("TOKEN_REFRESH","Successfully refreshed Kiro social token",{hasNewAccessToken:!!c.accessToken,expiresIn:c.expiresIn}),{accessToken:c.accessToken,refreshToken:c.refreshToken||e,expiresIn:c.expiresIn}}catch(e){return n?.error?.("TOKEN_REFRESH",`Network error refreshing Kiro token: ${e.message}`),null}}async function h(e,r){if(!t.OAUTH_ENDPOINTS.qoder.token||!t.PROVIDERS.qoder.clientId||!t.PROVIDERS.qoder.clientSecret)return r?.warn?.("TOKEN_REFRESH","Qoder OAuth refresh skipped: browser OAuth is not configured in this environment"),null;let n=btoa(`${t.PROVIDERS.qoder.clientId}:${t.PROVIDERS.qoder.clientSecret}`),s=await fetch(t.OAUTH_ENDPOINTS.qoder.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json",Authorization:`Basic ${n}`},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.qoder.clientId,client_secret:t.PROVIDERS.qoder.clientSecret})});if(!s.ok){let e=await s.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh Qoder token",{status:s.status,error:e}),null}let o=await s.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed Qoder token",{hasNewAccessToken:!!o.access_token,hasNewRefreshToken:!!o.refresh_token,expiresIn:o.expires_in}),{accessToken:o.access_token,refreshToken:o.refresh_token||e,expiresIn:o.expires_in}}async function p(e,r){let n=await fetch(t.OAUTH_ENDPOINTS.github.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:t.PROVIDERS.github.clientId,client_secret:t.PROVIDERS.github.clientSecret})});if(!n.ok){let e=await n.text();return r?.error?.("TOKEN_REFRESH","Failed to refresh GitHub token",{status:n.status,error:e}),null}let s=await n.json();return r?.info?.("TOKEN_REFRESH","Successfully refreshed GitHub token",{hasNewAccessToken:!!s.access_token,hasNewRefreshToken:!!s.refresh_token,expiresIn:s.expires_in}),{accessToken:s.access_token,refreshToken:s.refresh_token||e,expiresIn:s.expires_in}}async function f(e,r,n){switch(e){case"gemini":case"gemini-cli":case"antigravity":return await l(r.refreshToken,t.PROVIDERS[e].clientId,t.PROVIDERS[e].clientSecret,n);case"claude":return await i(r.refreshToken,n);case"codex":return await d(r.refreshToken,n);case"qwen":return await c(r.refreshToken,n);case"qoder":return await h(r.refreshToken,n);case"github":return await p(r.refreshToken,n);case"kiro":return await u(r.refreshToken,r.providerSpecificData,n);case"cline":return await o(r.refreshToken,n);case"kimi-coding":return await a(r.refreshToken,n);default:return s(e,r.refreshToken,r,n)}}async function g(e,t,s){var o;let a;if(!t||!t.refreshToken||"string"!=typeof t.refreshToken)return s?.warn?.("TOKEN_REFRESH",`No valid refresh token available for provider: ${e}`),null;let i=(o=t.refreshToken,a=(0,r.createHash)("sha256").update(o).digest("hex"),`${e}:${a}`);if(n.has(i))return s?.info?.("TOKEN_REFRESH",`Reusing in-flight refresh for ${e}`),n.get(i);let l=f(e,t,s).finally(()=>{n.delete(i)});return n.set(i,l),l}e.s(["getAccessToken",0,g,"refreshCodexToken",0,d,"refreshKiroToken",0,u])},482191,e=>{"use strict";var t=e.i(503536);let r=`You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
|
|
2
2
|
|
|
3
3
|
## General
|
|
4
4
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[287726,e=>{"use strict";e.i(245272);var t=e.i(385498),r=e.i(125852),i=e.i(548941),o=e.i(403122),n=e.i(25687),l=e.i(441637),a=e.i(828059),s=e.i(16023),c=e.i(69373),d=e.i(706901),u=e.i(73114);function f(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function p(e){return"string"==typeof e&&e.trim().length>0?e:null}function m(e,t=0){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e&&e.trim().length>0){let r=Number(e);return Number.isFinite(r)?r:t}return t}function A(e){let t=f(e);return{id:p(t.id)||"",isActive:!0===t.isActive,rateLimitedUntil:p(t.rateLimitedUntil),testStatus:p(t.testStatus),apiKey:p(t.apiKey),accessToken:p(t.accessToken),refreshToken:p(t.refreshToken),tokenExpiresAt:p(t.tokenExpiresAt),expiresAt:p(t.expiresAt),projectId:p(t.projectId),providerSpecificData:f(t.providerSpecificData),lastUsedAt:p(t.lastUsedAt),consecutiveUseCount:m(t.consecutiveUseCount,0),priority:m(t.priority,999),lastError:p(t.lastError),lastErrorType:p(t.lastErrorType),lastErrorSource:p(t.lastErrorSource),errorCode:"string"==typeof t.errorCode||"number"==typeof t.errorCode?t.errorCode:null,backoffLevel:m(t.backoffLevel,0)}}function h(e,t){return"boolean"==typeof e?e:t}function y(e,t=90){return Math.min(100,Math.max(1,m(e,t)))}function g(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return t.length>0?t:null}function w(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"session (5h)"===t||"5h"===t||"five_hour"===t?"session":"weekly (7d)"===t||"7d"===t||"seven_day"===t?"weekly":t}function U(e,t){if(!t)return null;let r=(0,c.getCodexModelScope)(t),i=f(e.codexScopeRateLimitedUntil)[r];return"string"==typeof i&&i.trim().length>0?i:null}function v(e,t){let r=U(e.providerSpecificData,t);return!!r&&new Date(r).getTime()>Date.now()}function T(e){let t=(e.testStatus||"").trim().toLowerCase();return"credits_exhausted"===t||"banned"===t||"expired"===t}function S(e){if(!e)return null;let t=new Date(e).getTime();return!Number.isFinite(t)||t<=Date.now()?null:t}function $(e){return e.map(e=>({raw:e,ms:S(e)})).filter(e=>null!==e.ms).sort((e,t)=>e.ms-t.ms)[0]?.raw||null}let b=Promise.resolve(),k=new Map;async function D(e,r=null,o=null,a=null,s={}){let c,p=b;b=new Promise(e=>{c=e});try{let c,b;await p;let k=!0===s.allowSuppressedConnections,D=!0===s.bypassQuotaPolicy,L=(b=[e],"nvidia"===e&&b.push("nvidia_nim"),"nvidia_nim"===e&&b.push("nvidia"),[...new Set(b)]),E=[];for(let e of L){let r=await (0,t.getProviderConnections)({provider:e,isActive:!0});Array.isArray(r)&&E.push(...r)}let C=(Array.isArray(E)?E:[]).map(A).filter(e=>e.id.length>0);if(o&&o.length>0&&(C=C.filter(e=>o.includes(e.id))),d.debug("AUTH",`${e} | total connections: ${C.length}, excludeId: ${r||"none"}`),0===C.length){let r=[];for(let e of L){let i=await (0,t.getProviderConnections)({provider:e});Array.isArray(i)&&r.push(...i)}let i=(Array.isArray(r)?r:[]).map(A).filter(e=>e.id.length>0);if(d.debug("AUTH",`${e} | all connections (incl inactive): ${i.length}`),i.length>0){let t=(0,l.getEarliestRateLimitedUntil)(i);if(t)return d.warn("AUTH",`${e} | all ${i.length} accounts rate limited (${(0,l.formatRetryAfter)(t)})`),{allRateLimited:!0,retryAfter:t,retryAfterHuman:(0,l.formatRetryAfter)(t)};d.warn("AUTH",`${e} | ${i.length} accounts found but none active`),i.forEach(e=>{d.debug("AUTH",` → ${e.id?.slice(0,8)} | isActive=${e.isActive} | rateLimitedUntil=${e.rateLimitedUntil||"none"} | testStatus=${e.testStatus}`)})}return d.warn("AUTH",`No credentials for ${e}`),null}for(let e of C)!(e.backoffLevel>0)||T(e)||(0,l.isAccountUnavailable)(e.rateLimitedUntil)||(e.backoffLevel=0,(0,t.updateProviderConnection)(e.id,{backoffLevel:0,testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null}).catch(()=>{}));let P=C.filter(t=>!(r&&t.id===r||!k&&((0,l.isAccountUnavailable)(t.rateLimitedUntil)||T(t)||"codex"===e&&v(t,a)||a&&(0,l.isModelLocked)(e,t.id,a)))&&!0);if(d.debug("AUTH",`${e} | available: ${P.length}/${C.length}`),C.forEach(t=>{let i=r&&t.id===r,o=(0,l.isAccountUnavailable)(t.rateLimitedUntil),n=T(t),s="codex"===e&&v(t,a);if(i||o)d.debug("AUTH",` → ${t.id?.slice(0,8)} | ${i?"excluded":""} ${o?`rateLimited until ${t.rateLimitedUntil}`:""}${k&&o?" (retained for combo live test)":""}`);else if(n)d.debug("AUTH",k?` → ${t.id?.slice(0,8)} | retained terminal status=${t.testStatus} for combo live test`:` → ${t.id?.slice(0,8)} | skipped terminal status=${t.testStatus}`);else if(s){let e=U(t.providerSpecificData,a);d.debug("AUTH",k?` → ${t.id?.slice(0,8)} | retained codex scope-limited account until ${e} for combo live test`:` → ${t.id?.slice(0,8)} | codex scope-limited until ${e}`)}}),0===P.length){let t=(0,l.getEarliestRateLimitedUntil)(C)||("codex"===e?function(e,t){let r=null,i=1/0;for(let o of e){let e=U(o.providerSpecificData,t);if(!e)continue;let n=new Date(e).getTime();!(!Number.isFinite(n)||n<=Date.now())&&n<i&&(r=e,i=n)}return r}(C,a):null);if(t){let r=C.filter(e=>e.rateLimitedUntil&&new Date(e.rateLimitedUntil).getTime()>Date.now()).sort((e,t)=>new Date(e.rateLimitedUntil||0).getTime()-new Date(t.rateLimitedUntil||0).getTime())[0];return d.warn("AUTH",`${e} | all ${C.length} active accounts rate limited (${(0,l.formatRetryAfter)(t)}) | lastErrorCode=${r?.errorCode}, lastError=${r?.lastError?.slice(0,50)}`),{allRateLimited:!0,retryAfter:t,retryAfterHuman:(0,l.formatRetryAfter)(t),lastError:r?.lastError||null,lastErrorCode:r?.errorCode||null}}return d.warn("AUTH",`${e} | all ${C.length} accounts unavailable`),null}let M=P,x=[];if(D?P.length>0&&d.debug("AUTH",`${e} | bypassing quota policy for combo live test`):M=P.filter(t=>{let r=function(e,t){let r=function(e,t){let r=f(t.limitPolicy),i=(Array.isArray(r.windows)?r.windows:[]).map(g).filter(Boolean);if("codex"===e){var o,n;let e,l,a,s=(o=i,n=t,l=(e=f(n.codexLimitPolicy),{use5h:h(e.use5h,!0),useWeekly:h(e.useWeekly,!0)}),a=(a=[...o.map(w).filter(Boolean)]).filter(e=>"session"===e?l.use5h:"weekly"!==e||l.useWeekly),l.use5h&&a.push("session"),l.useWeekly&&a.push("weekly"),[...new Set(a)]);return{enabled:h(r.enabled,s.length>0),thresholdPercent:y(r.thresholdPercent),windows:s}}return{enabled:h(r.enabled,!1),thresholdPercent:y(r.thresholdPercent),windows:i}}(e,t.providerSpecificData);if(!r.enabled||0===r.windows.length)return{blocked:!1,reasons:[],resetAt:null};let i=[],o=[];for(let e of r.windows){let l=(0,n.getQuotaWindowStatus)(t.id,e,r.thresholdPercent);l?.reachedThreshold&&(i.push(`${e} usage ${Math.round(l.usedPercentage)}%`),o.push(l.resetAt))}return{blocked:i.length>0,reasons:i,resetAt:$(o)}}(e,t);return!r.blocked||(x.push({id:t.id,reasons:r.reasons,resetAt:r.resetAt}),!1)}),x.length>0&&d.info("AUTH",`${e} | quota policy filtered ${x.length} account(s): ${x.map(e=>`${e.id.slice(0,8)}(${e.reasons.join(", ")})`).join("; ")}`),0===M.length&&P.length>0){let t=$(x.map(e=>e.resetAt)),r=S(t),i=r?new Date(r).toISOString():new Date(Date.now()+3e5).toISOString();return{allRateLimited:!0,retryAfter:i,retryAfterHuman:(0,l.formatRetryAfter)(i),lastError:`All ${e} accounts reached configured quota threshold`,lastErrorCode:429}}let R=M.filter(e=>!(0,n.isAccountQuotaExhausted)(e.id)),I=M.filter(e=>(0,n.isAccountQuotaExhausted)(e.id)),H=R.length>0?[...R,...I]:M;I.length>0&&d.debug("AUTH",`${e} | quota-aware: ${R.length} with quota, ${I.length} exhausted`);let F=await (0,i.getSettings)(),O=F.fallbackStrategy||"fill-first";if("round-robin"===O){let i=m(F.stickyRoundRobinLimit,3);if(null!==r)c=[...H].sort((e,t)=>{let r=e.backoffLevel||0,i=t.backoffLevel||0;return r!==i?r-i:e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(e.lastUsedAt).getTime()-new Date(t.lastUsedAt).getTime():1:-1:(e.priority||999)-(t.priority||999)})[0],d.info("AUTH",`${e} round-robin: FALLBACK MODE - excluded ${r?.slice(0,8)}..., picked LRU ${c.id?.slice(0,8)}...`),await (0,t.updateProviderConnection)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1});else{let r=[...H].sort((e,t)=>e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(t.lastUsedAt).getTime()-new Date(e.lastUsedAt).getTime():-1:1:(e.priority||999)-(t.priority||999))[0],o=r?.consecutiveUseCount||0;r&&r.lastUsedAt&&o<i?(c=r,d.debug("AUTH",`${e} round-robin: staying with ${r.id?.slice(0,8)}... (count=${o}/${i})`),await (0,t.updateProviderConnection)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:(c.consecutiveUseCount||0)+1})):(c=[...H].sort((e,t)=>{let r=e.backoffLevel||0,i=t.backoffLevel||0;return r!==i?r-i:e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(e.lastUsedAt).getTime()-new Date(t.lastUsedAt).getTime():1:-1:(e.priority||999)-(t.priority||999)})[0],d.debug("AUTH",`${e} round-robin: switching to LRU ${c.id?.slice(0,8)}... (current count=${o} >= limit=${i} or no lastUsedAt)`),await (0,t.updateProviderConnection)(c.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1}))}}else if("p2c"===O)if(H.length<=2)c=H[0];else{let e=Math.floor(Math.random()*H.length),t=Math.floor(Math.random()*(H.length-1));t>=e&&t++;let r=H[e],i=H[t],o=(r.consecutiveUseCount||0)+10*!!r.lastError,n=(i.consecutiveUseCount||0)+10*!!i.lastError;c=o<=n?r:i}else if("random"===O){let e=Math.floor(Math.random()*H.length);c=H[e]}else if("least-used"===O)c=[...H].sort((e,t)=>e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(e.lastUsedAt).getTime()-new Date(t.lastUsedAt).getTime():1:-1:(e.priority||999)-(t.priority||999))[0];else if("cost-optimized"===O)c=[...H].sort((e,t)=>(e.priority||999)-(t.priority||999))[0];else if("strict-random"===O){let t=H.map(e=>e.id),r=(0,u.getNextFromDeckSync)(`conn:${e}`,t);c=H.find(e=>e.id===r)||H[0]}else c=H[0];return{apiKey:c.apiKey,accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.tokenExpiresAt||c.expiresAt||null,projectId:c.projectId,copilotToken:"string"==typeof c.providerSpecificData.copilotToken?c.providerSpecificData.copilotToken:null,providerSpecificData:c.providerSpecificData,connectionId:c.id,testStatus:c.testStatus,lastError:c.lastError,lastErrorType:c.lastErrorType,lastErrorSource:c.lastErrorSource,errorCode:c.errorCode,rateLimitedUntil:c.rateLimitedUntil}}finally{c&&c()}}async function L(e,r,i,n=null,u=null){let p,m=k.get(e)||Promise.resolve();k.set(e,new Promise(e=>{p=e}));try{if(await m,(0,l.hasPerModelQuota)(n)&&u&&(429===r||404===r)){let i=404===r?"not_found":"rate_limited",o=404===r?s.COOLDOWN_MS.notFoundLocal:s.COOLDOWN_MS.rateLimit;return(0,l.lockModel)(n,e,u,i,o),(0,t.updateProviderConnection)(e,{lastErrorType:i,lastError:`Model ${u} ${i}`,lastErrorAt:new Date().toISOString(),errorCode:r}).catch(()=>{}),d.info("AUTH",`Model-only lockout for ${n}:${u} — ${r} ${i} ${Math.ceil(o/1e3)}s (connection stays active)`),{shouldFallback:!0,cooldownMs:o}}let p=await (0,t.getProviderConnections)({provider:n}),h=(Array.isArray(p)?p:[]).map(A).filter(e=>e.id.length>0).find(t=>t.id===e),y=h?.backoffLevel||0;if(h&&T(h))return d.info("AUTH",`${e.slice(0,8)} terminal status=${h.testStatus}, skipping cooldown overwrite`),{shouldFallback:!0,cooldownMs:0};if(h?.rateLimitedUntil&&new Date(h.rateLimitedUntil).getTime()>Date.now())return d.info("AUTH",`${e.slice(0,8)} already marked unavailable (until ${h.rateLimitedUntil}), skipping duplicate mark`),{shouldFallback:!0,cooldownMs:new Date(h.rateLimitedUntil).getTime()-Date.now()};if("codex"===n&&u){let t=U(h?.providerSpecificData||{},u);if(t&&new Date(t).getTime()>Date.now())return d.info("AUTH",`${e.slice(0,8)} already scope-limited for ${(0,c.getCodexModelScope)(u)} (until ${t}), skipping duplicate mark`),{shouldFallback:!0,cooldownMs:new Date(t).getTime()-Date.now()}}let g=(0,l.checkFallbackError)(r,i,y,u,n),{shouldFallback:w,cooldownMs:v,newBackoffLevel:S,reason:$}=g;if(!w)return{shouldFallback:!1,cooldownMs:0};let b=h?.providerSpecificData?.baseUrl;n&&(0,a.getPassthroughProviders)().has(n);let k=(0,l.hasPerModelQuota)(n);if(((0,a.isLocalProvider)(b)||k)&&404===r&&n&&u){let t=s.COOLDOWN_MS.notFoundLocal;return(0,l.lockModel)(n,e,u,"not_found",t),d.info("AUTH",`Model-only lockout for ${u} — 404 lockout ${t/1e3}s (connection stays active)`),{shouldFallback:!0,cooldownMs:t}}if(k&&429===r&&n&&u){let t=v||s.COOLDOWN_MS.rateLimit;return(0,l.lockModel)(n,e,u,$||"rate_limited",t),d.info("AUTH",`Model-only lockout for ${u} — 429 rate limit ${Math.ceil(t/1e3)}s (connection stays active)`),{shouldFallback:!0,cooldownMs:t}}let D=(0,l.getUnavailableUntil)(v),L="string"==typeof i?i.slice(0,100):"Provider error";if("codex"===n&&429===r&&u&&h){let i=(0,c.getCodexModelScope)(u),o=f(h.providerSpecificData.codexScopeRateLimitedUntil),a=U(h.providerSpecificData,u)||D,s=Math.max(new Date(a).getTime()-Date.now(),0);return await (0,t.updateProviderConnection)(e,{testStatus:"unavailable",lastError:L,errorCode:r,lastErrorAt:new Date().toISOString(),backoffLevel:S??y,providerSpecificData:{...h.providerSpecificData,codexScopeRateLimitedUntil:{...o,[i]:a}}}),s>0&&(0,l.lockModel)(n,e,u,$||"unknown",s),r&&L&&console.error(`❌ ${n} [${r}] (${i}): ${L}`),{shouldFallback:!0,cooldownMs:s}}if(await (0,t.updateProviderConnection)(e,{rateLimitedUntil:D,testStatus:"unavailable",lastError:L,errorCode:r,lastErrorAt:new Date().toISOString(),backoffLevel:S??y}),g.permanent)try{(await (0,o.getCachedSettings)()).autoDisableBannedAccounts&&(await (0,t.updateProviderConnection)(e,{isActive:!1}),d.info("AUTH",`Auto-disabled ${e.slice(0,8)} — permanent ban detected (autoDisableBannedAccounts=true)`))}catch(e){d.info("AUTH",`Auto-disable check failed (non-fatal): ${e}`)}return n&&u&&v>0&&(0,l.lockModel)(n,e,u,$||"unknown",v),n&&r&&L&&console.error(`❌ ${n} [${r}]: ${L}`),{shouldFallback:!0,cooldownMs:v}}finally{p&&p(),k.delete(e)}}async function E(e,r){(r.testStatus&&"active"!==r.testStatus||r.lastError||r.rateLimitedUntil||r.errorCode||r.lastErrorType||r.lastErrorSource)&&(await (0,t.updateProviderConnection)(e,{testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null,rateLimitedUntil:null,backoffLevel:0}),d.info("AUTH",`Account ${e.slice(0,8)} error cleared`))}async function C(e){e?.connectionId&&await E(e.connectionId,e)}async function P(e){return!!e&&await (0,r.validateApiKey)(e)}e.s(["clearAccountError",0,E,"clearRecoveredProviderState",0,C,"extractApiKey",0,function(e){let t=e.headers.get("Authorization");return t?.startsWith("Bearer ")?t.slice(7):null},"getProviderCredentials",0,D,"isValidApiKey",0,P,"markAccountUnavailable",0,L])},478847,e=>{"use strict";var t=e.i(287726);e.i(245272);var r=e.i(125852),i=e.i(362225),o=e.i(719201),n=e.i(16023),l=e.i(706901);let a=new Map;async function s(e,s){let c=(0,t.extractApiKey)(e);if(!c)return{apiKey:null,apiKeyInfo:null,rejection:null};let d=null;try{d=await (0,r.getApiKeyMetadata)(c)}catch(e){return l.error("API_POLICY","Failed to fetch API key metadata. Request blocked.",{error:e}),{apiKey:c,apiKeyInfo:null,rejection:(0,o.errorResponse)(n.HTTP_STATUS.SERVICE_UNAVAILABLE,"API key policy unavailable")}}if(!d)return{apiKey:c,apiKeyInfo:null,rejection:null};if(!1===d.isActive)return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.FORBIDDEN,"This API key is disabled")};if(d.accessSchedule&&d.accessSchedule.enabled&&!function(e){let t,r;if(!e.enabled)return!0;let i=new Date;try{t=new Intl.DateTimeFormat("en-US",{timeZone:e.tz,hour:"2-digit",minute:"2-digit",hour12:!1}).format(i)}catch{return!0}let[o,n]=t.replace(/^24:/,"00:").split(":").map(Number),l=60*o+n;try{r=new Intl.DateTimeFormat("en-US",{timeZone:e.tz,weekday:"short"}).format(i)}catch{return!0}let a={Sun:0,Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6}[r]??i.getDay();if(!e.days.includes(a))return!1;let[s,c]=e.from.split(":").map(Number),[d,u]=e.until.split(":").map(Number),f=60*s+c,p=60*d+u;return p<f?l>=f||l<p:l>=f&&l<p}(d.accessSchedule)){let{from:e,until:t,tz:r}=d.accessSchedule;return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.FORBIDDEN,`Access denied outside allowed hours (${e}–${t} ${r})`)}}if(s&&d.allowedModels&&d.allowedModels.length>0&&!await (0,r.isModelAllowedForKey)(c,s))return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.FORBIDDEN,`Model "${s}" is not allowed for this API key`)};if(d.id)try{let e=(0,i.checkBudget)(d.id);if(!e.allowed)return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.RATE_LIMITED,e.reason||"Budget limit exceeded")}}catch(e){return l.error("API_POLICY","Budget check failed. Request blocked.",{error:e}),{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.SERVICE_UNAVAILABLE,"Budget policy unavailable")}}if(d.id&&(d.maxRequestsPerDay||d.maxRequestsPerMinute)){let e=function(e,t,r){if(!t&&!r)return null;let i=Date.now(),o=a.get(e);if(!o&&(o=[],a.set(e,o),a.size>5e3)){let e=a.keys().next().value;e&&a.delete(e)}let n=i-864e5;for(;o.length>0&&o[0]<n;)o.shift();if(r&&r>0){let e=i-6e4;if(o.filter(t=>t>=e).length>=r)return`Per-minute request limit exceeded (${r} RPM). Try again in a few seconds.`}return t&&t>0&&o.length>=t?`Daily request limit exceeded (${t} RPD). Resets in ${Math.ceil((o[0]+864e5-i)/6e4)} minutes.`:(o.push(i),null)}(d.id,d.maxRequestsPerDay,d.maxRequestsPerMinute);if(e)return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.RATE_LIMITED,e)}}return{apiKey:c,apiKeyInfo:d,rejection:null}}e.s(["enforceApiKeyPolicy",0,s])}];
|
|
1
|
+
module.exports=[287726,e=>{"use strict";var t=e.i(254799);e.i(245272);var r=e.i(385498),i=e.i(125852),o=e.i(548941),n=e.i(403122),l=e.i(25687),a=e.i(441637),s=e.i(828059),c=e.i(16023),d=e.i(69373),u=e.i(706901),f=e.i(73114);function p(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function m(e){return"string"==typeof e&&e.trim().length>0?e:null}function A(e,t=0){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e&&e.trim().length>0){let r=Number(e);return Number.isFinite(r)?r:t}return t}function h(e){let t=p(e);return{id:m(t.id)||"",isActive:!0===t.isActive,rateLimitedUntil:m(t.rateLimitedUntil),testStatus:m(t.testStatus),apiKey:m(t.apiKey),accessToken:m(t.accessToken),refreshToken:m(t.refreshToken),tokenExpiresAt:m(t.tokenExpiresAt),expiresAt:m(t.expiresAt),projectId:m(t.projectId),providerSpecificData:p(t.providerSpecificData),lastUsedAt:m(t.lastUsedAt),consecutiveUseCount:A(t.consecutiveUseCount,0),priority:A(t.priority,999),lastError:m(t.lastError),lastErrorType:m(t.lastErrorType),lastErrorSource:m(t.lastErrorSource),errorCode:"string"==typeof t.errorCode||"number"==typeof t.errorCode?t.errorCode:null,backoffLevel:A(t.backoffLevel,0)}}function g(e,t){return"boolean"==typeof e?e:t}function y(e,t=90){return Math.min(100,Math.max(1,A(e,t)))}function U(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return t.length>0?t:null}function w(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"session (5h)"===t||"5h"===t||"five_hour"===t?"session":"weekly (7d)"===t||"7d"===t||"seven_day"===t?"weekly":t}function v(e,t){if(!t)return null;let r=(0,d.getCodexModelScope)(t),i=p(e.codexScopeRateLimitedUntil)[r];return"string"==typeof i&&i.trim().length>0?i:null}function T(e,t){let r=v(e.providerSpecificData,t);return!!r&&new Date(r).getTime()>Date.now()}function S(e){let t=(e.testStatus||"").trim().toLowerCase();return"credits_exhausted"===t||"banned"===t||"expired"===t}function $(e){if(!e)return null;let t=new Date(e).getTime();return!Number.isFinite(t)||t<=Date.now()?null:t}function b(e){return e.map(e=>({raw:e,ms:$(e)})).filter(e=>null!==e.ms).sort((e,t)=>e.ms-t.ms)[0]?.raw||null}let k=Promise.resolve(),D=new Map;async function L(e,i=null,n=null,s=null,c={}){let d,m=k;k=new Promise(e=>{d=e});try{let d,k;await m;let D=!0===c.allowSuppressedConnections,L=!0===c.bypassQuotaPolicy,E=(k=[e],"nvidia"===e&&k.push("nvidia_nim"),"nvidia_nim"===e&&k.push("nvidia"),[...new Set(k)]),C=[];for(let e of E){let t=await (0,r.getProviderConnections)({provider:e,isActive:!0});Array.isArray(t)&&C.push(...t)}let P=(Array.isArray(C)?C:[]).map(h).filter(e=>e.id.length>0);if(n&&n.length>0&&(P=P.filter(e=>n.includes(e.id))),u.debug("AUTH",`${e} | total connections: ${P.length}, excludeId: ${i||"none"}`),0===P.length){let t=[];for(let e of E){let i=await (0,r.getProviderConnections)({provider:e});Array.isArray(i)&&t.push(...i)}let i=(Array.isArray(t)?t:[]).map(h).filter(e=>e.id.length>0);if(u.debug("AUTH",`${e} | all connections (incl inactive): ${i.length}`),i.length>0){let t=(0,a.getEarliestRateLimitedUntil)(i);if(t)return u.warn("AUTH",`${e} | all ${i.length} accounts rate limited (${(0,a.formatRetryAfter)(t)})`),{allRateLimited:!0,retryAfter:t,retryAfterHuman:(0,a.formatRetryAfter)(t)};u.warn("AUTH",`${e} | ${i.length} accounts found but none active`),i.forEach(e=>{u.debug("AUTH",` → ${e.id?.slice(0,8)} | isActive=${e.isActive} | rateLimitedUntil=${e.rateLimitedUntil||"none"} | testStatus=${e.testStatus}`)})}return u.warn("AUTH",`No credentials for ${e}`),null}for(let e of P)!(e.backoffLevel>0)||S(e)||(0,a.isAccountUnavailable)(e.rateLimitedUntil)||(e.backoffLevel=0,(0,r.updateProviderConnection)(e.id,{backoffLevel:0,testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null}).catch(()=>{}));let M=P.filter(t=>!(i&&t.id===i||!D&&((0,a.isAccountUnavailable)(t.rateLimitedUntil)||S(t)||"codex"===e&&T(t,s)||s&&(0,a.isModelLocked)(e,t.id,s)))&&!0);if(u.debug("AUTH",`${e} | available: ${M.length}/${P.length}`),P.forEach(t=>{let r=i&&t.id===i,o=(0,a.isAccountUnavailable)(t.rateLimitedUntil),n=S(t),l="codex"===e&&T(t,s);if(r||o)u.debug("AUTH",` → ${t.id?.slice(0,8)} | ${r?"excluded":""} ${o?`rateLimited until ${t.rateLimitedUntil}`:""}${D&&o?" (retained for combo live test)":""}`);else if(n)u.debug("AUTH",D?` → ${t.id?.slice(0,8)} | retained terminal status=${t.testStatus} for combo live test`:` → ${t.id?.slice(0,8)} | skipped terminal status=${t.testStatus}`);else if(l){let e=v(t.providerSpecificData,s);u.debug("AUTH",D?` → ${t.id?.slice(0,8)} | retained codex scope-limited account until ${e} for combo live test`:` → ${t.id?.slice(0,8)} | codex scope-limited until ${e}`)}}),0===M.length){let t=(0,a.getEarliestRateLimitedUntil)(P)||("codex"===e?function(e,t){let r=null,i=1/0;for(let o of e){let e=v(o.providerSpecificData,t);if(!e)continue;let n=new Date(e).getTime();!(!Number.isFinite(n)||n<=Date.now())&&n<i&&(r=e,i=n)}return r}(P,s):null);if(t){let r=P.filter(e=>e.rateLimitedUntil&&new Date(e.rateLimitedUntil).getTime()>Date.now()).sort((e,t)=>new Date(e.rateLimitedUntil||0).getTime()-new Date(t.rateLimitedUntil||0).getTime())[0];return u.warn("AUTH",`${e} | all ${P.length} active accounts rate limited (${(0,a.formatRetryAfter)(t)}) | lastErrorCode=${r?.errorCode}, lastError=${r?.lastError?.slice(0,50)}`),{allRateLimited:!0,retryAfter:t,retryAfterHuman:(0,a.formatRetryAfter)(t),lastError:r?.lastError||null,lastErrorCode:r?.errorCode||null}}return u.warn("AUTH",`${e} | all ${P.length} accounts unavailable`),null}let I=M,x=[];if(L?M.length>0&&u.debug("AUTH",`${e} | bypassing quota policy for combo live test`):I=M.filter(t=>{let r=function(e,t){let r=function(e,t){let r=p(t.limitPolicy),i=(Array.isArray(r.windows)?r.windows:[]).map(U).filter(Boolean);if("codex"===e){var o,n;let e,l,a,s=(o=i,n=t,l=(e=p(n.codexLimitPolicy),{use5h:g(e.use5h,!0),useWeekly:g(e.useWeekly,!0)}),a=(a=[...o.map(w).filter(Boolean)]).filter(e=>"session"===e?l.use5h:"weekly"!==e||l.useWeekly),l.use5h&&a.push("session"),l.useWeekly&&a.push("weekly"),[...new Set(a)]);return{enabled:g(r.enabled,s.length>0),thresholdPercent:y(r.thresholdPercent),windows:s}}return{enabled:g(r.enabled,!1),thresholdPercent:y(r.thresholdPercent),windows:i}}(e,t.providerSpecificData);if(!r.enabled||0===r.windows.length)return{blocked:!1,reasons:[],resetAt:null};let i=[],o=[];for(let e of r.windows){let n=(0,l.getQuotaWindowStatus)(t.id,e,r.thresholdPercent);n?.reachedThreshold&&(i.push(`${e} usage ${Math.round(n.usedPercentage)}%`),o.push(n.resetAt))}return{blocked:i.length>0,reasons:i,resetAt:b(o)}}(e,t);return!r.blocked||(x.push({id:t.id,reasons:r.reasons,resetAt:r.resetAt}),!1)}),x.length>0&&u.info("AUTH",`${e} | quota policy filtered ${x.length} account(s): ${x.map(e=>`${e.id.slice(0,8)}(${e.reasons.join(", ")})`).join("; ")}`),0===I.length&&M.length>0){let t=b(x.map(e=>e.resetAt)),r=$(t),i=r?new Date(r).toISOString():new Date(Date.now()+3e5).toISOString();return{allRateLimited:!0,retryAfter:i,retryAfterHuman:(0,a.formatRetryAfter)(i),lastError:`All ${e} accounts reached configured quota threshold`,lastErrorCode:429}}let R=I.filter(e=>!(0,l.isAccountQuotaExhausted)(e.id)),H=I.filter(e=>(0,l.isAccountQuotaExhausted)(e.id)),F=R.length>0?[...R,...H]:I;H.length>0&&u.debug("AUTH",`${e} | quota-aware: ${R.length} with quota, ${H.length} exhausted`);let O=await (0,o.getSettings)(),_=O.fallbackStrategy||"fill-first";if("round-robin"===_){let t=A(O.stickyRoundRobinLimit,3);if(null!==i)d=[...F].sort((e,t)=>{let r=e.backoffLevel||0,i=t.backoffLevel||0;return r!==i?r-i:e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(e.lastUsedAt).getTime()-new Date(t.lastUsedAt).getTime():1:-1:(e.priority||999)-(t.priority||999)})[0],u.info("AUTH",`${e} round-robin: FALLBACK MODE - excluded ${i?.slice(0,8)}..., picked LRU ${d.id?.slice(0,8)}...`),await (0,r.updateProviderConnection)(d.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1});else{let i=[...F].sort((e,t)=>e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(t.lastUsedAt).getTime()-new Date(e.lastUsedAt).getTime():-1:1:(e.priority||999)-(t.priority||999))[0],o=i?.consecutiveUseCount||0;i&&i.lastUsedAt&&o<t?(d=i,u.debug("AUTH",`${e} round-robin: staying with ${i.id?.slice(0,8)}... (count=${o}/${t})`),await (0,r.updateProviderConnection)(d.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:(d.consecutiveUseCount||0)+1})):(d=[...F].sort((e,t)=>{let r=e.backoffLevel||0,i=t.backoffLevel||0;return r!==i?r-i:e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(e.lastUsedAt).getTime()-new Date(t.lastUsedAt).getTime():1:-1:(e.priority||999)-(t.priority||999)})[0],u.debug("AUTH",`${e} round-robin: switching to LRU ${d.id?.slice(0,8)}... (current count=${o} >= limit=${t} or no lastUsedAt)`),await (0,r.updateProviderConnection)(d.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1}))}}else if("p2c"===_)if(F.length<=2)d=F[0];else{let e=parseInt((0,t.randomUUID)().replace(/-/g,"").substring(0,8),16)%F.length,r=parseInt((0,t.randomUUID)().replace(/-/g,"").substring(0,8),16)%(F.length-1);r>=e&&r++;let i=F[e],o=F[r],n=(i.consecutiveUseCount||0)+10*!!i.lastError,l=(o.consecutiveUseCount||0)+10*!!o.lastError;d=n<=l?i:o}else if("random"===_){let e=parseInt((0,t.randomUUID)().replace(/-/g,"").substring(0,8),16)%F.length;d=F[e]}else if("least-used"===_)d=[...F].sort((e,t)=>e.lastUsedAt||t.lastUsedAt?e.lastUsedAt?t.lastUsedAt?new Date(e.lastUsedAt).getTime()-new Date(t.lastUsedAt).getTime():1:-1:(e.priority||999)-(t.priority||999))[0];else if("cost-optimized"===_)d=[...F].sort((e,t)=>(e.priority||999)-(t.priority||999))[0];else if("strict-random"===_){let t=F.map(e=>e.id),r=(0,f.getNextFromDeckSync)(`conn:${e}`,t);d=F.find(e=>e.id===r)||F[0]}else d=F[0];return{apiKey:d.apiKey,accessToken:d.accessToken,refreshToken:d.refreshToken,expiresAt:d.tokenExpiresAt||d.expiresAt||null,projectId:d.projectId,copilotToken:"string"==typeof d.providerSpecificData.copilotToken?d.providerSpecificData.copilotToken:null,providerSpecificData:d.providerSpecificData,connectionId:d.id,testStatus:d.testStatus,lastError:d.lastError,lastErrorType:d.lastErrorType,lastErrorSource:d.lastErrorSource,errorCode:d.errorCode,rateLimitedUntil:d.rateLimitedUntil}}finally{d&&d()}}async function E(e,t,i,o=null,l=null){let f,m=D.get(e)||Promise.resolve();D.set(e,new Promise(e=>{f=e}));try{if(await m,(0,a.hasPerModelQuota)(o)&&l&&(429===t||404===t)){let i=404===t?"not_found":"rate_limited",n=404===t?c.COOLDOWN_MS.notFoundLocal:c.COOLDOWN_MS.rateLimit;return(0,a.lockModel)(o,e,l,i,n),(0,r.updateProviderConnection)(e,{lastErrorType:i,lastError:`Model ${l} ${i}`,lastErrorAt:new Date().toISOString(),errorCode:t}).catch(()=>{}),u.info("AUTH",`Model-only lockout for ${o}:${l} — ${t} ${i} ${Math.ceil(n/1e3)}s (connection stays active)`),{shouldFallback:!0,cooldownMs:n}}let f=await (0,r.getProviderConnections)({provider:o}),A=(Array.isArray(f)?f:[]).map(h).filter(e=>e.id.length>0).find(t=>t.id===e),g=A?.backoffLevel||0;if(A&&S(A))return u.info("AUTH",`${e.slice(0,8)} terminal status=${A.testStatus}, skipping cooldown overwrite`),{shouldFallback:!0,cooldownMs:0};if(A?.rateLimitedUntil&&new Date(A.rateLimitedUntil).getTime()>Date.now())return u.info("AUTH",`${e.slice(0,8)} already marked unavailable (until ${A.rateLimitedUntil}), skipping duplicate mark`),{shouldFallback:!0,cooldownMs:new Date(A.rateLimitedUntil).getTime()-Date.now()};if("codex"===o&&l){let t=v(A?.providerSpecificData||{},l);if(t&&new Date(t).getTime()>Date.now())return u.info("AUTH",`${e.slice(0,8)} already scope-limited for ${(0,d.getCodexModelScope)(l)} (until ${t}), skipping duplicate mark`),{shouldFallback:!0,cooldownMs:new Date(t).getTime()-Date.now()}}let y=(0,a.checkFallbackError)(t,i,g,l,o),{shouldFallback:U,cooldownMs:w,newBackoffLevel:T,reason:$}=y;if(!U)return{shouldFallback:!1,cooldownMs:0};let b=A?.providerSpecificData?.baseUrl;o&&(0,s.getPassthroughProviders)().has(o);let k=(0,a.hasPerModelQuota)(o);if(((0,s.isLocalProvider)(b)||k)&&404===t&&o&&l){let t=c.COOLDOWN_MS.notFoundLocal;return(0,a.lockModel)(o,e,l,"not_found",t),u.info("AUTH",`Model-only lockout for ${l} — 404 lockout ${t/1e3}s (connection stays active)`),{shouldFallback:!0,cooldownMs:t}}if(k&&429===t&&o&&l){let t=w||c.COOLDOWN_MS.rateLimit;return(0,a.lockModel)(o,e,l,$||"rate_limited",t),u.info("AUTH",`Model-only lockout for ${l} — 429 rate limit ${Math.ceil(t/1e3)}s (connection stays active)`),{shouldFallback:!0,cooldownMs:t}}let D=(0,a.getUnavailableUntil)(w),L="string"==typeof i?i.slice(0,100):"Provider error";if("codex"===o&&429===t&&l&&A){let i=(0,d.getCodexModelScope)(l),n=p(A.providerSpecificData.codexScopeRateLimitedUntil),s=v(A.providerSpecificData,l)||D,c=Math.max(new Date(s).getTime()-Date.now(),0);return await (0,r.updateProviderConnection)(e,{testStatus:"unavailable",lastError:L,errorCode:t,lastErrorAt:new Date().toISOString(),backoffLevel:T??g,providerSpecificData:{...A.providerSpecificData,codexScopeRateLimitedUntil:{...n,[i]:s}}}),c>0&&(0,a.lockModel)(o,e,l,$||"unknown",c),t&&L&&console.error(`❌ ${o} [${t}] (${i}): ${L}`),{shouldFallback:!0,cooldownMs:c}}if(await (0,r.updateProviderConnection)(e,{rateLimitedUntil:D,testStatus:"unavailable",lastError:L,errorCode:t,lastErrorAt:new Date().toISOString(),backoffLevel:T??g}),y.permanent)try{(await (0,n.getCachedSettings)()).autoDisableBannedAccounts&&(await (0,r.updateProviderConnection)(e,{isActive:!1}),u.info("AUTH",`Auto-disabled ${e.slice(0,8)} — permanent ban detected (autoDisableBannedAccounts=true)`))}catch(e){u.info("AUTH",`Auto-disable check failed (non-fatal): ${e}`)}return o&&l&&w>0&&(0,a.lockModel)(o,e,l,$||"unknown",w),o&&t&&L&&console.error(`❌ ${o} [${t}]: ${L}`),{shouldFallback:!0,cooldownMs:w}}finally{f&&f(),D.delete(e)}}async function C(e,t){(t.testStatus&&"active"!==t.testStatus||t.lastError||t.rateLimitedUntil||t.errorCode||t.lastErrorType||t.lastErrorSource)&&(await (0,r.updateProviderConnection)(e,{testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null,rateLimitedUntil:null,backoffLevel:0}),u.info("AUTH",`Account ${e.slice(0,8)} error cleared`))}async function P(e){e?.connectionId&&await C(e.connectionId,e)}async function M(e){return!!e&&await (0,i.validateApiKey)(e)}e.s(["clearAccountError",0,C,"clearRecoveredProviderState",0,P,"extractApiKey",0,function(e){let t=e.headers.get("Authorization");return t?.startsWith("Bearer ")?t.slice(7):null},"getProviderCredentials",0,L,"isValidApiKey",0,M,"markAccountUnavailable",0,E])},478847,e=>{"use strict";var t=e.i(287726);e.i(245272);var r=e.i(125852),i=e.i(362225),o=e.i(719201),n=e.i(16023),l=e.i(706901);let a=new Map;async function s(e,s){let c=(0,t.extractApiKey)(e);if(!c)return{apiKey:null,apiKeyInfo:null,rejection:null};let d=null;try{d=await (0,r.getApiKeyMetadata)(c)}catch(e){return l.error("API_POLICY","Failed to fetch API key metadata. Request blocked.",{error:e}),{apiKey:c,apiKeyInfo:null,rejection:(0,o.errorResponse)(n.HTTP_STATUS.SERVICE_UNAVAILABLE,"API key policy unavailable")}}if(!d)return{apiKey:c,apiKeyInfo:null,rejection:null};if(!1===d.isActive)return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.FORBIDDEN,"This API key is disabled")};if(d.accessSchedule&&d.accessSchedule.enabled&&!function(e){let t,r;if(!e.enabled)return!0;let i=new Date;try{t=new Intl.DateTimeFormat("en-US",{timeZone:e.tz,hour:"2-digit",minute:"2-digit",hour12:!1}).format(i)}catch{return!0}let[o,n]=t.replace(/^24:/,"00:").split(":").map(Number),l=60*o+n;try{r=new Intl.DateTimeFormat("en-US",{timeZone:e.tz,weekday:"short"}).format(i)}catch{return!0}let a={Sun:0,Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6}[r]??i.getDay();if(!e.days.includes(a))return!1;let[s,c]=e.from.split(":").map(Number),[d,u]=e.until.split(":").map(Number),f=60*s+c,p=60*d+u;return p<f?l>=f||l<p:l>=f&&l<p}(d.accessSchedule)){let{from:e,until:t,tz:r}=d.accessSchedule;return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.FORBIDDEN,`Access denied outside allowed hours (${e}–${t} ${r})`)}}if(s&&d.allowedModels&&d.allowedModels.length>0&&!await (0,r.isModelAllowedForKey)(c,s))return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.FORBIDDEN,`Model "${s}" is not allowed for this API key`)};if(d.id)try{let e=(0,i.checkBudget)(d.id);if(!e.allowed)return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.RATE_LIMITED,e.reason||"Budget limit exceeded")}}catch(e){return l.error("API_POLICY","Budget check failed. Request blocked.",{error:e}),{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.SERVICE_UNAVAILABLE,"Budget policy unavailable")}}if(d.id&&(d.maxRequestsPerDay||d.maxRequestsPerMinute)){let e=function(e,t,r){if(!t&&!r)return null;let i=Date.now(),o=a.get(e);if(!o&&(o=[],a.set(e,o),a.size>5e3)){let e=a.keys().next().value;e&&a.delete(e)}let n=i-864e5;for(;o.length>0&&o[0]<n;)o.shift();if(r&&r>0){let e=i-6e4;if(o.filter(t=>t>=e).length>=r)return`Per-minute request limit exceeded (${r} RPM). Try again in a few seconds.`}return t&&t>0&&o.length>=t?`Daily request limit exceeded (${t} RPD). Resets in ${Math.ceil((o[0]+864e5-i)/6e4)} minutes.`:(o.push(i),null)}(d.id,d.maxRequestsPerDay,d.maxRequestsPerMinute);if(e)return{apiKey:c,apiKeyInfo:d,rejection:(0,o.errorResponse)(n.HTTP_STATUS.RATE_LIMITED,e)}}return{apiKey:c,apiKeyInfo:d,rejection:null}}e.s(["enforceApiKeyPolicy",0,s])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_0cbm0~g._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[123260,e=>{"use strict";var r=e.i(254799);process.env.API_KEY_SECRET||console.error("[SECURITY] API_KEY_SECRET is not set. API key CRC validation is disabled."),e.s(["generateApiKeyWithMachine",0,function(e){let t,i=
|
|
1
|
+
module.exports=[123260,e=>{"use strict";var r=e.i(254799);process.env.API_KEY_SECRET||console.error("[SECURITY] API_KEY_SECRET is not set. API key CRC validation is disabled."),e.s(["generateApiKeyWithMachine",0,function(e){let t,i=r.default.randomBytes(3).toString("hex"),s=(t=function(){let e=process.env.API_KEY_SECRET||"omniroute-default-insecure-api-key-secret";if(!e||""===e.trim())throw Error("API_KEY_SECRET is required for API key CRC operations");return e}(),r.default.createHmac("sha256",t).update(e+i).digest("hex").slice(0,8));return{key:`sk-${e}-${i}-${s}`,keyId:i}}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_shared_utils_apiKey_ts_0gzf59_._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[65448,e=>{"use strict";var r=e.i(254799);process.env.API_KEY_SECRET||console.error("[SECURITY] API_KEY_SECRET is not set. API key CRC validation is disabled."),e.s(["generateApiKeyWithMachine",0,function(e){let t,i=
|
|
1
|
+
module.exports=[65448,e=>{"use strict";var r=e.i(254799);process.env.API_KEY_SECRET||console.error("[SECURITY] API_KEY_SECRET is not set. API key CRC validation is disabled."),e.s(["generateApiKeyWithMachine",0,function(e){let t,i=r.default.randomBytes(3).toString("hex"),s=(t=function(){let e=process.env.API_KEY_SECRET||"omniroute-default-insecure-api-key-secret";if(!e||""===e.trim())throw Error("API_KEY_SECRET is required for API key CRC operations");return e}(),r.default.createHmac("sha256",t).update(e+i).digest("hex").slice(0,8));return{key:`sk-${e}-${i}-${s}`,keyId:i}}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_shared_utils_apiKey_ts_12~h.oz._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[113792,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.
|
|
1
|
+
module.exports=[113792,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.8",description:"Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3","js-yaml":"^4.1.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",yazl:"^3.3.1",zod:"^4.3.6",zustand:"^5.0.10"},optionalDependencies:{keytar:"^7.9.0"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",c8:"^11.0.0",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7",jsdom:"^29.0.1","lint-staged":"^16.2.7",prettier:"^3.8.1","prop-types":"^15.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{"lodash-es":"^4.18.1",dompurify:"^3.3.2","path-to-regexp":"^8.4.0",react:"$react","react-dom":"$react-dom"}}])},978251,a=>a.a(async(b,c)=>{try{var d=a.i(677850),e=b([d]);[d]=e.then?(await e)():e;let f=d.z.object({id:d.z.string().min(1),alias:d.z.string().min(1).optional(),name:d.z.string().min(1),icon:d.z.string().min(1),color:d.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.z.string().optional(),website:d.z.string().url().optional(),passthroughModels:d.z.boolean().optional(),deprecated:d.z.boolean().optional(),deprecationReason:d.z.string().optional(),hasFree:d.z.boolean().optional(),freeNote:d.z.string().optional(),authHint:d.z.string().optional(),apiHint:d.z.string().optional()}),g=d.z.record(d.z.string(),f);a.s(["validateProviders",0,function(a,b){let c=g.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
|
|
2
2
|
${a}`),Error(`Provider validation failed for ${b}`)}}]),c()}catch(a){c(a)}},!1),549276,a=>a.a(async(b,c)=>{try{var d=a.i(978251),e=b([d]);[d]=e.then?(await e)():e;let f={qoder:{id:"qoder",alias:"if",name:"Qoder AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gemini-cli",name:"Gemini CLI",icon:"terminal",color:"#4285F4",deprecated:!0,deprecationReason:"Google restricts third-party OAuth usage for Gemini CLI (Mar 2026). Pro models require paid plans. Use 'gemini' (API key) provider instead."},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},g={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:void 0,name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},"kimi-coding":{id:"kimi-coding",alias:"kmc",name:"Kimi Coding",icon:"psychology",color:"#1E40AF",textIcon:"KC"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},h={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"bailian-coding-plan":{id:"bailian-coding-plan",alias:"bcp",name:"Alibaba Coding Plan",icon:"code",color:"#FF6A00",textIcon:"BCP",website:"https://www.alibabacloud.com/help/en/model-studio/coding-plan"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},"kimi-coding-apikey":{id:"kimi-coding-apikey",alias:"kmca",name:"Kimi Coding (API Key)",icon:"psychology",color:"#1E40AF",textIcon:"KC",website:"https://kimi.com"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://bailian.console.aliyun.com"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://modelstudio.console.alibabacloud.com"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini (Google AI Studio)",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",hasFree:!0,freeNote:"Free forever: 1,500 req/day for Gemini 2.5 Flash — no credit card, get key at aistudio.google.com"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com",hasFree:!0,freeNote:"Free tier: 30 RPM / 14.4K RPD — no credit card"},blackbox:{id:"blackbox",alias:"bb",name:"Blackbox AI",icon:"view_in_ar",color:"#1A1A2E",textIcon:"BB",website:"https://blackbox.ai"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai",hasFree:!0,freeNote:"$25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://inference.cerebras.ai",hasFree:!0,freeNote:"Free: 1M tokens/day, 60K TPM — world's fastest inference"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://build.nvidia.com",hasFree:!0,freeNote:"Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...)"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",name:"Ollama Cloud",icon:"cloud",color:"#58A6FF",textIcon:"OC",website:"https://ollama.com/settings/api-keys"},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io"},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai"},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht"},inworld:{id:"inworld",alias:"inworld",name:"Inworld",icon:"voice_chat",color:"#7B2EF2",textIcon:"IW",website:"https://inworld.ai"},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui"},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI"},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",hasFree:!0,freeNote:"Free Inference API for thousands of models (Whisper, VITS, SDXL…)"},synthetic:{id:"synthetic",alias:"synthetic",name:"Synthetic",icon:"verified_user",color:"#6366F1",textIcon:"SY",website:"https://synthetic.new",passthroughModels:!0},"kilo-gateway":{id:"kilo-gateway",alias:"kg",name:"Kilo Gateway",icon:"hub",color:"#617A91",textIcon:"KG",website:"https://kilo.ai",passthroughModels:!0},vertex:{id:"vertex",alias:"vertex",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VA",website:"https://cloud.google.com/vertex-ai",authHint:"Provide Service Account JSON or OAuth access_token"},zai:{id:"zai",alias:"zai",name:"Z.AI",icon:"psychology",color:"#2563EB",textIcon:"ZA",website:"https://open.bigmodel.cn",apiHint:"API key from https://open.bigmodel.cn/usercenter/apikeys"},"perplexity-search":{id:"perplexity-search",alias:"pplx-search",name:"Perplexity Search",icon:"search",color:"#20808D",textIcon:"PS",website:"https://docs.perplexity.ai/guides/search-quickstart",authHint:"Same API key as Perplexity (pplx-...)"},"serper-search":{id:"serper-search",alias:"serper-search",name:"Serper Search",icon:"search",color:"#4285F4",textIcon:"SP",website:"https://serper.dev",authHint:"API key from serper.dev dashboard"},"brave-search":{id:"brave-search",alias:"brave-search",name:"Brave Search",icon:"travel_explore",color:"#FB542B",textIcon:"BR",website:"https://brave.com/search/api",authHint:"Subscription token from Brave Search API dashboard"},"exa-search":{id:"exa-search",alias:"exa-search",name:"Exa Search",icon:"neurology",color:"#1E40AF",textIcon:"EX",website:"https://exa.ai",authHint:"API key from dashboard.exa.ai"},"tavily-search":{id:"tavily-search",alias:"tavily-search",name:"Tavily Search",icon:"manage_search",color:"#5B4FDB",textIcon:"TV",website:"https://tavily.com",authHint:"API key from app.tavily.com (format: tvly-...)"},"opencode-zen":{id:"opencode-zen",alias:"opencode-zen",name:"OpenCode Zen",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen"},"opencode-go":{id:"opencode-go",alias:"opencode-go",name:"OpenCode Go",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen/go"},alibaba:{id:"alibaba",alias:"ali",name:"Alibaba Cloud (DashScope)",icon:"cloud_queue",color:"#FF6600",textIcon:"AL",website:"https://dashscope-intl.aliyuncs.com",hasFree:!1},longcat:{id:"longcat",alias:"lc",name:"LongCat AI",icon:"auto_awesome",color:"#FF6B9D",textIcon:"LC",website:"https://longcat.chat",hasFree:!0,freeNote:"50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) — 100% free while public beta"},pollinations:{id:"pollinations",alias:"pol",name:"Pollinations AI",icon:"local_florist",color:"#4CAF50",textIcon:"PO",website:"https://pollinations.ai",hasFree:!0,freeNote:"No API key needed — access GPT-5, Claude, Gemini, DeepSeek V3, Llama 4 free (1 req/15s)"},puter:{id:"puter",alias:"pu",name:"Puter AI",icon:"cloud_circle",color:"#6366F1",textIcon:"PU",website:"https://puter.com",hasFree:!0,freeNote:"500+ models (GPT-5, Claude Opus 4, Gemini 3 Pro, Grok 4, DeepSeek V3...) — Users pay via free Puter account",passthroughModels:!0,authHint:"Get token at puter.com/dashboard → Copy Auth Token"},"cloudflare-ai":{id:"cloudflare-ai",alias:"cf",name:"Cloudflare Workers AI",icon:"cloud",color:"#F48120",textIcon:"CF",website:"https://developers.cloudflare.com/workers-ai/",hasFree:!0,freeNote:"Free 10K Neurons/day: ~150 LLM responses or 500s Whisper audio — edge inference globally",authHint:"Requires API Token AND Account ID (found at dash.cloudflare.com)"},scaleway:{id:"scaleway",alias:"scw",name:"Scaleway AI",icon:"cloud",color:"#4F0599",textIcon:"SCW",website:"https://www.scaleway.com/en/ai/generative-apis/",hasFree:!0,freeNote:"1M free tokens for new accounts — EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B"},aimlapi:{id:"aimlapi",alias:"aiml",name:"AI/ML API",icon:"hub",color:"#6366F1",textIcon:"AI",website:"https://aimlapi.com",hasFree:!0,freeNote:"$0.025/day free credits — 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint",passthroughModels:!0},novita:{id:"novita",alias:"novita",name:"Novita AI",icon:"auto_awesome",color:"#FF4081",textIcon:"NV",website:"https://novita.ai",passthroughModels:!0},piapi:{id:"piapi",alias:"pi",name:"PiAPI",icon:"api",color:"#7C4DFF",textIcon:"PI",website:"https://piapi.ai",passthroughModels:!0},getgoapi:{id:"getgoapi",alias:"ggo",name:"GoAPI",icon:"rocket_launch",color:"#FF6D00",textIcon:"GO",website:"https://api.getgoapi.com",passthroughModels:!0},laozhang:{id:"laozhang",alias:"lz",name:"LaoZhang AI",icon:"hub",color:"#FF1744",textIcon:"LZ",website:"https://api.laozhang.ai",passthroughModels:!0}},i={...f,...g,...h,cliproxyapi:{id:"cliproxyapi",alias:"cpa",name:"CLIProxyAPI",icon:"proxy",color:"#6366F1",textIcon:"CPA",website:"https://github.com/router-for-me/CLIProxyAPI",defaultPort:8317,healthEndpoint:"/v1/models",managementPrefix:"/v0/management",configDir:"~/.cli-proxy-api",binaryName:"cli-proxy-api",githubRepo:"router-for-me/CLIProxyAPI"}};Object.values(i).reduce((a,b)=>(b.alias&&(a[b.alias]=b.id),a),{}),Object.values(i).reduce((a,b)=>(a[b.id]=b.alias||b.id,a),{}),(0,d.validateProviders)(f,"FREE_PROVIDERS"),(0,d.validateProviders)(g,"OAUTH_PROVIDERS"),(0,d.validateProviders)(h,"APIKEY_PROVIDERS"),a.s(["AI_PROVIDERS",0,i,"APIKEY_PROVIDERS",0,h,"FREE_PROVIDERS",0,f,"OAUTH_PROVIDERS",0,g]),c()}catch(a){c(a)}},!1),728972,a=>a.a(async(b,c)=>{try{var d=a.i(958301),e=a.i(549276),f=b([e]);[e]=f.then?(await f)():f,Object.entries(e.AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.PROVIDER_MODELS).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),a.s([]),c()}catch(a){c(a)}},!1),895812,a=>a.a(async(b,c)=>{try{var d=a.i(113792),e=a.i(549276),f=a.i(728972),g=b([e,f]);[e,f]=g.then?(await g)():g;let h={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:d.default.version};a.s(["APP_CONFIG",0,h]),c()}catch(a){c(a)}},!1),831575,a=>a.a(async(b,c)=>{try{var d=a.i(907997),e=a.i(395936),f=a.i(442979),g=a.i(895812),h=a.i(549276),i=b([g,h]);[g,h]=i.then?(await i)():i;let k=[{path:"/v1/chat/completions",method:"POST",noteKey:"endpointChatNote"},{path:"/v1/responses",method:"POST",noteKey:"endpointResponsesNote"},{path:"/v1/models",method:"GET",noteKey:"endpointModelsNote"},{path:"/v1/embeddings",method:"POST",noteKey:"endpointEmbeddingsNote"},{path:"/v1/audio/transcriptions",method:"POST",noteKey:"endpointAudioNote"},{path:"/v1/audio/speech",method:"POST",noteKey:"endpointSpeechNote"},{path:"/v1/images/generations",method:"POST",noteKey:"endpointImagesNote"},{path:"/chat/completions",method:"POST",noteKey:"endpointRewriteChatNote"},{path:"/responses",method:"POST",noteKey:"endpointRewriteResponsesNote"},{path:"/models",method:"GET",noteKey:"endpointRewriteModelsNote"}],l=[{path:"/api/v1/management/proxies",method:"GET",noteKey:"mgmtProxiesListNote"},{path:"/api/v1/management/proxies",method:"POST",noteKey:"mgmtProxiesCreateNote"},{path:"/api/v1/management/proxies/health",method:"GET",noteKey:"mgmtProxiesHealthNote"},{path:"/api/v1/management/proxies/bulk-assign",method:"PUT",noteKey:"mgmtProxiesBulkAssignNote"},{path:"/api/v1/management/proxies/assignments",method:"GET",noteKey:"mgmtAssignmentsListNote"},{path:"/api/v1/management/proxies/assignments",method:"PUT",noteKey:"mgmtAssignmentsUpdateNote"},{path:"/api/settings/proxies/migrate",method:"POST",noteKey:"mgmtLegacyMigrationNote"}],m=[{icon:"hub",titleKey:"featureRoutingTitle",textKey:"featureRoutingText"},{icon:"layers",titleKey:"featureCombosTitle",textKey:"featureCombosText"},{icon:"bar_chart",titleKey:"featureUsageTitle",textKey:"featureUsageText"},{icon:"analytics",titleKey:"featureAnalyticsTitle",textKey:"featureAnalyticsText"},{icon:"health_and_safety",titleKey:"featureHealthTitle",textKey:"featureHealthText"},{icon:"terminal",titleKey:"featureCliTitle",textKey:"featureCliText"},{icon:"shield",titleKey:"featureSecurityTitle",textKey:"featureSecurityText"},{icon:"cloud_sync",titleKey:"featureCloudSyncTitle",textKey:"featureCloudSyncText"}],n=[{titleKey:"useCaseSingleEndpointTitle",textKey:"useCaseSingleEndpointText"},{titleKey:"useCaseFallbackTitle",textKey:"useCaseFallbackText"},{titleKey:"useCaseUsageVisibilityTitle",textKey:"useCaseUsageVisibilityText"}],o=["troubleshootingModelRouting","troubleshootingAmbiguousModels","troubleshootingCodexFamily","troubleshootingTestConnection","troubleshootingCircuitBreaker","troubleshootingOAuth"],p=[{href:"#quick-start",labelKey:"quickStart"},{href:"#features",labelKey:"features"},{href:"#supported-providers",labelKey:"supportedProvidersToc"},{href:"#use-cases",labelKey:"commonUseCases"},{href:"#client-compatibility",labelKey:"clientCompatibility"},{href:"#protocols",labelKey:"protocolsToc"},{href:"#api-reference",labelKey:"apiReference"},{href:"#management-api",labelKey:"managementApiReference"},{href:"#model-prefixes",labelKey:"modelPrefixes"},{href:"#troubleshooting",labelKey:"troubleshooting"}];function j({title:a,providers:b,colorDot:c}){let e=(0,f.useTranslations)("docs"),g=Object.values(b);return(0,d.jsxs)("div",{className:"rounded-lg border border-border bg-bg p-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,d.jsx)("span",{className:`size-2.5 rounded-full ${c}`}),(0,d.jsx)("h3",{className:"font-semibold",children:a}),(0,d.jsx)("span",{className:"text-xs text-text-muted ml-auto",children:e("providersCount",{count:g.length})})]}),(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-1 text-sm",children:g.map(a=>(0,d.jsxs)("div",{className:"flex items-center justify-between py-1.5 border-b border-border/40 last:border-0",children:[(0,d.jsx)("span",{className:"font-medium",children:a.name}),(0,d.jsxs)("code",{className:"text-xs text-text-muted px-1.5 py-0.5 rounded bg-bg-subtle",children:[a.alias,"/"]})]},a.id))})]})}a.s(["default",0,function(){let a=(0,f.useTranslations)("docs"),b=Object.keys(h.FREE_PROVIDERS).length+Object.keys(h.OAUTH_PROVIDERS).length+Object.keys(h.APIKEY_PROVIDERS).length,c=k.map(b=>({...b,note:a(b.noteKey)})),i=l.map(b=>({...b,note:a(b.noteKey)})),q=m.map(b=>({...b,title:a(b.titleKey),text:a(b.textKey)})),r=n.map(b=>({...b,title:a(b.titleKey),text:a(b.textKey)})),s=o.map(b=>a(b)),t=p.map(b=>({...b,label:a(b.labelKey)})),u=[...Object.values(h.FREE_PROVIDERS).map(a=>({...a,type:"free"})),...Object.values(h.OAUTH_PROVIDERS).map(a=>({...a,type:"oauth"})),...Object.values(h.APIKEY_PROVIDERS).map(a=>({...a,type:"apiKey"}))];return(0,d.jsx)("div",{className:"min-h-screen bg-bg text-text-main",children:(0,d.jsxs)("div",{className:"mx-auto max-w-6xl px-4 sm:px-6 lg:px-8 py-10 md:py-14 flex flex-col gap-8",children:[(0,d.jsx)("header",{className:"rounded-2xl border border-border bg-bg-subtle p-6 md:p-8",children:(0,d.jsxs)("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-xs uppercase tracking-wider text-text-muted",children:a("documentationVersion",{version:g.APP_CONFIG.version})}),(0,d.jsxs)("h1",{className:"text-3xl md:text-4xl font-bold mt-1",children:[g.APP_CONFIG.name," ",a("docsLabel")]}),(0,d.jsx)("p",{className:"text-sm md:text-base text-text-muted mt-2 max-w-3xl",children:a("docsHeroDescription")})]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(e.default,{href:"/dashboard",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("openDashboard")}),(0,d.jsx)(e.default,{href:"/dashboard/endpoint",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("endpointPage")}),(0,d.jsxs)("a",{href:"https://github.com/diegosouzapw/OmniRoute",target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors flex items-center gap-1",children:[a("github")," ",(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"open_in_new"})]}),(0,d.jsx)("a",{href:"https://github.com/diegosouzapw/OmniRoute/issues",target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("reportIssue")})]})]})}),(0,d.jsxs)("nav",{className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-sm font-semibold uppercase tracking-wider text-text-muted mb-3",children:a("onThisPage")}),(0,d.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-2 text-sm",children:t.map(a=>(0,d.jsxs)("a",{href:a.href,className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-border hover:bg-bg transition-colors",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"tag"}),a.label]},a.href))})]}),(0,d.jsxs)("section",{id:"quick-start",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("quickStart")}),(0,d.jsxs)("ol",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 gap-3 text-sm",children:[(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep1Title")}),(0,d.jsxs)("p",{className:"text-text-muted mt-1",children:[a("quickStartStep1Prefix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"npx omniroute"})," ",a("quickStartStep1Middle")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"npm start"}),"."]})]}),(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep2Title")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("quickStartStep2Text")})]}),(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep3Title")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("quickStartStep3Text")})]}),(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep4Title")}),(0,d.jsxs)("p",{className:"text-text-muted mt-1",children:[a("quickStartStep4Prefix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"https://<host>/v1"}),"."," ",a("quickStartStep4Suffix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"gh/gpt-5.1-codex"}),"."]})]})]})]}),(0,d.jsxs)("section",{id:"features",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("features")}),(0,d.jsx)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 gap-3",children:q.map(a=>(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg flex gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary shrink-0 mt-0.5",children:a.icon}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"font-semibold text-sm",children:a.title}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-1",children:a.text})]})]},a.titleKey))})]}),(0,d.jsxs)("section",{id:"supported-providers",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("supportedProviders")}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-1",children:a("providersAcrossConnectionTypes",{count:b})})]}),(0,d.jsx)(e.default,{href:"/dashboard/providers",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("manageProviders")})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-3",children:[(0,d.jsx)(j,{title:a("providerTypeFree"),providers:h.FREE_PROVIDERS,colorDot:"bg-green-500"}),(0,d.jsx)(j,{title:a("providerTypeOAuth"),providers:h.OAUTH_PROVIDERS,colorDot:"bg-blue-500"}),(0,d.jsx)(j,{title:a("providerTypeApiKey"),providers:h.APIKEY_PROVIDERS,colorDot:"bg-amber-500"})]})]}),(0,d.jsxs)("section",{id:"use-cases",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("commonUseCases")}),(0,d.jsx)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-3 gap-3",children:r.map(a=>(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a.title}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-2",children:a.text})]},a.titleKey))})]}),(0,d.jsxs)("section",{id:"client-compatibility",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("clientCompatibility")}),(0,d.jsxs)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 gap-3 text-sm",children:[(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientCherryStudioTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("baseUrlLabel"),":"," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"https://<host>/v1"})]}),(0,d.jsxs)("li",{children:[a("chatEndpointLabel"),":"," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"/chat/completions"})]}),(0,d.jsxs)("li",{children:[a("modelRecommendationLabel")," (",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"gh/..."}),","," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"cc/..."}),")"]})]})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientCodexTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("clientCodexBullet1")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"gh/"}),"."]}),(0,d.jsxs)("li",{children:[a("clientCodexBullet2")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"/responses"}),"."]}),(0,d.jsxs)("li",{children:[a("clientCodexBullet3")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"/chat/completions"}),"."]})]})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientCursorTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("clientCursorBullet1")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"cu/"})," ",a("clientCursorBullet1Suffix")]}),(0,d.jsx)("li",{children:a("clientCursorBullet2")}),(0,d.jsx)("li",{children:a("supportsChat")})]})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientClaudeTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("clientClaudeBullet1Prefix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"cc/"})," ",a("clientClaudeBullet1Middle")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"antigravity/"})," ",a("clientClaudeBullet1Suffix")]}),(0,d.jsx)("li",{children:a("oauthAutoRefresh")}),(0,d.jsx)("li",{children:a("fullStreaming")})]})]})]})]}),(0,d.jsxs)("section",{id:"protocols",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("protocolsTitle")}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-2",children:a("protocolsDescription")}),(0,d.jsxs)("div",{className:"mt-4 grid grid-cols-1 lg:grid-cols-2 gap-4 text-sm",children:[(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("protocolMcpTitle")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("protocolMcpDesc")}),(0,d.jsxs)("ol",{className:"mt-3 list-decimal list-inside space-y-1 text-text-muted",children:[(0,d.jsx)("li",{children:a("protocolMcpStep1")}),(0,d.jsx)("li",{children:a("protocolMcpStep2")}),(0,d.jsx)("li",{children:a("protocolMcpStep3")})]}),(0,d.jsx)("pre",{className:"mt-3 p-3 rounded-lg border border-border bg-bg overflow-x-auto text-xs",children:(0,d.jsx)("code",{children:"omniroute --mcp"})})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("protocolA2aTitle")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("protocolA2aDesc")}),(0,d.jsxs)("ol",{className:"mt-3 list-decimal list-inside space-y-1 text-text-muted",children:[(0,d.jsx)("li",{children:a("protocolA2aStep1")}),(0,d.jsx)("li",{children:a("protocolA2aStep2")}),(0,d.jsx)("li",{children:a("protocolA2aStep3")})]}),(0,d.jsx)("pre",{className:"mt-3 p-3 rounded-lg border border-border bg-bg overflow-x-auto text-xs",children:(0,d.jsx)("code",{children:`GET /.well-known/agent.json
|
|
3
3
|
POST /a2a (JSON-RPC: message/send | message/stream)`})})]})]}),(0,d.jsxs)("div",{className:"mt-4 rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("protocolTroubleshootingTitle")}),(0,d.jsxs)("ul",{className:"mt-2 list-disc list-inside text-sm text-text-muted space-y-1",children:[(0,d.jsx)("li",{children:a("protocolTroubleshooting1")}),(0,d.jsx)("li",{children:a("protocolTroubleshooting2")}),(0,d.jsx)("li",{children:a("protocolTroubleshooting3")})]})]})]}),(0,d.jsxs)("section",{id:"api-reference",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("apiReference")}),(0,d.jsx)("div",{className:"mt-4 overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm border-collapse",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("method")}),(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("path")}),(0,d.jsx)("th",{className:"text-left py-2",children:a("notes")})]})}),(0,d.jsx)("tbody",{children:c.map(a=>(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsx)("td",{className:"py-2 pr-4",children:(0,d.jsx)("code",{className:"px-1.5 py-0.5 rounded bg-bg text-xs font-semibold",children:a.method})}),(0,d.jsx)("td",{className:"py-2 pr-4 font-mono",children:a.path}),(0,d.jsx)("td",{className:"py-2 text-text-muted",children:a.note})]},a.path))})]})})]}),(0,d.jsxs)("section",{id:"model-prefixes",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("modelPrefixes")}),(0,d.jsxs)("p",{className:"text-sm text-text-muted mt-2 mb-4",children:[a("modelPrefixesDescriptionStart")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg",children:"gh/gpt-5.1-codex"})," ",a("modelPrefixesDescriptionEnd")]}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm border-collapse",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("prefix")}),(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("provider")}),(0,d.jsx)("th",{className:"text-left py-2",children:a("type")})]})}),(0,d.jsx)("tbody",{children:u.map(b=>{var c;return(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsx)("td",{className:"py-2 pr-4 font-mono",children:(0,d.jsxs)("code",{className:"px-1.5 py-0.5 rounded bg-bg",children:[b.alias,"/"]})}),(0,d.jsx)("td",{className:"py-2 pr-4",children:b.name}),(0,d.jsx)("td",{className:"py-2",children:(0,d.jsxs)("span",{className:`inline-flex items-center gap-1 text-xs ${"free"===b.type?"text-green-500":"oauth"===b.type?"text-blue-500":"text-amber-500"}`,children:[(0,d.jsx)("span",{className:`size-1.5 rounded-full ${"free"===b.type?"bg-green-500":"oauth"===b.type?"bg-blue-500":"bg-amber-500"}`}),(c=b.type,"free"===c?a("providerTypeFree"):"oauth"===c?a("providerTypeOAuth"):a("providerTypeApiKey"))]})})]},b.id)})})]})})]}),(0,d.jsxs)("section",{id:"management-api",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("managementApiReference")}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-2",children:a("managementApiDescription")}),(0,d.jsx)("div",{className:"mt-4 overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm border-collapse",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("method")}),(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("path")}),(0,d.jsx)("th",{className:"text-left py-2",children:a("notes")})]})}),(0,d.jsx)("tbody",{children:i.map(a=>(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsx)("td",{className:"py-2 pr-4",children:(0,d.jsx)("code",{className:"px-1.5 py-0.5 rounded bg-bg text-xs font-semibold",children:a.method})}),(0,d.jsx)("td",{className:"py-2 pr-4 font-mono",children:a.path}),(0,d.jsx)("td",{className:"py-2 text-text-muted",children:a.note})]},`${a.method}:${a.path}`))})]})})]}),(0,d.jsxs)("section",{id:"troubleshooting",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("troubleshooting")}),(0,d.jsx)("ul",{className:"mt-4 list-disc list-inside text-sm text-text-muted space-y-2",children:s.map(a=>(0,d.jsx)("li",{children:a},a))})]})]})})}]),c()}catch(a){c(a)}},!1),665554,a=>{a.n(a.i(831575))}];
|
|
4
4
|
|