@aidotnet/server-linux-x64 0.14.3100 → 0.14.3101

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 (42) hide show
  1. package/bin/astra-server +2 -2
  2. package/bin/wwwroot/assets/{ClientsPage-GKLy8gVJ.js → ClientsPage-BsCvaS4d.js} +1 -1
  3. package/bin/wwwroot/assets/{KeyPage-BbUpGlKO.js → KeyPage-bkK0B_mk.js} +1 -1
  4. package/bin/wwwroot/assets/{ModelDetailPage-BlmQDuE3.js → ModelDetailPage-BEVSPYM6.js} +1 -1
  5. package/bin/wwwroot/assets/{ModelsPage-Ckhg7YdH.js → ModelsPage-BGij6zvC.js} +1 -1
  6. package/bin/wwwroot/assets/{PluginsPage-Dwqhs5tw.js → PluginsPage-dVUvE8Lf.js} +1 -1
  7. package/bin/wwwroot/assets/{PrivacyPage-CJ5wbjXl.js → PrivacyPage-B-YBfQ6J.js} +1 -1
  8. package/bin/wwwroot/assets/ProviderDetailPage-CQQdpDSf.js +3 -0
  9. package/bin/wwwroot/assets/{ProvidersPage-B7az1p0j.js → ProvidersPage-BwigLnKs.js} +1 -1
  10. package/bin/wwwroot/assets/{SettingsPage-Dm7rhdEx.js → SettingsPage-CvpROKS2.js} +2 -2
  11. package/bin/wwwroot/assets/{SmartRoutingPage-Dww5ODy8.js → SmartRoutingPage-CYh7mRot.js} +1 -1
  12. package/bin/wwwroot/assets/{TokenDetailPage-bcWwe6SL.js → TokenDetailPage-GwSz8QI6.js} +1 -1
  13. package/bin/wwwroot/assets/{TokenPoolEditor-DBLRdef1.js → TokenPoolEditor-DfmDnnxw.js} +1 -1
  14. package/bin/wwwroot/assets/{TokensPage-DCaUOp7X.js → TokensPage-0hOOzLVU.js} +1 -1
  15. package/bin/wwwroot/assets/{TracesPage-CM7kpC2L.js → TracesPage-A45sREZP.js} +1 -1
  16. package/bin/wwwroot/assets/{TrayPanelPage-Dxk8NHwD.js → TrayPanelPage-xke1V9tu.js} +1 -1
  17. package/bin/wwwroot/assets/{TrayPanelView-BZQT4C-p.js → TrayPanelView-CHh9-E76.js} +1 -1
  18. package/bin/wwwroot/assets/{alert-0ugPccg1.js → alert-CuKAE1Sv.js} +2 -2
  19. package/bin/wwwroot/assets/{arrow-down-BzJcdsh0.js → arrow-down-DeIGdMUk.js} +1 -1
  20. package/bin/wwwroot/assets/{arrow-left-CvdkAxjP.js → arrow-left-DX1c-nYY.js} +1 -1
  21. package/bin/wwwroot/assets/{arrow-up-right-DEmTMRN5.js → arrow-up-right-D--u8dK5.js} +1 -1
  22. package/bin/wwwroot/assets/{chart-column-4_Hcd7LI.js → chart-column-zt3ZRFLH.js} +1 -1
  23. package/bin/wwwroot/assets/{checkbox-DAvFpCMa.js → checkbox-BJe8ekJy.js} +1 -1
  24. package/bin/wwwroot/assets/{cloud-download-D0cpRWOi.js → cloud-download-DWw6s5ag.js} +1 -1
  25. package/bin/wwwroot/assets/{confirm-morph-Df4YMElg.js → confirm-morph-DGAHV4QP.js} +1 -1
  26. package/bin/wwwroot/assets/{download-DZCHLDt2.js → download-DR9BLMVt.js} +1 -1
  27. package/bin/wwwroot/assets/{ellipsis-CdooFypb.js → ellipsis-BH_FL485.js} +1 -1
  28. package/bin/wwwroot/assets/{external-link-CS7Gd3Z_.js → external-link-Bb6sx3jt.js} +1 -1
  29. package/bin/wwwroot/assets/{folder-open-BZjDCbYy.js → folder-open-Bcx5mAII.js} +1 -1
  30. package/bin/wwwroot/assets/{index-COgqKK9s.js → index-CKrvKDIJ.js} +3 -3
  31. package/bin/wwwroot/assets/{log-out-DVIVn0JF.js → log-out-Ch09k2bC.js} +1 -1
  32. package/bin/wwwroot/assets/minus-UfPYsFrp.js +1 -0
  33. package/bin/wwwroot/assets/{overlays-Dd-xCJQp.js → overlays-DeHu6TU_.js} +1 -1
  34. package/bin/wwwroot/assets/{pencil-BbgAhLbU.js → pencil-fY6CohHT.js} +1 -1
  35. package/bin/wwwroot/assets/{power-CYbRvApU.js → power-B9MMcl6Y.js} +1 -1
  36. package/bin/wwwroot/assets/{radio-cards-C2kL9-Ki.js → radio-cards-Rq9vGqnw.js} +1 -1
  37. package/bin/wwwroot/assets/{rotate-ccw-CIB2qh-N.js → rotate-ccw-DsmSscuv.js} +1 -1
  38. package/bin/wwwroot/assets/{sortable.esm-BXvWgOQ9.js → sortable.esm-CO34h2h7.js} +1 -1
  39. package/bin/wwwroot/index.html +3 -3
  40. package/package.json +1 -1
  41. package/bin/wwwroot/assets/ProviderDetailPage-Dxu9JADF.js +0 -3
  42. package/bin/wwwroot/assets/minus-P2gia-qN.js +0 -1
@@ -1 +1 @@
1
- import{Ba as e,H as t,J as n,Or as r,Q as i,Rr as a,Ti as o,Tr as s,Ua as c,X as l,Y as u,_ as d,ai as f,c as p,ct as m,d as h,dn as g,fi as _,gt as v,ii as y,kr as b,l as x,lr as S,n as C,nn as w,p as T,q as E,r as D,rn as O,s as ee,t as te,v as k,xt as A,za as j}from"./alert-0ugPccg1.js";import{a as M,ct as N,i as P,n as ne,o as F,r as I}from"./overlays-Dd-xCJQp.js";import{t as re}from"./chart-column-4_Hcd7LI.js";import{t as ie}from"./ellipsis-CdooFypb.js";import{t as ae}from"./pencil-BbgAhLbU.js";import{t as oe}from"./power-CYbRvApU.js";import{t as se}from"./rotate-ccw-CIB2qh-N.js";import{B as L,F as ce,H as R,P as z,R as le,U as ue,Z as B,_ as V,h as H,s as U,y as W}from"./index-COgqKK9s.js";import{a as de,i as G,n as K,r as q,t as J}from"./TokenPoolEditor-DBLRdef1.js";var Y={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};Y.node;var X=A(Y),fe={name:`user-plus`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]};fe.node;var pe=A(fe),Z=c(e(),1),Q=j(),me=[15,60,1440];function he({token:e,open:n,onOpenChange:r}){let{t:i,locale:a}=m(),{toast:o}=F(),[s,c]=(0,Z.useState)(15),[l,u]=(0,Z.useState)(null),f=y(e.id,n),p=O(e.id),h=b(e.id),g=e=>e<60?i(`tokens.invite.minutes`,{n:e}):i(`tokens.invite.hours`,{n:e/60}),_=()=>p.mutate(s,{onSuccess:async e=>{u(e.link),o(await N.copy(e.link)?i(`tokens.invite.copied`):i(`tokens.copyFailed`),`success`)},onError:e=>o(M(e),`error`)}),v=e=>e===`pending`?`accent`:e===`used`?`green`:`neutral`;return(0,Q.jsx)(P,{open:n,onOpenChange:e=>{e||u(null),r(e)},title:i(`tokens.invite.title`,{name:e.name}),description:i(`tokens.invite.description`),footer:(0,Q.jsx)(D,{variant:`primary`,icon:(0,Q.jsx)(X,{className:`size-3.5`}),loading:p.isPending,onClick:_,children:i(`tokens.invite.generate`)}),children:(0,Q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-secondary)]`,children:i(`tokens.invite.lifetime`)}),(0,Q.jsx)(d,{items:me.map(e=>({value:String(e),label:g(e)})),value:String(s),onChange:e=>c(Number(e)),ariaLabel:i(`tokens.invite.lifetime`)})]}),l&&(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-secondary)]`,children:i(`tokens.invite.linkOnce`)}),(0,Q.jsx)(`code`,{className:`selectable break-all rounded-lg bg-[var(--surface-muted)] px-3 py-2 font-mono text-[11.5px]`,children:l})]}),(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-secondary)]`,children:i(`tokens.invite.recent`)}),(f.data??[]).length===0?(0,Q.jsx)(`p`,{className:`text-[12px] text-[var(--text-muted)]`,children:i(`tokens.invite.none`)}):(0,Q.jsx)(`ul`,{className:`grid gap-1.5`,children:(f.data??[]).map(e=>(0,Q.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 rounded-lg border border-[var(--border)] px-3 py-2 text-[12px]`,children:[(0,Q.jsx)(C,{tone:v(e.status),children:i(`tokens.invite.status.${e.status}`)}),(0,Q.jsx)(`span`,{className:`text-[var(--text-secondary)]`,children:e.status===`used`?i(`tokens.invite.usedAt`,{time:t(e.usedAt,a),ip:e.usedIp??`—`}):i(`tokens.invite.expires`,{time:t(e.expiresAt,a)})}),e.status===`pending`&&(0,Q.jsx)(D,{size:`sm`,variant:`plain`,className:`ml-auto`,loading:h.isPending&&h.variables===e.id,onClick:()=>h.mutate(e.id,{onError:e=>o(M(e),`error`)}),children:i(`tokens.invite.revoke`)})]},e.id))})]})]})})}function ge(){let{t:e}=m(),t=f(),n=a(),r=_(),i=r.data?.state===`connected`?r.data.publicUrl:null,[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(null);return(0,Q.jsxs)(H,{title:e(`nav.tokens`),subtitle:e(`tokens.subtitle`),actions:(0,Q.jsx)(D,{variant:`primary`,icon:(0,Q.jsx)(L,{className:`size-3.5`}),onClick:()=>s(!0),children:e(`tokens.add`)}),children:[(0,Q.jsxs)(`div`,{className:`mx-auto flex max-w-[1100px] flex-col gap-4`,children:[n.data&&(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1 px-1 text-[12px] text-[var(--text-secondary)]`,children:[(0,Q.jsx)(`p`,{children:e(`tokens.directHint`,{url:`${n.data.gatewayBaseUrl}/v1`})}),(0,Q.jsx)(`p`,{className:`selectable`,children:e(`tokens.selfServiceHint`,{url:n.data.gatewayBaseUrl})}),i&&(0,Q.jsx)(`p`,{className:`selectable text-[var(--accent)]`,children:e(`tokens.remoteHint`,{url:`${i}/v1`,key:`${i}/key`})})]}),t.isLoading&&(0,Q.jsx)(k,{lines:4}),t.isError&&(0,Q.jsx)(te,{tone:`danger`,title:e(`common.error`),children:M(t.error)}),t.data?.length===0&&(0,Q.jsx)(`div`,{className:`card`,children:(0,Q.jsx)(p,{icon:(0,Q.jsx)(R,{className:`size-6`}),title:e(`tokens.empty`)})}),t.data&&t.data.length>0&&(0,Q.jsx)(`div`,{className:`card divide-y divide-[var(--border-subtle)] overflow-hidden p-0`,children:t.data.map(e=>(0,Q.jsx)(_e,{token:e,defaultOpen:t.data.length===1,onEdit:()=>l(e)},e.id))})]}),(0,Q.jsx)(Se,{open:o,onOpenChange:s}),(0,Q.jsx)(Ce,{token:c,onClose:()=>l(null)})]})}function _e({token:e,defaultOpen:c,onEdit:l}){let{t:d,locale:f}=m(),{toast:p,confirm:h}=F(),_=S(),y=a(),b=r(),x=o(),w=s(),T=g(),[E,O]=(0,Z.useState)(c),te=(_.data??[]).find(t=>t.id===e.providerId),k=de(),A=`token-detail-${e.id}`,j=(e,t)=>{p(t,`success`),e.skipped.length>0&&p(d(`tokens.skipped`,{clients:e.skipped.map(e=>V[e]?.name??e).join(`, `)}),`error`)},P=()=>b.mutate(e.id,{onSuccess:async({token:e})=>{await N.copy(e)?p(d(`tokens.copied`)):p(d(`tokens.copyFailed`),`error`)},onError:e=>p(M(e),`error`)}),[I,L]=(0,Z.useState)(!1),R=async()=>{let e=y.data?.gatewayBaseUrl;e&&(await N.copy(`${e}/v1`)?p(d(`tokens.urlCopied`)):p(d(`tokens.copyFailed`),`error`))},H=async()=>{let e=y.data?.gatewayBaseUrl;e&&(await N.copy(`npx @aidotnet/astra-connect join ${e}`)?p(d(`tokens.joinCopied`)):p(d(`tokens.copyFailed`),`error`))},U=async()=>{(!e.enabled||await h({title:d(`tokens.disableConfirm`,{name:e.name}),detail:d(`tokens.disableDetail`),confirmLabel:d(`tokens.disable`),destructive:!0}))&&x.mutate({id:e.id,enabled:!e.enabled},{onError:e=>p(M(e),`error`)})},G=async()=>{await h({title:d(`tokens.resetConfirm`,{name:e.name}),detail:d(`tokens.resetDetail`),confirmLabel:d(`tokens.reset`),destructive:!0})&&w.mutate(e.id,{onSuccess:e=>j(e,d(`tokens.resetDone`,{count:e.rewritten.length})),onError:e=>p(M(e),`error`)})},q=async()=>{await h({title:d(`tokens.deleteConfirm`,{name:e.name}),detail:d(`tokens.deleteDetail`),confirmLabel:d(`common.delete`),destructive:!0})&&T.mutate(e.id,{onSuccess:t=>j(t,d(`tokens.deleted`,{name:e.name})),onError:e=>p(M(e),`error`)})},J=e.lastUsedAt?t(e.lastUsedAt,f):d(`tokens.neverUsed`);return(0,Q.jsxs)(`article`,{children:[(0,Q.jsxs)(`div`,{className:`flex cursor-pointer flex-wrap items-center gap-x-5 gap-y-2 px-4 py-3 hover:bg-[var(--surface-muted)]`,onClick:()=>O(e=>!e),children:[(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 basis-56 items-start gap-2`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`mt-0.5 rounded text-[var(--text-muted)]`,"aria-expanded":E,"aria-controls":A,"aria-label":d(`tokens.details`),onClick:e=>{e.stopPropagation(),O(e=>!e)},children:(0,Q.jsx)(ue,{className:`size-4 transition-transform ${E?`rotate-90`:``}`})}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Q.jsx)(`h2`,{className:`truncate text-[14px] font-medium ${e.enabled?``:`text-[var(--text-muted)]`}`,children:e.name}),e.isDefault&&(0,Q.jsx)(C,{tone:`accent`,children:d(`tokens.default`)}),!e.enabled&&(0,Q.jsx)(C,{tone:`orange`,children:d(`tokens.disabledBadge`)}),e.limitUsage.some(e=>e.exhausted)&&(0,Q.jsx)(C,{tone:`orange`,children:d(`tokens.limitExhausted`)}),e.pool&&(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:e.pool.members.map(e=>e.providerId).join(`, `),children:[(0,Q.jsx)(C,{children:d(`tokens.pool.summary`,{count:e.pool.members.length,strategy:d(`tokens.strategy.${e.pool.strategy}`)})}),e.pool.members.map(e=>(0,Q.jsx)(ee,{tone:K(e.health.state)},e.providerId))]})]}),(0,Q.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-1`,onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(`code`,{className:`font-mono text-[12px] text-[var(--text-secondary)] selectable`,children:e.keyMasked}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(v,{className:`size-3.5`}),"aria-label":d(`tokens.copy`),title:d(`tokens.copy`),loading:b.isPending,onClick:P}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(X,{className:`size-3.5`}),"aria-label":d(`tokens.copyUrl`),title:d(`tokens.copyUrl`),disabled:!y.data,onClick:()=>void R()}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(ce,{className:`size-3.5`}),"aria-label":d(`tokens.copyJoin`),title:d(`tokens.copyJoin`),disabled:!y.data,onClick:()=>void H()}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(pe,{className:`size-3.5`}),"aria-label":d(`tokens.invite.open`),title:d(`tokens.invite.open`),disabled:!e.enabled,onClick:()=>L(!0)}),(0,Q.jsx)(he,{token:e,open:I,onOpenChange:L})]})]})]}),(0,Q.jsx)(`div`,{className:`hidden w-16 items-center gap-1.5 md:flex`,title:e.clients.map(e=>V[e]?.name??e).join(`, `)||d(`tokens.noClients`),children:e.clients.length===0?(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-muted)]`,children:`—`}):e.clients.map(e=>(0,Q.jsx)(W,{kind:e,size:16},e))}),(0,Q.jsx)($,{label:d(`tokens.today`),value:i(e.today.costUsd),context:d(`tokens.requestsContext`,{count:u(e.today.requests)})}),(0,Q.jsx)($,{label:d(`tokens.total`),value:i(e.total.costUsd),context:`${u(e.total.totalTokens,!0)} Token`}),(0,Q.jsx)($,{label:d(`tokens.lastUsedTitle`),value:e.lastUsedAt?n(e.lastUsedAt,f):`—`,context:e.lastUsedAt?``:d(`tokens.neverUsed`),title:J}),(0,Q.jsx)(`div`,{onClick:e=>e.stopPropagation(),children:(0,Q.jsx)(ne,{label:d(`common.more`),icon:(0,Q.jsx)(ie,{className:`size-4`}),items:[{id:`settings`,label:d(`tokens.settings`),icon:(0,Q.jsx)(ae,{className:`size-3.5`}),onSelect:l},{id:`toggle`,label:e.enabled?d(`tokens.disable`):d(`tokens.enable`),icon:(0,Q.jsx)(oe,{className:`size-3.5`}),onSelect:()=>void U()},{id:`reset`,label:d(`tokens.reset`),icon:(0,Q.jsx)(se,{className:`size-3.5`}),onSelect:()=>void G()},...e.isDefault?[]:[{id:`delete`,label:d(`tokens.delete`),icon:(0,Q.jsx)(z,{className:`size-3.5`}),destructive:!0,separatorBefore:!0,onSelect:()=>void q()}]]})})]}),E&&(0,Q.jsxs)(`div`,{id:A,className:`border-t border-[var(--border-subtle)] bg-[var(--surface-muted)] px-4 py-3 md:pl-10`,children:[(0,Q.jsxs)(`dl`,{className:`flex flex-wrap gap-x-8 gap-y-2 text-[12px]`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:d(`tokens.clients`)}),(0,Q.jsx)(`dd`,{className:`mt-0.5 flex min-h-5 flex-wrap items-center gap-x-3 gap-y-1 text-[var(--text-secondary)]`,children:e.clients.length===0?d(`tokens.noClients`):e.clients.map(e=>(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Q.jsx)(W,{kind:e,size:14}),V[e]?.name??e]},e))})]}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:e.pool?d(`tokens.pool.title`):d(`tokens.directProvider`)}),e.pool?(0,Q.jsx)(`dd`,{className:`mt-0.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[var(--text-secondary)]`,children:e.pool.members.map(e=>(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:k(e.health),children:[(0,Q.jsx)(ee,{tone:K(e.health.state)}),(_.data??[]).find(t=>t.id===e.providerId)?.name??e.providerId]},e.providerId))}):(0,Q.jsx)(`dd`,{className:`mt-0.5 truncate text-[var(--text-secondary)]`,children:te?.name??(e.providerId?e.providerId:d(`tokens.directNone`))})]}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:d(`tokens.allowedClients`)}),(0,Q.jsx)(`dd`,{className:`mt-0.5 truncate text-[var(--text-secondary)]`,children:e.allowedClients==null?d(`tokens.allowedClientsAny`):e.allowedClients.length===0?d(`tokens.directOnly`):e.allowedClients.map(e=>V[e]?.name??e).join(`, `)})]}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:d(`tokens.lastUsedTitle`)}),(0,Q.jsx)(`dd`,{className:`mt-0.5 truncate text-[var(--text-secondary)]`,children:J})]})]}),(0,Q.jsx)(ve,{token:e}),(0,Q.jsx)(be,{today:e.today,total:e.total}),(0,Q.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,Q.jsx)(B,{to:`/tokens/${encodeURIComponent(e.id)}`,children:(0,Q.jsx)(D,{size:`sm`,icon:(0,Q.jsx)(re,{className:`size-3.5`}),children:d(`tokens.detail.open`)})}),(0,Q.jsx)(B,{to:`/requests?token=${encodeURIComponent(e.id)}`,children:(0,Q.jsx)(D,{size:`sm`,icon:(0,Q.jsx)(le,{className:`size-3.5`}),children:d(`tokens.detail.viewLogs`)})})]})]})]})}function ve({token:e}){let{t}=m(),n=e.limits?.rpm;return(0,Q.jsxs)(`div`,{className:`mt-3`,children:[(0,Q.jsx)(`div`,{className:`text-[12px] text-[var(--text-muted)]`,children:t(`tokens.limits`)}),e.limitUsage.length===0&&n==null?(0,Q.jsx)(`div`,{className:`mt-0.5 text-[12px] text-[var(--text-secondary)]`,children:t(`tokens.unlimited`)}):(0,Q.jsxs)(`div`,{className:`mt-1.5 grid gap-3 sm:grid-cols-2`,children:[e.limitUsage.map(e=>(0,Q.jsx)(ye,{usage:e},`${e.metric}:${e.period}`)),n!=null&&(0,Q.jsxs)(`div`,{className:`text-[11.5px] text-[var(--text-secondary)]`,children:[t(`tokens.rpm`),` · `,(0,Q.jsx)(`span`,{className:`num`,children:t(`tokens.rpmUsage`,{used:e.recentRequests,limit:n})})]})]})]})}function ye({usage:e}){let{t:n,locale:r}=m(),a=`${n(`tokens.period.${e.period}`)} · ${n(`tokens.metric.${e.metric}`)}`,o=t=>e.metric===`cost`?i(t):u(t,!0),s=Math.max(0,Math.min(100,Math.round(e.usedPercent))),c=s>=90?`var(--danger)`:s>=70?`var(--warning)`:`var(--accent)`;return(0,Q.jsxs)(`div`,{children:[(0,Q.jsxs)(`div`,{className:`mb-1 flex items-baseline justify-between gap-2 text-[11.5px]`,children:[(0,Q.jsx)(`span`,{className:`text-[var(--text-secondary)]`,children:a}),(0,Q.jsx)(`span`,{className:`num`,children:n(`tokens.limitUsed`,{used:o(e.used),limit:o(e.limit)})})]}),(0,Q.jsx)(`div`,{role:`progressbar`,"aria-valuenow":s,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a,className:`h-1.5 w-full overflow-hidden rounded-full bg-[var(--surface)]`,children:(0,Q.jsx)(`div`,{className:`h-full rounded-full`,style:{width:`${s}%`,background:c}})}),e.resetsAt&&(0,Q.jsx)(`div`,{className:`mt-1 text-[10.5px] text-[var(--text-muted)]`,children:n(`tokens.limitResets`,{time:t(e.resetsAt,r)})})]})}function $({label:e,value:t,context:n,title:r}){return(0,Q.jsxs)(`div`,{className:`w-24 min-w-0`,title:r,children:[(0,Q.jsx)(`div`,{className:`truncate text-[11px] text-[var(--text-muted)]`,children:e}),(0,Q.jsx)(`div`,{className:`num truncate text-[14px] leading-tight font-semibold`,children:t}),(0,Q.jsx)(`div`,{className:`truncate text-[11px] text-[var(--text-muted)]`,children:n||`\xA0`})]})}function be({today:e,total:t}){let{t:n}=m(),r=[[n(`tokens.today`),e],[n(`tokens.total`),t]],a=`px-3 py-1.5 text-right font-normal whitespace-nowrap text-[var(--text-muted)]`,o=`num px-3 py-1.5 text-right whitespace-nowrap`;return(0,Q.jsx)(`div`,{className:`mt-3 overflow-x-auto rounded-[var(--radius-control)] bg-[var(--surface)]`,children:(0,Q.jsxs)(`table`,{className:`w-full text-[12px]`,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{className:`border-b border-[var(--border-subtle)]`,children:[(0,Q.jsx)(`th`,{className:`${a} text-left`}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.cost`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.requests`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.tokens`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.inOut`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.cacheHit`)}),(0,Q.jsx)(`th`,{className:a,title:n(`tokens.tpsContext`),children:n(`tokens.tps`)})]})}),(0,Q.jsx)(`tbody`,{children:r.map(([e,t])=>(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(`th`,{scope:`row`,className:`px-3 py-1.5 text-left font-medium whitespace-nowrap text-[var(--text-secondary)]`,children:e}),(0,Q.jsx)(`td`,{className:`${o} font-semibold selectable`,children:i(t.costUsd)}),(0,Q.jsx)(`td`,{className:o,children:u(t.requests)}),(0,Q.jsx)(`td`,{className:o,children:u(t.totalTokens,!0)}),(0,Q.jsxs)(`td`,{className:`${o} text-[var(--text-secondary)]`,children:[u(t.inputTokens,!0),` / `,u(t.outputTokens,!0)]}),(0,Q.jsx)(`td`,{className:o,title:n(`usage.cacheAmounts`,{read:u(t.cacheReadTokens,!0),write:u(t.cacheWriteTokens,!0)}),children:t.cacheHitRate==null?`—`:E(t.cacheHitRate)}),(0,Q.jsx)(`td`,{className:o,children:t.tps==null?`—`:l(t.tps)})]},e))})]})})}function xe(){let{t:e}=m(),t=(S().data??[]).filter(e=>e.enabled);return{providers:t,options:[{value:``,label:e(`tokens.directNone`)},...t.map(e=>({value:e.id,label:e.name}))]}}function Se({open:e,onOpenChange:t}){let{t:n}=m(),{toast:r}=F(),i=w(),{options:a}=xe(),[o,s]=(0,Z.useState)(``),[c,l]=(0,Z.useState)(``);return(0,Z.useEffect)(()=>{e&&(s(``),l(``))},[e]),(0,Q.jsx)(P,{open:e,onOpenChange:t,title:n(`tokens.createTitle`),footer:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{onClick:()=>t(!1),children:n(`common.cancel`)}),(0,Q.jsx)(D,{variant:`primary`,disabled:!o.trim(),loading:i.isPending,onClick:()=>i.mutate({name:o.trim(),providerId:c||null},{onSuccess:e=>{t(!1),r(n(`tokens.created`,{name:e.name}),`success`)},onError:e=>r(M(e),`error`)}),children:n(`common.create`)})]}),children:(0,Q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,Q.jsx)(x,{label:n(`tokens.name`),children:(0,Q.jsx)(h,{value:o,maxLength:64,placeholder:n(`tokens.namePlaceholder`),onChange:e=>s(e.target.value)})}),(0,Q.jsx)(x,{label:n(`tokens.directProvider`),children:(0,Q.jsx)(I,{value:c,onChange:l,options:a})})]})})}function Ce({token:e,onClose:t}){let{t:n}=m(),{toast:r}=F(),i=o(),a=S(),[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(null),[f,p]=(0,Z.useState)([]),[g,_]=(0,Z.useState)(null),[v,y]=(0,Z.useState)(`any`),[b,C]=(0,Z.useState)([]),w=new Set(f.map(e=>`${e.metric}:${e.period}`)).size<f.length,E=new Map((e?.pool?.members??[]).map(e=>[e.providerId,e.health]));return(0,Z.useEffect)(()=>{e&&(c(e.name),u(q(e)),p(e.limits?.budgets.map(e=>({...e}))??[]),_(e.limits?.rpm??null),y(e.allowedClients==null?`any`:`only`),C(e.allowedClients??[]))},[e]),(0,Q.jsx)(P,{open:e!==null,onOpenChange:e=>!e&&t(),title:n(`tokens.settingsTitle`,{name:e?.name??``}),footer:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{onClick:t,children:n(`common.cancel`)}),(0,Q.jsx)(D,{variant:`primary`,disabled:!s.trim()||w,loading:i.isPending,onClick:()=>{if(!e)return;let o=f.flatMap(e=>e.limit!=null&&e.limit>0?[{...e,limit:e.limit}]:[]),c=o.length>0||g!=null&&g>0?{budgets:o,rpm:g!=null&&g>0?Math.floor(g):null}:null;i.mutate({id:e.id,name:s.trim(),...l?{pool:G(l,a.data??[])}:{},limits:c,allowedClients:v===`any`?null:b},{onSuccess:()=>{t(),r(n(`common.saved`),`success`)},onError:e=>r(M(e),`error`)})},children:n(`common.save`)})]}),children:(0,Q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,Q.jsx)(x,{label:n(`tokens.name`),children:(0,Q.jsx)(h,{value:s,maxLength:64,onChange:e=>c(e.target.value)})}),(0,Q.jsx)(x,{label:n(`tokens.pool.title`),hint:n(`tokens.pool.hint`),children:l&&(0,Q.jsx)(J,{draft:l,onChange:u,providers:a.data??[],health:E})}),(0,Q.jsx)(x,{label:n(`tokens.limits`),hint:n(`tokens.limitsHint`),error:w?n(`tokens.limitDuplicate`):void 0,children:(0,Q.jsx)(Ee,{budgets:f,onChange:p})}),(0,Q.jsx)(x,{label:n(`tokens.rpm`),hint:n(`tokens.rpmHint`),children:(0,Q.jsx)(T,{value:g,min:1,step:1,label:n(`tokens.rpm`),placeholder:n(`tokens.unlimited`),onChange:_})}),(0,Q.jsx)(x,{label:n(`tokens.allowedClients`),hint:n(`tokens.allowedClientsHint`),children:(0,Q.jsxs)(`div`,{className:`grid gap-2`,children:[(0,Q.jsx)(d,{ariaLabel:n(`tokens.allowedClients`),value:v,onChange:y,items:[{value:`any`,label:n(`tokens.allowedClientsAny`)},{value:`only`,label:n(`tokens.allowedClientsOnly`)}]}),v===`only`&&(0,Q.jsx)(U,{label:n(`tokens.allowedClients`),options:[...new Set([...Object.keys(V),...b])].map(e=>({value:e,label:V[e]?.name??e})),value:b,onValueChange:e=>C(e)})]})})]})})}var we=[`cost`,`requests`,`tokens`],Te=[`day`,`week`,`month`,`total`];function Ee({budgets:e,onChange:t}){let{t:n}=m(),r=(n,r)=>t(e.map((e,t)=>t===n?{...e,...r}:e)),i=we.flatMap(e=>Te.map(t=>({metric:e,period:t}))).find(t=>!e.some(e=>e.metric===t.metric&&e.period===t.period));return(0,Q.jsxs)(`div`,{className:`grid gap-2`,children:[e.length===0&&(0,Q.jsx)(`div`,{className:`text-[12px] text-[var(--text-muted)]`,children:n(`tokens.unlimited`)}),e.map((i,a)=>(0,Q.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_minmax(0,1fr)_auto] items-center gap-2`,children:[(0,Q.jsx)(I,{ariaLabel:n(`tokens.limitMetric`),value:i.metric,onChange:e=>r(a,{metric:e}),options:we.map(e=>({value:e,label:n(`tokens.metric.${e}`)}))}),(0,Q.jsx)(I,{ariaLabel:n(`tokens.limitPeriod`),value:i.period,onChange:e=>r(a,{period:e}),options:Te.map(e=>({value:e,label:n(`tokens.period.${e}`)}))}),(0,Q.jsx)(T,{label:n(`tokens.limitValue`),value:i.limit,min:0,step:i.metric===`cost`?`any`:1,placeholder:n(`tokens.limitValue`),onChange:e=>r(a,{limit:e})}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(z,{className:`size-3.5`}),"aria-label":n(`tokens.removeLimit`),title:n(`tokens.removeLimit`),onClick:()=>t(e.filter((e,t)=>t!==a))})]},a)),i&&(0,Q.jsx)(`div`,{children:(0,Q.jsx)(D,{size:`sm`,icon:(0,Q.jsx)(L,{className:`size-3.5`}),onClick:()=>t([...e,{...i,limit:null}]),children:n(`tokens.addLimit`)})})]})}export{ge as TokensPage};
1
+ import{Ba as e,H as t,J as n,Or as r,Q as i,Rr as a,Ti as o,Tr as s,Ua as c,X as l,Y as u,_ as d,ai as f,c as p,ct as m,d as h,dn as g,fi as _,gt as v,ii as y,kr as b,l as x,lr as S,n as C,nn as w,p as T,q as E,r as D,rn as O,s as ee,t as te,v as k,xt as A,za as j}from"./alert-CuKAE1Sv.js";import{a as M,ct as N,i as P,n as ne,o as F,r as I}from"./overlays-DeHu6TU_.js";import{t as re}from"./chart-column-zt3ZRFLH.js";import{t as ie}from"./ellipsis-BH_FL485.js";import{t as ae}from"./pencil-fY6CohHT.js";import{t as oe}from"./power-B9MMcl6Y.js";import{t as se}from"./rotate-ccw-DsmSscuv.js";import{B as L,F as ce,H as R,P as z,R as le,U as ue,Z as B,_ as V,h as H,s as U,y as W}from"./index-CKrvKDIJ.js";import{a as de,i as G,n as K,r as q,t as J}from"./TokenPoolEditor-DfmDnnxw.js";var Y={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};Y.node;var X=A(Y),fe={name:`user-plus`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]};fe.node;var pe=A(fe),Z=c(e(),1),Q=j(),me=[15,60,1440];function he({token:e,open:n,onOpenChange:r}){let{t:i,locale:a}=m(),{toast:o}=F(),[s,c]=(0,Z.useState)(15),[l,u]=(0,Z.useState)(null),f=y(e.id,n),p=O(e.id),h=b(e.id),g=e=>e<60?i(`tokens.invite.minutes`,{n:e}):i(`tokens.invite.hours`,{n:e/60}),_=()=>p.mutate(s,{onSuccess:async e=>{u(e.link),o(await N.copy(e.link)?i(`tokens.invite.copied`):i(`tokens.copyFailed`),`success`)},onError:e=>o(M(e),`error`)}),v=e=>e===`pending`?`accent`:e===`used`?`green`:`neutral`;return(0,Q.jsx)(P,{open:n,onOpenChange:e=>{e||u(null),r(e)},title:i(`tokens.invite.title`,{name:e.name}),description:i(`tokens.invite.description`),footer:(0,Q.jsx)(D,{variant:`primary`,icon:(0,Q.jsx)(X,{className:`size-3.5`}),loading:p.isPending,onClick:_,children:i(`tokens.invite.generate`)}),children:(0,Q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-secondary)]`,children:i(`tokens.invite.lifetime`)}),(0,Q.jsx)(d,{items:me.map(e=>({value:String(e),label:g(e)})),value:String(s),onChange:e=>c(Number(e)),ariaLabel:i(`tokens.invite.lifetime`)})]}),l&&(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-secondary)]`,children:i(`tokens.invite.linkOnce`)}),(0,Q.jsx)(`code`,{className:`selectable break-all rounded-lg bg-[var(--surface-muted)] px-3 py-2 font-mono text-[11.5px]`,children:l})]}),(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-secondary)]`,children:i(`tokens.invite.recent`)}),(f.data??[]).length===0?(0,Q.jsx)(`p`,{className:`text-[12px] text-[var(--text-muted)]`,children:i(`tokens.invite.none`)}):(0,Q.jsx)(`ul`,{className:`grid gap-1.5`,children:(f.data??[]).map(e=>(0,Q.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 rounded-lg border border-[var(--border)] px-3 py-2 text-[12px]`,children:[(0,Q.jsx)(C,{tone:v(e.status),children:i(`tokens.invite.status.${e.status}`)}),(0,Q.jsx)(`span`,{className:`text-[var(--text-secondary)]`,children:e.status===`used`?i(`tokens.invite.usedAt`,{time:t(e.usedAt,a),ip:e.usedIp??`—`}):i(`tokens.invite.expires`,{time:t(e.expiresAt,a)})}),e.status===`pending`&&(0,Q.jsx)(D,{size:`sm`,variant:`plain`,className:`ml-auto`,loading:h.isPending&&h.variables===e.id,onClick:()=>h.mutate(e.id,{onError:e=>o(M(e),`error`)}),children:i(`tokens.invite.revoke`)})]},e.id))})]})]})})}function ge(){let{t:e}=m(),t=f(),n=a(),r=_(),i=r.data?.state===`connected`?r.data.publicUrl:null,[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(null);return(0,Q.jsxs)(H,{title:e(`nav.tokens`),subtitle:e(`tokens.subtitle`),actions:(0,Q.jsx)(D,{variant:`primary`,icon:(0,Q.jsx)(L,{className:`size-3.5`}),onClick:()=>s(!0),children:e(`tokens.add`)}),children:[(0,Q.jsxs)(`div`,{className:`mx-auto flex max-w-[1100px] flex-col gap-4`,children:[n.data&&(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1 px-1 text-[12px] text-[var(--text-secondary)]`,children:[(0,Q.jsx)(`p`,{children:e(`tokens.directHint`,{url:`${n.data.gatewayBaseUrl}/v1`})}),(0,Q.jsx)(`p`,{className:`selectable`,children:e(`tokens.selfServiceHint`,{url:n.data.gatewayBaseUrl})}),i&&(0,Q.jsx)(`p`,{className:`selectable text-[var(--accent)]`,children:e(`tokens.remoteHint`,{url:`${i}/v1`,key:`${i}/key`})})]}),t.isLoading&&(0,Q.jsx)(k,{lines:4}),t.isError&&(0,Q.jsx)(te,{tone:`danger`,title:e(`common.error`),children:M(t.error)}),t.data?.length===0&&(0,Q.jsx)(`div`,{className:`card`,children:(0,Q.jsx)(p,{icon:(0,Q.jsx)(R,{className:`size-6`}),title:e(`tokens.empty`)})}),t.data&&t.data.length>0&&(0,Q.jsx)(`div`,{className:`card divide-y divide-[var(--border-subtle)] overflow-hidden p-0`,children:t.data.map(e=>(0,Q.jsx)(_e,{token:e,defaultOpen:t.data.length===1,onEdit:()=>l(e)},e.id))})]}),(0,Q.jsx)(Se,{open:o,onOpenChange:s}),(0,Q.jsx)(Ce,{token:c,onClose:()=>l(null)})]})}function _e({token:e,defaultOpen:c,onEdit:l}){let{t:d,locale:f}=m(),{toast:p,confirm:h}=F(),_=S(),y=a(),b=r(),x=o(),w=s(),T=g(),[E,O]=(0,Z.useState)(c),te=(_.data??[]).find(t=>t.id===e.providerId),k=de(),A=`token-detail-${e.id}`,j=(e,t)=>{p(t,`success`),e.skipped.length>0&&p(d(`tokens.skipped`,{clients:e.skipped.map(e=>V[e]?.name??e).join(`, `)}),`error`)},P=()=>b.mutate(e.id,{onSuccess:async({token:e})=>{await N.copy(e)?p(d(`tokens.copied`)):p(d(`tokens.copyFailed`),`error`)},onError:e=>p(M(e),`error`)}),[I,L]=(0,Z.useState)(!1),R=async()=>{let e=y.data?.gatewayBaseUrl;e&&(await N.copy(`${e}/v1`)?p(d(`tokens.urlCopied`)):p(d(`tokens.copyFailed`),`error`))},H=async()=>{let e=y.data?.gatewayBaseUrl;e&&(await N.copy(`npx @aidotnet/astra-connect join ${e}`)?p(d(`tokens.joinCopied`)):p(d(`tokens.copyFailed`),`error`))},U=async()=>{(!e.enabled||await h({title:d(`tokens.disableConfirm`,{name:e.name}),detail:d(`tokens.disableDetail`),confirmLabel:d(`tokens.disable`),destructive:!0}))&&x.mutate({id:e.id,enabled:!e.enabled},{onError:e=>p(M(e),`error`)})},G=async()=>{await h({title:d(`tokens.resetConfirm`,{name:e.name}),detail:d(`tokens.resetDetail`),confirmLabel:d(`tokens.reset`),destructive:!0})&&w.mutate(e.id,{onSuccess:e=>j(e,d(`tokens.resetDone`,{count:e.rewritten.length})),onError:e=>p(M(e),`error`)})},q=async()=>{await h({title:d(`tokens.deleteConfirm`,{name:e.name}),detail:d(`tokens.deleteDetail`),confirmLabel:d(`common.delete`),destructive:!0})&&T.mutate(e.id,{onSuccess:t=>j(t,d(`tokens.deleted`,{name:e.name})),onError:e=>p(M(e),`error`)})},J=e.lastUsedAt?t(e.lastUsedAt,f):d(`tokens.neverUsed`);return(0,Q.jsxs)(`article`,{children:[(0,Q.jsxs)(`div`,{className:`flex cursor-pointer flex-wrap items-center gap-x-5 gap-y-2 px-4 py-3 hover:bg-[var(--surface-muted)]`,onClick:()=>O(e=>!e),children:[(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 basis-56 items-start gap-2`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`mt-0.5 rounded text-[var(--text-muted)]`,"aria-expanded":E,"aria-controls":A,"aria-label":d(`tokens.details`),onClick:e=>{e.stopPropagation(),O(e=>!e)},children:(0,Q.jsx)(ue,{className:`size-4 transition-transform ${E?`rotate-90`:``}`})}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Q.jsx)(`h2`,{className:`truncate text-[14px] font-medium ${e.enabled?``:`text-[var(--text-muted)]`}`,children:e.name}),e.isDefault&&(0,Q.jsx)(C,{tone:`accent`,children:d(`tokens.default`)}),!e.enabled&&(0,Q.jsx)(C,{tone:`orange`,children:d(`tokens.disabledBadge`)}),e.limitUsage.some(e=>e.exhausted)&&(0,Q.jsx)(C,{tone:`orange`,children:d(`tokens.limitExhausted`)}),e.pool&&(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:e.pool.members.map(e=>e.providerId).join(`, `),children:[(0,Q.jsx)(C,{children:d(`tokens.pool.summary`,{count:e.pool.members.length,strategy:d(`tokens.strategy.${e.pool.strategy}`)})}),e.pool.members.map(e=>(0,Q.jsx)(ee,{tone:K(e.health.state)},e.providerId))]})]}),(0,Q.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-1`,onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(`code`,{className:`font-mono text-[12px] text-[var(--text-secondary)] selectable`,children:e.keyMasked}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(v,{className:`size-3.5`}),"aria-label":d(`tokens.copy`),title:d(`tokens.copy`),loading:b.isPending,onClick:P}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(X,{className:`size-3.5`}),"aria-label":d(`tokens.copyUrl`),title:d(`tokens.copyUrl`),disabled:!y.data,onClick:()=>void R()}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(ce,{className:`size-3.5`}),"aria-label":d(`tokens.copyJoin`),title:d(`tokens.copyJoin`),disabled:!y.data,onClick:()=>void H()}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(pe,{className:`size-3.5`}),"aria-label":d(`tokens.invite.open`),title:d(`tokens.invite.open`),disabled:!e.enabled,onClick:()=>L(!0)}),(0,Q.jsx)(he,{token:e,open:I,onOpenChange:L})]})]})]}),(0,Q.jsx)(`div`,{className:`hidden w-16 items-center gap-1.5 md:flex`,title:e.clients.map(e=>V[e]?.name??e).join(`, `)||d(`tokens.noClients`),children:e.clients.length===0?(0,Q.jsx)(`span`,{className:`text-[12px] text-[var(--text-muted)]`,children:`—`}):e.clients.map(e=>(0,Q.jsx)(W,{kind:e,size:16},e))}),(0,Q.jsx)($,{label:d(`tokens.today`),value:i(e.today.costUsd),context:d(`tokens.requestsContext`,{count:u(e.today.requests)})}),(0,Q.jsx)($,{label:d(`tokens.total`),value:i(e.total.costUsd),context:`${u(e.total.totalTokens,!0)} Token`}),(0,Q.jsx)($,{label:d(`tokens.lastUsedTitle`),value:e.lastUsedAt?n(e.lastUsedAt,f):`—`,context:e.lastUsedAt?``:d(`tokens.neverUsed`),title:J}),(0,Q.jsx)(`div`,{onClick:e=>e.stopPropagation(),children:(0,Q.jsx)(ne,{label:d(`common.more`),icon:(0,Q.jsx)(ie,{className:`size-4`}),items:[{id:`settings`,label:d(`tokens.settings`),icon:(0,Q.jsx)(ae,{className:`size-3.5`}),onSelect:l},{id:`toggle`,label:e.enabled?d(`tokens.disable`):d(`tokens.enable`),icon:(0,Q.jsx)(oe,{className:`size-3.5`}),onSelect:()=>void U()},{id:`reset`,label:d(`tokens.reset`),icon:(0,Q.jsx)(se,{className:`size-3.5`}),onSelect:()=>void G()},...e.isDefault?[]:[{id:`delete`,label:d(`tokens.delete`),icon:(0,Q.jsx)(z,{className:`size-3.5`}),destructive:!0,separatorBefore:!0,onSelect:()=>void q()}]]})})]}),E&&(0,Q.jsxs)(`div`,{id:A,className:`border-t border-[var(--border-subtle)] bg-[var(--surface-muted)] px-4 py-3 md:pl-10`,children:[(0,Q.jsxs)(`dl`,{className:`flex flex-wrap gap-x-8 gap-y-2 text-[12px]`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:d(`tokens.clients`)}),(0,Q.jsx)(`dd`,{className:`mt-0.5 flex min-h-5 flex-wrap items-center gap-x-3 gap-y-1 text-[var(--text-secondary)]`,children:e.clients.length===0?d(`tokens.noClients`):e.clients.map(e=>(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Q.jsx)(W,{kind:e,size:14}),V[e]?.name??e]},e))})]}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:e.pool?d(`tokens.pool.title`):d(`tokens.directProvider`)}),e.pool?(0,Q.jsx)(`dd`,{className:`mt-0.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[var(--text-secondary)]`,children:e.pool.members.map(e=>(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:k(e.health),children:[(0,Q.jsx)(ee,{tone:K(e.health.state)}),(_.data??[]).find(t=>t.id===e.providerId)?.name??e.providerId]},e.providerId))}):(0,Q.jsx)(`dd`,{className:`mt-0.5 truncate text-[var(--text-secondary)]`,children:te?.name??(e.providerId?e.providerId:d(`tokens.directNone`))})]}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:d(`tokens.allowedClients`)}),(0,Q.jsx)(`dd`,{className:`mt-0.5 truncate text-[var(--text-secondary)]`,children:e.allowedClients==null?d(`tokens.allowedClientsAny`):e.allowedClients.length===0?d(`tokens.directOnly`):e.allowedClients.map(e=>V[e]?.name??e).join(`, `)})]}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`dt`,{className:`text-[var(--text-muted)]`,children:d(`tokens.lastUsedTitle`)}),(0,Q.jsx)(`dd`,{className:`mt-0.5 truncate text-[var(--text-secondary)]`,children:J})]})]}),(0,Q.jsx)(ve,{token:e}),(0,Q.jsx)(be,{today:e.today,total:e.total}),(0,Q.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,Q.jsx)(B,{to:`/tokens/${encodeURIComponent(e.id)}`,children:(0,Q.jsx)(D,{size:`sm`,icon:(0,Q.jsx)(re,{className:`size-3.5`}),children:d(`tokens.detail.open`)})}),(0,Q.jsx)(B,{to:`/requests?token=${encodeURIComponent(e.id)}`,children:(0,Q.jsx)(D,{size:`sm`,icon:(0,Q.jsx)(le,{className:`size-3.5`}),children:d(`tokens.detail.viewLogs`)})})]})]})]})}function ve({token:e}){let{t}=m(),n=e.limits?.rpm;return(0,Q.jsxs)(`div`,{className:`mt-3`,children:[(0,Q.jsx)(`div`,{className:`text-[12px] text-[var(--text-muted)]`,children:t(`tokens.limits`)}),e.limitUsage.length===0&&n==null?(0,Q.jsx)(`div`,{className:`mt-0.5 text-[12px] text-[var(--text-secondary)]`,children:t(`tokens.unlimited`)}):(0,Q.jsxs)(`div`,{className:`mt-1.5 grid gap-3 sm:grid-cols-2`,children:[e.limitUsage.map(e=>(0,Q.jsx)(ye,{usage:e},`${e.metric}:${e.period}`)),n!=null&&(0,Q.jsxs)(`div`,{className:`text-[11.5px] text-[var(--text-secondary)]`,children:[t(`tokens.rpm`),` · `,(0,Q.jsx)(`span`,{className:`num`,children:t(`tokens.rpmUsage`,{used:e.recentRequests,limit:n})})]})]})]})}function ye({usage:e}){let{t:n,locale:r}=m(),a=`${n(`tokens.period.${e.period}`)} · ${n(`tokens.metric.${e.metric}`)}`,o=t=>e.metric===`cost`?i(t):u(t,!0),s=Math.max(0,Math.min(100,Math.round(e.usedPercent))),c=s>=90?`var(--danger)`:s>=70?`var(--warning)`:`var(--accent)`;return(0,Q.jsxs)(`div`,{children:[(0,Q.jsxs)(`div`,{className:`mb-1 flex items-baseline justify-between gap-2 text-[11.5px]`,children:[(0,Q.jsx)(`span`,{className:`text-[var(--text-secondary)]`,children:a}),(0,Q.jsx)(`span`,{className:`num`,children:n(`tokens.limitUsed`,{used:o(e.used),limit:o(e.limit)})})]}),(0,Q.jsx)(`div`,{role:`progressbar`,"aria-valuenow":s,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a,className:`h-1.5 w-full overflow-hidden rounded-full bg-[var(--surface)]`,children:(0,Q.jsx)(`div`,{className:`h-full rounded-full`,style:{width:`${s}%`,background:c}})}),e.resetsAt&&(0,Q.jsx)(`div`,{className:`mt-1 text-[10.5px] text-[var(--text-muted)]`,children:n(`tokens.limitResets`,{time:t(e.resetsAt,r)})})]})}function $({label:e,value:t,context:n,title:r}){return(0,Q.jsxs)(`div`,{className:`w-24 min-w-0`,title:r,children:[(0,Q.jsx)(`div`,{className:`truncate text-[11px] text-[var(--text-muted)]`,children:e}),(0,Q.jsx)(`div`,{className:`num truncate text-[14px] leading-tight font-semibold`,children:t}),(0,Q.jsx)(`div`,{className:`truncate text-[11px] text-[var(--text-muted)]`,children:n||`\xA0`})]})}function be({today:e,total:t}){let{t:n}=m(),r=[[n(`tokens.today`),e],[n(`tokens.total`),t]],a=`px-3 py-1.5 text-right font-normal whitespace-nowrap text-[var(--text-muted)]`,o=`num px-3 py-1.5 text-right whitespace-nowrap`;return(0,Q.jsx)(`div`,{className:`mt-3 overflow-x-auto rounded-[var(--radius-control)] bg-[var(--surface)]`,children:(0,Q.jsxs)(`table`,{className:`w-full text-[12px]`,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{className:`border-b border-[var(--border-subtle)]`,children:[(0,Q.jsx)(`th`,{className:`${a} text-left`}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.cost`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.requests`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.tokens`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.inOut`)}),(0,Q.jsx)(`th`,{className:a,children:n(`tokens.cacheHit`)}),(0,Q.jsx)(`th`,{className:a,title:n(`tokens.tpsContext`),children:n(`tokens.tps`)})]})}),(0,Q.jsx)(`tbody`,{children:r.map(([e,t])=>(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(`th`,{scope:`row`,className:`px-3 py-1.5 text-left font-medium whitespace-nowrap text-[var(--text-secondary)]`,children:e}),(0,Q.jsx)(`td`,{className:`${o} font-semibold selectable`,children:i(t.costUsd)}),(0,Q.jsx)(`td`,{className:o,children:u(t.requests)}),(0,Q.jsx)(`td`,{className:o,children:u(t.totalTokens,!0)}),(0,Q.jsxs)(`td`,{className:`${o} text-[var(--text-secondary)]`,children:[u(t.inputTokens,!0),` / `,u(t.outputTokens,!0)]}),(0,Q.jsx)(`td`,{className:o,title:n(`usage.cacheAmounts`,{read:u(t.cacheReadTokens,!0),write:u(t.cacheWriteTokens,!0)}),children:t.cacheHitRate==null?`—`:E(t.cacheHitRate)}),(0,Q.jsx)(`td`,{className:o,children:t.tps==null?`—`:l(t.tps)})]},e))})]})})}function xe(){let{t:e}=m(),t=(S().data??[]).filter(e=>e.enabled);return{providers:t,options:[{value:``,label:e(`tokens.directNone`)},...t.map(e=>({value:e.id,label:e.name}))]}}function Se({open:e,onOpenChange:t}){let{t:n}=m(),{toast:r}=F(),i=w(),{options:a}=xe(),[o,s]=(0,Z.useState)(``),[c,l]=(0,Z.useState)(``);return(0,Z.useEffect)(()=>{e&&(s(``),l(``))},[e]),(0,Q.jsx)(P,{open:e,onOpenChange:t,title:n(`tokens.createTitle`),footer:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{onClick:()=>t(!1),children:n(`common.cancel`)}),(0,Q.jsx)(D,{variant:`primary`,disabled:!o.trim(),loading:i.isPending,onClick:()=>i.mutate({name:o.trim(),providerId:c||null},{onSuccess:e=>{t(!1),r(n(`tokens.created`,{name:e.name}),`success`)},onError:e=>r(M(e),`error`)}),children:n(`common.create`)})]}),children:(0,Q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,Q.jsx)(x,{label:n(`tokens.name`),children:(0,Q.jsx)(h,{value:o,maxLength:64,placeholder:n(`tokens.namePlaceholder`),onChange:e=>s(e.target.value)})}),(0,Q.jsx)(x,{label:n(`tokens.directProvider`),children:(0,Q.jsx)(I,{value:c,onChange:l,options:a})})]})})}function Ce({token:e,onClose:t}){let{t:n}=m(),{toast:r}=F(),i=o(),a=S(),[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(null),[f,p]=(0,Z.useState)([]),[g,_]=(0,Z.useState)(null),[v,y]=(0,Z.useState)(`any`),[b,C]=(0,Z.useState)([]),w=new Set(f.map(e=>`${e.metric}:${e.period}`)).size<f.length,E=new Map((e?.pool?.members??[]).map(e=>[e.providerId,e.health]));return(0,Z.useEffect)(()=>{e&&(c(e.name),u(q(e)),p(e.limits?.budgets.map(e=>({...e}))??[]),_(e.limits?.rpm??null),y(e.allowedClients==null?`any`:`only`),C(e.allowedClients??[]))},[e]),(0,Q.jsx)(P,{open:e!==null,onOpenChange:e=>!e&&t(),title:n(`tokens.settingsTitle`,{name:e?.name??``}),footer:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{onClick:t,children:n(`common.cancel`)}),(0,Q.jsx)(D,{variant:`primary`,disabled:!s.trim()||w,loading:i.isPending,onClick:()=>{if(!e)return;let o=f.flatMap(e=>e.limit!=null&&e.limit>0?[{...e,limit:e.limit}]:[]),c=o.length>0||g!=null&&g>0?{budgets:o,rpm:g!=null&&g>0?Math.floor(g):null}:null;i.mutate({id:e.id,name:s.trim(),...l?{pool:G(l,a.data??[])}:{},limits:c,allowedClients:v===`any`?null:b},{onSuccess:()=>{t(),r(n(`common.saved`),`success`)},onError:e=>r(M(e),`error`)})},children:n(`common.save`)})]}),children:(0,Q.jsxs)(`div`,{className:`grid gap-4`,children:[(0,Q.jsx)(x,{label:n(`tokens.name`),children:(0,Q.jsx)(h,{value:s,maxLength:64,onChange:e=>c(e.target.value)})}),(0,Q.jsx)(x,{label:n(`tokens.pool.title`),hint:n(`tokens.pool.hint`),children:l&&(0,Q.jsx)(J,{draft:l,onChange:u,providers:a.data??[],health:E})}),(0,Q.jsx)(x,{label:n(`tokens.limits`),hint:n(`tokens.limitsHint`),error:w?n(`tokens.limitDuplicate`):void 0,children:(0,Q.jsx)(Ee,{budgets:f,onChange:p})}),(0,Q.jsx)(x,{label:n(`tokens.rpm`),hint:n(`tokens.rpmHint`),children:(0,Q.jsx)(T,{value:g,min:1,step:1,label:n(`tokens.rpm`),placeholder:n(`tokens.unlimited`),onChange:_})}),(0,Q.jsx)(x,{label:n(`tokens.allowedClients`),hint:n(`tokens.allowedClientsHint`),children:(0,Q.jsxs)(`div`,{className:`grid gap-2`,children:[(0,Q.jsx)(d,{ariaLabel:n(`tokens.allowedClients`),value:v,onChange:y,items:[{value:`any`,label:n(`tokens.allowedClientsAny`)},{value:`only`,label:n(`tokens.allowedClientsOnly`)}]}),v===`only`&&(0,Q.jsx)(U,{label:n(`tokens.allowedClients`),options:[...new Set([...Object.keys(V),...b])].map(e=>({value:e,label:V[e]?.name??e})),value:b,onValueChange:e=>C(e)})]})})]})})}var we=[`cost`,`requests`,`tokens`],Te=[`day`,`week`,`month`,`total`];function Ee({budgets:e,onChange:t}){let{t:n}=m(),r=(n,r)=>t(e.map((e,t)=>t===n?{...e,...r}:e)),i=we.flatMap(e=>Te.map(t=>({metric:e,period:t}))).find(t=>!e.some(e=>e.metric===t.metric&&e.period===t.period));return(0,Q.jsxs)(`div`,{className:`grid gap-2`,children:[e.length===0&&(0,Q.jsx)(`div`,{className:`text-[12px] text-[var(--text-muted)]`,children:n(`tokens.unlimited`)}),e.map((i,a)=>(0,Q.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_minmax(0,1fr)_auto] items-center gap-2`,children:[(0,Q.jsx)(I,{ariaLabel:n(`tokens.limitMetric`),value:i.metric,onChange:e=>r(a,{metric:e}),options:we.map(e=>({value:e,label:n(`tokens.metric.${e}`)}))}),(0,Q.jsx)(I,{ariaLabel:n(`tokens.limitPeriod`),value:i.period,onChange:e=>r(a,{period:e}),options:Te.map(e=>({value:e,label:n(`tokens.period.${e}`)}))}),(0,Q.jsx)(T,{label:n(`tokens.limitValue`),value:i.limit,min:0,step:i.metric===`cost`?`any`:1,placeholder:n(`tokens.limitValue`),onChange:e=>r(a,{limit:e})}),(0,Q.jsx)(D,{size:`sm`,variant:`plain`,icon:(0,Q.jsx)(z,{className:`size-3.5`}),"aria-label":n(`tokens.removeLimit`),title:n(`tokens.removeLimit`),onClick:()=>t(e.filter((e,t)=>t!==a))})]},a)),i&&(0,Q.jsx)(`div`,{children:(0,Q.jsx)(D,{size:`sm`,icon:(0,Q.jsx)(L,{className:`size-3.5`}),onClick:()=>t([...e,{...i,limit:null}]),children:n(`tokens.addLimit`)})})]})}export{ge as TokensPage};