@fudrouter/fsrouter 0.6.70 → 0.6.72

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 (178) hide show
  1. package/dist/lib/oauth/providers.js +3 -3
  2. package/package.json +1 -1
  3. package/public/assets/{EndpointPageClient.CGB3HjDe.js → EndpointPageClient.LyNNvZ4z.js} +3 -3
  4. package/public/assets/{Loading.BhEzHe-X.js → Loading.Bj-WGl4k.js} +1 -1
  5. package/public/assets/{NoAuthProxyCard.Buvt0BVH.js → NoAuthProxyCard.qAv57b-0.js} +1 -1
  6. package/public/assets/{index.B-zMpSp_.js → index.CShjRV_B.js} +41 -41
  7. package/public/assets/{page.BINfJPNt.js → page.1qjqvrwX.js} +1 -1
  8. package/public/assets/{page.CfDkX9XZ.js → page.BSLJ4tx5.js} +1 -1
  9. package/public/assets/{page.D6TULIkh.js → page.BbO1pspY.js} +1 -1
  10. package/public/assets/page.BdmJ3yY3.js +5 -0
  11. package/public/assets/{page.Amtgxj_r.js → page.BnmTC5jG.js} +1 -1
  12. package/public/assets/{page.3QwV1pLl.js → page.C72FTTJr.js} +1 -1
  13. package/public/assets/{page.CdbMx9XI.js → page.CPZav1_c.js} +1 -1
  14. package/public/assets/{page.BONoTspJ.js → page.CQlVGoXg.js} +1 -1
  15. package/public/assets/{page.DgnlzpNx.js → page.CSs3-gdt.js} +1 -1
  16. package/public/assets/{page.BV28PqHr.js → page.CXd_R9yU.js} +1 -1
  17. package/public/assets/{page.5Aj6RvuD.js → page.CbkENBd5.js} +1 -1
  18. package/public/assets/{page.BAjUiqtJ.js → page.ChX1NqmC.js} +1 -1
  19. package/public/assets/page.Cj5h09Zo.js +1 -0
  20. package/public/assets/{page.CB__T51y.js → page.CnTop8Zt.js} +1 -1
  21. package/public/assets/{page.BMf0BFTW.js → page.CssmrzTT.js} +1 -1
  22. package/public/assets/{page.CVu_9TAu.js → page.CsxWmPoI.js} +1 -1
  23. package/public/assets/{page.ClXnUNhb.js → page.CzlQTyAL.js} +1 -1
  24. package/public/assets/{page.DAgwiopx.js → page.D1oKew1j.js} +1 -1
  25. package/public/assets/{page.BIG_uMBA.js → page.D5gj98Oe.js} +1 -1
  26. package/public/assets/{page.BW6Rv-_k.js → page.DBhu4Arl.js} +1 -1
  27. package/public/assets/page.DD_czjjP.js +1 -0
  28. package/public/assets/{page.BmOXfa4k.js → page.DPyOkPVo.js} +1 -1
  29. package/public/assets/{page.CTdMdgI4.js → page.DUI8kqOY.js} +1 -1
  30. package/public/assets/{page.BdPGDnx0.js → page.DVIHRbxB.js} +1 -1
  31. package/public/assets/{page.B9r7QI90.js → page.DX4Nno6M.js} +1 -1
  32. package/public/assets/{page.BCPmNscX.js → page.Dh5f0XJC.js} +1 -1
  33. package/public/assets/{page.u7XFxplU.js → page.DibhF7f-.js} +1 -1
  34. package/public/assets/{page.CDVZIbSe.js → page.DxMDTbSx.js} +1 -1
  35. package/public/assets/{page.Bb3E5EzI.js → page.Dx_GRRdT.js} +1 -1
  36. package/public/assets/{page.DhcizW_i.js → page.DzZLqI5Q.js} +1 -1
  37. package/public/assets/{page.CF5pD5lz.js → page.Ir7KvKcF.js} +1 -1
  38. package/public/assets/{page.Bj0au_ka.js → page.O2ddJYoT.js} +3 -3
  39. package/public/assets/{page.DIrcssm-.js → page.Qkkv8roc.js} +1 -1
  40. package/public/assets/{page.CrzjUbZg.js → page.i4KDuWcM.js} +1 -1
  41. package/public/assets/{page.1gncE-Vr.js → page.sOFOrxqq.js} +1 -1
  42. package/public/assets/{page.DskvkVIF.js → page.vla5Mzki.js} +1 -1
  43. package/public/index.html +1 -1
  44. package/public/assets/EndpointPageClient.Cee8kfmV.js +0 -6
  45. package/public/assets/EndpointPageClient.DdAfxJoK.js +0 -6
  46. package/public/assets/EndpointPageClient.GpJ_FKds.js +0 -6
  47. package/public/assets/Loading.DFkQ-Ly9.js +0 -1
  48. package/public/assets/Loading.DaQG3sHF.js +0 -1
  49. package/public/assets/Loading.QMOYJhLu.js +0 -1
  50. package/public/assets/NoAuthProxyCard.C18iZ3Fk.js +0 -89
  51. package/public/assets/NoAuthProxyCard.DyEjms20.js +0 -89
  52. package/public/assets/NoAuthProxyCard.VRP7gDcs.js +0 -89
  53. package/public/assets/index.CoYbjSIL.js +0 -89
  54. package/public/assets/index.DQDDDpp7.js +0 -89
  55. package/public/assets/index.KMEObSAk.js +0 -89
  56. package/public/assets/page.A7FRfarX.js +0 -1
  57. package/public/assets/page.B1a01Vfg.js +0 -1
  58. package/public/assets/page.B7h6EPVo.js +0 -1
  59. package/public/assets/page.BBMJAyy7.js +0 -1
  60. package/public/assets/page.BBSUQskO.js +0 -64
  61. package/public/assets/page.BFENid_V.js +0 -31
  62. package/public/assets/page.BJzBUr1v.js +0 -2
  63. package/public/assets/page.BKM5Up2Y.js +0 -1
  64. package/public/assets/page.BLUEyope.js +0 -1
  65. package/public/assets/page.BMeBT03D.js +0 -5
  66. package/public/assets/page.BQwH91-m.js +0 -1
  67. package/public/assets/page.BRgXbpJe.js +0 -1
  68. package/public/assets/page.BXq7Sixg.js +0 -1
  69. package/public/assets/page.Bbf1xxJj.js +0 -1
  70. package/public/assets/page.BcuklMLO.js +0 -2
  71. package/public/assets/page.Bi5OEfgq.js +0 -1
  72. package/public/assets/page.Bi9gIWN0.js +0 -1
  73. package/public/assets/page.BiLGOe6j.js +0 -1
  74. package/public/assets/page.BicDCwTa.js +0 -1
  75. package/public/assets/page.Bjd38gaf.js +0 -1
  76. package/public/assets/page.Bqk4tX-5.js +0 -1
  77. package/public/assets/page.BrrSjbBJ.js +0 -1
  78. package/public/assets/page.BsUeE2Y_.js +0 -1
  79. package/public/assets/page.BthVvW1e.js +0 -64
  80. package/public/assets/page.BxAWh20c.js +0 -1
  81. package/public/assets/page.C-2GmPmS.js +0 -4
  82. package/public/assets/page.C27wrrub.js +0 -1
  83. package/public/assets/page.C3FwsCq_.js +0 -23
  84. package/public/assets/page.C4RMU4Xv.js +0 -23
  85. package/public/assets/page.C7SC9vwX.js +0 -1
  86. package/public/assets/page.C8gTAwsH.js +0 -5
  87. package/public/assets/page.CECQKY1y.js +0 -5
  88. package/public/assets/page.CEN8xgCA.js +0 -1
  89. package/public/assets/page.CHG9mx5l.js +0 -1
  90. package/public/assets/page.CMUOu9fe.js +0 -1
  91. package/public/assets/page.CRex977Y.js +0 -5
  92. package/public/assets/page.CUsb0F5t.js +0 -1
  93. package/public/assets/page.CXE5AWV3.js +0 -1
  94. package/public/assets/page.CXIP8Wzi.js +0 -4
  95. package/public/assets/page.CXOuLQhq.js +0 -1
  96. package/public/assets/page.CXPMjDX9.js +0 -1
  97. package/public/assets/page.CXPPlybJ.js +0 -6
  98. package/public/assets/page.CYfjd9SF.js +0 -1
  99. package/public/assets/page.CZtbttgE.js +0 -1
  100. package/public/assets/page.CbOSwuwi.js +0 -1
  101. package/public/assets/page.CbWWyTC4.js +0 -1
  102. package/public/assets/page.CfXJWUgA.js +0 -1
  103. package/public/assets/page.CfdTLncK.js +0 -1
  104. package/public/assets/page.ChqEg6y-.js +0 -1
  105. package/public/assets/page.CmbatQd6.js +0 -4
  106. package/public/assets/page.Cp7XaHGI.js +0 -1
  107. package/public/assets/page.CqR-Z0pY.js +0 -1
  108. package/public/assets/page.CsLBZFbk.js +0 -1
  109. package/public/assets/page.CyqTG9Kn.js +0 -2
  110. package/public/assets/page.CzKSjT-r.js +0 -1
  111. package/public/assets/page.D1S50DvR.js +0 -1
  112. package/public/assets/page.D3b1o69R.js +0 -5
  113. package/public/assets/page.D5B_p_2E.js +0 -31
  114. package/public/assets/page.D8X-8LSd.js +0 -2
  115. package/public/assets/page.DA2dX7iN.js +0 -1
  116. package/public/assets/page.DBNjxgJS.js +0 -6
  117. package/public/assets/page.DEBBy5qz.js +0 -1
  118. package/public/assets/page.DEOXc6iv.js +0 -6
  119. package/public/assets/page.DG46DZcu.js +0 -1
  120. package/public/assets/page.DGAKp9YS.js +0 -1
  121. package/public/assets/page.DGico7sP.js +0 -1
  122. package/public/assets/page.DHBHS2oS.js +0 -1
  123. package/public/assets/page.DKdtfq8E.js +0 -2
  124. package/public/assets/page.DKj8qFYb.js +0 -1
  125. package/public/assets/page.DNofNt4p.js +0 -1
  126. package/public/assets/page.DVdv-E5d.js +0 -1
  127. package/public/assets/page.Da-kutqN.js +0 -1
  128. package/public/assets/page.DaW7T6nt.js +0 -1
  129. package/public/assets/page.DhPzWwGm.js +0 -1
  130. package/public/assets/page.Dju6Kwa5.js +0 -1
  131. package/public/assets/page.Dlh3Q_rt.js +0 -1
  132. package/public/assets/page.DmNhmYKk.js +0 -64
  133. package/public/assets/page.Dmvhu2ua.js +0 -1
  134. package/public/assets/page.Dp30ZzXE.js +0 -1
  135. package/public/assets/page.DsY8qNEU.js +0 -1
  136. package/public/assets/page.DtGEStU7.js +0 -1
  137. package/public/assets/page.DuXsnK8A.js +0 -1
  138. package/public/assets/page.DwU6Ubqf.js +0 -1
  139. package/public/assets/page.FmrKiZlG.js +0 -2
  140. package/public/assets/page.GSAm83Cv.js +0 -6
  141. package/public/assets/page.IgH-AWcu.js +0 -1
  142. package/public/assets/page.Ii8wGSnt.js +0 -1
  143. package/public/assets/page.KtURQA9Q.js +0 -1
  144. package/public/assets/page.NFGJtdfx.js +0 -1
  145. package/public/assets/page.QPaIzKAa.js +0 -1
  146. package/public/assets/page.QuBXfL80.js +0 -1
  147. package/public/assets/page.S02TdGZT.js +0 -1
  148. package/public/assets/page.V3CmUOJF.js +0 -1
  149. package/public/assets/page.VClP2n2B.js +0 -1
  150. package/public/assets/page.Vo9Oe8DJ.js +0 -1
  151. package/public/assets/page.WIMFvXoG.js +0 -1
  152. package/public/assets/page.XUya1XZj.js +0 -23
  153. package/public/assets/page.XqKIvnmq.js +0 -31
  154. package/public/assets/page.aAUPKg0H.js +0 -1
  155. package/public/assets/page.aRQdaBbf.js +0 -1
  156. package/public/assets/page.e-Zxfi03.js +0 -1
  157. package/public/assets/page.e-cA5aB5.js +0 -6
  158. package/public/assets/page.eNXd9f58.js +0 -6
  159. package/public/assets/page.gj2B5h2d.js +0 -1
  160. package/public/assets/page.gvZgqycR.js +0 -1
  161. package/public/assets/page.jvowBQYJ.js +0 -1
  162. package/public/assets/page.k_WzlZwU.js +0 -5
  163. package/public/assets/page.qK1RUb_S.js +0 -1
  164. package/public/assets/page.ryYPRTww.js +0 -1
  165. package/public/assets/page.xm98_0dX.js +0 -5
  166. package/public/assets/page.yjCJ-4Uh.js +0 -1
  167. package/public/providers/agentrouter.webp +0 -0
  168. package/public/providers/codebuddy-cn.webp +0 -0
  169. package/public/providers/gigachat.webp +0 -0
  170. package/public/providers/heroku.webp +0 -0
  171. package/public/providers/kimchi.webp +0 -0
  172. package/public/providers/llamagate.webp +0 -0
  173. package/public/providers/mimo-free.webp +0 -0
  174. package/public/providers/nanogpt.webp +0 -0
  175. package/public/providers/nscale.webp +0 -0
  176. package/public/providers/ovhcloud.webp +0 -0
  177. package/public/providers/predibase.webp +0 -0
  178. package/public/providers/zcode.webp +0 -0
@@ -1,4 +0,0 @@
1
- import{j as e,f as l,B as N,g as Ve,M as tt,u as _s,O as gt,A as bt,F as et,c as Ht,W as Fs,h as Ks,i as zs,k as qs,l as Vs,T as Bs,C as Qt,t as Ee}from"./index.KMEObSAk.js";import{b as i,h as Gs,d as Js,L as Yt}from"./router.Cjj1--8t.js";import{B as Ue,T as st,I as ce,S as yt,C as Ne,N as Ws,K as Hs,a as Qs,G as Ys,O as Xs,b as Zs,E as ea}from"./NoAuthProxyCard.DyEjms20.js";import{L as ta,C as Xt}from"./Loading.DFkQ-Ly9.js";import"./zustand.akaTi5uX.js";const sa=600*1e3,Zt=new Map;async function aa(n){if(!(n!=null&&n.url)||!(n!=null&&n.type))return[];const c=Zt.get(n.url);if(c&&Date.now()<c.expiresAt)return c.data;try{const a=new URLSearchParams({url:n.url,type:n.type}),d=await fetch(`/api/providers/suggested-models?${a}`);if(!d.ok)return[];const u=(await d.json()).data??[];return Zt.set(n.url,{data:u,expiresAt:Date.now()+sa}),u}catch{return[]}}function vt({model:n,fullModel:c,alias:a,copied:d,onCopy:x,testStatus:u,isCustom:f,isFree:h,onDeleteAlias:o,onTest:b,isTesting:S,onDisable:C}){const R=u==="ok"?"border-green-500/40":u==="error"?"border-red-500/40":"border-border",L=u==="ok"?"#22c55e":u==="error"?"#ef4444":void 0;return e.jsx("div",{className:`group min-w-0 max-w-full rounded-lg border px-3 py-2 ${R} hover:bg-sidebar/50`,children:e.jsxs("div",{className:"flex min-w-0 items-start gap-2 sm:items-center",children:[e.jsx("span",{className:"material-symbols-outlined shrink-0 text-base",style:L?{color:L}:void 0,children:u==="ok"?"check_circle":u==="error"?"cancel":"smart_toy"}),e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[e.jsx("code",{className:"max-w-[72vw] truncate rounded bg-sidebar px-1.5 py-0.5 font-mono text-xs text-text-muted sm:max-w-[360px]",children:c}),n.name&&e.jsx("span",{className:"truncate pl-1 text-[9px] italic text-text-muted/70",children:n.name})]}),b&&e.jsxs("div",{className:"relative shrink-0 group/btn",children:[e.jsx("button",{onClick:b,disabled:S,className:`rounded p-0.5 text-text-muted transition-opacity hover:bg-sidebar hover:text-primary ${S?"opacity-100":"opacity-100 sm:opacity-0 sm:group-hover:opacity-100"}`,children:e.jsx("span",{className:"material-symbols-outlined text-sm",style:S?{animation:"spin 1s linear infinite"}:void 0,children:S?"progress_activity":"science"})}),e.jsx("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:S?"Testing...":"Test"})]}),e.jsxs("div",{className:"relative shrink-0 group/btn",children:[e.jsx("button",{onClick:()=>x(c,`model-${n.id}`),className:"rounded p-0.5 text-text-muted hover:bg-sidebar hover:text-primary",children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:d===`model-${n.id}`?"check":"content_copy"})}),e.jsx("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:d===`model-${n.id}`?"Copied!":"Copy"})]}),f?e.jsx("button",{onClick:o,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",title:"Remove custom model",children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:"close"})}):C?e.jsx("button",{onClick:C,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",title:"Disable this model",children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:"close"})}):null]})})}vt.propTypes={model:l.shape({id:l.string.isRequired}).isRequired,fullModel:l.string.isRequired,alias:l.string,copied:l.string,onCopy:l.func.isRequired,testStatus:l.oneOf(["ok","error"]),isCustom:l.bool,isFree:l.bool,onDeleteAlias:l.func,onTest:l.func,isTesting:l.bool,onDisable:l.func};l.string.isRequired,l.string.isRequired,l.string,l.func.isRequired,l.func.isRequired,l.func,l.oneOf(["ok","error"]),l.bool;l.string.isRequired,l.object.isRequired,l.string,l.func.isRequired,l.func.isRequired,l.func.isRequired;function la({modelId:n,fullModel:c,copied:a,onCopy:d,onDeleteAlias:x,onTest:u,testStatus:f,isTesting:h}){const o=f==="ok"?"border-green-500/40":f==="error"?"border-red-500/40":"border-border",b=f==="ok"?"#22c55e":f==="error"?"#ef4444":void 0;return e.jsxs("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${o} hover:bg-sidebar/50`,children:[e.jsx("span",{className:"material-symbols-outlined text-base text-text-muted",style:b?{color:b}:void 0,children:f==="ok"?"check_circle":f==="error"?"cancel":"smart_toy"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:n}),e.jsxs("div",{className:"flex items-center gap-1 mt-1",children:[e.jsx("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:c}),e.jsxs("div",{className:"relative group/btn",children:[e.jsx("button",{onClick:()=>d(c,`model-${n}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:a===`model-${n}`?"check":"content_copy"})}),e.jsx("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:a===`model-${n}`?"Copied!":"Copy"})]}),u&&e.jsxs("div",{className:"relative group/btn",children:[e.jsx("button",{onClick:u,disabled:h,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",children:e.jsx("span",{className:"material-symbols-outlined text-sm",style:h?{animation:"spin 1s linear infinite"}:void 0,children:h?"progress_activity":"science"})}),e.jsx("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:h?"Testing...":"Test"})]})]})]}),e.jsx("button",{onClick:x,className:"p-1 hover:bg-red-50 rounded text-red-500",title:"Remove model",children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:"delete"})})]})}function ls({providerStorageAlias:n,providerDisplayAlias:c,modelAliases:a,copied:d,onCopy:x,onSetAlias:u,onDeleteAlias:f,connections:h,isAnthropic:o}){const[b,S]=i.useState(""),[C,R]=i.useState(!1),[L,U]=i.useState(!1),[F,J]=i.useState(null),[X,E]=i.useState({}),Z=async y=>{if(!F){J(y);try{const B=await(await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${n}/${y}`})})).json();E(te=>({...te,[y]:B.ok?"ok":"error"}))}catch{E($=>({...$,[y]:"error"}))}finally{J(null)}}},O=Object.entries(a).filter(([,y])=>y.startsWith(`${n}/`)).map(([y,$])=>({modelId:$.replace(`${n}/`,""),fullModel:$,alias:y})),P=y=>{const $=y.split("/");return $[$.length-1]},g=y=>{const $=`${n}/${y}`;if(Object.values(a).includes($))return null;const B=P(y);if(!a[B])return B;const te=`${c}-${B}`;return a[te]?null:te},_=async()=>{if(!b.trim()||C)return;const y=b.trim(),$=g(y);if(!$){alert("All suggested aliases already exist. Please choose a different model or remove conflicting aliases.");return}R(!0);try{await u(y,$,n),S("")}catch(B){console.log("Error adding model:",B)}finally{R(!1)}},z=async()=>{if(L)return;const y=h.find($=>$.isActive!==!1);if(y){U(!0);try{const $=await fetch(`/api/providers/${y.id}/models`),B=await $.json();if(!$.ok){alert(B.error||"Failed to import models");return}const te=B.models||[];if(te.length===0){alert("No models returned from /models.");return}let ie=0;for(const ne of te){const se=ne.id||ne.name||ne.model;if(!se)continue;const K=g(se);K&&(await u(se,K,n),ie+=1)}ie===0&&alert("No new models were added.")}catch($){console.log("Error importing models:",$)}finally{U(!1)}}},ee=h.some(y=>y.isActive!==!1);return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("p",{className:"text-sm text-text-muted",children:["Add ",o?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),e.jsxs("div",{className:"flex items-end gap-2 flex-wrap",children:[e.jsxs("div",{className:"flex-1 min-w-[240px]",children:[e.jsx("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID"}),e.jsx("input",{id:"new-compatible-model-input",type:"text",value:b,onChange:y=>S(y.target.value),onKeyDown:y=>y.key==="Enter"&&_(),placeholder:o?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]}),e.jsx(N,{size:"sm",icon:"add",onClick:_,disabled:!b.trim()||C,children:C?"Adding...":"Add"}),e.jsx(N,{size:"sm",variant:"secondary",icon:"download",onClick:z,disabled:!ee||L,children:L?"Importing...":"Import from /models"})]}),!ee&&e.jsx("p",{className:"text-xs text-text-muted",children:"Add a connection to enable importing models."}),O.length>0&&e.jsx("div",{className:"flex flex-col gap-3",children:O.map(({modelId:y,fullModel:$,alias:B})=>e.jsx(la,{modelId:y,fullModel:`${c}/${y}`,copied:d,onCopy:x,onDeleteAlias:()=>f(B),onTest:h.length>0?()=>Z(y):void 0,testStatus:X[y],isTesting:F===y},$))})]})}ls.propTypes={providerStorageAlias:l.string.isRequired,providerDisplayAlias:l.string.isRequired,modelAliases:l.object.isRequired,copied:l.string,onCopy:l.func.isRequired,onSetAlias:l.func.isRequired,onDeleteAlias:l.func.isRequired,connections:l.arrayOf(l.shape({id:l.string,isActive:l.bool})).isRequired,isAnthropic:l.bool};function rs({until:n}){const[c,a]=i.useState("");return i.useEffect(()=>{const d=()=>{const u=new Date(n).getTime()-Date.now();if(u<=0){a("");return}const f=Math.floor(u/1e3);if(f<60)a(`${f}s`);else if(f<3600)a(`${Math.floor(f/60)}m ${f%60}s`);else{const h=Math.floor(f/3600),o=Math.floor(f%3600/60);a(`${h}h ${o}m`)}};d();const x=setInterval(d,1e3);return()=>clearInterval(x)},[n]),c?e.jsxs("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",c]}):null}rs.propTypes={until:l.string.isRequired};function is({connection:n,proxyPools:c,isOAuth:a,isFirst:d,isLast:x,onMoveUp:u,onMoveDown:f,onToggleActive:h,onUpdateProxy:o,onEdit:b,onDelete:S,oneByOneStatus:C=null,isSelected:R,onSelect:L}){var pe,we,Ae,Me,ge,me,Ce;const[U,F]=i.useState(!1),[J,X]=i.useState(!1),E=i.useRef(null),Z=new Map((c||[]).map(T=>[T.id,T])),A=((pe=n.providerSpecificData)==null?void 0:pe.proxyPoolId)||null,O=A?Z.get(A):null,P=((we=n.providerSpecificData)==null?void 0:we.connectionProxyEnabled)===!0&&!!((Ae=n.providerSpecificData)!=null&&Ae.connectionProxyUrl),g=!!A||P,_=O?`Pool: ${O.name}`:A?`Pool: ${A} (inactive/missing)`:P?`Legacy: ${(Me=n.providerSpecificData)==null?void 0:Me.connectionProxyUrl}`:"";let z="";if(O!=null&&O.proxyUrl||(ge=n.providerSpecificData)!=null&&ge.connectionProxyUrl){const T=(O==null?void 0:O.proxyUrl)||((me=n.providerSpecificData)==null?void 0:me.connectionProxyUrl);try{const le=new URL(T);z=`${le.protocol}//${le.hostname}${le.port?`:${le.port}`:""}`}catch{z=T}}const ee=(O==null?void 0:O.noProxy)||((Ce=n.providerSpecificData)==null?void 0:Ce.connectionNoProxy)||"";let y="default";(O==null?void 0:O.isActive)===!0?y="success":(A||P)&&(y="error"),i.useEffect(()=>{if(!U)return;const T=le=>{E.current&&!E.current.contains(le.target)&&F(!1)};return document.addEventListener("mousedown",T),()=>document.removeEventListener("mousedown",T)},[U]);const $=async T=>{X(!0);try{await o(T==="__none__"?null:T)}finally{X(!1),F(!1)}},B=n.authType||(a?"oauth":"apikey"),te=B==="oauth",ie=B==="cookie",ne=ie?"cookie":te?"lock":"key",se=te?"OAuth":ie?"Cookie":"API Key",K=T=>typeof T=="string"&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(T),Q=te?K(n.email)?n.email:K(n.name)?n.name:n.name||n.email||n.displayName||"OAuth Account":n.name||n.email||n.displayName||"API Key",[oe,ue]=i.useState(!1),fe=Object.entries(n).filter(([T])=>T.startsWith("modelLock_")).map(([,T])=>T).filter(T=>!!T).sort()[0]||null;i.useEffect(()=>{const T=()=>{const v=Object.entries(n).filter(([Y])=>Y.startsWith("modelLock_")).map(([,Y])=>Y).filter(Y=>Y&&new Date(Y).getTime()>Date.now()).sort()[0]||null;ue(!!v)};T();const le=fe?setInterval(T,1e3):null;return()=>{le&&clearInterval(le)}},[fe]);const W=n.testStatus==="unavailable"&&!oe?"active":n.testStatus,be=()=>n.isActive===!1?"default":W==="active"||W==="success"?"success":W==="error"||W==="expired"||W==="unavailable"?"error":"default",ke=()=>C?C.state==="success"?"success":C.state==="failed"?"error":C.state==="testing"?"primary":"default":"default",ye=()=>C?C.state==="queued"?"queued":C.state==="testing"?"testing":C.state==="success"?"success":C.state==="failed"?C.error?`failed: ${C.error}`:"failed":null:null;return e.jsxs("div",{className:`group flex min-w-0 flex-col gap-3 rounded-lg p-2 transition-colors hover:bg-black/[0.02] dark:hover:bg-white/[0.02] sm:flex-row sm:items-center sm:justify-between ${n.isActive===!1?"opacity-60":""}`,children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-start gap-2 sm:items-center sm:gap-3",children:[L&&e.jsx("input",{type:"checkbox",checked:R,onChange:L,className:"mt-1 sm:mt-0 h-4 w-4 shrink-0 rounded border-black/20 text-primary focus:ring-primary dark:border-white/20 dark:bg-black"}),e.jsxs("div",{className:"flex shrink-0 flex-col",children:[e.jsx("button",{onClick:u,disabled:d,className:`p-0.5 rounded ${d?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_up"})}),e.jsx("button",{onClick:f,disabled:x,className:`p-0.5 rounded ${x?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:e.jsx("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_down"})})]}),e.jsx("span",{className:"material-symbols-outlined shrink-0 text-base text-text-muted",children:ne}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:Q}),e.jsxs("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 sm:gap-2",children:[e.jsx(Ue,{variant:be(),size:"sm",dot:!0,children:n.isActive===!1?"disabled":W||"Unknown"}),e.jsx(Ue,{variant:"default",size:"sm",children:se}),g&&e.jsx(Ue,{variant:y,size:"sm",children:"Proxy"}),oe&&n.isActive!==!1&&e.jsx(rs,{until:fe}),n.lastError&&n.isActive!==!1&&e.jsx("span",{className:"max-w-full truncate text-xs text-red-500 sm:max-w-[300px]",title:n.lastError,children:n.lastError}),e.jsxs("span",{className:"text-xs text-text-muted",children:["#",n.priority]}),n.globalPriority&&e.jsxs("span",{className:"text-xs text-text-muted",children:["Auto: ",n.globalPriority]}),ye()&&e.jsx(Ue,{variant:ke(),size:"sm",children:ye()})]}),g&&e.jsxs("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"max-w-full truncate text-[11px] text-text-muted sm:max-w-[420px]",title:_,children:_}),z&&e.jsx("code",{className:"max-w-full truncate rounded bg-black/5 px-1 py-0.5 font-mono text-[10px] text-text-muted dark:bg-white/5 sm:max-w-[260px]",children:z}),ee&&e.jsxs("span",{className:"max-w-full truncate text-[11px] text-text-muted sm:max-w-[320px]",title:ee,children:["no_proxy: ",ee]})]})]})]}),e.jsxs("div",{className:"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end",children:[e.jsxs("div",{className:"grid flex-1 grid-cols-3 gap-1 sm:flex sm:flex-none",children:[(c||[]).length>0&&e.jsxs("div",{className:"relative",ref:E,children:[e.jsxs("button",{onClick:()=>F(T=>!T),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${g?"text-primary":"text-text-muted hover:text-primary"}`,disabled:J,children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:J?"progress_activity":"lan"}),e.jsx("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),U&&e.jsxs("div",{className:"absolute right-0 top-full z-50 mt-1 max-w-[78vw] min-w-[160px] rounded-lg border border-border bg-bg py-1 shadow-lg",children:[e.jsx("button",{onClick:()=>$("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${A?"text-text-main":"text-primary font-medium"}`,children:"None"}),(c||[]).map(T=>e.jsx("button",{onClick:()=>$(T.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${A===T.id?"text-primary font-medium":"text-text-main"}`,children:T.name},T.id))]})]}),e.jsxs("button",{onClick:b,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),e.jsx("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),e.jsxs("button",{onClick:S,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 hover:bg-red-500/10",children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),e.jsx("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),e.jsx(st,{size:"sm",checked:n.isActive??!0,onChange:h,title:n.isActive??!0?"Disable connection":"Enable connection"})]})]})}is.propTypes={connection:l.shape({id:l.string,name:l.string,email:l.string,displayName:l.string,modelLockUntil:l.string,testStatus:l.string,isActive:l.bool,lastError:l.string,priority:l.number,globalPriority:l.number}).isRequired,proxyPools:l.arrayOf(l.shape({id:l.string,name:l.string,proxyUrl:l.string,noProxy:l.string,isActive:l.bool})),isOAuth:l.bool.isRequired,isFirst:l.bool.isRequired,isLast:l.bool.isRequired,onMoveUp:l.func.isRequired,onMoveDown:l.func.isRequired,onToggleActive:l.func.isRequired,onUpdateProxy:l.func,onEdit:l.func.isRequired,onDelete:l.func.isRequired,oneByOneStatus:l.shape({state:l.string,error:l.string}),isSelected:l.bool,onSelect:l.func};const ra=`name1|sk-key1
2
- name2|sk-key2
3
- sk-key-only-auto-named`;function ns({isOpen:n,provider:c,providerName:a,isCompatible:d,isAnthropic:x,authType:u,authHint:f,website:h,proxyPools:o,error:b,onSave:S,onBulkDone:C,onClose:R}){var ge,me,Ce,T,le;const L="__none__",U=c==="ollama-local",F=u==="cookie",J=c==="xai"&&!F,X=F?"Cookie Value":"API Key",E=F?c==="grok-web"?"sso=xxxxx... or just the raw value":"eyJhbGciOi...":J?"xai-...":"",Z=c==="azure",A=c==="cloudflare-ai",O=((me=(ge=Ve)==null?void 0:ge[c])==null?void 0:me.regions)||null,P=((T=(Ce=Ve)==null?void 0:Ce[c])==null?void 0:T.defaultRegion)||((le=O==null?void 0:O[0])==null?void 0:le.id)||"",[g,_]=i.useState({name:"",apiKey:"",email:"",defaultModel:"",priority:1,proxyPoolId:L,ollamaHostUrl:""}),[z,ee]=i.useState({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[y,$]=i.useState({accountId:""}),[B,te]=i.useState(P),[ie,ne]=i.useState(!1),[se,K]=i.useState(null),[Q,oe]=i.useState(!1),[ue,fe]=i.useState("single"),[W,be]=i.useState(""),[ke,ye]=i.useState(null),pe=()=>{if(U&&g.ollamaHostUrl.trim())return{baseUrl:g.ollamaHostUrl.trim()};if(Z)return{azureEndpoint:z.azureEndpoint,apiVersion:z.apiVersion,deployment:z.deployment,organization:z.organization};if(A)return{accountId:y.accountId};if(O&&B)return{region:B}},we=async()=>{ne(!0);try{const Y=await(await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:c,apiKey:g.apiKey,providerSpecificData:pe()})})).json();K(Y.valid?"success":"failed")}catch{K("failed")}finally{ne(!1)}},Ae=async()=>{if(c&&!(!U&&!g.apiKey)&&!(!U&&!g.name)&&!(d&&!g.defaultModel.trim())){oe(!0);try{let v=!1;try{ne(!0),K(null),v=!!(await(await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:c,apiKey:g.apiKey,providerSpecificData:pe()})})).json()).valid,K(v?"success":"failed")}catch{K("failed")}finally{ne(!1)}await S({name:g.name||(U?"Ollama Local":""),apiKey:g.apiKey,email:c==="codebuddy"?g.email:void 0,defaultModel:d?g.defaultModel.trim():void 0,priority:g.priority,proxyPoolId:g.proxyPoolId===L?null:g.proxyPoolId,testStatus:v?"active":"unknown",providerSpecificData:pe()})}finally{oe(!1)}}},Me=async()=>{const v=W.split(`
4
- `).map(s=>s.trim()).filter(Boolean);if(!v.length)return;oe(!0),ye(null);let Y=0,Re=0;for(let s=0;s<v.length;s++){const m=v[s];let k="",G="",xe="";if(c==="codebuddy"){const q=m.includes("|")?m.split("|"):m.split(":");q.length>=2?q.length===3?(xe=q[0].trim(),G=q[1].trim(),k=q[2].trim()):(G=q[0].trim(),k=q[1].trim(),xe=G):(k=q[0].trim(),xe=`Key ${s+1}`)}else{const q=m.split("|");k=q.length>=2?q.slice(1).join("|").trim():q[0].trim(),xe=`${q.length>=2?q[0].trim():"Key"} ${s+1}`}try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:c,apiKey:k,email:G||void 0,name:xe,priority:1,testStatus:"unknown"})})).ok?Y++:Re++}catch{Re++}}oe(!1),ye({success:Y,failed:Re}),Y>0&&C&&C()};return c?e.jsx(tt,{isOpen:n,title:`Add ${a||c} ${X}`,onClose:R,children:e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(N,{size:"sm",variant:ue==="single"?"primary":"ghost",onClick:()=>{fe("single"),ye(null)},children:"Single"}),e.jsx(N,{size:"sm",variant:ue==="bulk"?"primary":"ghost",onClick:()=>{fe("bulk"),ye(null)},children:"Bulk Add"})]}),ue==="bulk"&&e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("p",{className:"text-xs text-text-muted",children:c==="codebuddy"?e.jsxs(e.Fragment,{children:["One key per line. Format: ",e.jsx("code",{children:"email:apiKey"})," or ",e.jsx("code",{children:"name|email|apiKey"}),"."]}):e.jsxs(e.Fragment,{children:["One key per line. Format: ",e.jsx("code",{children:"name|apiKey"})," or just ",e.jsx("code",{children:"apiKey"})," (auto-named by index)."]})}),e.jsx("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 text-sm font-mono resize-y min-h-[140px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:ra,value:W,onChange:v=>be(v.target.value)}),ke&&e.jsxs("div",{className:`text-sm font-medium ${ke.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",ke.success," added",ke.failed>0?`, ✗ ${ke.failed} failed`:""]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(N,{onClick:Me,fullWidth:!0,disabled:Q||!W.trim(),children:Q?"Adding...":"Add All Keys"}),e.jsx(N,{onClick:R,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),ue==="single"&&e.jsxs(e.Fragment,{children:[c==="codebuddy"&&e.jsx(ce,{label:"Email / Account ID",value:g.email,onChange:v=>_({...g,email:v.target.value}),placeholder:"your-codebuddy-email@example.com"}),e.jsx(ce,{label:"Name",value:g.name,onChange:v=>_({...g,name:v.target.value}),placeholder:U?"Ollama Local":"Production Key"}),U&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx(ce,{label:"Ollama Host URL",value:g.ollamaHostUrl,onChange:v=>_({...g,ollamaHostUrl:v.target.value}),placeholder:"http://localhost:11434",className:"flex-1"}),e.jsx("div",{className:"pt-6",children:e.jsx(N,{onClick:we,disabled:ie||Q,variant:"secondary",children:ie?"Checking...":"Check"})})]}),!U&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx(ce,{label:X,type:F?"text":"password",value:g.apiKey,onChange:v=>_({...g,apiKey:v.target.value}),placeholder:E,className:"flex-1"}),e.jsx("div",{className:"pt-6",children:e.jsx(N,{onClick:we,disabled:!g.apiKey||ie||Q,variant:"secondary",children:ie?"Checking...":"Check"})})]}),J&&e.jsx("p",{className:"text-xs text-text-muted",children:"Use a direct xAI API key from console.x.ai. This is separate from Grok Build OAuth."}),F&&f&&e.jsxs("p",{className:"text-xs text-text-muted",children:[f,h&&e.jsxs(e.Fragment,{children:[" ",e.jsxs("a",{href:h,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:["Open ",h.replace(/^https?:\/\//,"")]})]})]}),O&&e.jsx(yt,{label:"Region",value:B,onChange:v=>te(v.target.value),options:O.map(v=>({value:v.id,label:v.label}))}),d&&e.jsx(ce,{label:"Default Model",value:g.defaultModel,onChange:v=>_({...g,defaultModel:v.target.value}),placeholder:x?"claude-3-5-sonnet-latest":"gpt-4o-mini"}),U&&e.jsxs("p",{className:"text-xs text-text-muted",children:["Leave blank to use ",e.jsx("code",{children:"http://localhost:11434"}),". For remote Ollama, enter the full host URL (e.g. ",e.jsx("code",{children:"http://192.168.1.10:11434"}),")."]}),se&&e.jsx(Ue,{variant:se==="success"?"success":"error",children:se==="success"?"Valid":"Invalid"}),b&&e.jsx("p",{className:"text-xs text-red-500 break-words",children:b}),d&&e.jsx("p",{className:"text-xs text-text-muted",children:"Enter the model ID exactly as your compatible endpoint expects it. This model will be saved as the connection default."}),A&&e.jsxs("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[e.jsx("h3",{className:"font-semibold mb-3 text-sm",children:"Cloudflare Workers AI"}),e.jsx(ce,{label:"Account ID",value:y.accountId,onChange:v=>$({...y,accountId:v.target.value}),placeholder:"abc123def456..."}),e.jsxs("p",{className:"text-xs text-text-muted mt-2",children:["Find your Account ID in the right sidebar of ",e.jsx("a",{href:"https://dash.cloudflare.com",target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:"dash.cloudflare.com"})]})]}),Z&&e.jsxs("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[e.jsx("h3",{className:"font-semibold mb-3 text-sm",children:"Azure OpenAI Configuration"}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(ce,{label:"Azure Endpoint",value:z.azureEndpoint,onChange:v=>ee({...z,azureEndpoint:v.target.value}),placeholder:"https://your-resource.openai.azure.com"}),e.jsx(ce,{label:"Deployment Name",value:z.deployment,onChange:v=>ee({...z,deployment:v.target.value}),placeholder:"gpt-4"}),e.jsx(ce,{label:"API Version",value:z.apiVersion,onChange:v=>ee({...z,apiVersion:v.target.value}),placeholder:"2024-10-01-preview"}),e.jsx(ce,{label:"Organization",value:z.organization,onChange:v=>ee({...z,organization:v.target.value}),placeholder:"Organization ID"})]})]}),e.jsx(ce,{label:"Priority",type:"number",value:g.priority,onChange:v=>_({...g,priority:Number.parseInt(v.target.value)||1})}),e.jsx(yt,{label:"Proxy Pool",value:g.proxyPoolId,onChange:v=>_({...g,proxyPoolId:v.target.value}),options:[{value:L,label:"None"},...(o||[]).map(v=>({value:v.id,label:v.name}))],placeholder:"None"}),(o||[]).length===0&&e.jsx("p",{className:"text-xs text-text-muted",children:"No active proxy pools available. Create one in Proxy Pools page first."}),e.jsx("p",{className:"text-xs text-text-muted",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(N,{onClick:Ae,fullWidth:!0,disabled:Q||!U&&(!g.name||!g.apiKey)||d&&!g.defaultModel.trim()||Z&&(!z.azureEndpoint||!z.deployment||!z.organization)||A&&!y.accountId,children:Q?"Saving...":"Save"}),e.jsx(N,{onClick:R,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}ns.propTypes={isOpen:l.bool.isRequired,provider:l.string,providerName:l.string,isCompatible:l.bool,isAnthropic:l.bool,authType:l.string,authHint:l.string,website:l.string,proxyPools:l.arrayOf(l.shape({id:l.string,name:l.string})),error:l.string,onSave:l.func.isRequired,onBulkDone:l.func,onClose:l.func.isRequired};function os({isOpen:n,node:c,onSave:a,onClose:d,isAnthropic:x}){const[u,f]=i.useState({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[h,o]=i.useState(!1),[b,S]=i.useState(""),[C,R]=i.useState(""),[L,U]=i.useState(!1),[F,J]=i.useState(null);i.useEffect(()=>{c&&f({name:c.name||"",prefix:c.prefix||"",apiType:c.apiType||"chat",baseUrl:c.baseUrl||(x?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[c,x]);const X=[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],E=async()=>{if(!(!u.name.trim()||!u.prefix.trim()||!u.baseUrl.trim())){o(!0);try{const A={name:u.name,prefix:u.prefix,baseUrl:u.baseUrl};x||(A.apiType=u.apiType),await a(A)}finally{o(!1)}}},Z=async()=>{U(!0);try{const O=await(await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:u.baseUrl,apiKey:b,type:x?"anthropic-compatible":"openai-compatible",modelId:C.trim()||void 0})})).json();J(O.valid?"success":"failed")}catch{J("failed")}finally{U(!1)}};return c?e.jsx(tt,{isOpen:n,title:`Edit ${x?"Anthropic":"OpenAI"} Compatible`,onClose:d,children:e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(ce,{label:"Name",value:u.name,onChange:A=>f({...u,name:A.target.value}),placeholder:`${x?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),e.jsx(ce,{label:"Prefix",value:u.prefix,onChange:A=>f({...u,prefix:A.target.value}),placeholder:x?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!x&&e.jsx(yt,{label:"API Type",options:X,value:u.apiType,onChange:A=>f({...u,apiType:A.target.value})}),e.jsx(ce,{label:"Base URL",value:u.baseUrl,onChange:A=>f({...u,baseUrl:A.target.value}),placeholder:x?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${x?"Anthropic":"OpenAI"}-compatible API.`}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(ce,{label:"API Key (for Check)",type:"password",value:b,onChange:A=>S(A.target.value),className:"flex-1"}),e.jsx("div",{className:"pt-6",children:e.jsx(N,{onClick:Z,disabled:!b||L||!u.baseUrl.trim(),variant:"secondary",children:L?"Checking...":"Check"})})]}),e.jsx(ce,{label:"Model ID (optional)",value:C,onChange:A=>R(A.target.value),placeholder:"e.g. my-model-id",hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),F&&e.jsx(Ue,{variant:F==="success"?"success":"error",children:F==="success"?"Valid":"Invalid"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(N,{onClick:E,fullWidth:!0,disabled:!u.name.trim()||!u.prefix.trim()||!u.baseUrl.trim()||h,children:h?"Saving...":"Save"}),e.jsx(N,{onClick:d,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}os.propTypes={isOpen:l.bool.isRequired,node:l.shape({id:l.string,name:l.string,prefix:l.string,apiType:l.string,baseUrl:l.string}),onSave:l.func.isRequired,onClose:l.func.isRequired,isAnthropic:l.bool};const ia={llm:{label:"LLM / Chat",icon:"smart_toy",color:"text-blue-400"},image:{label:"Image Generation",icon:"brush",color:"text-purple-400"},video:{label:"Video Generation",icon:"movie",color:"text-orange-400"}};function ds({isOpen:n,providerAlias:c,providerDisplayAlias:a,allowedKinds:d,onSave:x,onClose:u}){const f=d!=null&&d.length?d:["llm"],h=f.includes("llm")?"llm":f[0],[o,b]=i.useState(""),[S,C]=i.useState(h),[R,L]=i.useState(null),[U,F]=i.useState(""),[J,X]=i.useState(!1);i.useEffect(()=>{n&&(b(""),L(null),F(""),C(h))},[n,h]);const E=P=>{const g=`${c}/`;return P.startsWith(g)?P.slice(g.length):P},Z=async()=>{const P=E(o.trim());if(P){L("testing"),F("");try{const _=await(await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${c}/${P}`})})).json();L(_.ok?"ok":"error"),F(_.error||"")}catch(g){L("error"),F(g.message)}}},A=async()=>{const P=E(o.trim());if(!(!P||J)){X(!0);try{await x(P,S)}finally{X(!1)}}},O=f.length>1;return e.jsx(tt,{isOpen:n,onClose:u,title:"Add Custom Model",children:e.jsxs("div",{className:"flex flex-col gap-4",children:[O&&e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium mb-2 block",children:"Model Type"}),e.jsx("div",{className:"flex gap-2",children:f.map(P=>{const g=ia[P]||{label:P,icon:"category",color:"text-text-muted"},_=S===P;return e.jsxs("button",{onClick:()=>C(P),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-xs font-medium transition-all ${_?"border-primary bg-primary/10 text-primary":"border-border bg-sidebar text-text-muted hover:border-primary/40 hover:text-primary"}`,children:[e.jsx("span",{className:`material-symbols-outlined text-sm ${_?"text-primary":g.color}`,children:g.icon}),g.label]},P)})})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:o,onChange:P=>{b(P.target.value),L(null),F("")},onKeyDown:P=>P.key==="Enter"&&Z(),placeholder:S==="image"?"e.g. leo-seedream":S==="video"?"e.g. leo-kling-3":"e.g. claude-opus-4-5",className:"flex-1 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),S==="llm"&&e.jsx(N,{variant:"secondary",icon:"science",loading:R==="testing",onClick:Z,disabled:!o.trim()||R==="testing",children:R==="testing"?"Testing...":"Test"})]}),e.jsxs("p",{className:"text-xs text-text-muted mt-1",children:["Will be registered as:"," ",e.jsxs("code",{className:"font-mono bg-sidebar px-1 rounded",children:[a,"/",E(o.trim())||"model-id"]})]})]}),R==="ok"&&e.jsxs("div",{className:"flex items-center gap-2 text-sm text-green-500",children:[e.jsx("span",{className:"material-symbols-outlined text-base",children:"check_circle"}),"Model is reachable"]}),R==="error"&&e.jsxs("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[e.jsx("span",{className:"material-symbols-outlined text-base shrink-0",children:"cancel"}),e.jsx("span",{children:U||"Model not reachable"})]}),e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx(N,{onClick:u,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),e.jsx(N,{onClick:A,fullWidth:!0,size:"sm",disabled:!o.trim()||J,children:J?"Adding...":"Add Model"})]})]})})}ds.propTypes={isOpen:l.bool.isRequired,providerAlias:l.string.isRequired,providerDisplayAlias:l.string.isRequired,allowedKinds:l.arrayOf(l.string),onSave:l.func.isRequired,onClose:l.func.isRequired};const na=[{pattern:/kling.*o3|kling-o3/,caps:{startFrame:!0,endFrame:!1,imageReference:!0,videoReference:!0,defaultImageReferenceStrength:"MID",durations:[5,10],defaultDuration:5,defaultResolution:"1080p",defaultAspectRatio:"16:9"},label:"Kling O3"},{pattern:/kling.*3\./,caps:{startFrame:!0,endFrame:!1,durations:[5,10,12],defaultDuration:10,defaultResolution:"720p",defaultAspectRatio:"16:9"},label:"Kling 3.x"},{pattern:/kling/,caps:{startFrame:!0,endFrame:!1,durations:[5,10],defaultDuration:5,defaultResolution:"1080p",defaultAspectRatio:"16:9"},label:"Kling 2.x"},{pattern:/seedance.*lite/,caps:{startFrame:!0,endFrame:!1,durations:[4,8],defaultDuration:4,defaultResolution:"480p",defaultAspectRatio:"16:9"},label:"Seedance Lite"},{pattern:/seedance/,caps:{startFrame:!0,endFrame:!0,durations:[4,8,10],defaultDuration:8,defaultResolution:"720p",defaultAspectRatio:"16:9"},label:"Seedance"},{pattern:/veo-3\.1|veo.*3\.1/,caps:{startFrame:!0,endFrame:!1,durations:[4,6,8],defaultDuration:8,defaultResolution:"720p",defaultAspectRatio:"16:9"},label:"Veo 3.1"},{pattern:/veo/,caps:{startFrame:!0,endFrame:!1,durations:[8],defaultDuration:8,defaultResolution:"720p",defaultAspectRatio:"16:9"},label:"Veo 3"},{pattern:/sora/,caps:{startFrame:!1,endFrame:!1,durations:[4,8,12],defaultDuration:8,defaultResolution:"720p",defaultAspectRatio:"16:9"},label:"Sora"},{pattern:/hailuo/,caps:{startFrame:!0,endFrame:!1,durations:[6,10],defaultDuration:6,defaultResolution:"768p",defaultAspectRatio:"16:9"},label:"Hailuo"},{pattern:/ltx/,caps:{startFrame:!0,endFrame:!0,durations:[6,8,10],defaultDuration:6,defaultResolution:"1080p",defaultAspectRatio:"16:9"},label:"LTX"},{pattern:/motion/,caps:{startFrame:!0,endFrame:!1,durations:[5],defaultDuration:5,defaultResolution:"720p",defaultAspectRatio:"16:9"},label:"Motion"}],oa=[{pattern:/seedream.*4\.5/,caps:{apiVersion:"v2",resolutionTiers:{SMALL:null,MEDIUM:{base:2048},LARGE:{base:4096}},defaultTier:"MEDIUM",imageReference:!0,refMethod:"guidances",maxRefs:6,strengthSupported:!0,defaultStrength:"MID",supportsStyleIds:!0},label:"Seedream 4.5"},{pattern:/seedream/,caps:{apiVersion:"v2",resolutionTiers:{SMALL:{base:1024},MEDIUM:{base:2048},LARGE:{base:4096}},defaultTier:"MEDIUM",imageReference:!0,refMethod:"guidances",maxRefs:6,strengthSupported:!0,defaultStrength:"MID",supportsStyleIds:!0},label:"Seedream"},{pattern:/flux-dev/,caps:{apiVersion:"v1",resolutionTiers:{SMALL:null,MEDIUM:null,LARGE:null},defaultTier:null,imageReference:!0,refMethod:"controlnets",maxRefs:1,strengthSupported:!0,defaultStrength:"MID",preprocessorId:233},label:"Flux Dev"},{pattern:/flux/,caps:{apiVersion:"v2",resolutionTiers:{SMALL:null,MEDIUM:{base:1024},LARGE:null},defaultTier:"MEDIUM",imageReference:!0,refMethod:"guidances",maxRefs:4,strengthSupported:!0,defaultStrength:"MID"},label:"Flux"},{pattern:/phoenix/,caps:{apiVersion:"v1",resolutionTiers:{SMALL:null,MEDIUM:null,LARGE:null},defaultTier:null,imageReference:!0,refMethod:"controlnets",maxRefs:1,strengthSupported:!0,defaultStrength:"MID",preprocessorId:364,supportsContrast:!0,supportsUltra:!0},label:"Phoenix"},{pattern:/ideogram/,caps:{apiVersion:"v2",resolutionTiers:{SMALL:null,MEDIUM:{base:1024},LARGE:null},defaultTier:"MEDIUM",qualityOptions:["TURBO","BALANCED","QUALITY"],defaultQuality:"BALANCED",imageReference:!0,refMethod:"guidances",maxRefs:6,strengthSupported:!0,defaultStrength:"MID"},label:"Ideogram"},{pattern:/gpt.image/,caps:{apiVersion:"v2",resolutionTiers:{SMALL:{base:1024},MEDIUM:{base:2048},LARGE:{base:2880}},defaultTier:"MEDIUM",qualityOptions:["LOW","MEDIUM","HIGH"],defaultQuality:"MEDIUM",imageReference:!0,refMethod:"guidances",maxRefs:6,strengthSupported:!1},label:"GPT Image"},{pattern:/recraft/,caps:{apiVersion:"v2",resolutionTiers:{SMALL:null,MEDIUM:{base:2048},LARGE:null},defaultTier:"MEDIUM",imageReference:!0,refMethod:"guidances",maxRefs:6,strengthSupported:!0,defaultStrength:"MID"},label:"Recraft"}];function da(n,c,a,d){const x=[c,a,d].filter(Boolean).join(" ").toLowerCase(),u=n==="video"?na:oa;for(const f of u)if(f.pattern.test(x))return f;return null}const ca=[4,5,6,8,10,12,15,20],ua=["Auto","480p","720p","768p","1080p","4K"],pa=["auto","16:9","9:16","1:1","4:3"],es=["SMALL","MEDIUM","LARGE"],ts={id:"",name:"",uuid:"",type:"image",apiModelName:"",quality:"",isPublic:!0,promptEnhance:"OFF",dimensions:{},capabilities:{apiVersion:"v2",resolutionTiers:{SMALL:null,MEDIUM:{base:1024},LARGE:null},defaultTier:"MEDIUM",qualityOptions:null,defaultQuality:null,imageReference:!0,refMethod:"guidances",maxRefs:6,strengthSupported:!0,defaultStrength:"MID",supportsStyleIds:!1,supportsContrast:!1,supportsUltra:!1,preprocessorId:null,startFrame:!1,endFrame:!1,videoReference:!1,defaultImageReferenceStrength:"MID",durations:[5,10],defaultDuration:5,defaultResolution:"720p",defaultAspectRatio:"16:9"}};function ma(){var Y,Re;const[n,c]=i.useState("models"),[a,d]=i.useState(null),[x,u]=i.useState(!0),[f,h]=i.useState(!1),[o,b]=i.useState(null),[S,C]=i.useState("all"),[R,L]=i.useState(""),[U,F]=i.useState(null),[J,X]=i.useState(!1),[E,Z]=i.useState(JSON.parse(JSON.stringify(ts))),[A,O]=i.useState(!1),[P,g]=i.useState([]),[_,z]=i.useState("leonardo"),[ee,y]=i.useState(""),[$,B]=i.useState(""),[te,ie]=i.useState(!1),[ne,se]=i.useState(""),K=(s,m)=>{b({type:s,text:m}),setTimeout(()=>b(null),4e3)},Q=async()=>{try{const m=await(await fetch("/api/automation/leonardo")).json();m.ok&&d(m.config)}catch(s){K("error","Gagal memuat config: "+s.message)}finally{u(!1)}},oe=async()=>{try{const s=await fetch("/api/providers"),m=await s.json();s.ok&&g(m.connections||[])}catch(s){console.error(s)}};i.useEffect(()=>{Q(),oe()},[]),i.useEffect(()=>{if(A||!E.id)return;const s=da(E.type,E.id,E.name,E.apiModelName);s&&Z(m=>({...m,capabilities:{...m.capabilities,...s.caps}}))},[E.id,E.name,E.apiModelName,E.type,A]);const ue=async(s,m={})=>(await fetch("/api/automation/leonardo",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:s,...m})})).json(),fe=async()=>{h(!0);try{const s=await ue("import-defaults");s.ok?(K("success",`✓ ${s.added} model diimport (${s.imageAdded} image, ${s.videoAdded} video)`),await Q()):K("error",s.error)}finally{h(!1)}},W=async()=>{if(confirm("Hapus SEMUA model dari config? Tindakan ini tidak bisa di-undo.")){h(!0);try{const s=await ue("delete-all-models");s.ok?(K("success",`${s.deleted} model dihapus`),await Q()):K("error",s.error)}finally{h(!1)}}},be=async s=>{if(!confirm(`Hapus model "${s}"?`))return;const m=await ue("delete-model",{id:s});m.ok?(K("success",`Model "${s}" dihapus`),await Q()):K("error",m.error)},ke=async()=>{var m,k;const s={...E};if(!((m=s.id)!=null&&m.trim())||!((k=s.name)!=null&&k.trim()))return K("error","Model ID dan Name wajib diisi");s.id.startsWith("leo-")||(s.id=`leo-${s.id}`),h(!0);try{const G=await ue("add-model",{model:s});G.ok?(K("success",`Model "${s.id}" berhasil ditambahkan`),Z(JSON.parse(JSON.stringify(ts))),O(!1),X(!1),await Q()):K("error",G.error)}finally{h(!1)}},ye=async(s,m)=>{const k=await ue("update-model",{id:s,model:m});k.ok?(K("success","Model diperbarui"),F(null),await Q()):K("error",k.error)},pe=async()=>{h(!0);try{const{failThreshold:s,coolingMinutes:m,autoDisableThreshold:k,imageTimeoutMs:G,videoTimeoutMs:xe}=a,q=await ue("save-settings",{failThreshold:s,coolingMinutes:m,autoDisableThreshold:k,imageTimeoutMs:G,videoTimeoutMs:xe});q.ok?K("success","Settings disimpan"):K("error",q.error)}finally{h(!1)}},we=async s=>{if(s.preventDefault(),!ee.trim()||!$.trim())return alert("Label dan Cookie wajib diisi");ie(!0);try{const m=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:_,apiKey:$.trim(),name:ee.trim(),email:ee.trim(),priority:1})}),k=await m.json();m.ok?(y(""),B(""),se("Cookie ditambahkan!"),await oe(),setTimeout(()=>se(""),3e3)):alert(k.error||"Gagal menambahkan")}finally{ie(!1)}},Ae=async s=>{confirm("Hapus connection ini?")&&(await fetch(`/api/providers/${s}`,{method:"DELETE"}),await oe())},Me=async s=>{await fetch(`/api/providers/${s.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:!s.isActive})}),await oe()},ge=async s=>{se("Testing...");const k=await(await fetch(`/api/providers/${s}/test`,{method:"POST"})).json();se(k.valid?"✓ Valid":`⚠ ${k.error||"Test gagal"}`),await oe(),setTimeout(()=>se(""),5e3)},me=P.filter(s=>s.provider===_),Ce=((a==null?void 0:a.models)||[]).filter(s=>!(S!=="all"&&s.type!==S||R&&![s.id,s.name,s.apiModelName].join(" ").toLowerCase().includes(R.toLowerCase()))),T=Ce.filter(s=>s.type==="image"),le=Ce.filter(s=>s.type==="video"),v=(s,m,k)=>e.jsxs("button",{onClick:()=>c(s),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-semibold transition-all ${n===s?"bg-primary/15 text-primary":"text-text-muted hover:text-text-main hover:bg-surface"}`,children:[e.jsx("span",{className:"material-symbols-outlined text-[15px]",children:m}),k]});return x?e.jsx(Ne,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(ta,{})})}):e.jsx(Ne,{children:e.jsxs("div",{className:"space-y-5",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx("img",{src:"/providers/leonardo.png",alt:"Leonardo",className:"size-5 rounded object-contain"}),"Leonardo Admin"]})}),o&&e.jsxs("div",{className:`px-4 py-2.5 rounded-lg text-sm font-medium flex items-center gap-2 ${o.type==="success"?"bg-green-500/10 text-green-400 border border-green-500/20":"bg-red-500/10 text-red-400 border border-red-500/20"}`,children:[e.jsx("span",{className:"material-symbols-outlined text-base",children:o.type==="success"?"check_circle":"cancel"}),o.text]}),e.jsxs("div",{className:"flex items-center gap-2",children:[v("models","category",`Models (${((Y=a==null?void 0:a.models)==null?void 0:Y.length)||0})`),v("cookies","cookie",`Cookies (${me.length})`),v("config","tune","Settings")]}),n==="models"&&e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ne,{padding:"sm",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("input",{type:"text",placeholder:"Search models...",value:R,onChange:s=>L(s.target.value),className:"flex-1 min-w-[180px] text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"}),e.jsxs("select",{value:S,onChange:s=>C(s.target.value),className:"text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:[e.jsx("option",{value:"all",children:"All Types"}),e.jsx("option",{value:"image",children:"Image"}),e.jsx("option",{value:"video",children:"Video"})]}),e.jsx(N,{size:"sm",variant:"secondary",icon:"download",onClick:fe,disabled:f,children:"Import Defaults"}),e.jsx(N,{size:"sm",variant:"primary",icon:"add",onClick:()=>{X(s=>!s),O(!1)},children:"Add Model"}),e.jsx(N,{size:"sm",variant:"danger",icon:"delete_sweep",onClick:W,disabled:f,children:"Delete All"})]})}),J&&e.jsxs(Ne,{padding:"md",className:"border border-primary/30",children:[e.jsxs("h3",{className:"text-sm font-bold mb-4 flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] text-primary",children:"add_circle"}),"Add New Model"]}),e.jsx(as,{model:E,onChange:(s,m)=>{Z(k=>s.includes(".")?ss(k,s,m):{...k,[s]:m})},onCapsTouched:()=>O(!0)}),e.jsxs("div",{className:"flex gap-2 mt-4",children:[e.jsx(N,{size:"sm",variant:"ghost",onClick:()=>X(!1),children:"Cancel"}),e.jsx(N,{size:"sm",variant:"primary",onClick:ke,disabled:f,children:f?"Saving...":"+ Add Model"})]})]}),[{label:"Image Generation",icon:"brush",list:T},{label:"Video Generation",icon:"movie",list:le}].map(s=>s.list.length>0&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-sm text-text-muted",children:s.icon}),e.jsx("span",{className:"text-xs font-bold text-text-muted uppercase tracking-wider",children:s.label}),e.jsx("span",{className:"text-[10px] text-text-muted/60 bg-sidebar px-1.5 py-0.5 rounded-full",children:s.list.length}),e.jsx("div",{className:"flex-1 h-px bg-border/40"})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-3",children:s.list.map(m=>{var k,G,xe,q;return e.jsxs("div",{className:"group relative rounded-xl border border-border bg-card hover:border-primary/30 transition-all p-3 flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"font-mono text-xs font-bold text-text-main truncate",title:m.id,children:m.id}),e.jsx("p",{className:"text-[11px] text-text-muted truncate",title:m.name,children:m.name})]}),e.jsxs("div",{className:"flex gap-1 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx("button",{onClick:()=>F(JSON.parse(JSON.stringify(m))),className:"p-1 rounded-lg hover:bg-primary/10 text-text-muted hover:text-primary transition-colors",title:"Edit model",children:e.jsx("span",{className:"material-symbols-outlined text-[15px]",children:"edit"})}),e.jsx("button",{onClick:()=>be(m.id),className:"p-1 rounded-lg hover:bg-red-500/10 text-text-muted hover:text-red-400 transition-colors",title:"Delete model",children:e.jsx("span",{className:"material-symbols-outlined text-[15px]",children:"delete"})})]})]}),m.apiModelName&&e.jsx("p",{className:"text-[10px] font-mono bg-sidebar px-2 py-0.5 rounded text-text-muted truncate",title:m.apiModelName,children:m.apiModelName}),e.jsxs("div",{className:"flex flex-wrap gap-1.5 mt-auto",children:[e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded font-medium ${((k=m.capabilities)==null?void 0:k.apiVersion)==="v1"?"bg-orange-500/10 text-orange-400":"bg-blue-500/10 text-blue-400"}`,children:m.type==="image"?((G=m.capabilities)==null?void 0:G.apiVersion)||"v2":"video"}),e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded ${m.isPublic?"bg-green-500/10 text-green-400":"bg-gray-500/10 text-gray-400"}`,children:m.isPublic?"public":"hidden"}),e.jsxs("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-sidebar text-text-muted",children:["✨ ",m.promptEnhance||"OFF"]}),m.type==="video"&&((xe=m.capabilities)==null?void 0:xe.durations)&&e.jsxs("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-sidebar text-text-muted",children:[m.capabilities.durations.join("/"),"s"]}),m.type==="video"&&((q=m.capabilities)==null?void 0:q.defaultResolution)&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-sidebar text-text-muted",children:m.capabilities.defaultResolution})]})]},m.id)})})]},s.label)),Ce.length===0&&e.jsx("div",{className:"rounded-xl border border-border bg-card p-8",children:e.jsx("p",{className:"text-center text-text-muted text-sm",children:((Re=a==null?void 0:a.models)==null?void 0:Re.length)===0?'Belum ada model. Klik "Import Defaults" untuk mengisi dari providerModels.js.':"Tidak ada model yang cocok dengan filter."})})]}),n==="cookies"&&e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-5",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs(Ne,{padding:"md",className:"space-y-3",children:[e.jsxs("h3",{className:"text-sm font-bold flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px]",children:"filter_list"}),"Filter Provider"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("img",{src:`/providers/${_}.png`,alt:_,className:"size-5 rounded object-contain",onError:s=>{s.target.style.display="none"}}),e.jsxs("select",{value:_,onChange:s=>z(s.target.value),className:"flex-1 text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:[e.jsx("option",{value:"leonardo",children:"Leonardo AI"}),e.jsx("option",{value:"grok-web",children:"Grok Web"}),e.jsx("option",{value:"perplexity-web",children:"Perplexity Web"})]})]}),e.jsxs("p",{className:"text-xs text-text-muted",children:[me.length," connections untuk ",_]})]}),e.jsxs(Ne,{padding:"md",className:"space-y-3",children:[e.jsxs("h3",{className:"text-sm font-bold flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px]",children:"add_circle"}),"Add Cookie"]}),e.jsxs("form",{onSubmit:we,className:"space-y-2.5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-text-muted block mb-1",children:"Label / Email"}),e.jsx("input",{type:"text",placeholder:"account@gmail.com",value:ee,onChange:s=>y(s.target.value),className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",required:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-text-muted block mb-1",children:"Cookie Value"}),e.jsx("textarea",{placeholder:"Paste cookie string...",value:$,onChange:s=>B(s.target.value),rows:4,className:"w-full text-xs font-mono px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary resize-y",required:!0})]}),e.jsx(N,{type:"submit",variant:"primary",size:"sm",fullWidth:!0,disabled:te,children:te?"Adding...":"Add Cookie Connection"})]}),ne&&e.jsx("p",{className:"text-xs text-primary italic",children:ne})]})]}),e.jsx("div",{className:"lg:col-span-2",children:e.jsxs(Ne,{padding:"md",className:"space-y-3",children:[e.jsxs("h3",{className:"text-sm font-bold flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px]",children:"list_alt"}),"Cookie Pool — ",_]}),e.jsx("div",{className:"border border-border rounded-xl overflow-hidden",children:e.jsxs("table",{className:"w-full text-xs text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-sidebar text-text-muted border-b border-border font-semibold",children:[e.jsx("th",{className:"px-3 py-2.5",children:"Label"}),e.jsx("th",{className:"px-3 py-2.5",children:"Status"}),e.jsx("th",{className:"px-3 py-2.5",children:"Balance"}),e.jsx("th",{className:"px-3 py-2.5",children:"Fails"}),e.jsx("th",{className:"px-3 py-2.5",children:"Active"}),e.jsx("th",{className:"px-3 py-2.5 text-right",children:"Actions"})]})}),e.jsx("tbody",{children:me.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"px-3 py-8 text-center text-text-muted",children:"Tidak ada cookie untuk provider ini"})}):me.map(s=>{var m;return e.jsxs("tr",{className:"border-b border-border hover:bg-surface/50 transition-colors",children:[e.jsxs("td",{className:"px-3 py-2.5",children:[e.jsx("div",{className:"font-semibold text-text-main",children:s.name||s.email||"—"}),e.jsxs("div",{className:"text-[10px] text-text-muted font-mono",children:[(m=s.id)==null?void 0:m.slice(0,8),"..."]})]}),e.jsx("td",{className:"px-3 py-2.5",children:e.jsx(Ue,{variant:s.testStatus==="active"||s.testStatus==="ok"?"success":s.testStatus==="error"?"danger":"secondary",children:s.testStatus||"unknown"})}),e.jsx("td",{className:"px-3 py-2.5 text-text-main font-semibold",children:s.last_balance!==void 0&&s.last_balance!==null?`${s.last_balance} tok`:"—"}),e.jsx("td",{className:"px-3 py-2.5",children:e.jsx("span",{className:s.fail_count>0?"text-red-400":"text-text-muted",children:s.fail_count||0})}),e.jsx("td",{className:"px-3 py-2.5",children:e.jsx(st,{checked:s.isActive,onChange:()=>Me(s)})}),e.jsx("td",{className:"px-3 py-2.5 text-right",children:e.jsxs("div",{className:"flex gap-1.5 justify-end",children:[e.jsx(N,{size:"xs",variant:"secondary",onClick:()=>ge(s.id),children:"Test"}),e.jsx(N,{size:"xs",variant:"danger",onClick:()=>Ae(s.id),children:"Del"})]})})]},s.id)})})]})})]})})]}),n==="config"&&a&&e.jsxs(Ne,{padding:"md",className:"space-y-4 max-w-xl",children:[e.jsx("h3",{className:"text-sm font-bold",children:"Global Settings"}),[{key:"failThreshold",label:"Fail Threshold",help:"Berapa kali gagal sebelum masuk cooling"},{key:"coolingMinutes",label:"Cooling (menit)",help:"Durasi cooling period setelah fail threshold"},{key:"autoDisableThreshold",label:"Auto-disable Threshold",help:"Total failures sebelum cookie dinonaktifkan"},{key:"imageTimeoutMs",label:"Image Timeout (ms)",help:"Timeout generasi image"},{key:"videoTimeoutMs",label:"Video Timeout (ms)",help:"Timeout generasi video"}].map(({key:s,label:m,help:k})=>e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold block mb-1",children:m}),e.jsx("input",{type:"number",value:a[s]||0,onChange:G=>d(xe=>({...xe,[s]:Number(G.target.value)})),className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"}),e.jsx("p",{className:"text-[11px] text-text-muted mt-0.5",children:k})]},s)),e.jsx(N,{variant:"primary",size:"sm",onClick:pe,disabled:f,children:f?"Saving...":"Save Settings"})]}),U&&e.jsx("div",{className:"fixed inset-0 z-50 bg-black/90 backdrop-blur-sm flex items-center justify-center p-4",onClick:s=>s.target===s.currentTarget&&F(null),children:e.jsxs("div",{className:"bg-background border border-border rounded-2xl shadow-2xl w-full max-w-2xl max-h-[90vh] overflow-y-auto p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"font-bold text-base",children:["Edit Model — ",U.id]}),e.jsx("button",{onClick:()=>F(null),className:"text-text-muted hover:text-text-main",children:e.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),e.jsx(as,{model:U,onChange:(s,m)=>{F(k=>s.includes(".")?ss(k,s,m):{...k,[s]:m})},onCapsTouched:()=>{}}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(N,{size:"sm",variant:"ghost",onClick:()=>F(null),children:"Cancel"}),e.jsx(N,{size:"sm",variant:"primary",onClick:()=>ye(U.id,U),disabled:f,children:f?"Saving...":"Save Changes"})]})]})})]})})}function ss(n,c,a){const d=c.split("."),x={...n};let u=x;for(let f=0;f<d.length-1;f++)u[d[f]]={...u[d[f]]},u=u[d[f]];return u[d[d.length-1]]=a,x}function as({model:n,onChange:c,onCapsTouched:a}){const d=n.type==="video",x=n.capabilities||{},u=(o,b,S)=>e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] font-semibold text-text-muted block mb-1",children:o}),S]},b),f=(o,b="")=>e.jsx("input",{type:"text",value:n[o]||"",placeholder:b,onChange:S=>c(o,S.target.value),className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"}),h=(o,b)=>e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:!!x[o],onChange:S=>{a(),c(`capabilities.${o}`,S.target.checked)},className:"w-3.5 h-3.5 accent-primary"}),e.jsx("span",{className:"text-xs text-text-muted",children:b})]});return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[u("Model ID (tanpa prefix leo-)","id",f("id","e.g. kling-3")),u("Display Name","name",f("name","e.g. Kling 3.0")),u("UUID (kosong untuk native v2)","uuid",f("uuid","xxxxxxxx-xxxx-xxxx...")),u("API Model Name","apiModelName",f("apiModelName","e.g. kling-3.0"))]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[u("Type","type",e.jsxs("select",{value:n.type||"image",onChange:o=>c("type",o.target.value),className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:[e.jsx("option",{value:"image",children:"Image"}),e.jsx("option",{value:"video",children:"Video"})]})),u("Prompt Enhance","promptEnhance",e.jsxs("select",{value:n.promptEnhance||"OFF",onChange:o=>c("promptEnhance",o.target.value),className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:[e.jsx("option",{value:"AUTO",children:"AUTO"}),e.jsx("option",{value:"ON",children:"ON"}),e.jsx("option",{value:"OFF",children:"OFF"})]})),u("Public","isPublic",e.jsxs("div",{className:"flex items-center gap-2 pt-1",children:[e.jsx(st,{checked:!!n.isPublic,onChange:o=>c("isPublic",o)}),e.jsx("span",{className:"text-xs text-text-muted",children:n.isPublic?"Visible to users":"Hidden"})]}))]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"h-px flex-1 bg-border"}),e.jsx("span",{className:"text-[11px] font-bold text-text-muted uppercase tracking-wider",children:d?"Video Capabilities":"Image Capabilities"}),e.jsx("div",{className:"h-px flex-1 bg-border"})]}),d?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[u("Default Resolution","capabilities.defaultResolution",e.jsx("select",{value:x.defaultResolution||"720p",onChange:o=>{a(),c("capabilities.defaultResolution",o.target.value)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:ua.map(o=>e.jsx("option",{children:o},o))})),u("Default Aspect Ratio","capabilities.defaultAspectRatio",e.jsx("select",{value:x.defaultAspectRatio||"16:9",onChange:o=>{a(),c("capabilities.defaultAspectRatio",o.target.value)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:pa.map(o=>e.jsx("option",{children:o},o))}))]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] font-semibold text-text-muted block mb-2",children:"Supported Durations (seconds)"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:ca.map(o=>e.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:(x.durations||[]).includes(o),onChange:b=>{a();const S=x.durations||[],C=b.target.checked?[...S,o].sort((R,L)=>R-L):S.filter(R=>R!==o);c("capabilities.durations",C),C.includes(x.defaultDuration)||c("capabilities.defaultDuration",C[0])},className:"w-3.5 h-3.5 accent-primary"}),e.jsxs("span",{className:"text-xs",children:[o,"s"]})]},o))})]}),(x.durations||[]).length>0&&u("Default Duration","capabilities.defaultDuration",e.jsx("select",{value:x.defaultDuration||"",onChange:o=>{a(),c("capabilities.defaultDuration",Number(o.target.value))},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:(x.durations||[]).map(o=>e.jsxs("option",{value:o,children:[o,"s"]},o))})),e.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-2 mt-1",children:[h("startFrame","Start Frame (first image)"),h("endFrame","End Frame (last image)"),h("imageReference","Image Reference (img2vid)"),h("videoReference","Video Reference")]}),x.imageReference&&u("Image Reference Strength","capabilities.defaultImageReferenceStrength",e.jsx("select",{value:x.defaultImageReferenceStrength||"MID",onChange:o=>{a(),c("capabilities.defaultImageReferenceStrength",o.target.value)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:["LOW","MID","HIGH"].map(o=>e.jsx("option",{children:o},o))}))]}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[u("API Version","capabilities.apiVersion",e.jsxs("select",{value:x.apiVersion||"v2",onChange:o=>{a(),c("capabilities.apiVersion",o.target.value)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:[e.jsx("option",{value:"v2",children:"v2 (native)"}),e.jsx("option",{value:"v1",children:"v1 (legacy UUID)"})]})),u("Ref Method","capabilities.refMethod",e.jsxs("select",{value:x.refMethod||"guidances",onChange:o=>{a(),c("capabilities.refMethod",o.target.value)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:[e.jsx("option",{value:"guidances",children:"guidances (v2)"}),e.jsx("option",{value:"controlnets",children:"controlnets (v1)"})]}))]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] font-semibold text-text-muted block mb-2",children:"Resolution Tiers"}),e.jsx("div",{className:"space-y-2",children:es.map(o=>{var C;const b=(C=x.resolutionTiers)==null?void 0:C[o],S=!!b;return e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("label",{className:"flex items-center gap-1.5 w-20 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:S,onChange:R=>{a();const L=x.resolutionTiers||{};c("capabilities.resolutionTiers",{...L,[o]:R.target.checked?{base:1024}:null})},className:"w-3.5 h-3.5 accent-primary"}),e.jsx("span",{className:"text-xs font-semibold",children:o})]}),S&&e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[11px] text-text-muted",children:"base px:"}),e.jsx("input",{type:"number",value:(b==null?void 0:b.base)||1024,step:256,onChange:R=>{a();const L=x.resolutionTiers||{};c("capabilities.resolutionTiers",{...L,[o]:{base:Number(R.target.value)}})},className:"w-24 text-xs px-2 py-1 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]})]},o)})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[u("Default Tier","capabilities.defaultTier",e.jsx("select",{value:x.defaultTier||"MEDIUM",onChange:o=>{a(),c("capabilities.defaultTier",o.target.value)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary",children:es.map(o=>e.jsx("option",{children:o},o))})),u("Max Refs","capabilities.maxRefs",e.jsx("input",{type:"number",min:1,max:10,value:x.maxRefs||6,onChange:o=>{a(),c("capabilities.maxRefs",Number(o.target.value))},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"}))]}),u("Quality Options (comma-separated, kosong = none)","capabilities.qualityOptions",e.jsx("input",{type:"text",value:(x.qualityOptions||[]).join(","),placeholder:"e.g. TURBO,BALANCED,QUALITY",onChange:o=>{a();const b=o.target.value?o.target.value.split(",").map(S=>S.trim()).filter(Boolean):null;c("capabilities.qualityOptions",b)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})),u("Preprocessor ID (v1 only, kosong = none)","capabilities.preprocessorId",e.jsx("input",{type:"number",value:x.preprocessorId||"",placeholder:"e.g. 364",onChange:o=>{a(),c("capabilities.preprocessorId",o.target.value?Number(o.target.value):null)},className:"w-full text-xs px-3 py-2 border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})),e.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-2",children:[h("imageReference","Image Reference"),h("strengthSupported","Strength Supported"),h("supportsStyleIds","Supports Style IDs"),h("supportsContrast","Supports Contrast (v1)"),h("supportsUltra","Supports Ultra (v1)")]})]})]})}const xa=1e3;function ha(n){return new Promise(c=>setTimeout(c,n))}function ja(){var Lt,Ut,_t,Ft,Kt,zt,qt,Vt,Bt,Gt;const n=Gs(),c=Js(),a=n.id,[d,x]=i.useState([]),[u,f]=i.useState(!0),[h,o]=i.useState(null),[b,S]=i.useState([]),[C,R]=i.useState(!1),[L,U]=i.useState(!1),[F,J]=i.useState(!1),[X,E]=i.useState(""),[Z,A]=i.useState(!1),[O,P]=i.useState(!1),[g,_]=i.useState(!1),[z,ee]=i.useState(null),[y,$]=i.useState({}),[B,te]=i.useState(!1),[ie,ne]=i.useState({}),[se,K]=i.useState(""),[Q,oe]=i.useState(null),[ue,fe]=i.useState(!1),[W,be]=i.useState([]),[ke,ye]=i.useState("__none__"),[pe,we]=i.useState(!1),[Ae,Me]=i.useState(null),[ge,me]=i.useState(""),[Ce,T]=i.useState("auto"),[le,v]=i.useState([]),[Y,Re]=i.useState([]),[s,m]=i.useState([]),[k,G]=i.useState(null),[xe,q]=i.useState(!1),[$e,jt]=i.useState(!1),[Nt,at]=i.useState(!1),[lt,rt]=i.useState(null),[cs,Je]=i.useState({}),[_e,it]=i.useState(null),We=i.useRef(!1),[Be,kt]=i.useState(!1),[nt,us]=i.useState("overview"),{copied:ot,copy:dt}=_s(),wt="ag_risk_confirmed",Ct=()=>{R(!0)},ct=()=>{if(a==="antigravity"&&typeof window<"u"&&!(window.localStorage.getItem(wt)==="true")){q(!0);return}if(Fe){Ct();return}E(""),J(!0)},He=()=>{E(""),J(!0)},St=()=>{if(Fe){ct();return}He()},ps=()=>{if(typeof window<"u"&&window.localStorage.setItem(wt,"true"),q(!1),Fe){Ct();return}He()},j=h?{id:h.id,name:h.name||(h.type==="anthropic-compatible"?"Anthropic Compatible":"OpenAI Compatible"),color:h.type==="anthropic-compatible"?"#D97757":"#10A37F",textIcon:h.type==="anthropic-compatible"?"AC":"OC",apiType:h.apiType,baseUrl:h.baseUrl,type:h.type}:gt[a]||bt[a]||et[a]||Ht[a]||Fs[a],At=(j==null?void 0:j.authModes)||[],Fe=!!gt[a]||!!et[a]||At.includes("oauth"),ms=!!bt[a]||At.includes("apikey"),ut=!!((Lt=et[a])!=null&&Lt.noAuth),Le=Ks(a),pt=zs(a),Mt=qs(a),Te=Vs(a),he=Mt||Te,mt=!he&&Fe&&ms,xt=a==="xai"?"Grok Build OAuth":"OAuth",ht=a==="xai"?"xAI API Key":"API Key";(Ut=Ve[a])!=null&&Ut.thinkingConfig||Bs.extended;const ae=he?a:pt,Qe=he?(h==null?void 0:h.prefix)||a:pt,Ke=i.useCallback(async()=>{try{const t=await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(ae)}`,{cache:"no-store"}),r=await t.json();t.ok&&m(r.ids||[])}catch(t){console.log("Error fetching disabled models:",t)}},[ae]),xs=async t=>{try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ae,ids:[t]})})).ok&&await Ke()}catch(r){console.log("Error disabling model:",r)}},hs=async t=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(ae)}&id=${encodeURIComponent(t)}`,{method:"DELETE"})).ok&&await Ke()}catch(r){console.log("Error enabling model:",r)}},fs=async t=>{t.length&&G({title:"Disable All Models",message:`Disable all ${t.length} model(s)?`,onConfirm:async()=>{G(null);try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ae,ids:t})})).ok&&await Ke()}catch(r){console.log("Error disabling all models:",r)}}})},gs=async()=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(ae)}`,{method:"DELETE"})).ok&&await Ke()}catch(t){console.log("Error enabling all models:",t)}},Ye=i.useCallback(async()=>{try{const t=await fetch("/api/models/alias"),r=await t.json();t.ok&&$(r.aliases||{})}catch(t){console.log("Error fetching aliases:",t)}},[]);i.useEffect(()=>{a==="kilocode"&&fetch("/api/providers/kilo/free-models").then(t=>t.json()).then(t=>{var r;(r=t.models)!=null&&r.length&&Re(t.models)}).catch(()=>{})},[a]);const Se=i.useCallback(async()=>{try{const[t,r,p,M]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),I=await t.json(),D=await r.json(),H=await p.json(),de=M.ok?await M.json():{};if(t.ok){const Ie=(I.connections||[]).filter(je=>je.provider===a);x(Ie)}p.ok&&S(H.proxyPools||[]);const ve=(de.providerStrategies||{})[a]||{};Me(ve.fallbackStrategy||null),me(ve.stickyRoundRobinLimit!=null?String(ve.stickyRoundRobinLimit):"1");const Oe=(de.providerThinking||{})[a]||{};if(T(Oe.mode||"auto"),r.ok){let Ie=(D.nodes||[]).find(je=>je.id===a)||null;if(!Ie&&he)for(let je=0;je<3;je+=1){await new Promise(qe=>setTimeout(qe,150));const ze=await fetch("/api/provider-nodes",{cache:"no-store"});if(!ze.ok)continue;if(Ie=((await ze.json()).nodes||[]).find(qe=>qe.id===a)||null,Ie)break}o(Ie)}}catch(t){console.log("Error fetching connections:",t)}finally{f(!1)}},[a,he]),bs=async t=>{try{const r=await fetch(`/api/provider-nodes/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),p=await r.json();r.ok&&(o(p.node),await Se(),P(!1))}catch(r){console.log("Error updating provider node:",r)}},Rt=async(t,r)=>{try{const p=await fetch("/api/settings",{cache:"no-store"}),I=(p.ok?await p.json():{}).providerStrategies||{},D={};t&&(D.fallbackStrategy=t),t==="round-robin"&&r!==""&&(D.stickyRoundRobinLimit=Number(r)||3);const H={...I};Object.keys(D).length===0?delete H[a]:H[a]=D,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:H})})}catch(p){console.log("Error saving provider strategy:",p)}},ys=t=>{const r=t?"round-robin":null,p=t?ge||"1":ge;t&&!ge&&me("1"),Me(r),Rt(r,p)},vs=t=>{me(t),Rt("round-robin",t)};i.useEffect(()=>{Se(),Ye(),Ke()},[Se,Ye,Ke]),i.useEffect(()=>{var r;const t=(r=gt[a]||bt[a]||et[a]||Ht[a])==null?void 0:r.modelsFetcher;t&&aa(t).then(v)},[a]);const Ge=async(t,r,p=pt)=>{const M=`${p}/${t}`;try{const I=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:M,alias:r})});if(I.ok)await Ye();else{const D=await I.json();alert(D.error||"Failed to set alias")}}catch(I){console.log("Error setting alias:",I)}},ft=async t=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(t)}`,{method:"DELETE"})).ok&&await Ye()}catch(r){console.log("Error deleting alias:",r)}},js=async()=>{if(Be)return;const t=d.find(r=>r.isActive!==!1);if(!t){alert(Ee("Please add an active Qoder connection first"));return}kt(!0);try{const r=await fetch(`/api/providers/${t.id}/models`),p=await r.json();if(!r.ok){alert(p.error||Ee("Failed to fetch models"));return}const M=p.models||[];if(M.length===0){alert(Ee("No models returned"));return}let I=0;for(const D of M){const H=D.id||D.name;if(!H)continue;const de=H.replace(/^qoder\//,""),ve=`${ae}/${de}`;if(Object.values(y).includes(ve))continue;const Oe=de;y[Oe]||(await Ge(de,Oe,ae),I+=1)}alert(I===0?Ee("All models already exist, no new models added"):Ee("Successfully added")+` ${I} `+Ee("models"))}catch(r){console.log("Error importing Qoder models:",r),alert(Ee("Error fetching models")+": "+r.message)}finally{kt(!1)}},Ns=async()=>{if($e||d.length===0)return;const t=Object.fromEntries(d.map(M=>[M.id,{state:"queued",error:null}]));We.current=!1,jt(!0),at(!1),rt(null),Je(t),it({total:d.length,completed:0,passed:0,failed:0,stopped:!1});let r=0,p=0;try{for(let M=0;M<d.length;M+=1){if(We.current){it({total:d.length,completed:M,passed:r,failed:p,stopped:!0});break}const I=d[M];rt(I.id),Je(D=>({...D,[I.id]:{state:"testing",error:null}}));try{const H=await(await fetch(`/api/providers/${I.id}/test`,{method:"POST"})).json(),de=!!H.valid;de?r+=1:p+=1,Je(ve=>({...ve,[I.id]:{state:de?"success":"failed",error:de?null:H.error||null}}))}catch(D){p+=1,Je(H=>({...H,[I.id]:{state:"failed",error:D.message||"Test failed"}}))}it({total:d.length,completed:M+1,passed:r,failed:p,stopped:!1}),M<d.length-1&&await ha(xa)}}finally{rt(null),jt(!1),at(!1),We.current=!1}},ks=()=>{$e&&(We.current=!0,at(!0))},ws=async t=>{G({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{G(null);try{(await fetch(`/api/providers/${t}`,{method:"DELETE"})).ok&&x(d.filter(p=>p.id!==t))}catch(r){console.log("Error deleting connection:",r)}}})},Xe=()=>{Se(),R(!1)},Cs=()=>{Se(),U(!1)},Ss=async t=>{E("");try{const r=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a,...t})});let p=null;try{p=await r.json()}catch{p=null}if(r.ok){await Se(),J(!1);return}E((p==null?void 0:p.error)||"Failed to save connection")}catch(r){console.log("Error saving connection:",r),E("Failed to save connection")}},As=async t=>{try{(await fetch(`/api/providers/${z.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).ok&&(await Se(),A(!1))}catch(r){console.log("Error updating connection:",r)}},Ms=async(t,r)=>{try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:r})})).ok&&x(M=>M.map(I=>I.id===t?{...I,isActive:r}:I))}catch(p){console.log("Error updating connection status:",p)}},Tt=async(t,r)=>{const p=[...d];[p[t],p[r]]=[p[r],p[t]],x(p);try{await Promise.all([fetch(`/api/providers/${p[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})}),fetch(`/api/providers/${p[r].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:r})})])}catch(M){console.log("Error swapping priority:",M),await Se()}},It=d.filter(t=>W.includes(t.id)),Dt=d.length>0&&W.length===d.length,Rs=t=>{be(r=>r.includes(t)?r.filter(p=>p!==t):[...r,t])},Ts=()=>{if(Dt){be([]);return}be(d.map(t=>t.id))},Is=()=>{be([]),ye("__none__")};i.useEffect(()=>{be(t=>t.filter(r=>d.some(p=>p.id===r)))},[d]),(()=>{if(It.length===0)return"";const t=new Set(It.map(r=>{var p;return((p=r.providerSpecificData)==null?void 0:p.proxyPoolId)||"__none__"}));if(t.size===1){const r=[...t][0];if(r==="__none__")return"All selected currently unbound";const p=b.find(M=>M.id===r);return`All selected currently bound to ${(p==null?void 0:p.name)||r}`}return"Selected connections have mixed proxy bindings"})();const Et=()=>{pe||_(!1)},Ot=async t=>{we(!0);try{let r=0;for(const{connectionId:p,proxyPoolId:M}of t)try{(await fetch(`/api/providers/${p}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:M})})).ok||(r+=1)}catch(I){console.log("Error applying proxy for",p,I),r+=1}r>0&&alert(`Updated with ${r} failed request(s).`),await Se(),_(!1)}finally{we(!1)}},Pt=t=>{const r=d.map(p=>({connectionId:p.id,proxyPoolId:t}));return Ot(r)},Ds=()=>{const t=b.filter(p=>p.isActive===!0);if(t.length===0){alert("No active proxy pools available.");return}const r=d.map((p,M)=>({connectionId:p.id,proxyPoolId:t[M%t.length].id}));return Ot(r)},Es=t=>W.includes(t),Os=e.jsx("div",{className:"flex min-w-0 flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]",children:d.map((t,r)=>e.jsx("div",{className:"flex min-w-0 items-stretch",children:e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx(is,{connection:t,proxyPools:b,isOAuth:Fe,isFirst:r===0,isLast:r===d.length-1,onMoveUp:()=>Tt(r,r-1),onMoveDown:()=>Tt(r,r+1),onToggleActive:p=>Ms(t.id,p),onUpdateProxy:async p=>{try{(await fetch(`/api/providers/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:p||null})})).ok&&x(I=>I.map(D=>D.id===t.id?{...D,providerSpecificData:{...D.providerSpecificData,proxyPoolId:p||null}}:D))}catch(M){console.log("Error updating proxy:",M)}},onEdit:()=>{ee(t),A(!0)},onDelete:()=>ws(t.id),oneByOneStatus:cs[t.id]||null,isSelected:Es(t.id),onSelect:()=>Rs(t.id)})})},t.id))}),Ps=b.filter(t=>t.isActive===!0),$s=e.jsx(tt,{isOpen:g,onClose:Et,title:`Apply Proxy (${d.length} connections)`,children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("button",{onClick:Ds,disabled:pe||Ps.length===0,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"sync_alt"}),e.jsx("span",{className:"text-sm text-text-main",children:"One-to-one (rotate)"})]}),e.jsxs("button",{onClick:()=>Pt(null),disabled:pe,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"link_off"}),e.jsx("span",{className:"text-sm text-text-main",children:"None (unbind all)"})]}),b.map(t=>e.jsxs("button",{onClick:()=>Pt(t.id),disabled:pe||t.isActive!==!0,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"lan"}),e.jsx("span",{className:"truncate text-sm text-text-main",children:t.name}),t.isActive!==!0&&e.jsx("span",{className:"text-[10px] text-text-muted",children:"(inactive)"})]},t.id))]}),pe&&e.jsx("p",{className:"text-xs text-text-muted",children:"Applying..."}),e.jsx(N,{onClick:Et,variant:"ghost",fullWidth:!0,disabled:pe,children:"Cancel"})]})}),$t=async t=>{if(!Q){oe(t);try{const p=await(await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${ae}/${t}`})})).json();ne(M=>({...M,[t]:p.ok?"ok":"error"})),K(p.ok?"":p.error||"Model not reachable")}catch{ne(r=>({...r,[t]:"error"})),K("Network error")}finally{oe(null)}}},Ls=()=>{var qe;if(he)return e.jsx(ls,{providerStorageAlias:ae,providerDisplayAlias:Qe,modelAliases:y,copied:ot,onCopy:dt,onSetAlias:Ge,onDeleteAlias:ft,connections:d,isAnthropic:Te});const t=((qe=Ve[a])==null?void 0:qe.serviceKinds)||["llm"],r=t.includes("llm"),p=[...Le,...Y.filter(w=>!Le.some(V=>V.id===w.id))].filter(w=>{const V=w.type||"llm";return r&&(!w.type||w.type==="llm")?!0:t.includes(V)}),M=new Set(s),I=p.filter(w=>!M.has(w.id)),D=p.filter(w=>M.has(w.id)),H=Object.entries(y).filter(([w,V])=>{const De=`${ae}/`;if(!V.startsWith(De))return!1;const re=V.slice(De.length);return j.passthroughModels?!Le.some(Pe=>Pe.id===re):!Le.some(Pe=>Pe.id===re)&&w===re}).map(([w,V])=>({id:V.slice(`${ae}/`.length),alias:w,fullModel:V})),de=t.length>1&&!t.every(w=>w==="llm"),ve=I.filter(w=>w.type==="image"),Oe=I.filter(w=>w.type==="video"),Ie=I.filter(w=>!w.type||w.type==="llm"),je=w=>w.map(V=>{var Wt;const De=`${ae}/${V.id}`,re=`${a}/${V.id}`,Pe=(Wt=Object.entries(y).find(([,Ze])=>Ze===De||Ze===re))==null?void 0:Wt[0];return e.jsx(vt,{model:V,fullModel:`${Qe}/${V.id}`,alias:Pe,copied:ot,onCopy:dt,onSetAlias:Ze=>Ge(V.id,Ze,ae),onDeleteAlias:()=>ft(Pe),testStatus:ie[V.id],onTest:d.length>0||ut?()=>$t(V.id):void 0,isTesting:Q===V.id,isFree:V.isFree,onDisable:()=>xs(V.id)},V.id)}),ze=({icon:w,label:V,count:De})=>e.jsxs("div",{className:"w-full flex items-center gap-2 mt-1 mb-1",children:[e.jsx("span",{className:"material-symbols-outlined text-base text-text-muted",children:w}),e.jsx("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wider",children:V}),e.jsx("span",{className:"text-[10px] text-text-muted/60 bg-sidebar px-1.5 py-0.5 rounded-full",children:De}),e.jsx("div",{className:"flex-1 h-px bg-border/40"})]}),Jt=e.jsxs("button",{onClick:()=>fe(!0),className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-primary/40 px-3 py-2 text-xs text-primary transition-colors hover:border-primary hover:bg-primary/5 sm:w-auto",children:[e.jsx("span",{className:"material-symbols-outlined text-sm",children:"add"}),"Add Model"]});return e.jsxs("div",{className:"flex flex-col gap-2",children:[H.length>0&&e.jsxs(e.Fragment,{children:[de&&e.jsx(ze,{icon:"star",label:"Custom",count:H.length}),e.jsx("div",{className:"flex flex-wrap gap-3",children:H.map(w=>e.jsx(vt,{model:{id:w.id},fullModel:`${Qe}/${w.id}`,alias:w.alias,copied:ot,onCopy:dt,onSetAlias:()=>{},onDeleteAlias:()=>ft(w.alias),testStatus:ie[w.id],onTest:d.length>0||ut?()=>$t(w.id):void 0,isTesting:Q===w.id,isCustom:!0,isFree:!1},w.id))})]}),de&&ve.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(ze,{icon:"brush",label:"Image Generation",count:ve.length}),e.jsx("div",{className:"flex flex-wrap gap-3",children:je(ve)})]}),de&&Oe.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(ze,{icon:"movie",label:"Video Generation",count:Oe.length}),e.jsx("div",{className:"flex flex-wrap gap-3",children:je(Oe)})]}),(de?Ie:I).length>0&&e.jsx("div",{className:"flex flex-wrap gap-3",children:je(de?Ie:I)}),e.jsxs("div",{className:"flex flex-wrap gap-3 mt-1",children:[Jt,a==="qoder"&&d.some(w=>w.isActive!==!1)&&e.jsxs("button",{onClick:js,disabled:Be,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-blue-500/40 px-3 py-2 text-xs text-blue-600 dark:text-blue-400 transition-colors hover:border-blue-500 hover:bg-blue-500/5 sm:w-auto disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx("span",{className:"material-symbols-outlined text-sm",style:Be?{animation:"spin 1s linear infinite"}:void 0,children:Be?"progress_activity":"download"}),Be?Ee("Fetching..."):Ee("Fetch Qoder Models")]})]}),le.length>0&&(()=>{const w=new Set(Object.values(y)),V=new Set(Le.map(re=>re.id)),De=le.filter(re=>!w.has(`${ae}/${re.id}`)&&!V.has(re.id));return De.length===0?null:e.jsxs("div",{className:"w-full mt-2",children:[e.jsx("p",{className:"text-xs text-text-muted mb-2",children:"Suggested free models (≥200k context):"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:De.map(re=>e.jsxs("button",{onClick:async()=>{const Pe=re.id.split("/").pop();await Ge(re.id,Pe,ae)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",title:`${re.name} · ${(re.contextLength/1e3).toFixed(0)}k ctx`,children:[e.jsx("span",{className:"material-symbols-outlined text-[13px]",children:"add"}),re.id.split("/").pop()]},re.id))})]})})(),D.length>0&&e.jsxs("div",{className:"w-full mt-2",children:[e.jsxs("p",{className:"text-xs text-text-muted mb-2",children:["Disabled models (",D.length,"):"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:D.map(w=>e.jsxs("button",{onClick:()=>hs(w.id),className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-dashed border-black/10 dark:border-white/10 text-xs text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",title:"Restore model",children:[e.jsx("span",{className:"material-symbols-outlined text-[13px]",children:"add"}),w.id]},w.id))})]})]})};if(u)return e.jsxs("div",{className:"flex flex-col gap-8",children:[e.jsx(Xt,{}),e.jsx(Xt,{})]});if(!j)return e.jsxs("div",{className:"text-center py-20",children:[e.jsx("p",{className:"text-text-muted",children:"Provider not found"}),e.jsx(Yt,{to:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]});const Us=()=>a==="codebuddy"||a==="cb"?"/providers/codebuddy.svg":Mt&&j.apiType?j.apiType==="responses"?"/providers/oai-r.png":"/providers/oai-cc.png":Te?"/providers/anthropic-m.png":a==="weavy"?"/providers/weavy.jpeg":`/providers/${j.id}.png`;return e.jsxs("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:gap-8 sm:px-0",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs(Yt,{to:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4",children:[e.jsx("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),e.jsxs("div",{className:"flex min-w-0 items-center gap-3 sm:gap-4",children:[e.jsx("div",{className:"flex size-12 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${j.color}15`},children:B?e.jsx("span",{className:"text-sm font-bold",style:{color:j.color},children:j.textIcon||j.id.slice(0,2).toUpperCase()}):e.jsx("img",{src:Us(),alt:j.name,width:48,height:48,className:"max-h-12 max-w-12 rounded-lg object-contain",onError:()=>te(!0)})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsx("h1",{className:"truncate text-2xl font-semibold tracking-tight sm:text-3xl",children:j.name}),(((_t=j.notice)==null?void 0:_t.apiKeyUrl)||((Ft=j.notice)==null?void 0:Ft.signupUrl)||j.website)&&e.jsxs("a",{href:((Kt=j.notice)==null?void 0:Kt.apiKeyUrl)||((zt=j.notice)==null?void 0:zt.signupUrl)||j.website,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[e.jsx("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),(qt=j.notice)!=null&&qt.apiKeyUrl?"Get API Key":"Sign up / Learn more"]})]}),e.jsxs("p",{className:"text-text-muted",children:[d.length," connection",d.length===1?"":"s"]})]})]})]}),j.deprecated&&e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-yellow-500/10 border border-yellow-500/30",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] text-yellow-500 mt-0.5 shrink-0",children:"warning"}),e.jsx("p",{className:"text-xs text-red-600 dark:text-yellow-400 leading-relaxed",children:j.deprecationNotice})]}),((Vt=j.notice)==null?void 0:Vt.text)&&!j.deprecated&&e.jsxs("div",{className:"flex flex-col gap-2 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-2 sm:flex-row sm:items-center",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] text-blue-500 shrink-0",children:"info"}),e.jsx("p",{className:"min-w-0 flex-1 text-xs leading-relaxed text-blue-600 dark:text-blue-400",children:j.notice.text}),j.notice.apiKeyUrl&&e.jsx("a",{href:j.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex justify-center rounded bg-blue-500 px-2 py-1 text-xs font-medium text-white transition-colors hover:bg-blue-600 sm:py-0.5",children:"Get API Key →"})]}),a==="leonardo"&&e.jsx("div",{className:"flex border-b border-border-subtle pb-px gap-6",children:[{id:"overview",icon:"dashboard",label:"Overview",useImage:!1},{id:"admin",icon:"tune",label:"Leonardo Admin",useImage:!0}].map(t=>e.jsxs("button",{onClick:()=>us(t.id),className:`flex items-center gap-2 pb-3 text-sm font-semibold transition-all border-b-2 cursor-pointer ${nt===t.id?"border-primary text-primary":"border-transparent text-text-muted hover:text-text-main"}`,children:[t.useImage?e.jsx("img",{src:"/providers/leonardo.png",alt:"Leonardo",className:"size-[18px] rounded object-contain"}):e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:t.icon}),t.label]},t.id))}),a==="leonardo"&&nt==="admin"&&e.jsx(ma,{}),a==="weavy"&&e.jsxs("div",{style:{marginBottom:16,padding:"12px 16px",background:"#0c1a2e",border:"1px solid #1e3a5f",borderRadius:8,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600,fontSize:14,color:"#60a5fa"},children:"🪄 Weavy Token Pool"}),e.jsx("div",{style:{fontSize:12,color:"#6b7280",marginTop:2},children:"Copy firebase_refresh_token, firebase_api_key, dan JWT untuk dipakai di sistem lain (kliperspro, dll.)"})]}),e.jsx("a",{href:"/dashboard/providers/weavy/pool",style:{padding:"7px 16px",borderRadius:6,background:"#1e3a5f",border:"1px solid #2563eb",color:"#93c5fd",fontSize:13,fontWeight:600,textDecoration:"none",whiteSpace:"nowrap"},children:"Buka Token Pool →"})]}),(a!=="leonardo"||nt==="overview")&&e.jsxs(e.Fragment,{children:[he&&h&&e.jsx(Ne,{children:e.jsxs("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("h2",{className:"text-lg font-semibold",children:Te?"Anthropic Compatible Details":"OpenAI Compatible Details"}),e.jsxs("p",{className:"break-all text-sm text-text-muted",children:[Te?"Messages API":h.apiType==="responses"?"Responses API":"Chat Completions"," · ",(h.baseUrl||"").replace(/\/$/,""),"/",Te?"messages":h.apiType==="responses"?"responses":"chat/completions"]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[e.jsx(N,{size:"sm",icon:"add",onClick:()=>{E(""),J(!0)},className:"w-full sm:w-auto",children:"Add API Key"}),e.jsx(N,{size:"sm",variant:"secondary",icon:"edit",onClick:()=>P(!0),className:"w-full sm:w-auto",children:"Edit"}),e.jsx(N,{size:"sm",variant:"secondary",icon:"delete",onClick:async()=>{G({title:"Delete Compatible Node",message:`Delete this ${Te?"Anthropic":"OpenAI"} Compatible node?`,onConfirm:async()=>{G(null);try{(await fetch(`/api/provider-nodes/${a}`,{method:"DELETE"})).ok&&c("/dashboard/providers")}catch(t){console.log("Error deleting provider node:",t)}}})},className:"w-full sm:w-auto",children:"Delete"})]})]})}),ut?e.jsx(Ws,{providerId:a}):e.jsxs(Ne,{children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("h2",{className:"text-lg font-semibold",children:"Connections"}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[d.length>0&&b.length>0&&e.jsx(N,{size:"sm",variant:"secondary",icon:"lan",onClick:()=>_(!0),children:"Apply Proxy"}),d.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(N,{size:"sm",variant:"secondary",icon:"sync",onClick:Ns,disabled:$e,children:$e?"Testing Connection One-by-One...":"Test Connection One-by-One"}),$e&&e.jsx(N,{size:"sm",variant:"ghost",icon:"stop",onClick:ks,disabled:Nt,children:Nt?"Stopping...":"Stop"})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"text-xs text-text-muted font-medium",children:"Round Robin"}),e.jsx(st,{checked:Ae==="round-robin",onChange:ys}),Ae==="round-robin"&&e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-xs text-text-muted",children:"Sticky:"}),e.jsx("input",{type:"number",min:1,value:ge,onChange:t=>vs(t.target.value),placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]})]}),d.length===0?e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-9 h-9 rounded-full bg-primary/10 text-primary shrink-0",children:e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:Fe?"lock":"key"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-sm text-text-muted",children:"No connections yet"}),mt&&e.jsxs("p",{className:"text-xs text-text-muted",children:["Choose ",xt," or ",ht,"."]})]})]}),e.jsx("div",{className:"flex gap-2",children:mt?e.jsxs(e.Fragment,{children:[e.jsx(N,{size:"sm",icon:"lock",variant:"secondary",onClick:ct,children:xt}),e.jsx(N,{size:"sm",icon:"key",onClick:He,children:ht})]}):e.jsxs(e.Fragment,{children:[!he&&a==="iflow"&&e.jsx(N,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>U(!0),children:"Cookie"}),e.jsx(N,{size:"sm",icon:"add",onClick:St,children:he?"Add API Key":a==="iflow"?"OAuth":"Add Connection"})]})})]}):e.jsxs(e.Fragment,{children:[_e&&e.jsx("div",{className:"mb-4 rounded-lg border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsxs("span",{children:["Total: ",_e.total]}),e.jsxs("span",{children:["Completed: ",_e.completed]}),e.jsxs("span",{children:["Passed: ",_e.passed]}),e.jsxs("span",{children:["Failed: ",_e.failed]}),_e.stopped&&e.jsx("span",{className:"text-amber-600 dark:text-amber-400",children:"Stopped"}),$e&&lt&&e.jsxs("span",{children:["Running: ",((Bt=d.find(t=>t.id===lt))==null?void 0:Bt.name)||lt]})]})}),d.length>0&&e.jsxs("div",{className:"mb-2 flex items-center justify-between rounded-lg border border-black/5 bg-black/[0.02] px-3 py-2 dark:border-white/5 dark:bg-white/[0.02]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:Dt,onChange:Ts,className:"h-4 w-4 rounded border-black/20 text-primary focus:ring-primary dark:border-white/20 dark:bg-black"}),e.jsxs("span",{className:"text-sm font-medium",children:["Select All (",W.length,"/",d.length,")"]})]}),W.length>0&&e.jsxs("div",{className:"flex items-center gap-2",children:[b.length>0&&e.jsx(N,{size:"sm",variant:"secondary",icon:"lan",onClick:()=>_(!0),children:"Apply Proxy"}),e.jsx(N,{size:"sm",variant:"danger",icon:"delete",onClick:()=>{W.length!==0&&G({title:"Delete Connections",message:`Delete ${W.length} selected connection(s)?`,onConfirm:async()=>{G(null);try{await Promise.all(W.map(t=>fetch(`/api/providers/${t}`,{method:"DELETE"}))),x(d.filter(t=>!W.includes(t.id))),Is()}catch(t){console.log("Error deleting connections:",t)}}})},children:"Delete Selected"})]})]}),Os,!he&&e.jsxs("div",{className:"mt-4 grid grid-cols-1 gap-2 sm:flex",children:[a==="iflow"&&e.jsx(N,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>U(!0),title:"Add connection using browser cookie",className:"w-full sm:w-auto",children:"Cookie"}),mt?e.jsxs(e.Fragment,{children:[e.jsx(N,{size:"sm",icon:"lock",variant:"secondary",onClick:ct,className:"w-full sm:w-auto",children:xt}),e.jsx(N,{size:"sm",icon:"key",onClick:He,className:"w-full sm:w-auto",children:ht})]}):e.jsx(N,{size:"sm",icon:"add",onClick:St,className:"w-full sm:w-auto",children:"Add"})]})]})]}),e.jsxs(Ne,{children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("h2",{className:"text-lg font-semibold",children:"Available Models"}),!he&&(()=>{var I;const t=((I=Ve[a])==null?void 0:I.serviceKinds)||["llm"],r=t.includes("llm"),M=[...Le,...Y.filter(D=>!Le.some(H=>H.id===D.id))].filter(D=>{const H=D.type||"llm";return r&&(!D.type||D.type==="llm")?!0:t.includes(H)}).map(D=>D.id).filter(D=>!s.includes(D));return e.jsxs("div",{className:"flex gap-2",children:[s.length>0&&e.jsx(N,{size:"sm",variant:"secondary",icon:"restart_alt",onClick:gs,children:"Active All"}),M.length>0&&e.jsx(N,{size:"sm",variant:"secondary",icon:"block",onClick:()=>fs(M),children:"Disable All"})]})})()]}),!!se&&e.jsx("p",{className:"text-xs text-red-500 mb-3 break-words",children:se}),Ls()]}),$s]}),a==="kiro"?e.jsx(Hs,{isOpen:C,providerInfo:j,onSuccess:Xe,onClose:()=>R(!1)}):a==="cursor"?e.jsx(Qs,{isOpen:C,onSuccess:Xe,onClose:()=>R(!1)}):a==="gitlab"?e.jsx(Ys,{isOpen:C,providerInfo:j,onSuccess:Xe,onClose:()=>R(!1)}):e.jsx(Xs,{isOpen:C,provider:a,providerInfo:j,onSuccess:Xe,onClose:()=>R(!1)}),a==="iflow"&&e.jsx(Zs,{isOpen:L,onSuccess:Cs,onClose:()=>U(!1)}),e.jsx(ns,{isOpen:F,provider:a,providerName:j.name,isCompatible:he,isAnthropic:Te,authType:j==null?void 0:j.authType,authHint:j==null?void 0:j.authHint,website:j==null?void 0:j.website,proxyPools:b,error:X,onSave:Ss,onBulkDone:Se,onClose:()=>{E(""),J(!1)}}),e.jsx(ea,{isOpen:Z,connection:z,proxyPools:b,onSave:As,onClose:()=>A(!1)}),he&&e.jsx(os,{isOpen:O,node:h,onSave:bs,onClose:()=>P(!1),isAnthropic:Te}),!he&&e.jsx(ds,{isOpen:ue,providerAlias:ae,providerDisplayAlias:Qe,allowedKinds:((Gt=Ve[a])==null?void 0:Gt.serviceKinds)||["llm"],onSave:async(t,r)=>{const p=j!=null&&j.passthroughModels?t.split("/").pop():t;await Ge(t,p,ae),fe(!1)},onClose:()=>fe(!1)}),e.jsx(Qt,{isOpen:xe,onClose:()=>q(!1),onConfirm:ps,title:"Risk Notice",message:j==null?void 0:j.deprecationNotice,confirmText:"I Understand, Continue",cancelText:"Cancel",variant:"danger"}),e.jsx(Qt,{isOpen:!!k,onClose:()=>G(null),onConfirm:k==null?void 0:k.onConfirm,title:(k==null?void 0:k.title)||"Confirm",message:k==null?void 0:k.message,variant:"danger"})]})}export{ja as default};
@@ -1 +0,0 @@
1
- import{j as e}from"./index.CoYbjSIL.js";import{L as m,b as i}from"./router.Cjj1--8t.js";import{g as u}from"./machine.CagOtseJ.js";import{C as d}from"./NoAuthProxyCard.Buvt0BVH.js";import{C as r}from"./Loading.QMOYJhLu.js";import{C as p,M as h}from"./cliTools.CsdwAybi.js";import"./zustand.akaTi5uX.js";function f({tool:s}){return e.jsx(m,{to:"/dashboard/mitm",className:"block",children:e.jsx(d,{padding:"sm",className:"overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("img",{src:s.image,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",onError:t=>{t.target.style.display="none"}}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"font-medium text-sm",children:s.name}),e.jsx("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-purple-500/10 text-purple-600 dark:text-purple-400 rounded-full",children:"MITM"})]}),e.jsx("p",{className:"text-xs text-text-muted truncate",children:s.description})]})]}),e.jsx("span",{className:"material-symbols-outlined text-text-muted text-[20px]",children:"chevron_right"})]})})})}function j(s){return s?s.installed?s.hasFSRouter?{label:"Connected",cls:"bg-green-500/10 text-green-600 dark:text-green-400"}:{label:"Not configured",cls:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400"}:{label:"Not installed",cls:"bg-gray-500/10 text-gray-500"}:{label:"Unknown",cls:"bg-gray-500/10 text-gray-500"}}function N({toolId:s,tool:t,status:c}){const n=j(c);return e.jsx(m,{to:`/dashboard/cli-tools/${s}`,className:"block",children:e.jsx(d,{padding:"sm",className:"h-full overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:e.jsx("div",{className:"flex h-full flex-col gap-2",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"size-8 flex items-center justify-center shrink-0",children:t.image?e.jsx("img",{src:t.image,alt:t.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:o=>{o.target.style.display="none"}}):t.icon?e.jsx("span",{className:"material-symbols-outlined text-[28px]",style:{color:t.color},children:t.icon}):null}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h3",{className:"font-medium text-sm truncate",children:t.name}),e.jsx("span",{className:`inline-block mt-1 px-1.5 py-0.5 text-[10px] font-medium rounded-full ${n.cls}`,children:n.label})]}),e.jsx("span",{className:"material-symbols-outlined text-text-muted text-[18px] shrink-0",children:"chevron_right"})]})})})})}const b="/api/cli-tools/all-statuses";function y({machineId:s}){const[t,c]=i.useState(!0),[n,o]=i.useState({});if(i.useEffect(()=>{let a=!0;return(async()=>{try{const l=await fetch(b);l.ok&&a&&o(await l.json())}catch(l){console.log("Error fetching tool statuses:",l)}finally{a&&c(!1)}})(),()=>{a=!1}},[]),t)return e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:[e.jsx(r,{}),e.jsx(r,{}),e.jsx(r,{}),e.jsx(r,{}),e.jsx(r,{}),e.jsx(r,{})]});const x=Object.entries(p),g=Object.entries(h);return e.jsxs("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-1 sm:px-0",children:[e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:x.map(([a,l])=>e.jsx(N,{toolId:a,tool:l,status:n[a]},a))}),e.jsxs("div",{className:"flex flex-col gap-3 sm:gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2 px-1",children:[e.jsx("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"security"}),e.jsx("h2",{className:"text-sm font-semibold text-text-main",children:"MITM Tools"})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:g.map(([a,l])=>e.jsx(f,{tool:l},a))})]})]})}function M(){const[s,t]=i.useState("");return i.useEffect(()=>{u().then(t)},[]),s?e.jsx(y,{machineId:s}):null}export{M as default};
@@ -1,23 +0,0 @@
1
- import{j as e,B as m}from"./index.B-zMpSp_.js";import{b as r}from"./router.Cjj1--8t.js";import{C as Ye,T as Ge,B as qe}from"./NoAuthProxyCard.VRP7gDcs.js";import{L as Xe}from"./Loading.BhEzHe-X.js";import"./zustand.akaTi5uX.js";function it(){const[u,h]=r.useState("codebuddy"),X=(x,ee,f)=>e.jsxs("button",{onClick:()=>h(x),className:`flex items-center gap-2 pb-3 text-sm font-semibold transition-all border-b-2 cursor-pointer ${u===x?"border-primary text-primary":"border-transparent text-text-muted hover:text-text-main"}`,children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:ee}),f]});return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex border-b border-border-subtle pb-px gap-6 flex-wrap",children:[X("codebuddy","smart_toy","Automation"),X("fsmail","mail","FSMail Temp Mail")]}),u==="codebuddy"&&e.jsx(et,{}),u==="fsmail"&&e.jsx(st,{})]})}function et(){const u={codebuddy:"CodeBuddy",kiro:"Kiro AI",qoder:"Qoder",leonardo:"Leonardo AI",weavy:"Weavy AI","kimi-coding":"Kimi Coding",cloudflare:"Cloudflare Workers AI",openvecta:"OpenVecta",flashloop:"Flashloop"},[h,X]=r.useState([]),[x,ee]=r.useState(""),[f,te]=r.useState(null),[N,I]=r.useState([]);r.useRef(null);const $=r.useRef(new Set),[se,ue]=r.useState(1),ae=r.useRef(-1),pe=10,Se=r.useRef(!1),[g,Ue]=r.useState(!1),[K,Ce]=r.useState(3),[$e,re]=r.useState(!1),[ne,he]=r.useState(!1),[A,Re]=r.useState(""),[_e,j]=r.useState(""),[i,R]=r.useState("cloudflare"),[G,be]=r.useState(!0),[O,U]=r.useState(!1),[Te,We]=r.useState(!1),[oe,fe]=r.useState(!1),[k,V]=r.useState([]),[ze,W]=r.useState(!1),[ge,le]=r.useState(""),[Be,Ae]=r.useState(""),[Fe,S]=r.useState(""),[Le,Q]=r.useState(!1),[z,L]=r.useState({general:!0,proxy:!1}),C=t=>{L(a=>({...a,[t]:!a[t]}))},Pe=(t,a,n,l)=>e.jsxs("button",{onClick:l,type:"button",className:"flex items-center gap-1.5 hover:text-primary text-text-main font-semibold text-xs transition-all cursor-pointer select-none py-1",children:[e.jsx("span",{className:`material-symbols-outlined text-[16px] text-text-muted transition-transform duration-200 ${n?"":"-rotate-90"}`,children:"expand_more"}),e.jsx("span",{children:t})]}),[_,Z]=r.useState(!1),[D,B]=r.useState(0),[F,je]=r.useState({}),[d,ie]=r.useState(!1),[T,J]=r.useState(new Set),[M,Je]=r.useState(!1),[ye,Oe]=r.useState(5),[we,He]=r.useState([]),[ce,de]=r.useState("");r.useEffect(()=>{if(typeof window<"u"){const t=localStorage.getItem("automation_target_provider");R(t||"cloudflare");const a=localStorage.getItem("automation_concurrency");a&&Ce(parseInt(a)||3);const n=localStorage.getItem("automation_auto_email");n&&Je(n==="1");const l=localStorage.getItem("automation_generate_count");l&&Oe(parseInt(l)||5);const b=localStorage.getItem("automation_open_settings");if(b)try{L(c=>({...c,...JSON.parse(b)}))}catch(c){console.error("Failed to parse saved automation open settings",c)}Ue(!0)}},[]),r.useEffect(()=>{g&&localStorage.setItem("automation_target_provider",i)},[i,g]),r.useEffect(()=>{g&&localStorage.setItem("automation_concurrency",String(K))},[K,g]),r.useEffect(()=>{g&&localStorage.setItem("automation_auto_email",M?"1":"0")},[M,g]),r.useEffect(()=>{g&&localStorage.setItem("automation_generate_count",String(ye))},[ye,g]),r.useEffect(()=>{g&&localStorage.setItem("automation_open_settings",JSON.stringify(z))},[z,g]);const[y,Ve]=r.useState(""),[xe,De]=r.useState(1),Me=8;r.useEffect(()=>{fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"list-domains"})}).then(t=>t.json()).then(t=>{var a;(a=t.domains)!=null&&a.length&&(He(t.domains),de(n=>n||t.default_domain||t.domains[0]))}).catch(()=>{})},[]);const w=async(t=!1)=>{var a,n;try{const l=await fetch("/api/automation/codebuddy"),b=await l.json();if(l.ok){if(X(b.accounts||[]),ee(b.active_job_id||""),b.active_job_id&&Se.current&&(Se.current=!1,$.current.clear()),!Se.current)if(te(b.active_job||null),(n=(a=b.active_job)==null?void 0:a.results)!=null&&n.length){const c=b.active_job.results.filter(p=>p).map((p,ke)=>({idx:ke,email:p.email||`Account #${ke+1}`,status:p.status||"pending",step:p.status==="failed"?p.error||p.step||"-":p.step||"-",ok:p.ok})).filter(p=>!$.current.has(p.email.toLowerCase()));I(c)}else b.active_job_id;if(t){const c=b.settings||{};re(c.auto_fsrouter==="1"||c.auto_fsrouter===!0),be(!!c.browser_headless),U(!!c.debug_mode),We(c.leave_canva_team==="1"||c.leave_canva_team===!0),fe(!!c.proxy_enabled);try{const p=JSON.parse(c.proxy_pool||"[]");V(Array.isArray(p)?p:[])}catch{V([])}Ae(c.leonardo_invite_link||""),S(c.codebuddy_2captcha_api_key||"")}}}catch(l){console.error(l)}};r.useEffect(()=>{g&&w(!0)},[g]),r.useEffect(()=>{if(!g)return;const a=setInterval(()=>w(!1),x?3e3:15e3);return()=>clearInterval(a)},[g,x]),r.useEffect(()=>{if(N.length===0){ue(1),ae.current=-1;return}const t=N.findIndex(a=>a.status==="running");if(t!==-1&&t!==ae.current){ae.current=t;const a=Math.floor(t/pe)+1;ue(a)}},[N]),r.useEffect(()=>{if(O&&x){const t=setInterval(()=>{fetch("/api/automation/codebuddy/debug-vnc?action=status").then(a=>a.json()).then(a=>{a.available&&(Z(!0),B(Date.now()),clearInterval(t))}).catch(()=>{})},2e3);return()=>clearInterval(t)}else if(!x&&_){const t=setTimeout(()=>{Z(!1),B(0)},1e4);return()=>clearTimeout(t)}},[O,x]);const Qe=async()=>{Q(!0);try{(await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"settings",auto_fsrouter:$e,browser_headless:G,debug_mode:O,leave_canva_team:Te,proxy_enabled:oe,proxy_pool:JSON.stringify(k),leonardo_invite_link:Be,codebuddy_2captcha_api_key:Fe})})).ok&&(j("Settings saved successfully."),setTimeout(()=>j(""),3e3),await w(!0))}catch(t){console.error(t)}finally{Q(!1)}},Ze=async()=>{var t,a;if(!A.trim()){j("Please enter at least one email:password line.");return}j("Adding accounts...");try{const n=await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"add-google",accounts_text:A,run_now:ne,concurrency:K,provider:i})}),l=await n.json();n.ok?(Re(""),j(`Created: ${((t=l.created)==null?void 0:t.length)||0}, Skipped: ${((a=l.skipped)==null?void 0:a.length)||0}${l.job_id?" (Job started)":""}`),w()):j(`Error: ${l.error}`)}catch(n){j(`Failed: ${n.message}`)}},Ee=async()=>{var t;j("Generating emails...");try{const a=await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"auto-generate-email",count:ye,provider:i,run_now:!0,concurrency:K,domain:ce||void 0})}),n=await a.json();a.ok?(j(`✓ Generated ${((t=n.created)==null?void 0:t.length)||0} temp mail accounts and started signup job.`),w()):j(`Error: ${n.error||"Failed to generate emails"}`)}catch(a){console.error(a),j("Failed to contact server.")}},Ie=async()=>{try{const t=await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"run-all",concurrency:K,provider:i})}),a=await t.json();t.ok?($.current.clear(),ee(a.job_id),w()):j(`Failed: ${a.error}`)}catch(t){j(`Failed: ${t.message}`)}},E=async()=>{try{const t=await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"stop"})}),a=await t.json();t.ok?w():alert(a.error)}catch(t){console.error(t)}},ve=async t=>{try{const a=await fetch(`/api/automation/codebuddy/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"run"})}),n=await a.json();a.ok?($.current.clear(),ee(n.job_id),w()):alert(n.error)}catch(a){console.error(a)}},Ne=async t=>{try{const a=await fetch(`/api/automation/codebuddy/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"add-to-fsrouter"})}),n=await a.json();a.ok?(alert(`✓ ${n.message||"Added successfully!"}`),w()):alert(`Failed: ${n.error}`)}catch(a){console.error(a)}},s=async()=>{const t=u[i]||"CodeBuddy";if(confirm(`Inject all Ready ${t} accounts into fsrouter?`))try{const a=await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"bulk-add-to-fsrouter",provider:i})}),n=await a.json();a.ok?(alert(n.message),w()):alert(`Failed: ${n.error}`)}catch(a){console.error(a)}},o=async t=>{if(!confirm("Hapus akun ini?"))return;const a=confirm("Apakah ingin menghapus juga koneksi akun ini di fsrouter?"),n=h.find(l=>l.id===t);try{await fetch(`/api/automation/codebuddy/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",deleteFromfsrouter:a})}),n&&($.current.add(n.email.toLowerCase()),I(l=>l.filter(b=>b.email.toLowerCase()!==n.email.toLowerCase()))),w()}catch(l){console.error(l)}},v=async(t,a=null)=>{const n=a?`${a.length} selected accounts`:`all accounts with status: ${t.join(", ")}`;if(!confirm(`Delete ${n}?`))return;const l=confirm("Apakah ingin menghapus juga koneksi akun-akun tersebut di fsrouter?"),b=h.filter(c=>a?a.includes(c.id):c.provider===i&&t.includes(c.api_key_status)).map(c=>c.email.toLowerCase());try{(await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a?{action:"bulk-delete-ids",ids:a,provider:i,deleteFromfsrouter:l}:{action:"bulk-delete",statuses:t,provider:i,deleteFromfsrouter:l})})).ok&&(b.forEach(p=>$.current.add(p)),I(p=>p.filter(ke=>!b.includes(ke.email.toLowerCase()))),J(new Set),w())}catch(c){console.error(c)}},P=h.filter(t=>t.provider===i&&(t.email.toLowerCase().includes(y.toLowerCase())||t.api_key&&t.api_key.toLowerCase().includes(y.toLowerCase()))),me=Math.ceil(P.length/Me),H=P.slice((xe-1)*Me,xe*Me),Y=Math.ceil(N.length/pe)||1,q=Math.min(se,Y),Ke=N.slice((q-1)*pe,q*pe);return e.jsxs("div",{children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[e.jsxs("div",{className:"lg:col-span-1 space-y-6",children:[e.jsxs(Ye,{padding:"md",className:"space-y-4",children:[e.jsxs("h2",{className:"text-sm font-bold text-text-main flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:"person_add"}),(i==="leonardo"||i==="weavy"||i==="cloudflare")&&M?"Generate Temp Accounts":"Add Accounts"]}),e.jsxs("div",{className:"flex flex-col gap-1.5 pb-1",children:[e.jsx("label",{className:"text-xs font-semibold text-text-main",children:"Target Provider Connection"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("img",{src:i==="weavy"?"/providers/weavy.jpeg":i==="kimi-coding"?"/providers/kimi.png":`/providers/${i}.png`,alt:i,className:"size-5 rounded object-contain",onError:t=>{t.target.style.display="none"}}),e.jsxs("select",{value:i,onChange:t=>{const a=t.target.value;R(a),De(1)},className:"flex-1 text-xs p-2 rounded-lg border border-border-subtle bg-surface text-text-main focus:outline-none focus:border-primary cursor-pointer",children:[e.jsx("option",{value:"cloudflare",children:"☁️ Cloudflare Workers AI"}),e.jsx("option",{value:"openvecta",children:"🟣 OpenVecta"}),e.jsx("option",{value:"flashloop",children:"⚡ Flashloop"})]})]})]}),(i==="leonardo"||i==="weavy"||i==="cloudflare"||i==="openvecta"||i==="flashloop")&&e.jsx("div",{className:"pt-1 border-t border-border-subtle",children:e.jsxs("label",{className:"flex items-center gap-2 text-xs text-text-main cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:M,onChange:t=>Je(t.target.checked),className:"rounded border-border-subtle accent-primary size-4"}),"Auto Generate Email (FSMail)"]})}),(i==="leonardo"||i==="weavy"||i==="cloudflare"||i==="openvecta"||i==="flashloop")&&M?e.jsxs("div",{className:"space-y-3 pt-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-text-muted",children:"Count to generate:"}),e.jsx("input",{type:"number",min:1,max:50,value:ye,onChange:t=>Oe(parseInt(t.target.value)||1),className:"w-16 text-xs p-1.5 rounded-lg border border-border-subtle bg-surface text-center text-text-main"})]}),we.length>=1&&e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-text-muted",children:"Email domain:"}),e.jsx("select",{value:ce,onChange:t=>de(t.target.value),className:"flex-1 text-xs p-1.5 rounded-lg border border-border-subtle bg-surface text-text-main ml-2 max-w-[180px]",children:we.map(t=>e.jsxs("option",{value:t,children:["@",t]},t))})]}),e.jsx(m,{variant:"primary",size:"sm",fullWidth:!0,onClick:Ee,children:"Generate & Run"})]}):e.jsxs("div",{className:"space-y-4 pt-1",children:[e.jsxs("p",{className:"text-xs text-text-muted",children:["Format: ",e.jsx("code",{className:"bg-surface-2 px-1 rounded",children:"email:password"})," (one per line)."]}),e.jsx("textarea",{value:A,onChange:t=>Re(t.target.value),rows:4,placeholder:`user1@gmail.com:Passw0rd1
2
- user2@gmail.com:Passw0rd2`,className:"w-full text-xs font-mono p-3 rounded-lg border border-border-subtle bg-surface focus:outline-none focus:border-primary resize-y text-text-main"}),e.jsxs("div",{className:"flex items-center justify-between gap-4 flex-wrap",children:[e.jsxs("label",{className:"flex items-center gap-2 text-xs text-text-main cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:ne,onChange:t=>he(t.target.checked),className:"rounded border-border-subtle accent-primary size-4"}),"Run immediately"]}),e.jsx(m,{variant:"primary",size:"sm",onClick:Ze,children:"Add Accounts"})]})]}),_e&&e.jsx("p",{className:"text-[11px] text-primary italic",children:_e})]}),e.jsxs(Ye,{padding:"md",className:"space-y-4",children:[e.jsxs("h2",{className:"text-sm font-bold text-text-main flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:"settings"}),"Automation Settings"]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[Pe("General Settings","dns",z.general,()=>C("general")),z.general&&e.jsxs("div",{className:"pl-6 pr-2 py-2 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"text-xs font-medium text-text-main",children:"Headless Browser"}),e.jsx("span",{className:"text-[10px] text-text-muted",children:"Jalankan di latar belakang tanpa membuka jendela baru"})]}),e.jsx(Ge,{checked:G,onChange:be})]}),e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"text-xs font-medium text-text-main",children:"Tampilkan Preview Panel"}),e.jsx("span",{className:"text-[10px] text-text-muted",children:"Aktifkan live stream visual di bawah"})]}),e.jsx(Ge,{checked:O,onChange:U})]}),e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("span",{className:"text-xs font-medium text-text-main",children:"Auto Inject to fsrouter"}),e.jsx(Ge,{checked:$e,onChange:re})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[Pe("Outbound Proxy Settings","vpn_lock",z.proxy,()=>C("proxy")),z.proxy&&e.jsxs("div",{className:"pl-6 pr-2 py-2 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("span",{className:"text-xs font-medium text-text-main",children:"Enable Outbound Proxy"}),e.jsx(Ge,{checked:oe,onChange:fe})]}),oe&&e.jsxs("div",{className:"space-y-2 pt-1 border-t border-border-subtle",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("span",{className:"text-[11px] text-text-muted",children:[k.length," ",k.length===1?"proxy":"proxies"," configured"]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[k.length>0&&e.jsx("button",{onClick:async()=>{if(d)return;ie(!0);const t={};for(const a of k){t[a]={testing:!0},je({...t});try{const l=await(await fetch("/api/automation/codebuddy/test-proxy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxy:a})})).json();t[a]=l}catch{t[a]={ok:!1,error:"Request failed"}}je({...t})}ie(!1)},disabled:d,className:`text-[11px] px-3 py-1 rounded-lg border font-medium transition-colors ${d?"bg-surface-2 border-border-subtle text-text-muted cursor-wait":"bg-surface-2 border-border-subtle hover:border-green-500 text-green-400 hover:text-green-300"}`,children:d?"⏳ Testing...":"🧪 Test"}),e.jsx("button",{onClick:()=>{le(k.join(`
3
- `)),W(!0)},className:"text-[11px] px-3 py-1 rounded-lg bg-surface-2 border border-border-subtle hover:border-primary text-primary font-medium transition-colors",children:"✏️ Edit"})]})]}),k.length>0&&e.jsx("div",{className:"text-[10px] bg-surface-2 rounded-lg p-2 max-h-[120px] overflow-y-auto font-mono space-y-1",children:k.map((t,a)=>{const n=F[t],l=t.replace(/:[^:@]*@/,":***@");return e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"truncate text-text-muted flex-1",title:l,children:l}),n&&e.jsx("span",{className:`shrink-0 whitespace-nowrap ${n.testing?"text-yellow-400":n.ok?"text-green-400":"text-red-400"}`,children:n.testing?"⏳":n.ok?`✅ ${n.ip} · ${n.latency}ms`:`❌ ${n.error}`})]},a)})})]})]})]}),e.jsx(m,{variant:"secondary",size:"sm",fullWidth:!0,onClick:Qe,disabled:Le,children:Le?"Saving...":"Save Settings"})]})]})]}),e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[(x||N.length>0)&&e.jsxs("div",{className:"border border-border-subtle bg-surface-2 rounded-xl p-4 space-y-3 relative overflow-hidden",children:[f&&e.jsx("div",{className:"absolute top-0 left-0 h-1 bg-gradient-to-r from-primary to-green-500 transition-all duration-500",style:{width:`${f.progress||0}%`}}),e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[x?e.jsx("span",{className:"material-symbols-outlined text-[18px] text-primary animate-spin",children:"autorenew"}):(f==null?void 0:f.status)==="stopped"?e.jsx("span",{className:"material-symbols-outlined text-[18px] text-red-400",children:"cancel"}):e.jsx("span",{className:"material-symbols-outlined text-[18px] text-green-400",children:"check_circle"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-text-main",children:x?"Job Running":(f==null?void 0:f.status)==="stopped"?"Job Stopped":"Job Completed"}),f&&e.jsxs("p",{className:"text-[11px] text-text-muted mt-0.5",children:["Progress: ",f.completed,"/",f.count," ·",e.jsxs("span",{className:"text-green-400 ml-1",children:["✓ ",f.success]}),e.jsxs("span",{className:"text-red-400 ml-1",children:["✗ ",f.failed]})]})]})]}),e.jsxs("div",{className:"flex gap-2",children:[!x&&N.length>0&&e.jsx(m,{variant:"ghost",size:"sm",onClick:async()=>{Se.current=!0,N.forEach(t=>$.current.add(t.email.toLowerCase())),I([]),te(null);try{await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clear-logs"})})}catch{}},children:"Clear"}),x&&e.jsx(m,{variant:"danger",size:"sm",onClick:E,children:"■ Stop"})]})]}),e.jsx("div",{className:"max-h-96 overflow-y-auto overflow-x-auto rounded-lg bg-black/40 border border-border/40 text-[11px] font-mono",children:e.jsxs("table",{className:"w-full min-w-[540px]",children:[e.jsx("thead",{className:"sticky top-0 bg-black/80 backdrop-blur-sm",children:e.jsxs("tr",{className:"text-text-muted text-left",children:[e.jsx("th",{className:"px-2 py-1 w-6",children:"#"}),e.jsx("th",{className:"px-2 py-1",children:"Email"}),e.jsx("th",{className:"px-2 py-1 w-16",children:"Status"}),e.jsx("th",{className:"px-2 py-1",children:"Step"}),e.jsx("th",{className:"px-2 py-1 w-14 text-right",children:"Time"}),e.jsx("th",{className:"px-2 py-1 w-12 text-right",children:"Actions"})]})}),e.jsx("tbody",{children:N.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"px-2 py-2 text-center text-text-muted",children:"Waiting for log entries..."})}):Ke.map((t,a)=>{var c;const n=(c=t.step)==null?void 0:c.match(/\[([^\]]+s)\]$/),l=n?t.step.replace(n[0],"").trim():t.step,b=n?n[1]:"--";return e.jsxs("tr",{className:`border-t border-border/20 ${t.status==="failed"?"bg-red-500/5":t.status==="done"?"bg-green-500/5":""}`,children:[e.jsx("td",{className:"px-2 py-1 text-text-muted",children:t.idx+1}),e.jsx("td",{className:"px-2 py-1 text-text-main truncate max-w-[160px]",title:t.email,children:t.email}),e.jsxs("td",{className:"px-2 py-1 whitespace-nowrap",children:[t.status==="running"&&e.jsx("span",{className:"text-blue-400",children:"● run"}),t.status==="done"&&e.jsx("span",{className:"text-green-400",children:"✓ ok"}),t.status==="failed"&&e.jsx("span",{className:"text-red-400",children:"✗ fail"}),t.status==="pending"&&e.jsx("span",{className:"text-text-muted",children:"◌"})]}),e.jsx("td",{className:"px-2 py-1 text-text-muted truncate max-w-[280px]",title:t.status==="done"?t.balance!==void 0?`Success · ${t.balance} tokens${t.left_team===!0?" · Left team ✓":t.left_team===!1?" · Left team ✗":""}`:"Success":l,children:t.status==="done"?e.jsxs("span",{className:"text-green-400 font-medium",children:[t.balance!==void 0?`Success · ${t.balance} tokens`:"Success",t.left_team===!0&&e.jsx("span",{className:"text-purple-400 ml-1",children:"· Left team ✓"}),t.left_team===!1&&e.jsx("span",{className:"text-yellow-400 ml-1",children:"· Left team ✗"})]}):l}),e.jsx("td",{className:"px-2 py-1 text-right text-[10px] text-text-muted font-mono",children:b}),e.jsx("td",{className:"px-2 py-1 text-right whitespace-nowrap",children:t.status==="failed"&&e.jsx("button",{onClick:()=>{const p=h.find(ke=>ke.email.toLowerCase()===t.email.toLowerCase());p?ve(p.id):alert("Account tidak ditemukan.")},disabled:!!x,className:`text-[9px] font-bold px-1.5 py-0.5 rounded cursor-pointer transition-colors ${x?"text-text-muted bg-surface-3 cursor-not-allowed opacity-50":"text-brand-400 hover:text-brand-300 hover:bg-brand-500/15 bg-brand-500/5"}`,children:"Retry"})})]},a)})})]})}),Y>1&&e.jsxs("div",{className:"flex items-center justify-between gap-4 pt-2",children:[e.jsx(m,{variant:"secondary",size:"sm",onClick:()=>ue(t=>Math.max(1,t-1)),disabled:q===1,children:"Previous"}),e.jsxs("span",{className:"text-xs text-text-muted",children:["Page ",q," of ",Y," · (",N.length," items)"]}),e.jsx(m,{variant:"secondary",size:"sm",onClick:()=>ue(t=>Math.min(Y,t+1)),disabled:q===Y,children:"Next"})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4 flex-wrap",children:[e.jsxs("h2",{className:"text-sm font-bold text-text-main flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:"group"}),"Accounts"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-xs text-text-muted",children:[h.filter(t=>t.provider===i).length," total"]}),e.jsxs(qe,{variant:"success",size:"sm",children:[h.filter(t=>t.provider===i&&t.api_key_status==="ready").length," ready"]})]})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsx("input",{type:"text",placeholder:"Search email...",value:y,onChange:t=>Ve(t.target.value),className:"text-xs p-2 rounded-lg border border-border-subtle bg-surface focus:outline-none focus:border-primary w-48"}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("label",{className:"text-xs text-text-main flex items-center gap-1",children:["Limit:",e.jsx("input",{type:"number",min:1,max:20,value:K,onChange:t=>Ce(parseInt(t.target.value)||3),className:"w-12 text-center p-1 rounded border border-border-subtle bg-surface"})]}),e.jsx(m,{variant:"primary",size:"sm",onClick:Ie,disabled:!!x,children:"Run All Pending"}),e.jsx(m,{variant:"secondary",size:"sm",onClick:s,children:"⚡ Add All Ready → fsrouter"}),e.jsx(m,{variant:"danger",size:"sm",onClick:()=>v(["pending","failed"]),children:"🗑 Delete Pending/Failed"})]})]}),T.size>0&&e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-primary/10 border border-primary/30 text-xs",children:[e.jsxs("span",{className:"text-primary font-semibold",children:[T.size," selected"]}),e.jsx("span",{className:"text-text-muted",children:"·"}),e.jsx("button",{onClick:async()=>{const t=[...T];J(new Set),await Promise.all(t.map(a=>ve(a)))},disabled:!!x,className:"text-brand-400 hover:text-brand-300 font-semibold disabled:opacity-40 disabled:cursor-not-allowed",children:"▶ Run Selected"}),e.jsx("span",{className:"text-text-muted",children:"·"}),e.jsx("button",{onClick:()=>v(null,[...T]),className:"text-red-400 hover:text-red-300 font-semibold",children:"🗑 Delete Selected"}),e.jsx("button",{onClick:()=>J(new Set),className:"ml-auto text-text-muted hover:text-text-main",children:"✕ Clear"})]}),e.jsx("div",{className:"rounded-xl border border-border-subtle bg-surface-2 overflow-x-auto",children:e.jsxs("table",{className:"w-full text-xs text-left border-collapse min-w-[640px]",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-surface text-text-muted border-b border-border-subtle font-semibold",children:[e.jsx("th",{className:"p-2.5 w-8",children:e.jsx("input",{type:"checkbox",className:"rounded cursor-pointer accent-primary",checked:H.length>0&&H.every(t=>T.has(t.id)),onChange:t=>{t.target.checked?J(a=>new Set([...a,...H.map(n=>n.id)])):J(a=>{const n=new Set(a);return H.forEach(l=>n.delete(l.id)),n})}})}),e.jsx("th",{className:"p-2.5 w-10",children:"#"}),e.jsx("th",{className:"p-2.5",children:"Email"}),e.jsx("th",{className:"p-2.5 w-24",children:"Status"}),e.jsx("th",{className:"p-2.5",children:"API Key"}),e.jsx("th",{className:"p-2.5 text-right",children:"Actions"})]})}),e.jsxs("tbody",{children:[H.map(t=>e.jsxs("tr",{className:`border-b border-border-subtle transition-colors ${T.has(t.id)?"bg-primary/5":"hover:bg-surface/50"}`,children:[e.jsx("td",{className:"p-2.5",children:e.jsx("input",{type:"checkbox",className:"rounded cursor-pointer accent-primary",checked:T.has(t.id),onChange:a=>{J(n=>{const l=new Set(n);return a.target.checked?l.add(t.id):l.delete(t.id),l})}})}),e.jsxs("td",{className:"p-2.5 font-mono text-text-muted",children:["#",t.id]}),e.jsx("td",{className:"p-2.5 font-semibold text-text-main truncate max-w-[100px] sm:max-w-[140px] sm:max-w-[200px]",title:t.email,children:t.email}),e.jsxs("td",{className:"p-2.5",children:[e.jsx(qe,{variant:t.api_key_status==="ready"?"success":t.api_key_status==="failed"?"danger":t.api_key_status==="running"?"primary":"default",size:"sm",children:t.api_key_status}),t.last_error&&e.jsxs("p",{className:"text-[10px] text-red-500 mt-0.5 truncate max-w-[150px]",title:t.last_error,children:["⚠ ",t.last_error]})]}),e.jsx("td",{className:"p-2.5",children:t.api_key?e.jsx("code",{className:"bg-surface px-1.5 py-0.5 rounded font-mono text-[10px] text-text-main max-w-[100px] sm:max-w-[140px] block truncate",title:t.api_key,children:t.api_key}):e.jsx("span",{className:"text-text-muted",children:"—"})}),e.jsx("td",{className:"p-2.5 text-right whitespace-nowrap",children:e.jsxs("div",{className:"inline-flex items-center gap-3",children:[e.jsxs("button",{onClick:()=>ve(t.id),disabled:!!x||t.api_key_status==="running",className:`inline-flex items-center gap-0.5 text-[11px] font-bold transition-all cursor-pointer ${x||t.api_key_status==="running"?"text-text-muted cursor-not-allowed opacity-40":"text-brand-400 hover:text-brand-300 hover:underline"}`,children:[e.jsx("span",{className:"material-symbols-outlined text-[13px]",children:"play_arrow"}),"Process"]}),t.api_key_status==="ready"&&t.api_key&&e.jsxs("button",{onClick:()=>Ne(t.id),className:"inline-flex items-center gap-0.5 text-[11px] font-bold text-green-400 hover:text-green-300 hover:underline transition-all cursor-pointer",children:[e.jsx("span",{className:"material-symbols-outlined text-[13px]",children:"add_link"}),"+fsrouter"]}),e.jsxs("button",{onClick:()=>o(t.id),className:"inline-flex items-center gap-0.5 text-[11px] font-bold text-red-400 hover:text-red-300 hover:underline transition-all cursor-pointer",children:[e.jsx("span",{className:"material-symbols-outlined text-[13px]",children:"delete"}),"Delete"]})]})})]},t.id)),H.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"p-6 text-center text-text-muted",children:"No accounts found. Add manual accounts to get started."})})]})]})}),me>1&&e.jsxs("div",{className:"flex items-center justify-between gap-4 pt-2",children:[e.jsx(m,{variant:"secondary",size:"sm",onClick:()=>De(t=>Math.max(1,t-1)),disabled:xe===1,children:"Previous"}),e.jsxs("span",{className:"text-xs text-text-muted",children:["Page ",xe," of ",me]}),e.jsx(m,{variant:"secondary",size:"sm",onClick:()=>De(t=>Math.min(me,t+1)),disabled:xe===me,children:"Next"})]})]})]})]}),O&&e.jsxs(Ye,{padding:"md",className:"space-y-3 border border-brand-500/20 bg-brand-500/5 mt-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h2",{className:"text-xs font-bold text-brand-400 flex items-center gap-1.5",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px]",children:"bug_report"}),"🖥️ Live Browser Preview"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!_&&e.jsx("span",{className:"text-[10px] text-text-muted",children:x?"Starting...":"Run a job to see the browser"}),_&&e.jsxs("span",{className:"text-[10px] text-green-400 flex items-center gap-1",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse"}),"Live · ~2fps"]})]})]}),e.jsx("div",{className:"relative rounded-lg overflow-hidden border border-border-subtle bg-black",style:{aspectRatio:"16/10"},children:_?e.jsx("img",{src:`/api/automation/codebuddy/debug-vnc?action=screenshot&t=${D}`,alt:"Browser preview",className:"w-full h-full object-contain",style:{minHeight:"400px",imageRendering:"auto"},onLoad:()=>{O&&x&&setTimeout(()=>B(Date.now()),400)},onError:()=>{setTimeout(()=>B(Date.now()),2e3)}},"debug-screenshot"):e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[32px] text-text-muted",children:"desktop_windows"}),e.jsx("p",{className:"text-xs text-text-muted",children:x?"Starting browser preview...":"Run a job with Debug Mode to see live browser"})]})})})]}),ze&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",onClick:()=>W(!1),children:e.jsxs("div",{className:"bg-surface border border-border-subtle rounded-2xl shadow-2xl w-full max-w-lg mx-4 max-h-[90vh] overflow-hidden",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"p-5 border-b border-border-subtle",children:[e.jsxs("h3",{className:"text-base font-bold text-text-main flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-primary",children:"dns"}),"Edit Proxy Pool"]}),e.jsx("p",{className:"text-xs text-text-muted mt-1",children:"Enter one proxy per line. A random proxy will be selected for each automation run."})]}),e.jsxs("div",{className:"p-5 space-y-3",children:[e.jsx("textarea",{value:ge,onChange:t=>le(t.target.value),placeholder:`socks5://user:pass@host:port
4
- http://host:port
5
- host:port:user:pass
6
- host:port`,rows:10,className:"w-full text-xs p-3 rounded-xl border border-border-subtle bg-surface-2 focus:outline-none focus:border-primary text-text-main font-mono resize-none",spellCheck:!1}),e.jsxs("div",{className:"text-[10px] text-text-muted bg-surface-2 rounded-lg p-3 space-y-1",children:[e.jsx("div",{className:"font-semibold text-text-main mb-1",children:"Supported formats:"}),e.jsx("div",{children:e.jsx("code",{className:"text-primary",children:"socks5://user:pass@host:port"})}),e.jsx("div",{children:e.jsx("code",{className:"text-primary",children:"http://user:pass@host:port"})}),e.jsx("div",{children:e.jsx("code",{className:"text-primary",children:"socks5://host:port"})}),e.jsx("div",{children:e.jsx("code",{className:"text-primary",children:"http://host:port"})}),e.jsx("div",{children:e.jsx("code",{className:"text-primary",children:"host:port:user:pass"})}),e.jsx("div",{children:e.jsx("code",{className:"text-primary",children:"host:port"})})]})]}),e.jsxs("div",{className:"p-5 border-t border-border-subtle flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"text-xs text-text-muted",children:[ge.split(`
7
- `).filter(t=>t.trim()).length," proxies"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>W(!1),className:"px-4 py-2 text-xs rounded-lg border border-border-subtle text-text-muted hover:text-text-main transition-colors",children:"Cancel"}),e.jsx("button",{onClick:async()=>{const t=ge.split(`
8
- `).map(a=>a.trim()).filter(Boolean);V(t),W(!1);try{await fetch("/api/automation/codebuddy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"settings",proxy_enabled:!0,proxy_pool:JSON.stringify(t)})})}catch{}},className:"px-4 py-2 text-xs rounded-lg bg-primary text-white font-medium hover:opacity-90 transition-opacity",children:"Save Proxies"})]})]})]})})]})}function tt(u){if(!u)return"";const h=`
9
- <style id="router-injected-styles">
10
- html, body {
11
- overflow-x: auto !important;
12
- overflow-y: auto !important;
13
- margin: 0 !important;
14
- padding: 12px !important;
15
- background-color: #ffffff !important;
16
- color: #000000 !important;
17
- }
18
- img {
19
- max-width: 100% !important;
20
- height: auto !important;
21
- }
22
- </style>
23
- `;return u.includes("<head>")?u.replace("<head>",`<head>${h}`):u.includes("<HEAD>")?u.replace("<HEAD>",`<HEAD>${h}`):u.includes("<body>")?u.replace("<body>",`<body>${h}`):u.includes("<BODY>")?u.replace("<BODY>",`<BODY>${h}`):h+u}function st(){const[u,h]=r.useState(!1),[X,x]=r.useState(!1),[ee,f]=r.useState(!0),[te,N]=r.useState(!1),[I,$]=r.useState(""),[se,ue]=r.useState([]),[ae,pe]=r.useState([]),[Se,g]=r.useState(null),[Ue,K]=r.useState(""),[Ce,$e]=r.useState([]),[re,ne]=r.useState(1),[he,A]=r.useState(!1),[Re,_e]=r.useState(!1),[j,i]=r.useState(!1),[R,G]=r.useState(""),[be,O]=r.useState(""),[U,Te]=r.useState(""),[We,oe]=r.useState(""),[fe,k]=r.useState("manual"),[V,ze]=r.useState(""),[W,ge]=r.useState(""),[le,Be]=r.useState(""),[Ae,Fe]=r.useState(""),[S,Le]=r.useState(""),[Q,z]=r.useState({}),[L,C]=r.useState(null),Pe=r.useRef(!1);r.useEffect(()=>{Pe.current=he,he||C(null)},[he]);const[_,Z]=r.useState("all"),[D,B]=r.useState(""),[F,je]=r.useState(null),[d,ie]=r.useState(null),[T,J]=r.useState("html"),[M,Je]=r.useState(""),[ye,Oe]=r.useState(!1),[we,He]=r.useState(""),[ce,de]=r.useState(""),y=async()=>{var s,o,v,P,me,H,Y,q,Ke;try{const t=await fetch("/api/automation/fsmail"),a=await t.json();if(t.ok){x(a.configured),N(a.connection_ok),$(a.connection_error),ue(a.domains||[]);const n=a.inboxes||[];pe(n),B(l=>l&&n.some(c=>c.address.toLowerCase()===l.toLowerCase())?l:n.length>0?n[0].address:""),g(a.webhook),K(a.webhook_url),$e(a.otps||[]),Pe.current||(G(((s=a.settings)==null?void 0:s.base_url)||""),O(((o=a.settings)==null?void 0:o.api_key)||""),Te(((v=a.settings)==null?void 0:v.default_domain)||""),oe(((P=a.settings)==null?void 0:P.webhook_secret)||""),ze(((me=a.settings)==null?void 0:me.cf_account_id)||""),ge(((H=a.settings)==null?void 0:H.cf_api_token)||""),Be(((Y=a.settings)==null?void 0:Y.cf_domain)||""),Fe(((q=a.settings)==null?void 0:q.cf_telegram_bot_token)||""),Le(((Ke=a.settings)==null?void 0:Ke.cf_workers_dev_url)||""))}}catch(t){console.error(t)}finally{f(!1)}};r.useEffect(()=>{y();const s=setInterval(y,5e3);return()=>clearInterval(s)},[]);const Ve=async()=>{try{(await fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"settings",base_url:R,api_key:be,default_domain:U,webhook_secret:We,cf_account_id:V,cf_api_token:W,cf_domain:le,cf_telegram_bot_token:Ae,cf_workers_dev_url:S})})).ok&&(A(!1),y())}catch(s){alert(`Save failed: ${s.message}`)}},xe=async()=>{h(!0),C(null);try{const s=await fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"test-connection",base_url:R,api_key:be})}),o=await s.json();s.ok?(C({ok:!0,message:"Koneksi ke worker berhasil!"}),y()):C({ok:!1,message:`Koneksi gagal: ${o.error}`})}catch(s){C({ok:!1,message:`Error: ${s.message}`})}finally{h(!1)}},De=async()=>{if(!V||!W||!le){alert("Account ID, API Token, dan Domain wajib diisi!");return}h(!0),C(null);try{const s=await fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"auto-deploy",cf_account_id:V,cf_api_token:W,cf_domain:le,telegram_bot_token:Ae})}),o=await s.json();s.ok?(C({ok:!0,message:"Sukses! Worker telah di-deploy ke Cloudflare dan siap digunakan."}),G(o.base_url||""),O(o.api_key||""),Te(o.default_domain||""),oe(o.webhook_secret||""),Le(o.cf_workers_dev_url||""),y()):C({ok:!1,message:`Deploy gagal: ${o.error}`})}catch(s){C({ok:!1,message:`Error: ${s.message}`})}finally{h(!1)}},Me=async()=>{try{const s=await fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"webhook-register"})}),o=await s.json();s.ok?(alert("Webhook registered successfully!"),y()):alert(`Failed: ${o.error}`)}catch(s){alert(`Error: ${s.message}`)}},w=async s=>{s.preventDefault();try{const o=await fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"inbox-create",alias:we,domain:ce})}),v=await o.json();if(o.ok){i(!1);const P=`${we}@${ce}`.toLowerCase();B(P),He(""),de(""),y()}else alert(v.error)}catch(o){alert(o.message)}},Qe=async s=>{if(confirm(`Hapus inbox ${s}?`))try{(await fetch("/api/automation/fsmail",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"inbox-delete",alias:s})})).ok&&(D&&D.split("@")[0]===s&&B(""),d&&d.alias===s&&(je(null),ie(null)),y())}catch(o){console.error(o)}},Ze=async s=>{je(s),ie(null),ne(1);try{const o=await fetch(`/api/automation/fsmail/otps/${s}`),v=await o.json();o.ok&&(ie(v.otp),y())}catch(o){console.error(o)}},Ee=async(s,o)=>{if(s.stopPropagation(),!!confirm("Delete this email?"))try{await fetch(`/api/automation/fsmail/otps/${o}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete"})}),F===o&&(je(null),ie(null)),y()}catch(v){console.error(v)}},Ie=s=>{navigator.clipboard.writeText(s),z(o=>({...o,[s]:!0})),setTimeout(()=>{z(o=>({...o,[s]:!1}))},1500)},E=({value:s,text:o="Copy",className:v=""})=>{const P=Q[s];return e.jsxs("button",{type:"button",onClick:()=>Ie(s),className:`text-[10px] px-2 py-1 rounded cursor-pointer transition-all duration-150 flex items-center gap-1 border font-semibold ${P?"text-green-400 bg-green-500/10 border-green-500/20":"text-white/50 hover:text-white bg-white/5 hover:bg-white/10 border-transparent"} ${v}`,children:[e.jsx("span",{className:"material-symbols-outlined text-[12px]",children:P?"check":"content_copy"}),P?"Copied":o]})},ve=Ce.filter(s=>{if(!D||s.address.toLowerCase()!==D.toLowerCase()||_==="unread"&&s.used_at||_==="read"&&!s.used_at||_==="otp"&&!s.otp_code)return!1;if(M){const o=M.toLowerCase();return s.sender.toLowerCase().includes(o)||s.subject.toLowerCase().includes(o)||s.otp_code&&s.otp_code.includes(o)}return!0}),Ne=s=>Ce.filter(o=>!(!D||o.address.toLowerCase()!==D.toLowerCase()||s==="unread"&&o.used_at||s==="read"&&!o.used_at||s==="otp"&&!o.otp_code)).length;return e.jsxs("div",{className:"border border-border-subtle rounded-2xl overflow-hidden bg-vibrancy backdrop-blur-xl flex flex-col h-[calc(100vh-210px)] min-h-[500px] shadow-[var(--shadow-warm)]",children:[ee?e.jsx("div",{className:"flex-1 flex flex-col items-center justify-center p-8 text-center space-y-3",children:e.jsx(Xe,{size:"lg",label:"Memuat setelan Temp Mail..."})}):X?e.jsxs("div",{className:"flex-1 flex divide-x divide-border-subtle min-h-0",children:[e.jsxs("aside",{className:"w-60 shrink-0 bg-surface/40 flex flex-col min-h-0",children:[e.jsxs("div",{className:"p-4 border-b border-border-subtle flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"text-xs font-bold text-text-main flex items-center gap-1.5",title:!te&&I?I:void 0,children:[e.jsx("span",{className:`inline-block size-2 rounded-full ${te?"bg-green-500":"bg-red-500 animate-ping"}`}),te?"Connected":"Disconnected"]}),e.jsx("button",{onClick:()=>A(!0),className:"text-text-muted hover:text-text-main cursor-pointer",title:"Settings",children:e.jsx("span",{className:"material-symbols-outlined text-[18px]",children:"settings"})})]}),!te&&I&&e.jsxs("div",{className:"px-4 py-2.5 bg-red-500/10 border-b border-red-500/20 text-[10px] text-red-400 break-all space-y-1",children:[e.jsxs("div",{className:"font-semibold flex items-center gap-1",children:[e.jsx("span",{className:"material-symbols-outlined text-[12px]",children:"error"}),"Koneksi Gagal:"]}),e.jsx("div",{className:"opacity-80",children:I}),S&&R!==S&&e.jsx("button",{onClick:()=>{G(S),A(!0),k("manual")},className:"text-primary hover:underline text-[9px] font-semibold block mt-1 text-left",children:"💡 Gunakan domain workers.dev fallback"})]}),e.jsx("div",{className:"p-4",children:e.jsx(m,{variant:"primary",size:"sm",fullWidth:!0,onClick:()=>{de(U||(se.length>0?se[0]:"")),i(!0)},children:"+ New Inbox"})}),e.jsxs("nav",{className:"flex flex-col px-2 space-y-0.5",children:[e.jsxs("button",{onClick:()=>{Z("all")},className:`flex items-center justify-between px-3 py-1.5 rounded-lg text-xs font-semibold cursor-pointer ${_==="all"?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface"}`,children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-4 opacity-80",children:[e.jsx("polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12"}),e.jsx("path",{d:"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"})]}),"Inbox"]}),e.jsx("span",{className:"bg-surface-3 px-1.5 py-0.5 rounded-full text-[10px] text-text-muted",children:Ne("all")})]}),e.jsxs("button",{onClick:()=>Z("unread"),className:`flex items-center justify-between px-3 py-1.5 rounded-lg text-xs font-semibold cursor-pointer ${_==="unread"?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface"}`,children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-4 opacity-80",children:[e.jsx("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2"}),e.jsx("path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"})]}),"Unread"]}),e.jsx("span",{className:"bg-surface-3 px-1.5 py-0.5 rounded-full text-[10px] text-text-muted",children:Ne("unread")})]}),e.jsxs("button",{onClick:()=>Z("read"),className:`flex items-center justify-between px-3 py-1.5 rounded-lg text-xs font-semibold cursor-pointer ${_==="read"?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface"}`,children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-4 opacity-80",children:[e.jsx("path",{d:"M2 17V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2Z"}),e.jsx("path",{d:"M2 7l10 7 10-7"})]}),"Read"]}),e.jsx("span",{className:"bg-surface-3 px-1.5 py-0.5 rounded-full text-[10px] text-text-muted",children:Ne("read")})]}),e.jsxs("button",{onClick:()=>Z("otp"),className:`flex items-center justify-between px-3 py-1.5 rounded-lg text-xs font-semibold cursor-pointer ${_==="otp"?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface"}`,children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-4 opacity-80",children:e.jsx("path",{d:"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"})}),"With OTP"]}),e.jsx("span",{className:"bg-surface-3 px-1.5 py-0.5 rounded-full text-[10px] text-text-muted",children:Ne("otp")})]})]}),e.jsx("div",{className:"px-4 py-3 border-t border-b border-border-subtle/45 mt-4 bg-surface/10",children:e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:"text",placeholder:"Search inboxes...",value:M,onChange:s=>Je(s.target.value),className:"w-full text-xs pl-8 pr-3 py-1.5 rounded-lg border border-border-subtle bg-surface focus:outline-none focus:border-primary text-text-main"}),e.jsx("span",{className:"absolute left-2.5 top-2.5 text-text-muted/60",children:e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:"size-3.5",children:[e.jsx("circle",{cx:"11",cy:"11",r:"8"}),e.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})})]})}),e.jsx("div",{className:"flex-1 overflow-y-auto custom-scrollbar px-2 pt-4",children:e.jsxs("div",{children:[e.jsxs("p",{className:"px-3 text-[10px] font-semibold text-text-muted uppercase tracking-wider mb-2",children:["Active Inboxes (",ae.length,")"]}),e.jsxs("div",{className:"space-y-0.5",children:[ae.filter(s=>s.address.toLowerCase().includes(M.toLowerCase())).map(s=>e.jsxs("div",{onClick:()=>{B(s.address),Z("all")},className:`group/inbox flex items-center justify-between px-3 py-2 rounded-lg text-xs font-medium cursor-pointer transition-colors ${D.toLowerCase()===s.address.toLowerCase()?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface"}`,children:[e.jsx("span",{className:"truncate w-32",title:s.address,children:s.address}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0 ml-1",children:[e.jsx("button",{onClick:o=>{o.stopPropagation(),Ie(s.address)},className:`size-6 flex items-center justify-center rounded-md transition-all duration-150 ${Q[s.address]?"text-green-400 bg-green-500/15":"text-text-muted hover:text-primary hover:bg-primary/15"}`,title:"Copy address",children:Q[s.address]?e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:"size-3.5",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-3.5",children:[e.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),e.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})}),e.jsx("button",{onClick:o=>{o.stopPropagation(),Qe(s.alias)},className:"size-6 flex items-center justify-center rounded-md text-text-muted hover:text-red-400 hover:bg-red-500/15 transition-all duration-150",title:"Delete inbox",children:e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-3.5",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]},s.address)),ae.length===0&&e.jsx("p",{className:"px-3 text-[11px] text-text-muted italic",children:"No inboxes. Click New Inbox above."})]})]})})]}),e.jsxs("section",{className:"w-80 shrink-0 flex flex-col min-h-0 bg-surface/10",children:[e.jsxs("div",{className:"p-3 border-b border-border-subtle flex items-center justify-between gap-2 bg-surface/10",children:[e.jsx("span",{className:"text-xs font-bold text-text-muted uppercase tracking-wider pl-1",children:"Messages"}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{onClick:()=>{Oe(!0),y().finally(()=>Oe(!1))},className:`p-1.5 hover:bg-surface rounded-lg cursor-pointer text-text-muted transition-colors duration-150 ${ye?"animate-spin":""}`,title:"Refresh",children:e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:"size-4",children:[e.jsx("path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}),e.jsx("path",{d:"M3 3v5h5"}),e.jsx("path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16"}),e.jsx("path",{d:"M16 16h5v5"})]})}),e.jsx("button",{onClick:s=>{F&&Ee(s,F)},disabled:!F,className:`p-1.5 rounded-lg cursor-pointer transition-colors duration-150 ${F?"text-red-500 hover:bg-red-500/10":"text-text-muted/30 cursor-not-allowed"}`,title:"Delete selected email",children:e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-4",children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.jsx("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.jsx("line",{x1:"10",y1:"11",x2:"10",y2:"17"}),e.jsx("line",{x1:"14",y1:"11",x2:"14",y2:"17"})]})})]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto custom-scrollbar p-2 space-y-1.5",children:D?ve.length===0?e.jsx("div",{className:"text-center p-8 text-text-muted text-xs italic",children:"No messages found."}):ve.map(s=>e.jsxs("div",{onClick:()=>Ze(s.id),className:`group p-3 rounded-xl border border-border-subtle cursor-pointer transition-colors relative flex flex-col gap-1 ${F===s.id?"bg-primary/10 border-primary":s.used_at?"bg-surface/40 hover:bg-surface":"bg-surface font-semibold shadow-[var(--shadow-soft)] hover:bg-surface/80"}`,children:[e.jsxs("div",{className:"flex justify-between items-baseline gap-2",children:[e.jsx("span",{className:"text-xs text-text-main truncate w-36",children:s.sender}),e.jsx("span",{className:"text-[9px] text-text-muted shrink-0",children:new Date(s.received_at*1e3).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.jsx("h4",{className:"text-xs text-text-main truncate",children:s.subject}),s.otp_code&&e.jsx("div",{className:"mt-1",children:e.jsxs("span",{className:"bg-amber-500/10 text-amber-500 border border-amber-500/20 px-1.5 py-0.5 rounded font-mono text-[10px] font-bold tracking-wider",children:["🔑 ",s.otp_code]})}),e.jsx("button",{onClick:o=>Ee(o,s.id),className:"absolute top-2 right-2 opacity-0 group-hover:opacity-100 text-text-muted hover:text-red-500 transition-all p-1 hover:bg-red-500/10 rounded cursor-pointer",title:"Delete email",children:e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-3.5",children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.jsx("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"})]})})]},s.id)):e.jsx("div",{className:"text-center p-8 text-text-muted text-xs italic",children:"Select an inbox to view messages."})})]}),e.jsx("article",{className:"flex-1 flex flex-col min-h-0 bg-surface/5",children:F===null?e.jsx("div",{className:"flex-1 flex items-center justify-center text-text-muted text-xs italic",children:"Select an email to read its contents."}):d===null?e.jsxs("div",{className:"flex-1 flex items-center justify-center text-text-muted text-xs",children:[e.jsx("span",{className:"animate-spin mr-2",children:"⏳"})," Loading email details..."]}):e.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:"p-6 border-b border-border-subtle space-y-4",children:[e.jsxs("div",{className:"flex justify-between items-start gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-bold text-text-main",children:d.subject}),e.jsxs("p",{className:"text-xs text-text-muted mt-1",children:["From: ",e.jsx("span",{className:"font-semibold text-text-main",children:d.sender})]}),e.jsxs("p",{className:"text-xs text-text-muted",children:["To: ",e.jsx("span",{className:"font-semibold text-text-main",children:d.address})]})]}),e.jsxs("div",{className:"text-right flex flex-col items-end gap-2 shrink-0",children:[e.jsx("span",{className:"text-[11px] text-text-muted",children:new Date(d.received_at*1e3).toLocaleString()}),e.jsxs("button",{onClick:s=>Ee(s,d.id),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-bold rounded-lg border bg-red-500/10 text-red-400 hover:bg-red-500/20 border-red-500/20 transition-all active:scale-95 cursor-pointer mt-1",title:"Delete this email",children:[e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"size-3",children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.jsx("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"})]}),"Delete Email"]})]})]}),d.otp_code&&e.jsxs("div",{className:"bg-amber-500/10 border border-amber-500/25 rounded-xl p-4 flex items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] text-amber-500 uppercase tracking-widest font-bold",children:"Verification OTP"}),e.jsx("p",{className:"text-2xl font-black font-mono tracking-widest text-text-main mt-1",children:d.otp_code})]}),e.jsx(m,{variant:Q[d.otp_code]?"success":"secondary",size:"sm",onClick:()=>Ie(d.otp_code),children:Q[d.otp_code]?e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"material-symbols-outlined text-[14px]",children:"check"}),"Copied!"]}):"Copy Code"})]}),d.verify_url&&e.jsxs("div",{className:"bg-primary/10 border border-primary/20 rounded-xl p-3 flex items-center justify-between gap-3 text-xs",children:[e.jsxs("span",{className:"truncate flex-1 text-text-main",title:d.verify_url,children:["🔗 ",d.verify_url]}),e.jsx("a",{href:d.verify_url,target:"_blank",rel:"noreferrer",className:"bg-primary hover:bg-primary/95 text-white px-3 py-1.5 rounded-lg font-semibold shrink-0",children:"Open Link"})]})]}),e.jsxs("div",{className:"flex justify-between items-center border-b border-border-subtle bg-surface/20 px-6 shrink-0",children:[e.jsxs("div",{className:"flex",children:[d.body_html&&e.jsx("button",{onClick:()=>J("html"),className:`px-4 py-2.5 text-xs font-semibold border-b-2 cursor-pointer ${T==="html"?"border-primary text-primary":"border-transparent text-text-muted"}`,children:"HTML View"}),e.jsx("button",{onClick:()=>J("text"),className:`px-4 py-2.5 text-xs font-semibold border-b-2 cursor-pointer ${T==="text"||!d.body_html?"border-primary text-primary":"border-transparent text-text-muted"}`,children:"Plain Text"})]}),T==="html"&&d.body_html&&e.jsxs("div",{className:"flex items-center gap-2 py-1.5 text-xs text-text-muted select-none",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] text-white/40",children:"zoom_in"}),e.jsx("button",{onClick:()=>ne(s=>Math.max(.4,s-.1)),className:"px-2 py-0.5 rounded bg-white/5 hover:bg-white/10 border border-white/10 active:bg-white/20 transition-colors text-[10px] font-bold cursor-pointer text-white",title:"Zoom Out",children:"A-"}),e.jsxs("span",{className:"font-mono text-[10px] w-10 text-center text-white/80",children:[Math.round(re*100),"%"]}),e.jsx("button",{onClick:()=>ne(s=>Math.min(1.5,s+.1)),className:"px-2 py-0.5 rounded bg-white/5 hover:bg-white/10 border border-white/10 active:bg-white/20 transition-colors text-[10px] font-bold cursor-pointer text-white",title:"Zoom In",children:"A+"}),e.jsx("button",{onClick:()=>ne(1),className:"px-2 py-0.5 rounded bg-white/5 hover:bg-white/10 border border-white/10 active:bg-white/20 transition-colors text-[10px] font-semibold cursor-pointer text-white ml-1",children:"Reset"})]})]}),e.jsx("div",{className:"flex-1 overflow-auto custom-scrollbar p-6 relative min-h-[450px]",children:T==="html"&&d.body_html?e.jsx("div",{className:"w-full h-full relative overflow-auto custom-scrollbar",children:e.jsx("iframe",{srcDoc:tt(d.body_html),title:"Email Preview",sandbox:"allow-popups allow-popups-to-escape-sandbox",style:{transform:`scale(${re})`,transformOrigin:"top left",width:`${100/re}%`,height:`${100/re}%`},className:"border border-border-subtle rounded-xl bg-white absolute inset-0"})}):e.jsx("pre",{className:"text-xs font-sans whitespace-pre-wrap leading-relaxed text-text-main",children:d.body_text})})]})})]}):e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center p-8 text-center space-y-4",children:[e.jsx("div",{className:"size-16 rounded-full bg-primary/10 text-primary flex items-center justify-center",children:e.jsx("span",{className:"material-symbols-outlined text-[32px]",children:"mail_lock"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-text-main",children:"FSMail Client Not Configured"}),e.jsx("p",{className:"text-xs text-text-muted mt-1 max-w-sm",children:"Please enter your FSMail Cloudflare worker credentials and endpoint in settings to enable temp emails."})]}),e.jsx(m,{variant:"primary",onClick:()=>A(!0),children:"⚙ Configure Settings"})]}),he&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-start justify-center bg-black/60 backdrop-blur-sm p-4 pt-[6vh] overflow-y-auto",children:e.jsxs("div",{className:"bg-neutral-900 border border-white/10 rounded-2xl w-full max-w-md text-white max-h-[80vh] flex flex-col overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex justify-between items-center p-5 border-b border-white/5 shrink-0",children:[e.jsx("h3",{className:"text-base font-bold",children:"FSMail Settings"}),e.jsx("button",{onClick:()=>A(!1),className:"text-white/60 hover:text-white cursor-pointer flex items-center",children:e.jsx("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),e.jsxs("div",{className:"p-5 overflow-y-auto custom-scrollbar flex-1 space-y-4",children:[e.jsxs("div",{className:"flex border border-white/10 rounded-lg p-0.5 bg-white/5 text-xs shrink-0",children:[e.jsx("button",{type:"button",onClick:()=>k("manual"),className:`flex-1 py-1.5 rounded-md font-semibold cursor-pointer text-center transition-all ${fe==="manual"?"bg-primary text-white":"text-white/60 hover:text-white"}`,children:"Manual Input"}),e.jsx("button",{type:"button",onClick:()=>k("auto"),className:`flex-1 py-1.5 rounded-md font-semibold cursor-pointer text-center transition-all ${fe==="auto"?"bg-primary text-white":"text-white/60 hover:text-white"}`,children:"⚡ Auto Deploy (Cloudflare)"})]}),fe==="manual"?e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"Base URL Worker"}),e.jsx("input",{type:"text",placeholder:"https://mail.yourdomain.com",value:R,onChange:s=>G(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"}),S&&R!==S&&e.jsxs("div",{className:"mt-1.5 p-2 bg-primary/10 border border-primary/20 rounded-lg text-[10px] text-primary space-y-1 text-left",children:[e.jsx("div",{children:"💡 Coba gunakan URL workers.dev fallback:"}),e.jsx("div",{className:"font-mono text-[9px] break-all bg-black/40 p-1 rounded select-all",children:S}),e.jsx("button",{type:"button",onClick:()=>G(S),className:"underline hover:no-underline font-semibold block",children:"Klik untuk gunakan URL ini"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"API Key (X-API-Key)"}),e.jsx("input",{type:"password",placeholder:"tm_...",value:be,onChange:s=>O(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"Default Domain"}),e.jsx("input",{type:"text",placeholder:"yourdomain.com",value:U,onChange:s=>Te(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"Webhook Secret"}),e.jsx("input",{type:"password",placeholder:"Leave empty to auto-generate",value:We,onChange:s=>oe(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(m,{variant:"secondary",size:"sm",fullWidth:!0,onClick:xe,disabled:u,children:u?"Testing...":"⚡ Test Connection"}),L&&e.jsxs("div",{className:`p-2.5 rounded-lg text-xs font-medium flex items-start gap-2 ${L.ok?"bg-green-500/10 border border-green-500/20 text-green-400":"bg-red-500/10 border border-red-500/20 text-red-400"}`,children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] shrink-0 mt-0.5",children:L.ok?"check_circle":"error"}),e.jsx("span",{className:"break-all text-left",children:L.message})]}),e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx(m,{variant:"secondary",size:"sm",fullWidth:!0,onClick:()=>A(!1),children:"Cancel"}),e.jsx(m,{variant:"primary",size:"sm",fullWidth:!0,onClick:Ve,children:"Save Settings"})]})]})]}):e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1",children:[e.jsx("label",{className:"text-[11px] text-white/60 block",children:"Cloudflare Account ID"}),e.jsxs("a",{href:"https://dash.cloudflare.com",target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-primary hover:underline cursor-pointer flex items-center gap-0.5",children:["Temukan disini ",e.jsx("span",{className:"material-symbols-outlined text-[10px]",children:"open_in_new"})]})]}),e.jsx("input",{type:"text",placeholder:"Paste Account ID Anda",value:V,onChange:s=>ze(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1",children:[e.jsx("label",{className:"text-[11px] text-white/60 block",children:"Cloudflare API Token (Workers & D1)"}),e.jsxs("a",{href:"https://dash.cloudflare.com/profile/api-tokens",target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-primary hover:underline cursor-pointer flex items-center gap-0.5",children:["Buat disini ",e.jsx("span",{className:"material-symbols-outlined text-[10px]",children:"open_in_new"})]})]}),e.jsx("input",{type:"password",placeholder:"Paste API Token Anda",value:W,onChange:s=>ge(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"Domain Worker (misal: mail.domainanda.com)"}),e.jsx("input",{type:"text",placeholder:"mail.domainanda.com",value:le,onChange:s=>Be(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between items-center mb-1",children:[e.jsx("label",{className:"text-[11px] text-white/60 block",children:"Telegram Bot Token (Opsional)"}),e.jsxs("a",{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-primary hover:underline cursor-pointer flex items-center gap-0.5",children:["Dapatkan di @BotFather ",e.jsx("span",{className:"material-symbols-outlined text-[10px]",children:"open_in_new"})]})]}),e.jsx("input",{type:"password",placeholder:"Token Bot dari @BotFather",value:Ae,onChange:s=>Fe(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]})]}),e.jsxs("div",{className:"space-y-3",children:[L&&e.jsxs("div",{className:`p-2.5 rounded-lg text-xs font-medium flex items-start gap-2 ${L.ok?"bg-green-500/10 border border-green-500/20 text-green-400":"bg-red-500/10 border border-red-500/20 text-red-400"}`,children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] shrink-0 mt-0.5",children:L.ok?"check_circle":"error"}),e.jsx("span",{className:"break-all text-left",children:L.message})]}),S&&e.jsxs("div",{className:"p-2.5 bg-white/5 border border-white/10 rounded-lg text-[10px] text-white/70 space-y-1 text-left",children:[e.jsx("span",{className:"font-semibold text-primary block",children:"Workers.dev fallback URL:"}),e.jsx("span",{className:"font-mono text-[9px] break-all block bg-black/40 p-1 rounded select-all",children:S}),e.jsx("span",{className:"block leading-relaxed",children:"Jika custom domain Anda terputus (misal karena DNS belum merambat), Anda dapat menggunakan URL fallback ini di tab Manual Input."})]}),e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx(m,{variant:"secondary",size:"sm",fullWidth:!0,onClick:()=>A(!1),children:"Cancel"}),e.jsx(m,{variant:"primary",size:"sm",fullWidth:!0,onClick:De,disabled:u,children:u?"Deploying...":"⚡ Auto Deploy & Setup"})]})]})]}),e.jsxs("div",{className:"space-y-3 pt-2 border-t border-white/5 shrink-0",children:[e.jsx("a",{href:"/dashboard/automation/fsmail-tutorial",target:"_blank",rel:"noopener noreferrer",className:"w-full py-2 rounded-lg bg-neutral-900 border border-primary/20 hover:border-primary/50 text-primary text-xs font-semibold flex items-center justify-center gap-1.5 transition-colors cursor-pointer",children:"📖 Buka Panduan Lengkap Deploy"}),e.jsxs("details",{className:"group bg-white/5 border border-white/10 rounded-xl overflow-hidden",children:[e.jsxs("summary",{className:"list-none flex items-center justify-between p-3 cursor-pointer select-none text-[11px] font-semibold text-white/80 hover:text-white transition-colors",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] text-primary",children:"help"}),"Cara Setup Temp Mail (FSMail)"]}),e.jsx("span",{className:"material-symbols-outlined text-[16px] transition-transform group-open:rotate-180",children:"expand_more"})]}),e.jsxs("div",{className:"p-3 pt-0 border-t border-white/5 text-[11px] text-white/70 space-y-2 leading-relaxed max-h-40 overflow-y-auto custom-scrollbar",children:[e.jsxs("p",{className:"mt-2",children:["FSMail adalah sistem email sementara berbasis ",e.jsx("strong",{children:"Cloudflare Worker"}),". Ikuti langkah berikut untuk mengaturnya:"]}),e.jsxs("ol",{className:"list-decimal list-inside space-y-1.5 text-white/60",children:[e.jsxs("li",{children:[e.jsx("strong",{className:"text-white/80",children:"Deploy Worker:"})," Deploy kode worker FSMail di akun Cloudflare Anda."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-white/80",children:"Set API Key:"})," Pada dashboard Worker Anda, tambahkan Environment Variable ",e.jsx("code",{className:"bg-white/10 px-1 py-0.5 rounded font-mono text-amber-300",children:"API_KEY"})," dengan nilai token rahasia Anda."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-white/80",children:"Email Routing:"})," Aktifkan Cloudflare Email Routing pada domain Anda, lalu arahkan semua email masuk ke worker tersebut."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-white/80",children:"Hubungkan:"})," Masukkan ",e.jsx("strong",{className:"text-white",children:"Base URL Worker"})," (misal: ",e.jsx("code",{className:"text-amber-200",children:"https://mail.domain.com"}),") dan ",e.jsx("strong",{className:"text-white",children:"API Key"})," ke form di atas, lalu tekan ",e.jsx("strong",{className:"text-white",children:"Test Connection"}),"."]}),e.jsxs("li",{children:[e.jsx("strong",{className:"text-white/80",children:"Aktifkan Webhook:"})," Setelah koneksi berhasil dan pengaturan disimpan, klik tombol ",e.jsx("strong",{className:"text-white",children:"Register Webhook"})," di bawah untuk mengaktifkan sinkronisasi email secara real-time."]})]})]})]}),X&&e.jsxs("div",{className:"border-t border-white/10 pt-3 mt-2 space-y-2",children:[e.jsx("p",{className:"text-[10px] text-white/40 uppercase font-bold tracking-wider",children:"Worker Integration"}),e.jsx("pre",{className:"text-[10px] bg-white/5 p-2 rounded overflow-x-auto text-amber-300 font-mono",children:Ue}),e.jsx(m,{variant:"primary",size:"sm",fullWidth:!0,onClick:Me,children:"Register Webhook"})]})]})]})]})}),Re&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 backdrop-blur-sm p-4",children:e.jsxs("div",{className:"bg-neutral-950 border border-white/10 rounded-2xl w-full max-w-2xl text-white max-h-[85vh] flex flex-col overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex justify-between items-center p-5 border-b border-white/5 shrink-0 bg-neutral-900",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-primary text-[22px]",children:"auto_stories"}),e.jsx("h3",{className:"text-base font-bold",children:"Panduan Lengkap Deploy Temp Mail"})]}),e.jsx("button",{onClick:()=>_e(!1),className:"text-white/60 hover:text-white cursor-pointer flex items-center",children:e.jsx("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),e.jsxs("div",{className:"p-6 overflow-y-auto custom-scrollbar flex-1 space-y-6 text-sm leading-relaxed text-white/80",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"1"}),"Prasyarat & Login Cloudflare"]}),e.jsx("p",{className:"mb-2",children:"Pastikan Node.js sudah terinstal. Login ke akun Cloudflare Anda melalui terminal dengan menjalankan perintah berikut:"}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{children:"npx wrangler login"}),e.jsx(E,{value:"npx wrangler login"})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"2"}),"Install Dependencies"]}),e.jsx("p",{className:"mb-2",children:"Masuk ke direktori tempmail lokal di sistem Anda dan install dependensi NPM:"}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{children:"cd /home/data/Project/fsrouter/tempmail && npm install"}),e.jsx(E,{value:"cd /home/data/Project/fsrouter/tempmail && npm install"})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"3"}),"Buat Database D1"]}),e.jsx("p",{className:"mb-2",children:"Buat database SQL D1 baru untuk menyimpan inbox dan pesan email masuk:"}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300 mb-3",children:[e.jsx("span",{children:"npx wrangler d1 create tempmail"}),e.jsx(E,{value:"npx wrangler d1 create tempmail"})]}),e.jsxs("div",{className:"bg-blue-500/10 border border-blue-500/20 rounded-lg p-3 text-xs text-blue-300 flex items-start gap-2",children:[e.jsx("span",{className:"material-symbols-outlined text-[16px] shrink-0 mt-0.5",children:"info"}),e.jsxs("span",{children:["Salin ",e.jsx("strong",{children:"database_id"})," hasil output perintah di atas, lalu buka file ",e.jsx("a",{href:"file:///home/data/Project/fsrouter/tempmail/wrangler.jsonc",className:"underline font-semibold hover:text-blue-200",children:"wrangler.jsonc"})," dan ganti nilai ",e.jsx("code",{children:"database_id"})," di dalamnya."]})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"4"}),"Jalankan Migrasi Database"]}),e.jsx("p",{className:"mb-2",children:"Inisialisasi tabel database temp mail di lokal dan jarak jauh (remote Cloudflare):"}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{children:"npm run db:migrate:local && npm run db:migrate:remote"}),e.jsx(E,{value:"npm run db:migrate:local && npm run db:migrate:remote"})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"5"}),"Simpan Secret Bot Telegram"]}),e.jsx("p",{className:"mb-2",children:"Set token Telegram bot Anda dan webhook secret token ke Cloudflare Workers:"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{children:"npx wrangler secret put TELEGRAM_BOT_TOKEN"}),e.jsx(E,{value:"npx wrangler secret put TELEGRAM_BOT_TOKEN"})]}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{children:"npx wrangler secret put TELEGRAM_WEBHOOK_SECRET"}),e.jsx(E,{value:"npx wrangler secret put TELEGRAM_WEBHOOK_SECRET"})]})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"6"}),"Konfigurasi `wrangler.jsonc` & Deploy"]}),e.jsxs("p",{className:"mb-2",children:["Sesuaikan nilai di bagian ",e.jsx("code",{children:"vars"})," (domain dan base URL) pada file ",e.jsx("a",{href:"file:///home/data/Project/fsrouter/tempmail/wrangler.jsonc",className:"underline font-semibold hover:text-white",children:"wrangler.jsonc"}),", lalu deploy worker:"]}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{children:"npm run deploy"}),e.jsx(E,{value:"npm run deploy"})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"7"}),"Set Webhook Telegram Bot"]}),e.jsx("p",{className:"mb-2",children:"Daftarkan URL Worker Anda agar bot Telegram dapat memproses command masuk:"}),e.jsxs("div",{className:"flex items-center justify-between bg-white/5 p-3 rounded-lg border border-white/10 font-mono text-xs text-amber-300",children:[e.jsx("span",{className:"truncate mr-2",children:`curl -X POST "https://api.telegram.org/bot<BOT_TOKEN>/setWebhook" -H "Content-Type: application/json" -d '{"url":"https://<worker-host>/telegram/webhook","secret_token":"<WEBHOOK_SECRET>"}'`}),e.jsx(E,{value:`curl -X POST "https://api.telegram.org/bot<BOT_TOKEN>/setWebhook" -H "Content-Type: application/json" -d '{"url":"https://<worker-host>/telegram/webhook","secret_token":"<WEBHOOK_SECRET>"}'`})]})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-bold text-white flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"bg-primary/20 text-primary px-2 py-0.5 rounded text-xs",children:"8"}),"Cloudflare Email Routing"]}),e.jsxs("p",{children:["Masuk ke Cloudflare Dashboard domain Anda, klik menu ",e.jsx("strong",{children:"Email Routing"}),", aktifkan fitur tersebut, lalu buat rule ",e.jsx("strong",{children:"Catch-all"})," dengan aksi ",e.jsx("strong",{children:"Send to a Worker"})," mengarah ke nama Worker Anda."]})]})]}),e.jsx("div",{className:"p-5 border-t border-white/5 shrink-0 bg-neutral-900 flex justify-end",children:e.jsx(m,{variant:"primary",size:"sm",onClick:()=>_e(!1),children:"Selesai Membaca"})})]})}),j&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4",children:e.jsxs("form",{onSubmit:w,className:"bg-neutral-900 border border-white/10 rounded-2xl w-full max-w-sm p-6 space-y-4 text-white",children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("h3",{className:"text-base font-bold",children:"New Inbox"}),e.jsx("button",{type:"button",onClick:()=>i(!1),className:"text-white/60 hover:text-white cursor-pointer",children:e.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"Alias (optional, empty = random)"}),e.jsx("input",{type:"text",placeholder:"e.g. business-inbox",value:we,onChange:s=>He(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[11px] text-white/60 block mb-1",children:"Domain"}),se.length>0?e.jsxs("select",{value:ce,onChange:s=>de(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-neutral-900 focus:outline-none focus:border-primary text-white",children:[e.jsxs("option",{value:"",children:["— Default (",U||se[0],") —"]}),se.map(s=>e.jsx("option",{value:s,children:s},s))]}):e.jsx("input",{type:"text",placeholder:U||"yourdomain.com",value:ce,onChange:s=>de(s.target.value),className:"w-full text-xs p-2.5 rounded-lg border border-white/10 bg-white/5 focus:outline-none focus:border-primary text-white"})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsx(m,{type:"button",variant:"secondary",size:"sm",fullWidth:!0,onClick:()=>i(!1),children:"Cancel"}),e.jsx(m,{type:"submit",variant:"primary",size:"sm",fullWidth:!0,children:"Create Inbox"})]})]})]})})]})}export{it as default};