omniroute 3.0.0 → 3.0.1
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 +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- 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-log/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/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/mcp/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/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/profile/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/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/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 +2 -2
- 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/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]__051203a6._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__61d78f9d._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__afddb4ce._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__e27a89bd._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__fd2fbc93._.js +1 -1
- package/app/.next/server/chunks/_05c48915._.js +1 -1
- package/app/.next/server/chunks/_06515a8a._.js +1 -1
- package/app/.next/server/chunks/_2115d8de._.js +1 -1
- package/app/.next/server/chunks/_3ac953eb._.js +1 -1
- package/app/.next/server/chunks/_4b8fd853._.js +1 -1
- package/app/.next/server/chunks/_68683848._.js +1 -1
- package/app/.next/server/chunks/_6f1b3c3f._.js +1 -1
- package/app/.next/server/chunks/_ee9b677b._.js +1 -1
- package/app/.next/server/chunks/_efd5ede2._.js +2 -2
- package/app/.next/server/chunks/_ffda39da._.js +1 -1
- package/app/.next/server/chunks/open-sse_translator_index_ts_f5fd0821._.js +1 -1
- package/app/.next/server/chunks/src_6320c728._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
- package/app/.next/server/chunks/ssr/_f3674909._.js +1 -1
- package/app/.next/server/chunks/ssr/src_a82a42f9._.js +1 -1
- package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_936a9ee0._.js +1 -1
- package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_settings_9e20fb8d._.js +1 -1
- package/app/.next/server/pages/500.html +2 -2
- 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/26aeb12cf79339b1.js +1 -0
- package/app/.next/static/chunks/{80658e0c2b2c7004.js → 633a312ddcf9fa11.js} +1 -1
- package/app/.next/static/chunks/7df0b3c357097db5.js +1 -0
- package/app/.next/static/chunks/a051245b46459ad2.css +1 -0
- package/app/.next/static/chunks/d188e358e1ec0a7d.js +1 -0
- package/app/.next/static/chunks/{4e3fe685e3218d24.js → fa9e2a946d2cdbc7.js} +1 -1
- package/app/CHANGELOG.md +122 -68
- package/app/docs/i18n/ru/README.md +3 -3
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/handlers/chatCore.ts +9 -2
- package/app/open-sse/handlers/responseTranslator.ts +13 -3
- package/app/open-sse/services/usage.ts +22 -9
- package/app/open-sse/translator/request/openai-to-claude.ts +10 -2
- package/app/package-lock.json +2 -2
- package/app/package.json +1 -1
- package/app/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +198 -63
- package/app/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx +123 -19
- package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx +22 -24
- package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx +5 -0
- package/app/src/lib/providers/validation.ts +21 -0
- package/app/src/shared/components/ProxyConfigModal.tsx +42 -13
- package/package.json +1 -1
- package/app/.next/static/chunks/594bdf69c19b5310.js +0 -1
- package/app/.next/static/chunks/643428fcd3f9bb51.js +0 -1
- package/app/.next/static/chunks/8efe14530c87d9f6.css +0 -1
- package/app/.next/static/chunks/d0cff7a6c3a66c7d.js +0 -1
- /package/app/.next/static/{cQZnxkFFvb8O7T4x7OSsG → bF7pUIj1e9VsHgSW5x9WX}/_buildManifest.js +0 -0
- /package/app/.next/static/{cQZnxkFFvb8O7T4x7OSsG → bF7pUIj1e9VsHgSW5x9WX}/_clientMiddlewareManifest.json +0 -0
- /package/app/.next/static/{cQZnxkFFvb8O7T4x7OSsG → bF7pUIj1e9VsHgSW5x9WX}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[352812,e=>{"use strict";var t=e.i(496727);let n="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function o(){return`call_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,9)}`}function s(e,t){if(!e.messages||!Array.isArray(e.messages))return e;let s=t?.use9CharId===!0;for(let t=0;t<e.messages.length;t++){let r=e.messages[t];if("assistant"!==r.role||!r.tool_calls||!Array.isArray(r.tool_calls))continue;let i=new Set,l=[];for(let e of r.tool_calls)if(e.type||(e.type="function"),e.function?.arguments&&"string"!=typeof e.function.arguments&&(e.function.arguments=JSON.stringify(e.function.arguments)),s){let t;do t=function(){let e="";for(let t=0;t<9;t++)e+=n[Math.floor(Math.random()*n.length)];return e}();while(i.has(t))i.add(t),l.push(t),e.id=t}else{let t=null!=e.id&&""!==String(e.id).trim()?String(e.id):o();e.id=t,l.push(t)}if(l.length>0){let n=0;for(let o=t+1;o<e.messages.length;o++){let t=e.messages[o];if("assistant"===t.role)break;"tool"===t.role&&n<l.length&&(t.tool_call_id=l[n],n++)}}}return e}function r(e){if(!e.messages||!Array.isArray(e.messages))return e;let t=[];for(let n=0;n<e.messages.length;n++){let o=e.messages[n],s=e.messages[n+1];t.push(o);let r=function(e){if("assistant"!==e.role)return[];let t=[];if(e.tool_calls&&Array.isArray(e.tool_calls))for(let n of e.tool_calls)n.id&&t.push(n.id);if(Array.isArray(e.content))for(let n of e.content)"tool_use"===n.type&&n.id&&t.push(n.id);return t}(o);if(0!==r.length&&s&&!function(e,t){if(!e||!t.length)return!1;if("tool"===e.role&&e.tool_call_id)return t.includes(e.tool_call_id);if("user"===e.role&&Array.isArray(e.content)){for(let n of e.content)if("tool_result"===n.type&&t.includes(n.tool_use_id))return!0}return!1}(s,r))for(let e of r)t.push({role:"tool",tool_call_id:e,content:""})}return e.messages=t,e}let i="EpwGCkYIChgCKkCzVUuRrg7CcglSUWEef4rH6o35g9UYS8ZPe0/VomQTBsFx6sttYNj5l8GqgW6ejuHyYqpFToxIbZl0bw17l5dJEgzCnqDO0Z8fRlMrNgsaDLS1cnCjC53KBqE0CCIwAADQdo1eO+7qPAmo8J4WR3JPmr92S97kmvr5K1iPMiOpkZNj8mEXW8uzBoOJs/9ZKoMFiqHJ3UObwaJDqFOW70E9oCwDoc6jesaWVAEdN5vWfKMpIkjFJjECdjIdkxyJNJ8Ib8yXVal3qwE7uThoPRqSZDdHB5mmwPEjWE/90cSYCbtX2YsJki1265CabBb8/QEkODXg4kgRrL+c8e8rRXz/dr1RswvaPuzEdGKHRNi9UooNUeOK4/ebx1KkP9YZttyohN9GWqlts36kOoW0Cfie/ABDgF9g534BPth/sstxDM6d79QlRmh6NxizyTF74DXJI34u0M4tTRchqE5pAq85SgdJaa+dix1yJPMji8m6nZkwJbscJb9rdc2MKyKWjz8QL2+rTSSuZ2F1k1qSsW0xNcI7qLcI12Vncfn/VqY6YOIZy/saZBR0ezXvN6g+UYbuIdyVg7AyIFZt3nbrO7/kmOEb2VKzygwklHGEIJHfFgMpH3JSrAzbZIowVHOF7VaJ+KXRFDCFin7hHTOiOsdg+1ij1mML9Z/x/9CP4b7OUcaQm1llDZPSHc6rZMNL3DdB+fW5YfmNgKU35S+7AMtA10nVILzDAk1UV4T2K9Do09JlI6rjOs9UuULlIN2Z0eE8YTlANR6uQcw7lMcdfqYE8tke4rDKc2dDiaS5vVe45VewICNpdXGN11yw8QqH7p27CR1HtN30e0tHXOR3bIwWk/Yb6O5fTaKG6Ri8e5ZCPvdD9HqepVi188nM0iTjJqL58F3ni04ECIhcbyaQWnuTes1Kw4CMwiZDLQkk8Hgz7HkUOf1btQTF/0nhD7ry0n0hAEg2PaDM3V6TjOjf4hEldRmeqERcQF1PfgKb6ZM12rlIIfUqKACczWJSzTV158+47HX36o0cgux6nFlv/DE+sEiRVxgB",l="EuwGCukGAXLI2nxwZIq54WWSoL/YN0P3TsDZ7zRnLi8g0S4aVr2HUGxvaHKySuY6HAVzcE0GPGjXrytLIldxthSvfxgUlJh6Qa9Z+Oj5QZBlYdg6HaJ6yuY5R7waE6rdwBsRf7Ft2j3DJ9rMi9qhWFqApewYtPhls3VHtuvND3l8Rm09+lbAXQs6KKWEWrxNLKTBkfpMgXhRERc/TQRMZu1twAablm6/Zk1tsYRvfWKLsNbeKF+CCojJdXJKvnR/8Ouuoa+Y2Ti20hcW7aZIIjZDFYPU//k6Ybmhg69J/imbFai2ckhfLaisqdDkdoIiBJScTOUvYqP6AE9d4MsydSC+UlhIMk4hoP76R8vUSCZRMkjOaDXstf/QoVZKbt94wyRZgAJ1G0BqI8L5ow86kLpA4wJEtxsRGymOE4bKUvApveBakYDNM9APkf+LbtbzWSseGjoZcSlycF9iN8Q2XNYKRrHbv3Lr5Y8JjdH/5y/6SHkNehTEZugaeGnSPSyCTWto1kQgHpxdWmhkLfJGNUGLmue7Mesj4TSms4J33mRpYVhNB/J333FCqIP0hr/E7BkkjEn7yZ4X7SQlh+xKPurapsnHRwiKmtsilmEFrnTE9iQr+pMr6M29qqFNv1tr5yumbaJw8JW9sB15tNsRv+dW6BjNanbsKz7HCgKUBc8tGy+7YuhXzAfViyRefcjK7eZW0Fbyt7AbybJTKz78W8NH7ye6LAwzOebXpeZ4D43fNIt8bKh26qgduSQv/7o+pAflkuqHZ99YWgHQ8h8OkZFi3eOiSYjsjhdZ/czWOdoPI/OnqIldzMPF5YlrKBLFX8VhRKVmqgsmWf5PHGulHhMkVlS+XG2UIseGy69ARa93D78Gsa+1n1kJr7EEB7Rh+27vUMxVYLdz1yMSvE5nalTAlg/ZeG8+XQ0cHuAI3KbQpHW2Q++RdXfm5JzD5WdJZUU+Zn8t8UUn85BH4RxZLeE0qJikgSsKoYVBc6YhiMjhPgkR95ReimY4Z0xCJdRo1gjexOFeODZMpQF6Yxnoic7IrdgsFA3iePTbFnPp3IAM1fAThWhXJUn3QInUOTd5o1qmTmn6REbL15g/JQNl+dqUoPkhleeb2V3kjqp1okmO3wMZbPknR3S1LZNmlS72/iBQUm+n2b/RCn4PjmM2",a=["text","image_url","image"],u=new Map,c=new Map;function p(e,t){return`${e}:${t}`}function f(e,t,n,o){let s=p(e,t);n&&u.set(s,n),o&&c.set(s,o)}function d(e,t){return u.get(p(e,t))}function m(e,t){return c.get(p(e,t))}var g=e.i(16023);function y(e){let t=e.max_tokens||g.DEFAULT_MAX_TOKENS;return e.tools&&Array.isArray(e.tools)&&e.tools.length>0&&t<g.DEFAULT_MIN_TOKENS&&(t=g.DEFAULT_MIN_TOKENS),t}f(t.FORMATS.CLAUDE,t.FORMATS.OPENAI,function(e,t,n){let o={model:e,messages:[],stream:n};if(t.max_tokens&&(o.max_tokens=y(t)),void 0!==t.temperature&&(o.temperature=t.temperature),t.system){let e=Array.isArray(t.system)?t.system.map(e=>e.text||"").join("\n"):t.system;e&&o.messages.push({role:"system",content:e})}if(t.messages&&Array.isArray(t.messages))for(let e=0;e<t.messages.length;e++){let n=function(e){let t="user"===e.role||"tool"===e.role?"user":"assistant";if("string"==typeof e.content)return{role:t,content:e.content};if(Array.isArray(e.content)){let n=[],o=[],s=[];for(let t of e.content)switch(t.type){case"text":n.push({type:"text",text:t.text});break;case"image":t.source?.type==="base64"&&n.push({type:"image_url",image_url:{url:`data:${t.source.media_type};base64,${t.source.data}`}});break;case"tool_use":o.push({id:t.id,type:"function",function:{name:t.name,arguments:JSON.stringify(t.input||{})}});break;case"tool_result":let e="";"string"==typeof t.content?e=t.content:Array.isArray(t.content)?e=t.content.filter(e=>"text"===e.type).map(e=>e.text).join("\n")||JSON.stringify(t.content):t.content&&(e=JSON.stringify(t.content)),s.push({role:"tool",tool_call_id:t.tool_use_id,content:e})}if(s.length>0)return n.length>0?[...s,{role:"user",content:1===n.length&&"text"===n[0].type?n[0].text:n}]:s;if(o.length>0){let e={role:"assistant"};return n.length>0&&(e.content=1===n.length&&"text"===n[0].type?n[0].text:n),e.tool_calls=o,e}if(n.length>0)return{role:t,content:1===n.length&&"text"===n[0].type?n[0].text:n};if(0===e.content.length)return{role:t,content:""}}return null}(t.messages[e]);n&&(Array.isArray(n)?o.messages.push(...n):o.messages.push(n))}if(function(e){for(let t=0;t<e.length;t++){let n=e[t];if("assistant"===n.role&&n.tool_calls&&n.tool_calls.length>0){let o=n.tool_calls.map(e=>e.id),s=new Set,r=t+1;for(let n=t+1;n<e.length;n++){let t=e[n];if("tool"===t.role&&t.tool_call_id)s.add(t.tool_call_id),r=n+1;else break}let i=o.filter(e=>!s.has(e));if(i.length>0){let n=i.map(e=>({role:"tool",tool_call_id:e,content:"[No response received]"}));e.splice(r,0,...n),t=r+n.length-1}}}}(o.messages),t.tools&&Array.isArray(t.tools)){let e=t.tools.map(e=>{let t="string"==typeof e.name?e.name.trim():"";return t?{type:"function",function:{name:t,description:"string"==typeof e.description?e.description:"",parameters:e.input_schema||{type:"object",properties:{}}}}:null}).filter(e=>!!e);e.length>0&&(o.tools=e)}return t.tool_choice&&(o.tool_choice=function(e){if(!e)return"auto";if("string"==typeof e)return e;switch(e.type){case"auto":default:return"auto";case"any":return"required";case"tool":return{type:"function",function:{name:e.name}}}}(t.tool_choice)),o},null);let _="proxy_";function h(e){return Array.isArray(e)?e.filter(e=>{if(e&&"object"==typeof e&&"text"===e.type){let t=e.text;if(""===t||null==t)return!1}return!0}).map(e=>e&&"object"==typeof e&&"tool_result"===e.type&&Array.isArray(e.content)?{...e,content:h(e.content)}:e):e??[]}function x(e,t,n){var o,s;let r=t?._disableToolPrefix===!0,l=new Map,a={model:e,max_tokens:y(t),stream:n,messages:[]};void 0!==t.temperature&&(a.temperature=t.temperature);let u=[];if(t.messages&&Array.isArray(t.messages)){let e;for(let e of t.messages){"system"===e.role&&u.push("string"==typeof e.content?e.content:(o=e.content)?"string"==typeof o?o:Array.isArray(o)?o.filter(e=>"text"===e.type).map(e=>String(e.text??"")).join("\n"):"":"")}let n=t.messages.filter(e=>"system"!==e.role),s=[],c=()=>{e&&s.length>0&&(a.messages.push({role:e,content:s}),s=[])};for(let t of n){let n="user"===t.role||"tool"===t.role?"user":"assistant",o=function(e,t=new Map,n=!1){let o=[];if("tool"===e.role){let t=Array.isArray(e.content)?h(e.content):e.content;o.push({type:"tool_result",tool_use_id:e.tool_call_id,content:t})}else if("user"===e.role){if("string"==typeof e.content)e.content&&o.push({type:"text",text:e.content});else if(Array.isArray(e.content))for(let t of e.content)if("text"===t.type&&t.text)o.push({type:"text",text:t.text});else if("tool_result"===t.type){if(!t.tool_use_id)continue;let e=Array.isArray(t.content)?h(t.content):t.content;o.push({type:"tool_result",tool_use_id:t.tool_use_id,content:e,...t.is_error&&{is_error:t.is_error}})}else if("image_url"===t.type){let e=t.image_url.url.match(/^data:([^;]+);base64,(.+)$/);e&&o.push({type:"image",source:{type:"base64",media_type:e[1],data:e[2]}})}else"image"===t.type&&t.source&&o.push({type:"image",source:t.source})}else if("assistant"===e.role){if(e.reasoning_content&&o.push({type:"thinking",thinking:e.reasoning_content,signature:i}),Array.isArray(e.content))for(let t of e.content)"text"===t.type&&t.text?o.push({type:"text",text:t.text}):"thinking"===t.type||"redacted_thinking"===t.type?o.push({...t,signature:t.signature||i}):"tool_use"===t.type&&t.name&&t.name.trim()&&o.push({type:"tool_use",id:t.id,name:t.name,input:t.input});else if(e.content){var s;let t="string"==typeof e.content?e.content:"string"==typeof(s=e.content)?s:Array.isArray(s)?s.filter(e=>"text"===e.type).map(e=>e.text).join("\n"):"";t&&o.push({type:"text",text:t})}if(e.tool_calls&&Array.isArray(e.tool_calls)){for(let t of e.tool_calls)if("function"===t.type){let e=t.function?.name;if(!e||!e.trim())continue;let s=n?e:_+e;o.push({type:"tool_use",id:t.id,name:s,input:function(e){if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return e}}(t.function.arguments)})}}}return o}(t,l,r),u=o.some(e=>"tool_use"===e.type);if(o.some(e=>"tool_result"===e.type)){let t=o.filter(e=>"tool_result"===e.type),r=o.filter(e=>"tool_result"!==e.type);c(),t.length>0&&a.messages.push({role:"user",content:t}),r.length>0&&(e=n,s.push(...r));continue}e!==n&&(c(),e=n),s.push(...o),u&&c()}c(),a.messages=a.messages.filter(e=>!("assistant"===e.role&&Array.isArray(e.content))||0!==e.content.length);let p=new Set;for(let e of a.messages)if("assistant"===e.role&&Array.isArray(e.content))for(let t of e.content)"tool_use"===t.type&&t.id&&p.add(String(t.id));for(let e of a.messages)"user"===e.role&&Array.isArray(e.content)&&(e.content=e.content.filter(e=>"tool_result"!==e.type||!e.tool_use_id||p.has(String(e.tool_use_id))));a.messages=a.messages.filter(e=>!("user"===e.role&&Array.isArray(e.content))||0!==e.content.length);for(let e=a.messages.length-1;e>=0;e--){let t=a.messages[e];if("assistant"===t.role&&Array.isArray(t.content)&&t.content.length>0){let e=t.content[t.content.length-1];if(e){e.cache_control={type:"ephemeral"};break}}}}let c={type:"text",text:g.CLAUDE_SYSTEM_PROMPT};if(u.length>0?a.system=[c,{type:"text",text:u.join("\n"),cache_control:{type:"ephemeral",ttl:"1h"}}]:a.system=[c],t.tools&&Array.isArray(t.tools)){a.tools=t.tools.map(e=>{let t="function"===e.type&&e.function?e.function:e,n=t.name,o=r?n:_+n;return r||l.set(o,n),{name:o,description:t.description||"",input_schema:t.parameters||t.input_schema||{type:"object",properties:{},required:[]}}}),a.tools=a.tools.filter(e=>e.name&&e.name?.trim());for(let e=a.tools.length-1;e>=0;e--)if(!a.tools[e].defer_loading){a.tools[e].cache_control={type:"ephemeral",ttl:"1h"};break}}if(t.tool_choice&&(a.tool_choice=(s=t.tool_choice)?"object"==typeof s&&s.type?s:"auto"===s||"none"===s?{type:"auto"}:"required"===s?{type:"any"}:"object"==typeof s&&s.function?{type:"tool",name:s.function.name}:{type:"auto"}:{type:"auto"}),t.response_format){let e=t.response_format;if("json_schema"===e.type&&e.json_schema?.schema){let t=JSON.stringify(e.json_schema.schema,null,2);u.push(`You must respond with valid JSON that strictly follows this JSON schema:
|
|
1
|
+
module.exports=[352812,e=>{"use strict";var t=e.i(496727);let n="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function o(){return`call_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,9)}`}function s(e,t){if(!e.messages||!Array.isArray(e.messages))return e;let s=t?.use9CharId===!0;for(let t=0;t<e.messages.length;t++){let r=e.messages[t];if("assistant"!==r.role||!r.tool_calls||!Array.isArray(r.tool_calls))continue;let i=new Set,l=[];for(let e of r.tool_calls)if(e.type||(e.type="function"),e.function?.arguments&&"string"!=typeof e.function.arguments&&(e.function.arguments=JSON.stringify(e.function.arguments)),s){let t;do t=function(){let e="";for(let t=0;t<9;t++)e+=n[Math.floor(Math.random()*n.length)];return e}();while(i.has(t))i.add(t),l.push(t),e.id=t}else{let t=null!=e.id&&""!==String(e.id).trim()?String(e.id):o();e.id=t,l.push(t)}if(l.length>0){let n=0;for(let o=t+1;o<e.messages.length;o++){let t=e.messages[o];if("assistant"===t.role)break;"tool"===t.role&&n<l.length&&(t.tool_call_id=l[n],n++)}}}return e}function r(e){if(!e.messages||!Array.isArray(e.messages))return e;let t=[];for(let n=0;n<e.messages.length;n++){let o=e.messages[n],s=e.messages[n+1];t.push(o);let r=function(e){if("assistant"!==e.role)return[];let t=[];if(e.tool_calls&&Array.isArray(e.tool_calls))for(let n of e.tool_calls)n.id&&t.push(n.id);if(Array.isArray(e.content))for(let n of e.content)"tool_use"===n.type&&n.id&&t.push(n.id);return t}(o);if(0!==r.length&&s&&!function(e,t){if(!e||!t.length)return!1;if("tool"===e.role&&e.tool_call_id)return t.includes(e.tool_call_id);if("user"===e.role&&Array.isArray(e.content)){for(let n of e.content)if("tool_result"===n.type&&t.includes(n.tool_use_id))return!0}return!1}(s,r))for(let e of r)t.push({role:"tool",tool_call_id:e,content:""})}return e.messages=t,e}let i="EpwGCkYIChgCKkCzVUuRrg7CcglSUWEef4rH6o35g9UYS8ZPe0/VomQTBsFx6sttYNj5l8GqgW6ejuHyYqpFToxIbZl0bw17l5dJEgzCnqDO0Z8fRlMrNgsaDLS1cnCjC53KBqE0CCIwAADQdo1eO+7qPAmo8J4WR3JPmr92S97kmvr5K1iPMiOpkZNj8mEXW8uzBoOJs/9ZKoMFiqHJ3UObwaJDqFOW70E9oCwDoc6jesaWVAEdN5vWfKMpIkjFJjECdjIdkxyJNJ8Ib8yXVal3qwE7uThoPRqSZDdHB5mmwPEjWE/90cSYCbtX2YsJki1265CabBb8/QEkODXg4kgRrL+c8e8rRXz/dr1RswvaPuzEdGKHRNi9UooNUeOK4/ebx1KkP9YZttyohN9GWqlts36kOoW0Cfie/ABDgF9g534BPth/sstxDM6d79QlRmh6NxizyTF74DXJI34u0M4tTRchqE5pAq85SgdJaa+dix1yJPMji8m6nZkwJbscJb9rdc2MKyKWjz8QL2+rTSSuZ2F1k1qSsW0xNcI7qLcI12Vncfn/VqY6YOIZy/saZBR0ezXvN6g+UYbuIdyVg7AyIFZt3nbrO7/kmOEb2VKzygwklHGEIJHfFgMpH3JSrAzbZIowVHOF7VaJ+KXRFDCFin7hHTOiOsdg+1ij1mML9Z/x/9CP4b7OUcaQm1llDZPSHc6rZMNL3DdB+fW5YfmNgKU35S+7AMtA10nVILzDAk1UV4T2K9Do09JlI6rjOs9UuULlIN2Z0eE8YTlANR6uQcw7lMcdfqYE8tke4rDKc2dDiaS5vVe45VewICNpdXGN11yw8QqH7p27CR1HtN30e0tHXOR3bIwWk/Yb6O5fTaKG6Ri8e5ZCPvdD9HqepVi188nM0iTjJqL58F3ni04ECIhcbyaQWnuTes1Kw4CMwiZDLQkk8Hgz7HkUOf1btQTF/0nhD7ry0n0hAEg2PaDM3V6TjOjf4hEldRmeqERcQF1PfgKb6ZM12rlIIfUqKACczWJSzTV158+47HX36o0cgux6nFlv/DE+sEiRVxgB",l="EuwGCukGAXLI2nxwZIq54WWSoL/YN0P3TsDZ7zRnLi8g0S4aVr2HUGxvaHKySuY6HAVzcE0GPGjXrytLIldxthSvfxgUlJh6Qa9Z+Oj5QZBlYdg6HaJ6yuY5R7waE6rdwBsRf7Ft2j3DJ9rMi9qhWFqApewYtPhls3VHtuvND3l8Rm09+lbAXQs6KKWEWrxNLKTBkfpMgXhRERc/TQRMZu1twAablm6/Zk1tsYRvfWKLsNbeKF+CCojJdXJKvnR/8Ouuoa+Y2Ti20hcW7aZIIjZDFYPU//k6Ybmhg69J/imbFai2ckhfLaisqdDkdoIiBJScTOUvYqP6AE9d4MsydSC+UlhIMk4hoP76R8vUSCZRMkjOaDXstf/QoVZKbt94wyRZgAJ1G0BqI8L5ow86kLpA4wJEtxsRGymOE4bKUvApveBakYDNM9APkf+LbtbzWSseGjoZcSlycF9iN8Q2XNYKRrHbv3Lr5Y8JjdH/5y/6SHkNehTEZugaeGnSPSyCTWto1kQgHpxdWmhkLfJGNUGLmue7Mesj4TSms4J33mRpYVhNB/J333FCqIP0hr/E7BkkjEn7yZ4X7SQlh+xKPurapsnHRwiKmtsilmEFrnTE9iQr+pMr6M29qqFNv1tr5yumbaJw8JW9sB15tNsRv+dW6BjNanbsKz7HCgKUBc8tGy+7YuhXzAfViyRefcjK7eZW0Fbyt7AbybJTKz78W8NH7ye6LAwzOebXpeZ4D43fNIt8bKh26qgduSQv/7o+pAflkuqHZ99YWgHQ8h8OkZFi3eOiSYjsjhdZ/czWOdoPI/OnqIldzMPF5YlrKBLFX8VhRKVmqgsmWf5PHGulHhMkVlS+XG2UIseGy69ARa93D78Gsa+1n1kJr7EEB7Rh+27vUMxVYLdz1yMSvE5nalTAlg/ZeG8+XQ0cHuAI3KbQpHW2Q++RdXfm5JzD5WdJZUU+Zn8t8UUn85BH4RxZLeE0qJikgSsKoYVBc6YhiMjhPgkR95ReimY4Z0xCJdRo1gjexOFeODZMpQF6Yxnoic7IrdgsFA3iePTbFnPp3IAM1fAThWhXJUn3QInUOTd5o1qmTmn6REbL15g/JQNl+dqUoPkhleeb2V3kjqp1okmO3wMZbPknR3S1LZNmlS72/iBQUm+n2b/RCn4PjmM2",a=["text","image_url","image"],u=new Map,c=new Map;function p(e,t){return`${e}:${t}`}function f(e,t,n,o){let s=p(e,t);n&&u.set(s,n),o&&c.set(s,o)}function d(e,t){return u.get(p(e,t))}function m(e,t){return c.get(p(e,t))}var g=e.i(16023);function y(e){let t=e.max_tokens||g.DEFAULT_MAX_TOKENS;return e.tools&&Array.isArray(e.tools)&&e.tools.length>0&&t<g.DEFAULT_MIN_TOKENS&&(t=g.DEFAULT_MIN_TOKENS),t}f(t.FORMATS.CLAUDE,t.FORMATS.OPENAI,function(e,t,n){let o={model:e,messages:[],stream:n};if(t.max_tokens&&(o.max_tokens=y(t)),void 0!==t.temperature&&(o.temperature=t.temperature),t.system){let e=Array.isArray(t.system)?t.system.map(e=>e.text||"").join("\n"):t.system;e&&o.messages.push({role:"system",content:e})}if(t.messages&&Array.isArray(t.messages))for(let e=0;e<t.messages.length;e++){let n=function(e){let t="user"===e.role||"tool"===e.role?"user":"assistant";if("string"==typeof e.content)return{role:t,content:e.content};if(Array.isArray(e.content)){let n=[],o=[],s=[];for(let t of e.content)switch(t.type){case"text":n.push({type:"text",text:t.text});break;case"image":t.source?.type==="base64"&&n.push({type:"image_url",image_url:{url:`data:${t.source.media_type};base64,${t.source.data}`}});break;case"tool_use":o.push({id:t.id,type:"function",function:{name:t.name,arguments:JSON.stringify(t.input||{})}});break;case"tool_result":let e="";"string"==typeof t.content?e=t.content:Array.isArray(t.content)?e=t.content.filter(e=>"text"===e.type).map(e=>e.text).join("\n")||JSON.stringify(t.content):t.content&&(e=JSON.stringify(t.content)),s.push({role:"tool",tool_call_id:t.tool_use_id,content:e})}if(s.length>0)return n.length>0?[...s,{role:"user",content:1===n.length&&"text"===n[0].type?n[0].text:n}]:s;if(o.length>0){let e={role:"assistant"};return n.length>0&&(e.content=1===n.length&&"text"===n[0].type?n[0].text:n),e.tool_calls=o,e}if(n.length>0)return{role:t,content:1===n.length&&"text"===n[0].type?n[0].text:n};if(0===e.content.length)return{role:t,content:""}}return null}(t.messages[e]);n&&(Array.isArray(n)?o.messages.push(...n):o.messages.push(n))}if(function(e){for(let t=0;t<e.length;t++){let n=e[t];if("assistant"===n.role&&n.tool_calls&&n.tool_calls.length>0){let o=n.tool_calls.map(e=>e.id),s=new Set,r=t+1;for(let n=t+1;n<e.length;n++){let t=e[n];if("tool"===t.role&&t.tool_call_id)s.add(t.tool_call_id),r=n+1;else break}let i=o.filter(e=>!s.has(e));if(i.length>0){let n=i.map(e=>({role:"tool",tool_call_id:e,content:"[No response received]"}));e.splice(r,0,...n),t=r+n.length-1}}}}(o.messages),t.tools&&Array.isArray(t.tools)){let e=t.tools.map(e=>{let t="string"==typeof e.name?e.name.trim():"";return t?{type:"function",function:{name:t,description:"string"==typeof e.description?e.description:"",parameters:e.input_schema||{type:"object",properties:{}}}}:null}).filter(e=>!!e);e.length>0&&(o.tools=e)}return t.tool_choice&&(o.tool_choice=function(e){if(!e)return"auto";if("string"==typeof e)return e;switch(e.type){case"auto":default:return"auto";case"any":return"required";case"tool":return{type:"function",function:{name:e.name}}}}(t.tool_choice)),o},null);let _="proxy_";function h(e){return Array.isArray(e)?e.filter(e=>{if(e&&"object"==typeof e&&"text"===e.type){let t=e.text;if(""===t||null==t)return!1}return!0}).map(e=>e&&"object"==typeof e&&"tool_result"===e.type&&Array.isArray(e.content)?{...e,content:h(e.content)}:e):e??[]}function x(e,t,n){var o,s;let r=t?._disableToolPrefix===!0,l=new Map,a={model:e,max_tokens:y(t),stream:n,messages:[]};void 0!==t.temperature&&(a.temperature=t.temperature);let u=[];if(t.messages&&Array.isArray(t.messages)){let e;for(let e of t.messages){"system"===e.role&&u.push("string"==typeof e.content?e.content:(o=e.content)?"string"==typeof o?o:Array.isArray(o)?o.filter(e=>"text"===e.type).map(e=>String(e.text??"")).join("\n"):"":"")}let n=t.messages.filter(e=>"system"!==e.role),s=[],c=()=>{e&&s.length>0&&(a.messages.push({role:e,content:s}),s=[])};for(let t of n){let n="user"===t.role||"tool"===t.role?"user":"assistant",o=function(e,t=new Map,n=!1){let o=[];if("tool"===e.role){let t=Array.isArray(e.content)?h(e.content):e.content;o.push({type:"tool_result",tool_use_id:e.tool_call_id,content:t})}else if("user"===e.role){if("string"==typeof e.content)e.content&&o.push({type:"text",text:e.content});else if(Array.isArray(e.content))for(let t of e.content)if("text"===t.type&&t.text)o.push({type:"text",text:t.text});else if("tool_result"===t.type){if(!t.tool_use_id)continue;let e=Array.isArray(t.content)?h(t.content):t.content;o.push({type:"tool_result",tool_use_id:t.tool_use_id,content:e,...t.is_error&&{is_error:t.is_error}})}else if("image_url"===t.type){let e=t.image_url.url.match(/^data:([^;]+);base64,(.+)$/);e&&o.push({type:"image",source:{type:"base64",media_type:e[1],data:e[2]}})}else"image"===t.type&&t.source&&o.push({type:"image",source:t.source})}else if("assistant"===e.role){if(e.reasoning_content&&o.push({type:"thinking",thinking:e.reasoning_content,signature:i}),Array.isArray(e.content))for(let t of e.content)"text"===t.type&&t.text?o.push({type:"text",text:t.text}):"thinking"===t.type||"redacted_thinking"===t.type?o.push({...t,signature:t.signature||i}):"tool_use"===t.type&&t.name&&t.name.trim()&&o.push({type:"tool_use",id:t.id,name:t.name,input:t.input});else if(e.content){var s;let t="string"==typeof e.content?e.content:"string"==typeof(s=e.content)?s:Array.isArray(s)?s.filter(e=>"text"===e.type).map(e=>e.text).join("\n"):"";t&&o.push({type:"text",text:t})}if(e.tool_calls&&Array.isArray(e.tool_calls)){for(let t of e.tool_calls)if("function"===t.type){let e=t.function?.name;if(!e||!e.trim())continue;let s=n?e:_+e;o.push({type:"tool_use",id:t.id,name:s,input:function(e){if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return e}}(t.function.arguments)})}}}return o}(t,l,r),u=o.some(e=>"tool_use"===e.type);if(o.some(e=>"tool_result"===e.type)){let t=o.filter(e=>"tool_result"===e.type),r=o.filter(e=>"tool_result"!==e.type);c(),t.length>0&&a.messages.push({role:"user",content:t}),r.length>0&&(e=n,s.push(...r));continue}e!==n&&(c(),e=n),s.push(...o),u&&c()}c(),a.messages=a.messages.filter(e=>!("assistant"===e.role&&Array.isArray(e.content))||0!==e.content.length);let p=new Set;for(let e of a.messages)if("assistant"===e.role&&Array.isArray(e.content))for(let t of e.content)"tool_use"===t.type&&t.id&&p.add(String(t.id));for(let e of a.messages)"user"===e.role&&Array.isArray(e.content)&&(e.content=e.content.filter(e=>"tool_result"!==e.type||!e.tool_use_id||p.has(String(e.tool_use_id))));a.messages=a.messages.filter(e=>!("user"===e.role&&Array.isArray(e.content))||0!==e.content.length);for(let e=a.messages.length-1;e>=0;e--){let t=a.messages[e];if("assistant"===t.role&&Array.isArray(t.content)&&t.content.length>0){let e=t.content[t.content.length-1];if(e){e.cache_control={type:"ephemeral"};break}}}}let c={type:"text",text:g.CLAUDE_SYSTEM_PROMPT};if(u.length>0?a.system=[c,{type:"text",text:u.join("\n"),cache_control:{type:"ephemeral",ttl:"1h"}}]:a.system=[c],t.tools&&Array.isArray(t.tools)){a.tools=t.tools.map(e=>{let t="function"===e.type&&e.function?e.function:e,n=t.name,o=r?n:_+n;r||l.set(o,n);let s=t.parameters||t.input_schema||{type:"object",properties:{},required:[]},i="object"!==s.type||s.properties?s:{...s,properties:{}};return{name:o,description:t.description||"",input_schema:i}}),a.tools=a.tools.filter(e=>e.name&&e.name?.trim());for(let e=a.tools.length-1;e>=0;e--)if(!a.tools[e].defer_loading){a.tools[e].cache_control={type:"ephemeral",ttl:"1h"};break}}if(t.tool_choice&&(a.tool_choice=(s=t.tool_choice)?"object"==typeof s&&s.type?s:"auto"===s||"none"===s?{type:"auto"}:"required"===s?{type:"any"}:"object"==typeof s&&s.function?{type:"tool",name:s.function.name}:{type:"auto"}:{type:"auto"}),t.response_format){let e=t.response_format;if("json_schema"===e.type&&e.json_schema?.schema){let t=JSON.stringify(e.json_schema.schema,null,2);u.push(`You must respond with valid JSON that strictly follows this JSON schema:
|
|
2
2
|
\`\`\`json
|
|
3
3
|
${t}
|
|
4
4
|
\`\`\`
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[383368,e=>e.a(async(r,t)=>{try{var a=e.i(828059),i=e.i(963219),n=r([i]);[i]=n.then?(await n)():n;let b=new Set(["openai","openai-responses"]),T=new Set(["gemini","gemini-cli"]);function o(e){return(e||"").trim().replace(/\/$/,"")}function s(e){return{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}async function l({provider:e,apiKey:r,baseUrl:t,providerSpecificData:a={},modelId:n="gpt-4o-mini",modelsUrl:l}){if(!t)return{valid:!1,error:"Missing base URL"};let d=l||function(e){let r=o(e);if(!r)return"";for(let e of["/chat/completions","/responses","/chat","/messages"])if(r.endsWith(e))return`${r.slice(0,-e.length)}/models`;return`${r}/models`}(t);if(!d)return{valid:!1,error:"Invalid models endpoint"};let u=await fetch(d,{method:"GET",headers:s(r)});if(u.ok)return{valid:!0,error:null};if(401===u.status||403===u.status)return{valid:!1,error:"Invalid API key"};let c=function(e,r,t={}){let a=o(r);return a?(0,i.isOpenAICompatibleProvider)(e)?t?.apiType==="responses"?`${a}/responses`:`${a}/chat/completions`:a.endsWith("/chat/completions")||a.endsWith("/responses")||a.endsWith("/chat")?a:a.endsWith("/v1")?`${a}/chat/completions`:a:""}(e,t,a);if(!c)return{valid:!1,error:`Validation failed: ${u.status}`};let p=a?.validationModelId||n,h=await fetch(c,{method:"POST",headers:s(r),body:JSON.stringify({model:p,messages:[{role:"user",content:"test"}],max_tokens:1})});return h.ok?{valid:!0,error:null}:401===h.status||403===h.status?{valid:!1,error:"Invalid API key"}:404===h.status||405===h.status?{valid:!1,error:"Provider validation endpoint not supported"}:h.status>=500?{valid:!1,error:`Provider unavailable (${h.status})`}:{valid:!0,error:null}}async function d({apiKey:e,baseUrl:r,modelId:t,headers:a={},providerSpecificData:i={}}){if(!r)return{valid:!1,error:"Missing base URL"};let n={"Content-Type":"application/json",...a};n["x-api-key"]||n["X-API-Key"]||(n["x-api-key"]=e),n["anthropic-version"]||n["Anthropic-Version"]||(n["anthropic-version"]="2023-06-01");let o=i?.validationModelId||t||"claude-3-5-sonnet-20241022",s=await fetch(r,{method:"POST",headers:n,body:JSON.stringify({model:o,max_tokens:1,messages:[{role:"user",content:"test"}]})});return 401===s.status||403===s.status?{valid:!1,error:"Invalid API key"}:{valid:!0,error:null}}async function u({apiKey:e,baseUrl:r}){if(!r)return{valid:!1,error:"Missing base URL"};let t=r.includes("?")?"&":"?",a=await fetch(`${r}${t}key=${encodeURIComponent(e)}`,{method:"GET",headers:{"Content-Type":"application/json"}});return a.ok?{valid:!0,error:null}:401===a.status||403===a.status?{valid:!1,error:"Invalid API key"}:{valid:!1,error:`Validation failed: ${a.status}`}}async function c({apiKey:e}){try{let r=await fetch("https://api.deepgram.com/v1/auth/token",{method:"GET",headers:{Authorization:`Token ${e}`}});if(r.ok)return{valid:!0,error:null};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!1,error:`Validation failed: ${r.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function p({apiKey:e}){try{let r=await fetch("https://api.assemblyai.com/v2/transcript?limit=1",{method:"GET",headers:{Authorization:e,"Content-Type":"application/json"}});if(r.ok)return{valid:!0,error:null};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!1,error:`Validation failed: ${r.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function h({apiKey:e}){try{let r=await fetch("https://api.nanobananaapi.ai/api/v1/nanobanana/generate",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify({prompt:"test",model:"nanobanana-flash"})});if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function f({apiKey:e}){try{let r=await fetch("https://api.elevenlabs.io/v1/voices",{method:"GET",headers:{"xi-api-key":e,"Content-Type":"application/json"}});if(r.ok)return{valid:!0,error:null};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!1,error:`Validation failed: ${r.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function v({apiKey:e}){try{let r=await fetch("https://api.inworld.ai/tts/v1/voice",{method:"POST",headers:{Authorization:`Basic ${e}`,"Content-Type":"application/json"},body:JSON.stringify({text:"test",modelId:"inworld-tts-1.5-mini",audioConfig:{audioEncoding:"MP3"}})});if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function m({apiKey:e,providerSpecificData:r={}}){try{let t=o(r.baseUrl)||"https://coding-intl.dashscope.aliyuncs.com/apps/anthropic/v1",a=t.endsWith("/messages")?t.slice(0,-9):t,i=`${a}/messages`,n=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e,"anthropic-version":"2023-06-01"},body:JSON.stringify({model:"qwen3-coder-plus",max_tokens:1,messages:[{role:"user",content:"test"}]})});if(401===n.status||403===n.status)return{valid:!1,error:"Invalid API key"};if(n.status>=400&&n.status<500||n.ok)return{valid:!0,error:null};return{valid:!1,error:`Validation failed: ${n.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function y({apiKey:e,providerSpecificData:r={}}){let t=o(r.baseUrl);if(!t)return{valid:!1,error:"No base URL configured for OpenAI compatible provider"};let a="string"==typeof r?.validationModelId?r.validationModelId.trim():"",i=!1;try{let r=await fetch(`${t}/models`,{method:"GET",headers:s(e)});if(i=!0,r.ok)return{valid:!0,error:null,method:"models_endpoint"};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};if(429===r.status)return{valid:!0,error:null,method:"models_endpoint",warning:"Rate limited, but credentials are valid"}}catch{}if(!a)return{valid:!1,error:"Endpoint /models unavailable. Provide a Model ID to validate via /chat/completions."};let n=r.apiType||"chat",l=`${t}${"responses"===n?"/responses":"/chat/completions"}`;try{let r=await fetch(l,{method:"POST",headers:s(e),body:JSON.stringify({model:a,messages:[{role:"user",content:"test"}],max_tokens:1})});if(r.ok)return{valid:!0,error:null,method:"chat_completions"};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};if(429===r.status)return{valid:!0,error:null,method:"chat_completions",warning:"Rate limited, but credentials are valid"};if(400===r.status)return{valid:!0,error:null,method:"inference_available",warning:"Model ID may be invalid, but credentials are valid"};if(r.status>=400&&r.status<500)return{valid:!0,error:null,method:"inference_available"};if(r.status>=500)return{valid:!1,error:`Provider unavailable (${r.status})`}}catch{}if(!i)return{valid:!1,error:"Connection failed while testing /chat/completions"};try{let r=await fetch(t,{method:"GET",headers:s(e),signal:AbortSignal.timeout(5e3)});if(r.status<500)return{valid:!0,error:null};return{valid:!1,error:`Provider unavailable (${r.status})`}}catch(e){return{valid:!1,error:e.message||"Connection failed"}}}async function g({apiKey:e,providerSpecificData:r={}}){let t=o(r.baseUrl);if(!t)return{valid:!1,error:"No base URL configured for Anthropic compatible provider"};t.endsWith("/messages")&&(t=t.slice(0,-9));let a={"Content-Type":"application/json","x-api-key":e,"anthropic-version":"2023-06-01",Authorization:`Bearer ${e}`};try{let e=await fetch(`${t}/models`,{method:"GET",headers:a});if(e.ok)return{valid:!0,error:null};if(401===e.status||403===e.status)return{valid:!1,error:"Invalid API key"}}catch{}let i=r?.validationModelId||"claude-3-5-sonnet-20241022";try{let e=await fetch(`${t}/messages`,{method:"POST",headers:a,body:JSON.stringify({model:i,max_tokens:1,messages:[{role:"user",content:"test"}]})});if(401===e.status||403===e.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Connection failed"}}}async function k(e,r){try{let t=await fetch(e,r);if(t.ok)return{valid:!0,error:null,unsupported:!1};if(401===t.status||403===t.status)return{valid:!1,error:"Invalid API key",unsupported:!1};if(t.status<500)return{valid:!0,error:null,unsupported:!1};return{valid:!1,error:`Validation failed: ${t.status}`,unsupported:!1}}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}}let x={"serper-search":e=>({url:"https://google.serper.dev/search",init:{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":e},body:JSON.stringify({q:"test",num:1})}}),"brave-search":e=>({url:"https://api.search.brave.com/res/v1/web/search?q=test&count=1",init:{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":e}}}),"perplexity-search":e=>({url:"https://api.perplexity.ai/search",init:{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({query:"test",max_results:1})}}),"exa-search":e=>({url:"https://api.exa.ai/search",init:{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify({query:"test",numResults:1})}}),"tavily-search":e=>({url:"https://api.tavily.com/search",init:{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({query:"test",max_results:1})}})};async function w({provider:e,apiKey:r,providerSpecificData:t={}}){if(!e||!r)return{valid:!1,error:"Provider and API key required",unsupported:!1};if((0,i.isOpenAICompatibleProvider)(e))try{return await y({apiKey:r,providerSpecificData:t})}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}if((0,i.isAnthropicCompatibleProvider)(e))try{return await g({apiKey:r,providerSpecificData:t})}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}let n={deepgram:c,assemblyai:p,nanobanana:h,elevenlabs:f,inworld:v,"bailian-coding-plan":m,...Object.fromEntries(Object.entries(x).map(([e,r])=>[e,({apiKey:e})=>{let{url:t,init:a}=r(e);return k(t,a)}]))};if(n[e])try{return await n[e]({apiKey:r,providerSpecificData:t})}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}let s=(0,a.getRegistryEntry)(e);if(!s)return{valid:!1,error:"Provider validation not supported",unsupported:!0};let w=s.models?.[0]?.id||null,I=s.testKeyBaseUrl?{...s,baseUrl:s.testKeyBaseUrl}:s,P=function(e,r={}){return r?.baseUrl?o(r.baseUrl):e?.baseUrl?o(e.baseUrl):""}(I,t);try{if(b.has(s.format))return await l({provider:e,apiKey:r,baseUrl:P,providerSpecificData:t,modelId:w,modelsUrl:s.modelsUrl});if("claude"===s.format){let e=`${P}${s.urlSuffix||""}`,a={...s.headers||{}};return"x-api-key"===(s.authHeader||"").toLowerCase()?a["x-api-key"]=r:a.Authorization=`Bearer ${r}`,await d({apiKey:r,baseUrl:e,modelId:w,headers:a,providerSpecificData:t})}if(T.has(s.format))return await u({apiKey:r,baseUrl:P});return{valid:!1,error:"Provider validation not supported",unsupported:!0}}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}}e.s(["validateProviderApiKey",()=>w]),t()}catch(e){t(e)}},!1),910660,e=>e.a(async(r,t)=>{try{var a=e.i(89171),i=e.i(677850),n=e.i(200392);e.i(245272);var o=e.i(385498),s=e.i(548941),l=e.i(250875),d=e.i(639173),u=e.i(383368),c=e.i(266240),p=e.i(928602);e.i(312125);var h=e.i(397506),f=e.i(496928),v=e.i(444675),m=r([i,n,u]);[i,n,u]=m.then?(await m)():m;let _={claude:{checkExpiry:!0,refreshable:!0},codex:{checkExpiry:!0,refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"OmniRoute",Accept:"application/vnd.github+json"}},iflow:{checkExpiry:!0,refreshable:!0},qwen:{checkExpiry:!0,refreshable:!0},cursor:{checkExpiry:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},kilocode:{checkExpiry:!0},cline:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0}},S={cline:"cline",kilocode:"kilo"},$=i.z.object({validationModelId:i.z.string().max(500).optional()});function y(e,r="Unknown error"){return"string"!=typeof e?r:e.trim()||r}function g(e,r,t,a=null){return{type:e,source:r,message:t||null,code:a??null}}function k({error:e,statusCode:r=null,refreshFailed:t=!1,unsupported:a=!1}){let i=y(e,"Connection test failed"),n=i.toLowerCase(),o=Number.isFinite(r)?Number(r):null;return a?g("unsupported","validation",i,"unsupported"):t||n.includes("refresh failed")?g("token_refresh_failed","oauth",i,"refresh_failed"):401===o||403===o?g("upstream_auth_error","upstream",i,String(o)):429===o?g("upstream_rate_limited","upstream",i,"429"):o&&o>=500?g("upstream_unavailable","upstream",i,String(o)):n.includes("token expired")||n.includes("expired")?g("token_expired","oauth",i,"token_expired"):n.includes("invalid api key")||n.includes("token invalid")||n.includes("revoked")||n.includes("access denied")||n.includes("unauthorized")||n.includes("forbidden")?g("upstream_auth_error","upstream",i,o?String(o):"auth_failed"):n.includes("rate limit")||n.includes("quota")||n.includes("too many requests")?g("upstream_rate_limited","upstream",i,o?String(o):"rate_limited"):n.includes("fetch failed")||n.includes("network")||n.includes("timeout")||n.includes("econn")||n.includes("enotfound")||n.includes("socket")?g("network_error","upstream",i,"network_error"):g("upstream_error","upstream",i,o?String(o):"upstream_error")}async function w(e){let r=S[e];if(!r)return null;try{let e=await (0,c.getCliRuntimeStatus)(r);if(e.installed&&e.runnable)return e;let t=e.installed?`Local CLI runtime is installed but not runnable (${e.reason||"healthcheck_failed"})`:"Local CLI runtime is not installed";return{...e,diagnosis:g("runtime_error","local",t,e.reason||"runtime_error"),error:t}}catch(r){let e=`Failed to check local CLI runtime: ${r?.message||"runtime_check_failed"}`;return{installed:!1,runnable:!1,reason:"runtime_check_failed",diagnosis:g("runtime_error","local",e,"runtime_check_failed"),error:e}}}async function b(e){let{provider:r,refreshToken:t}=e;if(!t)return null;try{let a={refreshToken:t,providerSpecificData:e.providerSpecificData||{}};return await (0,p.getAccessToken)(r,a,console)}catch(e){return console.log(`Error refreshing ${r} token:`,e.message),null}}function T(e){let r=e.expiresAt||e.tokenExpiresAt;return!!r&&new Date(r).getTime()<=Date.now()+3e5}async function x(){try{if(!await (0,s.isCloudEnabled)())return;let e=await (0,l.getConsistentMachineId)();await (0,d.syncToCloud)(e)}catch(e){console.log("Error syncing to cloud after token refresh:",e)}}async function I(e){let r=_[e.provider];if(!r){let e="Provider test not supported";return{valid:!1,error:e,refreshed:!1,diagnosis:k({error:e,unsupported:!0})}}if(!e.accessToken){if(r.refreshable&&!e.refreshToken){let e="Refresh token expired. Please re-authenticate this account.";return{valid:!1,error:e,refreshed:!1,diagnosis:g("reauth_required","oauth",e,"reauth_required")}}let t="No access token";return{valid:!1,error:t,refreshed:!1,diagnosis:g("auth_missing","local",t,"missing_access_token")}}let t=e.accessToken,a=!1,i=null,n=T(e);if(r.refreshable&&n&&e.refreshToken){let r=await b(e);if(r)t=r.accessToken,a=!0,i=r;else{let e="Token expired and refresh failed";return{valid:!1,error:e,refreshed:!1,diagnosis:k({error:e,refreshFailed:!0})}}}if(r.checkExpiry){if(a)return{valid:!0,error:null,refreshed:a,newTokens:i,diagnosis:g("ok","oauth",null,null)};if(n){let e="Token expired";return{valid:!1,error:e,refreshed:!1,diagnosis:k({error:e})}}return{valid:!0,error:null,refreshed:!1,newTokens:null,diagnosis:g("ok","local",null,null)}}try{let n={[r.authHeader]:`${r.authPrefix}${t}`,...r.extraHeaders},o=await fetch(r.url,{method:r.method,headers:n});if(o.ok)return{valid:!0,error:null,refreshed:a,newTokens:i,diagnosis:g("ok","upstream",null,null)};if((401===o.status||403===o.status)&&!a&&T(e)&&e.refreshToken&&"string"==typeof e.refreshToken){let t=await b(e);if(t){let e=await fetch(r.url,{method:r.method,headers:{[r.authHeader]:`${r.authPrefix}${t.accessToken}`,...r.extraHeaders}});if(e.ok)return{valid:!0,error:null,refreshed:!0,newTokens:t,diagnosis:g("ok","upstream",null,null)};let a=`API returned ${e.status} after token refresh`;return{valid:!1,error:a,refreshed:!0,statusCode:e.status,diagnosis:k({error:a,statusCode:e.status})}}let a="Token expired and refresh failed";return{valid:!1,error:a,refreshed:!1,statusCode:401,diagnosis:k({error:a,statusCode:401,refreshFailed:!0})}}let s=401===o.status?"Token invalid or revoked":403===o.status?"Access denied":`API returned ${o.status}`;return{valid:!1,error:s,refreshed:a,statusCode:o.status,diagnosis:k({error:s,statusCode:o.status})}}catch(r){let e=y(r?.message,"Connection test failed");return{valid:!1,error:e,refreshed:a,diagnosis:k({error:e})}}}async function P(e){if(!e.apiKey){let e="Missing API key";return{valid:!1,error:e,diagnosis:g("auth_missing","local",e,"missing_api_key")}}let r=await (0,u.validateProviderApiKey)({provider:e.provider,apiKey:e.apiKey,providerSpecificData:e.providerSpecificData});if(r.unsupported){let e="Provider test not supported";return{valid:!1,error:e,diagnosis:k({error:e,unsupported:!0})}}let t=r.valid?null:r.error||"Invalid API key",a=r.valid?g("ok","upstream",null,null):k({error:t});return{valid:!!r.valid,error:t,warning:r.warning||null,diagnosis:a}}async function C(e,r){let t,a=await (0,o.getProviderConnectionById)(e);if(!a)return{valid:!1,error:"Connection not found",diagnosis:null,latencyMs:0};let i="string"==typeof a.provider?a.provider:"";if(!i)return{valid:!1,error:"Connection provider is invalid",diagnosis:g("validation_error","local","Connection provider is invalid","provider_invalid"),latencyMs:0};let n=null;try{n=await (0,s.resolveProxyForConnection)(e)}catch(r){console.log(`[ConnectionTest] Failed to resolve proxy for ${e}:`,r?.message)}let l=Date.now(),d=await w(i);if(d?.diagnosis)t={valid:!1,error:d.error,refreshed:!1,diagnosis:d.diagnosis};else if("apikey"===a.authType){let e=r?{...a,providerSpecificData:{...a.providerSpecificData||{},validationModelId:r}}:a;t=await (0,v.runWithProxyContext)(n?.proxy||null,()=>P(e))}else t=await (0,v.runWithProxyContext)(n?.proxy||null,()=>I(a));let u=Date.now()-l,c=new Date().toISOString(),p=t.diagnosis||(t.valid?g("ok","local",null,null):k({error:t.error,statusCode:t.statusCode})),m={testStatus:t.valid?"active":"error",lastError:t.valid?null:t.error,lastErrorAt:t.valid?null:c,lastTested:c,lastErrorType:t.valid?null:p.type,lastErrorSource:t.valid?null:p.source,errorCode:t.valid?null:p.code||t.statusCode||null,rateLimitedUntil:t.valid?null:a.rateLimitedUntil||null};t.valid&&(m.backoffLevel=0),t.refreshed&&t.newTokens&&(m.accessToken=t.newTokens.accessToken,t.newTokens.refreshToken&&(m.refreshToken=t.newTokens.refreshToken),t.newTokens.expiresIn&&(m.expiresAt=new Date(Date.now()+1e3*t.newTokens.expiresIn).toISOString())),await (0,o.updateProviderConnection)(e,m),t.refreshed&&await x();try{(0,h.saveCallLog)({method:"POST",path:"/api/providers/test",status:t.valid?200:t.statusCode||401,model:"connection-test",provider:i,connectionId:e,duration:u,error:t.valid?null:t.error||null,sourceFormat:"test",targetFormat:"test"}).catch(()=>{})}catch{}try{(0,f.logProxyEvent)({status:t.valid?"success":"error",proxy:n?.proxy||null,level:n?.level||"provider-test",levelId:n?.levelId||null,provider:i,targetUrl:`${i}/connection-test`,latencyMs:u,error:t.valid?null:t.error||null,connectionId:e,comboId:null,account:e?.slice(0,8)||null,tlsFingerprint:!1})}catch{}return{valid:t.valid,error:t.error,warning:t.warning||null,refreshed:t.refreshed||!1,diagnosis:p,latencyMs:u,statusCode:t.statusCode||null,runtime:d||null,testedAt:c}}async function A(e,{params:r}){try{let{id:t}=await r,i={};try{i=await e.json()}catch{}let o=(0,n.validateBody)($,i);if((0,n.isValidationFailure)(o))return a.NextResponse.json({error:o.error},{status:400});let{validationModelId:s}=o.data,l=await C(t,s);if("Connection not found"===l.error)return a.NextResponse.json({error:"Connection not found"},{status:404});return a.NextResponse.json(l)}catch(e){return console.log("Error testing connection:",e),a.NextResponse.json({error:"Test failed"},{status:500})}}e.s(["POST",()=>A,"testSingleConnection",()=>C]),t()}catch(e){t(e)}},!1)];
|
|
1
|
+
module.exports=[383368,e=>e.a(async(r,t)=>{try{var a=e.i(828059),i=e.i(963219),n=r([i]);[i]=n.then?(await n)():n;let b=new Set(["openai","openai-responses"]),T=new Set(["gemini","gemini-cli"]);function o(e){return(e||"").trim().replace(/\/$/,"")}function s(e){return{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}async function l({provider:e,apiKey:r,baseUrl:t,providerSpecificData:a={},modelId:n="gpt-4o-mini",modelsUrl:l}){if(!t)return{valid:!1,error:"Missing base URL"};let d=l||function(e){let r=o(e);if(!r)return"";for(let e of["/chat/completions","/responses","/chat","/messages"])if(r.endsWith(e))return`${r.slice(0,-e.length)}/models`;return`${r}/models`}(t);if(!d)return{valid:!1,error:"Invalid models endpoint"};let u=await fetch(d,{method:"GET",headers:s(r)});if(u.ok)return{valid:!0,error:null};if(401===u.status||403===u.status)return{valid:!1,error:"Invalid API key"};let c=function(e,r,t={}){let a=o(r);return a?(0,i.isOpenAICompatibleProvider)(e)?t?.apiType==="responses"?`${a}/responses`:`${a}/chat/completions`:a.endsWith("/chat/completions")||a.endsWith("/responses")||a.endsWith("/chat")?a:a.endsWith("/v1")?`${a}/chat/completions`:a:""}(e,t,a);if(!c)return{valid:!1,error:`Validation failed: ${u.status}`};let p=a?.validationModelId||n,h=await fetch(c,{method:"POST",headers:s(r),body:JSON.stringify({model:p,messages:[{role:"user",content:"test"}],max_tokens:1})});return h.ok?{valid:!0,error:null}:401===h.status||403===h.status?{valid:!1,error:"Invalid API key"}:404===h.status||405===h.status?{valid:!1,error:"Provider validation endpoint not supported"}:h.status>=500?{valid:!1,error:`Provider unavailable (${h.status})`}:{valid:!0,error:null}}async function d({apiKey:e,baseUrl:r,modelId:t,headers:a={},providerSpecificData:i={}}){if(!r)return{valid:!1,error:"Missing base URL"};let n={"Content-Type":"application/json",...a};n["x-api-key"]||n["X-API-Key"]||(n["x-api-key"]=e),n["anthropic-version"]||n["Anthropic-Version"]||(n["anthropic-version"]="2023-06-01");let o=i?.validationModelId||t||"claude-3-5-sonnet-20241022",s=await fetch(r,{method:"POST",headers:n,body:JSON.stringify({model:o,max_tokens:1,messages:[{role:"user",content:"test"}]})});return 401===s.status||403===s.status?{valid:!1,error:"Invalid API key"}:{valid:!0,error:null}}async function u({apiKey:e,baseUrl:r}){if(!r)return{valid:!1,error:"Missing base URL"};let t=r.includes("?")?"&":"?",a=await fetch(`${r}${t}key=${encodeURIComponent(e)}`,{method:"GET",headers:{"Content-Type":"application/json"}});return a.ok?{valid:!0,error:null}:401===a.status||403===a.status?{valid:!1,error:"Invalid API key"}:{valid:!1,error:`Validation failed: ${a.status}`}}async function c({apiKey:e}){try{let r=await fetch("https://api.deepgram.com/v1/auth/token",{method:"GET",headers:{Authorization:`Token ${e}`}});if(r.ok)return{valid:!0,error:null};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!1,error:`Validation failed: ${r.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function p({apiKey:e}){try{let r=await fetch("https://api.assemblyai.com/v2/transcript?limit=1",{method:"GET",headers:{Authorization:e,"Content-Type":"application/json"}});if(r.ok)return{valid:!0,error:null};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!1,error:`Validation failed: ${r.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function h({apiKey:e}){try{let r=await fetch("https://api.nanobananaapi.ai/api/v1/nanobanana/generate",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify({prompt:"test",model:"nanobanana-flash"})});if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function f({apiKey:e}){try{let r=await fetch("https://api.elevenlabs.io/v1/voices",{method:"GET",headers:{"xi-api-key":e,"Content-Type":"application/json"}});if(r.ok)return{valid:!0,error:null};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!1,error:`Validation failed: ${r.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function v({apiKey:e}){try{let r=await fetch("https://api.inworld.ai/tts/v1/voice",{method:"POST",headers:{Authorization:`Basic ${e}`,"Content-Type":"application/json"},body:JSON.stringify({text:"test",modelId:"inworld-tts-1.5-mini",audioConfig:{audioEncoding:"MP3"}})});if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function m({apiKey:e,providerSpecificData:r={}}){try{let t=o(r.baseUrl)||"https://coding-intl.dashscope.aliyuncs.com/apps/anthropic/v1",a=t.endsWith("/messages")?t.slice(0,-9):t,i=`${a}/messages`,n=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e,"anthropic-version":"2023-06-01"},body:JSON.stringify({model:"qwen3-coder-plus",max_tokens:1,messages:[{role:"user",content:"test"}]})});if(401===n.status||403===n.status)return{valid:!1,error:"Invalid API key"};if(n.status>=400&&n.status<500||n.ok)return{valid:!0,error:null};return{valid:!1,error:`Validation failed: ${n.status}`}}catch(e){return{valid:!1,error:e.message||"Validation failed"}}}async function y({apiKey:e,providerSpecificData:r={}}){let t=o(r.baseUrl);if(!t)return{valid:!1,error:"No base URL configured for OpenAI compatible provider"};let a="string"==typeof r?.validationModelId?r.validationModelId.trim():"",i=!1;try{let r=await fetch(`${t}/models`,{method:"GET",headers:s(e)});if(i=!0,r.ok)return{valid:!0,error:null,method:"models_endpoint"};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};if(429===r.status)return{valid:!0,error:null,method:"models_endpoint",warning:"Rate limited, but credentials are valid"}}catch{}if(!a)return{valid:!1,error:"Endpoint /models unavailable. Provide a Model ID to validate via /chat/completions."};let n=r.apiType||"chat",l=`${t}${"responses"===n?"/responses":"/chat/completions"}`;try{let r=await fetch(l,{method:"POST",headers:s(e),body:JSON.stringify({model:a,messages:[{role:"user",content:"test"}],max_tokens:1})});if(r.ok)return{valid:!0,error:null,method:"chat_completions"};if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};if(429===r.status)return{valid:!0,error:null,method:"chat_completions",warning:"Rate limited, but credentials are valid"};if(400===r.status)return{valid:!0,error:null,method:"inference_available",warning:"Model ID may be invalid, but credentials are valid"};if(r.status>=400&&r.status<500)return{valid:!0,error:null,method:"inference_available"};if(r.status>=500)return{valid:!1,error:`Provider unavailable (${r.status})`}}catch{}if(!i)return{valid:!1,error:"Connection failed while testing /chat/completions"};try{let r=await fetch(t,{method:"GET",headers:s(e),signal:AbortSignal.timeout(5e3)});if(r.status<500)return{valid:!0,error:null};return{valid:!1,error:`Provider unavailable (${r.status})`}}catch(e){return{valid:!1,error:e.message||"Connection failed"}}}async function g({apiKey:e,providerSpecificData:r={}}){let t=o(r.baseUrl);if(!t)return{valid:!1,error:"No base URL configured for Anthropic compatible provider"};t.endsWith("/messages")&&(t=t.slice(0,-9));let a={"Content-Type":"application/json","x-api-key":e,"anthropic-version":"2023-06-01",Authorization:`Bearer ${e}`};try{let e=await fetch(`${t}/models`,{method:"GET",headers:a});if(e.ok)return{valid:!0,error:null};if(401===e.status||403===e.status)return{valid:!1,error:"Invalid API key"}}catch{}let i=r?.validationModelId||"claude-3-5-sonnet-20241022";try{let e=await fetch(`${t}/messages`,{method:"POST",headers:a,body:JSON.stringify({model:i,max_tokens:1,messages:[{role:"user",content:"test"}]})});if(401===e.status||403===e.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Connection failed"}}}async function k(e,r){try{let t=await fetch(e,r);if(t.ok)return{valid:!0,error:null,unsupported:!1};if(401===t.status||403===t.status)return{valid:!1,error:"Invalid API key",unsupported:!1};if(t.status<500)return{valid:!0,error:null,unsupported:!1};return{valid:!1,error:`Validation failed: ${t.status}`,unsupported:!1}}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}}let x={"serper-search":e=>({url:"https://google.serper.dev/search",init:{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":e},body:JSON.stringify({q:"test",num:1})}}),"brave-search":e=>({url:"https://api.search.brave.com/res/v1/web/search?q=test&count=1",init:{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":e}}}),"perplexity-search":e=>({url:"https://api.perplexity.ai/search",init:{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({query:"test",max_results:1})}}),"exa-search":e=>({url:"https://api.exa.ai/search",init:{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify({query:"test",numResults:1})}}),"tavily-search":e=>({url:"https://api.tavily.com/search",init:{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({query:"test",max_results:1})}})};async function w({provider:e,apiKey:r,providerSpecificData:t={}}){if(!e||!r)return{valid:!1,error:"Provider and API key required",unsupported:!1};if((0,i.isOpenAICompatibleProvider)(e))try{return await y({apiKey:r,providerSpecificData:t})}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}if((0,i.isAnthropicCompatibleProvider)(e))try{return await g({apiKey:r,providerSpecificData:t})}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}let n={deepgram:c,assemblyai:p,nanobanana:h,elevenlabs:f,inworld:v,"bailian-coding-plan":m,longcat:async({apiKey:e})=>{try{let r=await fetch("https://longcat.chat/api/v1/chat/completions",{method:"POST",headers:s(e),body:JSON.stringify({model:"longcat",messages:[{role:"user",content:"test"}],max_tokens:1})});if(401===r.status||403===r.status)return{valid:!1,error:"Invalid API key"};return{valid:!0,error:null}}catch(e){return{valid:!1,error:e.message||"Connection failed"}}},...Object.fromEntries(Object.entries(x).map(([e,r])=>[e,({apiKey:e})=>{let{url:t,init:a}=r(e);return k(t,a)}]))};if(n[e])try{return await n[e]({apiKey:r,providerSpecificData:t})}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}let w=(0,a.getRegistryEntry)(e);if(!w)return{valid:!1,error:"Provider validation not supported",unsupported:!0};let I=w.models?.[0]?.id||null,P=w.testKeyBaseUrl?{...w,baseUrl:w.testKeyBaseUrl}:w,C=function(e,r={}){return r?.baseUrl?o(r.baseUrl):e?.baseUrl?o(e.baseUrl):""}(P,t);try{if(b.has(w.format))return await l({provider:e,apiKey:r,baseUrl:C,providerSpecificData:t,modelId:I,modelsUrl:w.modelsUrl});if("claude"===w.format){let e=`${C}${w.urlSuffix||""}`,a={...w.headers||{}};return"x-api-key"===(w.authHeader||"").toLowerCase()?a["x-api-key"]=r:a.Authorization=`Bearer ${r}`,await d({apiKey:r,baseUrl:e,modelId:I,headers:a,providerSpecificData:t})}if(T.has(w.format))return await u({apiKey:r,baseUrl:C});return{valid:!1,error:"Provider validation not supported",unsupported:!0}}catch(e){return{valid:!1,error:e.message||"Validation failed",unsupported:!1}}}e.s(["validateProviderApiKey",()=>w]),t()}catch(e){t(e)}},!1),910660,e=>e.a(async(r,t)=>{try{var a=e.i(89171),i=e.i(677850),n=e.i(200392);e.i(245272);var o=e.i(385498),s=e.i(548941),l=e.i(250875),d=e.i(639173),u=e.i(383368),c=e.i(266240),p=e.i(928602);e.i(312125);var h=e.i(397506),f=e.i(496928),v=e.i(444675),m=r([i,n,u]);[i,n,u]=m.then?(await m)():m;let _={claude:{checkExpiry:!0,refreshable:!0},codex:{checkExpiry:!0,refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"OmniRoute",Accept:"application/vnd.github+json"}},iflow:{checkExpiry:!0,refreshable:!0},qwen:{checkExpiry:!0,refreshable:!0},cursor:{checkExpiry:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},kilocode:{checkExpiry:!0},cline:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0}},S={cline:"cline",kilocode:"kilo"},$=i.z.object({validationModelId:i.z.string().max(500).optional()});function y(e,r="Unknown error"){return"string"!=typeof e?r:e.trim()||r}function g(e,r,t,a=null){return{type:e,source:r,message:t||null,code:a??null}}function k({error:e,statusCode:r=null,refreshFailed:t=!1,unsupported:a=!1}){let i=y(e,"Connection test failed"),n=i.toLowerCase(),o=Number.isFinite(r)?Number(r):null;return a?g("unsupported","validation",i,"unsupported"):t||n.includes("refresh failed")?g("token_refresh_failed","oauth",i,"refresh_failed"):401===o||403===o?g("upstream_auth_error","upstream",i,String(o)):429===o?g("upstream_rate_limited","upstream",i,"429"):o&&o>=500?g("upstream_unavailable","upstream",i,String(o)):n.includes("token expired")||n.includes("expired")?g("token_expired","oauth",i,"token_expired"):n.includes("invalid api key")||n.includes("token invalid")||n.includes("revoked")||n.includes("access denied")||n.includes("unauthorized")||n.includes("forbidden")?g("upstream_auth_error","upstream",i,o?String(o):"auth_failed"):n.includes("rate limit")||n.includes("quota")||n.includes("too many requests")?g("upstream_rate_limited","upstream",i,o?String(o):"rate_limited"):n.includes("fetch failed")||n.includes("network")||n.includes("timeout")||n.includes("econn")||n.includes("enotfound")||n.includes("socket")?g("network_error","upstream",i,"network_error"):g("upstream_error","upstream",i,o?String(o):"upstream_error")}async function w(e){let r=S[e];if(!r)return null;try{let e=await (0,c.getCliRuntimeStatus)(r);if(e.installed&&e.runnable)return e;let t=e.installed?`Local CLI runtime is installed but not runnable (${e.reason||"healthcheck_failed"})`:"Local CLI runtime is not installed";return{...e,diagnosis:g("runtime_error","local",t,e.reason||"runtime_error"),error:t}}catch(r){let e=`Failed to check local CLI runtime: ${r?.message||"runtime_check_failed"}`;return{installed:!1,runnable:!1,reason:"runtime_check_failed",diagnosis:g("runtime_error","local",e,"runtime_check_failed"),error:e}}}async function b(e){let{provider:r,refreshToken:t}=e;if(!t)return null;try{let a={refreshToken:t,providerSpecificData:e.providerSpecificData||{}};return await (0,p.getAccessToken)(r,a,console)}catch(e){return console.log(`Error refreshing ${r} token:`,e.message),null}}function T(e){let r=e.expiresAt||e.tokenExpiresAt;return!!r&&new Date(r).getTime()<=Date.now()+3e5}async function x(){try{if(!await (0,s.isCloudEnabled)())return;let e=await (0,l.getConsistentMachineId)();await (0,d.syncToCloud)(e)}catch(e){console.log("Error syncing to cloud after token refresh:",e)}}async function I(e){let r=_[e.provider];if(!r){let e="Provider test not supported";return{valid:!1,error:e,refreshed:!1,diagnosis:k({error:e,unsupported:!0})}}if(!e.accessToken){if(r.refreshable&&!e.refreshToken){let e="Refresh token expired. Please re-authenticate this account.";return{valid:!1,error:e,refreshed:!1,diagnosis:g("reauth_required","oauth",e,"reauth_required")}}let t="No access token";return{valid:!1,error:t,refreshed:!1,diagnosis:g("auth_missing","local",t,"missing_access_token")}}let t=e.accessToken,a=!1,i=null,n=T(e);if(r.refreshable&&n&&e.refreshToken){let r=await b(e);if(r)t=r.accessToken,a=!0,i=r;else{let e="Token expired and refresh failed";return{valid:!1,error:e,refreshed:!1,diagnosis:k({error:e,refreshFailed:!0})}}}if(r.checkExpiry){if(a)return{valid:!0,error:null,refreshed:a,newTokens:i,diagnosis:g("ok","oauth",null,null)};if(n){let e="Token expired";return{valid:!1,error:e,refreshed:!1,diagnosis:k({error:e})}}return{valid:!0,error:null,refreshed:!1,newTokens:null,diagnosis:g("ok","local",null,null)}}try{let n={[r.authHeader]:`${r.authPrefix}${t}`,...r.extraHeaders},o=await fetch(r.url,{method:r.method,headers:n});if(o.ok)return{valid:!0,error:null,refreshed:a,newTokens:i,diagnosis:g("ok","upstream",null,null)};if((401===o.status||403===o.status)&&!a&&T(e)&&e.refreshToken&&"string"==typeof e.refreshToken){let t=await b(e);if(t){let e=await fetch(r.url,{method:r.method,headers:{[r.authHeader]:`${r.authPrefix}${t.accessToken}`,...r.extraHeaders}});if(e.ok)return{valid:!0,error:null,refreshed:!0,newTokens:t,diagnosis:g("ok","upstream",null,null)};let a=`API returned ${e.status} after token refresh`;return{valid:!1,error:a,refreshed:!0,statusCode:e.status,diagnosis:k({error:a,statusCode:e.status})}}let a="Token expired and refresh failed";return{valid:!1,error:a,refreshed:!1,statusCode:401,diagnosis:k({error:a,statusCode:401,refreshFailed:!0})}}let s=401===o.status?"Token invalid or revoked":403===o.status?"Access denied":`API returned ${o.status}`;return{valid:!1,error:s,refreshed:a,statusCode:o.status,diagnosis:k({error:s,statusCode:o.status})}}catch(r){let e=y(r?.message,"Connection test failed");return{valid:!1,error:e,refreshed:a,diagnosis:k({error:e})}}}async function P(e){if(!e.apiKey){let e="Missing API key";return{valid:!1,error:e,diagnosis:g("auth_missing","local",e,"missing_api_key")}}let r=await (0,u.validateProviderApiKey)({provider:e.provider,apiKey:e.apiKey,providerSpecificData:e.providerSpecificData});if(r.unsupported){let e="Provider test not supported";return{valid:!1,error:e,diagnosis:k({error:e,unsupported:!0})}}let t=r.valid?null:r.error||"Invalid API key",a=r.valid?g("ok","upstream",null,null):k({error:t});return{valid:!!r.valid,error:t,warning:r.warning||null,diagnosis:a}}async function C(e,r){let t,a=await (0,o.getProviderConnectionById)(e);if(!a)return{valid:!1,error:"Connection not found",diagnosis:null,latencyMs:0};let i="string"==typeof a.provider?a.provider:"";if(!i)return{valid:!1,error:"Connection provider is invalid",diagnosis:g("validation_error","local","Connection provider is invalid","provider_invalid"),latencyMs:0};let n=null;try{n=await (0,s.resolveProxyForConnection)(e)}catch(r){console.log(`[ConnectionTest] Failed to resolve proxy for ${e}:`,r?.message)}let l=Date.now(),d=await w(i);if(d?.diagnosis)t={valid:!1,error:d.error,refreshed:!1,diagnosis:d.diagnosis};else if("apikey"===a.authType){let e=r?{...a,providerSpecificData:{...a.providerSpecificData||{},validationModelId:r}}:a;t=await (0,v.runWithProxyContext)(n?.proxy||null,()=>P(e))}else t=await (0,v.runWithProxyContext)(n?.proxy||null,()=>I(a));let u=Date.now()-l,c=new Date().toISOString(),p=t.diagnosis||(t.valid?g("ok","local",null,null):k({error:t.error,statusCode:t.statusCode})),m={testStatus:t.valid?"active":"error",lastError:t.valid?null:t.error,lastErrorAt:t.valid?null:c,lastTested:c,lastErrorType:t.valid?null:p.type,lastErrorSource:t.valid?null:p.source,errorCode:t.valid?null:p.code||t.statusCode||null,rateLimitedUntil:t.valid?null:a.rateLimitedUntil||null};t.valid&&(m.backoffLevel=0),t.refreshed&&t.newTokens&&(m.accessToken=t.newTokens.accessToken,t.newTokens.refreshToken&&(m.refreshToken=t.newTokens.refreshToken),t.newTokens.expiresIn&&(m.expiresAt=new Date(Date.now()+1e3*t.newTokens.expiresIn).toISOString())),await (0,o.updateProviderConnection)(e,m),t.refreshed&&await x();try{(0,h.saveCallLog)({method:"POST",path:"/api/providers/test",status:t.valid?200:t.statusCode||401,model:"connection-test",provider:i,connectionId:e,duration:u,error:t.valid?null:t.error||null,sourceFormat:"test",targetFormat:"test"}).catch(()=>{})}catch{}try{(0,f.logProxyEvent)({status:t.valid?"success":"error",proxy:n?.proxy||null,level:n?.level||"provider-test",levelId:n?.levelId||null,provider:i,targetUrl:`${i}/connection-test`,latencyMs:u,error:t.valid?null:t.error||null,connectionId:e,comboId:null,account:e?.slice(0,8)||null,tlsFingerprint:!1})}catch{}return{valid:t.valid,error:t.error,warning:t.warning||null,refreshed:t.refreshed||!1,diagnosis:p,latencyMs:u,statusCode:t.statusCode||null,runtime:d||null,testedAt:c}}async function A(e,{params:r}){try{let{id:t}=await r,i={};try{i=await e.json()}catch{}let o=(0,n.validateBody)($,i);if((0,n.isValidationFailure)(o))return a.NextResponse.json({error:o.error},{status:400});let{validationModelId:s}=o.data,l=await C(t,s);if("Connection not found"===l.error)return a.NextResponse.json({error:"Connection not found"},{status:404});return a.NextResponse.json(l)}catch(e){return console.log("Error testing connection:",e),a.NextResponse.json({error:"Test failed"},{status:500})}}e.s(["POST",()=>A,"testSingleConnection",()=>C]),t()}catch(e){t(e)}},!1)];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_6320c728._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[918622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},677850,a=>a.a(async(b,c)=>{try{let b=await a.y("zod");a.n(b),c()}catch(a){c(a)}},!0),342602,(a,b,c)=>{"use strict";b.exports=a.r(918622)},187924,(a,b,c)=>{"use strict";b.exports=a.r(342602).vendored["react-ssr"].ReactJsxRuntime},572131,(a,b,c)=>{"use strict";b.exports=a.r(342602).vendored["react-ssr"].React},804730,a=>{a.v({name:"omniroute",version:"3.0.
|
|
1
|
+
module.exports=[918622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},677850,a=>a.a(async(b,c)=>{try{let b=await a.y("zod");a.n(b),c()}catch(a){c(a)}},!0),342602,(a,b,c)=>{"use strict";b.exports=a.r(918622)},187924,(a,b,c)=>{"use strict";b.exports=a.r(342602).vendored["react-ssr"].ReactJsxRuntime},572131,(a,b,c)=>{"use strict";b.exports=a.r(342602).vendored["react-ssr"].React},804730,a=>{a.v({name:"omniroute",version:"3.0.1",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":"npx c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","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",keytar:"^7.9.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",zod:"^4.3.6",zustand:"^5.0.10"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@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",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7","lint-staged":"^16.2.7",prettier:"^3.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:{dompurify:"^3.3.2"}})},588788,a=>{"use strict";var b=a.i(32886),c=a.i(187924);function d({locale:a,...d}){if(!a)throw Error(void 0);return(0,c.jsx)(b.IntlProvider,{locale:a,...d})}a.s(["default",()=>d])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__9ef96d20._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[193695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},677850,a=>a.a(async(b,c)=>{try{let b=await a.y("zod");a.n(b),c()}catch(a){c(a)}},!0),804730,a=>{a.v({name:"omniroute",version:"3.0.
|
|
1
|
+
module.exports=[193695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},677850,a=>a.a(async(b,c)=>{try{let b=await a.y("zod");a.n(b),c()}catch(a){c(a)}},!0),804730,a=>{a.v({name:"omniroute",version:"3.0.1",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":"npx c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","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",keytar:"^7.9.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",zod:"^4.3.6",zustand:"^5.0.10"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@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",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7","lint-staged":"^16.2.7",prettier:"^3.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:{dompurify:"^3.3.2"}})},569264,a=>{a.n(a.i(354832))},650645,a=>{a.n(a.i(827572))},923576,a=>{a.n(a.i(104858))},825210,a=>{a.n(a.i(402747))},517537,a=>{a.n(a.i(903363))},13718,a=>{a.n(a.i(47967))},118198,a=>{a.n(a.i(545518))},296736,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},500790,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(211857);a.n(d("[project]/node_modules/next/dist/client/app-dir/link.js <module evaluation>"))},784707,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(211857);a.n(d("[project]/node_modules/next/dist/client/app-dir/link.js"))},297647,a=>{"use strict";a.i(500790);var b=a.i(784707);a.n(b)},395936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={default:function(){return i},useLinkStatus:function(){return h.useLinkStatus}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(296736),g=a.r(907997),h=f._(a.r(297647));function i(a){let b=a.legacyBehavior,c="string"==typeof a.children||"number"==typeof a.children||"string"==typeof a.children?.type,d=a.children?.type?.$$typeof===Symbol.for("react.client.reference");return!b||c||d||(a.children?.type?.$$typeof===Symbol.for("react.lazy")?console.error("Using a Lazy Component as a direct child of `<Link legacyBehavior>` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's `<a>` tag."):console.error("Using a Server Component as a direct child of `<Link legacyBehavior>` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's `<a>` tag.")),(0,g.jsx)(h.default,{...a})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},330878,a=>{"use strict";var b=a.i(800717),c=a.i(118845),d=a.i(40953),e=(0,b.cache)(function(a,b){return function({_cache:a=(0,c.b)(),_formatters:b=(0,c.c)(a),getMessageFallback:e=d.d,messages:f,namespace:g,onError:h=d.b,...i}){return function({messages:a,namespace:b,...c},e){return a=a["!"],b=(0,d.r)(b,"!"),(0,d.a)({...c,messages:a,namespace:b})}({...i,onError:h,cache:a,formatters:b,getMessageFallback:e,messages:{"!":f},namespace:g?`!.${g}`:"!"},0)}({...a,namespace:b})});a.s(["default",()=>e],330878)},442979,a=>{"use strict";var b=a.i(330878),c=a.i(767228),d=a.i(800717)["use".trim()];function e(...[a]){let f=function(a){var b=(0,c.default)();try{return d(b)}catch(b){throw b instanceof TypeError&&b.message.includes("Cannot read properties of null (reading 'use')")?Error(`\`${a}\` is not callable within an async component. Please refer to https://next-intl.dev/docs/environments/server-client-components#async-components`,{cause:b}):b}}("useTranslations");return(0,b.default)(f,a)}a.s(["useTranslations",()=>e],442979)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__a6942102._.js.map
|