@antseed/gateway-console 0.1.10 → 0.1.11

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 (165) hide show
  1. package/dist/assets/{Activity-jZYZ0SDm.js → Activity-UaQeZdKk.js} +1 -1
  2. package/dist/assets/{Audit-C-dFTX_u.js → Audit-Cd26xOlL.js} +1 -1
  3. package/dist/assets/BrandIcon-dTKznfCA.js +1 -0
  4. package/dist/assets/{ChainGate-In51TI2h.js → ChainGate-DpChfDOP.js} +1 -1
  5. package/dist/assets/{ChannelClose-D8CcISX0.js → ChannelClose-DpNV5MqB.js} +1 -1
  6. package/dist/assets/{Charts-doK0mDVf.js → Charts-C65ZE2xP.js} +1 -1
  7. package/dist/assets/Chat-BbM_y6mh.js +225 -0
  8. package/dist/assets/{ConnectWallet-DQ0PC6SO.js → ConnectWallet-CLv0c-JB.js} +1 -1
  9. package/dist/assets/{DataTable-BTwj5g1m.js → DataTable-BkJdorEh.js} +1 -1
  10. package/dist/assets/Disclosure-DMLE7rCw.js +1 -0
  11. package/dist/assets/KeyHolder-Cjko0nrs.js +1 -0
  12. package/dist/assets/Keys-DLKN6Sna.js +1 -0
  13. package/dist/assets/Logs-DIPNoSb8.js +1 -0
  14. package/dist/assets/Members-CgP9OTz9.js +1 -0
  15. package/dist/assets/{Migrate-BQYY5ty3.js → Migrate-DDHZ-rux.js} +1 -1
  16. package/dist/assets/ModelDetails-CkDNU2Px.js +1 -0
  17. package/dist/assets/Models-DXbiNymT.js +1 -0
  18. package/dist/assets/{OperatorActions-DrRpfDBV.js → OperatorActions-BuEpaCiH.js} +1 -1
  19. package/dist/assets/{OperatorGateAlert-D92zhyXC.js → OperatorGateAlert-grMRoFdV.js} +1 -1
  20. package/dist/assets/{Overview-CJmp6b7M.js → Overview-BU9HCltc.js} +1 -1
  21. package/dist/assets/{PeerPicker-BJfjL7Dy.js → PeerPicker-CfsXTUyK.js} +1 -1
  22. package/dist/assets/PolicyEditor-ptFDJhFh.js +1 -0
  23. package/dist/assets/{PolicyField-CfRYcr_J.js → PolicyField-CHhm50jF.js} +1 -1
  24. package/dist/assets/Presets-szQETQLM.js +4 -0
  25. package/dist/assets/Providers-B6xbFeNU.js +1 -0
  26. package/dist/assets/RequestLog-DJl6FJhq.js +1 -0
  27. package/dist/assets/{Rewards-DNNxx3NO.js → Rewards-BOfJumNk.js} +2 -2
  28. package/dist/assets/{RewardsClaim-nstcyJvi.js → RewardsClaim-DHvgMfZ4.js} +1 -1
  29. package/dist/assets/Routing-DFuhPfzU.js +1 -0
  30. package/dist/assets/{Segmented-BelxPFkk.js → Segmented-D3e0aBDU.js} +1 -1
  31. package/dist/assets/{SelectField-BWyF8Ku8.js → SelectField-Cl4acfcI.js} +1 -1
  32. package/dist/assets/{Settings-Cws5Z--R.js → Settings--0bbw1dn.js} +2 -2
  33. package/dist/assets/SidePanel-D0rNElh3.js +1 -0
  34. package/dist/assets/{Staking-DHwoflHG.js → Staking-1D2HNu5P.js} +1 -1
  35. package/dist/assets/{StakingDashboard-DtOKTmys.js → StakingDashboard-C5Ib_AUs.js} +1 -1
  36. package/dist/assets/Switch-B2AEvyu7.js +1 -0
  37. package/dist/assets/{Tabs-yVL4Cd6z.js → Tabs-Cv10NtDy.js} +1 -1
  38. package/dist/assets/{TextAreaField-B6jcl4RR.js → TextAreaField-Dbr655cs.js} +1 -1
  39. package/dist/assets/{UsageByModel-DhTF-c1H.js → UsageByModel-BfvCLwo9.js} +1 -1
  40. package/dist/assets/VerificationLinks-CERoRvCR.js +1 -0
  41. package/dist/assets/{Wallet-QXhhg_E-.js → Wallet-CVS_hzu0.js} +3 -3
  42. package/dist/assets/{WalletConfirm-CgWBuaMN.js → WalletConfirm-C8Kazsh7.js} +1 -1
  43. package/dist/assets/{WalletFunding-Ydd9gD2t.js → WalletFunding-BbhXB813.js} +1 -1
  44. package/dist/assets/{WalletSignIn-DvVSFW4u.js → WalletSignIn-Tzs38aME.js} +1 -1
  45. package/dist/assets/Workspaces-DGgrOEZk.js +1 -0
  46. package/dist/assets/{add-ChFb9YAz.js → add-CdcnAnIQ.js} +1 -1
  47. package/dist/assets/{all-wallets-rdNweGUd.js → all-wallets-CaMIS0WH.js} +1 -1
  48. package/dist/assets/{app-store-s294A1qn.js → app-store-BJlWsf36.js} +1 -1
  49. package/dist/assets/{apple-Cs8Kx1eO.js → apple-sOU-w3fg.js} +1 -1
  50. package/dist/assets/{arrow-bottom-BMmCEQIa.js → arrow-bottom-CTOfZJ7E.js} +1 -1
  51. package/dist/assets/{arrow-bottom-circle-CThmnDp3.js → arrow-bottom-circle-B6IrOSiK.js} +1 -1
  52. package/dist/assets/{arrow-left-BJxgCTi0.js → arrow-left-D0Qm9EWX.js} +1 -1
  53. package/dist/assets/{arrow-right-CnLYkBsH.js → arrow-right-XMSWQLiv.js} +1 -1
  54. package/dist/assets/{arrow-top-Dc0DLP-U.js → arrow-top-Bym-ayRK.js} +1 -1
  55. package/dist/assets/{bank-CSWOYeMW.js → bank-NJF8WYDR.js} +1 -1
  56. package/dist/assets/{basic-BHdv4O5I.js → basic-bO70Xvle.js} +1 -1
  57. package/dist/assets/{browser-mp33aPgo.js → browser-ucjw1tpv.js} +1 -1
  58. package/dist/assets/{bundle-full-CDQ5iC5h.js → bundle-full-idGWmtvy.js} +1 -1
  59. package/dist/assets/{card-BcVuRQiM.js → card-DcpyI2qX.js} +1 -1
  60. package/dist/assets/{ccip-O1XLvWon.js → ccip-DBXxv0FH.js} +1 -1
  61. package/dist/assets/{checkmark-CQVJIWW1.js → checkmark-RFLSeCgj.js} +1 -1
  62. package/dist/assets/{checkmark-bold-DDU5XQfq.js → checkmark-bold-Dl1q9Kby.js} +1 -1
  63. package/dist/assets/{chevron-bottom-Bqi9FW2q.js → chevron-bottom-ilycsYd4.js} +1 -1
  64. package/dist/assets/{chevron-left-Vd5st0yB.js → chevron-left-DFK2Xbq1.js} +1 -1
  65. package/dist/assets/{chevron-right-BVwFrlss.js → chevron-right-Ew8XV9m9.js} +1 -1
  66. package/dist/assets/{chevron-top-D5dQ2xFn.js → chevron-top-CxoXH2-q.js} +1 -1
  67. package/dist/assets/{chrome-store-C9C4k8IO.js → chrome-store-ClmhY3B0.js} +1 -1
  68. package/dist/assets/{clock-Cuvc7bNo.js → clock-CCiukNBf.js} +1 -1
  69. package/dist/assets/{close-fW1pJ13b.js → close-B0KBYbXe.js} +1 -1
  70. package/dist/assets/code-block-DxUcjw4S.js +3 -0
  71. package/dist/assets/{coinPlaceholder-CKymvNA8.js → coinPlaceholder-D2ugxr3r.js} +1 -1
  72. package/dist/assets/{compass-D3h_6fr8.js → compass-CutyEYmW.js} +1 -1
  73. package/dist/assets/{copy-CNGN_cOz.js → copy-CJ0RBt1e.js} +1 -1
  74. package/dist/assets/{core-LDeQm5nv.js → core-BCJdIbrO.js} +3 -3
  75. package/dist/assets/cursor-Bg_hT9DN.js +3 -0
  76. package/dist/assets/{cursor-transparent-BblOfv3t.js → cursor-transparent-BQ_jwSfb.js} +1 -1
  77. package/dist/assets/{desktop-gpVOlZ1-.js → desktop-CsfFLaEs.js} +1 -1
  78. package/dist/assets/{disconnect-C_phPN0_.js → disconnect-B62slDXp.js} +1 -1
  79. package/dist/assets/{discord-Dk_2Plhc.js → discord-B8GwtWtL.js} +1 -1
  80. package/dist/assets/{en_US-Y4ZOVFV4-CmhP8GU2.js → en_US-Y4ZOVFV4-sKQksBWU.js} +4 -4
  81. package/dist/assets/{etherscan-Cyrh-2Lr.js → etherscan-BT9zhNhd.js} +1 -1
  82. package/dist/assets/{exclamation-triangle-SeeDwZ6A.js → exclamation-triangle-BSoPK6uq.js} +1 -1
  83. package/dist/assets/{extension-e_11O0GI.js → extension-CQxJq6bp.js} +1 -1
  84. package/dist/assets/{external-link-Dl0AqCn3.js → external-link-BnfAKGN2.js} +1 -1
  85. package/dist/assets/{facebook-Cp_-Axbh.js → facebook-DiAqdu4i.js} +1 -1
  86. package/dist/assets/{farcaster-Zwu26KYL.js → farcaster-B1y2in5M.js} +1 -1
  87. package/dist/assets/{filters-CdkpWvgi.js → filters-BkVUp9NW.js} +1 -1
  88. package/dist/assets/{github-DuPUePDJ.js → github-IRwi-GM-.js} +1 -1
  89. package/dist/assets/{google-DlKW7Gx7.js → google-k2ysL2bi.js} +1 -1
  90. package/dist/assets/{help-circle-19xLhjPt.js → help-circle-DLj9trmu.js} +1 -1
  91. package/dist/assets/highlighted-body-KQOG7T2V-CJM-VU3I.js +1 -0
  92. package/dist/assets/{id-B4PjxpL6.js → id-BY4HWjv7.js} +1 -1
  93. package/dist/assets/{image-CHz8w95r.js → image-BtUeZe1t.js} +1 -1
  94. package/dist/assets/{index-CZbdRW9K.js → index-BXwAwVaO.js} +1 -1
  95. package/dist/assets/{index-CgyFWy7G.js → index-Cmb-H95F.js} +1 -1
  96. package/dist/assets/{index-CfhMI0GY.css → index-DYK1gWhP.css} +1 -1
  97. package/dist/assets/{index-CAflmCbT.js → index-DiB9Y59V.js} +3 -3
  98. package/dist/assets/{index-BYZ6CM-r.js → index-DsRX2D_O.js} +1 -1
  99. package/dist/assets/{index-DIcymBxc.js → index-cESr4Zze.js} +24 -24
  100. package/dist/assets/{index.es-0kjt2ETS.js → index.es-DP9EmOYi.js} +3 -3
  101. package/dist/assets/{info-CFnwPck_.js → info-BaKj81_D.js} +1 -1
  102. package/dist/assets/{info-circle-DNYjRzmq.js → info-circle-ecoA_B_t.js} +1 -1
  103. package/dist/assets/{lightbulb-DPrYcwVp.js → lightbulb-DGQG-WWk.js} +1 -1
  104. package/dist/assets/{limits-D8_oE0N-.js → limits-D2JvFgaN.js} +1 -1
  105. package/dist/assets/{mail-Do_T12XQ.js → mail-BvEbsX3q.js} +1 -1
  106. package/dist/assets/{mermaid-MCJ5UELQ-Cr83KTfF.js → mermaid-MCJ5UELQ-B8uOykea.js} +3 -3
  107. package/dist/assets/{metamask-sdk-CHSvqgLD.js → metamask-sdk-BYmYI1f3.js} +1 -1
  108. package/dist/assets/{mobile-2wdwD-gm.js → mobile-CwlM4JMX.js} +1 -1
  109. package/dist/assets/{more-CugjlKbm.js → more-CT36TpLm.js} +1 -1
  110. package/dist/assets/{network-placeholder-D0CvRN9Z.js → network-placeholder-DG1Vvm-U.js} +1 -1
  111. package/dist/assets/{nftPlaceholder-CjCtJ3VF.js → nftPlaceholder-D6USOn7p.js} +1 -1
  112. package/dist/assets/{off-CjwzxGqC.js → off-BNSO7pY1.js} +1 -1
  113. package/dist/assets/{play-store-ts_mM-L7.js → play-store-PUfM0qU0.js} +1 -1
  114. package/dist/assets/{plus-CayVcA5r.js → plus-C8fnGfp3.js} +1 -1
  115. package/dist/assets/{qr-code-BJFXX7Ga.js → qr-code-CjdrQ0pR.js} +1 -1
  116. package/dist/assets/{recycle-horizontal-Dxd_xbuW.js → recycle-horizontal-BMxBgeB4.js} +1 -1
  117. package/dist/assets/{refresh-2tSMiCzO.js → refresh-C2D196Fq.js} +1 -1
  118. package/dist/assets/{reown-logo-C3tg9yiK.js → reown-logo-CLN2ORKJ.js} +1 -1
  119. package/dist/assets/{search-By38_AjN.js → search-C9voC8dq.js} +1 -1
  120. package/dist/assets/selection-HN8SZ52c.js +1 -0
  121. package/dist/assets/{send-DhLEHc2T.js → send-BAxcrGbA.js} +1 -1
  122. package/dist/assets/{sendTransaction-CqpP3CZj.js → sendTransaction-Cmz5eiPq.js} +1 -1
  123. package/dist/assets/stored-CETnaQtE.js +1 -0
  124. package/dist/assets/{swapHorizontal-BSy_Qzqy.js → swapHorizontal-CHCTyoP7.js} +1 -1
  125. package/dist/assets/{swapHorizontalBold-B4pOkOa-.js → swapHorizontalBold-LQsONWBk.js} +1 -1
  126. package/dist/assets/{swapHorizontalMedium-BbDDLHs6.js → swapHorizontalMedium-BxrBEjrx.js} +1 -1
  127. package/dist/assets/{swapHorizontalRoundedBold-MzTdSarg.js → swapHorizontalRoundedBold-CEHDoSv1.js} +1 -1
  128. package/dist/assets/{swapVertical-D0uKM7wm.js → swapVertical-DMylrYB1.js} +1 -1
  129. package/dist/assets/{telegram-Q_WwsPzx.js → telegram-BhVfpln1.js} +1 -1
  130. package/dist/assets/{three-dots-Cpl_X23E.js → three-dots-nkXRRS-E.js} +1 -1
  131. package/dist/assets/{twitch-B7x-eAo9.js → twitch-CYroZH_7.js} +1 -1
  132. package/dist/assets/{twitterIcon-BRMMjDzW.js → twitterIcon-DpHUqlyA.js} +1 -1
  133. package/dist/assets/{usage-DktoZRc8.js → usage-8BBeTlF-.js} +1 -1
  134. package/dist/assets/{useInfiniteQuery-NenQ5Num.js → useInfiniteQuery-zD1WIYBy.js} +1 -1
  135. package/dist/assets/{useTx-WkiDSW_A.js → useTx-DsLsc5bB.js} +1 -1
  136. package/dist/assets/{verify-BxTMhyZY.js → verify-DARDbLiQ.js} +1 -1
  137. package/dist/assets/{verify-filled-CaKhO-hp.js → verify-filled-EsNi41IB.js} +1 -1
  138. package/dist/assets/{w3m-modal-DZ2_0Ukm.js → w3m-modal-CIUN4uxE.js} +1 -1
  139. package/dist/assets/{waitForCallsStatus-CtriTPoz.js → waitForCallsStatus-DlpsNYx1.js} +1 -1
  140. package/dist/assets/{wallet-BeZF3I-Z.js → wallet-B2vgeP1E.js} +1 -1
  141. package/dist/assets/{wallet-placeholder-BDvuTJ6r.js → wallet-placeholder-DQsissb3.js} +1 -1
  142. package/dist/assets/{walletconnect-U8tnyg6m.js → walletconnect-DylNgC0Z.js} +1 -1
  143. package/dist/assets/{warning-circle-Dg69jmuZ.js → warning-circle-CVEgsVb4.js} +1 -1
  144. package/dist/assets/{writeContract-DrAWt0yz.js → writeContract-Cqg_OlRQ.js} +1 -1
  145. package/dist/assets/{x-CJ-uWPue.js → x-DSURRh6S.js} +1 -1
  146. package/dist/index.html +2 -2
  147. package/package.json +1 -1
  148. package/dist/assets/Chat-CaImcsH1.js +0 -220
  149. package/dist/assets/KeyHolder-D90Uu-Jv.js +0 -1
  150. package/dist/assets/Keys-B5LppZtn.js +0 -1
  151. package/dist/assets/Logs-Dw4sZ9lo.js +0 -1
  152. package/dist/assets/Members-CnaHKFut.js +0 -1
  153. package/dist/assets/Models-zIuHewdV.js +0 -1
  154. package/dist/assets/PolicyEditor-BpoV34ra.js +0 -1
  155. package/dist/assets/Presets-c1J4UwX0.js +0 -4
  156. package/dist/assets/Providers-B0LuYcAw.js +0 -1
  157. package/dist/assets/RequestLog-D2YGgG1C.js +0 -1
  158. package/dist/assets/Routing-B79eDIZL.js +0 -1
  159. package/dist/assets/Switch-BwBYBnSS.js +0 -1
  160. package/dist/assets/Workspaces-DuxGwCQ2.js +0 -1
  161. package/dist/assets/code-block-Djv3iQ0G.js +0 -3
  162. package/dist/assets/cursor-CTNYpsWo.js +0 -3
  163. package/dist/assets/highlighted-body-KQOG7T2V-D7DB9nBd.js +0 -1
  164. package/dist/assets/models-CLos5_p0.js +0 -1
  165. package/dist/assets/stored-CFfx95Ep.js +0 -1
@@ -1 +1 @@
1
- import{j as e,u as R,J as B,aH as N,aI as w,ah as E,aJ as b,w as k,B as O}from"./index-DIcymBxc.js";import{a as I}from"./ants-B38m9Phv.js";import{u as S,a as T,T as v,U as x,s as C,L as A}from"./useTx-WkiDSW_A.js";import{a as _}from"./ConnectWallet-DQ0PC6SO.js";import{O as W}from"./OperatorGateAlert-D92zhyXC.js";import{W as G,u as L,c as P}from"./en_US-Y4ZOVFV4-CmhP8GU2.js";import"./writeContract-DrAWt0yz.js";import"./sendTransaction-CqpP3CZj.js";import"./clsx-B-dksMZM.js";import"./index-BhwNCc8y.js";function U(a,s){return a?"Claiming…":s===0?"Nothing to claim":s===1?"Claim":`Claim (${s} transactions)`}function J({rewards:a,chain:s,onDone:j}){const{address:c}=L(),u=P(),{workspace:h}=R(),p=B(h.id),{refresh:y}=N(h.id),i=S(s.chainId),{writeContractAsync:g}=T(),d=w(s,"usageRewards"),f=a.epochs.filter(t=>!t.claimed&&I(t.pendingAnts)),o=a.legacy&&I(a.legacy.pendingAnts)?a.legacy:null,l=f.length+(o?1:0);if(!d)return e.jsx(E,{tone:"warning",children:"The gateway did not report the usage rewards contract address."});const m=b(p.data,c,"claim rewards");return m.ok?e.jsxs("div",{className:"gc-stack",children:[e.jsxs("p",{className:"gc-fineprint",children:["The ANTS go to ",k(m.operator),", the connected authorized wallet."]}),e.jsx(v,{chain:s,runner:i,done:"Rewards claimed."}),e.jsx(O,{disabled:i.running||l===0,onClick:async()=>{const t=f.map(n=>{const r=[a.address,BigInt(n.epoch)];return{label:`Claim epoch ${n.epoch}`,check:()=>C(u,{account:c,address:d,abi:x,functionName:"claimBuyerReward",args:r,chainId:s.chainId}),send:()=>g({address:d,abi:x,functionName:"claimBuyerReward",args:r,chainId:s.chainId})}});if(o){const n=[a.address,o.epochs.map(BigInt)],r=o.contract;t.push({label:"Claim legacy emissions",check:()=>C(u,{account:c,address:r,abi:A,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId}),send:()=>g({address:r,abi:A,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId})})}await i.run(t,{onStale:()=>void y().catch(()=>{})})&&j()},children:U(i.running,l)}),l>1&&e.jsx("p",{className:"gc-fineprint",children:"Each current-program epoch is its own transaction; legacy emissions are one more."})]}):e.jsx(W,{gate:m,state:p.data,connected:c})}function X(a){return e.jsx(G,{chain:a.chain,children:e.jsxs("div",{className:"gc-stack",children:[e.jsx(_,{}),e.jsx(J,{...a})]})})}export{X as default};
1
+ import{j as e,u as R,J as B,aH as N,aI as w,ah as E,aJ as b,w as k,B as O}from"./index-cESr4Zze.js";import{a as I}from"./ants-B38m9Phv.js";import{u as S,a as T,T as v,U as x,s as C,L as A}from"./useTx-DsLsc5bB.js";import{a as _}from"./ConnectWallet-CLv0c-JB.js";import{O as W}from"./OperatorGateAlert-grMRoFdV.js";import{W as G,u as L,c as P}from"./en_US-Y4ZOVFV4-sKQksBWU.js";import"./writeContract-Cqg_OlRQ.js";import"./sendTransaction-Cmz5eiPq.js";import"./clsx-B-dksMZM.js";import"./index-BhwNCc8y.js";function U(a,s){return a?"Claiming…":s===0?"Nothing to claim":s===1?"Claim":`Claim (${s} transactions)`}function J({rewards:a,chain:s,onDone:j}){const{address:c}=L(),u=P(),{workspace:h}=R(),p=B(h.id),{refresh:y}=N(h.id),i=S(s.chainId),{writeContractAsync:g}=T(),d=w(s,"usageRewards"),f=a.epochs.filter(t=>!t.claimed&&I(t.pendingAnts)),o=a.legacy&&I(a.legacy.pendingAnts)?a.legacy:null,l=f.length+(o?1:0);if(!d)return e.jsx(E,{tone:"warning",children:"The gateway did not report the usage rewards contract address."});const m=b(p.data,c,"claim rewards");return m.ok?e.jsxs("div",{className:"gc-stack",children:[e.jsxs("p",{className:"gc-fineprint",children:["The ANTS go to ",k(m.operator),", the connected authorized wallet."]}),e.jsx(v,{chain:s,runner:i,done:"Rewards claimed."}),e.jsx(O,{disabled:i.running||l===0,onClick:async()=>{const t=f.map(n=>{const r=[a.address,BigInt(n.epoch)];return{label:`Claim epoch ${n.epoch}`,check:()=>C(u,{account:c,address:d,abi:x,functionName:"claimBuyerReward",args:r,chainId:s.chainId}),send:()=>g({address:d,abi:x,functionName:"claimBuyerReward",args:r,chainId:s.chainId})}});if(o){const n=[a.address,o.epochs.map(BigInt)],r=o.contract;t.push({label:"Claim legacy emissions",check:()=>C(u,{account:c,address:r,abi:A,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId}),send:()=>g({address:r,abi:A,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId})})}await i.run(t,{onStale:()=>void y().catch(()=>{})})&&j()},children:U(i.running,l)}),l>1&&e.jsx("p",{className:"gc-fineprint",children:"Each current-program epoch is its own transaction; legacy emissions are one more."})]}):e.jsx(W,{gate:m,state:p.data,connected:c})}function X(a){return e.jsx(G,{chain:a.chain,children:e.jsxs("div",{className:"gc-stack",children:[e.jsx(_,{}),e.jsx(J,{...a})]})})}export{X as default};
@@ -0,0 +1 @@
1
+ import{bF as S,bG as L,al as _,w as fe,r as w,j as e,B as C,I as W,C as ae,T as xe,L as ie,E as le,bk as ye,v as z,u as B,a as ce,bz as de,bB as ue,b as X,bs as Z,c as he,d as we,bm as me,l as H,n as O,o as A,ah as V,e as je,P as ve,F as ke,a5 as be,bH as Pe,b7 as Me,a4 as Se,a6 as ee,O as D,f as E,q as U,bx as se,i as $e,G as Ne,bw as q,bI as Ce,af as _e,b9 as Ie}from"./index-cESr4Zze.js";import{a as Re,d as Le}from"./PolicyField-CHhm50jF.js";import{P as Fe}from"./PolicyEditor-ptFDJhFh.js";import{M as qe}from"./SidePanel-D0rNElh3.js";import{B as te}from"./BrandIcon-dTKznfCA.js";import{S as Oe,l as Ee,s as Ue}from"./stored-CETnaQtE.js";import{S as ne}from"./SelectField-Cl4acfcI.js";import"./PeerPicker-CfsXTUyK.js";import"./Segmented-D3e0aBDU.js";import"./roving-DkptacxO.js";import"./Switch-B2AEvyu7.js";import"./Disclosure-DMLE7rCw.js";import"./selection-HN8SZ52c.js";function G(s,n,a=3){const t=s.map(o=>{var i;return((i=n==null?void 0:n.find(d=>S(d.peerId)===S(o)))==null?void 0:i.displayName)??fe(o,8,4)});return t.length<=a?t.join(", "):`${t.slice(0,a).join(", ")} and ${t.length-a} more`}function re(s,n){return(s??[]).map(a=>{var t;return`the “${((t=n.find(o=>o.id===a))==null?void 0:t.name)??a}” list`}).join(", ")}function J(s,n,a=[]){var d,h,u,p;if(!s)return[];const t=s,o=[];if(t.allowedModels&&o.push(t.allowedModels.length===0?"No model is allowed.":`Only these models: ${t.allowedModels.join(", ")}.`),t.allowedPeerIds||t.allowedPeerLists){const l=[(d=t.allowedPeerIds)!=null&&d.length?G(t.allowedPeerIds,n):"",re(t.allowedPeerLists,a)].filter(Boolean);o.push(l.length?`Only these sellers: ${l.join(", ")}.`:"No seller is allowed.")}if((h=t.blockedPeerIds)!=null&&h.length||(u=t.blockedPeerLists)!=null&&u.length){const l=[(p=t.blockedPeerIds)!=null&&p.length?G(t.blockedPeerIds,n):"",re(t.blockedPeerLists,a)].filter(Boolean);o.push(`Never uses ${l.join(", ")}.`)}t.requireTee&&o.push("Only sellers running in a TEE."),t.requireVerified&&o.push("Only sellers with a verified domain or GitHub account."),t.minTrustScore!==void 0&&o.push(`Only sellers with trust ${t.minTrustScore} or more.`),t.minReputation!==void 0&&o.push(`Only sellers with reputation ${t.minReputation} or more.`);const i=[t.maxInputUsdPerMillion!==void 0?`${_(t.maxInputUsdPerMillion)}/M input`:null,t.maxOutputUsdPerMillion!==void 0?`${_(t.maxOutputUsdPerMillion)}/M output`:null,t.maxCachedInputUsdPerMillion!==void 0?`${_(t.maxCachedInputUsdPerMillion)}/M cached input`:null,t.maxImageUsdPerImage!==void 0?`$${t.maxImageUsdPerImage} per image`:null].filter(l=>l!==null);i.length&&o.push(`Pays at most ${i.join(", ")}.`);for(const[l,x]of Object.entries(t.modelRoutes??{}))o.push(`For ${l}: tries ${G(x.peerIds,n,4).replace(/, ([^,]*)$/,", then $1")} first${x.strict?", and no other seller":""}.`);return t.sort==="price"?o.push("Ranks the cheapest seller first."):t.sort==="latency"?o.push("Ranks the fastest seller first."):t.sort==="trust"&&o.push("Ranks the most trusted seller first."),t.preferFreePeers&&o.push("Free sellers first."),o}function Te(s,n,a,t){var d,h;const o=S(n.peerId);if((d=s.blockedPeerIds)!=null&&d.some(u=>S(u)===o))return"blocks it";if(s.allowedPeerIds&&!s.allowedPeerIds.some(u=>S(u)===o))return"does not allow it";if(s.requireTee&&a&&!a.tee)return"requires a TEE";if(s.requireVerified&&a&&!a.verified)return"requires a verified seller";if(s.minTrustScore!==void 0&&(n.trustScore??0)<s.minTrustScore)return`requires trust ${s.minTrustScore}+ (it has ${Math.round(n.trustScore??0)})`;if(s.minReputation!==void 0&&a&&(a.reputationScore??0)<s.minReputation)return`requires reputation ${s.minReputation}+`;if(s.maxInputUsdPerMillion!==void 0&&n.inputUsdPerMillion!==null&&n.inputUsdPerMillion>s.maxInputUsdPerMillion)return`caps input at ${_(s.maxInputUsdPerMillion)}/M (it asks ${_(n.inputUsdPerMillion)})`;if(s.maxOutputUsdPerMillion!==void 0&&n.outputUsdPerMillion!==null&&n.outputUsdPerMillion>s.maxOutputUsdPerMillion)return`caps output at ${_(s.maxOutputUsdPerMillion)}/M (it asks ${_(n.outputUsdPerMillion)})`;const i=(h=s.modelRoutes)==null?void 0:h[t];return i!=null&&i.strict&&!i.peerIds.some(u=>S(u)===o)?"only allows its route for this model":null}function pe(s,n,a,t=[]){if(n.eligible)return[];const o=a==null?void 0:a.find(i=>S(i.peerId)===S(n.peerId));return s.sources.flatMap(i=>{if(!i.policy)return[];const d=Te(L(i.policy,t),n,o,s.model);return d?[{level:i.level,levelId:i.id,rule:d}]:[]})}function ze(s,n,a=[]){const t=new Map;for(const o of(s==null?void 0:s.candidates)??[])for(const i of new Set(pe(s,o,n,a).map(d=>d.level)))t.set(i,(t.get(i)??0)+1);return t}function Ae(s,n){if(!n)return!0;const a=n.toLowerCase();return[s.id,s.name,...s.aliases,...s.tags].some(t=>t.toLowerCase().includes(a))}function Be({models:s,loading:n,value:a,onChange:t,favorites:o=[],label:i="Model"}){const[d,h]=w.useState(!1),[u,p]=w.useState(""),l=(s==null?void 0:s.find(r=>r.id===a))??null,x=w.useMemo(()=>new Set(o.map(r=>r.toLowerCase())),[o]),c=w.useMemo(()=>[...s??[]].filter(r=>Ae(r,u.trim())).sort((r,y)=>Number(x.has(y.id.toLowerCase()))-Number(x.has(r.id.toLowerCase()))||y.offers.length-r.offers.length||r.name.localeCompare(y.name)),[s,u,x]),f=r=>{t(r),h(!1),p("")};return e.jsxs(e.Fragment,{children:[e.jsxs(C,{variant:"outline",size:"sm",className:"gc-model-chooser","aria-label":`${i}: ${(l==null?void 0:l.name)??a??"none"}`,onClick:()=>h(!0),children:[e.jsx("span",{className:"gc-model-chooser__mark","aria-hidden":"true",children:l?e.jsx(te,{name:l.id,hints:[l.name],size:16}):e.jsx(W.models,{size:15})}),e.jsx("span",{className:"gc-ellipsis",children:(l==null?void 0:l.name)??a??"Choose a model"}),e.jsx("span",{className:"gc-model-chooser__caret","aria-hidden":"true",children:e.jsx(W.down,{size:14})})]}),e.jsx(ae,{isOpen:d,onClose:()=>h(!1),title:"Choose a model",size:"md",children:e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx(xe,{size:"sm",type:"search",autoFocus:!0,"aria-label":"Search models",placeholder:"Search by name, id or tag",value:u,onChange:r=>p(r.target.value),onKeyDown:r=>{r.key==="Enter"&&c[0]&&f(c[0].id)}}),n?e.jsx(ie,{rows:5}):c.length===0?e.jsx(le,{title:"No model matches"}):e.jsx("ul",{className:"gc-choice-list","aria-label":"Models",children:c.map(r=>e.jsx("li",{children:e.jsxs("button",{type:"button",className:r.id===a?"gc-choice gc-choice--on":"gc-choice",onClick:()=>f(r.id),children:[e.jsx(te,{name:r.id,hints:[r.name],size:18}),e.jsxs("span",{className:"gc-choice__main",children:[e.jsxs("span",{className:"gc-choice__title",children:[r.name,x.has(r.id.toLowerCase())&&e.jsx(W.starFilled,{size:12})]}),e.jsxs("span",{className:"gc-choice__meta",children:[r.name!==r.id&&e.jsx("code",{children:r.id}),e.jsx("span",{children:qe[r.type]}),e.jsxs("span",{children:[r.offers.length," provider",r.offers.length===1?"":"s"]}),r.inputUsdPerMillion&&e.jsxs("span",{children:[ye(r.inputUsdPerMillion),"/M in"]})]})]}),r.free&&e.jsx(z,{tone:"success",children:"Free"})]})},r.id))})]})})]})}const ge={buyer:"Buyer config",gateway:"Gateway default","workspace-org":"Organization policy",workspace:"Workspace policy",member:"Member policy",key:"Key policy (admin)","key-owner":"Key policy (owner)",preset:"Preset"};function Ke(s,n,a,t){return s==="key"?(n??[]).filter(o=>o.status==="active").map(o=>({value:o.id,label:o.label})):s==="member"?(a??[]).map(({member:o})=>({value:o.id,label:o.label})):s==="preset"?(t??[]).map(o=>({value:o.slug,label:o.name})):[]}function We(s,n){return!s.model||s.target!=="workspace"&&!s.targetId?null:{model:s.model,workspace:n,...s.target!=="workspace"?{[s.target]:s.targetId}:{}}}function De({exclusions:s}){return s.length===0?null:e.jsx("span",{className:"gc-fineprint",children:s.map((n,a)=>e.jsxs("span",{children:[a>0?"; ":"",e.jsx("strong",{children:ge[n.level]})," ",n.rule]},`${n.level}-${a}`))})}function Ge({state:s,onChange:n,preview:a}){const{workspace:t,viewer:o}=B(),i=ce(),d=de(),h=ue(),u=X(),p=Z(),l=he(i,s.target==="key"),x=we(t.id,s.target==="member"),c=me(t.id,s.target==="preset"),f=Ke(s.target,l.data,x.data,c.data),r=a.data,y=(r==null?void 0:r.candidates.filter(m=>m.eligible).length)??0,j=r&&!r.modelAllowed?r.sources.filter(m=>{var $;return(($=m.policy)==null?void 0:$.allowedModels)&&!m.policy.allowedModels.some(v=>v.toLowerCase()===r.model.toLowerCase())}):[];return e.jsxs(H,{title:"Try a request",description:"Pick a model to see which sellers a request goes to, in what order, and what keeps the others out.",children:[e.jsxs("div",{className:"gc-toolbar",children:[e.jsx(Be,{models:d.data,loading:d.isLoading,value:s.model,favorites:h.data,onChange:m=>n({...s,model:m})}),e.jsx(ne,{size:"sm","aria-label":"Request from",value:s.target,onChange:m=>n({...s,target:m,targetId:""}),options:[{value:"workspace",label:`From workspace ${t.name}`},{value:"key",label:"From a key"},...O(o)?[{value:"member",label:"From a member"}]:[],{value:"preset",label:"With a preset"}]}),s.target!=="workspace"&&e.jsx(ne,{size:"sm","aria-label":`Choose a ${s.target}`,value:s.targetId,onChange:m=>n({...s,targetId:m}),options:[{value:"",label:`Choose a ${s.target}`},...f]})]}),a.error?e.jsx(A,{error:a.error}):null,!s.model&&e.jsx(le,{title:"Pick a model",body:"The preview shows the sellers a request for it would use."}),r&&!r.modelAllowed&&e.jsx(V,{tone:"danger",title:`${r.model} is not allowed`,children:j.length?e.jsxs(e.Fragment,{children:[j.map(m=>ge[m.level]).join(" and ")," only allow",j.length===1?"s":""," ",j[0].policy.allowedModels.join(", ")||"no model",". Requests for ",r.model," get a 403."]}):e.jsxs(e.Fragment,{children:["Requests for ",r.model," get a 403."]})}),r&&r.modelAllowed&&e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsxs("p",{className:"gc-try__summary",children:[e.jsxs(z,{tone:y>0?"success":"warning",children:[y," of ",r.candidates.length]})," ",y>0?`sellers can serve ${r.model}.`:`No seller can serve ${r.model} with these rules.`]}),e.jsx(Oe,{title:"Sellers, in the order they are tried",preview:r,loading:a.isFetching&&!r,skippedOpen:!0,explainSkipped:m=>e.jsx(De,{exclusions:pe(r,m,u.data,p.data??[])})})]})]})}const R={gateway:{title:"Gateway default",description:()=>"Set by organization admins. Applies to every request through this gateway."},org:{title:"Organization policy",description:s=>`Set by organization admins for the ${s} workspace. Workspace admins cannot loosen it.`},workspace:{title:"Workspace policy",description:s=>`Set by ${s}'s admins for their own keys.`}},Q=(s,n)=>JSON.stringify(s)===JSON.stringify(n);function T({index:s,title:n,who:a,sentences:t,empty:o="No rules of its own.",impact:i,badge:d,action:h,result:u}){return e.jsxs("li",{className:u?"gc-funnel__step gc-funnel__step--result":"gc-funnel__step",children:[e.jsx("span",{className:"gc-funnel__index","aria-hidden":"true",children:s}),e.jsxs("div",{className:"gc-funnel__body",children:[e.jsxs("div",{className:"gc-funnel__head",children:[e.jsx("span",{className:"gc-funnel__title",children:n}),d,h&&e.jsx("span",{className:"gc-funnel__action",children:h})]}),e.jsx("div",{className:"gc-fineprint",children:a}),t.length>0?e.jsx("ul",{className:"gc-funnel__rules",children:t.map(p=>e.jsx("li",{children:p},p))}):e.jsx("p",{className:"gc-funnel__none",children:o}),i&&e.jsx("p",{className:i.excluded>0?"gc-funnel__impact gc-funnel__impact--on":"gc-funnel__impact",children:i.excluded>0?`Keeps ${i.excluded} of ${i.total} seller${i.total===1?"":"s"} of ${i.model} out.`:`Keeps no seller of ${i.model} out.`})]})]})}function Y({index:s,layer:n,source:a,parent:t,canEdit:o,impact:i,onSave:d}){const{workspace:h}=B(),u=Ne(),p=X(),l=Z(),x=Re(),[c,f]=w.useState(()=>q(a)),[r,y]=w.useState(()=>q(a)),[j,m]=w.useState(null),[$,v]=w.useState(!1),P=w.useMemo(()=>q(a),[a]),k=!Q(c,r);w.useEffect(()=>{Q(P,r)||(!k||Q(P,c)?(f(P),y(P),m(null)):m(P))},[P]);const M=Ce({mutationFn:async()=>{const g=_e(c,l.data??null);return await x.save([g],K=>d(g,K))===Ie?null:g},onSuccess:g=>{if(!g)return;const b=q(g);f(b),y(b),m(null),v(!1),u(`${R[n].title} saved`)}}),N=Le(c,l.data??null),F=k?N.policy:a,I=!a||Object.keys(a).length===0;return e.jsxs(e.Fragment,{children:[e.jsx(T,{index:s,title:R[n].title,who:R[n].description(h.name),sentences:k&&N.error?[]:J(F,p.data,l.data??[]),empty:k&&N.error?"Has an invalid setting; open it to fix.":"No rules of its own: passes on everything above.",impact:i,badge:k?e.jsx(z,{tone:"warning",children:"Unsaved changes"}):o?void 0:e.jsx(z,{children:"Read only"}),action:e.jsx(C,{size:"sm",variant:o&&I?"outline":"ghost",onClick:()=>v(!0),children:o?I?"Add rules":"Edit":"View"})}),j&&o&&!$&&e.jsx("li",{className:"gc-funnel__note",children:e.jsx(V,{tone:"warning",title:"Changed elsewhere",children:"Someone saved this policy while you were editing it. Open it to reload theirs or keep yours."})}),e.jsx(ae,{isOpen:$,onClose:()=>v(!1),size:"xl",title:R[n].title,subtitle:R[n].description(h.name),footer:o?e.jsxs(e.Fragment,{children:[N.error&&e.jsx("span",{className:"gc-warn gc-footer-note",children:N.error}),e.jsx(C,{variant:"ghost",disabled:!k,onClick:()=>{f(r),m(null)},children:"Discard changes"}),e.jsx(C,{disabled:M.isPending||!k,onClick:()=>M.mutate(),children:M.isPending?"Saving…":"Save policy"})]}):e.jsx(C,{variant:"outline",onClick:()=>v(!1),children:"Close"}),children:e.jsxs("div",{className:"gc-stack",children:[j&&o&&e.jsx(V,{tone:"warning",title:"Changed elsewhere",action:e.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[e.jsx(C,{size:"sm",variant:"outline",onClick:()=>{f(j),y(j),m(null)},children:"Reload"}),e.jsx(C,{size:"sm",variant:"ghost",onClick:()=>{y(j),m(null)},children:"Keep editing"})]}),children:"Someone saved this policy while you were editing it. Reload to see their version (your edits are dropped), or keep editing and save to replace it."}),M.error?e.jsx(A,{error:M.error,title:"Could not save"}):null,e.jsx(Fe,{value:c,onChange:f,peers:p.data,lists:l.data??[],parent:t,disabled:!o})]})}),x.dialog]})}function Qe({preview:s}){var F,I;const{workspace:n,viewer:a}=B(),t=ke(),o=ce(),i=X(),d=Z(),h=be(),u=Pe(),p=Me(n.id),l=he(o),x=me(n.id),c=d.data??[],f=u.data?L(u.data,c):null,r=((F=p.data)==null?void 0:F.orgRoutingPolicy)??null,y=((I=p.data)==null?void 0:I.routingPolicy)??null,j=w.useMemo(()=>Se(h.data),[h.data]),m=w.useMemo(()=>ee(j,f,r&&L(r,c),y&&L(y,c)),[j,f,r,y,c]),$=w.useMemo(()=>ze(s,i.data,c),[s,i.data,c]),v=(...g)=>s&&s.modelAllowed?{model:s.model,total:s.candidates.length,excluded:g.reduce((b,K)=>b+($.get(K)??0),0)}:null;if(u.isLoading||p.isLoading)return e.jsx(H,{title:"Rules that apply",children:e.jsx(ie,{rows:6})});if(u.error)return e.jsx(A,{error:u.error,onRetry:()=>void u.refetch()});if(p.error)return e.jsx(A,{error:p.error,onRetry:()=>void p.refetch()});const P=async()=>{await t.invalidateQueries({queryKey:U.group("workspaces")}),await t.invalidateQueries({queryKey:U.group("routing")})},k=(l.data??[]).filter(g=>g.status==="active"&&g.routingPolicy).length,M=(x.data??[]).filter(g=>g.routingPolicy).length,N=[k?`${k} key${k===1?" has its":"s have their"} own rules.`:null,M?`${M} preset${M===1?" has":"s have"} rules.`:null].filter(g=>g!==null);return e.jsx(H,{title:"Rules that apply",description:"A request passes every level, top to bottom. Each level can only narrow the ones above it, never loosen them.",children:e.jsxs("ol",{className:"gc-funnel",children:[e.jsx(T,{index:1,title:"Buyer config",who:e.jsxs(e.Fragment,{children:["The buyer's own limits",O(a)?e.jsxs(e.Fragment,{children:[", set under ",e.jsx(D,{to:"settings",children:"Settings"})]}):"",". Everything below can only narrow them."]}),sentences:J(j,i.data,c),empty:"No limits.",impact:v("buyer")}),e.jsx(Y,{index:2,layer:"gateway",source:u.data??null,parent:j,canEdit:O(a),impact:v("gateway"),onSave:async(g,b)=>{await E.network.setGatewayPolicy(g,b),await t.invalidateQueries({queryKey:U.group("routing")})}}),e.jsx(Y,{index:3,layer:"org",source:r,parent:f,canEdit:O(a),impact:v("workspace-org"),onSave:async(g,b)=>{await E.workspaces.update(n.id,{orgRoutingPolicy:se(g)},b),await P()}}),e.jsx(Y,{index:4,layer:"workspace",source:y,parent:ee(f,r&&L(r,c)),canEdit:$e(a),impact:v("workspace"),onSave:async(g,b)=>{await E.workspaces.update(n.id,{routingPolicy:se(g)},b),await P()}}),e.jsx(T,{index:5,title:"Members, keys and presets",who:e.jsxs(e.Fragment,{children:["Can narrow the rules further for one member, one key or one preset: see ",e.jsx(D,{to:"keys",children:"Keys"})," and ",e.jsx(D,{to:"presets",children:"Presets"}),"."]}),sentences:N,empty:"None in this workspace narrows it.",impact:v("member","key","key-owner","preset")}),e.jsx(T,{index:"=",result:!0,title:`Effective for ${n.name}`,who:"What every key in this workspace gets before its own rules.",sentences:J(m,i.data,c),empty:"No rules: every seller the network offers."})]})})}const oe="antseed-console-routing:try";function is(){var h;const{workspace:s}=B(),n=de(),a=ue(),[t,o]=w.useState(()=>({target:"workspace",targetId:"",model:Ee(oe,null)}));w.useEffect(()=>{Ue(oe,t.model)},[t.model]),w.useEffect(()=>{var l,x;if(t.model||!((l=n.data)!=null&&l.length))return;const u=(x=a.data)==null?void 0:x.find(c=>n.data.some(f=>f.id===c)),p=[...n.data].filter(c=>c.type==="text").sort((c,f)=>f.offers.length-c.offers.length)[0]??n.data[0];o(c=>({...c,model:u??p.id}))},[n.data,a.data,t.model]);const i=We(t,s.id),d=je({queryKey:U.routePreview(i??{}),queryFn:()=>E.network.routePreview(i),enabled:i!==null,staleTime:15e3});return e.jsxs("div",{className:"gc-page",children:[e.jsx(ve,{title:"Routing",description:"Which sellers serve your requests, and why. Try a model to see its route, then change the rules that shape it."}),e.jsx(Ge,{state:t,onChange:o,preview:{data:i?d.data:void 0,isFetching:d.isFetching,error:d.error}}),e.jsx(Qe,{preview:i&&((h=d.data)==null?void 0:h.model)===t.model?d.data:void 0})]})}export{is as default};
@@ -1 +1 @@
1
- import{j as m}from"./index-DIcymBxc.js";import{r as f,f as g}from"./roving-DkptacxO.js";function _({value:l,onChange:n,options:a,label:u,className:c}){const o=Math.max(0,a.findIndex(e=>e.value===l));return m.jsx("div",{className:["as-segmented",c].filter(Boolean).join(" "),role:"radiogroup","aria-label":u,children:a.map((e,d)=>{const i=e.value===l;return m.jsx("button",{type:"button",role:"radio","aria-checked":i,tabIndex:d===o?0:-1,disabled:e.disabled,className:i?"as-segmented__item as-segmented__item--on":"as-segmented__item",onClick:()=>n(e.value),onKeyDown:t=>{const r=f(t,d,a.length);if(r===null)return;t.preventDefault();const s=a[r];!s||s.disabled||(n(s.value),g(t,r,".as-segmented__item"))},children:e.label},e.value)})})}export{_ as S};
1
+ import{j as m}from"./index-cESr4Zze.js";import{r as f,f as g}from"./roving-DkptacxO.js";function _({value:l,onChange:n,options:a,label:u,className:c}){const o=Math.max(0,a.findIndex(e=>e.value===l));return m.jsx("div",{className:["as-segmented",c].filter(Boolean).join(" "),role:"radiogroup","aria-label":u,children:a.map((e,d)=>{const i=e.value===l;return m.jsx("button",{type:"button",role:"radio","aria-checked":i,tabIndex:d===o?0:-1,disabled:e.disabled,className:i?"as-segmented__item as-segmented__item--on":"as-segmented__item",onClick:()=>n(e.value),onKeyDown:t=>{const r=f(t,d,a.length);if(r===null)return;t.preventDefault();const s=a[r];!s||s.disabled||(n(s.value),g(t,r,".as-segmented__item"))},children:e.label},e.value)})})}export{_ as S};
@@ -1 +1 @@
1
- import{r as j,j as e,a0 as o,a1 as h,a2 as f}from"./index-DIcymBxc.js";function b({label:a,hint:d,error:t,options:c,onChange:r,className:i,id:n,size:u,...x}){const m=j.useId(),l=n??m;return e.jsxs("label",{className:f(i,u),htmlFor:l,children:[a&&e.jsx("span",{className:"as-field__label",children:a}),e.jsx("select",{id:l,className:o("as-field__select"),onChange:s=>r(s.target.value),...x,children:c.map(s=>e.jsx("option",{value:s.value,disabled:s.disabled,children:s.label},s.value))}),e.jsx(h,{error:t,hint:d})]})}export{b as S};
1
+ import{r as j,j as e,a0 as o,a1 as h,a2 as f}from"./index-cESr4Zze.js";function b({label:a,hint:d,error:t,options:c,onChange:r,className:i,id:n,size:u,...x}){const m=j.useId(),l=n??m;return e.jsxs("label",{className:f(i,u),htmlFor:l,children:[a&&e.jsx("span",{className:"as-field__label",children:a}),e.jsx("select",{id:l,className:o("as-field__select"),onChange:s=>r(s.target.value),...x,children:c.map(s=>e.jsx("option",{value:s.value,disabled:s.disabled,children:s.label},s.value))}),e.jsx(h,{error:t,hint:d})]})}export{b as S};
@@ -1,7 +1,7 @@
1
- import{F as re,G as ne,b as ge,bj as xe,r as d,bo as ae,q as U,f as E,ag as ve,a6 as be,al as K,g as ye,j as t,ah as D,aa as fe,T as O,B as f,o as $,D as ie,e as Se,P as je,by as we,Q as z,aC as ke,l as A,X as le,M as Pe,v as M,u as Re,V as Ce,t as Q,b3 as Ne,au as W,bc as Me,at as Ie,E as Ue,I as G,C as J,b2 as qe,$ as Te}from"./index-DIcymBxc.js";import{P as Y}from"./PeerPicker-BJfjL7Dy.js";import{S as X}from"./PolicyEditor-BpoV34ra.js";import{S as Oe}from"./Segmented-BelxPFkk.js";import{S as I,D as F}from"./Switch-BwBYBnSS.js";import{T as oe}from"./TextAreaField-B6jcl4RR.js";import{T as Ee,a as Ae}from"./Tabs-yVL4Cd6z.js";import{D as Fe}from"./DataTable-BTwj5g1m.js";import{S as B}from"./SelectField-BWyF8Ku8.js";import"./roving-DkptacxO.js";function De(e){return Object.entries(e).map(([s,r])=>`${s}: ${r}`).join(`
1
+ import{F as re,G as ne,b as ge,bs as xe,r as d,bI as ae,q as U,f as E,ag as ve,a6 as be,al as K,g as fe,j as t,ah as D,aa as ye,T as O,B as y,o as $,D as ie,e as Se,P as je,bJ as we,Q as z,aC as ke,l as A,X as le,M as Pe,v as M,u as Re,V as Ce,t as Q,b3 as Ne,au as W,bc as Me,at as Ie,E as Ue,I as G,C as J,b2 as qe,$ as Te}from"./index-cESr4Zze.js";import{P as Y}from"./PeerPicker-CfsXTUyK.js";import{S as X}from"./PolicyEditor-ptFDJhFh.js";import{S as Oe}from"./Segmented-D3e0aBDU.js";import{S as I}from"./Switch-B2AEvyu7.js";import{D as F}from"./Disclosure-DMLE7rCw.js";import{T as oe}from"./TextAreaField-Dbr655cs.js";import{T as Ee,a as Ae}from"./Tabs-Cv10NtDy.js";import{D as Fe}from"./DataTable-BkJdorEh.js";import{S as B}from"./SelectField-Cl4acfcI.js";import"./roving-DkptacxO.js";function De(e){return Object.entries(e).map(([s,r])=>`${s}: ${r}`).join(`
2
2
  `)}function $e(e){const s={};for(const[r,n]of e.split(`
3
3
  `).entries()){if(!n.trim())continue;const c=n.indexOf(":");if(c<=0)throw new Error(`Line ${r+1}: use "Name: value".`);const u=n.slice(0,c).trim();if(!/^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/.test(u))throw new Error(`Line ${r+1}: "${u}" is not a valid header name.`);s[u]=n.slice(c+1).trim()}return s}const ce="••••";function _e(e){return e.split(`
4
4
  `).map(s=>{const r=s.indexOf(":");return r>0&&s.slice(r+1).trim()===ce?s.slice(0,r).trim():null}).filter(s=>!!s)}function Z(e){return e.split(`
5
5
  `).map(s=>{const r=s.indexOf(":");return r>0&&s.slice(r+1).trim()===ce?`${s.slice(0,r)}: `:s}).join(`
6
6
  `)}function Le(e,s){if(!e||!s)return!1;try{return new URL(e).origin!==new URL(s).origin}catch{return e!==s}}function Be(e){const s={},r=(n,c,u)=>{const a=e[n].trim();if(a===""){c&&(s[n]="Required.");return}const h=Number(a);!Number.isFinite(h)||h<0?s[n]="Use a number of 0 or more.":u!==void 0&&h>u&&(s[n]=`At most ${u}.`)};return r("input",!0),r("output",!0),r("cached",!1),r("reputation",!0,100),s}function w(e,s={}){const r=e.trim();if(r==="")return s.required?"Required.":void 0;const n=Number(r),c=s.min??0;if(!Number.isFinite(n))return"Use a number.";if(s.integer&&!Number.isInteger(n))return"Use a whole number.";if(n<c)return`Use ${c} or more.`;if(s.max!==void 0&&n>s.max)return`At most ${s.max}.`}function V(e){return e.split(/[\n,]/).map(s=>s.trim()).filter(Boolean)}function ee(e){const s=e.find(r=>!/^(?:0x)?[0-9a-f]{40}$/i.test(r));return s?`"${s}" is not a 40-character hex seller id.`:void 0}function te(e){const s=e.find(r=>!/^https?:\/\/\S+$/.test(r));return s?`"${s}" is not an http(s) URL.`:void 0}function ue(e,s){return e.some(r=>r===s||s.startsWith(`${r}.`)||r.startsWith(`${s}.`))}function Ve(){return t.jsxs("span",{className:"gc-override",children:[t.jsx("span",{className:"gc-attention","aria-hidden":"true"}),"Overridden by the buyer's environment or start flags"]})}function se(e){const s=e.routingPreferences,r=n=>n===null?"":String(n);return{allowMode:s.allowedPeerIds.length>0?"only":"any",allowedPeerIds:[...s.allowedPeerIds],blockedPeerIds:[...s.blockedPeerIds],minTrustScore:String(s.minTrustScore),minReputation:String(e.minPeerReputation),preferFree:s.preferFreePeers,softInputCap:String(s.maxInputUsdPerMillion),maxInput:String(e.maxPricing.inputUsdPerMillion),maxOutput:String(e.maxPricing.outputUsdPerMillion),maxCached:r(e.maxPricing.cachedInputUsdPerMillion),verify:e.verifier.enabled,requireVerified:e.verifier.require,verifiers:e.verifier.prefer.join(", "),sampleRate:r(e.evidence.sampleRate),maxSampleBytes:r(e.evidence.maxSampleBytes),autoSweep:e.payments.autoSweep,maxPerRequest:String(e.payments.maxPerRequestUsdc),maxReserve:String(e.payments.maxReserveUsdc),rpcUrl:e.payments.rpcUrl??"",fallbackRpcUrls:e.payments.fallbackRpcUrls.join(`
7
- `),peerRefreshMs:String(e.network.peerRefreshIntervalMs),metadataTimeoutMs:String(e.network.metadataFetchTimeoutMs),requestTimeoutMs:String(e.network.requestTimeoutMs),maxStreamMs:String(e.network.maxStreamDurationMs),perServiceMetadata:!e.network.disableMetadataV2Services}}function ze(e){const s=Be({input:e.maxInput,output:e.maxOutput,cached:e.maxCached,reputation:e.minReputation}),r={maxInput:s.input,maxOutput:s.output,maxCached:s.cached,softInputCap:w(e.softInputCap,{required:!0}),allowedPeerIds:e.allowMode==="only"?ee(e.allowedPeerIds):void 0,blockedPeerIds:ee(e.blockedPeerIds),sampleRate:w(e.sampleRate,{max:1}),maxSampleBytes:w(e.maxSampleBytes,{min:1,integer:!0}),maxPerRequest:w(e.maxPerRequest,{required:!0,min:1e-6}),maxReserve:w(e.maxReserve,{required:!0,min:1e-6}),rpcUrl:e.rpcUrl.trim()?te([e.rpcUrl.trim()]):void 0,fallbackRpcUrls:te(V(e.fallbackRpcUrls)),peerRefreshMs:w(e.peerRefreshMs,{required:!0,min:1e3,integer:!0}),metadataTimeoutMs:w(e.metadataTimeoutMs,{required:!0,min:100,integer:!0}),requestTimeoutMs:w(e.requestTimeoutMs,{required:!0,min:1,integer:!0}),maxStreamMs:w(e.maxStreamMs,{required:!0,min:1,integer:!0})};return Object.fromEntries(Object.entries(r).filter(([,n])=>n))}function He(e){const s=r=>r.trim()?Number(r):null;return{routingPreferences:{minTrustScore:Number(e.minTrustScore),maxInputUsdPerMillion:Number(e.softInputCap),preferFreePeers:e.preferFree,allowedPeerIds:e.allowMode==="only"?e.allowedPeerIds:[],blockedPeerIds:e.blockedPeerIds},maxPricing:{inputUsdPerMillion:Number(e.maxInput),outputUsdPerMillion:Number(e.maxOutput),cachedInputUsdPerMillion:s(e.maxCached)},minPeerReputation:Number(e.minReputation),verifier:{enabled:e.verify,require:e.verify&&e.requireVerified,prefer:e.verify?V(e.verifiers):[]},evidence:{sampleRate:s(e.sampleRate),maxSampleBytes:s(e.maxSampleBytes)},payments:{autoSweep:e.autoSweep,maxPerRequestUsdc:Number(e.maxPerRequest),maxReserveUsdc:Number(e.maxReserve),rpcUrl:e.rpcUrl.trim()||null,fallbackRpcUrls:V(e.fallbackRpcUrls)},network:{peerRefreshIntervalMs:Number(e.peerRefreshMs),metadataFetchTimeoutMs:Number(e.metadataTimeoutMs),requestTimeoutMs:Number(e.requestTimeoutMs),maxStreamDurationMs:Number(e.maxStreamMs),disableMetadataV2Services:!e.perServiceMetadata}}}const Ke=["allowMode","allowedPeerIds","blockedPeerIds","minTrustScore","preferFree","softInputCap"];function L(e,s){return Object.keys(s).filter(r=>JSON.stringify(e[r])!==JSON.stringify(s[r]))}function Qe(e){const s=r=>r.trim()&&Number.isFinite(Number(r))?Number(r):void 0;return{...e.allowMode==="only"&&e.allowedPeerIds.length>0?{allowedPeerIds:e.allowedPeerIds}:{},...e.blockedPeerIds.length>0?{blockedPeerIds:e.blockedPeerIds}:{},...s(e.minTrustScore)?{minTrustScore:s(e.minTrustScore)}:{},...s(e.minReputation)?{minReputation:s(e.minReputation)}:{},...s(e.maxInput)!==void 0?{maxInputUsdPerMillion:s(e.maxInput)}:{},...s(e.maxOutput)!==void 0?{maxOutputUsdPerMillion:s(e.maxOutput)}:{},...s(e.maxCached)!==void 0?{maxCachedInputUsdPerMillion:s(e.maxCached)}:{}}}function We({buyer:e}){const s=re(),r=ne(),n=ge(),c=xe(),u=d.useMemo(()=>se(e),[e]),[a,h]=d.useState(u),[k,P]=d.useState(u),[v,S]=d.useState(null),[b,p]=d.useState(!1),[j,g]=d.useState(!1),l=(i,R)=>h(C=>({...C,[i]:R})),m=i=>{h(i),P(i),S(null)},o=ze(a),q=L(k,a);d.useEffect(()=>{L(k,u).length!==0&&(q.length===0||L(u,a).length===0?m(u):S(u))},[u]);const _=q.some(i=>!Ke.includes(i)),N=i=>ue(e.overrides,i)?t.jsx(Ve,{}):void 0,H=(i,R)=>N(i)??R,y=ae({mutationFn:()=>E.settings.updateBuyer(He(a)),onSuccess:i=>{const{restartRequired:R,...C}=i;s.setQueryData(U.settings,C),m(se(C.buyer)),s.invalidateQueries({queryKey:U.buyerLimits}),p(!1),g(R===!0),r(_?R?"Saved. Restart the buyer to apply them.":"Saved. The buyer is restarting.":"Saved. The buyer applies these at once.")}}),T=d.useMemo(()=>!n.data||n.data.length===0?null:{matched:ve(be(Qe(a)),n.data,c.data??[]).length,total:n.data.length},[a,n.data,c.data]),de=`${K(Number(a.maxInput))} in · ${K(Number(a.maxOutput))} out`,me=a.verify?a.requireVerified?"Required":"On":"Off",pe=`${a.autoSweep?"Auto-sweep on":"Auto-sweep off"} · ${ye(Number(a.maxPerRequest))} per request`,x=(i,R,C={})=>t.jsx(O,{size:"sm",className:C.className??"gc-num",label:R,inputMode:"decimal",placeholder:C.placeholder,value:a[i],error:o[i],hint:C.hint,onChange:he=>l(i,he.target.value)});return t.jsxs("div",{className:"gc-stack",children:[t.jsxs("div",{className:"gc-policy",children:[T&&(T.matched===0?t.jsxs(D,{tone:"warning",title:"No seller matches these settings",children:["None of the ",T.total," sellers this gateway sees passes them, so every request will fail."]}):t.jsxs("p",{className:"gc-muted","aria-live":"polite",children:["Matches ",T.matched," of ",T.total," sellers. Every key can only narrow this."]})),t.jsxs("div",{className:"gc-policy__cols",children:[t.jsxs("section",{className:"gc-policy__section",children:[t.jsx("h3",{children:"Sellers"}),t.jsx(Oe,{label:"Which sellers may serve",value:a.allowMode,onChange:i=>l("allowMode",i),options:[{value:"any",label:"Any seller"},{value:"only",label:"Only these"}]}),a.allowMode==="only"&&t.jsxs(t.Fragment,{children:[t.jsx(Y,{label:"Allowed sellers",value:a.allowedPeerIds,onChange:i=>l("allowedPeerIds",i),peers:n.data}),o.allowedPeerIds&&t.jsx("p",{className:"gc-warn",children:o.allowedPeerIds}),a.allowedPeerIds.length===0&&t.jsx("p",{className:"gc-fineprint",children:"With no sellers listed, any seller may serve."})]}),t.jsx(Y,{label:"Blocked sellers",value:a.blockedPeerIds,onChange:i=>l("blockedPeerIds",i),peers:n.data}),o.blockedPeerIds&&t.jsx("p",{className:"gc-warn",children:o.blockedPeerIds}),t.jsx("p",{className:"gc-fineprint",children:"Blocked here means blocked for every key."})]}),t.jsxs("section",{className:"gc-policy__section",children:[t.jsx("h3",{children:"Quality and ranking"}),t.jsx(X,{label:"Minimum trust score",clearable:!1,value:a.minTrustScore,onChange:i=>l("minTrustScore",i),hint:"Keys can raise it, not lower it."}),(fe(n.data)||a.minReputation!=="0")&&t.jsx(X,{label:"Minimum reputation",clearable:!1,value:a.minReputation,onChange:i=>l("minReputation",i),hint:H("minPeerReputation","Applies to pinned sellers too.")}),t.jsx("div",{className:"gc-policy__switches",children:t.jsx(I,{checked:a.preferFree,onChange:i=>l("preferFree",i),label:"Free sellers first"})}),x("softInputCap","Soft input price limit $/M",{hint:"Pricier sellers rank lower; none is excluded.",className:"gc-num gc-num--wide"})]})]}),t.jsxs("div",{className:"gc-policy__advanced",children:[t.jsxs(F,{title:"Price caps",summary:de,children:[t.jsx("p",{className:"gc-fineprint",children:"Hard limits for every request, pinned sellers included."}),t.jsxs("div",{className:"gc-policy__caps",children:[x("maxInput","Input $/M",{hint:N("maxPricing.inputUsdPerMillion")}),x("maxOutput","Output $/M",{hint:N("maxPricing.outputUsdPerMillion")}),x("maxCached","Cached input $/M",{placeholder:"Same as input"})]})]}),t.jsxs(F,{title:"Verification",summary:me,children:[N("verifier"),t.jsxs("div",{className:"gc-policy__switches",children:[t.jsx(I,{checked:a.verify,onChange:i=>l("verify",i),label:"Verify sellers"}),t.jsx(I,{checked:a.verify&&a.requireVerified,disabled:!a.verify,onChange:i=>l("requireVerified",i),label:"Require verification"})]}),t.jsx(O,{size:"sm",label:"Verifiers",value:a.verifiers,disabled:!a.verify,placeholder:"Seller's trusted default",hint:"Ordered, comma-separated verifier ids, e.g. TEE attestation.",onChange:i=>l("verifiers",i.target.value)}),t.jsxs("div",{className:"gc-policy__caps",children:[x("sampleRate","Evidence sample rate",{placeholder:"Default",hint:"Share of responses kept, 0 to 1."}),x("maxSampleBytes","Largest sample (bytes)",{placeholder:"Default",className:"gc-num gc-num--wide"})]})]}),t.jsxs(F,{title:"Payments",summary:pe,children:[t.jsx(I,{checked:a.autoSweep,onChange:i=>l("autoSweep",i),label:"Sweep deposits automatically",description:"Move USDC that arrives in the workspace wallets into their deposits."}),t.jsxs("div",{className:"gc-policy__caps",children:[x("maxPerRequest","Max per request (USDC)",{className:"gc-num gc-num--wide"}),x("maxReserve","Max channel reserve (USDC)",{className:"gc-num gc-num--wide"})]}),t.jsx(O,{size:"sm",label:"Base RPC URL",value:a.rpcUrl,error:o.rpcUrl,placeholder:"Chain default",hint:H("payments.rpcUrl","Your own endpoint avoids public rate limits. Saved URLs show without their path; leave them as they are to keep them."),onChange:i=>l("rpcUrl",i.target.value)}),t.jsx(oe,{label:"Fallback RPC URLs",rows:2,mono:!0,value:a.fallbackRpcUrls,error:o.fallbackRpcUrls,hint:"One per line, tried in order.",onChange:i=>l("fallbackRpcUrls",i.target.value)})]}),t.jsxs(F,{title:"Network and timeouts",summary:`Refresh ${Math.round(Number(a.peerRefreshMs)/1e3)} s`,children:[t.jsxs("div",{className:"gc-policy__caps",children:[x("peerRefreshMs","Peer refresh (ms)",{className:"gc-num gc-num--wide"}),x("metadataTimeoutMs","Metadata timeout (ms)",{className:"gc-num gc-num--wide",hint:N("network.metadataFetchTimeoutMs")}),x("requestTimeoutMs","Response start timeout (ms)",{className:"gc-num gc-num--wide"}),x("maxStreamMs","Longest stream (ms)",{className:"gc-num gc-num--wide",hint:N("network.maxStreamDurationMs")})]}),t.jsx(I,{checked:a.perServiceMetadata,onChange:i=>l("perServiceMetadata",i),label:"Per-service attribution in signed metadata",description:N("network.disableMetadataV2Services")??"Tells sellers which service each request used."})]})]})]}),j&&t.jsxs(D,{tone:"warning",title:"Restart the buyer to apply",children:["Saved, but this buyer was not restarted automatically. Restart it (for example ",t.jsx("code",{children:"systemctl restart antseed-buyer"}),", or stop and start ",t.jsx("code",{children:"antseed buyer start"}),") to use the new settings."]}),v&&t.jsx(D,{tone:"warning",title:"Changed elsewhere",action:t.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[t.jsx(f,{size:"sm",variant:"outline",onClick:()=>m(v),children:"Reload"}),t.jsx(f,{size:"sm",variant:"ghost",onClick:()=>{P(v),S(null)},children:"Keep editing"})]}),children:"Someone saved the buyer settings while you were editing them. Reload to see their version (your edits are dropped), or keep editing and save to replace it."}),!b&&y.error?t.jsx($,{error:y.error,title:"Could not save"}):null,t.jsxs("div",{className:"gc-actions",children:[t.jsx("span",{className:"gc-fineprint gc-actions__note",children:q.length===0?"No changes.":_?"Saving restarts the buyer.":"Applies at once, without a restart."}),t.jsx(f,{variant:"ghost",disabled:q.length===0||y.isPending,onClick:()=>m(v??k),children:"Reset"}),t.jsx(f,{disabled:q.length===0||Object.keys(o).length>0||y.isPending,onClick:()=>_?p(!0):y.mutate(),children:y.isPending?"Saving…":"Save"})]}),t.jsx(ie,{isOpen:b,busy:y.isPending,error:y.error,onClose:()=>{p(!1),y.reset()},onConfirm:()=>y.mutate(),title:"Restart the buyer?",confirmLabel:"Save and restart",tone:"primary",body:"These changes need a buyer restart. Requests in flight finish first; new requests wait a few seconds while it reconnects."})]})}const Ge=["general","buyer","observability","tokens","auth"];function Je(){const e=ke();return t.jsx(A,{title:"Gateway",children:t.jsx(z,{query:e,children:s=>t.jsx(le,{items:[["Public URL",s.publicUrl?t.jsx(Pe,{children:s.publicUrl},"u"):t.jsx("span",{className:"gc-muted",children:"Not set. Clients use this console's address."})],["Buyer",s.buyer.reachable?t.jsx(M,{tone:"success",children:"Connected"},"b"):t.jsx(M,{tone:"danger",children:"Unreachable"},"b")],["Sellers seen",String(s.buyer.peers)],["Spend feed",s.spendFeed],["USDC top-ups (x402)",s.x402?"On":"Off"]]})})})}function Ye({settings:e}){const s=e.buyer;return t.jsx(A,{title:"Buyer",description:t.jsxs(t.Fragment,{children:["The top of every routing policy: workspaces, members, keys and presets can only narrow it. Saved to the config file of the buyer on port ",s.proxyPort,ue(s.overrides,"proxyPort")?" (set by its start flags)":"","."]}),children:t.jsx(We,{buyer:s})})}function Xe({settings:e}){const s=re(),r=ne(),n=e.observability,[c,u]=d.useState(n.otlpEndpoint??""),[a,h]=d.useState(De(n.otlpHeaders)),[k,P]=d.useState(n.logContent),[v,S]=d.useState(n.retentionDays===null?"":String(n.retentionDays)),b=c.trim()&&!/^https?:\/\/\S+$/.test(c.trim())?"Use an http:// or https:// URL.":void 0,p=Le(n.otlpEndpoint,c.trim()||null)?_e(a):[],j=p.length?`Enter the value of ${p.join(", ")} again: saved values are not sent to a new endpoint.`:void 0,g=ae({mutationFn:()=>{if(b)throw new Error(b);if(j)throw new Error(j);const l=v===""?null:Number(v);return E.settings.setObservability({otlpEndpoint:c.trim()||null,otlpHeaders:$e(a),logContent:k,retentionDays:l})},onSuccess:l=>{const{restartRequired:m,...o}=l;s.setQueryData(U.settings,o),r(m?"Observability saved. Restart the gateway to apply it.":"Observability saved")},onError:l=>{Te(l,"otlp_headers_required")&&h(Z(a))}});return t.jsx(A,{title:"Observability",description:"Send one OpenTelemetry trace per request, and choose what the request log keeps.",children:t.jsxs("form",{className:"gc-stack",onSubmit:l=>{l.preventDefault(),g.mutate()},children:[t.jsx(O,{label:"OTLP/HTTP endpoint",placeholder:"https://otel.example.com/v1/traces",value:c,error:b,onChange:l=>u(l.target.value)}),t.jsx(oe,{label:"Headers",rows:3,mono:!0,placeholder:"Authorization: Bearer …",value:a,onChange:l=>h(l.target.value),error:j,hint:"One per line, as Name: value. Saved values show as ••••; leave them as they are to keep them (for the same endpoint only)."}),p.length>0&&t.jsx("div",{children:t.jsx(f,{size:"sm",variant:"outline",onClick:()=>h(Z(a)),children:"Clear saved values to re-enter them"})}),t.jsx(I,{checked:k,onChange:P,label:"Store request and response bodies",description:"Off by default. Bodies can contain personal data; only turn this on if you need it."}),t.jsx(B,{label:"Keep the request log for",value:v,onChange:S,options:[{value:"7",label:"7 days"},{value:"30",label:"30 days"},{value:"90",label:"90 days"},{value:"365",label:"1 year"},{value:"",label:"Forever"}]}),g.error?t.jsx($,{error:g.error,title:"Could not save"}):null,t.jsx("div",{className:"gc-actions",children:t.jsx(f,{type:"submit",disabled:g.isPending,children:g.isPending?"Saving…":"Save"})})]})})}function Ze(){const{me:e}=Re(),s=e.member.orgRole==="owner",r=Ce(),[n,c]=d.useState(!1),[u,a]=d.useState(""),[h,k]=d.useState("read"),[P,v]=d.useState("90"),[S,b]=d.useState(null),[p,j]=d.useState(null),g=Q({mutationFn:()=>E.adminTokens.create(u.trim(),h,P==="never"?null:Number(P)),onSuccess:m=>{c(!1),a(""),b(m.secret)},invalidate:[U.adminTokens]}),l=Q({mutationFn:m=>E.adminTokens.revoke(m.id),onSuccess:()=>j(null),invalidate:[U.adminTokens]});return t.jsxs(A,{flush:!0,title:"Management tokens",description:t.jsxs(t.Fragment,{children:["For scripts and CI. Send as ",t.jsx("code",{children:"Authorization: Bearer …"})," to ",t.jsx("code",{children:"/console/api"}),"."]}),actions:t.jsx(f,{size:"sm",leadingIcon:t.jsx(G.plus,{size:14}),onClick:()=>c(!0),children:"New token"}),children:[t.jsx(z,{query:r,children:m=>t.jsx(Fe,{label:"Management tokens",rows:m,rowKey:o=>o.id,rowLabel:o=>o.label,actions:o=>[{label:"Revoke",tone:"danger",onSelect:()=>j(o)}],empty:t.jsx(Ue,{icon:t.jsx(G.keys,{size:18}),title:"No management tokens"}),columns:[{key:"label",header:"Name",render:o=>t.jsx(Ne,{name:o.label,hint:o.hint})},{key:"scope",header:"Scope",render:o=>o.scope==="admin"?t.jsx(M,{tone:"warning",children:"Admin"}):t.jsx(M,{children:"Read only"})},{key:"created",header:"Created",secondary:!0,optional:!0,render:o=>W(o.createdAt)},{key:"expires",header:"Expires",secondary:!0,render:o=>t.jsx(Me,{at:o.expiresAt,format:W})},{key:"used",header:"Last used",secondary:!0,optional:!0,render:o=>Ie(o.lastUsedAt)}]})}),t.jsx(J,{isOpen:n,onClose:()=>c(!1),title:"New management token",children:t.jsxs("form",{className:"gc-stack",onSubmit:m=>{m.preventDefault(),g.mutate()},children:[t.jsx(O,{label:"Name",required:!0,value:u,onChange:m=>a(m.target.value),placeholder:"e.g. Terraform"}),t.jsx(B,{label:"Scope",value:h,onChange:m=>k(m),options:[{value:"read",label:"Read only (GET requests)"},{value:"admin",label:"Admin (everything an org admin can do)"}]}),t.jsx(B,{label:"Expires after",value:P,onChange:v,options:[{value:"30",label:"30 days"},{value:"90",label:"90 days"},{value:"365",label:"1 year"},...s?[{value:"never",label:"Never"}]:[]],hint:"Short-lived tokens limit the damage if one leaks."}),g.error?t.jsx($,{error:g.error,title:"Could not create the token"}):null,t.jsxs("div",{className:"gc-actions",children:[t.jsx(f,{variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),t.jsx(f,{type:"submit",disabled:g.isPending||!u.trim(),children:"Create token"})]})]})}),t.jsx(J,{isOpen:S!==null,onClose:()=>b(null),title:"Token created",children:S&&t.jsxs("div",{className:"gc-stack",children:[t.jsx(qe,{secret:S}),t.jsx("div",{className:"gc-actions",children:t.jsx(f,{onClick:()=>b(null),children:"Done"})})]})}),t.jsx(ie,{isOpen:p!==null,busy:l.isPending,error:l.error,onClose:()=>j(null),onConfirm:()=>p&&l.mutate(p),title:"Revoke this token?",confirmLabel:"Revoke",body:`Anything using ${(p==null?void 0:p.label)??"this token"} loses access immediately.`})]})}function et({settings:e}){const s=e.auth,r=n=>n?t.jsx(M,{tone:"success",children:"On"}):t.jsx(M,{children:"Off"});return t.jsx(A,{title:"Sign-in methods",description:"Configured on the gateway host with environment variables. Read only here.",children:t.jsxs("div",{className:"gc-stack",children:[t.jsx(le,{items:[["Passkeys",r(s.passkey)],["Wallet (Sign-In with Ethereum)",r(s.wallet)],["OpenID Connect",s.oidc?t.jsx(M,{tone:"success",children:s.oidc.label},"o"):r(!1)],["Cloudflare Access",r(s.cloudflareAccess)],["API key view for key holders",r(s.apiKeyLogin)]]}),t.jsx(D,{tone:"info",title:"Using your own identity provider",children:"Set the OpenID Connect issuer, client id and secret in the gateway's environment and restart it, or put the console behind Cloudflare Access and enable trusted Access headers. The gateway docs list the exact variables. Antseed runs no sign-in service of its own."})]})})}function tt({tab:e,settings:s}){return e==="buyer"?t.jsx(Ye,{settings:s}):e==="observability"?t.jsx(Xe,{settings:s}):t.jsx(et,{settings:s})}function mt(){const[e,s]=d.useState(()=>{const n=new URLSearchParams(window.location.search).get("tab");return Ge.includes(n)?n:"general"}),r=Se({queryKey:U.settings,queryFn:E.settings.get});return d.useEffect(()=>{var n;(n=window.scrollTo)==null||n.call(window,0,0)},[e]),t.jsxs("div",{className:"gc-page",children:[t.jsx(je,{title:"Settings"}),t.jsx(Ee,{id:"gc-settings",label:"Settings sections",value:e,onChange:s,tabs:[{id:"general",label:"General"},{id:"buyer",label:"Buyer"},{id:"observability",label:"Observability"},{id:"tokens",label:"Management tokens"},{id:"auth",label:"Sign-in"}]}),t.jsxs(Ae,{tabsId:"gc-settings",tab:e,className:"gc-stack",children:[e==="general"&&t.jsxs(t.Fragment,{children:[t.jsx(Je,{}),t.jsx(we,{})]}),e==="tokens"&&t.jsx(Ze,{}),(e==="buyer"||e==="observability"||e==="auth")&&t.jsx(z,{query:r,children:n=>t.jsx(tt,{tab:e,settings:n})}),r.error&&e==="general"?t.jsx($,{error:r.error}):null]})]})}export{mt as default};
7
+ `),peerRefreshMs:String(e.network.peerRefreshIntervalMs),metadataTimeoutMs:String(e.network.metadataFetchTimeoutMs),requestTimeoutMs:String(e.network.requestTimeoutMs),maxStreamMs:String(e.network.maxStreamDurationMs),perServiceMetadata:!e.network.disableMetadataV2Services}}function ze(e){const s=Be({input:e.maxInput,output:e.maxOutput,cached:e.maxCached,reputation:e.minReputation}),r={maxInput:s.input,maxOutput:s.output,maxCached:s.cached,softInputCap:w(e.softInputCap,{required:!0}),allowedPeerIds:e.allowMode==="only"?ee(e.allowedPeerIds):void 0,blockedPeerIds:ee(e.blockedPeerIds),sampleRate:w(e.sampleRate,{max:1}),maxSampleBytes:w(e.maxSampleBytes,{min:1,integer:!0}),maxPerRequest:w(e.maxPerRequest,{required:!0,min:1e-6}),maxReserve:w(e.maxReserve,{required:!0,min:1e-6}),rpcUrl:e.rpcUrl.trim()?te([e.rpcUrl.trim()]):void 0,fallbackRpcUrls:te(V(e.fallbackRpcUrls)),peerRefreshMs:w(e.peerRefreshMs,{required:!0,min:1e3,integer:!0}),metadataTimeoutMs:w(e.metadataTimeoutMs,{required:!0,min:100,integer:!0}),requestTimeoutMs:w(e.requestTimeoutMs,{required:!0,min:1,integer:!0}),maxStreamMs:w(e.maxStreamMs,{required:!0,min:1,integer:!0})};return Object.fromEntries(Object.entries(r).filter(([,n])=>n))}function He(e){const s=r=>r.trim()?Number(r):null;return{routingPreferences:{minTrustScore:Number(e.minTrustScore),maxInputUsdPerMillion:Number(e.softInputCap),preferFreePeers:e.preferFree,allowedPeerIds:e.allowMode==="only"?e.allowedPeerIds:[],blockedPeerIds:e.blockedPeerIds},maxPricing:{inputUsdPerMillion:Number(e.maxInput),outputUsdPerMillion:Number(e.maxOutput),cachedInputUsdPerMillion:s(e.maxCached)},minPeerReputation:Number(e.minReputation),verifier:{enabled:e.verify,require:e.verify&&e.requireVerified,prefer:e.verify?V(e.verifiers):[]},evidence:{sampleRate:s(e.sampleRate),maxSampleBytes:s(e.maxSampleBytes)},payments:{autoSweep:e.autoSweep,maxPerRequestUsdc:Number(e.maxPerRequest),maxReserveUsdc:Number(e.maxReserve),rpcUrl:e.rpcUrl.trim()||null,fallbackRpcUrls:V(e.fallbackRpcUrls)},network:{peerRefreshIntervalMs:Number(e.peerRefreshMs),metadataFetchTimeoutMs:Number(e.metadataTimeoutMs),requestTimeoutMs:Number(e.requestTimeoutMs),maxStreamDurationMs:Number(e.maxStreamMs),disableMetadataV2Services:!e.perServiceMetadata}}}const Ke=["allowMode","allowedPeerIds","blockedPeerIds","minTrustScore","preferFree","softInputCap"];function L(e,s){return Object.keys(s).filter(r=>JSON.stringify(e[r])!==JSON.stringify(s[r]))}function Qe(e){const s=r=>r.trim()&&Number.isFinite(Number(r))?Number(r):void 0;return{...e.allowMode==="only"&&e.allowedPeerIds.length>0?{allowedPeerIds:e.allowedPeerIds}:{},...e.blockedPeerIds.length>0?{blockedPeerIds:e.blockedPeerIds}:{},...s(e.minTrustScore)?{minTrustScore:s(e.minTrustScore)}:{},...s(e.minReputation)?{minReputation:s(e.minReputation)}:{},...s(e.maxInput)!==void 0?{maxInputUsdPerMillion:s(e.maxInput)}:{},...s(e.maxOutput)!==void 0?{maxOutputUsdPerMillion:s(e.maxOutput)}:{},...s(e.maxCached)!==void 0?{maxCachedInputUsdPerMillion:s(e.maxCached)}:{}}}function We({buyer:e}){const s=re(),r=ne(),n=ge(),c=xe(),u=d.useMemo(()=>se(e),[e]),[a,h]=d.useState(u),[k,P]=d.useState(u),[v,S]=d.useState(null),[b,p]=d.useState(!1),[j,g]=d.useState(!1),l=(i,R)=>h(C=>({...C,[i]:R})),m=i=>{h(i),P(i),S(null)},o=ze(a),q=L(k,a);d.useEffect(()=>{L(k,u).length!==0&&(q.length===0||L(u,a).length===0?m(u):S(u))},[u]);const _=q.some(i=>!Ke.includes(i)),N=i=>ue(e.overrides,i)?t.jsx(Ve,{}):void 0,H=(i,R)=>N(i)??R,f=ae({mutationFn:()=>E.settings.updateBuyer(He(a)),onSuccess:i=>{const{restartRequired:R,...C}=i;s.setQueryData(U.settings,C),m(se(C.buyer)),s.invalidateQueries({queryKey:U.buyerLimits}),p(!1),g(R===!0),r(_?R?"Saved. Restart the buyer to apply them.":"Saved. The buyer is restarting.":"Saved. The buyer applies these at once.")}}),T=d.useMemo(()=>!n.data||n.data.length===0?null:{matched:ve(be(Qe(a)),n.data,c.data??[]).length,total:n.data.length},[a,n.data,c.data]),de=`${K(Number(a.maxInput))} in · ${K(Number(a.maxOutput))} out`,me=a.verify?a.requireVerified?"Required":"On":"Off",pe=`${a.autoSweep?"Auto-sweep on":"Auto-sweep off"} · ${fe(Number(a.maxPerRequest))} per request`,x=(i,R,C={})=>t.jsx(O,{size:"sm",className:C.className??"gc-num",label:R,inputMode:"decimal",placeholder:C.placeholder,value:a[i],error:o[i],hint:C.hint,onChange:he=>l(i,he.target.value)});return t.jsxs("div",{className:"gc-stack",children:[t.jsxs("div",{className:"gc-policy",children:[T&&(T.matched===0?t.jsxs(D,{tone:"warning",title:"No seller matches these settings",children:["None of the ",T.total," sellers this gateway sees passes them, so every request will fail."]}):t.jsxs("p",{className:"gc-muted","aria-live":"polite",children:["Matches ",T.matched," of ",T.total," sellers. Every key can only narrow this."]})),t.jsxs("div",{className:"gc-policy__cols",children:[t.jsxs("section",{className:"gc-policy__section",children:[t.jsx("h3",{children:"Sellers"}),t.jsx(Oe,{label:"Which sellers may serve",value:a.allowMode,onChange:i=>l("allowMode",i),options:[{value:"any",label:"Any seller"},{value:"only",label:"Only these"}]}),a.allowMode==="only"&&t.jsxs(t.Fragment,{children:[t.jsx(Y,{label:"Allowed sellers",value:a.allowedPeerIds,onChange:i=>l("allowedPeerIds",i),peers:n.data}),o.allowedPeerIds&&t.jsx("p",{className:"gc-warn",children:o.allowedPeerIds}),a.allowedPeerIds.length===0&&t.jsx("p",{className:"gc-fineprint",children:"With no sellers listed, any seller may serve."})]}),t.jsx(Y,{label:"Blocked sellers",value:a.blockedPeerIds,onChange:i=>l("blockedPeerIds",i),peers:n.data}),o.blockedPeerIds&&t.jsx("p",{className:"gc-warn",children:o.blockedPeerIds}),t.jsx("p",{className:"gc-fineprint",children:"Blocked here means blocked for every key."})]}),t.jsxs("section",{className:"gc-policy__section",children:[t.jsx("h3",{children:"Quality and ranking"}),t.jsx(X,{label:"Minimum trust score",clearable:!1,value:a.minTrustScore,onChange:i=>l("minTrustScore",i),hint:"Keys can raise it, not lower it."}),(ye(n.data)||a.minReputation!=="0")&&t.jsx(X,{label:"Minimum reputation",clearable:!1,value:a.minReputation,onChange:i=>l("minReputation",i),hint:H("minPeerReputation","Applies to pinned sellers too.")}),t.jsx("div",{className:"gc-policy__switches",children:t.jsx(I,{checked:a.preferFree,onChange:i=>l("preferFree",i),label:"Free sellers first"})}),x("softInputCap","Soft input price limit $/M",{hint:"Pricier sellers rank lower; none is excluded.",className:"gc-num gc-num--wide"})]})]}),t.jsxs("div",{className:"gc-policy__advanced",children:[t.jsxs(F,{title:"Price caps",summary:de,children:[t.jsx("p",{className:"gc-fineprint",children:"Hard limits for every request, pinned sellers included."}),t.jsxs("div",{className:"gc-policy__caps",children:[x("maxInput","Input $/M",{hint:N("maxPricing.inputUsdPerMillion")}),x("maxOutput","Output $/M",{hint:N("maxPricing.outputUsdPerMillion")}),x("maxCached","Cached input $/M",{placeholder:"Same as input"})]})]}),t.jsxs(F,{title:"Verification",summary:me,children:[N("verifier"),t.jsxs("div",{className:"gc-policy__switches",children:[t.jsx(I,{checked:a.verify,onChange:i=>l("verify",i),label:"Verify sellers"}),t.jsx(I,{checked:a.verify&&a.requireVerified,disabled:!a.verify,onChange:i=>l("requireVerified",i),label:"Require verification"})]}),t.jsx(O,{size:"sm",label:"Verifiers",value:a.verifiers,disabled:!a.verify,placeholder:"Seller's trusted default",hint:"Ordered, comma-separated verifier ids, e.g. TEE attestation.",onChange:i=>l("verifiers",i.target.value)}),t.jsxs("div",{className:"gc-policy__caps",children:[x("sampleRate","Evidence sample rate",{placeholder:"Default",hint:"Share of responses kept, 0 to 1."}),x("maxSampleBytes","Largest sample (bytes)",{placeholder:"Default",className:"gc-num gc-num--wide"})]})]}),t.jsxs(F,{title:"Payments",summary:pe,children:[t.jsx(I,{checked:a.autoSweep,onChange:i=>l("autoSweep",i),label:"Sweep deposits automatically",description:"Move USDC that arrives in the workspace wallets into their deposits."}),t.jsxs("div",{className:"gc-policy__caps",children:[x("maxPerRequest","Max per request (USDC)",{className:"gc-num gc-num--wide"}),x("maxReserve","Max channel reserve (USDC)",{className:"gc-num gc-num--wide"})]}),t.jsx(O,{size:"sm",label:"Base RPC URL",value:a.rpcUrl,error:o.rpcUrl,placeholder:"Chain default",hint:H("payments.rpcUrl","Your own endpoint avoids public rate limits. Saved URLs show without their path; leave them as they are to keep them."),onChange:i=>l("rpcUrl",i.target.value)}),t.jsx(oe,{label:"Fallback RPC URLs",rows:2,mono:!0,value:a.fallbackRpcUrls,error:o.fallbackRpcUrls,hint:"One per line, tried in order.",onChange:i=>l("fallbackRpcUrls",i.target.value)})]}),t.jsxs(F,{title:"Network and timeouts",summary:`Refresh ${Math.round(Number(a.peerRefreshMs)/1e3)} s`,children:[t.jsxs("div",{className:"gc-policy__caps",children:[x("peerRefreshMs","Peer refresh (ms)",{className:"gc-num gc-num--wide"}),x("metadataTimeoutMs","Metadata timeout (ms)",{className:"gc-num gc-num--wide",hint:N("network.metadataFetchTimeoutMs")}),x("requestTimeoutMs","Response start timeout (ms)",{className:"gc-num gc-num--wide"}),x("maxStreamMs","Longest stream (ms)",{className:"gc-num gc-num--wide",hint:N("network.maxStreamDurationMs")})]}),t.jsx(I,{checked:a.perServiceMetadata,onChange:i=>l("perServiceMetadata",i),label:"Per-service attribution in signed metadata",description:N("network.disableMetadataV2Services")??"Tells sellers which service each request used."})]})]})]}),j&&t.jsxs(D,{tone:"warning",title:"Restart the buyer to apply",children:["Saved, but this buyer was not restarted automatically. Restart it (for example ",t.jsx("code",{children:"systemctl restart antseed-buyer"}),", or stop and start ",t.jsx("code",{children:"antseed buyer start"}),") to use the new settings."]}),v&&t.jsx(D,{tone:"warning",title:"Changed elsewhere",action:t.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[t.jsx(y,{size:"sm",variant:"outline",onClick:()=>m(v),children:"Reload"}),t.jsx(y,{size:"sm",variant:"ghost",onClick:()=>{P(v),S(null)},children:"Keep editing"})]}),children:"Someone saved the buyer settings while you were editing them. Reload to see their version (your edits are dropped), or keep editing and save to replace it."}),!b&&f.error?t.jsx($,{error:f.error,title:"Could not save"}):null,t.jsxs("div",{className:"gc-actions",children:[t.jsx("span",{className:"gc-fineprint gc-actions__note",children:q.length===0?"No changes.":_?"Saving restarts the buyer.":"Applies at once, without a restart."}),t.jsx(y,{variant:"ghost",disabled:q.length===0||f.isPending,onClick:()=>m(v??k),children:"Reset"}),t.jsx(y,{disabled:q.length===0||Object.keys(o).length>0||f.isPending,onClick:()=>_?p(!0):f.mutate(),children:f.isPending?"Saving…":"Save"})]}),t.jsx(ie,{isOpen:b,busy:f.isPending,error:f.error,onClose:()=>{p(!1),f.reset()},onConfirm:()=>f.mutate(),title:"Restart the buyer?",confirmLabel:"Save and restart",tone:"primary",body:"These changes need a buyer restart. Requests in flight finish first; new requests wait a few seconds while it reconnects."})]})}const Ge=["general","buyer","observability","tokens","auth"];function Je(){const e=ke();return t.jsx(A,{title:"Gateway",children:t.jsx(z,{query:e,children:s=>t.jsx(le,{items:[["Public URL",s.publicUrl?t.jsx(Pe,{children:s.publicUrl},"u"):t.jsx("span",{className:"gc-muted",children:"Not set. Clients use this console's address."})],["Buyer",s.buyer.reachable?t.jsx(M,{tone:"success",children:"Connected"},"b"):t.jsx(M,{tone:"danger",children:"Unreachable"},"b")],["Sellers seen",String(s.buyer.peers)],["Spend feed",s.spendFeed],["USDC top-ups (x402)",s.x402?"On":"Off"]]})})})}function Ye({settings:e}){const s=e.buyer;return t.jsx(A,{title:"Buyer",description:t.jsxs(t.Fragment,{children:["The top of every routing policy: workspaces, members, keys and presets can only narrow it. Saved to the config file of the buyer on port ",s.proxyPort,ue(s.overrides,"proxyPort")?" (set by its start flags)":"","."]}),children:t.jsx(We,{buyer:s})})}function Xe({settings:e}){const s=re(),r=ne(),n=e.observability,[c,u]=d.useState(n.otlpEndpoint??""),[a,h]=d.useState(De(n.otlpHeaders)),[k,P]=d.useState(n.logContent),[v,S]=d.useState(n.retentionDays===null?"":String(n.retentionDays)),b=c.trim()&&!/^https?:\/\/\S+$/.test(c.trim())?"Use an http:// or https:// URL.":void 0,p=Le(n.otlpEndpoint,c.trim()||null)?_e(a):[],j=p.length?`Enter the value of ${p.join(", ")} again: saved values are not sent to a new endpoint.`:void 0,g=ae({mutationFn:()=>{if(b)throw new Error(b);if(j)throw new Error(j);const l=v===""?null:Number(v);return E.settings.setObservability({otlpEndpoint:c.trim()||null,otlpHeaders:$e(a),logContent:k,retentionDays:l})},onSuccess:l=>{const{restartRequired:m,...o}=l;s.setQueryData(U.settings,o),r(m?"Observability saved. Restart the gateway to apply it.":"Observability saved")},onError:l=>{Te(l,"otlp_headers_required")&&h(Z(a))}});return t.jsx(A,{title:"Observability",description:"Send one OpenTelemetry trace per request, and choose what the request log keeps.",children:t.jsxs("form",{className:"gc-stack",onSubmit:l=>{l.preventDefault(),g.mutate()},children:[t.jsx(O,{label:"OTLP/HTTP endpoint",placeholder:"https://otel.example.com/v1/traces",value:c,error:b,onChange:l=>u(l.target.value)}),t.jsx(oe,{label:"Headers",rows:3,mono:!0,placeholder:"Authorization: Bearer …",value:a,onChange:l=>h(l.target.value),error:j,hint:"One per line, as Name: value. Saved values show as ••••; leave them as they are to keep them (for the same endpoint only)."}),p.length>0&&t.jsx("div",{children:t.jsx(y,{size:"sm",variant:"outline",onClick:()=>h(Z(a)),children:"Clear saved values to re-enter them"})}),t.jsx(I,{checked:k,onChange:P,label:"Store request and response bodies",description:"Off by default. Bodies can contain personal data; only turn this on if you need it."}),t.jsx(B,{label:"Keep the request log for",value:v,onChange:S,options:[{value:"7",label:"7 days"},{value:"30",label:"30 days"},{value:"90",label:"90 days"},{value:"365",label:"1 year"},{value:"",label:"Forever"}]}),g.error?t.jsx($,{error:g.error,title:"Could not save"}):null,t.jsx("div",{className:"gc-actions",children:t.jsx(y,{type:"submit",disabled:g.isPending,children:g.isPending?"Saving…":"Save"})})]})})}function Ze(){const{me:e}=Re(),s=e.member.orgRole==="owner",r=Ce(),[n,c]=d.useState(!1),[u,a]=d.useState(""),[h,k]=d.useState("read"),[P,v]=d.useState("90"),[S,b]=d.useState(null),[p,j]=d.useState(null),g=Q({mutationFn:()=>E.adminTokens.create(u.trim(),h,P==="never"?null:Number(P)),onSuccess:m=>{c(!1),a(""),b(m.secret)},invalidate:[U.adminTokens]}),l=Q({mutationFn:m=>E.adminTokens.revoke(m.id),onSuccess:()=>j(null),invalidate:[U.adminTokens]});return t.jsxs(A,{flush:!0,title:"Management tokens",description:t.jsxs(t.Fragment,{children:["For scripts and CI. Send as ",t.jsx("code",{children:"Authorization: Bearer …"})," to ",t.jsx("code",{children:"/console/api"}),"."]}),actions:t.jsx(y,{size:"sm",leadingIcon:t.jsx(G.plus,{size:14}),onClick:()=>c(!0),children:"New token"}),children:[t.jsx(z,{query:r,children:m=>t.jsx(Fe,{label:"Management tokens",rows:m,rowKey:o=>o.id,rowLabel:o=>o.label,actions:o=>[{label:"Revoke",tone:"danger",onSelect:()=>j(o)}],empty:t.jsx(Ue,{icon:t.jsx(G.keys,{size:18}),title:"No management tokens"}),columns:[{key:"label",header:"Name",render:o=>t.jsx(Ne,{name:o.label,hint:o.hint})},{key:"scope",header:"Scope",render:o=>o.scope==="admin"?t.jsx(M,{tone:"warning",children:"Admin"}):t.jsx(M,{children:"Read only"})},{key:"created",header:"Created",secondary:!0,optional:!0,render:o=>W(o.createdAt)},{key:"expires",header:"Expires",secondary:!0,render:o=>t.jsx(Me,{at:o.expiresAt,format:W})},{key:"used",header:"Last used",secondary:!0,optional:!0,render:o=>Ie(o.lastUsedAt)}]})}),t.jsx(J,{isOpen:n,onClose:()=>c(!1),title:"New management token",children:t.jsxs("form",{className:"gc-stack",onSubmit:m=>{m.preventDefault(),g.mutate()},children:[t.jsx(O,{label:"Name",required:!0,value:u,onChange:m=>a(m.target.value),placeholder:"e.g. Terraform"}),t.jsx(B,{label:"Scope",value:h,onChange:m=>k(m),options:[{value:"read",label:"Read only (GET requests)"},{value:"admin",label:"Admin (everything an org admin can do)"}]}),t.jsx(B,{label:"Expires after",value:P,onChange:v,options:[{value:"30",label:"30 days"},{value:"90",label:"90 days"},{value:"365",label:"1 year"},...s?[{value:"never",label:"Never"}]:[]],hint:"Short-lived tokens limit the damage if one leaks."}),g.error?t.jsx($,{error:g.error,title:"Could not create the token"}):null,t.jsxs("div",{className:"gc-actions",children:[t.jsx(y,{variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),t.jsx(y,{type:"submit",disabled:g.isPending||!u.trim(),children:"Create token"})]})]})}),t.jsx(J,{isOpen:S!==null,onClose:()=>b(null),title:"Token created",children:S&&t.jsxs("div",{className:"gc-stack",children:[t.jsx(qe,{secret:S}),t.jsx("div",{className:"gc-actions",children:t.jsx(y,{onClick:()=>b(null),children:"Done"})})]})}),t.jsx(ie,{isOpen:p!==null,busy:l.isPending,error:l.error,onClose:()=>j(null),onConfirm:()=>p&&l.mutate(p),title:"Revoke this token?",confirmLabel:"Revoke",body:`Anything using ${(p==null?void 0:p.label)??"this token"} loses access immediately.`})]})}function et({settings:e}){const s=e.auth,r=n=>n?t.jsx(M,{tone:"success",children:"On"}):t.jsx(M,{children:"Off"});return t.jsx(A,{title:"Sign-in methods",description:"Configured on the gateway host with environment variables. Read only here.",children:t.jsxs("div",{className:"gc-stack",children:[t.jsx(le,{items:[["Passkeys",r(s.passkey)],["Wallet (Sign-In with Ethereum)",r(s.wallet)],["OpenID Connect",s.oidc?t.jsx(M,{tone:"success",children:s.oidc.label},"o"):r(!1)],["Cloudflare Access",r(s.cloudflareAccess)],["API key view for key holders",r(s.apiKeyLogin)]]}),t.jsx(D,{tone:"info",title:"Using your own identity provider",children:"Set the OpenID Connect issuer, client id and secret in the gateway's environment and restart it, or put the console behind Cloudflare Access and enable trusted Access headers. The gateway docs list the exact variables. Antseed runs no sign-in service of its own."})]})})}function tt({tab:e,settings:s}){return e==="buyer"?t.jsx(Ye,{settings:s}):e==="observability"?t.jsx(Xe,{settings:s}):t.jsx(et,{settings:s})}function pt(){const[e,s]=d.useState(()=>{const n=new URLSearchParams(window.location.search).get("tab");return Ge.includes(n)?n:"general"}),r=Se({queryKey:U.settings,queryFn:E.settings.get});return d.useEffect(()=>{var n;(n=window.scrollTo)==null||n.call(window,0,0)},[e]),t.jsxs("div",{className:"gc-page",children:[t.jsx(je,{title:"Settings"}),t.jsx(Ee,{id:"gc-settings",label:"Settings sections",value:e,onChange:s,tabs:[{id:"general",label:"General"},{id:"buyer",label:"Buyer"},{id:"observability",label:"Observability"},{id:"tokens",label:"Management tokens"},{id:"auth",label:"Sign-in"}]}),t.jsxs(Ae,{tabsId:"gc-settings",tab:e,className:"gc-stack",children:[e==="general"&&t.jsxs(t.Fragment,{children:[t.jsx(Je,{}),t.jsx(we,{})]}),e==="tokens"&&t.jsx(Ze,{}),(e==="buyer"||e==="observability"||e==="auth")&&t.jsx(z,{query:r,children:n=>t.jsx(tt,{tab:e,settings:n})}),r.error&&e==="general"?t.jsx($,{error:r.error}):null]})]})}export{pt as default};
@@ -0,0 +1 @@
1
+ import{bk as c,al as l,r as o,j as n,W as u}from"./index-cESr4Zze.js";const m={text:"Text",image:"Image",video:"Video",decision:"Decision"},g={toolUse:"Tool use",reasoning:"Reasoning",structuredOutput:"Structured output",vision:"Vision"};function p(i,s){const t=s.trim().toLowerCase(),r=i??[];return r.find(a=>a.id.toLowerCase()===t)??r.find(a=>a.aliases.some(e=>e.toLowerCase()===t))??null}function f(i){if(i.usdPerImage)return i.usdPerImage.max===0?"Free":`${c(i.usdPerImage)} per image`;const{inputUsdPerMillion:s,outputUsdPerMillion:t}=i;return s===null&&t===null?i.free?"Free":"No price advertised":(s??0)===0&&(t??0)===0?"Free":`${l(s)} in · ${l(t)} out /M`}function x({list:i,panel:s,onClose:t,closeLabel:r="Close panel"}){const a=o.useRef(null);s&&(a.current=s);const e=s??a.current;return n.jsxs(n.Fragment,{children:[i,n.jsx(u,{isOpen:s!==null,onClose:t,closeLabel:r,className:"gc-side-panel",title:(e==null?void 0:e.title)??"",subtitle:e==null?void 0:e.subtitle,eyebrow:e==null?void 0:e.eyebrow,actions:e==null?void 0:e.actions,children:e==null?void 0:e.body})]})}function _({title:i,actions:s,children:t}){return n.jsxs("section",{className:"gc-panel-section",children:[n.jsxs("div",{className:"gc-panel-section__head",children:[n.jsx("h3",{className:"gc-panel-section__title",children:i}),s&&n.jsx("div",{className:"gc-panel-section__actions",children:s})]}),t]})}function j({title:i,meta:s,badges:t,actions:r,selected:a}){return n.jsxs("li",{className:a?"gc-panel-row gc-panel-row--on":"gc-panel-row",children:[n.jsxs("div",{className:"gc-panel-row__main",children:[n.jsx("div",{className:"gc-panel-row__title",children:i}),s&&n.jsx("div",{className:"gc-panel-row__meta",children:s}),t]}),r&&n.jsx("div",{className:"gc-panel-row__actions",children:r})]})}export{g as C,m as M,_ as P,x as S,j as a,p as f,f as p};
@@ -1 +1 @@
1
- import{R as r,j as s,P as d,O as l,y as p}from"./index-DIcymBxc.js";import{S as m,P as g,a as c,N as S}from"./StakingDashboard-DtOKTmys.js";import{T as b,a as k}from"./Tabs-yVL4Cd6z.js";import"./en_US-Y4ZOVFV4-CmhP8GU2.js";import"./clsx-B-dksMZM.js";import"./index-BhwNCc8y.js";import"./sendTransaction-CqpP3CZj.js";import"./waitForCallsStatus-CtriTPoz.js";import"./writeContract-DrAWt0yz.js";import"./ChainGate-In51TI2h.js";import"./roving-DkptacxO.js";const u=new Map(S.flatMap(a=>a.items.map(t=>[t.id,t.label]))),i=g.filter(a=>c[a]==="staking").map(a=>({id:a,label:u.get(a)??a})),x=i.map(a=>a.id),o="gc-staking";function L(){var n;const a=r(),t=((n=i.find(e=>e.id===a.rest[0]))==null?void 0:n.id)??i[0].id;return s.jsxs("div",{className:"gc-page",children:[s.jsx(d,{title:"Staking",description:s.jsxs(s.Fragment,{children:["Stake ANTS into seller pools and manage your positions, signed with your wallet. Staking rewards are on ",s.jsx(l,{to:"rewards",children:"Rewards"}),"."]})}),s.jsx(b,{id:o,label:"Staking",value:t,onChange:e=>p(`staking/${e}`),tabs:i}),s.jsx(k,{tabsId:o,tab:t,children:s.jsx(m,{pages:x,buyerRewards:!0})})]})}export{L as default};
1
+ import{R as r,j as s,P as d,O as l,y as p}from"./index-cESr4Zze.js";import{S as m,P as g,a as c,N as S}from"./StakingDashboard-C5Ib_AUs.js";import{T as b,a as k}from"./Tabs-Cv10NtDy.js";import"./en_US-Y4ZOVFV4-sKQksBWU.js";import"./clsx-B-dksMZM.js";import"./index-BhwNCc8y.js";import"./sendTransaction-Cmz5eiPq.js";import"./waitForCallsStatus-DlpsNYx1.js";import"./writeContract-Cqg_OlRQ.js";import"./ChainGate-DpChfDOP.js";import"./roving-DkptacxO.js";const u=new Map(S.flatMap(a=>a.items.map(t=>[t.id,t.label]))),i=g.filter(a=>c[a]==="staking").map(a=>({id:a,label:u.get(a)??a})),x=i.map(a=>a.id),o="gc-staking";function L(){var n;const a=r(),t=((n=i.find(e=>e.id===a.rest[0]))==null?void 0:n.id)??i[0].id;return s.jsxs("div",{className:"gc-page",children:[s.jsx(d,{title:"Staking",description:s.jsxs(s.Fragment,{children:["Stake ANTS into seller pools and manage your positions, signed with your wallet. Staking rewards are on ",s.jsx(l,{to:"rewards",children:"Rewards"}),"."]})}),s.jsx(b,{id:o,label:"Staking",value:t,onChange:e=>p(`staking/${e}`),tabs:i}),s.jsx(k,{tabsId:o,tab:t,children:s.jsx(m,{pages:x,buyerRewards:!0})})]})}export{L as default};