@chenpu17/cc-gw 0.12.0 → 0.17.0

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.
Files changed (87) hide show
  1. package/README.md +2 -0
  2. package/package.json +7 -7
  3. package/src/web/dist/assets/About-D2m94wu2.js +1 -0
  4. package/src/web/dist/assets/ApiKeys-Bt-otGF_.js +1 -0
  5. package/src/web/dist/assets/{ConfirmDialog-cZsL-k-v.js → ConfirmDialog-CRSbmgE7.js} +1 -1
  6. package/src/web/dist/assets/Dashboard-81qp43jm.js +1 -0
  7. package/src/web/dist/assets/DialogShell-DxWKa5oR.js +1 -0
  8. package/src/web/dist/assets/Events-BQ4Dkqon.js +1 -0
  9. package/src/web/dist/assets/Help-XaAZ__Kz.js +4 -0
  10. package/src/web/dist/assets/Login-atwWPGzz.js +1 -0
  11. package/src/web/dist/assets/Logs-BYFIK_hM.js +1 -0
  12. package/src/web/dist/assets/PageSection-CC5EhfMe.js +1 -0
  13. package/src/web/dist/assets/PageState-XybOeENt.js +1 -0
  14. package/src/web/dist/assets/PageToolbar-CnLp4aWt.js +1 -0
  15. package/src/web/dist/assets/ProvidersPage-CFCY2xSG.js +1 -0
  16. package/src/web/dist/assets/RoutingPage-35o5ZSMg.js +1 -0
  17. package/src/web/dist/assets/Settings-DC1TPeS9.js +1 -0
  18. package/src/web/dist/assets/Setup-CnQPVK9X.js +2 -0
  19. package/src/web/dist/assets/TargetCombobox-DkVdA04_.js +1 -0
  20. package/src/web/dist/assets/apiKeys-CMk2nxB_.js +1 -0
  21. package/src/web/dist/assets/app-CRxPj2SJ.js +61 -0
  22. package/src/web/dist/assets/badge-eRkhnmCs.js +1 -0
  23. package/src/web/dist/assets/chartTheme-Cx-0Jiew.js +1 -0
  24. package/src/web/dist/assets/{charts-core-DlIzYcw_.js → charts-core-BOHudNiN.js} +1 -1
  25. package/src/web/dist/assets/{charts-engine-C14rMTiz.js → charts-engine-BhFpDbO0.js} +1 -1
  26. package/src/web/dist/assets/{charts-react-Bz6GVFr3.js → charts-react-CPWg-GRD.js} +1 -1
  27. package/src/web/dist/assets/clipboard-DqvcglYs.js +1 -0
  28. package/src/web/dist/assets/currency-Bx141-XL.js +3 -0
  29. package/src/web/dist/assets/disclosure-CU-KJc8C.js +1 -0
  30. package/src/web/dist/assets/{gateway-B_xLF-Rk.js → gateway-DyhqzHSh.js} +1 -1
  31. package/src/web/dist/assets/{global-CJOj9WGx.js → global-BLUcvOa8.js} +1 -1
  32. package/src/web/dist/assets/global-BQq8O0Tv.css +1 -0
  33. package/src/web/dist/assets/{i18n-Dp-o1LhZ.js → i18n-v60Yn7Ls.js} +1 -1
  34. package/src/web/dist/assets/{label-Da-JMxO2.js → label-CdbE1ezd.js} +1 -1
  35. package/src/web/dist/assets/{landing-MsSWlQKc.js → landing-BQdbaG8s.js} +4 -4
  36. package/src/web/dist/assets/modelManagement-DwdbGu0o.js +1 -0
  37. package/src/web/dist/assets/package-Dmrvm3RO.js +1 -0
  38. package/src/web/dist/assets/popover-CuM9b3U7.js +1 -0
  39. package/src/web/dist/assets/{query-DVc6ZTRQ.js → query-CvboQrUT.js} +1 -1
  40. package/src/web/dist/assets/{radix-B9EIjzyN.js → radix-d0BukFWM.js} +2 -2
  41. package/src/web/dist/assets/router-CqUBCAsx.js +19 -0
  42. package/src/web/dist/assets/segmented-control-5mZhY1KZ.js +1 -0
  43. package/src/web/dist/assets/shared-zfHsnBTk.js +1 -0
  44. package/src/web/dist/assets/switch-CZn1nypU.js +1 -0
  45. package/src/web/dist/assets/tabs-CrNMQMmG.js +1 -0
  46. package/src/web/dist/assets/{types-DYz12j32.js → types-BT3gK5lJ.js} +1 -1
  47. package/src/web/dist/assets/useAppMutation-B29oVzxS.js +1 -0
  48. package/src/web/dist/assets/{useEventStream-CQTreYBE.js → useEventStream-DN2DYBVS.js} +1 -1
  49. package/src/web/dist/assets/useProviderForm-DIuM3Z2u.js +1 -0
  50. package/src/web/dist/assets/vendor-JUtelXU0.js +445 -0
  51. package/src/web/dist/index.html +28 -9
  52. package/src/web/dist/landing.html +7 -7
  53. package/src/web/dist/assets/About-B4KoKSAM.js +0 -1
  54. package/src/web/dist/assets/ApiKeys-CwiStTlS.js +0 -1
  55. package/src/web/dist/assets/Dashboard-khRk8U0-.js +0 -1
  56. package/src/web/dist/assets/DialogShell-BbpG8sot.js +0 -1
  57. package/src/web/dist/assets/Events-BGQklKqB.js +0 -1
  58. package/src/web/dist/assets/Help-B2MDKuj8.js +0 -4
  59. package/src/web/dist/assets/Login-CrvH8tn2.js +0 -1
  60. package/src/web/dist/assets/Logs-DoAgVjw3.js +0 -1
  61. package/src/web/dist/assets/PageSection-Bv6dZZwN.js +0 -1
  62. package/src/web/dist/assets/PageState-U6DpaNu4.js +0 -1
  63. package/src/web/dist/assets/PageToolbar-BnDacS2l.js +0 -1
  64. package/src/web/dist/assets/ProvidersWorkbench-CI7TbMf1.js +0 -1
  65. package/src/web/dist/assets/Settings-BnqMqPol.js +0 -1
  66. package/src/web/dist/assets/Setup-deGPdPcE.js +0 -2
  67. package/src/web/dist/assets/apiKeys-Ol_q3sZL.js +0 -1
  68. package/src/web/dist/assets/app-BBAnVEPg.js +0 -61
  69. package/src/web/dist/assets/badge-RZTsODn-.js +0 -1
  70. package/src/web/dist/assets/card-DhuLMeO9.js +0 -1
  71. package/src/web/dist/assets/clipboard-BnAnBk_-.js +0 -1
  72. package/src/web/dist/assets/disclosure-CJdf1-ap.js +0 -1
  73. package/src/web/dist/assets/global-CWlBZlIY.css +0 -1
  74. package/src/web/dist/assets/metric-card-B_6litu2.js +0 -1
  75. package/src/web/dist/assets/package-DHb277_G.js +0 -1
  76. package/src/web/dist/assets/popover-JpUYyIhi.js +0 -1
  77. package/src/web/dist/assets/router-CUBM_FND.js +0 -19
  78. package/src/web/dist/assets/segmented-control-D80bc13p.js +0 -1
  79. package/src/web/dist/assets/select-BTwqvh0l.js +0 -1
  80. package/src/web/dist/assets/shared-BIsbTzWd.js +0 -1
  81. package/src/web/dist/assets/switch-CeKtgMDT.js +0 -1
  82. package/src/web/dist/assets/table-rPjqxS-f.js +0 -1
  83. package/src/web/dist/assets/tabs-DYNHHISl.js +0 -1
  84. package/src/web/dist/assets/useAppMutation-Ds2SX3kE.js +0 -1
  85. package/src/web/dist/assets/useProviderForm-CtZEenP9.js +0 -1
  86. package/src/web/dist/assets/utils-HY2ZFw0f.js +0 -3
  87. package/src/web/dist/assets/vendor-D2wC0h2o.js +0 -409
@@ -1 +1 @@
1
- const e=15e3,s=6e4;function c(t,n,i){return t==null?"—":`${t.toLocaleString(void 0,i)} ${n}`}function o(t){if(t==null)return"-";if(t<1024)return`${t} B`;const n=["KB","MB","GB","TB"];let i=t/1024,r=0;for(;i>=1024&&r<n.length-1;)i/=1024,r+=1;return`${i.toFixed(i>=100?0:i>=10?1:2)} ${n[r]}`}function f(t){if(t==null)return"-";const n=t<1?0:t;return n<1024?`${n.toLocaleString(void 0,{maximumFractionDigits:n>=100?0:n>=10?1:2})} B/s`:`${o(n)}/s`}function m(t){return t==null?"-":`${t.toLocaleString(void 0,{maximumFractionDigits:t>=10?0:1})}%`}export{e as L,s as T,f as a,c as b,o as c,m as f};
1
+ const e=15e3,s=6e4;function c(t,n,i){return t==null?"—":`${t.toLocaleString(void 0,i)} ${n}`}function o(t){if(t==null)return"-";if(t<1024)return`${t} B`;const n=["KB","MB","GB","TB"];let i=t/1024,r=0;for(;i>=1024&&r<n.length-1;)i/=1024,r+=1;return`${i.toFixed(i>=100?0:i>=10?1:2)} ${n[r]}`}function f(t){if(t==null)return"-";const n=t<1?0:t;return n<1024?`${n.toLocaleString(void 0,{maximumFractionDigits:n>=100?0:n>=10?1:2})} B/s`:`${o(n)}/s`}function m(t){return t==null?"-":`${t.toLocaleString(void 0,{maximumFractionDigits:t>=10?0:1})}%`}export{e as L,s as T,c as a,f as b,o as c,m as f};
@@ -0,0 +1 @@
1
+ import{a as o,b as q}from"./query-CvboQrUT.js";import{u as x,t as y}from"./app-CRxPj2SJ.js";function j({mutationFn:C,successToast:a,errorToast:p,invalidateKeys:u,onSuccess:m,onError:f,...M}){const Q=o(),{pushToast:A}=x();return q({...M,mutationFn:async t=>{try{return await C(t)}catch(i){throw y(i)}},onSuccess:async(t,i,w,h)=>{u!=null&&u.length&&await Promise.all(u.map(g=>Q.invalidateQueries({queryKey:g})));const n=a==null?void 0:a(t,i);n&&A({...n,variant:"success"}),await(m==null?void 0:m(t,i,w,h))},onError:async(t,i,w,h)=>{const n=p==null?void 0:p(t,i);n&&A({...n,variant:"error"}),await(f==null?void 0:f(t,i,w,h))}})}export{j as u};
@@ -1 +1 @@
1
- import{r as t}from"./vendor-D2wC0h2o.js";function x(d){const{level:r,type:o,maxEvents:c=20,enabled:f=!0}=d??{},[l,v]=t.useState([]),[m,s]=t.useState(!1),[S,a]=t.useState(!1),u=t.useRef(null),[p,E]=t.useState(typeof document>"u"?!0:!document.hidden);t.useEffect(()=>{if(typeof document>"u")return;const e=()=>E(!document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]);const i=f&&p;return t.useEffect(()=>{if(!i||typeof EventSource>"u"){s(!1);return}const e=new URLSearchParams;r&&e.set("level",r),o&&e.set("type",o);const y=`/api/events/stream${e.size>0?`?${e.toString()}`:""}`,n=new EventSource(y);return u.current=n,n.onopen=()=>{s(!0),a(!1)},n.onerror=()=>{s(!1),n.readyState===EventSource.CLOSED&&a(!0)},n.onmessage=h=>{try{const b=JSON.parse(h.data);v(g=>[b,...g].slice(0,c))}catch{}},()=>{n.close(),u.current=null,s(!1)}},[i,r,o,c]),{events:l,connected:m,failed:S}}export{x as u};
1
+ import{r as t}from"./vendor-JUtelXU0.js";function x(d){const{level:r,type:o,maxEvents:c=20,enabled:f=!0}=d??{},[l,v]=t.useState([]),[m,s]=t.useState(!1),[S,a]=t.useState(!1),u=t.useRef(null),[p,E]=t.useState(typeof document>"u"?!0:!document.hidden);t.useEffect(()=>{if(typeof document>"u")return;const e=()=>E(!document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]);const i=f&&p;return t.useEffect(()=>{if(!i||typeof EventSource>"u"){s(!1);return}const e=new URLSearchParams;r&&e.set("level",r),o&&e.set("type",o);const y=`/api/events/stream${e.size>0?`?${e.toString()}`:""}`,n=new EventSource(y);return u.current=n,n.onopen=()=>{s(!0),a(!1)},n.onerror=()=>{s(!1),n.readyState===EventSource.CLOSED&&a(!0)},n.onmessage=h=>{try{const b=JSON.parse(h.data);v(g=>[b,...g].slice(0,c))}catch{}},()=>{n.close(),u.current=null,s(!1)}},[i,r,o,c]),{events:l,connected:m,failed:S}}export{x as u};
@@ -0,0 +1 @@
1
+ import{j as e,r as L,aU as Ue,aV as Ce,aC as Ae,au as Ie}from"./vendor-JUtelXU0.js";import{B as I}from"./app-CRxPj2SJ.js";import{S as se,a as re,b as ae,c as te,d as O,D as Re}from"./disclosure-CU-KJc8C.js";import{L as R,I as M}from"./label-CdbE1ezd.js";import{S as Q}from"./switch-CZn1nypU.js";import{c as de}from"./global-BLUcvOa8.js";import{B as He}from"./badge-eRkhnmCs.js";import{u as X}from"./i18n-v60Yn7Ls.js";function Ee({result:s,className:l}){const{t:h}=X();return e.jsxs("div",{className:de("flex flex-wrap items-center gap-2 rounded-lg px-3 py-2 text-xs",s.ok?"bg-success-bg text-success":"bg-destructive/10 text-destructive",l),children:[e.jsx(He,{variant:s.ok?"success":"destructive",className:"shrink-0",children:s.ok?h("workbench.testResult.success"):h("workbench.testResult.failure")}),s.status?e.jsx("span",{className:"shrink-0",children:h("workbench.testResult.status",{status:s.status})}):null,s.durationMs?e.jsx("span",{className:"shrink-0",children:h("workbench.testResult.duration",{duration:`${s.durationMs} ms`})}):null,s.message?e.jsx("span",{className:"min-w-0 truncate",title:s.message,children:s.message}):null]})}function A(){return typeof globalThis.crypto<"u"&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():Math.random().toString(36).slice(2,10)}function ie(){return{_key:A(),id:"",label:"",members:[],failover:ce()}}function Te(){return{_key:A(),target:""}}function ce(){return{consecutiveFailures:"",cooldownSeconds:"",failureWindowSeconds:"",triggerStatusCodes:""}}function Le(s){var l;return{consecutiveFailures:(s==null?void 0:s.consecutiveFailures)!=null?String(s.consecutiveFailures):"",cooldownSeconds:(s==null?void 0:s.cooldownSeconds)!=null?String(s.cooldownSeconds):"",failureWindowSeconds:(s==null?void 0:s.failureWindowSeconds)!=null?String(s.failureWindowSeconds):"",triggerStatusCodes:((l=s==null?void 0:s.triggerStatusCodes)==null?void 0:l.join(", "))??""}}function Oe(){return{_key:A(),name:"",value:""}}function Pe(){return{_key:A(),id:"",label:"",protocol:"anthropic",baseUrl:""}}function Ve(s=!1){return{_key:A(),id:"",label:"",value:"",active:s}}const ee={openai:{baseUrl:"https://api.openai.com/v1"},deepseek:{baseUrl:"https://api.deepseek.com/v1"},huawei:{baseUrl:"https://api.modelarts-maas.com/v1"},kimi:{baseUrl:"https://api.moonshot.cn/v1"},anthropic:{baseUrl:"https://api.anthropic.com/v1"},custom:{},aggregate:{}},De=[{value:"anthropic",label:"Anthropic Messages"},{value:"openai",label:"OpenAI Chat Completions"},{value:"openai-responses",label:"OpenAI Responses"}],We=[{value:"openai",label:"OpenAI"},{value:"deepseek",label:"DeepSeek"},{value:"huawei",label:"Huawei Cloud"},{value:"kimi",label:"Kimi"},{value:"anthropic",label:"Anthropic"},{value:"custom",label:"Custom"},{value:"aggregate",label:"Aggregate"}],ne=[{value:"openai",labelKey:"providers.presets.manualOpenAiCompatible"},{value:"anthropic",labelKey:"providers.presets.manualAnthropicCompatible"},{value:"aggregate",labelKey:"providers.aggregate.typeLabel"}];function Ke(s,l){var h;return s==="aggregate"?l("providers.aggregate.typeLabel"):((h=We.find(S=>S.value===s))==null?void 0:h.label)??"Custom"}function G(s){return s==="anthropic"?"authToken":"apiKey"}function Be(s,l,h){return h(l==="authToken"?"providers.drawer.fields.authModeAuthToken":l==="xAuthToken"?"providers.drawer.fields.authModeXAuthToken":s==="anthropic"?"providers.drawer.fields.authModeApiKey":"providers.drawer.fields.authModeProviderDefault")}function oe(s){return s?{id:s.id,label:s.label??s.id,baseUrl:s.baseUrl??"",apiKey:s.apiKey??"",type:s.type??"custom",defaultModel:s.defaultModel??"",models:(s.models??[]).map(l=>({...l,_key:A(),nonStreamViaStream:l.nonStreamViaStream??void 0,members:(l.members??[]).map(h=>({...h,_key:A()})),failover:Le(l.failover)})),authMode:s.authMode??G(s.type??"custom"),nonStreamViaStream:s.nonStreamViaStream??!1,useAbsoluteUrl:s.useAbsoluteUrl??!1,streamUsage:s.streamUsage===!0,rpmLimit:s.rpmLimit!=null?String(s.rpmLimit):"",rpmMaxWaitSeconds:s.rpmMaxWaitSeconds!=null?String(s.rpmMaxWaitSeconds):"",extraHeaders:Object.entries(s.extraHeaders??{}).map(([l,h])=>({name:l,value:h,_key:A()})),endpoints:(s.endpoints??[]).map(l=>({_key:A(),id:l.id,label:l.label??"",protocol:l.protocol,baseUrl:l.baseUrl})),keys:(s.keys??[]).map(l=>({_key:A(),id:l.id,label:l.label??"",value:l.value,active:l.active===!0})),balanceAdapter:s.balanceAdapter??""}:{id:"",label:"",baseUrl:"",apiKey:"",type:"custom",defaultModel:"",models:[],authMode:G("custom"),nonStreamViaStream:!1,useAbsoluteUrl:!1,streamUsage:!1,rpmLimit:"",rpmMaxWaitSeconds:"",extraHeaders:[],endpoints:[],keys:[],balanceAdapter:""}}function Fe(s){return{_key:A(),id:s.id,label:s.label,nonStreamViaStream:s.nonStreamViaStream,members:[],failover:ce()}}function ms({form:s,errors:l,isCreate:h,advancedOpen:S,onAdvancedOpenChange:x,idInputRef:t,onProviderIdChange:p,onFieldChange:w,onTypeChange:N,onAuthModeChange:k,onNonStreamViaStreamChange:m,onUseAbsoluteUrlChange:D,onStreamUsageChange:W,onAddHeader:K,onRemoveHeader:B,onHeaderChange:y,onEndpointChange:_,onAddEndpoint:U,onRemoveEndpoint:P}){const{t:n}=X(),Y=s.type==="aggregate",[F,Z]=L.useState(!1);return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("section",{className:"space-y-3","aria-labelledby":"provider-type-fields",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{id:"provider-type-fields",className:"text-sm font-semibold",children:n("providers.drawer.sections.type")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:n("providers.drawer.hints.type")})]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[ne.some(g=>g.value===s.type)?null:e.jsx("span",{className:"border border-foreground bg-secondary px-3 py-1.5 text-xs font-medium text-foreground",title:n("providers.drawer.hints.typeVendorPinned"),children:Ke(s.type,n)}),ne.map(g=>{const H=g.value===s.type;return e.jsx("button",{type:"button",onClick:()=>N(g.value),className:de("border px-3 py-1.5 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",H?"border-foreground bg-foreground text-background":"border-border bg-card text-foreground hover:border-foreground/30 hover:bg-accent/50"),children:n(g.labelKey)},g.value)})]})]}),e.jsxs("section",{className:"space-y-3","aria-labelledby":"provider-basic-info",children:[e.jsx("h3",{id:"provider-basic-info",className:"text-sm font-semibold",children:n("providers.drawer.sections.basic")}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs(R,{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.id")}),e.jsx(M,{value:s.id,ref:t,onChange:g=>p(g.target.value),disabled:!h,placeholder:n("providers.drawer.fields.idPlaceholder"),"aria-invalid":!!l.id}),l.id?e.jsx("span",{className:"text-xs text-destructive",children:l.id}):null]}),e.jsxs(R,{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.label")}),e.jsx(M,{value:s.label,onChange:g=>w("label")(g.target.value),placeholder:n("providers.drawer.fields.labelPlaceholder")})]})]}),Y?e.jsxs("div",{className:"space-y-2 border border-border bg-card p-4",children:[" ",e.jsx("p",{className:"text-sm font-semibold",children:n("providers.aggregate.drawer.explainerTitle")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n("providers.aggregate.drawer.explainerBody")})]}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs(R,{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.baseUrlPrimary")}),e.jsx(M,{value:s.baseUrl,onChange:g=>w("baseUrl")(g.target.value),placeholder:n("providers.drawer.fields.baseUrlPlaceholder"),"aria-invalid":!!l.baseUrl}),l.baseUrl?e.jsx("span",{className:"text-xs text-destructive",children:l.baseUrl}):null]}),_&&U&&P?e.jsx(ze,{form:s,errors:l,onEndpointChange:_,onAddEndpoint:U,onRemoveEndpoint:P}):null]})]}),Y?null:e.jsxs("section",{className:"space-y-3","aria-labelledby":"provider-auth-fields",children:[e.jsx("h3",{id:"provider-auth-fields",className:"text-sm font-semibold",children:n("providers.drawer.sections.auth")}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-[minmax(0,1.6fr)_minmax(0,1fr)]",children:[e.jsxs(R,{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.apiKey")}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx(M,{type:F?"text":"password",value:s.apiKey,onChange:g=>w("apiKey")(g.target.value),placeholder:n("providers.drawer.fields.apiKeyPlaceholder"),autoComplete:"off"}),e.jsx(I,{type:"button",variant:"ghost",size:"sm",className:"h-9 w-9 shrink-0 px-0",onClick:()=>Z(g=>!g),"aria-label":n(F?"providers.keys.hide":"providers.keys.reveal"),children:F?e.jsx(Ue,{className:"h-4 w-4","aria-hidden":"true"}):e.jsx(Ce,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.authMode")}),e.jsxs(se,{value:s.authMode,onValueChange:g=>k(g),children:[e.jsx(re,{className:"h-9 text-xs","aria-label":n("providers.drawer.fields.authMode"),title:n("providers.drawer.fields.authModeHint"),children:e.jsx(ae,{})}),e.jsxs(te,{children:[e.jsx(O,{value:"apiKey",children:Be(s.type,"apiKey",n)}),e.jsx(O,{value:"authToken",children:n("providers.drawer.fields.authModeAuthToken")}),e.jsx(O,{value:"xAuthToken",children:n("providers.drawer.fields.authModeXAuthToken")})]})]})]})]}),e.jsxs(Re,{open:S,onOpenChange:x,summary:n("providers.drawer.fields.advancedOptions"),className:"border border-border bg-card",summaryClassName:"px-4 py-3 text-sm font-medium",contentClassName:"border-t border-border px-4 py-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:n("providers.drawer.fields.nonStreamViaStream")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n("providers.drawer.fields.nonStreamViaStreamHint")})]}),e.jsx(Q,{checked:s.nonStreamViaStream,onCheckedChange:m,"aria-label":n("providers.drawer.fields.nonStreamViaStream")})]}),e.jsx("div",{className:"mt-4 border-t border-border pt-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:n("providers.drawer.fields.useAbsoluteUrl")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n("providers.drawer.fields.useAbsoluteUrlHint")})]}),e.jsx(Q,{checked:s.useAbsoluteUrl,onCheckedChange:D,"aria-label":n("providers.drawer.fields.useAbsoluteUrl")})]})}),e.jsx("div",{className:"mt-4 border-t border-border pt-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:n("providers.drawer.fields.streamUsage")}),e.jsx("p",{className:"text-xs leading-relaxed text-warning",children:n("providers.drawer.fields.streamUsageHint")})]}),e.jsx(Q,{checked:s.streamUsage,onCheckedChange:W,"aria-label":n("providers.drawer.fields.streamUsage")})]})}),e.jsxs("div",{className:"mt-4 border-t border-border pt-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:n("providers.drawer.fields.rpmLimitSection")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n("providers.drawer.fields.rpmLimitHint")})]}),e.jsxs("div",{className:"mt-3 grid gap-3 md:grid-cols-2",children:[e.jsxs(R,{className:"flex flex-col gap-1.5 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.rpmLimit")}),e.jsx(M,{type:"number",min:1,value:s.rpmLimit,onChange:g=>w("rpmLimit")(g.target.value),placeholder:n("providers.drawer.fields.rpmLimitPlaceholder"),"aria-invalid":!!l.rpmLimit})]}),e.jsxs(R,{className:"flex flex-col gap-1.5 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.rpmMaxWaitSeconds")}),e.jsx(M,{type:"number",min:1,max:3600,value:s.rpmMaxWaitSeconds,onChange:g=>w("rpmMaxWaitSeconds")(g.target.value),placeholder:n("providers.drawer.fields.rpmMaxWaitPlaceholder"),"aria-invalid":!!l.rpmMaxWaitSeconds})]})]}),l.rpmLimit?e.jsx("p",{className:"mt-2 text-xs text-destructive",children:l.rpmLimit}):null,l.rpmMaxWaitSeconds?e.jsx("p",{className:"mt-2 text-xs text-destructive",children:l.rpmMaxWaitSeconds}):null]}),e.jsxs("div",{className:"mt-4 border-t border-border pt-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:n("providers.drawer.fields.extraHeaders")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n("providers.drawer.fields.extraHeadersHint")})]}),e.jsx(I,{type:"button",variant:"outline",size:"sm",onClick:K,className:"bg-card text-xs",children:n("providers.drawer.fields.addHeader")})]}),l.extraHeaders?e.jsx("p",{className:"mt-2 text-xs text-destructive",children:l.extraHeaders}):null,s.extraHeaders.length>0?e.jsx("div",{className:"mt-3 space-y-3",children:s.extraHeaders.map((g,H)=>e.jsxs("div",{className:"border border-border bg-secondary/40 p-3",children:[e.jsxs("div",{className:"grid gap-3 md:grid-cols-2",children:[e.jsxs(R,{className:"flex flex-col gap-1.5 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.headerName")}),e.jsx(M,{value:g.name,onChange:z=>y(H,{name:z.target.value}),placeholder:n("providers.drawer.fields.headerNamePlaceholder")})]}),e.jsxs(R,{className:"flex flex-col gap-1.5 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:n("providers.drawer.fields.headerValue")}),e.jsx(M,{value:g.value,onChange:z=>y(H,{value:z.target.value}),placeholder:n("providers.drawer.fields.headerValuePlaceholder")})]})]}),e.jsx("div",{className:"mt-2 flex justify-end",children:e.jsx(I,{type:"button",variant:"ghost",size:"sm",className:"h-auto px-2 text-destructive",onClick:()=>B(H),children:n("providers.drawer.fields.removeHeader")})})]},g._key))}):null]})]})]})]})}function ze({form:s,errors:l,onEndpointChange:h,onAddEndpoint:S,onRemoveEndpoint:x}){const{t}=X();return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:t("providers.endpoints.hint")}),e.jsx(I,{type:"button",variant:"outline",size:"sm",onClick:S,className:"shrink-0 bg-card text-xs",children:t("providers.endpoints.add")})]}),s.endpoints.length>0?e.jsx("div",{className:"divide-y divide-border border border-border",children:s.endpoints.map((p,w)=>{var k;const N=(k=l.endpoints)==null?void 0:k[p._key];return e.jsxs("div",{className:"space-y-2 p-3","data-testid":"surface-endpoint-row",children:[e.jsxs("div",{className:"grid gap-2 md:grid-cols-[minmax(0,0.9fr)_150px_minmax(0,1.4fr)_minmax(0,0.9fr)_auto]",children:[e.jsx(M,{value:p.id,onChange:m=>h(w,{id:m.target.value}),placeholder:t("providers.endpoints.idPlaceholder"),"aria-label":t("providers.endpoints.id"),className:"h-8 text-xs","aria-invalid":!!N}),e.jsxs(se,{value:p.protocol,onValueChange:m=>h(w,{protocol:m}),children:[e.jsx(re,{className:"h-8 text-xs","aria-label":t("providers.endpoints.protocol"),children:e.jsx(ae,{})}),e.jsx(te,{children:De.map(m=>e.jsx(O,{value:m.value,children:m.label},m.value))})]}),e.jsx(M,{value:p.baseUrl,onChange:m=>h(w,{baseUrl:m.target.value}),placeholder:t("providers.endpoints.baseUrlPlaceholder"),"aria-label":t("providers.endpoints.baseUrl"),className:"h-8 font-mono text-xs","aria-invalid":!!N}),e.jsx(M,{value:p.label,onChange:m=>h(w,{label:m.target.value}),placeholder:t("providers.endpoints.labelPlaceholder"),"aria-label":t("providers.endpoints.label"),className:"h-8 text-xs"}),e.jsx(I,{type:"button",variant:"ghost",size:"sm",className:"h-8 px-2 text-xs text-destructive",onClick:()=>x(w),children:t("common.delete")})]}),N?e.jsx("p",{className:"text-xs text-destructive",children:N}):null]},p._key)})}):e.jsx("p",{className:"border border-dashed border-border px-3 py-3 text-xs text-muted-foreground",children:t("providers.endpoints.empty")})]})}function us({form:s,errors:l,onModelIdChange:h,onModelChange:S,onAddModel:x,onRemoveModel:t,onModelNonStreamViaStreamChange:p,onSetDefaultModel:w,testVerification:N,probeModels:k}){const{t:m}=X(),D=s.models.filter(y=>y.id.trim().length>0),[W,K]=L.useState(new Set),B=y=>{K(_=>{const U=new Set(_);return U.has(y)?U.delete(y):U.add(y),U})};return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("section",{className:"space-y-3","aria-labelledby":"provider-model-fields",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsx("h3",{id:"provider-model-fields",className:"text-sm font-semibold",children:s.models.length>0?`${m("providers.drawer.fields.models")} (${s.models.length})`:m("providers.drawer.fields.models")}),e.jsxs("div",{className:"flex shrink-0 gap-2",children:[k?e.jsx(I,{type:"button",variant:"outline",size:"sm",onClick:k.onProbe,disabled:!k.available,title:k.available?void 0:m("providers.drawer.probe.needsBaseUrl"),className:"bg-card text-xs",children:m("providers.drawer.probe.button")}):null,e.jsx(I,{type:"button",variant:"outline",size:"sm",onClick:x,className:"bg-card text-xs",children:m("providers.drawer.fields.addModel")})]})]}),l.models?e.jsx("p",{className:"text-xs text-destructive",children:l.models}):null,s.models.length>0?e.jsxs("div",{className:"grid items-center gap-2 border-b border-border pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground md:grid-cols-[auto_minmax(0,1fr)_minmax(0,0.8fr)_auto_auto]",children:[e.jsx("span",{className:"w-5"}),e.jsx("span",{children:m("providers.drawer.fields.modelId")}),e.jsx("span",{children:m("providers.drawer.fields.modelLabel")}),e.jsx("span",{}),e.jsx("span",{})]}):null,e.jsxs("div",{className:"divide-y divide-border border border-border",children:[s.models.map((y,_)=>{const U=W.has(y._key),P=y.nonStreamViaStream!==void 0;return e.jsxs("div",{className:"bg-card",children:[e.jsxs("div",{className:"grid items-center gap-2 px-3 py-2 md:grid-cols-[auto_minmax(0,1fr)_minmax(0,0.8fr)_auto_auto]",children:[e.jsx("input",{type:"radio",name:"defaultModel",value:y.id,"aria-label":m("providers.drawer.fields.setDefault"),checked:s.defaultModel===y.id,onChange:()=>w(y.id),disabled:y.id.trim().length===0,className:"h-4 w-4 shrink-0 accent-primary",title:m("providers.drawer.fields.setDefault")}),e.jsx(M,{value:y.id,onChange:n=>h(_,n.target.value),placeholder:m("providers.drawer.fields.modelIdPlaceholder"),className:"h-7 font-mono text-xs"}),e.jsx(M,{value:y.label??"",onChange:n=>S(_,{label:n.target.value}),placeholder:m("providers.drawer.fields.modelLabelPlaceholder"),className:"h-7 text-xs"}),e.jsx("button",{type:"button",onClick:()=>B(y._key),"aria-label":m("providers.drawer.fields.modelNonStreamViaStream"),title:m("providers.drawer.fields.modelNonStreamViaStream"),className:de("flex h-7 w-7 items-center justify-center border transition-colors",P?"border-foreground/60 text-foreground":"border-border text-muted-foreground hover:text-foreground"),children:U?e.jsx(Ae,{className:"h-3.5 w-3.5","aria-hidden":"true"}):e.jsx(Ie,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),e.jsx(I,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs text-destructive",onClick:()=>t(_),disabled:s.models.length===0,children:m("providers.drawer.fields.removeModel")})]}),U?e.jsx("div",{className:"border-t border-border px-3 pb-2 pt-2",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"shrink-0 text-[11px] text-muted-foreground",children:m("providers.drawer.fields.modelNonStreamViaStream")}),e.jsxs(se,{value:y.nonStreamViaStream===void 0?"inherit":y.nonStreamViaStream?"enabled":"disabled",onValueChange:n=>p(_,n),children:[e.jsx(re,{className:"h-7 w-48 text-xs",children:e.jsx(ae,{})}),e.jsxs(te,{children:[e.jsx(O,{value:"inherit",children:m("providers.drawer.fields.modelNonStreamViaStreamInherit")}),e.jsx(O,{value:"enabled",children:m("providers.drawer.fields.modelNonStreamViaStreamEnabled")}),e.jsx(O,{value:"disabled",children:m("providers.drawer.fields.modelNonStreamViaStreamDisabled")})]})]})]})}):null]},y._key)}),s.models.length===0?e.jsx("div",{className:"border border-warning/30 bg-warning-bg p-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-semibold text-warning",children:m("providers.drawer.noModelsTitle")}),e.jsx("p",{className:"text-xs leading-relaxed text-warning",children:m("providers.drawer.noModelsHint",{providerId:s.id||"provider-id"})}),e.jsxs("div",{className:"bg-secondary/50 p-2.5",children:[e.jsx("p",{className:"mb-1.5 text-xs font-medium text-foreground",children:m("providers.drawer.routeExample")}),e.jsxs("code",{className:"block border border-border bg-card px-2.5 py-1.5 font-mono text-xs text-foreground",children:['"claude-*": "',(s.id||"provider-id").trim()||"provider-id",':*"']})]})]})}):null]}),D.length>1?e.jsx("div",{className:"text-xs text-muted-foreground",children:m("providers.drawer.defaultHint",{model:s.defaultModel||m("providers.card.noDefault")})}):null]}),N?e.jsxs("section",{className:"space-y-3","aria-labelledby":"provider-verify-fields",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{id:"provider-verify-fields",className:"text-sm font-semibold",children:m("workbench.drawer.verifyTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:m("workbench.drawer.verifyHint")})]}),N.available?e.jsxs("div",{className:"space-y-3 border border-border bg-card p-4",children:[e.jsx(I,{type:"button",variant:"outline",size:"sm",onClick:N.onTest,disabled:N.testing,children:N.testing?m("common.actions.testingConnection"):m("workbench.drawer.verifyRun")}),N.result?e.jsx(Ee,{result:N.result}):null]}):e.jsx("p",{className:"bg-secondary/50 px-4 py-3 text-xs text-muted-foreground",children:m("workbench.drawer.verifySaveFirst")})]}):null]})}const $e=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,qe=1e6,Xe=3600,Ye=100,Ge=86400,Ze=86400,Je=/^[^:\s]+:[^:\s]+$/;function Qe(s){if(/^[1-5]xx$/.test(s))return!0;if(/^\d{3}$/.test(s)){const l=Number(s);return l>=100&&l<=599}return!1}function es(s){const l={},h=Number(s.consecutiveFailures.trim());s.consecutiveFailures.trim()&&Number.isInteger(h)&&(l.consecutiveFailures=h);const S=Number(s.cooldownSeconds.trim());s.cooldownSeconds.trim()&&Number.isInteger(S)&&(l.cooldownSeconds=S);const x=Number(s.failureWindowSeconds.trim());s.failureWindowSeconds.trim()&&Number.isInteger(x)&&(l.failureWindowSeconds=x);const t=s.triggerStatusCodes.split(",").map(p=>p.trim()).filter(Boolean);return t.length>0&&(l.triggerStatusCodes=t),Object.keys(l).length>0?l:void 0}function ps({mode:s,provider:l,existingProviderIds:h,providers:S}){const{t:x}=X(),[t,p]=L.useState(()=>oe(l)),[w,N]=L.useState({}),[k,m]=L.useState(!1),D=L.useRef(null),W=L.useCallback(()=>{p(oe(l)),N({}),m(s==="edit")},[l,s]),K=r=>a=>{p(o=>({...o,[r]:a}))},B=r=>{p(a=>{const d=!k||a.label.trim().length===0||a.label===a.id?r:a.label;return{...a,id:r,label:d}})},y=r=>{p(a=>{var v;const d=ee[r??"custom"]??ee.custom,u=G(a.type),i=G(r),f=Object.values(ee).map(E=>E.baseUrl).filter(E=>!!E),b=!a.baseUrl||f.includes(a.baseUrl),c=s==="create"&&(a.models.length===0||a.models.every(E=>E.id.trim().length===0)),j={...a,type:r,authMode:a.authMode===u?i:a.authMode};return d!=null&&d.baseUrl&&b&&(j.baseUrl=d.baseUrl),d!=null&&d.models&&c&&(j.models=d.models.map(Fe),j.defaultModel=d.defaultModel??((v=d.models[0])==null?void 0:v.id)??""),j})},_=(r,a)=>{p(o=>{const d=[...o.models];return d[r]={...d[r],...a},{...o,models:d}})},U=(r,a)=>{p(o=>{const d=[...o.models],u=d[r];if(!u)return o;const i=!k||!u.label||u.label===u.id,f={...u,id:a,label:i?a:u.label};d[r]=f;const b=o.defaultModel===u.id?a:o.defaultModel;return{...o,models:d,defaultModel:b}})},P=r=>{p(a=>{if(r<0||r>=a.models.length)return a;const o=a.models.filter((u,i)=>i!==r);let d=a.defaultModel;return o.some(u=>u.id===d)||(d=""),{...a,models:o,defaultModel:d}})},n=()=>{p(r=>({...r,models:[...r.models,ie()]}))},Y=r=>{p(a=>{const o=new Set(a.models.map(u=>u.id.trim())),d=r.filter(u=>u.id.trim().length>0&&!o.has(u.id.trim())).map(u=>{var i;return{...ie(),id:u.id.trim(),label:((i=u.label)==null?void 0:i.trim())??""}});return d.length===0?a:{...a,models:[...a.models,...d]}})},F=(r,a)=>{p(o=>{const d=[...o.extraHeaders];return d[r]={...d[r],...a},{...o,extraHeaders:d}})},Z=()=>{p(r=>({...r,extraHeaders:[...r.extraHeaders,Oe()]}))},g=r=>{p(a=>{if(r<0||r>=a.extraHeaders.length)return a;const o=a.extraHeaders.filter((d,u)=>u!==r);return{...a,extraHeaders:o}})},H=r=>{p(a=>({...a,authMode:r}))},z=r=>{p(a=>({...a,nonStreamViaStream:r}))},me=r=>{p(a=>({...a,useAbsoluteUrl:r}))},ue=r=>{p(a=>({...a,streamUsage:r}))},pe=(r,a)=>{_(r,{nonStreamViaStream:a==="inherit"?void 0:a==="enabled"})},xe=r=>{p(a=>({...a,defaultModel:r}))},$=(r,a)=>{p(o=>({...o,models:o.models.map(d=>d._key===r?a(d):d)}))},he=r=>{$(r,a=>({...a,members:[...a.members,Te()]}))},be=(r,a)=>{$(r,o=>({...o,members:o.members.filter(d=>d._key!==a)}))},ge=(r,a,o)=>{$(r,d=>({...d,members:d.members.map(u=>u._key===a?{...u,target:o}:u)}))},fe=(r,a,o)=>{a!==o&&$(r,d=>{const u=d.members.findIndex(c=>c._key===a),i=d.members.findIndex(c=>c._key===o);if(u<0||i<0)return d;const f=[...d.members],[b]=f.splice(u,1);return f.splice(i,0,b),{...d,members:f}})},ve=(r,a)=>{$(r,o=>({...o,failover:{...o.failover,...a}}))},ye=(r,a)=>{p(o=>{const d=[...o.endpoints];return d[r]={...d[r],...a},{...o,endpoints:d}})},je=()=>{p(r=>({...r,endpoints:[...r.endpoints,Pe()]}))},Ne=r=>{p(a=>r<0||r>=a.endpoints.length?a:{...a,endpoints:a.endpoints.filter((o,d)=>d!==r)})},we=(r,a)=>{p(o=>{const d=o.keys.map((u,i)=>i===r?{...u,...a}:a.active?{...u,active:!1}:u);return{...o,keys:d}})},Se=()=>{p(r=>({...r,keys:[...r.keys,Ve(r.keys.length===0)]}))},ke=r=>{p(a=>{if(r<0||r>=a.keys.length)return a;const o=a.keys.filter((d,u)=>u!==r);return o.length>0&&!o.some(d=>d.active)&&(o[0]={...o[0],active:!0}),{...a,keys:o}})},Me=r=>{p(a=>({...a,balanceAdapter:r}))},le=()=>{const r={},a=t.id.trim(),o=t.baseUrl.trim();if(s==="create"&&(a.length===0?r.id=x("providers.drawer.errors.idRequired"):h.includes(a)&&(r.id=x("providers.drawer.errors.idDuplicate"))),s==="edit"&&a.length===0&&(r.id=x("providers.drawer.errors.idRequired")),t.type!=="aggregate")if(o.length===0)r.baseUrl=x("providers.drawer.errors.baseUrlInvalid");else try{new URL(o)}catch{r.baseUrl=x("providers.drawer.errors.baseUrlInvalid")}if(t.type==="aggregate"){t.models.length===0&&(r.models=x("providers.drawer.errors.modelsRequired"));const i={},f={},b=new Map((S??[]).map(c=>[c.id,c]));for(const c of t.models){const j=c.members.map(C=>C.target.trim()).filter(C=>C.length>0);if(j.length===0)i[c._key]=x("providers.aggregate.errors.memberRequired");else{const C=new Set;for(const T of j){if(!Je.test(T)){i[c._key]=x("providers.aggregate.errors.memberInvalid");break}const[V]=T.split(":");if(S){const q=b.get(V);if(!q){i[c._key]=x("providers.aggregate.errors.memberDangling",{provider:V});break}if(q.type==="aggregate"||V===t.id.trim()){i[c._key]=x("providers.aggregate.errors.memberNested",{provider:V});break}}if(C.has(T)){i[c._key]=x("providers.aggregate.errors.memberDuplicate",{target:T});break}C.add(T)}}const E=[[c.failover.consecutiveFailures,1,Ye],[c.failover.cooldownSeconds,1,Ge],[c.failover.failureWindowSeconds,1,Ze]].some(([C,T,V])=>{const q=C.trim();if(!q)return!1;const J=Number(q);return!Number.isInteger(J)||J<T||J>V}),_e=c.failover.triggerStatusCodes.split(",").map(C=>C.trim()).filter(Boolean);E?f[c._key]=x("providers.aggregate.errors.failoverInvalid"):_e.some(C=>!Qe(C))&&(f[c._key]=x("providers.aggregate.errors.triggerCodesInvalid"))}Object.keys(i).length>0&&(r.members=i),Object.keys(f).length>0&&(r.failover=f)}if(t.models.length>0){const i=new Set;t.models.some(b=>{const c=b.id.trim();return c.length===0||i.has(c)?!0:(i.add(c),!1)})&&(r.models=x("providers.drawer.errors.modelInvalid"))}t.defaultModel&&!t.models.some(i=>i.id===t.defaultModel)&&(r.models=x("providers.drawer.errors.defaultInvalid"));const d=t.rpmLimit.trim();if(d.length>0){const i=Number(d);(!Number.isInteger(i)||i<1||i>qe)&&(r.rpmLimit=x("providers.drawer.errors.rpmLimitInvalid"))}const u=t.rpmMaxWaitSeconds.trim();if(u.length>0){const i=Number(u);(!Number.isInteger(i)||i<1||i>Xe)&&(r.rpmMaxWaitSeconds=x("providers.drawer.errors.rpmMaxWaitInvalid"))}if(t.extraHeaders.length>0){const i=new Set;for(const f of t.extraHeaders){const b=f.name.trim();if(b.length===0)continue;if(!$e.test(b)){r.extraHeaders=x("providers.drawer.errors.headerNameInvalid");break}const c=b.toLowerCase();if(i.has(c)){r.extraHeaders=x("providers.drawer.errors.headerNameDuplicate");break}i.add(c)}}if(t.type!=="aggregate"&&t.endpoints.length>0){const i={},f=new Set;for(const b of t.endpoints){const c=b.id.trim();if(!c){i[b._key]=x("providers.endpoints.errors.idRequired");continue}if(f.has(c)){i[b._key]=x("providers.endpoints.errors.idDuplicate");continue}f.add(c);const j=b.baseUrl.trim();if(!j){i[b._key]=x("providers.endpoints.errors.baseUrlInvalid");continue}try{const v=new URL(j);if(v.protocol!=="http:"&&v.protocol!=="https:")throw new Error("unsupported protocol")}catch{i[b._key]=x("providers.endpoints.errors.baseUrlInvalid")}}Object.keys(i).length>0&&(r.endpoints=i)}if(t.type!=="aggregate"&&t.keys.length>0){const i={},f=new Set;for(const b of t.keys){const c=b.id.trim();if(!c){i[b._key]=x("providers.keys.errors.idRequired");continue}if(f.has(c)){i[b._key]=x("providers.keys.errors.idDuplicate");continue}f.add(c),b.value.trim()||(i[b._key]=x("providers.keys.errors.valueRequired"))}Object.keys(i).length>0&&(r.keys=i)}return N(r),r};return{form:t,errors:w,advancedOpen:k,setAdvancedOpen:m,providerIdRef:D,isCreate:s==="create",resetForm:W,validate:()=>Object.keys(le()).length===0,validateErrors:le,serialize:()=>{const r=t.type==="aggregate",a=t.models.map(c=>{var j;return{id:c.id.trim(),label:(j=c.label)!=null&&j.trim()?c.label.trim():void 0,nonStreamViaStream:c.nonStreamViaStream,...r?{members:c.members.map(v=>({target:v.target.trim()})).filter(v=>v.target.length>0),failover:es(c.failover)}:null}}).filter(c=>c.id.length>0),o={};for(const c of t.extraHeaders){const j=c.name.trim();j.length>0&&(o[j]=c.value)}const d=Object.keys(o).length>0,u=t.authMode==="apiKey"&&t.type!=="anthropic"?void 0:t.authMode,i={id:t.id.trim(),label:t.label.trim()||t.id.trim(),baseUrl:r?void 0:t.baseUrl.trim(),apiKey:r?void 0:t.apiKey.trim()||void 0,type:t.type??"custom",defaultModel:r?void 0:t.defaultModel||void 0,models:a.length>0?a:void 0,extraHeaders:r?void 0:d?o:void 0,authMode:r?void 0:u};if(!r){const c=t.endpoints.map(v=>({id:v.id.trim(),label:v.label.trim()||void 0,protocol:v.protocol,baseUrl:v.baseUrl.trim()})).filter(v=>v.id.length>0&&v.baseUrl.length>0);c.length>0&&(i.endpoints=c);const j=t.keys.map(v=>({id:v.id.trim(),label:v.label.trim()||void 0,value:v.value,active:v.active?!0:void 0})).filter(v=>v.id.length>0);j.length>0&&(i.keys=j),t.balanceAdapter&&(i.balanceAdapter=t.balanceAdapter)}t.nonStreamViaStream&&(i.nonStreamViaStream=!0),t.useAbsoluteUrl&&(i.useAbsoluteUrl=!0),t.streamUsage&&(i.streamUsage=!0);const f=Number(t.rpmLimit.trim());t.rpmLimit.trim().length>0&&Number.isInteger(f)&&f>=1&&(i.rpmLimit=f);const b=Number(t.rpmMaxWaitSeconds.trim());return t.rpmMaxWaitSeconds.trim().length>0&&Number.isInteger(b)&&b>=1&&(i.rpmMaxWaitSeconds=b),i},handleFieldChange:K,handleProviderIdChange:B,handleTypeChange:y,handleModelChange:_,handleModelIdChange:U,handleRemoveModel:P,handleAddModel:n,handleImportModels:Y,handleHeaderChange:F,handleAddHeader:Z,handleRemoveHeader:g,handleAuthModeChange:H,handleProviderNonStreamViaStreamChange:z,handleUseAbsoluteUrlChange:me,handleStreamUsageChange:ue,handleModelNonStreamViaStreamChange:pe,handleSetDefaultModel:xe,handleAddMember:he,handleRemoveMember:be,handleMemberTargetChange:ge,handleReorderMembers:fe,handleModelFailoverChange:ve,handleEndpointChange:ye,handleAddEndpoint:je,handleRemoveEndpoint:Ne,handleKeyChange:we,handleAddKey:Se,handleRemoveKey:ke,handleBalanceAdapterChange:Me}}export{ms as B,us as M,De as P,Ee as T,ee as a,Be as b,We as c,G as d,Ke as p,ps as u};