@lunora/studio 1.0.0-alpha.241 → 1.0.0-alpha.243
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/mount.mjs +1 -1
- package/dist/packem_chunks/AdvisorHealthPanel.mjs +1 -1
- package/dist/packem_chunks/AuditPanel.mjs +1 -1
- package/dist/packem_chunks/DeploymentHealthPanel.mjs +1 -1
- package/dist/packem_chunks/ExportImportPanel.mjs +1 -1
- package/dist/packem_chunks/FileBrowser.mjs +1 -1
- package/dist/packem_chunks/FunctionStatsPanel.mjs +1 -1
- package/dist/packem_chunks/HealthPanel.mjs +1 -1
- package/dist/packem_chunks/InsightsPanel.mjs +1 -1
- package/dist/packem_chunks/MetricsPanel.mjs +1 -1
- package/dist/packem_chunks/NotificationsPanel.mjs +1 -1
- package/dist/packem_chunks/SchemaViewer.mjs +1 -1
- package/dist/packem_chunks/SecurityAdvisorPanel.mjs +1 -1
- package/dist/packem_chunks/SettingsPanel.mjs +1 -1
- package/dist/packem_chunks/agents-panel.mjs +1 -1
- package/dist/packem_chunks/ai-usage-panel.mjs +1 -0
- package/dist/packem_chunks/analytics-panel.mjs +1 -1
- package/dist/packem_chunks/auth-audit-panel.mjs +1 -1
- package/dist/packem_chunks/auth-config-panel.mjs +1 -1
- package/dist/packem_chunks/auth-sessions-panel.mjs +1 -1
- package/dist/packem_chunks/containers-panel.mjs +1 -1
- package/dist/packem_chunks/dashboards-panel.mjs +1 -1
- package/dist/packem_chunks/evals-panel.mjs +1 -1
- package/dist/packem_chunks/fanout-panel.mjs +1 -1
- package/dist/packem_chunks/flags-panel.mjs +1 -1
- package/dist/packem_chunks/issues-panel.mjs +1 -1
- package/dist/packem_chunks/kv-browser.mjs +1 -1
- package/dist/packem_chunks/log-drains-panel.mjs +1 -1
- package/dist/packem_chunks/migrations-route.mjs +1 -1
- package/dist/packem_chunks/organizations-panel.mjs +1 -1
- package/dist/packem_chunks/payments-panel.mjs +1 -1
- package/dist/packem_chunks/permissions-panel.mjs +1 -1
- package/dist/packem_chunks/queues-panel.mjs +1 -1
- package/dist/packem_chunks/reactors-panel.mjs +1 -1
- package/dist/packem_chunks/rls-panel.mjs +1 -1
- package/dist/packem_chunks/schedule-panel.mjs +1 -1
- package/dist/packem_chunks/storage-rules-panel.mjs +1 -1
- package/dist/packem_chunks/subscriptions-panel.mjs +1 -1
- package/dist/packem_chunks/sync-client-panel.mjs +1 -1
- package/dist/packem_chunks/users-panel.mjs +1 -1
- package/dist/packem_chunks/vector-browser.mjs +1 -1
- package/dist/packem_chunks/workflows-panel.mjs +1 -1
- package/dist/packem_shared/{HomePanel-fJZRA0b0.mjs → HomePanel-C-g2umyB.mjs} +1 -1
- package/dist/packem_shared/{MigrationsPanel-QjQ4Gp9s.mjs → MigrationsPanel-CkVIwAbK.mjs} +1 -1
- package/dist/packem_shared/{ScheduledJobs-nPx7NmOE.mjs → ScheduledJobs-BZNcYWBP.mjs} +1 -1
- package/dist/packem_shared/{Studio-DQq17PO6.mjs → Studio-qyqfHiQ3.mjs} +1 -1
- package/dist/packem_shared/{StudioApp-DikgPBVJ.mjs → StudioApp-BwOFVJBy.mjs} +1 -1
- package/dist/packem_shared/{advisor-view-BzzJg9D_.mjs → advisor-view-DzI2RQhY.mjs} +1 -1
- package/dist/packem_shared/{card--2hKx4L2.mjs → card-By2O8ULa.mjs} +1 -1
- package/dist/packem_shared/{home-panel-DBSHjxil.mjs → home-panel-DIaVZra4.mjs} +1 -1
- package/dist/packem_shared/metrics-format-1sNGG47R.mjs +1 -0
- package/dist/packem_shared/{stat-card-D0Fe04cX.mjs → stat-card-BAv73QtB.mjs} +1 -1
- package/dist/packem_shared/studio-CwC7cOyC.mjs +2 -0
- package/dist/standalone/{chunk-7HAPF2LE.js → chunk-2HY4GAQY.js} +1 -1
- package/dist/standalone/{chunk-2J55YJ2E.js → chunk-4QUB5WPV.js} +1 -1
- package/dist/standalone/{chunk-C5AOTUZH.js → chunk-5KBJZ4Y3.js} +1 -1
- package/dist/standalone/{chunk-G7FODHE4.js → chunk-64XGCH2E.js} +1 -1
- package/dist/standalone/{chunk-BCGDH443.js → chunk-7JGTUSOT.js} +1 -1
- package/dist/standalone/{chunk-3CKNGJM2.js → chunk-ABI4UTMQ.js} +1 -1
- package/dist/standalone/{chunk-4REGPZ4H.js → chunk-AD6LC5L4.js} +1 -1
- package/dist/standalone/{chunk-EBVHCQDJ.js → chunk-APFGNPBU.js} +1 -1
- package/dist/standalone/{chunk-2QSGCPIS.js → chunk-DGBGXHZJ.js} +1 -1
- package/dist/standalone/{chunk-FXOLFSG4.js → chunk-DX62WXRQ.js} +1 -1
- package/dist/standalone/{chunk-5EBY4EMG.js → chunk-EF5EP4H4.js} +1 -1
- package/dist/standalone/{chunk-IZTVQDA3.js → chunk-EOJGY4KT.js} +1 -1
- package/dist/standalone/{chunk-6HMCWDDT.js → chunk-FU6KXKCY.js} +1 -1
- package/dist/standalone/{chunk-7G7ISHLL.js → chunk-GI6VG5KL.js} +1 -1
- package/dist/standalone/{chunk-NT2KYUYG.js → chunk-GSP2UBRG.js} +1 -1
- package/dist/standalone/{chunk-M5UWPXQ3.js → chunk-HJSSAZOB.js} +1 -1
- package/dist/standalone/chunk-JDBKYSJB.js +1 -0
- package/dist/standalone/{chunk-34NWQW5I.js → chunk-JFC25AES.js} +1 -1
- package/dist/standalone/{chunk-VL2YOLHO.js → chunk-JQA7JSU6.js} +1 -1
- package/dist/standalone/{chunk-SS2DZEKJ.js → chunk-JUFPH3CX.js} +1 -1
- package/dist/standalone/{chunk-Q3LDA6LU.js → chunk-K2OCBRZU.js} +1 -1
- package/dist/standalone/{chunk-ZFC65NB2.js → chunk-KASEJ6PD.js} +1 -1
- package/dist/standalone/{chunk-CZ266IR3.js → chunk-KY2LM7KA.js} +1 -1
- package/dist/standalone/{chunk-57L4KVGF.js → chunk-LDQV5EKL.js} +1 -1
- package/dist/standalone/{chunk-2QEZHNYN.js → chunk-LYTWR224.js} +1 -1
- package/dist/standalone/chunk-M3EMYLKT.js +1 -0
- package/dist/standalone/{chunk-U3N3BHO4.js → chunk-MB35H5WR.js} +1 -1
- package/dist/standalone/{chunk-4XEY3TRX.js → chunk-MJOIEIF4.js} +1 -1
- package/dist/standalone/{chunk-SPGA4XL7.js → chunk-MPXKLN5U.js} +1 -1
- package/dist/standalone/{chunk-PDSH4NPA.js → chunk-N4JXPUC7.js} +1 -1
- package/dist/standalone/{chunk-WDVLOAJ4.js → chunk-NJUFB27M.js} +1 -1
- package/dist/standalone/{chunk-F7UC63UN.js → chunk-NYKWTNZX.js} +1 -1
- package/dist/standalone/chunk-O3EVDJD5.js +1 -0
- package/dist/standalone/{chunk-EKI5NWS5.js → chunk-O7BPLDZ6.js} +1 -1
- package/dist/standalone/chunk-Q3IUNFQF.js +1 -0
- package/dist/standalone/{chunk-6MQFFSKJ.js → chunk-QA2B3HWI.js} +1 -1
- package/dist/standalone/{chunk-NVIFBILD.js → chunk-RECJHPFD.js} +1 -1
- package/dist/standalone/{chunk-ES7C5MLI.js → chunk-RKP6Y74Y.js} +1 -1
- package/dist/standalone/{chunk-TNFY5M3M.js → chunk-SXGEDI37.js} +1 -1
- package/dist/standalone/{chunk-ZGHK6YA6.js → chunk-TUAO4PU2.js} +1 -1
- package/dist/standalone/{chunk-44JBWMGP.js → chunk-UIXGA3LA.js} +1 -1
- package/dist/standalone/{chunk-7Z77NNDU.js → chunk-V4LBYSX2.js} +1 -1
- package/dist/standalone/{chunk-FHG2QEL4.js → chunk-WQJEBARW.js} +1 -1
- package/dist/standalone/{chunk-3EYROC6C.js → chunk-WZI2ZAPQ.js} +1 -1
- package/dist/standalone/{chunk-SJVMPGAR.js → chunk-Z24BPRKD.js} +1 -1
- package/dist/standalone/{chunk-DXVAAESF.js → chunk-ZL3PYVET.js} +1 -1
- package/dist/standalone/studio.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -5
- package/dist/packem_shared/studio-ajWxPNfI.mjs +0 -2
- package/dist/standalone/chunk-CZMVDPDO.js +0 -1
- package/dist/standalone/chunk-SXGQQHMD.js +0 -1
- /package/dist/standalone/{chunk-WUWBZPUK.js → chunk-N6NMLJ6R.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as G}from"react/compiler-runtime";import{useLunora as se}from"@lunora/react";import{useState as F}from"react";import{B as L}from"../packem_shared/button-q0UYSmrn.mjs";import{a as kt,C as wt}from"../packem_shared/card--2hKx4L2.mjs";import{E as Ve}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as de,a as Dt,b as mt,e as ce,d as zt,T as At}from"../packem_shared/table-D0SBiDu-.mjs";import{b as Ke}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{u as Rt}from"../packem_shared/use-auth-config-Z_n4ABCI.mjs";import{useAutoRefresh as Nt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{useT as q}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{k as z,f as Et,b as Ft,h as jt}from"../packem_shared/internal-Df43vQI0.mjs";import{u as Lt,A as Ot}from"../packem_shared/auth-pager-DiDnXsfe.mjs";import{I as X}from"../packem_shared/input-CXhxesPC.mjs";import{L as Pt}from"../packem_shared/label-DKFzyHq6.mjs";import{M as Bt}from"../packem_shared/modal-shell-CDztwLnv.mjs";import{T as _t}from"../packem_shared/textarea--40GKAyz.mjs";import{u as ae}from"../packem_shared/use-async-submit-CZqCMTJ_.mjs";import{jsx as n,jsxs as R,Fragment as dt}from"react/jsx-runtime";const Tt=t=>{const e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("Expected a JSON object");return e},Qt=t=>{const e=Tt(t),l={};for(const[d,u]of Object.entries(e)){if(!Array.isArray(u)||u.some(s=>typeof s!="string"))throw new TypeError(`"${d}" must map to an array of action strings`);l[d]=u}return l},$t=t=>t==null||t===""?"":typeof t=="string"?t:JSON.stringify(t,null,2),V=t=>{const e=G(6),{children:l,htmlFor:d,label:u}=t;let s;e[0]!==d||e[1]!==u?(s=n(Pt,{htmlFor:d,children:u}),e[0]=d,e[1]=u,e[2]=s):s=e[2];let o;return e[3]!==l||e[4]!==s?(o=R("div",{className:"flex flex-col gap-1",children:[s,l]}),e[3]=l,e[4]=s,e[5]=o):o=e[5],o},me=({busy:t,canSubmit:e,children:l,destructive:d=!1,error:u,onClose:s,onSubmit:o,submitLabel:i,testId:r,title:m})=>{const a=q();return R(Bt,{label:m,onClose:s,panelTestId:`${r}-panel`,testId:`${r}-overlay`,variant:"dialog",children:[n("h2",{className:"text-sm font-semibold text-foreground",children:m}),l,u!==null&&n("p",{className:"text-sm text-destructive","data-testid":`${r}-error`,role:"alert",children:u}),R("div",{className:"flex justify-end gap-2 pt-1",children:[n(L,{"data-testid":`${r}-cancel`,onClick:s,size:"sm",type:"button",variant:"outline",children:a("Cancel")}),n(L,{"data-testid":`${r}-submit`,disabled:t||!e,onClick:o,size:"sm",type:"button",variant:d?"destructive":"default",children:t?a("Saving…"):i})]})]})},yt=t=>{const e=G(79),{mode:l,onClose:d,onDone:u,org:s}=t,o=se(),i=q(),{busy:r,error:m,run:a}=ae();let h;e[0]!==s?(h=s?z(s.name):"",e[0]=s,e[1]=h):h=e[1];const[c,g]=F(h);let p;e[2]!==s?(p=s?z(s.slug):"",e[2]=s,e[3]=p):p=e[3];const[f,b]=F(p);let S;e[4]!==s?(S=s?z(s.logo):"",e[4]=s,e[5]=S):S=e[5];const[v,C]=F(S),[y,I]=F("");let x;e[6]!==l||e[7]!==s?.metadata?(x=l==="edit"?$t(s?.metadata):"",e[6]=l,e[7]=s?.metadata,e[8]=x):x=e[8];const[k,D]=F(x);let O;e[9]!==o||e[10]!==v||e[11]!==k||e[12]!==l||e[13]!==c||e[14]!==d||e[15]!==u||e[16]!==s?.id||e[17]!==y||e[18]!==a||e[19]!==f?(O=()=>{a(async()=>{const w=k.trim()===""?void 0:Tt(k);l==="create"?await o.createAuthOrganization({logo:v.trim()===""?void 0:v.trim(),metadata:w,name:c.trim(),ownerId:y.trim()===""?void 0:y.trim(),slug:f.trim()===""?void 0:f.trim()}):await o.updateAuthOrganization({logo:v.trim()===""?void 0:v.trim(),metadata:w,name:c.trim()===""?void 0:c.trim(),organizationId:z(s?.id),slug:f.trim()===""?void 0:f.trim()}),u(),d()})},e[9]=o,e[10]=v,e[11]=k,e[12]=l,e[13]=c,e[14]=d,e[15]=u,e[16]=s?.id,e[17]=y,e[18]=a,e[19]=f,e[20]=O):O=e[20];const A=O;let N;e[21]!==l||e[22]!==c?(N=c.trim()!==""||l==="edit",e[21]=l,e[22]=c,e[23]=N):N=e[23];let _;e[24]!==l||e[25]!==i?(_=i(l==="create"?"Create":"Save"),e[24]=l,e[25]=i,e[26]=_):_=e[26];let T;e[27]!==l||e[28]!==i?(T=i(l==="create"?"New organization":"Edit organization"),e[27]=l,e[28]=i,e[29]=T):T=e[29];let E;e[30]!==i?(E=i("name"),e[30]=i,e[31]=E):E=e[31];let H;e[32]===Symbol.for("react.memo_cache_sentinel")?(H=w=>{g(w.target.value)},e[32]=H):H=e[32];let B;e[33]!==c?(B=n(X,{"data-testid":"org-form-name",id:"org-form-name",onChange:H,value:c}),e[33]=c,e[34]=B):B=e[34];let U;e[35]!==B||e[36]!==E?(U=n(V,{htmlFor:"org-form-name",label:E,children:B}),e[35]=B,e[36]=E,e[37]=U):U=e[37];let Q;e[38]!==i?(Q=i("Slug (optional — derived from name)"),e[38]=i,e[39]=Q):Q=e[39];let P;e[40]===Symbol.for("react.memo_cache_sentinel")?(P=w=>{b(w.target.value)},e[40]=P):P=e[40];let J;e[41]!==f?(J=n(X,{"data-testid":"org-form-slug",id:"org-form-slug",onChange:P,value:f}),e[41]=f,e[42]=J):J=e[42];let j;e[43]!==Q||e[44]!==J?(j=n(V,{htmlFor:"org-form-slug",label:Q,children:J}),e[43]=Q,e[44]=J,e[45]=j):j=e[45];let Z;e[46]!==i?(Z=i("Logo URL (optional)"),e[46]=i,e[47]=Z):Z=e[47];let M;e[48]===Symbol.for("react.memo_cache_sentinel")?(M=w=>{C(w.target.value)},e[48]=M):M=e[48];let $;e[49]!==v?($=n(X,{"data-testid":"org-form-logo",id:"org-form-logo",onChange:M,value:v}),e[49]=v,e[50]=$):$=e[50];let K;e[51]!==Z||e[52]!==$?(K=n(V,{htmlFor:"org-form-logo",label:Z,children:$}),e[51]=Z,e[52]=$,e[53]=K):K=e[53];let Y;e[54]!==l||e[55]!==y||e[56]!==i?(Y=l==="create"&&n(V,{htmlFor:"org-form-owner",label:i("Owner user id (optional)"),children:n(X,{"data-testid":"org-form-owner",id:"org-form-owner",onChange:w=>{I(w.target.value)},value:y})}),e[54]=l,e[55]=y,e[56]=i,e[57]=Y):Y=e[57];let te;e[58]!==i?(te=i("Metadata (JSON, optional)"),e[58]=i,e[59]=te):te=e[59];let oe;e[60]===Symbol.for("react.memo_cache_sentinel")?(oe=w=>{D(w.target.value)},e[60]=oe):oe=e[60];let le;e[61]!==k?(le=n(_t,{"data-testid":"org-form-metadata",id:"org-form-metadata",onChange:oe,value:k}),e[61]=k,e[62]=le):le=e[62];let ee;e[63]!==te||e[64]!==le?(ee=n(V,{htmlFor:"org-form-metadata",label:te,children:le}),e[63]=te,e[64]=le,e[65]=ee):ee=e[65];let ie;return e[66]!==r||e[67]!==m||e[68]!==d||e[69]!==A||e[70]!==U||e[71]!==j||e[72]!==K||e[73]!==Y||e[74]!==ee||e[75]!==N||e[76]!==_||e[77]!==T?(ie=R(me,{busy:r,canSubmit:N,error:m,onClose:d,onSubmit:A,submitLabel:_,testId:"org-form",title:T,children:[U,j,K,Y,ee]}),e[66]=r,e[67]=m,e[68]=d,e[69]=A,e[70]=U,e[71]=j,e[72]=K,e[73]=Y,e[74]=ee,e[75]=N,e[76]=_,e[77]=T,e[78]=ie):ie=e[78],ie},Jt=t=>{const e=G(40),{onClose:l,onDone:d,organizationId:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae(),[a,h]=F(""),[c,g]=F("");let p;e[0]!==s||e[1]!==l||e[2]!==d||e[3]!==u||e[4]!==c||e[5]!==m||e[6]!==a?(p=()=>{m(async()=>{await s.addAuthOrgMember({organizationId:u,role:c.trim()===""?void 0:c.trim(),userId:a.trim()}),d(),l()})},e[0]=s,e[1]=l,e[2]=d,e[3]=u,e[4]=c,e[5]=m,e[6]=a,e[7]=p):p=e[7];const f=p;let b;e[8]!==a?(b=a.trim(),e[8]=a,e[9]=b):b=e[9];const S=b!=="";let v;e[10]!==o?(v=o("Add member"),e[10]=o,e[11]=v):v=e[11];let C;e[12]!==o?(C=o("Add member"),e[12]=o,e[13]=C):C=e[13];let y;e[14]!==o?(y=o("User id"),e[14]=o,e[15]=y):y=e[15];let I;e[16]===Symbol.for("react.memo_cache_sentinel")?(I=T=>{h(T.target.value)},e[16]=I):I=e[16];let x;e[17]!==a?(x=n(X,{"data-testid":"org-add-member-user",id:"org-add-member-user",onChange:I,value:a}),e[17]=a,e[18]=x):x=e[18];let k;e[19]!==y||e[20]!==x?(k=n(V,{htmlFor:"org-add-member-user",label:y,children:x}),e[19]=y,e[20]=x,e[21]=k):k=e[21];let D;e[22]!==o?(D=o("Role (optional)"),e[22]=o,e[23]=D):D=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=T=>{g(T.target.value)},e[24]=O):O=e[24];let A;e[25]!==c?(A=n(X,{"data-testid":"org-add-member-role",id:"org-add-member-role",onChange:O,value:c}),e[25]=c,e[26]=A):A=e[26];let N;e[27]!==D||e[28]!==A?(N=n(V,{htmlFor:"org-add-member-role",label:D,children:A}),e[27]=D,e[28]=A,e[29]=N):N=e[29];let _;return e[30]!==i||e[31]!==r||e[32]!==l||e[33]!==f||e[34]!==N||e[35]!==S||e[36]!==v||e[37]!==C||e[38]!==k?(_=R(me,{busy:i,canSubmit:S,error:r,onClose:l,onSubmit:f,submitLabel:v,testId:"org-add-member",title:C,children:[k,N]}),e[30]=i,e[31]=r,e[32]=l,e[33]=f,e[34]=N,e[35]=S,e[36]=v,e[37]=C,e[38]=k,e[39]=_):_=e[39],_},Ut=t=>{const e=G(40),{onClose:l,onDone:d,organizationId:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae(),[a,h]=F(""),[c,g]=F("");let p;e[0]!==s||e[1]!==a||e[2]!==l||e[3]!==d||e[4]!==u||e[5]!==c||e[6]!==m?(p=()=>{m(async()=>{await s.inviteAuthOrgMember({email:a.trim(),organizationId:u,role:c.trim()===""?void 0:c.trim()}),d(),l()})},e[0]=s,e[1]=a,e[2]=l,e[3]=d,e[4]=u,e[5]=c,e[6]=m,e[7]=p):p=e[7];const f=p;let b;e[8]!==a?(b=a.trim(),e[8]=a,e[9]=b):b=e[9];const S=b!=="";let v;e[10]!==o?(v=o("Send invitation"),e[10]=o,e[11]=v):v=e[11];let C;e[12]!==o?(C=o("Invite member"),e[12]=o,e[13]=C):C=e[13];let y;e[14]!==o?(y=o("email"),e[14]=o,e[15]=y):y=e[15];let I;e[16]===Symbol.for("react.memo_cache_sentinel")?(I=T=>{h(T.target.value)},e[16]=I):I=e[16];let x;e[17]!==a?(x=n(X,{"data-testid":"org-invite-member-email",id:"org-invite-member-email",onChange:I,type:"email",value:a}),e[17]=a,e[18]=x):x=e[18];let k;e[19]!==y||e[20]!==x?(k=n(V,{htmlFor:"org-invite-member-email",label:y,children:x}),e[19]=y,e[20]=x,e[21]=k):k=e[21];let D;e[22]!==o?(D=o("Role (optional)"),e[22]=o,e[23]=D):D=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=T=>{g(T.target.value)},e[24]=O):O=e[24];let A;e[25]!==c?(A=n(X,{"data-testid":"org-invite-member-role",id:"org-invite-member-role",onChange:O,value:c}),e[25]=c,e[26]=A):A=e[26];let N;e[27]!==D||e[28]!==A?(N=n(V,{htmlFor:"org-invite-member-role",label:D,children:A}),e[27]=D,e[28]=A,e[29]=N):N=e[29];let _;return e[30]!==i||e[31]!==r||e[32]!==l||e[33]!==f||e[34]!==N||e[35]!==S||e[36]!==v||e[37]!==C||e[38]!==k?(_=R(me,{busy:i,canSubmit:S,error:r,onClose:l,onSubmit:f,submitLabel:v,testId:"org-invite-member",title:C,children:[k,N]}),e[30]=i,e[31]=r,e[32]=l,e[33]=f,e[34]=N,e[35]=S,e[36]=v,e[37]=C,e[38]=k,e[39]=_):_=e[39],_},Gt=t=>{const e=G(32),{member:l,onClose:d,onDone:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae();let a;e[0]!==l.role?(a=()=>z(l.role),e[0]=l.role,e[1]=a):a=e[1];const[h,c]=F(a);let g;e[2]!==s||e[3]!==l.id||e[4]!==d||e[5]!==u||e[6]!==h||e[7]!==m?(g=()=>{m(async()=>{await s.setAuthOrgMemberRole({memberId:z(l.id),role:h.trim()}),u(),d()})},e[2]=s,e[3]=l.id,e[4]=d,e[5]=u,e[6]=h,e[7]=m,e[8]=g):g=e[8];const p=g;let f;e[9]!==h?(f=h.trim(),e[9]=h,e[10]=f):f=e[10];const b=f!=="";let S;e[11]!==o?(S=o("Save"),e[11]=o,e[12]=S):S=e[12];let v;e[13]!==o?(v=o("Change member role"),e[13]=o,e[14]=v):v=e[14];let C;e[15]!==o?(C=o("Role"),e[15]=o,e[16]=C):C=e[16];let y;e[17]===Symbol.for("react.memo_cache_sentinel")?(y=D=>{c(D.target.value)},e[17]=y):y=e[17];let I;e[18]!==h?(I=n(X,{"data-testid":"org-member-role-value",id:"org-member-role-value",onChange:y,value:h}),e[18]=h,e[19]=I):I=e[19];let x;e[20]!==C||e[21]!==I?(x=n(V,{htmlFor:"org-member-role-value",label:C,children:I}),e[20]=C,e[21]=I,e[22]=x):x=e[22];let k;return e[23]!==i||e[24]!==r||e[25]!==d||e[26]!==p||e[27]!==x||e[28]!==b||e[29]!==S||e[30]!==v?(k=n(me,{busy:i,canSubmit:b,error:r,onClose:d,onSubmit:p,submitLabel:S,testId:"org-member-role",title:v,children:x}),e[23]=i,e[24]=r,e[25]=d,e[26]=p,e[27]=x,e[28]=b,e[29]=S,e[30]=v,e[31]=k):k=e[31],k},Ct=t=>{const e=G(36),{mode:l,onClose:d,onDone:u,organizationId:s,team:o}=t,i=se(),r=q(),{busy:m,error:a,run:h}=ae();let c;e[0]!==o?(c=o?z(o.name):"",e[0]=o,e[1]=c):c=e[1];const[g,p]=F(c);let f;e[2]!==i||e[3]!==l||e[4]!==g||e[5]!==d||e[6]!==u||e[7]!==s||e[8]!==h||e[9]!==o?.id?(f=()=>{h(async()=>{await(l==="create"?i.createAuthOrgTeam({name:g.trim(),organizationId:s}):i.updateAuthOrgTeam({name:g.trim(),teamId:z(o?.id)})),u(),d()})},e[2]=i,e[3]=l,e[4]=g,e[5]=d,e[6]=u,e[7]=s,e[8]=h,e[9]=o?.id,e[10]=f):f=e[10];const b=f;let S;e[11]!==g?(S=g.trim(),e[11]=g,e[12]=S):S=e[12];const v=S!=="";let C;e[13]!==l||e[14]!==r?(C=r(l==="create"?"Create":"Save"),e[13]=l,e[14]=r,e[15]=C):C=e[15];let y;e[16]!==l||e[17]!==r?(y=r(l==="create"?"New team":"Rename team"),e[16]=l,e[17]=r,e[18]=y):y=e[18];let I;e[19]!==r?(I=r("name"),e[19]=r,e[20]=I):I=e[20];let x;e[21]===Symbol.for("react.memo_cache_sentinel")?(x=A=>{p(A.target.value)},e[21]=x):x=e[21];let k;e[22]!==g?(k=n(X,{"data-testid":"org-team-form-name",id:"org-team-form-name",onChange:x,value:g}),e[22]=g,e[23]=k):k=e[23];let D;e[24]!==I||e[25]!==k?(D=n(V,{htmlFor:"org-team-form-name",label:I,children:k}),e[24]=I,e[25]=k,e[26]=D):D=e[26];let O;return e[27]!==m||e[28]!==a||e[29]!==d||e[30]!==b||e[31]!==D||e[32]!==v||e[33]!==C||e[34]!==y?(O=n(me,{busy:m,canSubmit:v,error:a,onClose:d,onSubmit:b,submitLabel:C,testId:"org-team-form",title:y,children:D}),e[27]=m,e[28]=a,e[29]=d,e[30]=b,e[31]=D,e[32]=v,e[33]=C,e[34]=y,e[35]=O):O=e[35],O},Ht=t=>{const e=G(30),{onClose:l,onDone:d,teamId:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae(),[a,h]=F("");let c;e[0]!==s||e[1]!==l||e[2]!==d||e[3]!==m||e[4]!==u||e[5]!==a?(c=()=>{m(async()=>{await s.addAuthOrgTeamMember({teamId:u,userId:a.trim()}),d(),l()})},e[0]=s,e[1]=l,e[2]=d,e[3]=m,e[4]=u,e[5]=a,e[6]=c):c=e[6];const g=c;let p;e[7]!==a?(p=a.trim(),e[7]=a,e[8]=p):p=e[8];const f=p!=="";let b;e[9]!==o?(b=o("Add member"),e[9]=o,e[10]=b):b=e[10];let S;e[11]!==o?(S=o("Add team member"),e[11]=o,e[12]=S):S=e[12];let v;e[13]!==o?(v=o("User id"),e[13]=o,e[14]=v):v=e[14];let C;e[15]===Symbol.for("react.memo_cache_sentinel")?(C=k=>{h(k.target.value)},e[15]=C):C=e[15];let y;e[16]!==a?(y=n(X,{"data-testid":"org-team-add-member-user",id:"org-team-add-member-user",onChange:C,value:a}),e[16]=a,e[17]=y):y=e[17];let I;e[18]!==v||e[19]!==y?(I=n(V,{htmlFor:"org-team-add-member-user",label:v,children:y}),e[18]=v,e[19]=y,e[20]=I):I=e[20];let x;return e[21]!==i||e[22]!==r||e[23]!==l||e[24]!==g||e[25]!==f||e[26]!==b||e[27]!==S||e[28]!==I?(x=n(me,{busy:i,canSubmit:f,error:r,onClose:l,onSubmit:g,submitLabel:b,testId:"org-team-add-member",title:S,children:I}),e[21]=i,e[22]=r,e[23]=l,e[24]=g,e[25]=f,e[26]=b,e[27]=S,e[28]=I,e[29]=x):x=e[29],x},xt=t=>{const e=G(47),{mode:l,onClose:d,onDone:u,organizationId:s,role:o}=t,i=se(),r=q(),{busy:m,error:a,run:h}=ae();let c;e[0]!==o?(c=o?z(o.role):"",e[0]=o,e[1]=c):c=e[1];const[g,p]=F(c);let f;e[2]!==l||e[3]!==o?.permission?(f=l==="edit"?$t(o?.permission):"",e[2]=l,e[3]=o?.permission,e[4]=f):f=e[4];const[b,S]=F(f);let v;e[5]!==i||e[6]!==l||e[7]!==g||e[8]!==d||e[9]!==u||e[10]!==s||e[11]!==b||e[12]!==o?.id||e[13]!==h?(v=()=>{h(async()=>{const T=Qt(b);await(l==="create"?i.createAuthOrgRole({organizationId:s,permission:T,role:g.trim()}):i.updateAuthOrgRole({permission:T,roleId:z(o?.id)})),u(),d()})},e[5]=i,e[6]=l,e[7]=g,e[8]=d,e[9]=u,e[10]=s,e[11]=b,e[12]=o?.id,e[13]=h,e[14]=v):v=e[14];const C=v;let y;e[15]!==l||e[16]!==g||e[17]!==b?(y=b.trim()!==""&&(l==="edit"||g.trim()!==""),e[15]=l,e[16]=g,e[17]=b,e[18]=y):y=e[18];let I;e[19]!==l||e[20]!==r?(I=r(l==="create"?"Create":"Save"),e[19]=l,e[20]=r,e[21]=I):I=e[21];let x;e[22]!==l||e[23]!==r?(x=r(l==="create"?"New role":"Edit role"),e[22]=l,e[23]=r,e[24]=x):x=e[24];let k;e[25]!==l||e[26]!==g||e[27]!==r?(k=l==="create"&&n(V,{htmlFor:"org-role-form-name",label:r("Role name"),children:n(X,{"data-testid":"org-role-form-name",id:"org-role-form-name",onChange:T=>{p(T.target.value)},value:g})}),e[25]=l,e[26]=g,e[27]=r,e[28]=k):k=e[28];let D;e[29]!==r?(D=r('Permission (JSON, e.g. {"project":["create","update"]})'),e[29]=r,e[30]=D):D=e[30];let O;e[31]===Symbol.for("react.memo_cache_sentinel")?(O=T=>{S(T.target.value)},e[31]=O):O=e[31];let A;e[32]!==b?(A=n(_t,{"data-testid":"org-role-form-permission",id:"org-role-form-permission",onChange:O,value:b}),e[32]=b,e[33]=A):A=e[33];let N;e[34]!==A||e[35]!==D?(N=n(V,{htmlFor:"org-role-form-permission",label:D,children:A}),e[34]=A,e[35]=D,e[36]=N):N=e[36];let _;return e[37]!==m||e[38]!==a||e[39]!==d||e[40]!==C||e[41]!==N||e[42]!==y||e[43]!==I||e[44]!==x||e[45]!==k?(_=R(me,{busy:m,canSubmit:y,error:a,onClose:d,onSubmit:C,submitLabel:I,testId:"org-role-form",title:x,children:[k,N]}),e[37]=m,e[38]=a,e[39]=d,e[40]=C,e[41]=N,e[42]=y,e[43]=I,e[44]=x,e[45]=k,e[46]=_):_=e[46],_},Mt=t=>{const e=G(18),{action:l,message:d,onClose:u,onDone:s,testId:o,title:i}=t,r=q(),{busy:m,error:a,run:h}=ae();let c;e[0]!==l||e[1]!==u||e[2]!==s||e[3]!==h?(c=()=>{h(async()=>{await l(),s(),u()})},e[0]=l,e[1]=u,e[2]=s,e[3]=h,e[4]=c):c=e[4];const g=c;let p;e[5]!==r?(p=r("Delete"),e[5]=r,e[6]=p):p=e[6];let f;e[7]!==d?(f=n("p",{className:"text-sm text-muted-foreground",children:d}),e[7]=d,e[8]=f):f=e[8];let b;return e[9]!==m||e[10]!==a||e[11]!==u||e[12]!==g||e[13]!==p||e[14]!==f||e[15]!==o||e[16]!==i?(b=n(me,{busy:m,canSubmit:!0,destructive:!0,error:a,onClose:u,onSubmit:g,submitLabel:p,testId:o,title:i,children:f}),e[9]=m,e[10]=a,e[11]=u,e[12]=g,e[13]=p,e[14]=f,e[15]=o,e[16]=i,e[17]=b):b=e[17],b},We=t=>{const e=G(13),{action:l,children:d,heading:u,testId:s}=t;let o;e[0]!==u?(o=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:u}),e[0]=u,e[1]=o):o=e[1];let i;e[2]!==l?(i=l!==void 0&&n("div",{className:"flex items-center gap-2",children:l}),e[2]=l,e[3]=i):i=e[3];let r;e[4]!==o||e[5]!==i?(r=R("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[o,i]}),e[4]=o,e[5]=i,e[6]=r):r=e[6];let m;e[7]!==d?(m=n(kt,{className:"px-0",children:d}),e[7]=d,e[8]=m):m=e[8];let a;return e[9]!==r||e[10]!==m||e[11]!==s?(a=R(wt,{className:"overflow-hidden py-0","data-testid":s,children:[r,m]}),e[9]=r,e[10]=m,e[11]=s,e[12]=a):a=e[12],a},Xe=t=>{const e=G(23),{columns:l,rowActions:d,rowPrefix:u,rows:s}=t,o=q();let i;e[0]!==l?(i=l.map(Zt),e[0]=l,e[1]=i):i=e[1];let r;e[2]!==o?(r=o("Actions"),e[2]=o,e[3]=r):r=e[3];let m;e[4]!==r?(m=n(de,{"aria-label":r}),e[4]=r,e[5]=m):m=e[5];let a;e[6]!==i||e[7]!==m?(a=n(Dt,{children:R(mt,{children:[i,m]})}),e[6]=i,e[7]=m,e[8]=a):a=e[8];let h;if(e[9]!==l||e[10]!==d||e[11]!==u||e[12]!==s){let p;e[14]!==l||e[15]!==d||e[16]!==u?(p=(f,b)=>{const S=z(f.id),v=S===""?`index-${b.toString()}`:S;return R(mt,{"data-testid":`${u}-${v}`,children:[l.map(C=>n(ce,{className:C.className,children:C.render(f)},C.head)),n(ce,{children:n("div",{className:"flex justify-end gap-1",children:d(f)})})]},v)},e[14]=l,e[15]=d,e[16]=u,e[17]=p):p=e[17],h=s.map(p),e[9]=l,e[10]=d,e[11]=u,e[12]=s,e[13]=h}else h=e[13];let c;e[18]!==h?(c=n(zt,{children:h}),e[18]=h,e[19]=c):c=e[19];let g;return e[20]!==a||e[21]!==c?(g=R(At,{children:[a,c]}),e[20]=a,e[21]=c,e[22]=g):g=e[22],g};function Zt(t){return n(de,{children:t.head},t.head)}const qt=t=>{const e=G(30),{actionBusy:l,onRemoveMember:d,memberColumns:u,members:s,onDialog:o}=t,i=q();let r;e[0]!==o?(r=()=>{o({kind:"add-member"})},e[0]=o,e[1]=r):r=e[1];let m;e[2]!==i?(m=i("Add member"),e[2]=i,e[3]=m):m=e[3];let a;e[4]!==r||e[5]!==m?(a=n(L,{"data-testid":"org-open-add-member",onClick:r,size:"xs",type:"button",variant:"outline",children:m}),e[4]=r,e[5]=m,e[6]=a):a=e[6];let h;e[7]!==o?(h=()=>{o({kind:"invite-member"})},e[7]=o,e[8]=h):h=e[8];let c;e[9]!==i?(c=i("Invite member"),e[9]=i,e[10]=c):c=e[10];let g;e[11]!==h||e[12]!==c?(g=n(L,{"data-testid":"org-open-invite-member",onClick:h,size:"xs",type:"button",variant:"outline",children:c}),e[11]=h,e[12]=c,e[13]=g):g=e[13];let p;e[14]!==a||e[15]!==g?(p=R(dt,{children:[a,g]}),e[14]=a,e[15]=g,e[16]=p):p=e[16];let f;e[17]!==i?(f=i("Members"),e[17]=i,e[18]=f):f=e[18];let b;e[19]!==l||e[20]!==u||e[21]!==s||e[22]!==o||e[23]!==d||e[24]!==i?(b=s.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-members-empty",title:i("No members.")})}):n(Xe,{columns:u,rowActions:v=>R(dt,{children:[n(L,{"data-testid":`org-member-role-${z(v.id)}`,onClick:()=>{o({kind:"member-role",member:v})},size:"xs",type:"button",variant:"ghost",children:i("Change role")}),n(L,{"data-testid":`org-remove-member-${z(v.id)}`,disabled:l,onClick:()=>{d(z(v.id))},size:"xs",type:"button",variant:"ghost",children:i("Remove")})]}),rowPrefix:"org-member",rows:s}),e[19]=l,e[20]=u,e[21]=s,e[22]=o,e[23]=d,e[24]=i,e[25]=b):b=e[25];let S;return e[26]!==p||e[27]!==f||e[28]!==b?(S=n(We,{action:p,heading:f,testId:"org-members",children:b}),e[26]=p,e[27]=f,e[28]=b,e[29]=S):S=e[29],S},Kt=t=>{const e=G(21),{onConfirmDeleteTeam:l,onDialog:d,onSelectTeam:u,selectedTeam:s,teamColumns:o,teams:i}=t,r=q();let m;e[0]!==d?(m=()=>{d({kind:"team-create"})},e[0]=d,e[1]=m):m=e[1];let a;e[2]!==r?(a=r("New team"),e[2]=r,e[3]=a):a=e[3];let h;e[4]!==m||e[5]!==a?(h=n(L,{"data-testid":"org-open-create-team",onClick:m,size:"xs",type:"button",variant:"outline",children:a}),e[4]=m,e[5]=a,e[6]=h):h=e[6];let c;e[7]!==r?(c=r("Teams"),e[7]=r,e[8]=c):c=e[8];let g;e[9]!==l||e[10]!==d||e[11]!==u||e[12]!==s||e[13]!==r||e[14]!==o||e[15]!==i?(g=i.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-teams-empty",title:r("No teams.")})}):n(Xe,{columns:o,rowActions:f=>R(dt,{children:[n(L,{"aria-pressed":s===z(f.id),"data-testid":`org-team-select-${z(f.id)}`,onClick:()=>{u(z(f.id))},size:"xs",type:"button",variant:"ghost",children:r("Members")}),n(L,{"data-testid":`org-team-rename-${z(f.id)}`,onClick:()=>{d({kind:"team-rename",team:f})},size:"xs",type:"button",variant:"ghost",children:r("Rename")}),n(L,{"data-testid":`org-team-delete-${z(f.id)}`,onClick:()=>{l(f)},size:"xs",type:"button",variant:"ghost",children:r("Delete")})]}),rowPrefix:"org-team",rows:i}),e[9]=l,e[10]=d,e[11]=u,e[12]=s,e[13]=r,e[14]=o,e[15]=i,e[16]=g):g=e[16];let p;return e[17]!==h||e[18]!==c||e[19]!==g?(p=n(We,{action:h,heading:c,testId:"org-teams",children:g}),e[17]=h,e[18]=c,e[19]=g,e[20]=p):p=e[20],p},Vt=t=>{const e=G(20),{actionBusy:l,onRemoveTeamMember:d,onDialog:u,selectedTeam:s,teamMemberColumns:o,teamMembers:i}=t,r=q();let m;e[0]!==u||e[1]!==s?(m=()=>{u({kind:"team-add-member",teamId:s})},e[0]=u,e[1]=s,e[2]=m):m=e[2];let a;e[3]!==r?(a=r("Add member"),e[3]=r,e[4]=a):a=e[4];let h;e[5]!==m||e[6]!==a?(h=n(L,{"data-testid":"org-open-add-team-member",onClick:m,size:"xs",type:"button",variant:"outline",children:a}),e[5]=m,e[6]=a,e[7]=h):h=e[7];let c;e[8]!==r?(c=r("Team members"),e[8]=r,e[9]=c):c=e[9];let g;e[10]!==l||e[11]!==d||e[12]!==r||e[13]!==o||e[14]!==i?(g=i.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-team-members-empty",title:r("No team members.")})}):n(Xe,{columns:o,rowActions:f=>n(L,{"data-testid":`org-team-remove-member-${z(f.id)}`,disabled:l,onClick:()=>{d(z(f.id))},size:"xs",type:"button",variant:"ghost",children:r("Remove")}),rowPrefix:"org-team-member",rows:i}),e[10]=l,e[11]=d,e[12]=r,e[13]=o,e[14]=i,e[15]=g):g=e[15];let p;return e[16]!==h||e[17]!==c||e[18]!==g?(p=n(We,{action:h,heading:c,testId:"org-team-members",children:g}),e[16]=h,e[17]=c,e[18]=g,e[19]=p):p=e[19],p},Wt=t=>{const e=G(19),{onConfirmDeleteRole:l,onDialog:d,roleColumns:u,roles:s}=t,o=q();let i;e[0]!==d?(i=()=>{d({kind:"role-create"})},e[0]=d,e[1]=i):i=e[1];let r;e[2]!==o?(r=o("New role"),e[2]=o,e[3]=r):r=e[3];let m;e[4]!==i||e[5]!==r?(m=n(L,{"data-testid":"org-open-create-role",onClick:i,size:"xs",type:"button",variant:"outline",children:r}),e[4]=i,e[5]=r,e[6]=m):m=e[6];let a;e[7]!==o?(a=o("Roles"),e[7]=o,e[8]=a):a=e[8];let h;e[9]!==l||e[10]!==d||e[11]!==u||e[12]!==s||e[13]!==o?(h=s.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-roles-empty",title:o("No custom roles.")})}):n(Xe,{columns:u,rowActions:g=>R(dt,{children:[n(L,{"data-testid":`org-role-edit-${z(g.id)}`,onClick:()=>{d({kind:"role-edit",role:g})},size:"xs",type:"button",variant:"ghost",children:o("Edit")}),n(L,{"data-testid":`org-role-delete-${z(g.id)}`,onClick:()=>{l(z(g.id))},size:"xs",type:"button",variant:"ghost",children:o("Delete")})]}),rowPrefix:"org-role",rows:s}),e[9]=l,e[10]=d,e[11]=u,e[12]=s,e[13]=o,e[14]=h):h=e[14];let c;return e[15]!==m||e[16]!==a||e[17]!==h?(c=n(We,{action:m,heading:a,testId:"org-roles",children:h}),e[15]=m,e[16]=a,e[17]=h,e[18]=c):c=e[18],c},It=200,Xt=t=>{const e=G(207),{organizationId:l,rolesEnabled:d,teamsEnabled:u}=t,s=se(),o=q(),[i,r]=F(null),[m,a]=F(null),[h,c]=F(!1),[g,p]=F(null),[f,b]=Lt(l);let S;e[0]!==f||e[1]!==l?(S=["lunora-auth-org-members",l,f],e[0]=f,e[1]=l,e[2]=S):S=e[2];let v;e[3]!==s||e[4]!==f||e[5]!==l?(v=()=>s.listAuthOrgMembers({limit:It,offset:f,organizationId:l}),e[3]=s,e[4]=f,e[5]=l,e[6]=v):v=e[6];const C=Ke(S,v);let y;e[7]!==l?(y=["lunora-auth-org-invitations",l],e[7]=l,e[8]=y):y=e[8];let I;e[9]!==s||e[10]!==l?(I=()=>s.listAuthOrgInvitations({limit:200,organizationId:l}),e[9]=s,e[10]=l,e[11]=I):I=e[11];const x=Ke(y,I);let k;e[12]!==l?(k=["lunora-auth-org-teams",l],e[12]=l,e[13]=k):k=e[13];let D;e[14]!==s||e[15]!==l?(D=()=>s.listAuthOrgTeams({limit:200,organizationId:l}),e[14]=s,e[15]=l,e[16]=D):D=e[16];let O;e[17]!==u?(O={enabled:u},e[17]=u,e[18]=O):O=e[18];const A=Ke(k,D,O);let N;e[19]!==l?(N=["lunora-auth-org-roles",l],e[19]=l,e[20]=N):N=e[20];let _;e[21]!==s||e[22]!==l?(_=()=>s.listAuthOrgRoles({limit:200,organizationId:l}),e[21]=s,e[22]=l,e[23]=_):_=e[23];let T;e[24]!==d?(T={enabled:d},e[24]=d,e[25]=T):T=e[25];const E=Ke(N,_,T);let H;e[26]!==m?(H=["lunora-auth-org-team-members",m],e[26]=m,e[27]=H):H=e[27];let B;e[28]!==s||e[29]!==m?(B=()=>s.listAuthOrgTeamMembers({limit:200,teamId:m??""}),e[28]=s,e[29]=m,e[30]=B):B=e[30];const U=m!==null;let Q;e[31]!==U?(Q={enabled:U},e[31]=U,e[32]=Q):Q=e[32];const P=Ke(H,B,Q);let J;e[33]!==C.data?.rows?(J=C.data?.rows??[],e[33]=C.data?.rows,e[34]=J):J=e[34];const j=J;let Z;e[35]!==x.data?.rows?(Z=x.data?.rows??[],e[35]=x.data?.rows,e[36]=Z):Z=e[36];const M=Z;let $;e[37]!==A.data?.rows?($=A.data?.rows??[],e[37]=A.data?.rows,e[38]=$):$=e[38];const K=$;let Y;e[39]!==E.data?.rows?(Y=E.data?.rows??[],e[39]=E.data?.rows,e[40]=Y):Y=e[40];const te=Y;let oe;e[41]!==m||e[42]!==P?(oe=m===null?[]:P.data?.rows??[],e[41]=m,e[42]=P,e[43]=oe):oe=e[43];const le=oe,ee=C.error??x.error??A.error??E.error??P.error;let ie;e[44]!==x||e[45]!==C||e[46]!==d||e[47]!==E||e[48]!==m||e[49]!==P||e[50]!==u||e[51]!==A?(ie=()=>{C.refetch(),x.refetch(),u&&A.refetch(),d&&E.refetch(),m!==null&&P.refetch()},e[44]=x,e[45]=C,e[46]=d,e[47]=E,e[48]=m,e[49]=P,e[50]=u,e[51]=A,e[52]=ie):ie=e[52];const w=ie;Nt(w,!0);let Ye;e[53]===Symbol.for("react.memo_cache_sentinel")?(Ye=()=>{r(null)},e[53]=Ye):Ye=e[53];const re=Ye;let et;e[54]!==w?(et=W=>{Et((async()=>{c(!0),p(null);try{await W(),w(),c(!1)}catch(at){p(Ft(at)),c(!1)}})())},e[54]=w,e[55]=et):et=e[55];const ne=et;let tt;e[56]!==s||e[57]!==o?(tt=W=>{const at=z(W.id);r({action:async()=>{await s.removeAuthOrgTeam({teamId:at}),a(vt=>vt===at?null:vt)},kind:"confirm",message:o("Delete this team and its memberships? This cannot be undone."),testId:"org-team-delete",title:o("Delete team")})},e[56]=s,e[57]=o,e[58]=tt):tt=e[58];const ct=tt;let fe;e[59]!==o?(fe=o("userId"),e[59]=o,e[60]=fe):fe=e[60];let ue;e[61]!==fe?(ue={head:fe,render:Yt},e[61]=fe,e[62]=ue):ue=e[62];let ge;e[63]!==o?(ge=o("role"),e[63]=o,e[64]=ge):ge=e[64];let he;e[65]!==ge?(he={head:ge,render:el},e[65]=ge,e[66]=he):he=e[66];let lt;e[67]!==ue||e[68]!==he?(lt=[ue,he],e[67]=ue,e[68]=he,e[69]=lt):lt=e[69];const ft=lt;let be;e[70]!==o?(be=o("email"),e[70]=o,e[71]=be):be=e[71];let pe;e[72]!==be?(pe={head:be,render:tl},e[72]=be,e[73]=pe):pe=e[73];let ve;e[74]!==o?(ve=o("role"),e[74]=o,e[75]=ve):ve=e[75];let ye;e[76]!==ve?(ye={head:ve,render:ll},e[76]=ve,e[77]=ye):ye=e[77];let Ce;e[78]!==o?(Ce=o("status"),e[78]=o,e[79]=Ce):Ce=e[79];let xe;e[80]!==Ce?(xe={head:Ce,render:ol},e[80]=Ce,e[81]=xe):xe=e[81];let ot;e[82]!==pe||e[83]!==ye||e[84]!==xe?(ot=[pe,ye,xe],e[82]=pe,e[83]=ye,e[84]=xe,e[85]=ot):ot=e[85];const ut=ot;let Ie;e[86]!==o?(Ie=o("id"),e[86]=o,e[87]=Ie):Ie=e[87];let Se;e[88]!==Ie?(Se={className:"font-mono text-xs",head:Ie,render:il},e[88]=Ie,e[89]=Se):Se=e[89];let ke;e[90]!==o?(ke=o("name"),e[90]=o,e[91]=ke):ke=e[91];let we;e[92]!==ke?(we={head:ke,render:rl},e[92]=ke,e[93]=we):we=e[93];let it;e[94]!==Se||e[95]!==we?(it=[Se,we],e[94]=Se,e[95]=we,e[96]=it):it=e[96];const gt=it;let De;e[97]!==o?(De=o("userId"),e[97]=o,e[98]=De):De=e[98];let rt;e[99]!==De?(rt=[{head:De,render:nl}],e[99]=De,e[100]=rt):rt=e[100];const ht=rt;let ze;e[101]!==o?(ze=o("role"),e[101]=o,e[102]=ze):ze=e[102];let Ae;e[103]!==ze?(Ae={head:ze,render:sl},e[103]=ze,e[104]=Ae):Ae=e[104];let Ne;e[105]!==o?(Ne=o("Permission"),e[105]=o,e[106]=Ne):Ne=e[106];let Oe;e[107]!==Ne?(Oe={className:"font-mono text-xs whitespace-pre-wrap",head:Ne,render:al},e[107]=Ne,e[108]=Oe):Oe=e[108];let nt;e[109]!==Ae||e[110]!==Oe?(nt=[Ae,Oe],e[109]=Ae,e[110]=Oe,e[111]=nt):nt=e[111];const bt=nt;let _e;e[112]!==ee?(_e=ee!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-detail-error",role:"alert",children:ee}),e[112]=ee,e[113]=_e):_e=e[113];let Te;e[114]!==g?(Te=g!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-action-error",role:"alert",children:g}),e[114]=g,e[115]=Te):Te=e[115];let $e;e[116]!==s||e[117]!==ne?($e=W=>{ne(()=>s.removeAuthOrgMember({memberId:W}))},e[116]=s,e[117]=ne,e[118]=$e):$e=e[118];let Me;e[119]!==h||e[120]!==ft||e[121]!==j||e[122]!==$e?(Me=n(qt,{actionBusy:h,memberColumns:ft,members:j,onDialog:r,onRemoveMember:$e}),e[119]=h,e[120]=ft,e[121]=j,e[122]=$e,e[123]=Me):Me=e[123];const pt=C.data?.total;let Re;e[124]!==j.length||e[125]!==f||e[126]!==b||e[127]!==pt?(Re=n(Ot,{count:j.length,offset:f,onOffsetChange:b,pageSize:It,prefix:"org-members",total:pt}),e[124]=j.length,e[125]=f,e[126]=b,e[127]=pt,e[128]=Re):Re=e[128];let Ee;e[129]!==h||e[130]!==s||e[131]!==ut||e[132]!==M||e[133]!==ne||e[134]!==o?(Ee=M.length>0&&n(We,{heading:o("Invitations"),testId:"org-invitations",children:n(Xe,{columns:ut,rowActions:W=>n(L,{"data-testid":`org-cancel-invitation-${z(W.id)}`,disabled:h,onClick:()=>{ne(()=>s.cancelAuthOrgInvitation({invitationId:z(W.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Cancel")}),rowPrefix:"org-invitation",rows:M})}),e[129]=h,e[130]=s,e[131]=ut,e[132]=M,e[133]=ne,e[134]=o,e[135]=Ee):Ee=e[135];let Fe;e[136]!==ct||e[137]!==m||e[138]!==gt||e[139]!==K||e[140]!==u?(Fe=u&&n(Kt,{onConfirmDeleteTeam:ct,onDialog:r,onSelectTeam:a,selectedTeam:m,teamColumns:gt,teams:K}),e[136]=ct,e[137]=m,e[138]=gt,e[139]=K,e[140]=u,e[141]=Fe):Fe=e[141];let je;e[142]!==h||e[143]!==s||e[144]!==ne||e[145]!==m||e[146]!==ht||e[147]!==le||e[148]!==u?(je=u&&m!==null&&n(Vt,{actionBusy:h,onDialog:r,onRemoveTeamMember:W=>{ne(()=>s.removeAuthOrgTeamMember({teamMemberId:W}))},selectedTeam:m,teamMemberColumns:ht,teamMembers:le}),e[142]=h,e[143]=s,e[144]=ne,e[145]=m,e[146]=ht,e[147]=le,e[148]=u,e[149]=je):je=e[149];let Le;e[150]!==s||e[151]!==bt||e[152]!==te||e[153]!==d||e[154]!==o?(Le=d&&n(Wt,{onConfirmDeleteRole:W=>{r({action:()=>s.deleteAuthOrgRole({roleId:W}),kind:"confirm",message:o("Delete this custom role? Members keeping it will lose its grants."),testId:"org-role-delete",title:o("Delete role")})},onDialog:r,roleColumns:bt,roles:te}),e[150]=s,e[151]=bt,e[152]=te,e[153]=d,e[154]=o,e[155]=Le):Le=e[155];let Pe;e[156]!==i?.kind||e[157]!==l||e[158]!==w?(Pe=i?.kind==="add-member"&&n(Jt,{onClose:re,onDone:w,organizationId:l}),e[156]=i?.kind,e[157]=l,e[158]=w,e[159]=Pe):Pe=e[159];let Be;e[160]!==i?.kind||e[161]!==l||e[162]!==w?(Be=i?.kind==="invite-member"&&n(Ut,{onClose:re,onDone:w,organizationId:l}),e[160]=i?.kind,e[161]=l,e[162]=w,e[163]=Be):Be=e[163];let Qe;e[164]!==i||e[165]!==w?(Qe=i?.kind==="member-role"&&n(Gt,{member:i.member,onClose:re,onDone:w}),e[164]=i,e[165]=w,e[166]=Qe):Qe=e[166];let Je;e[167]!==i?.kind||e[168]!==l||e[169]!==w?(Je=i?.kind==="team-create"&&n(Ct,{mode:"create",onClose:re,onDone:w,organizationId:l}),e[167]=i?.kind,e[168]=l,e[169]=w,e[170]=Je):Je=e[170];let Ue;e[171]!==i||e[172]!==l||e[173]!==w?(Ue=i?.kind==="team-rename"&&n(Ct,{mode:"edit",onClose:re,onDone:w,organizationId:l,team:i.team}),e[171]=i,e[172]=l,e[173]=w,e[174]=Ue):Ue=e[174];let Ge;e[175]!==i||e[176]!==w?(Ge=i?.kind==="team-add-member"&&n(Ht,{onClose:re,onDone:w,teamId:i.teamId}),e[175]=i,e[176]=w,e[177]=Ge):Ge=e[177];let He;e[178]!==i?.kind||e[179]!==l||e[180]!==w?(He=i?.kind==="role-create"&&n(xt,{mode:"create",onClose:re,onDone:w,organizationId:l}),e[178]=i?.kind,e[179]=l,e[180]=w,e[181]=He):He=e[181];let Ze;e[182]!==i||e[183]!==l||e[184]!==w?(Ze=i?.kind==="role-edit"&&n(xt,{mode:"edit",onClose:re,onDone:w,organizationId:l,role:i.role}),e[182]=i,e[183]=l,e[184]=w,e[185]=Ze):Ze=e[185];let qe;e[186]!==i||e[187]!==w?(qe=i?.kind==="confirm"&&n(Mt,{action:i.action,message:i.message,onClose:re,onDone:w,testId:i.testId,title:i.title}),e[186]=i,e[187]=w,e[188]=qe):qe=e[188];let st;return e[189]!==_e||e[190]!==Te||e[191]!==Me||e[192]!==Re||e[193]!==Ee||e[194]!==Fe||e[195]!==je||e[196]!==Le||e[197]!==Pe||e[198]!==Be||e[199]!==Qe||e[200]!==Je||e[201]!==Ue||e[202]!==Ge||e[203]!==He||e[204]!==Ze||e[205]!==qe?(st=R("div",{className:"flex flex-col gap-4","data-testid":"org-detail",children:[_e,Te,Me,Re,Ee,Fe,je,Le,Pe,Be,Qe,Je,Ue,Ge,He,Ze,qe]}),e[189]=_e,e[190]=Te,e[191]=Me,e[192]=Re,e[193]=Ee,e[194]=Fe,e[195]=je,e[196]=Le,e[197]=Pe,e[198]=Be,e[199]=Qe,e[200]=Je,e[201]=Ue,e[202]=Ge,e[203]=He,e[204]=Ze,e[205]=qe,e[206]=st):st=e[206],st};function Yt(t){return n("span",{className:"font-mono text-xs",children:z(t.userId)})}function el(t){return z(t.role)}function tl(t){return z(t.email)}function ll(t){return z(t.role)}function ol(t){return z(t.status)}function il(t){return z(t.id)}function rl(t){return z(t.name)}function nl(t){return n("span",{className:"font-mono text-xs",children:z(t.userId)})}function sl(t){return z(t.role)}function al(t){return z(t.permission)}const St=100,Al=()=>{const t=G(69),e=se(),l=q(),{config:d,ready:u}=Rt(),s=d.capabilities.organization,[o,i]=F(null),[r,m]=F(null),[a,h]=F(0);let c;t[0]!==a?(c=["lunora-auth-orgs",a],t[0]=a,t[1]=c):c=t[1];let g;t[2]!==e||t[3]!==a?(g=()=>e.listAuthOrganizations({limit:St,offset:a}),t[2]=e,t[3]=a,t[4]=g):g=t[4];let p;t[5]!==s?(p={enabled:s},t[5]=s,t[6]=p):p=t[6];const f=Ke(c,g,p),b=f.data?.rows??null;let S;t[7]!==f?(S=()=>{f.refetch()},t[7]=f,t[8]=S):S=t[8],Nt(S,s);let v;t[9]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{m(null)},t[9]=v):v=t[9];const C=v;let y;t[10]!==f?(y=()=>{f.refetch()},t[10]=f,t[11]=y):y=t[11];const I=y;let x;t[12]===Symbol.for("react.memo_cache_sentinel")?(x=M=>{i(M)},t[12]=x):x=t[12];const k=x;if(u&&!s){let M;t[13]!==l?(M=l("Enable the organization() plugin in your auth config to manage organizations here."),t[13]=l,t[14]=M):M=t[14];let $;t[15]!==l?($=l("Organizations are not enabled."),t[15]=l,t[16]=$):$=t[16];let K;return t[17]!==M||t[18]!==$?(K=n(Ve,{description:M,testId:"org-disabled",title:$}),t[17]=M,t[18]=$,t[19]=K):K=t[19],K}let D;t[20]!==l?(D=l("Organizations"),t[20]=l,t[21]=D):D=t[21];let O;t[22]!==D?(O=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:D}),t[22]=D,t[23]=O):O=t[23];let A;t[24]===Symbol.for("react.memo_cache_sentinel")?(A=()=>{m({kind:"create"})},t[24]=A):A=t[24];let N;t[25]!==l?(N=l("New organization"),t[25]=l,t[26]=N):N=t[26];let _;t[27]!==N?(_=n(L,{"data-testid":"org-new",onClick:A,size:"sm",type:"button",children:N}),t[27]=N,t[28]=_):_=t[28];let T;t[29]!==_||t[30]!==O?(T=R("div",{className:"flex items-center justify-between",children:[O,_]}),t[29]=_,t[30]=O,t[31]=T):T=t[31];let E;t[32]!==f.error?(E=f.error!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-error",role:"alert",children:f.error}),t[32]=f.error,t[33]=E):E=t[33];let H;t[34]!==b||t[35]!==l?(H=b!==null&&b.length===0&&n(Ve,{testId:"org-empty",title:l("No organizations.")}),t[34]=b,t[35]=l,t[36]=H):H=t[36];let B;t[37]!==b||t[38]!==o||t[39]!==l?(B=b!==null&&b.length>0&&n(wt,{className:"overflow-hidden py-0",children:n(kt,{className:"px-0",children:R(At,{"data-testid":"org-table",children:[n(Dt,{children:R(mt,{children:[n(de,{children:l("id")}),n(de,{children:l("name")}),n(de,{children:l("slug")}),n(de,{children:l("created")}),n(de,{"aria-label":l("Actions")})]})}),n(zt,{children:b.map(M=>{const $=z(M.id);return R(mt,{"data-testid":`org-row-${$}`,children:[n(ce,{className:"font-mono text-xs",children:$}),n(ce,{children:z(M.name)}),n(ce,{children:z(M.slug)}),n(ce,{className:"text-muted-foreground tabular-nums",children:jt(M.createdAt)}),n(ce,{children:R("div",{className:"flex justify-end gap-1",children:[n(L,{"aria-pressed":o===$,"data-testid":`org-select-${$}`,onClick:()=>{k($)},size:"xs",type:"button",variant:"ghost",children:l("Manage")}),n(L,{"data-testid":`org-edit-${$}`,onClick:()=>{m({kind:"edit",org:M})},size:"xs",type:"button",variant:"ghost",children:l("Edit")}),n(L,{"data-testid":`org-delete-${$}`,onClick:()=>{m({kind:"delete",org:M})},size:"xs",type:"button",variant:"ghost",children:l("Delete")})]})})]},$)})})]})})}),t[37]=b,t[38]=o,t[39]=l,t[40]=B):B=t[40];let U;t[41]!==a||t[42]!==b||t[43]!==f.data?.total?(U=b!==null&&n(Ot,{count:b.length,offset:a,onOffsetChange:h,pageSize:St,prefix:"org",total:f.data?.total}),t[41]=a,t[42]=b,t[43]=f.data?.total,t[44]=U):U=t[44];let Q;t[45]!==d.organization||t[46]!==o?(Q=o!==null&&n(Xt,{organizationId:o,rolesEnabled:d.organization.roles,teamsEnabled:d.organization.teams}),t[45]=d.organization,t[46]=o,t[47]=Q):Q=t[47];let P;t[48]!==r?.kind||t[49]!==I?(P=r?.kind==="create"&&n(yt,{mode:"create",onClose:C,onDone:I}),t[48]=r?.kind,t[49]=I,t[50]=P):P=t[50];let J;t[51]!==r||t[52]!==I?(J=r?.kind==="edit"&&n(yt,{mode:"edit",onClose:C,onDone:I,org:r.org}),t[51]=r,t[52]=I,t[53]=J):J=t[53];let j;t[54]!==e||t[55]!==r||t[56]!==I||t[57]!==l?(j=r?.kind==="delete"&&n(Mt,{action:async()=>{const M=z(r.org.id);await e.deleteAuthOrganization({organizationId:M}),i($=>$===M?null:$)},message:l("Delete this organization? Its members, invitations, teams, and custom roles are removed. This cannot be undone."),onClose:C,onDone:I,testId:"org-delete",title:l("Delete organization")}),t[54]=e,t[55]=r,t[56]=I,t[57]=l,t[58]=j):j=t[58];let Z;return t[59]!==T||t[60]!==E||t[61]!==H||t[62]!==B||t[63]!==U||t[64]!==Q||t[65]!==P||t[66]!==J||t[67]!==j?(Z=R("div",{className:"flex flex-col gap-4","data-testid":"lunora-organizations",children:[T,E,H,B,U,Q,P,J,j]}),t[59]=T,t[60]=E,t[61]=H,t[62]=B,t[63]=U,t[64]=Q,t[65]=P,t[66]=J,t[67]=j,t[68]=Z):Z=t[68],Z};export{Al as default};
|
|
1
|
+
import{c as G}from"react/compiler-runtime";import{useLunora as se}from"@lunora/react";import{useState as F}from"react";import{B as L}from"../packem_shared/button-q0UYSmrn.mjs";import{a as kt,C as wt}from"../packem_shared/card-By2O8ULa.mjs";import{E as Ve}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as de,a as Dt,b as mt,e as ce,d as zt,T as At}from"../packem_shared/table-D0SBiDu-.mjs";import{b as Ke}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{u as Rt}from"../packem_shared/use-auth-config-Z_n4ABCI.mjs";import{useAutoRefresh as Nt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{useT as q}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{k as z,f as Et,b as Ft,h as jt}from"../packem_shared/internal-Df43vQI0.mjs";import{u as Lt,A as Ot}from"../packem_shared/auth-pager-DiDnXsfe.mjs";import{I as X}from"../packem_shared/input-CXhxesPC.mjs";import{L as Pt}from"../packem_shared/label-DKFzyHq6.mjs";import{M as Bt}from"../packem_shared/modal-shell-CDztwLnv.mjs";import{T as _t}from"../packem_shared/textarea--40GKAyz.mjs";import{u as ae}from"../packem_shared/use-async-submit-CZqCMTJ_.mjs";import{jsx as n,jsxs as R,Fragment as dt}from"react/jsx-runtime";const Tt=t=>{const e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("Expected a JSON object");return e},Qt=t=>{const e=Tt(t),l={};for(const[d,u]of Object.entries(e)){if(!Array.isArray(u)||u.some(s=>typeof s!="string"))throw new TypeError(`"${d}" must map to an array of action strings`);l[d]=u}return l},$t=t=>t==null||t===""?"":typeof t=="string"?t:JSON.stringify(t,null,2),V=t=>{const e=G(6),{children:l,htmlFor:d,label:u}=t;let s;e[0]!==d||e[1]!==u?(s=n(Pt,{htmlFor:d,children:u}),e[0]=d,e[1]=u,e[2]=s):s=e[2];let o;return e[3]!==l||e[4]!==s?(o=R("div",{className:"flex flex-col gap-1",children:[s,l]}),e[3]=l,e[4]=s,e[5]=o):o=e[5],o},me=({busy:t,canSubmit:e,children:l,destructive:d=!1,error:u,onClose:s,onSubmit:o,submitLabel:i,testId:r,title:m})=>{const a=q();return R(Bt,{label:m,onClose:s,panelTestId:`${r}-panel`,testId:`${r}-overlay`,variant:"dialog",children:[n("h2",{className:"text-sm font-semibold text-foreground",children:m}),l,u!==null&&n("p",{className:"text-sm text-destructive","data-testid":`${r}-error`,role:"alert",children:u}),R("div",{className:"flex justify-end gap-2 pt-1",children:[n(L,{"data-testid":`${r}-cancel`,onClick:s,size:"sm",type:"button",variant:"outline",children:a("Cancel")}),n(L,{"data-testid":`${r}-submit`,disabled:t||!e,onClick:o,size:"sm",type:"button",variant:d?"destructive":"default",children:t?a("Saving…"):i})]})]})},yt=t=>{const e=G(79),{mode:l,onClose:d,onDone:u,org:s}=t,o=se(),i=q(),{busy:r,error:m,run:a}=ae();let h;e[0]!==s?(h=s?z(s.name):"",e[0]=s,e[1]=h):h=e[1];const[c,g]=F(h);let p;e[2]!==s?(p=s?z(s.slug):"",e[2]=s,e[3]=p):p=e[3];const[f,b]=F(p);let S;e[4]!==s?(S=s?z(s.logo):"",e[4]=s,e[5]=S):S=e[5];const[v,C]=F(S),[y,I]=F("");let x;e[6]!==l||e[7]!==s?.metadata?(x=l==="edit"?$t(s?.metadata):"",e[6]=l,e[7]=s?.metadata,e[8]=x):x=e[8];const[k,D]=F(x);let O;e[9]!==o||e[10]!==v||e[11]!==k||e[12]!==l||e[13]!==c||e[14]!==d||e[15]!==u||e[16]!==s?.id||e[17]!==y||e[18]!==a||e[19]!==f?(O=()=>{a(async()=>{const w=k.trim()===""?void 0:Tt(k);l==="create"?await o.createAuthOrganization({logo:v.trim()===""?void 0:v.trim(),metadata:w,name:c.trim(),ownerId:y.trim()===""?void 0:y.trim(),slug:f.trim()===""?void 0:f.trim()}):await o.updateAuthOrganization({logo:v.trim()===""?void 0:v.trim(),metadata:w,name:c.trim()===""?void 0:c.trim(),organizationId:z(s?.id),slug:f.trim()===""?void 0:f.trim()}),u(),d()})},e[9]=o,e[10]=v,e[11]=k,e[12]=l,e[13]=c,e[14]=d,e[15]=u,e[16]=s?.id,e[17]=y,e[18]=a,e[19]=f,e[20]=O):O=e[20];const A=O;let N;e[21]!==l||e[22]!==c?(N=c.trim()!==""||l==="edit",e[21]=l,e[22]=c,e[23]=N):N=e[23];let _;e[24]!==l||e[25]!==i?(_=i(l==="create"?"Create":"Save"),e[24]=l,e[25]=i,e[26]=_):_=e[26];let T;e[27]!==l||e[28]!==i?(T=i(l==="create"?"New organization":"Edit organization"),e[27]=l,e[28]=i,e[29]=T):T=e[29];let E;e[30]!==i?(E=i("name"),e[30]=i,e[31]=E):E=e[31];let H;e[32]===Symbol.for("react.memo_cache_sentinel")?(H=w=>{g(w.target.value)},e[32]=H):H=e[32];let B;e[33]!==c?(B=n(X,{"data-testid":"org-form-name",id:"org-form-name",onChange:H,value:c}),e[33]=c,e[34]=B):B=e[34];let U;e[35]!==B||e[36]!==E?(U=n(V,{htmlFor:"org-form-name",label:E,children:B}),e[35]=B,e[36]=E,e[37]=U):U=e[37];let Q;e[38]!==i?(Q=i("Slug (optional — derived from name)"),e[38]=i,e[39]=Q):Q=e[39];let P;e[40]===Symbol.for("react.memo_cache_sentinel")?(P=w=>{b(w.target.value)},e[40]=P):P=e[40];let J;e[41]!==f?(J=n(X,{"data-testid":"org-form-slug",id:"org-form-slug",onChange:P,value:f}),e[41]=f,e[42]=J):J=e[42];let j;e[43]!==Q||e[44]!==J?(j=n(V,{htmlFor:"org-form-slug",label:Q,children:J}),e[43]=Q,e[44]=J,e[45]=j):j=e[45];let Z;e[46]!==i?(Z=i("Logo URL (optional)"),e[46]=i,e[47]=Z):Z=e[47];let M;e[48]===Symbol.for("react.memo_cache_sentinel")?(M=w=>{C(w.target.value)},e[48]=M):M=e[48];let $;e[49]!==v?($=n(X,{"data-testid":"org-form-logo",id:"org-form-logo",onChange:M,value:v}),e[49]=v,e[50]=$):$=e[50];let K;e[51]!==Z||e[52]!==$?(K=n(V,{htmlFor:"org-form-logo",label:Z,children:$}),e[51]=Z,e[52]=$,e[53]=K):K=e[53];let Y;e[54]!==l||e[55]!==y||e[56]!==i?(Y=l==="create"&&n(V,{htmlFor:"org-form-owner",label:i("Owner user id (optional)"),children:n(X,{"data-testid":"org-form-owner",id:"org-form-owner",onChange:w=>{I(w.target.value)},value:y})}),e[54]=l,e[55]=y,e[56]=i,e[57]=Y):Y=e[57];let te;e[58]!==i?(te=i("Metadata (JSON, optional)"),e[58]=i,e[59]=te):te=e[59];let oe;e[60]===Symbol.for("react.memo_cache_sentinel")?(oe=w=>{D(w.target.value)},e[60]=oe):oe=e[60];let le;e[61]!==k?(le=n(_t,{"data-testid":"org-form-metadata",id:"org-form-metadata",onChange:oe,value:k}),e[61]=k,e[62]=le):le=e[62];let ee;e[63]!==te||e[64]!==le?(ee=n(V,{htmlFor:"org-form-metadata",label:te,children:le}),e[63]=te,e[64]=le,e[65]=ee):ee=e[65];let ie;return e[66]!==r||e[67]!==m||e[68]!==d||e[69]!==A||e[70]!==U||e[71]!==j||e[72]!==K||e[73]!==Y||e[74]!==ee||e[75]!==N||e[76]!==_||e[77]!==T?(ie=R(me,{busy:r,canSubmit:N,error:m,onClose:d,onSubmit:A,submitLabel:_,testId:"org-form",title:T,children:[U,j,K,Y,ee]}),e[66]=r,e[67]=m,e[68]=d,e[69]=A,e[70]=U,e[71]=j,e[72]=K,e[73]=Y,e[74]=ee,e[75]=N,e[76]=_,e[77]=T,e[78]=ie):ie=e[78],ie},Jt=t=>{const e=G(40),{onClose:l,onDone:d,organizationId:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae(),[a,h]=F(""),[c,g]=F("");let p;e[0]!==s||e[1]!==l||e[2]!==d||e[3]!==u||e[4]!==c||e[5]!==m||e[6]!==a?(p=()=>{m(async()=>{await s.addAuthOrgMember({organizationId:u,role:c.trim()===""?void 0:c.trim(),userId:a.trim()}),d(),l()})},e[0]=s,e[1]=l,e[2]=d,e[3]=u,e[4]=c,e[5]=m,e[6]=a,e[7]=p):p=e[7];const f=p;let b;e[8]!==a?(b=a.trim(),e[8]=a,e[9]=b):b=e[9];const S=b!=="";let v;e[10]!==o?(v=o("Add member"),e[10]=o,e[11]=v):v=e[11];let C;e[12]!==o?(C=o("Add member"),e[12]=o,e[13]=C):C=e[13];let y;e[14]!==o?(y=o("User id"),e[14]=o,e[15]=y):y=e[15];let I;e[16]===Symbol.for("react.memo_cache_sentinel")?(I=T=>{h(T.target.value)},e[16]=I):I=e[16];let x;e[17]!==a?(x=n(X,{"data-testid":"org-add-member-user",id:"org-add-member-user",onChange:I,value:a}),e[17]=a,e[18]=x):x=e[18];let k;e[19]!==y||e[20]!==x?(k=n(V,{htmlFor:"org-add-member-user",label:y,children:x}),e[19]=y,e[20]=x,e[21]=k):k=e[21];let D;e[22]!==o?(D=o("Role (optional)"),e[22]=o,e[23]=D):D=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=T=>{g(T.target.value)},e[24]=O):O=e[24];let A;e[25]!==c?(A=n(X,{"data-testid":"org-add-member-role",id:"org-add-member-role",onChange:O,value:c}),e[25]=c,e[26]=A):A=e[26];let N;e[27]!==D||e[28]!==A?(N=n(V,{htmlFor:"org-add-member-role",label:D,children:A}),e[27]=D,e[28]=A,e[29]=N):N=e[29];let _;return e[30]!==i||e[31]!==r||e[32]!==l||e[33]!==f||e[34]!==N||e[35]!==S||e[36]!==v||e[37]!==C||e[38]!==k?(_=R(me,{busy:i,canSubmit:S,error:r,onClose:l,onSubmit:f,submitLabel:v,testId:"org-add-member",title:C,children:[k,N]}),e[30]=i,e[31]=r,e[32]=l,e[33]=f,e[34]=N,e[35]=S,e[36]=v,e[37]=C,e[38]=k,e[39]=_):_=e[39],_},Ut=t=>{const e=G(40),{onClose:l,onDone:d,organizationId:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae(),[a,h]=F(""),[c,g]=F("");let p;e[0]!==s||e[1]!==a||e[2]!==l||e[3]!==d||e[4]!==u||e[5]!==c||e[6]!==m?(p=()=>{m(async()=>{await s.inviteAuthOrgMember({email:a.trim(),organizationId:u,role:c.trim()===""?void 0:c.trim()}),d(),l()})},e[0]=s,e[1]=a,e[2]=l,e[3]=d,e[4]=u,e[5]=c,e[6]=m,e[7]=p):p=e[7];const f=p;let b;e[8]!==a?(b=a.trim(),e[8]=a,e[9]=b):b=e[9];const S=b!=="";let v;e[10]!==o?(v=o("Send invitation"),e[10]=o,e[11]=v):v=e[11];let C;e[12]!==o?(C=o("Invite member"),e[12]=o,e[13]=C):C=e[13];let y;e[14]!==o?(y=o("email"),e[14]=o,e[15]=y):y=e[15];let I;e[16]===Symbol.for("react.memo_cache_sentinel")?(I=T=>{h(T.target.value)},e[16]=I):I=e[16];let x;e[17]!==a?(x=n(X,{"data-testid":"org-invite-member-email",id:"org-invite-member-email",onChange:I,type:"email",value:a}),e[17]=a,e[18]=x):x=e[18];let k;e[19]!==y||e[20]!==x?(k=n(V,{htmlFor:"org-invite-member-email",label:y,children:x}),e[19]=y,e[20]=x,e[21]=k):k=e[21];let D;e[22]!==o?(D=o("Role (optional)"),e[22]=o,e[23]=D):D=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=T=>{g(T.target.value)},e[24]=O):O=e[24];let A;e[25]!==c?(A=n(X,{"data-testid":"org-invite-member-role",id:"org-invite-member-role",onChange:O,value:c}),e[25]=c,e[26]=A):A=e[26];let N;e[27]!==D||e[28]!==A?(N=n(V,{htmlFor:"org-invite-member-role",label:D,children:A}),e[27]=D,e[28]=A,e[29]=N):N=e[29];let _;return e[30]!==i||e[31]!==r||e[32]!==l||e[33]!==f||e[34]!==N||e[35]!==S||e[36]!==v||e[37]!==C||e[38]!==k?(_=R(me,{busy:i,canSubmit:S,error:r,onClose:l,onSubmit:f,submitLabel:v,testId:"org-invite-member",title:C,children:[k,N]}),e[30]=i,e[31]=r,e[32]=l,e[33]=f,e[34]=N,e[35]=S,e[36]=v,e[37]=C,e[38]=k,e[39]=_):_=e[39],_},Gt=t=>{const e=G(32),{member:l,onClose:d,onDone:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae();let a;e[0]!==l.role?(a=()=>z(l.role),e[0]=l.role,e[1]=a):a=e[1];const[h,c]=F(a);let g;e[2]!==s||e[3]!==l.id||e[4]!==d||e[5]!==u||e[6]!==h||e[7]!==m?(g=()=>{m(async()=>{await s.setAuthOrgMemberRole({memberId:z(l.id),role:h.trim()}),u(),d()})},e[2]=s,e[3]=l.id,e[4]=d,e[5]=u,e[6]=h,e[7]=m,e[8]=g):g=e[8];const p=g;let f;e[9]!==h?(f=h.trim(),e[9]=h,e[10]=f):f=e[10];const b=f!=="";let S;e[11]!==o?(S=o("Save"),e[11]=o,e[12]=S):S=e[12];let v;e[13]!==o?(v=o("Change member role"),e[13]=o,e[14]=v):v=e[14];let C;e[15]!==o?(C=o("Role"),e[15]=o,e[16]=C):C=e[16];let y;e[17]===Symbol.for("react.memo_cache_sentinel")?(y=D=>{c(D.target.value)},e[17]=y):y=e[17];let I;e[18]!==h?(I=n(X,{"data-testid":"org-member-role-value",id:"org-member-role-value",onChange:y,value:h}),e[18]=h,e[19]=I):I=e[19];let x;e[20]!==C||e[21]!==I?(x=n(V,{htmlFor:"org-member-role-value",label:C,children:I}),e[20]=C,e[21]=I,e[22]=x):x=e[22];let k;return e[23]!==i||e[24]!==r||e[25]!==d||e[26]!==p||e[27]!==x||e[28]!==b||e[29]!==S||e[30]!==v?(k=n(me,{busy:i,canSubmit:b,error:r,onClose:d,onSubmit:p,submitLabel:S,testId:"org-member-role",title:v,children:x}),e[23]=i,e[24]=r,e[25]=d,e[26]=p,e[27]=x,e[28]=b,e[29]=S,e[30]=v,e[31]=k):k=e[31],k},Ct=t=>{const e=G(36),{mode:l,onClose:d,onDone:u,organizationId:s,team:o}=t,i=se(),r=q(),{busy:m,error:a,run:h}=ae();let c;e[0]!==o?(c=o?z(o.name):"",e[0]=o,e[1]=c):c=e[1];const[g,p]=F(c);let f;e[2]!==i||e[3]!==l||e[4]!==g||e[5]!==d||e[6]!==u||e[7]!==s||e[8]!==h||e[9]!==o?.id?(f=()=>{h(async()=>{await(l==="create"?i.createAuthOrgTeam({name:g.trim(),organizationId:s}):i.updateAuthOrgTeam({name:g.trim(),teamId:z(o?.id)})),u(),d()})},e[2]=i,e[3]=l,e[4]=g,e[5]=d,e[6]=u,e[7]=s,e[8]=h,e[9]=o?.id,e[10]=f):f=e[10];const b=f;let S;e[11]!==g?(S=g.trim(),e[11]=g,e[12]=S):S=e[12];const v=S!=="";let C;e[13]!==l||e[14]!==r?(C=r(l==="create"?"Create":"Save"),e[13]=l,e[14]=r,e[15]=C):C=e[15];let y;e[16]!==l||e[17]!==r?(y=r(l==="create"?"New team":"Rename team"),e[16]=l,e[17]=r,e[18]=y):y=e[18];let I;e[19]!==r?(I=r("name"),e[19]=r,e[20]=I):I=e[20];let x;e[21]===Symbol.for("react.memo_cache_sentinel")?(x=A=>{p(A.target.value)},e[21]=x):x=e[21];let k;e[22]!==g?(k=n(X,{"data-testid":"org-team-form-name",id:"org-team-form-name",onChange:x,value:g}),e[22]=g,e[23]=k):k=e[23];let D;e[24]!==I||e[25]!==k?(D=n(V,{htmlFor:"org-team-form-name",label:I,children:k}),e[24]=I,e[25]=k,e[26]=D):D=e[26];let O;return e[27]!==m||e[28]!==a||e[29]!==d||e[30]!==b||e[31]!==D||e[32]!==v||e[33]!==C||e[34]!==y?(O=n(me,{busy:m,canSubmit:v,error:a,onClose:d,onSubmit:b,submitLabel:C,testId:"org-team-form",title:y,children:D}),e[27]=m,e[28]=a,e[29]=d,e[30]=b,e[31]=D,e[32]=v,e[33]=C,e[34]=y,e[35]=O):O=e[35],O},Ht=t=>{const e=G(30),{onClose:l,onDone:d,teamId:u}=t,s=se(),o=q(),{busy:i,error:r,run:m}=ae(),[a,h]=F("");let c;e[0]!==s||e[1]!==l||e[2]!==d||e[3]!==m||e[4]!==u||e[5]!==a?(c=()=>{m(async()=>{await s.addAuthOrgTeamMember({teamId:u,userId:a.trim()}),d(),l()})},e[0]=s,e[1]=l,e[2]=d,e[3]=m,e[4]=u,e[5]=a,e[6]=c):c=e[6];const g=c;let p;e[7]!==a?(p=a.trim(),e[7]=a,e[8]=p):p=e[8];const f=p!=="";let b;e[9]!==o?(b=o("Add member"),e[9]=o,e[10]=b):b=e[10];let S;e[11]!==o?(S=o("Add team member"),e[11]=o,e[12]=S):S=e[12];let v;e[13]!==o?(v=o("User id"),e[13]=o,e[14]=v):v=e[14];let C;e[15]===Symbol.for("react.memo_cache_sentinel")?(C=k=>{h(k.target.value)},e[15]=C):C=e[15];let y;e[16]!==a?(y=n(X,{"data-testid":"org-team-add-member-user",id:"org-team-add-member-user",onChange:C,value:a}),e[16]=a,e[17]=y):y=e[17];let I;e[18]!==v||e[19]!==y?(I=n(V,{htmlFor:"org-team-add-member-user",label:v,children:y}),e[18]=v,e[19]=y,e[20]=I):I=e[20];let x;return e[21]!==i||e[22]!==r||e[23]!==l||e[24]!==g||e[25]!==f||e[26]!==b||e[27]!==S||e[28]!==I?(x=n(me,{busy:i,canSubmit:f,error:r,onClose:l,onSubmit:g,submitLabel:b,testId:"org-team-add-member",title:S,children:I}),e[21]=i,e[22]=r,e[23]=l,e[24]=g,e[25]=f,e[26]=b,e[27]=S,e[28]=I,e[29]=x):x=e[29],x},xt=t=>{const e=G(47),{mode:l,onClose:d,onDone:u,organizationId:s,role:o}=t,i=se(),r=q(),{busy:m,error:a,run:h}=ae();let c;e[0]!==o?(c=o?z(o.role):"",e[0]=o,e[1]=c):c=e[1];const[g,p]=F(c);let f;e[2]!==l||e[3]!==o?.permission?(f=l==="edit"?$t(o?.permission):"",e[2]=l,e[3]=o?.permission,e[4]=f):f=e[4];const[b,S]=F(f);let v;e[5]!==i||e[6]!==l||e[7]!==g||e[8]!==d||e[9]!==u||e[10]!==s||e[11]!==b||e[12]!==o?.id||e[13]!==h?(v=()=>{h(async()=>{const T=Qt(b);await(l==="create"?i.createAuthOrgRole({organizationId:s,permission:T,role:g.trim()}):i.updateAuthOrgRole({permission:T,roleId:z(o?.id)})),u(),d()})},e[5]=i,e[6]=l,e[7]=g,e[8]=d,e[9]=u,e[10]=s,e[11]=b,e[12]=o?.id,e[13]=h,e[14]=v):v=e[14];const C=v;let y;e[15]!==l||e[16]!==g||e[17]!==b?(y=b.trim()!==""&&(l==="edit"||g.trim()!==""),e[15]=l,e[16]=g,e[17]=b,e[18]=y):y=e[18];let I;e[19]!==l||e[20]!==r?(I=r(l==="create"?"Create":"Save"),e[19]=l,e[20]=r,e[21]=I):I=e[21];let x;e[22]!==l||e[23]!==r?(x=r(l==="create"?"New role":"Edit role"),e[22]=l,e[23]=r,e[24]=x):x=e[24];let k;e[25]!==l||e[26]!==g||e[27]!==r?(k=l==="create"&&n(V,{htmlFor:"org-role-form-name",label:r("Role name"),children:n(X,{"data-testid":"org-role-form-name",id:"org-role-form-name",onChange:T=>{p(T.target.value)},value:g})}),e[25]=l,e[26]=g,e[27]=r,e[28]=k):k=e[28];let D;e[29]!==r?(D=r('Permission (JSON, e.g. {"project":["create","update"]})'),e[29]=r,e[30]=D):D=e[30];let O;e[31]===Symbol.for("react.memo_cache_sentinel")?(O=T=>{S(T.target.value)},e[31]=O):O=e[31];let A;e[32]!==b?(A=n(_t,{"data-testid":"org-role-form-permission",id:"org-role-form-permission",onChange:O,value:b}),e[32]=b,e[33]=A):A=e[33];let N;e[34]!==A||e[35]!==D?(N=n(V,{htmlFor:"org-role-form-permission",label:D,children:A}),e[34]=A,e[35]=D,e[36]=N):N=e[36];let _;return e[37]!==m||e[38]!==a||e[39]!==d||e[40]!==C||e[41]!==N||e[42]!==y||e[43]!==I||e[44]!==x||e[45]!==k?(_=R(me,{busy:m,canSubmit:y,error:a,onClose:d,onSubmit:C,submitLabel:I,testId:"org-role-form",title:x,children:[k,N]}),e[37]=m,e[38]=a,e[39]=d,e[40]=C,e[41]=N,e[42]=y,e[43]=I,e[44]=x,e[45]=k,e[46]=_):_=e[46],_},Mt=t=>{const e=G(18),{action:l,message:d,onClose:u,onDone:s,testId:o,title:i}=t,r=q(),{busy:m,error:a,run:h}=ae();let c;e[0]!==l||e[1]!==u||e[2]!==s||e[3]!==h?(c=()=>{h(async()=>{await l(),s(),u()})},e[0]=l,e[1]=u,e[2]=s,e[3]=h,e[4]=c):c=e[4];const g=c;let p;e[5]!==r?(p=r("Delete"),e[5]=r,e[6]=p):p=e[6];let f;e[7]!==d?(f=n("p",{className:"text-sm text-muted-foreground",children:d}),e[7]=d,e[8]=f):f=e[8];let b;return e[9]!==m||e[10]!==a||e[11]!==u||e[12]!==g||e[13]!==p||e[14]!==f||e[15]!==o||e[16]!==i?(b=n(me,{busy:m,canSubmit:!0,destructive:!0,error:a,onClose:u,onSubmit:g,submitLabel:p,testId:o,title:i,children:f}),e[9]=m,e[10]=a,e[11]=u,e[12]=g,e[13]=p,e[14]=f,e[15]=o,e[16]=i,e[17]=b):b=e[17],b},We=t=>{const e=G(13),{action:l,children:d,heading:u,testId:s}=t;let o;e[0]!==u?(o=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:u}),e[0]=u,e[1]=o):o=e[1];let i;e[2]!==l?(i=l!==void 0&&n("div",{className:"flex items-center gap-2",children:l}),e[2]=l,e[3]=i):i=e[3];let r;e[4]!==o||e[5]!==i?(r=R("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[o,i]}),e[4]=o,e[5]=i,e[6]=r):r=e[6];let m;e[7]!==d?(m=n(kt,{className:"px-0",children:d}),e[7]=d,e[8]=m):m=e[8];let a;return e[9]!==r||e[10]!==m||e[11]!==s?(a=R(wt,{className:"overflow-hidden py-0","data-testid":s,children:[r,m]}),e[9]=r,e[10]=m,e[11]=s,e[12]=a):a=e[12],a},Xe=t=>{const e=G(23),{columns:l,rowActions:d,rowPrefix:u,rows:s}=t,o=q();let i;e[0]!==l?(i=l.map(Zt),e[0]=l,e[1]=i):i=e[1];let r;e[2]!==o?(r=o("Actions"),e[2]=o,e[3]=r):r=e[3];let m;e[4]!==r?(m=n(de,{"aria-label":r}),e[4]=r,e[5]=m):m=e[5];let a;e[6]!==i||e[7]!==m?(a=n(Dt,{children:R(mt,{children:[i,m]})}),e[6]=i,e[7]=m,e[8]=a):a=e[8];let h;if(e[9]!==l||e[10]!==d||e[11]!==u||e[12]!==s){let p;e[14]!==l||e[15]!==d||e[16]!==u?(p=(f,b)=>{const S=z(f.id),v=S===""?`index-${b.toString()}`:S;return R(mt,{"data-testid":`${u}-${v}`,children:[l.map(C=>n(ce,{className:C.className,children:C.render(f)},C.head)),n(ce,{children:n("div",{className:"flex justify-end gap-1",children:d(f)})})]},v)},e[14]=l,e[15]=d,e[16]=u,e[17]=p):p=e[17],h=s.map(p),e[9]=l,e[10]=d,e[11]=u,e[12]=s,e[13]=h}else h=e[13];let c;e[18]!==h?(c=n(zt,{children:h}),e[18]=h,e[19]=c):c=e[19];let g;return e[20]!==a||e[21]!==c?(g=R(At,{children:[a,c]}),e[20]=a,e[21]=c,e[22]=g):g=e[22],g};function Zt(t){return n(de,{children:t.head},t.head)}const qt=t=>{const e=G(30),{actionBusy:l,onRemoveMember:d,memberColumns:u,members:s,onDialog:o}=t,i=q();let r;e[0]!==o?(r=()=>{o({kind:"add-member"})},e[0]=o,e[1]=r):r=e[1];let m;e[2]!==i?(m=i("Add member"),e[2]=i,e[3]=m):m=e[3];let a;e[4]!==r||e[5]!==m?(a=n(L,{"data-testid":"org-open-add-member",onClick:r,size:"xs",type:"button",variant:"outline",children:m}),e[4]=r,e[5]=m,e[6]=a):a=e[6];let h;e[7]!==o?(h=()=>{o({kind:"invite-member"})},e[7]=o,e[8]=h):h=e[8];let c;e[9]!==i?(c=i("Invite member"),e[9]=i,e[10]=c):c=e[10];let g;e[11]!==h||e[12]!==c?(g=n(L,{"data-testid":"org-open-invite-member",onClick:h,size:"xs",type:"button",variant:"outline",children:c}),e[11]=h,e[12]=c,e[13]=g):g=e[13];let p;e[14]!==a||e[15]!==g?(p=R(dt,{children:[a,g]}),e[14]=a,e[15]=g,e[16]=p):p=e[16];let f;e[17]!==i?(f=i("Members"),e[17]=i,e[18]=f):f=e[18];let b;e[19]!==l||e[20]!==u||e[21]!==s||e[22]!==o||e[23]!==d||e[24]!==i?(b=s.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-members-empty",title:i("No members.")})}):n(Xe,{columns:u,rowActions:v=>R(dt,{children:[n(L,{"data-testid":`org-member-role-${z(v.id)}`,onClick:()=>{o({kind:"member-role",member:v})},size:"xs",type:"button",variant:"ghost",children:i("Change role")}),n(L,{"data-testid":`org-remove-member-${z(v.id)}`,disabled:l,onClick:()=>{d(z(v.id))},size:"xs",type:"button",variant:"ghost",children:i("Remove")})]}),rowPrefix:"org-member",rows:s}),e[19]=l,e[20]=u,e[21]=s,e[22]=o,e[23]=d,e[24]=i,e[25]=b):b=e[25];let S;return e[26]!==p||e[27]!==f||e[28]!==b?(S=n(We,{action:p,heading:f,testId:"org-members",children:b}),e[26]=p,e[27]=f,e[28]=b,e[29]=S):S=e[29],S},Kt=t=>{const e=G(21),{onConfirmDeleteTeam:l,onDialog:d,onSelectTeam:u,selectedTeam:s,teamColumns:o,teams:i}=t,r=q();let m;e[0]!==d?(m=()=>{d({kind:"team-create"})},e[0]=d,e[1]=m):m=e[1];let a;e[2]!==r?(a=r("New team"),e[2]=r,e[3]=a):a=e[3];let h;e[4]!==m||e[5]!==a?(h=n(L,{"data-testid":"org-open-create-team",onClick:m,size:"xs",type:"button",variant:"outline",children:a}),e[4]=m,e[5]=a,e[6]=h):h=e[6];let c;e[7]!==r?(c=r("Teams"),e[7]=r,e[8]=c):c=e[8];let g;e[9]!==l||e[10]!==d||e[11]!==u||e[12]!==s||e[13]!==r||e[14]!==o||e[15]!==i?(g=i.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-teams-empty",title:r("No teams.")})}):n(Xe,{columns:o,rowActions:f=>R(dt,{children:[n(L,{"aria-pressed":s===z(f.id),"data-testid":`org-team-select-${z(f.id)}`,onClick:()=>{u(z(f.id))},size:"xs",type:"button",variant:"ghost",children:r("Members")}),n(L,{"data-testid":`org-team-rename-${z(f.id)}`,onClick:()=>{d({kind:"team-rename",team:f})},size:"xs",type:"button",variant:"ghost",children:r("Rename")}),n(L,{"data-testid":`org-team-delete-${z(f.id)}`,onClick:()=>{l(f)},size:"xs",type:"button",variant:"ghost",children:r("Delete")})]}),rowPrefix:"org-team",rows:i}),e[9]=l,e[10]=d,e[11]=u,e[12]=s,e[13]=r,e[14]=o,e[15]=i,e[16]=g):g=e[16];let p;return e[17]!==h||e[18]!==c||e[19]!==g?(p=n(We,{action:h,heading:c,testId:"org-teams",children:g}),e[17]=h,e[18]=c,e[19]=g,e[20]=p):p=e[20],p},Vt=t=>{const e=G(20),{actionBusy:l,onRemoveTeamMember:d,onDialog:u,selectedTeam:s,teamMemberColumns:o,teamMembers:i}=t,r=q();let m;e[0]!==u||e[1]!==s?(m=()=>{u({kind:"team-add-member",teamId:s})},e[0]=u,e[1]=s,e[2]=m):m=e[2];let a;e[3]!==r?(a=r("Add member"),e[3]=r,e[4]=a):a=e[4];let h;e[5]!==m||e[6]!==a?(h=n(L,{"data-testid":"org-open-add-team-member",onClick:m,size:"xs",type:"button",variant:"outline",children:a}),e[5]=m,e[6]=a,e[7]=h):h=e[7];let c;e[8]!==r?(c=r("Team members"),e[8]=r,e[9]=c):c=e[9];let g;e[10]!==l||e[11]!==d||e[12]!==r||e[13]!==o||e[14]!==i?(g=i.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-team-members-empty",title:r("No team members.")})}):n(Xe,{columns:o,rowActions:f=>n(L,{"data-testid":`org-team-remove-member-${z(f.id)}`,disabled:l,onClick:()=>{d(z(f.id))},size:"xs",type:"button",variant:"ghost",children:r("Remove")}),rowPrefix:"org-team-member",rows:i}),e[10]=l,e[11]=d,e[12]=r,e[13]=o,e[14]=i,e[15]=g):g=e[15];let p;return e[16]!==h||e[17]!==c||e[18]!==g?(p=n(We,{action:h,heading:c,testId:"org-team-members",children:g}),e[16]=h,e[17]=c,e[18]=g,e[19]=p):p=e[19],p},Wt=t=>{const e=G(19),{onConfirmDeleteRole:l,onDialog:d,roleColumns:u,roles:s}=t,o=q();let i;e[0]!==d?(i=()=>{d({kind:"role-create"})},e[0]=d,e[1]=i):i=e[1];let r;e[2]!==o?(r=o("New role"),e[2]=o,e[3]=r):r=e[3];let m;e[4]!==i||e[5]!==r?(m=n(L,{"data-testid":"org-open-create-role",onClick:i,size:"xs",type:"button",variant:"outline",children:r}),e[4]=i,e[5]=r,e[6]=m):m=e[6];let a;e[7]!==o?(a=o("Roles"),e[7]=o,e[8]=a):a=e[8];let h;e[9]!==l||e[10]!==d||e[11]!==u||e[12]!==s||e[13]!==o?(h=s.length===0?n("div",{className:"p-3",children:n(Ve,{testId:"org-roles-empty",title:o("No custom roles.")})}):n(Xe,{columns:u,rowActions:g=>R(dt,{children:[n(L,{"data-testid":`org-role-edit-${z(g.id)}`,onClick:()=>{d({kind:"role-edit",role:g})},size:"xs",type:"button",variant:"ghost",children:o("Edit")}),n(L,{"data-testid":`org-role-delete-${z(g.id)}`,onClick:()=>{l(z(g.id))},size:"xs",type:"button",variant:"ghost",children:o("Delete")})]}),rowPrefix:"org-role",rows:s}),e[9]=l,e[10]=d,e[11]=u,e[12]=s,e[13]=o,e[14]=h):h=e[14];let c;return e[15]!==m||e[16]!==a||e[17]!==h?(c=n(We,{action:m,heading:a,testId:"org-roles",children:h}),e[15]=m,e[16]=a,e[17]=h,e[18]=c):c=e[18],c},It=200,Xt=t=>{const e=G(207),{organizationId:l,rolesEnabled:d,teamsEnabled:u}=t,s=se(),o=q(),[i,r]=F(null),[m,a]=F(null),[h,c]=F(!1),[g,p]=F(null),[f,b]=Lt(l);let S;e[0]!==f||e[1]!==l?(S=["lunora-auth-org-members",l,f],e[0]=f,e[1]=l,e[2]=S):S=e[2];let v;e[3]!==s||e[4]!==f||e[5]!==l?(v=()=>s.listAuthOrgMembers({limit:It,offset:f,organizationId:l}),e[3]=s,e[4]=f,e[5]=l,e[6]=v):v=e[6];const C=Ke(S,v);let y;e[7]!==l?(y=["lunora-auth-org-invitations",l],e[7]=l,e[8]=y):y=e[8];let I;e[9]!==s||e[10]!==l?(I=()=>s.listAuthOrgInvitations({limit:200,organizationId:l}),e[9]=s,e[10]=l,e[11]=I):I=e[11];const x=Ke(y,I);let k;e[12]!==l?(k=["lunora-auth-org-teams",l],e[12]=l,e[13]=k):k=e[13];let D;e[14]!==s||e[15]!==l?(D=()=>s.listAuthOrgTeams({limit:200,organizationId:l}),e[14]=s,e[15]=l,e[16]=D):D=e[16];let O;e[17]!==u?(O={enabled:u},e[17]=u,e[18]=O):O=e[18];const A=Ke(k,D,O);let N;e[19]!==l?(N=["lunora-auth-org-roles",l],e[19]=l,e[20]=N):N=e[20];let _;e[21]!==s||e[22]!==l?(_=()=>s.listAuthOrgRoles({limit:200,organizationId:l}),e[21]=s,e[22]=l,e[23]=_):_=e[23];let T;e[24]!==d?(T={enabled:d},e[24]=d,e[25]=T):T=e[25];const E=Ke(N,_,T);let H;e[26]!==m?(H=["lunora-auth-org-team-members",m],e[26]=m,e[27]=H):H=e[27];let B;e[28]!==s||e[29]!==m?(B=()=>s.listAuthOrgTeamMembers({limit:200,teamId:m??""}),e[28]=s,e[29]=m,e[30]=B):B=e[30];const U=m!==null;let Q;e[31]!==U?(Q={enabled:U},e[31]=U,e[32]=Q):Q=e[32];const P=Ke(H,B,Q);let J;e[33]!==C.data?.rows?(J=C.data?.rows??[],e[33]=C.data?.rows,e[34]=J):J=e[34];const j=J;let Z;e[35]!==x.data?.rows?(Z=x.data?.rows??[],e[35]=x.data?.rows,e[36]=Z):Z=e[36];const M=Z;let $;e[37]!==A.data?.rows?($=A.data?.rows??[],e[37]=A.data?.rows,e[38]=$):$=e[38];const K=$;let Y;e[39]!==E.data?.rows?(Y=E.data?.rows??[],e[39]=E.data?.rows,e[40]=Y):Y=e[40];const te=Y;let oe;e[41]!==m||e[42]!==P?(oe=m===null?[]:P.data?.rows??[],e[41]=m,e[42]=P,e[43]=oe):oe=e[43];const le=oe,ee=C.error??x.error??A.error??E.error??P.error;let ie;e[44]!==x||e[45]!==C||e[46]!==d||e[47]!==E||e[48]!==m||e[49]!==P||e[50]!==u||e[51]!==A?(ie=()=>{C.refetch(),x.refetch(),u&&A.refetch(),d&&E.refetch(),m!==null&&P.refetch()},e[44]=x,e[45]=C,e[46]=d,e[47]=E,e[48]=m,e[49]=P,e[50]=u,e[51]=A,e[52]=ie):ie=e[52];const w=ie;Nt(w,!0);let Ye;e[53]===Symbol.for("react.memo_cache_sentinel")?(Ye=()=>{r(null)},e[53]=Ye):Ye=e[53];const re=Ye;let et;e[54]!==w?(et=W=>{Et((async()=>{c(!0),p(null);try{await W(),w(),c(!1)}catch(at){p(Ft(at)),c(!1)}})())},e[54]=w,e[55]=et):et=e[55];const ne=et;let tt;e[56]!==s||e[57]!==o?(tt=W=>{const at=z(W.id);r({action:async()=>{await s.removeAuthOrgTeam({teamId:at}),a(vt=>vt===at?null:vt)},kind:"confirm",message:o("Delete this team and its memberships? This cannot be undone."),testId:"org-team-delete",title:o("Delete team")})},e[56]=s,e[57]=o,e[58]=tt):tt=e[58];const ct=tt;let fe;e[59]!==o?(fe=o("userId"),e[59]=o,e[60]=fe):fe=e[60];let ue;e[61]!==fe?(ue={head:fe,render:Yt},e[61]=fe,e[62]=ue):ue=e[62];let ge;e[63]!==o?(ge=o("role"),e[63]=o,e[64]=ge):ge=e[64];let he;e[65]!==ge?(he={head:ge,render:el},e[65]=ge,e[66]=he):he=e[66];let lt;e[67]!==ue||e[68]!==he?(lt=[ue,he],e[67]=ue,e[68]=he,e[69]=lt):lt=e[69];const ft=lt;let be;e[70]!==o?(be=o("email"),e[70]=o,e[71]=be):be=e[71];let pe;e[72]!==be?(pe={head:be,render:tl},e[72]=be,e[73]=pe):pe=e[73];let ve;e[74]!==o?(ve=o("role"),e[74]=o,e[75]=ve):ve=e[75];let ye;e[76]!==ve?(ye={head:ve,render:ll},e[76]=ve,e[77]=ye):ye=e[77];let Ce;e[78]!==o?(Ce=o("status"),e[78]=o,e[79]=Ce):Ce=e[79];let xe;e[80]!==Ce?(xe={head:Ce,render:ol},e[80]=Ce,e[81]=xe):xe=e[81];let ot;e[82]!==pe||e[83]!==ye||e[84]!==xe?(ot=[pe,ye,xe],e[82]=pe,e[83]=ye,e[84]=xe,e[85]=ot):ot=e[85];const ut=ot;let Ie;e[86]!==o?(Ie=o("id"),e[86]=o,e[87]=Ie):Ie=e[87];let Se;e[88]!==Ie?(Se={className:"font-mono text-xs",head:Ie,render:il},e[88]=Ie,e[89]=Se):Se=e[89];let ke;e[90]!==o?(ke=o("name"),e[90]=o,e[91]=ke):ke=e[91];let we;e[92]!==ke?(we={head:ke,render:rl},e[92]=ke,e[93]=we):we=e[93];let it;e[94]!==Se||e[95]!==we?(it=[Se,we],e[94]=Se,e[95]=we,e[96]=it):it=e[96];const gt=it;let De;e[97]!==o?(De=o("userId"),e[97]=o,e[98]=De):De=e[98];let rt;e[99]!==De?(rt=[{head:De,render:nl}],e[99]=De,e[100]=rt):rt=e[100];const ht=rt;let ze;e[101]!==o?(ze=o("role"),e[101]=o,e[102]=ze):ze=e[102];let Ae;e[103]!==ze?(Ae={head:ze,render:sl},e[103]=ze,e[104]=Ae):Ae=e[104];let Ne;e[105]!==o?(Ne=o("Permission"),e[105]=o,e[106]=Ne):Ne=e[106];let Oe;e[107]!==Ne?(Oe={className:"font-mono text-xs whitespace-pre-wrap",head:Ne,render:al},e[107]=Ne,e[108]=Oe):Oe=e[108];let nt;e[109]!==Ae||e[110]!==Oe?(nt=[Ae,Oe],e[109]=Ae,e[110]=Oe,e[111]=nt):nt=e[111];const bt=nt;let _e;e[112]!==ee?(_e=ee!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-detail-error",role:"alert",children:ee}),e[112]=ee,e[113]=_e):_e=e[113];let Te;e[114]!==g?(Te=g!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-action-error",role:"alert",children:g}),e[114]=g,e[115]=Te):Te=e[115];let $e;e[116]!==s||e[117]!==ne?($e=W=>{ne(()=>s.removeAuthOrgMember({memberId:W}))},e[116]=s,e[117]=ne,e[118]=$e):$e=e[118];let Me;e[119]!==h||e[120]!==ft||e[121]!==j||e[122]!==$e?(Me=n(qt,{actionBusy:h,memberColumns:ft,members:j,onDialog:r,onRemoveMember:$e}),e[119]=h,e[120]=ft,e[121]=j,e[122]=$e,e[123]=Me):Me=e[123];const pt=C.data?.total;let Re;e[124]!==j.length||e[125]!==f||e[126]!==b||e[127]!==pt?(Re=n(Ot,{count:j.length,offset:f,onOffsetChange:b,pageSize:It,prefix:"org-members",total:pt}),e[124]=j.length,e[125]=f,e[126]=b,e[127]=pt,e[128]=Re):Re=e[128];let Ee;e[129]!==h||e[130]!==s||e[131]!==ut||e[132]!==M||e[133]!==ne||e[134]!==o?(Ee=M.length>0&&n(We,{heading:o("Invitations"),testId:"org-invitations",children:n(Xe,{columns:ut,rowActions:W=>n(L,{"data-testid":`org-cancel-invitation-${z(W.id)}`,disabled:h,onClick:()=>{ne(()=>s.cancelAuthOrgInvitation({invitationId:z(W.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Cancel")}),rowPrefix:"org-invitation",rows:M})}),e[129]=h,e[130]=s,e[131]=ut,e[132]=M,e[133]=ne,e[134]=o,e[135]=Ee):Ee=e[135];let Fe;e[136]!==ct||e[137]!==m||e[138]!==gt||e[139]!==K||e[140]!==u?(Fe=u&&n(Kt,{onConfirmDeleteTeam:ct,onDialog:r,onSelectTeam:a,selectedTeam:m,teamColumns:gt,teams:K}),e[136]=ct,e[137]=m,e[138]=gt,e[139]=K,e[140]=u,e[141]=Fe):Fe=e[141];let je;e[142]!==h||e[143]!==s||e[144]!==ne||e[145]!==m||e[146]!==ht||e[147]!==le||e[148]!==u?(je=u&&m!==null&&n(Vt,{actionBusy:h,onDialog:r,onRemoveTeamMember:W=>{ne(()=>s.removeAuthOrgTeamMember({teamMemberId:W}))},selectedTeam:m,teamMemberColumns:ht,teamMembers:le}),e[142]=h,e[143]=s,e[144]=ne,e[145]=m,e[146]=ht,e[147]=le,e[148]=u,e[149]=je):je=e[149];let Le;e[150]!==s||e[151]!==bt||e[152]!==te||e[153]!==d||e[154]!==o?(Le=d&&n(Wt,{onConfirmDeleteRole:W=>{r({action:()=>s.deleteAuthOrgRole({roleId:W}),kind:"confirm",message:o("Delete this custom role? Members keeping it will lose its grants."),testId:"org-role-delete",title:o("Delete role")})},onDialog:r,roleColumns:bt,roles:te}),e[150]=s,e[151]=bt,e[152]=te,e[153]=d,e[154]=o,e[155]=Le):Le=e[155];let Pe;e[156]!==i?.kind||e[157]!==l||e[158]!==w?(Pe=i?.kind==="add-member"&&n(Jt,{onClose:re,onDone:w,organizationId:l}),e[156]=i?.kind,e[157]=l,e[158]=w,e[159]=Pe):Pe=e[159];let Be;e[160]!==i?.kind||e[161]!==l||e[162]!==w?(Be=i?.kind==="invite-member"&&n(Ut,{onClose:re,onDone:w,organizationId:l}),e[160]=i?.kind,e[161]=l,e[162]=w,e[163]=Be):Be=e[163];let Qe;e[164]!==i||e[165]!==w?(Qe=i?.kind==="member-role"&&n(Gt,{member:i.member,onClose:re,onDone:w}),e[164]=i,e[165]=w,e[166]=Qe):Qe=e[166];let Je;e[167]!==i?.kind||e[168]!==l||e[169]!==w?(Je=i?.kind==="team-create"&&n(Ct,{mode:"create",onClose:re,onDone:w,organizationId:l}),e[167]=i?.kind,e[168]=l,e[169]=w,e[170]=Je):Je=e[170];let Ue;e[171]!==i||e[172]!==l||e[173]!==w?(Ue=i?.kind==="team-rename"&&n(Ct,{mode:"edit",onClose:re,onDone:w,organizationId:l,team:i.team}),e[171]=i,e[172]=l,e[173]=w,e[174]=Ue):Ue=e[174];let Ge;e[175]!==i||e[176]!==w?(Ge=i?.kind==="team-add-member"&&n(Ht,{onClose:re,onDone:w,teamId:i.teamId}),e[175]=i,e[176]=w,e[177]=Ge):Ge=e[177];let He;e[178]!==i?.kind||e[179]!==l||e[180]!==w?(He=i?.kind==="role-create"&&n(xt,{mode:"create",onClose:re,onDone:w,organizationId:l}),e[178]=i?.kind,e[179]=l,e[180]=w,e[181]=He):He=e[181];let Ze;e[182]!==i||e[183]!==l||e[184]!==w?(Ze=i?.kind==="role-edit"&&n(xt,{mode:"edit",onClose:re,onDone:w,organizationId:l,role:i.role}),e[182]=i,e[183]=l,e[184]=w,e[185]=Ze):Ze=e[185];let qe;e[186]!==i||e[187]!==w?(qe=i?.kind==="confirm"&&n(Mt,{action:i.action,message:i.message,onClose:re,onDone:w,testId:i.testId,title:i.title}),e[186]=i,e[187]=w,e[188]=qe):qe=e[188];let st;return e[189]!==_e||e[190]!==Te||e[191]!==Me||e[192]!==Re||e[193]!==Ee||e[194]!==Fe||e[195]!==je||e[196]!==Le||e[197]!==Pe||e[198]!==Be||e[199]!==Qe||e[200]!==Je||e[201]!==Ue||e[202]!==Ge||e[203]!==He||e[204]!==Ze||e[205]!==qe?(st=R("div",{className:"flex flex-col gap-4","data-testid":"org-detail",children:[_e,Te,Me,Re,Ee,Fe,je,Le,Pe,Be,Qe,Je,Ue,Ge,He,Ze,qe]}),e[189]=_e,e[190]=Te,e[191]=Me,e[192]=Re,e[193]=Ee,e[194]=Fe,e[195]=je,e[196]=Le,e[197]=Pe,e[198]=Be,e[199]=Qe,e[200]=Je,e[201]=Ue,e[202]=Ge,e[203]=He,e[204]=Ze,e[205]=qe,e[206]=st):st=e[206],st};function Yt(t){return n("span",{className:"font-mono text-xs",children:z(t.userId)})}function el(t){return z(t.role)}function tl(t){return z(t.email)}function ll(t){return z(t.role)}function ol(t){return z(t.status)}function il(t){return z(t.id)}function rl(t){return z(t.name)}function nl(t){return n("span",{className:"font-mono text-xs",children:z(t.userId)})}function sl(t){return z(t.role)}function al(t){return z(t.permission)}const St=100,Al=()=>{const t=G(69),e=se(),l=q(),{config:d,ready:u}=Rt(),s=d.capabilities.organization,[o,i]=F(null),[r,m]=F(null),[a,h]=F(0);let c;t[0]!==a?(c=["lunora-auth-orgs",a],t[0]=a,t[1]=c):c=t[1];let g;t[2]!==e||t[3]!==a?(g=()=>e.listAuthOrganizations({limit:St,offset:a}),t[2]=e,t[3]=a,t[4]=g):g=t[4];let p;t[5]!==s?(p={enabled:s},t[5]=s,t[6]=p):p=t[6];const f=Ke(c,g,p),b=f.data?.rows??null;let S;t[7]!==f?(S=()=>{f.refetch()},t[7]=f,t[8]=S):S=t[8],Nt(S,s);let v;t[9]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{m(null)},t[9]=v):v=t[9];const C=v;let y;t[10]!==f?(y=()=>{f.refetch()},t[10]=f,t[11]=y):y=t[11];const I=y;let x;t[12]===Symbol.for("react.memo_cache_sentinel")?(x=M=>{i(M)},t[12]=x):x=t[12];const k=x;if(u&&!s){let M;t[13]!==l?(M=l("Enable the organization() plugin in your auth config to manage organizations here."),t[13]=l,t[14]=M):M=t[14];let $;t[15]!==l?($=l("Organizations are not enabled."),t[15]=l,t[16]=$):$=t[16];let K;return t[17]!==M||t[18]!==$?(K=n(Ve,{description:M,testId:"org-disabled",title:$}),t[17]=M,t[18]=$,t[19]=K):K=t[19],K}let D;t[20]!==l?(D=l("Organizations"),t[20]=l,t[21]=D):D=t[21];let O;t[22]!==D?(O=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:D}),t[22]=D,t[23]=O):O=t[23];let A;t[24]===Symbol.for("react.memo_cache_sentinel")?(A=()=>{m({kind:"create"})},t[24]=A):A=t[24];let N;t[25]!==l?(N=l("New organization"),t[25]=l,t[26]=N):N=t[26];let _;t[27]!==N?(_=n(L,{"data-testid":"org-new",onClick:A,size:"sm",type:"button",children:N}),t[27]=N,t[28]=_):_=t[28];let T;t[29]!==_||t[30]!==O?(T=R("div",{className:"flex items-center justify-between",children:[O,_]}),t[29]=_,t[30]=O,t[31]=T):T=t[31];let E;t[32]!==f.error?(E=f.error!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-error",role:"alert",children:f.error}),t[32]=f.error,t[33]=E):E=t[33];let H;t[34]!==b||t[35]!==l?(H=b!==null&&b.length===0&&n(Ve,{testId:"org-empty",title:l("No organizations.")}),t[34]=b,t[35]=l,t[36]=H):H=t[36];let B;t[37]!==b||t[38]!==o||t[39]!==l?(B=b!==null&&b.length>0&&n(wt,{className:"overflow-hidden py-0",children:n(kt,{className:"px-0",children:R(At,{"data-testid":"org-table",children:[n(Dt,{children:R(mt,{children:[n(de,{children:l("id")}),n(de,{children:l("name")}),n(de,{children:l("slug")}),n(de,{children:l("created")}),n(de,{"aria-label":l("Actions")})]})}),n(zt,{children:b.map(M=>{const $=z(M.id);return R(mt,{"data-testid":`org-row-${$}`,children:[n(ce,{className:"font-mono text-xs",children:$}),n(ce,{children:z(M.name)}),n(ce,{children:z(M.slug)}),n(ce,{className:"text-muted-foreground tabular-nums",children:jt(M.createdAt)}),n(ce,{children:R("div",{className:"flex justify-end gap-1",children:[n(L,{"aria-pressed":o===$,"data-testid":`org-select-${$}`,onClick:()=>{k($)},size:"xs",type:"button",variant:"ghost",children:l("Manage")}),n(L,{"data-testid":`org-edit-${$}`,onClick:()=>{m({kind:"edit",org:M})},size:"xs",type:"button",variant:"ghost",children:l("Edit")}),n(L,{"data-testid":`org-delete-${$}`,onClick:()=>{m({kind:"delete",org:M})},size:"xs",type:"button",variant:"ghost",children:l("Delete")})]})})]},$)})})]})})}),t[37]=b,t[38]=o,t[39]=l,t[40]=B):B=t[40];let U;t[41]!==a||t[42]!==b||t[43]!==f.data?.total?(U=b!==null&&n(Ot,{count:b.length,offset:a,onOffsetChange:h,pageSize:St,prefix:"org",total:f.data?.total}),t[41]=a,t[42]=b,t[43]=f.data?.total,t[44]=U):U=t[44];let Q;t[45]!==d.organization||t[46]!==o?(Q=o!==null&&n(Xt,{organizationId:o,rolesEnabled:d.organization.roles,teamsEnabled:d.organization.teams}),t[45]=d.organization,t[46]=o,t[47]=Q):Q=t[47];let P;t[48]!==r?.kind||t[49]!==I?(P=r?.kind==="create"&&n(yt,{mode:"create",onClose:C,onDone:I}),t[48]=r?.kind,t[49]=I,t[50]=P):P=t[50];let J;t[51]!==r||t[52]!==I?(J=r?.kind==="edit"&&n(yt,{mode:"edit",onClose:C,onDone:I,org:r.org}),t[51]=r,t[52]=I,t[53]=J):J=t[53];let j;t[54]!==e||t[55]!==r||t[56]!==I||t[57]!==l?(j=r?.kind==="delete"&&n(Mt,{action:async()=>{const M=z(r.org.id);await e.deleteAuthOrganization({organizationId:M}),i($=>$===M?null:$)},message:l("Delete this organization? Its members, invitations, teams, and custom roles are removed. This cannot be undone."),onClose:C,onDone:I,testId:"org-delete",title:l("Delete organization")}),t[54]=e,t[55]=r,t[56]=I,t[57]=l,t[58]=j):j=t[58];let Z;return t[59]!==T||t[60]!==E||t[61]!==H||t[62]!==B||t[63]!==U||t[64]!==Q||t[65]!==P||t[66]!==J||t[67]!==j?(Z=R("div",{className:"flex flex-col gap-4","data-testid":"lunora-organizations",children:[T,E,H,B,U,Q,P,J,j]}),t[59]=T,t[60]=E,t[61]=H,t[62]=B,t[63]=U,t[64]=Q,t[65]=P,t[66]=J,t[67]=j,t[68]=Z):Z=t[68],Z};export{Al as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as j}from"../packem_shared/wire-codec-Bk4XZGE4.mjs";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as S}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as g,a as A}from"../packem_shared/card
|
|
1
|
+
import{a as j}from"../packem_shared/wire-codec-Bk4XZGE4.mjs";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as S}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as g,a as A}from"../packem_shared/card-By2O8ULa.mjs";import{E}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as I,a as L,b as x,c as m,d as P,e as o}from"../packem_shared/table-D0SBiDu-.mjs";import{u as h}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useAutoRefresh as H}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{u as M}from"../packem_shared/home-panel-DIaVZra4.mjs";import{useT as V}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as b}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{h as C}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as e,jsxs as i}from"react/jsx-runtime";const _=["subscriptions","events"],k={},N=new Set(["active","trialing"]),G=new Set(["past_due","unpaid"]),a=(s,r)=>{if(s[r]!==void 0)return s[r];const p=s.__doc__;return typeof p=="string"?j(p)?.[r]:void 0},n=s=>typeof s=="string"?s:typeof s=="number"||typeof s=="bigint"||typeof s=="boolean"?String(s):"",U=s=>N.has(s)?"default":G.has(s)?"destructive":"outline",ae=({limit:s=100})=>{const r=V(),p=M(),{data:y}=h(b.listTables,k,{live:!0}),R=y!==void 0,B=Array.isArray(y)&&_.every(t=>y.some(c=>c.name===t)),l=p.payments&&B,d=h(b.readTablePage,{filters:[],limit:s,offset:0,orderBy:{column:"updatedAt",direction:"desc"},search:"",table:"subscriptions"},{enabled:l}),u=h(b.readTablePage,{filters:[],limit:25,offset:0,orderBy:{column:"processedAt",direction:"desc"},search:"",table:"events"},{enabled:l}),v=h(b.facetColumn,{column:"state",table:"subscriptions"},{enabled:l});H(()=>{l&&(d.refetch(),u.refetch(),v.refetch())},!0);const f=d.data?.rows??[],w=u.data?.rows??[],D=d.error??u.error,O=d.error===null?u.errorSource:d.errorSource,Q=d.data?.total??f.length,T=v.data?.values===void 0?f.filter(t=>N.has(n(a(t,"state")))).length:v.data.values.reduce((t,c)=>t+(N.has(n(c.value))?c.count:0),0);return R&&!l?e("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:e(E,{description:r("No @lunora/payment tables found in this deployment. Declare the store tables (subscriptions, events, …) in lunora/schema.ts and wire `payment` on createShardDO() to sync customers and subscriptions."),testId:"payments-unconfigured",title:r("No payments configured")})}):i("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:[e("div",{className:"flex items-center gap-2","data-testid":"payments-summary",children:i(g,{className:"justify-between gap-0 py-0",children:[i("div",{className:"flex flex-col gap-2.5 p-4",children:[e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Subscriptions")}),i("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:T}),e(S,{variant:"default",children:r("{count} active",{count:T})})]})]}),e("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:r("{total} total",{total:Q})})]})}),D===null?void 0:e(F,{error:O}),f.length===0&&!d.isLoading?e(E,{testId:"payments-empty",title:r("No subscriptions yet")}):e(g,{className:"overflow-hidden py-0",children:e(A,{className:"px-0",children:i(I,{children:[e(L,{children:i(x,{children:[e(m,{children:r("Provider")}),e(m,{children:r("Reference")}),e(m,{children:r("Plan")}),e(m,{children:r("State")}),e(m,{children:r("Renews")})]})}),e(P,{children:f.map(t=>{const c=n(a(t,"state"));return i(x,{"data-testid":"payment-subscription-row",children:[e(o,{children:n(a(t,"provider"))}),e(o,{children:n(a(t,"referenceId"))}),e(o,{children:n(a(t,"priceId"))}),e(o,{children:e(S,{variant:U(c),children:c})}),e(o,{children:C(a(t,"currentPeriodEnd"))})]},n(a(t,"providerSubscriptionId")))})})]})})}),i(g,{className:"overflow-hidden py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Recent webhook events")})}),e(A,{className:"px-0",children:e(I,{children:e(P,{children:w.map(t=>i(x,{"data-testid":"payment-event-row",children:[e(o,{children:n(a(t,"provider"))}),e(o,{className:"font-medium",children:n(a(t,"type"))}),e(o,{className:"text-muted-foreground",children:n(a(t,"providerEventId"))}),e(o,{children:C(a(t,"processedAt"))})]},n(a(t,"providerEventId"))))})})})]})]})};export{ae as PaymentsPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as h,useRef as se,useEffect as oe}from"react";import{b as xe,d as ye,c as be,a as de,C as me}from"../packem_shared/card--2hKx4L2.mjs";import{useT as ee}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{c as fe}from"react/compiler-runtime";import{E as ge}from"../packem_shared/error-alert-DueSEkt-.mjs";import{L as ve}from"../packem_shared/live-status-BuJdUZFU.mjs";import{B as $}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as L}from"../packem_shared/button-q0UYSmrn.mjs";import{E as pe}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as Ne,a as ke,b as ie,c as te,d as Se,e as ae}from"../packem_shared/table-D0SBiDu-.mjs";import{u as re}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{ADMIN_FUNCTIONS as X}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsxs as i,jsx as a}from"react/jsx-runtime";import{useLunora as ue}from"@lunora/react";import{d as Ce}from"../packem_shared/wire-codec-Bk4XZGE4.mjs";import{ShardInput as we}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{I as J}from"../packem_shared/input-CXhxesPC.mjs";import{L as U}from"../packem_shared/label-DKFzyHq6.mjs";import{T as Pe}from"../packem_shared/textarea--40GKAyz.mjs";import{d as Ae,c as Ee,b as Te,f as le,j as _e}from"../packem_shared/internal-Df43vQI0.mjs";const ne=["read","insert","update","delete"],Ie=(e,t)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[t],Re=e=>e.file===""?e.procedure:`${e.file}:${e.procedure}`,Fe=e=>{const t=new Set;for(const s of e?.advisories??[])if(s.name==="rls_uncovered_table"){const{table:c}=s.metadata;typeof c=="string"&&c!==""&&t.add(c)}return t},Oe=(e,t,s)=>{const c=new Map,r=n=>{const o=c.get(n);if(o!==void 0)return o;const f={cells:{delete:{},insert:{},read:{},update:{}},maskedColumns:new Set,table:n,uncovered:s.has(n)};return c.set(n,f),f};for(const n of e)r(n.table).cells[n.on]={path:Re(n),procedure:n.procedure};for(const n of t)r(n.table).maskedColumns.add(n.column);for(const n of s)r(n);return[...c.values()].toSorted((n,o)=>n.table.localeCompare(o.table))},De=e=>{const t=fe(17);let s;t[0]!==e?(s=e===void 0?{}:e,t[0]=e,t[1]=s):s=t[1];const{onProbe:c}=s,r=ee();let n,o;t[2]===Symbol.for("react.memo_cache_sentinel")?(n={},o={live:!0},t[2]=n,t[3]=o):(n=t[2],o=t[3]);const f=re(X.rlsPolicies,n,o);let l;t[4]===Symbol.for("react.memo_cache_sentinel")?(l={},t[4]=l):l=t[4];const b=re(X.maskPolicies,l);let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u={},t[5]=u):u=t[5];const g=re(X.getAdvisories,u);let v;if(t[6]!==g.data||t[7]!==b.data||t[8]!==c||t[9]!==f||t[10]!==r){let N=null;f.data!==void 0&&(N=Array.isArray(f.data.policies)?f.data.policies:[]);const R=Array.isArray(b.data?.columns)?b.data.columns:[],M=g.data??null,{error:P,errorSource:k,liveError:A}=f,_=N===null?[]:Oe(N,R,Fe(M));let S;t[12]!==A?(S=a("div",{className:"flex items-center justify-end",children:a(ve,{message:A,prefix:"pm"})}),t[12]=A,t[13]=S):S=t[13];let p;t[14]!==P||t[15]!==k?(p=P!==null&&a(ge,{error:k,testId:"pm-error"}),t[14]=P,t[15]=k,t[16]=p):p=t[16],v=i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-matrix",children:[S,p,N!==null&&_.length===0?a(pe,{description:r("Add a `definePolicy` and wire it through `.use(rls(...))` to populate this matrix."),testId:"pm-empty",title:r("No policy")}):i(Ne,{"data-testid":"pm-table",children:[a(ke,{children:i(ie,{children:[a(te,{children:r("Table")}),ne.map(m=>a(te,{children:Ie(r,m)},m)),a(te,{children:r("Masked columns")})]})}),a(Se,{children:_.map(m=>i(ie,{"data-testid":`pm-row-${m.table}`,children:[a(ae,{className:"font-mono text-xs",children:i("span",{className:"flex items-center gap-1.5",children:[m.table,m.uncovered&&a($,{"data-testid":`pm-uncovered-${m.table}`,title:r("Uncovered — reachable without a policy"),variant:"destructive",children:r("Uncovered — reachable without a policy")})]})}),ne.map(E=>{const x=m.cells[E];return a(ae,{"data-testid":`pm-cell-${m.table}-${E}`,children:x.procedure===void 0?a("span",{className:"text-xs text-muted-foreground",children:r("No policy")}):i("span",{className:"flex flex-col gap-1",children:[a($,{variant:"secondary",children:r("Covered by {procedure}",{procedure:x.procedure})}),c!==void 0&&a(L,{className:"h-auto justify-start p-0 text-[11px]","data-testid":`pm-probe-${m.table}-${E}`,onClick:()=>{c(m.table,E,x.path??"")},size:"xs",type:"button",variant:"ghost",children:r("Probe this")})]})},E)}),a(ae,{children:m.maskedColumns.size===0?a("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):a("span",{className:"flex flex-wrap gap-1",children:[...m.maskedColumns].map(Le)})})]},m.table))})]})]}),t[6]=g.data,t[7]=b.data,t[8]=c,t[9]=f,t[10]=r,t[11]=v}else v=t[11];return v};function Le(e){return a($,{variant:"outline",children:e},e)}const $e=Ee(X.runAs),Ue=new Set(["FORBIDDEN","RLS_REQUIRED","UNAUTHORIZED"]),Me=e=>{const t=e?.code;return typeof t=="string"?t:void 0},ze=()=>{const e=ue();return async({args:t,functionPath:s,shardKey:c="",userId:r})=>{if(r.trim()==="")return{kind:"invalid",message:"No identity to probe: enter the userId whose access you want to test."};const n=$e;try{return{kind:"allowed",value:await e.query(n,{args:t,functionPath:s,userId:r},Ae(c))}}catch(o){const f=o instanceof Error?o.message:String(o),l=Me(o);return l!==void 0&&Ue.has(l)?{kind:"denied",message:f}:{kind:"errored",message:f}}}},je=e=>e===void 0?"undefined":JSON.stringify(e,_e,2),qe=({functions:e,prefill:t,runAsIdentity:s=!1}={})=>{const c=ue(),r=ee(),n=ze(),[o,f]=h(null),[l,b]=h(null),u=e??o??[],[g,v]=h(""),[N,R]=h("{}"),[M,P]=h(""),[k,A]=h(""),[_,S]=h(!1),[p,m]=h(null),[E,x]=h(null),I=se(-1),C=se(0);oe(()=>{if(e!==void 0)return;let d=!1;return c.listFunctions().then(y=>(d||f(y),y)).catch(y=>{d||b(Te(y))}),()=>{d=!0}},[c,e]),oe(()=>{if(t===void 0||I.current===t.nonce)return;I.current=t.nonce,C.current+=1;const d=t.functionPath;queueMicrotask(()=>{v(d),m(null)})},[t]);const w=g===""?u[0]?.path??"":g,F=async()=>{if(w==="")return;let d;try{d=N.trim()===""?{}:Ce(JSON.parse(N))}catch(T){x(r("Invalid JSON args: {message}",{message:T.message})),m(null);return}C.current+=1;const y=C.current;x(null),S(!0);try{const T=await n({args:d,functionPath:w,shardKey:M.trim(),userId:k.trim()});y===C.current&&m(T)}finally{S(!1)}},K=()=>{le(F())},O=d=>{v(d.target.value)},D=d=>{R(d.target.value)},Y=d=>{A(d.target.value)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-playground",children:[l!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-discover-error",role:"alert",children:l}),!s&&a(pe,{description:r("Dev only: runs the selected function as this user over the admin gate so you can test auth and RLS."),testId:"pp-gate",title:r("Set `runAsIdentity` to forge an identity and probe access.")}),i("div",{className:"flex flex-col gap-3 rounded-md border border-border p-3",children:[i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-function",children:r("Function")}),a("select",{"aria-label":r("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","data-testid":"pp-function",id:"pp-function",onChange:O,value:w,children:u.map(d=>i("option",{value:d.path,children:[d.path," (",d.kind,")"]},d.path))})]}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-args",children:r("Arguments")}),a(Pe,{"aria-label":r("Arguments"),className:"font-mono text-xs","data-testid":"pp-args",id:"pp-args",onChange:D,value:N})]}),a(we,{onChange:P,testId:"pp-shard",value:M}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-user",children:r("Run as (userId)")}),a(J,{"aria-label":r("Identity (userId) to run as"),className:"font-mono text-xs","data-testid":"pp-user",id:"pp-user",onChange:Y,placeholder:r("Required — the identity to probe as"),value:k})]}),i("div",{className:"flex items-center gap-2",children:[a(L,{"data-testid":"pp-run",disabled:!s||_||w==="",onClick:K,type:"button",children:r(_?"Probing…":"Run probe")}),k.trim()!==""&&a($,{"data-testid":"pp-as-badge",variant:"secondary",children:r("as {userId}",{userId:k.trim()})})]})]}),E!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-args-error",role:"alert",children:E}),p!==null&&p.kind==="allowed"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-allowed",children:[a($,{variant:"secondary",children:r("Allowed")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-result",children:je(p.value)})]}),p!==null&&p.kind==="invalid"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-invalid",children:[a($,{variant:"outline",children:r("Not run")}),a("p",{className:"text-sm text-muted-foreground","data-testid":"pp-invalid",role:"status",children:p.message})]}),p!==null&&p.kind==="errored"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-errored",children:[a($,{variant:"outline",children:r("Errored")}),a("p",{className:"text-sm text-muted-foreground",children:r("The call failed for a reason that is not an access verdict, so it says nothing about the policy.")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-errored",role:"alert",children:p.message})]}),p!==null&&p.kind==="denied"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-denied",children:[a($,{variant:"destructive",children:r("Denied")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"pp-denied",role:"alert",children:p.message})]})]})},Be="/__lunora/policy-scaffold",We={"already-wired":"That procedure already has an rls(...) policy wired in.","file-exists":"A policy file with that name already exists — pick another name or edit it by hand.","invalid-identifier":"Name, table, and policy-set must be plain identifiers (letters, digits, _ or $).","unknown-procedure":"No exported procedure was found at that file path.","unsupported-procedure-shape":"That procedure uses the bare query({…}) form — convert it to the builder form (c.use(…).query(…)) before wiring RLS."},Qe=async e=>{const t=await fetch(Be,{body:JSON.stringify(e),headers:{"Content-Type":"application/json"},method:"POST"}),s=await t.json();if(s.needsManualEdit===!0)return{kind:"needs-manual-edit",message:s.message??"This change must be made by hand."};if(t.ok)return{diagnostics:s.diagnostics??[],kind:"ok",label:s.fileName??s.exportName??""};const c=s.error;return{kind:"error",message:c===void 0?`policy scaffold failed (${String(t.status)})`:We[c]??c}},ce={exportName:"",filePath:"",policyName:"",policies:"",tableName:""},He=()=>{const e=fe(69),t=ee(),[s,c]=h(null),[r,n]=h(!1),[o,f]=h(null),[l,b]=h(ce);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=Z=>{const H=Z.target.name,{value:G}=Z.target;b(he=>({...he,[H]:G}))},e[0]=u):u=e[0];const g=u;let v;e[1]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{c(null),b(ce)},e[1]=v):v=e[1];const N=v;let R;e[2]===Symbol.for("react.memo_cache_sentinel")?(R=async Z=>{n(!0),f(null);try{const H=await Qe(Z);f(H),H.kind==="ok"&&N()}catch(H){const G=H;f({kind:"error",message:G instanceof Error?G.message:String(G)})}n(!1)},e[2]=R):R=e[2];const M=R;let P;e[3]!==l.policyName||e[4]!==l.tableName?(P=()=>{le(M({kind:"scaffoldPolicy",name:l.policyName.trim(),table:l.tableName.trim()}))},e[3]=l.policyName,e[4]=l.tableName,e[5]=P):P=e[5];const k=P;let A;e[6]!==l.exportName||e[7]!==l.filePath||e[8]!==l.policies?(A=()=>{le(M({exportName:l.exportName.trim(),filePath:l.filePath.trim(),kind:"wireRls",policies:l.policies.trim()}))},e[6]=l.exportName,e[7]=l.filePath,e[8]=l.policies,e[9]=A):A=e[9];const _=A;let S;e[10]===Symbol.for("react.memo_cache_sentinel")?(S=()=>{f(null),c("scaffold")},e[10]=S):S=e[10];const p=S;let m;e[11]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{f(null),c("wire")},e[11]=m):m=e[11];const E=m;let x;e[12]!==t?(x=t("Scaffold access rules"),e[12]=t,e[13]=x):x=e[13];let I;e[14]!==x?(I=a(xe,{children:x}),e[14]=x,e[15]=I):I=e[15];let C;e[16]!==t?(C=t("Writes a new deny-by-default policy file under lunora/, or wires one into a procedure, then reruns codegen. Local dev only."),e[16]=t,e[17]=C):C=e[17];let w;e[18]!==C?(w=a(ye,{children:C}),e[18]=C,e[19]=w):w=e[19];let F;e[20]!==w||e[21]!==I?(F=i(be,{children:[I,w]}),e[20]=w,e[21]=I,e[22]=F):F=e[22];const K=s==="scaffold"?"default":"outline";let O;e[23]!==t?(O=t("New policy file"),e[23]=t,e[24]=O):O=e[24];let D;e[25]!==K||e[26]!==O?(D=a(L,{"data-testid":"policy-scaffolder-new",onClick:p,size:"xs",type:"button",variant:K,children:O}),e[25]=K,e[26]=O,e[27]=D):D=e[27];const Y=s==="wire"?"default":"outline";let d;e[28]!==t?(d=t("Wire into a procedure"),e[28]=t,e[29]=d):d=e[29];let y;e[30]!==Y||e[31]!==d?(y=a(L,{"data-testid":"policy-scaffolder-wire",onClick:E,size:"xs",type:"button",variant:Y,children:d}),e[30]=Y,e[31]=d,e[32]=y):y=e[32];let T;e[33]!==D||e[34]!==y?(T=i("div",{className:"flex flex-wrap gap-2",children:[D,y]}),e[33]=D,e[34]=y,e[35]=T):T=e[35];let z;e[36]!==r||e[37]!==l.policyName||e[38]!==l.tableName||e[39]!==s||e[40]!==k||e[41]!==t?(z=s==="scaffold"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-new-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-name",children:t("Policy name")}),a(J,{"data-testid":"policy-scaffolder-name",id:"policy-scaffolder-name",name:"policyName",onChange:g,value:l.policyName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-table",children:t("Table name")}),a(J,{"data-testid":"policy-scaffolder-table",id:"policy-scaffolder-table",name:"tableName",onChange:g,value:l.tableName})]}),a(L,{"data-testid":"policy-scaffolder-create",disabled:r||l.policyName.trim()===""||l.tableName.trim()==="",onClick:k,size:"xs",type:"button",children:t(r?"Creating…":"Create policy file")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[36]=r,e[37]=l.policyName,e[38]=l.tableName,e[39]=s,e[40]=k,e[41]=t,e[42]=z):z=e[42];let j;e[43]!==r||e[44]!==l.exportName||e[45]!==l.filePath||e[46]!==l.policies||e[47]!==s||e[48]!==_||e[49]!==t?(j=s==="wire"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-wire-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-file",children:t("Procedure file path")}),a(J,{"data-testid":"policy-scaffolder-file",id:"policy-scaffolder-file",name:"filePath",onChange:g,value:l.filePath})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-export",children:t("Exported procedure")}),a(J,{"data-testid":"policy-scaffolder-export",id:"policy-scaffolder-export",name:"exportName",onChange:g,value:l.exportName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-policies",children:t("Policy set identifier")}),a(J,{"data-testid":"policy-scaffolder-policies",id:"policy-scaffolder-policies",name:"policies",onChange:g,value:l.policies})]}),a(L,{"data-testid":"policy-scaffolder-apply",disabled:r||l.filePath.trim()===""||l.exportName.trim()===""||l.policies.trim()==="",onClick:_,size:"xs",type:"button",children:t(r?"Wiring…":"Wire RLS")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[43]=r,e[44]=l.exportName,e[45]=l.filePath,e[46]=l.policies,e[47]=s,e[48]=_,e[49]=t,e[50]=j):j=e[50];let q;e[51]!==o?(q=o?.kind==="error"&&a("p",{className:"mt-3 text-sm text-destructive","data-testid":"policy-scaffolder-error",role:"alert",children:o.message}),e[51]=o,e[52]=q):q=e[52];let B;e[53]!==o?.kind||e[54]!==t?(B=o?.kind==="needs-manual-edit"&&a("p",{className:"mt-3 text-sm text-amber-600 dark:text-amber-500","data-testid":"policy-scaffolder-manual",role:"alert",children:t("This change must be made by hand — the scaffolder only adds new, deny-by-default rules.")}),e[53]=o?.kind,e[54]=t,e[55]=B):B=e[55];let W;e[56]!==o||e[57]!==t?(W=o?.kind==="ok"&&i("div",{className:"mt-3 flex flex-col gap-1","data-testid":"policy-scaffolder-ok",children:[a("p",{className:"text-sm text-emerald-600 dark:text-emerald-500",children:t("Scaffolded {label} and reran codegen. Fill in the `when` predicates before relying on it.",{label:o.label})}),o.diagnostics.length>0&&a("ul",{className:"flex flex-col gap-0.5","data-testid":"policy-scaffolder-diagnostics",children:o.diagnostics.map(Je)})]}),e[56]=o,e[57]=t,e[58]=W):W=e[58];let Q;e[59]!==T||e[60]!==z||e[61]!==j||e[62]!==q||e[63]!==B||e[64]!==W?(Q=i(de,{children:[T,z,j,q,B,W]}),e[59]=T,e[60]=z,e[61]=j,e[62]=q,e[63]=B,e[64]=W,e[65]=Q):Q=e[65];let V;return e[66]!==F||e[67]!==Q?(V=i(me,{"data-testid":"policy-scaffolder",size:"sm",children:[F,Q]}),e[66]=F,e[67]=Q,e[68]=V):V=e[68],V};function Je(e){return a("li",{className:"font-mono text-[11px] text-destructive",children:e},e)}const ut=({functions:e,runAsIdentity:t=!1,schemaEditable:s=!1}={})=>{const c=ee(),[r,n]=h(void 0),o=(f,l,b)=>{b!==""&&n(u=>({functionPath:b,nonce:(u?.nonce??0)+1}))};return i("div",{className:"flex flex-col gap-8","data-testid":"lunora-permissions",children:[i("section",{className:"flex flex-col gap-3",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Permissions")})}),a(De,{onProbe:o})]}),a("section",{className:"flex flex-col gap-3",children:i(me,{className:"gap-0 py-0",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Probe")})}),i(de,{className:"px-4 py-4",children:[a("p",{className:"mb-3 text-sm text-muted-foreground",children:c("Pick a function and an identity, then run it to see the access outcome.")}),a(qe,{functions:e,prefill:r,runAsIdentity:t})]})]})}),s&&a("section",{className:"flex flex-col gap-2",children:a(He,{})})]})};export{ut as PermissionsPanel};
|
|
1
|
+
import{useState as h,useRef as se,useEffect as oe}from"react";import{c as xe,d as ye,b as be,a as de,C as me}from"../packem_shared/card-By2O8ULa.mjs";import{useT as ee}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{c as fe}from"react/compiler-runtime";import{E as ge}from"../packem_shared/error-alert-DueSEkt-.mjs";import{L as ve}from"../packem_shared/live-status-BuJdUZFU.mjs";import{B as $}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as L}from"../packem_shared/button-q0UYSmrn.mjs";import{E as pe}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as Ne,a as ke,b as ie,c as te,d as Se,e as ae}from"../packem_shared/table-D0SBiDu-.mjs";import{u as re}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{ADMIN_FUNCTIONS as X}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsxs as i,jsx as a}from"react/jsx-runtime";import{useLunora as ue}from"@lunora/react";import{d as Ce}from"../packem_shared/wire-codec-Bk4XZGE4.mjs";import{ShardInput as we}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{I as J}from"../packem_shared/input-CXhxesPC.mjs";import{L as U}from"../packem_shared/label-DKFzyHq6.mjs";import{T as Pe}from"../packem_shared/textarea--40GKAyz.mjs";import{d as Ae,c as Ee,b as Te,f as le,j as _e}from"../packem_shared/internal-Df43vQI0.mjs";const ne=["read","insert","update","delete"],Ie=(e,t)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[t],Re=e=>e.file===""?e.procedure:`${e.file}:${e.procedure}`,Fe=e=>{const t=new Set;for(const s of e?.advisories??[])if(s.name==="rls_uncovered_table"){const{table:c}=s.metadata;typeof c=="string"&&c!==""&&t.add(c)}return t},Oe=(e,t,s)=>{const c=new Map,r=n=>{const o=c.get(n);if(o!==void 0)return o;const f={cells:{delete:{},insert:{},read:{},update:{}},maskedColumns:new Set,table:n,uncovered:s.has(n)};return c.set(n,f),f};for(const n of e)r(n.table).cells[n.on]={path:Re(n),procedure:n.procedure};for(const n of t)r(n.table).maskedColumns.add(n.column);for(const n of s)r(n);return[...c.values()].toSorted((n,o)=>n.table.localeCompare(o.table))},De=e=>{const t=fe(17);let s;t[0]!==e?(s=e===void 0?{}:e,t[0]=e,t[1]=s):s=t[1];const{onProbe:c}=s,r=ee();let n,o;t[2]===Symbol.for("react.memo_cache_sentinel")?(n={},o={live:!0},t[2]=n,t[3]=o):(n=t[2],o=t[3]);const f=re(X.rlsPolicies,n,o);let l;t[4]===Symbol.for("react.memo_cache_sentinel")?(l={},t[4]=l):l=t[4];const b=re(X.maskPolicies,l);let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u={},t[5]=u):u=t[5];const g=re(X.getAdvisories,u);let v;if(t[6]!==g.data||t[7]!==b.data||t[8]!==c||t[9]!==f||t[10]!==r){let N=null;f.data!==void 0&&(N=Array.isArray(f.data.policies)?f.data.policies:[]);const R=Array.isArray(b.data?.columns)?b.data.columns:[],M=g.data??null,{error:P,errorSource:k,liveError:A}=f,_=N===null?[]:Oe(N,R,Fe(M));let S;t[12]!==A?(S=a("div",{className:"flex items-center justify-end",children:a(ve,{message:A,prefix:"pm"})}),t[12]=A,t[13]=S):S=t[13];let p;t[14]!==P||t[15]!==k?(p=P!==null&&a(ge,{error:k,testId:"pm-error"}),t[14]=P,t[15]=k,t[16]=p):p=t[16],v=i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-matrix",children:[S,p,N!==null&&_.length===0?a(pe,{description:r("Add a `definePolicy` and wire it through `.use(rls(...))` to populate this matrix."),testId:"pm-empty",title:r("No policy")}):i(Ne,{"data-testid":"pm-table",children:[a(ke,{children:i(ie,{children:[a(te,{children:r("Table")}),ne.map(m=>a(te,{children:Ie(r,m)},m)),a(te,{children:r("Masked columns")})]})}),a(Se,{children:_.map(m=>i(ie,{"data-testid":`pm-row-${m.table}`,children:[a(ae,{className:"font-mono text-xs",children:i("span",{className:"flex items-center gap-1.5",children:[m.table,m.uncovered&&a($,{"data-testid":`pm-uncovered-${m.table}`,title:r("Uncovered — reachable without a policy"),variant:"destructive",children:r("Uncovered — reachable without a policy")})]})}),ne.map(E=>{const x=m.cells[E];return a(ae,{"data-testid":`pm-cell-${m.table}-${E}`,children:x.procedure===void 0?a("span",{className:"text-xs text-muted-foreground",children:r("No policy")}):i("span",{className:"flex flex-col gap-1",children:[a($,{variant:"secondary",children:r("Covered by {procedure}",{procedure:x.procedure})}),c!==void 0&&a(L,{className:"h-auto justify-start p-0 text-[11px]","data-testid":`pm-probe-${m.table}-${E}`,onClick:()=>{c(m.table,E,x.path??"")},size:"xs",type:"button",variant:"ghost",children:r("Probe this")})]})},E)}),a(ae,{children:m.maskedColumns.size===0?a("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):a("span",{className:"flex flex-wrap gap-1",children:[...m.maskedColumns].map(Le)})})]},m.table))})]})]}),t[6]=g.data,t[7]=b.data,t[8]=c,t[9]=f,t[10]=r,t[11]=v}else v=t[11];return v};function Le(e){return a($,{variant:"outline",children:e},e)}const $e=Ee(X.runAs),Ue=new Set(["FORBIDDEN","RLS_REQUIRED","UNAUTHORIZED"]),Me=e=>{const t=e?.code;return typeof t=="string"?t:void 0},ze=()=>{const e=ue();return async({args:t,functionPath:s,shardKey:c="",userId:r})=>{if(r.trim()==="")return{kind:"invalid",message:"No identity to probe: enter the userId whose access you want to test."};const n=$e;try{return{kind:"allowed",value:await e.query(n,{args:t,functionPath:s,userId:r},Ae(c))}}catch(o){const f=o instanceof Error?o.message:String(o),l=Me(o);return l!==void 0&&Ue.has(l)?{kind:"denied",message:f}:{kind:"errored",message:f}}}},je=e=>e===void 0?"undefined":JSON.stringify(e,_e,2),qe=({functions:e,prefill:t,runAsIdentity:s=!1}={})=>{const c=ue(),r=ee(),n=ze(),[o,f]=h(null),[l,b]=h(null),u=e??o??[],[g,v]=h(""),[N,R]=h("{}"),[M,P]=h(""),[k,A]=h(""),[_,S]=h(!1),[p,m]=h(null),[E,x]=h(null),I=se(-1),C=se(0);oe(()=>{if(e!==void 0)return;let d=!1;return c.listFunctions().then(y=>(d||f(y),y)).catch(y=>{d||b(Te(y))}),()=>{d=!0}},[c,e]),oe(()=>{if(t===void 0||I.current===t.nonce)return;I.current=t.nonce,C.current+=1;const d=t.functionPath;queueMicrotask(()=>{v(d),m(null)})},[t]);const w=g===""?u[0]?.path??"":g,F=async()=>{if(w==="")return;let d;try{d=N.trim()===""?{}:Ce(JSON.parse(N))}catch(T){x(r("Invalid JSON args: {message}",{message:T.message})),m(null);return}C.current+=1;const y=C.current;x(null),S(!0);try{const T=await n({args:d,functionPath:w,shardKey:M.trim(),userId:k.trim()});y===C.current&&m(T)}finally{S(!1)}},K=()=>{le(F())},O=d=>{v(d.target.value)},D=d=>{R(d.target.value)},Y=d=>{A(d.target.value)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-playground",children:[l!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-discover-error",role:"alert",children:l}),!s&&a(pe,{description:r("Dev only: runs the selected function as this user over the admin gate so you can test auth and RLS."),testId:"pp-gate",title:r("Set `runAsIdentity` to forge an identity and probe access.")}),i("div",{className:"flex flex-col gap-3 rounded-md border border-border p-3",children:[i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-function",children:r("Function")}),a("select",{"aria-label":r("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","data-testid":"pp-function",id:"pp-function",onChange:O,value:w,children:u.map(d=>i("option",{value:d.path,children:[d.path," (",d.kind,")"]},d.path))})]}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-args",children:r("Arguments")}),a(Pe,{"aria-label":r("Arguments"),className:"font-mono text-xs","data-testid":"pp-args",id:"pp-args",onChange:D,value:N})]}),a(we,{onChange:P,testId:"pp-shard",value:M}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-user",children:r("Run as (userId)")}),a(J,{"aria-label":r("Identity (userId) to run as"),className:"font-mono text-xs","data-testid":"pp-user",id:"pp-user",onChange:Y,placeholder:r("Required — the identity to probe as"),value:k})]}),i("div",{className:"flex items-center gap-2",children:[a(L,{"data-testid":"pp-run",disabled:!s||_||w==="",onClick:K,type:"button",children:r(_?"Probing…":"Run probe")}),k.trim()!==""&&a($,{"data-testid":"pp-as-badge",variant:"secondary",children:r("as {userId}",{userId:k.trim()})})]})]}),E!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-args-error",role:"alert",children:E}),p!==null&&p.kind==="allowed"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-allowed",children:[a($,{variant:"secondary",children:r("Allowed")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-result",children:je(p.value)})]}),p!==null&&p.kind==="invalid"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-invalid",children:[a($,{variant:"outline",children:r("Not run")}),a("p",{className:"text-sm text-muted-foreground","data-testid":"pp-invalid",role:"status",children:p.message})]}),p!==null&&p.kind==="errored"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-errored",children:[a($,{variant:"outline",children:r("Errored")}),a("p",{className:"text-sm text-muted-foreground",children:r("The call failed for a reason that is not an access verdict, so it says nothing about the policy.")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-errored",role:"alert",children:p.message})]}),p!==null&&p.kind==="denied"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-denied",children:[a($,{variant:"destructive",children:r("Denied")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"pp-denied",role:"alert",children:p.message})]})]})},Be="/__lunora/policy-scaffold",We={"already-wired":"That procedure already has an rls(...) policy wired in.","file-exists":"A policy file with that name already exists — pick another name or edit it by hand.","invalid-identifier":"Name, table, and policy-set must be plain identifiers (letters, digits, _ or $).","unknown-procedure":"No exported procedure was found at that file path.","unsupported-procedure-shape":"That procedure uses the bare query({…}) form — convert it to the builder form (c.use(…).query(…)) before wiring RLS."},Qe=async e=>{const t=await fetch(Be,{body:JSON.stringify(e),headers:{"Content-Type":"application/json"},method:"POST"}),s=await t.json();if(s.needsManualEdit===!0)return{kind:"needs-manual-edit",message:s.message??"This change must be made by hand."};if(t.ok)return{diagnostics:s.diagnostics??[],kind:"ok",label:s.fileName??s.exportName??""};const c=s.error;return{kind:"error",message:c===void 0?`policy scaffold failed (${String(t.status)})`:We[c]??c}},ce={exportName:"",filePath:"",policyName:"",policies:"",tableName:""},He=()=>{const e=fe(69),t=ee(),[s,c]=h(null),[r,n]=h(!1),[o,f]=h(null),[l,b]=h(ce);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=Z=>{const H=Z.target.name,{value:G}=Z.target;b(he=>({...he,[H]:G}))},e[0]=u):u=e[0];const g=u;let v;e[1]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{c(null),b(ce)},e[1]=v):v=e[1];const N=v;let R;e[2]===Symbol.for("react.memo_cache_sentinel")?(R=async Z=>{n(!0),f(null);try{const H=await Qe(Z);f(H),H.kind==="ok"&&N()}catch(H){const G=H;f({kind:"error",message:G instanceof Error?G.message:String(G)})}n(!1)},e[2]=R):R=e[2];const M=R;let P;e[3]!==l.policyName||e[4]!==l.tableName?(P=()=>{le(M({kind:"scaffoldPolicy",name:l.policyName.trim(),table:l.tableName.trim()}))},e[3]=l.policyName,e[4]=l.tableName,e[5]=P):P=e[5];const k=P;let A;e[6]!==l.exportName||e[7]!==l.filePath||e[8]!==l.policies?(A=()=>{le(M({exportName:l.exportName.trim(),filePath:l.filePath.trim(),kind:"wireRls",policies:l.policies.trim()}))},e[6]=l.exportName,e[7]=l.filePath,e[8]=l.policies,e[9]=A):A=e[9];const _=A;let S;e[10]===Symbol.for("react.memo_cache_sentinel")?(S=()=>{f(null),c("scaffold")},e[10]=S):S=e[10];const p=S;let m;e[11]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{f(null),c("wire")},e[11]=m):m=e[11];const E=m;let x;e[12]!==t?(x=t("Scaffold access rules"),e[12]=t,e[13]=x):x=e[13];let I;e[14]!==x?(I=a(xe,{children:x}),e[14]=x,e[15]=I):I=e[15];let C;e[16]!==t?(C=t("Writes a new deny-by-default policy file under lunora/, or wires one into a procedure, then reruns codegen. Local dev only."),e[16]=t,e[17]=C):C=e[17];let w;e[18]!==C?(w=a(ye,{children:C}),e[18]=C,e[19]=w):w=e[19];let F;e[20]!==w||e[21]!==I?(F=i(be,{children:[I,w]}),e[20]=w,e[21]=I,e[22]=F):F=e[22];const K=s==="scaffold"?"default":"outline";let O;e[23]!==t?(O=t("New policy file"),e[23]=t,e[24]=O):O=e[24];let D;e[25]!==K||e[26]!==O?(D=a(L,{"data-testid":"policy-scaffolder-new",onClick:p,size:"xs",type:"button",variant:K,children:O}),e[25]=K,e[26]=O,e[27]=D):D=e[27];const Y=s==="wire"?"default":"outline";let d;e[28]!==t?(d=t("Wire into a procedure"),e[28]=t,e[29]=d):d=e[29];let y;e[30]!==Y||e[31]!==d?(y=a(L,{"data-testid":"policy-scaffolder-wire",onClick:E,size:"xs",type:"button",variant:Y,children:d}),e[30]=Y,e[31]=d,e[32]=y):y=e[32];let T;e[33]!==D||e[34]!==y?(T=i("div",{className:"flex flex-wrap gap-2",children:[D,y]}),e[33]=D,e[34]=y,e[35]=T):T=e[35];let z;e[36]!==r||e[37]!==l.policyName||e[38]!==l.tableName||e[39]!==s||e[40]!==k||e[41]!==t?(z=s==="scaffold"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-new-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-name",children:t("Policy name")}),a(J,{"data-testid":"policy-scaffolder-name",id:"policy-scaffolder-name",name:"policyName",onChange:g,value:l.policyName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-table",children:t("Table name")}),a(J,{"data-testid":"policy-scaffolder-table",id:"policy-scaffolder-table",name:"tableName",onChange:g,value:l.tableName})]}),a(L,{"data-testid":"policy-scaffolder-create",disabled:r||l.policyName.trim()===""||l.tableName.trim()==="",onClick:k,size:"xs",type:"button",children:t(r?"Creating…":"Create policy file")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[36]=r,e[37]=l.policyName,e[38]=l.tableName,e[39]=s,e[40]=k,e[41]=t,e[42]=z):z=e[42];let j;e[43]!==r||e[44]!==l.exportName||e[45]!==l.filePath||e[46]!==l.policies||e[47]!==s||e[48]!==_||e[49]!==t?(j=s==="wire"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-wire-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-file",children:t("Procedure file path")}),a(J,{"data-testid":"policy-scaffolder-file",id:"policy-scaffolder-file",name:"filePath",onChange:g,value:l.filePath})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-export",children:t("Exported procedure")}),a(J,{"data-testid":"policy-scaffolder-export",id:"policy-scaffolder-export",name:"exportName",onChange:g,value:l.exportName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-policies",children:t("Policy set identifier")}),a(J,{"data-testid":"policy-scaffolder-policies",id:"policy-scaffolder-policies",name:"policies",onChange:g,value:l.policies})]}),a(L,{"data-testid":"policy-scaffolder-apply",disabled:r||l.filePath.trim()===""||l.exportName.trim()===""||l.policies.trim()==="",onClick:_,size:"xs",type:"button",children:t(r?"Wiring…":"Wire RLS")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[43]=r,e[44]=l.exportName,e[45]=l.filePath,e[46]=l.policies,e[47]=s,e[48]=_,e[49]=t,e[50]=j):j=e[50];let q;e[51]!==o?(q=o?.kind==="error"&&a("p",{className:"mt-3 text-sm text-destructive","data-testid":"policy-scaffolder-error",role:"alert",children:o.message}),e[51]=o,e[52]=q):q=e[52];let B;e[53]!==o?.kind||e[54]!==t?(B=o?.kind==="needs-manual-edit"&&a("p",{className:"mt-3 text-sm text-amber-600 dark:text-amber-500","data-testid":"policy-scaffolder-manual",role:"alert",children:t("This change must be made by hand — the scaffolder only adds new, deny-by-default rules.")}),e[53]=o?.kind,e[54]=t,e[55]=B):B=e[55];let W;e[56]!==o||e[57]!==t?(W=o?.kind==="ok"&&i("div",{className:"mt-3 flex flex-col gap-1","data-testid":"policy-scaffolder-ok",children:[a("p",{className:"text-sm text-emerald-600 dark:text-emerald-500",children:t("Scaffolded {label} and reran codegen. Fill in the `when` predicates before relying on it.",{label:o.label})}),o.diagnostics.length>0&&a("ul",{className:"flex flex-col gap-0.5","data-testid":"policy-scaffolder-diagnostics",children:o.diagnostics.map(Je)})]}),e[56]=o,e[57]=t,e[58]=W):W=e[58];let Q;e[59]!==T||e[60]!==z||e[61]!==j||e[62]!==q||e[63]!==B||e[64]!==W?(Q=i(de,{children:[T,z,j,q,B,W]}),e[59]=T,e[60]=z,e[61]=j,e[62]=q,e[63]=B,e[64]=W,e[65]=Q):Q=e[65];let V;return e[66]!==F||e[67]!==Q?(V=i(me,{"data-testid":"policy-scaffolder",size:"sm",children:[F,Q]}),e[66]=F,e[67]=Q,e[68]=V):V=e[68],V};function Je(e){return a("li",{className:"font-mono text-[11px] text-destructive",children:e},e)}const ut=({functions:e,runAsIdentity:t=!1,schemaEditable:s=!1}={})=>{const c=ee(),[r,n]=h(void 0),o=(f,l,b)=>{b!==""&&n(u=>({functionPath:b,nonce:(u?.nonce??0)+1}))};return i("div",{className:"flex flex-col gap-8","data-testid":"lunora-permissions",children:[i("section",{className:"flex flex-col gap-3",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Permissions")})}),a(De,{onProbe:o})]}),a("section",{className:"flex flex-col gap-3",children:i(me,{className:"gap-0 py-0",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Probe")})}),i(de,{className:"px-4 py-4",children:[a("p",{className:"mb-3 text-sm text-muted-foreground",children:c("Pick a function and an identity, then run it to see the access outcome.")}),a(qe,{functions:e,prefill:r,runAsIdentity:t})]})]})}),s&&a("section",{className:"flex flex-col gap-2",children:a(He,{})})]})};export{ut as PermissionsPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as G}from"react/compiler-runtime";import{useLunora as Ve}from"@lunora/react";import{useState as M}from"react";import{ConfirmButton as Ye}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{E as Xe}from"../packem_shared/error-alert-DueSEkt-.mjs";import{A as Ke}from"../packem_shared/alert-PB5W11MM.mjs";import{B as ve}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as we}from"../packem_shared/button-q0UYSmrn.mjs";import{C as $e,a as Oe}from"../packem_shared/card--2hKx4L2.mjs";import{E as Qe}from"../packem_shared/empty-state-D7jEML_T.mjs";import{I as Ze}from"../packem_shared/input-CXhxesPC.mjs";import{S as et}from"../packem_shared/scroll-area-CXCQH7VT.mjs";import{T as ke,a as Ue,b as oe,c as _,d as Je,e as T}from"../packem_shared/table-D0SBiDu-.mjs";import{T as tt}from"../packem_shared/textarea--40GKAyz.mjs";import{u as Be}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useAutoRefresh as st}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{useT as P}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as W}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{d as _e,b as Te,c as Ae,f as Ce,h as at,j as rt}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as s,jsxs as q,Fragment as Fe}from"react/jsx-runtime";const nt=(n,e)=>{const t=new Set(n.map(a=>a.deadLetterQueue).filter(a=>typeof a=="string"&&a!=="")),i=n.filter(a=>(a.deadLetterQueue===void 0||a.deadLetterQueue==="")&&!t.has(a.name)),l=e.filter(a=>a.deadLettered).length;return{deadLetteredCount:l,queuesWithoutDlq:i,showReliabilityWarning:i.length>0||l>0}},ot=200,lt=Ae(W.sendQueueMessage),dt=Ae(W.replayQueueMessage),it=Ae(W.clearQueueMessages),Re=96,ct=n=>{if(n===void 0)return"—";try{return JSON.stringify(n,rt)}catch{return"[unserializable]"}},ut=n=>n.length>Re?`${n.slice(0,Re)}…`:n,mt=n=>n==="error"?"destructive":n==="retry"?"outline":"secondary",ft=(n,e)=>e(n==="messages"?"Messages":n==="send"?"Send":"Declared"),ht=n=>{const e=G(11),{loaded:t,queues:i}=n,l=P();let a;e[0]!==l?(a=l("Queues are declared in code with defineQueue. Enqueue from a mutation or action with ctx.queues.<name>.send(...); push consumers process batches in the worker."),e[0]=l,e[1]=a):a=e[1];let o;e[2]!==a?(o=s("p",{className:"text-sm text-muted-foreground",children:a}),e[2]=a,e[3]=o):o=e[3];let r;e[4]!==t||e[5]!==i||e[6]!==l?(r=t&&i.length===0?s(Qe,{description:l("No defineQueue is declared in lunora/queues.ts in this deployment. Add one to offload async work to a Cloudflare Queue."),testId:"queues-empty",title:l("No queues defined")}):s($e,{className:"overflow-hidden py-0",children:s(Oe,{className:"px-0",children:q(ke,{"data-testid":"queues-table",children:[s(Ue,{children:q(oe,{children:[s(_,{children:l("Export")}),s(_,{children:l("Queue")}),s(_,{children:l("Mode")}),s(_,{children:l("Binding")}),s(_,{children:l("Dead-letter")})]})}),s(Je,{children:i.map(yt)})]})})}),e[4]=t,e[5]=i,e[6]=l,e[7]=r):r=e[7];let f;return e[8]!==o||e[9]!==r?(f=q("div",{className:"flex flex-col gap-4","data-testid":"queues-declared",children:[o,r]}),e[8]=o,e[9]=r,e[10]=f):f=e[10],f},pt=n=>{const e=G(67),{message:t,onReplay:i,replayingId:l}=n,a=P();let o,r,f,u,g,y,x,d,m,p;if(e[0]!==t.attempts||e[1]!==t.body||e[2]!==t.deadLettered||e[3]!==t.exportName||e[4]!==t.id||e[5]!==t.messageId||e[6]!==t.outcome||e[7]!==t.queue||e[8]!==a){const U=ct(t.body);r=oe,y=`queues-message-${t.id}`;const J=t.exportName??t.queue;e[19]!==J?(x=s(T,{className:"font-mono text-xs",children:J}),e[19]=J,e[20]=x):x=e[20],e[21]!==t.messageId?(d=s(T,{className:"max-w-[16ch] truncate font-mono text-xs text-muted-foreground",title:t.messageId,children:t.messageId}),e[21]=t.messageId,e[22]=d):d=e[22],e[23]!==t.attempts?(m=s(T,{className:"font-mono text-xs tabular-nums",children:t.attempts}),e[23]=t.attempts,e[24]=m):m=e[24];const A=`queues-outcome-${t.id}`;let I;e[25]!==t.outcome?(I=mt(t.outcome),e[25]=t.outcome,e[26]=I):I=e[26];let C;e[27]!==t.outcome||e[28]!==A||e[29]!==I?(C=s(ve,{"data-testid":A,variant:I,children:t.outcome}),e[27]=t.outcome,e[28]=A,e[29]=I,e[30]=C):C=e[30];let L;e[31]!==t.deadLettered||e[32]!==t.id||e[33]!==a?(L=t.deadLettered&&s(ve,{"data-testid":`queues-dlq-${t.id}`,variant:"destructive",children:a("DLQ")}),e[31]=t.deadLettered,e[32]=t.id,e[33]=a,e[34]=L):L=e[34],e[35]!==C||e[36]!==L?(p=s(T,{children:q("span",{className:"inline-flex items-center gap-1",children:[C,L]})}),e[35]=C,e[36]=L,e[37]=p):p=e[37],o=T,f="max-w-[32ch] truncate font-mono text-xs text-muted-foreground",u=U,g=ut(U),e[0]=t.attempts,e[1]=t.body,e[2]=t.deadLettered,e[3]=t.exportName,e[4]=t.id,e[5]=t.messageId,e[6]=t.outcome,e[7]=t.queue,e[8]=a,e[9]=o,e[10]=r,e[11]=f,e[12]=u,e[13]=g,e[14]=y,e[15]=x,e[16]=d,e[17]=m,e[18]=p}else o=e[9],r=e[10],f=e[11],u=e[12],g=e[13],y=e[14],x=e[15],d=e[16],m=e[17],p=e[18];let h;e[38]!==o||e[39]!==f||e[40]!==u||e[41]!==g?(h=s(o,{className:f,title:u,children:g}),e[38]=o,e[39]=f,e[40]=u,e[41]=g,e[42]=h):h=e[42];let N;e[43]!==t.capturedAt?(N=at(t.capturedAt,"—"),e[43]=t.capturedAt,e[44]=N):N=e[44];let b;e[45]!==N?(b=s(T,{className:"text-xs text-muted-foreground tabular-nums",children:N}),e[45]=N,e[46]=b):b=e[46];const E=`queues-replay-${t.id}`,Q=l!==null;let v;e[47]!==t.id||e[48]!==l||e[49]!==a?(v=l===t.id?a("Replaying…"):a("Replay"),e[47]=t.id,e[48]=l,e[49]=a,e[50]=v):v=e[50];let w;e[51]!==t.id||e[52]!==i||e[53]!==E||e[54]!==Q||e[55]!==v?(w=s(T,{children:s(we,{"data-id":t.id,"data-testid":E,disabled:Q,onClick:i,size:"xs",type:"button",variant:"outline",children:v})}),e[51]=t.id,e[52]=i,e[53]=E,e[54]=Q,e[55]=v,e[56]=w):w=e[56];let D;return e[57]!==r||e[58]!==b||e[59]!==w||e[60]!==y||e[61]!==x||e[62]!==d||e[63]!==m||e[64]!==p||e[65]!==h?(D=q(r,{"data-testid":y,children:[x,d,m,p,h,b,w]}),e[57]=r,e[58]=b,e[59]=w,e[60]=y,e[61]=x,e[62]=d,e[63]=m,e[64]=p,e[65]=h,e[66]=D):D=e[66],D},gt=n=>{const e=G(29),{hasError:t,messages:i,onClear:l,onReplay:a,replayingId:o}=n,r=P();let f;e[0]!==r?(f=r("Cloudflare Queues have no peek API, so this is what push consumers actually processed — not pending depth."),e[0]=r,e[1]=f):f=e[1];let u;e[2]!==f?(u=s("p",{className:"text-sm text-muted-foreground",children:f}),e[2]=f,e[3]=u):u=e[3];let g;e[4]!==r?(g=r("Clear the whole message log?"),e[4]=r,e[5]=g):g=e[5];const y=i.length===0;let x;e[6]!==r?(x=r("Clear log"),e[6]=r,e[7]=x):x=e[7];let d;e[8]!==l||e[9]!==g||e[10]!==y||e[11]!==x?(d=s("div",{className:"ml-auto",children:s(Ye,{confirmLabel:g,disabled:y,onConfirm:l,testId:"queues-clear",children:x})}),e[8]=l,e[9]=g,e[10]=y,e[11]=x,e[12]=d):d=e[12];let m;e[13]!==i.length||e[14]!==r?(m=i.length>0&&s(ve,{"data-testid":"queues-count",variant:"secondary",children:r("{count} messages",{count:i.length})}),e[13]=i.length,e[14]=r,e[15]=m):m=e[15];let p;e[16]!==u||e[17]!==d||e[18]!==m?(p=q("div",{className:"flex flex-wrap items-center gap-2",children:[u,d,m]}),e[16]=u,e[17]=d,e[18]=m,e[19]=p):p=e[19];let h;e[20]!==t||e[21]!==i||e[22]!==a||e[23]!==o||e[24]!==r?(h=!t&&i.length===0?s(Qe,{description:r("Consumed messages appear here once a push consumer processes a batch in dev. Send one from the Send tab to see it captured."),testId:"queues-messages-empty",title:r("No consumed messages yet.")}):s($e,{className:"overflow-hidden py-0",children:s(Oe,{className:"px-0",children:s(et,{className:"max-h-[32rem]","data-testid":"queues-messages-scroll",children:q(ke,{"data-testid":"queues-messages-table",children:[s(Ue,{children:q(oe,{children:[s(_,{children:r("Export")}),s(_,{children:r("Message")}),s(_,{children:r("Attempts")}),s(_,{children:r("Outcome")}),s(_,{children:r("Body")}),s(_,{children:r("Captured")}),s(_,{})]})}),s(Je,{children:i.map(b=>s(pt,{message:b,onReplay:a,replayingId:o},b.id))})]})})})}),e[20]=t,e[21]=i,e[22]=a,e[23]=o,e[24]=r,e[25]=h):h=e[25];let N;return e[26]!==p||e[27]!==h?(N=q("div",{className:"flex flex-col gap-4","data-testid":"queues-messages",children:[p,h]}),e[26]=p,e[27]=h,e[28]=N):N=e[28],N},xt=n=>{const e=G(20),{batchMode:t,bodyText:i,delayText:l,onBatchModeChange:a,onBodyChange:o,onDelayChange:r,onSelectExport:f,onSend:u,queues:g,selectedExportName:y,sending:x}=n,d=P();let m;e[0]!==d?(m=d("Enqueue a JSON message to a declared producer to exercise its consumer. Nothing is captured until the consumer processes it."),e[0]=d,e[1]=m):m=e[1];let p;e[2]!==m?(p=s("p",{className:"text-sm text-muted-foreground",children:m}),e[2]=m,e[3]=p):p=e[3];let h;e[4]!==t||e[5]!==i||e[6]!==l||e[7]!==a||e[8]!==o||e[9]!==r||e[10]!==f||e[11]!==u||e[12]!==g||e[13]!==y||e[14]!==x||e[15]!==d?(h=g.length===0?s(Qe,{description:d("Declare a queue with defineQueue in lunora/queues.ts to enqueue a test message."),testId:"queues-send-empty",title:d("No queues to send to")}):q(Fe,{children:[q("div",{className:"flex flex-wrap items-center gap-2",children:[s("select",{"aria-label":d("Queue"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"queues-send-select",onChange:f,value:y,children:g.map(bt)}),s(Ze,{"aria-label":d("Delay (seconds)"),className:"max-w-36","data-testid":"queues-send-delay",min:0,onChange:r,placeholder:d("Delay (s)"),type:"number",value:l}),q("label",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"queues-send-batch",children:[s("input",{checked:t,"data-testid":"queues-send-batch",id:"queues-send-batch",onChange:a,type:"checkbox"}),d("Send as batch (JSON array)")]}),s(we,{className:"ml-auto","data-testid":"queues-send-button",disabled:x||y==="",onClick:u,type:"button",children:d(x?"Sending…":"Send message")})]}),s(tt,{"aria-label":d("Message body (JSON)"),className:"font-mono","data-testid":"queues-send-body",onChange:o,placeholder:t?'[ { "hello": "world" } ]':'{ "hello": "world" }',value:i})]}),e[4]=t,e[5]=i,e[6]=l,e[7]=a,e[8]=o,e[9]=r,e[10]=f,e[11]=u,e[12]=g,e[13]=y,e[14]=x,e[15]=d,e[16]=h):h=e[16];let N;return e[17]!==p||e[18]!==h?(N=q("div",{className:"flex flex-col gap-3","data-testid":"queues-send",children:[p,h]}),e[17]=p,e[18]=h,e[19]=N):N=e[19],N},jt=n=>{const e=G(59),{limit:t}=n,i=t??ot,l=Ve(),a=P(),[o,r]=M("declared"),[f,u]=M(null);let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g={},e[0]=g):g=e[0];const{data:y,error:x,errorSource:d}=Be(W.listQueues,g);let m;e[1]!==i?(m={limit:i},e[1]=i,e[2]=m):m=e[2];const{data:p,error:h,errorSource:N,refetch:b}=Be(W.getQueueMessages,m),E=Array.isArray(y?.queues)?[...y.queues].toSorted(Nt):[],Q=p?.entries??[],{deadLetteredCount:v,queuesWithoutDlq:w,showReliabilityWarning:D}=nt(E,Q),[U,J]=M(""),[A,I]=M(""),[C,L]=M(""),[F,je]=M(!1),[le,Ie]=M(!1),[de,Le]=M(null),z=E.some(c=>c.exportName===U)?U:E[0]?.exportName??"",Me=o==="messages"?h:x,We=o==="messages"?N:d,ie=Me??f,ce=Me===null?f:We;let H;e[3]!==b?(H=()=>{b()},e[3]=b,e[4]=H):H=e[4],st(H,o==="messages");const ue=async()=>{u(null);const c=z;if(c==="")return;let S=null;const Se=A.trim();if(Se!=="")try{S=JSON.parse(Se)}catch{u(a("Body must be valid JSON."));return}let Ee;const De=C.trim();if(De!==""){const j=Number(De);if(!Number.isFinite(j)||j<0){u(a("Delay must be a non-negative number of seconds."));return}Ee=j}if(F&&!Array.isArray(S)){u(a("Batch mode needs a JSON array body — each element is enqueued as one message."));return}Ie(!0);const He=F?{batch:S,delaySeconds:Ee,exportName:c}:{body:S,delaySeconds:Ee,exportName:c};try{await l.query(lt,He,_e("")),b()}catch(j){u(Te(j))}Ie(!1)};let V;e[5]!==l||e[6]!==b?(V=async c=>{u(null),Le(c);try{await l.query(dt,{id:c},_e("")),b()}catch(S){u(Te(S))}Le(null)},e[5]=l,e[6]=b,e[7]=V):V=e[7];const me=V;let Y;e[8]!==l||e[9]!==b?(Y=async()=>{u(null);try{await l.query(it,{},_e("")),b()}catch(c){u(Te(c))}},e[8]=l,e[9]=b,e[10]=Y):Y=e[10];const fe=Y;let X;e[11]===Symbol.for("react.memo_cache_sentinel")?(X=c=>{const S=c.currentTarget.dataset.tab;(S==="declared"||S==="messages"||S==="send")&&r(S)},e[11]=X):X=e[11];const Ge=X;let K;e[12]===Symbol.for("react.memo_cache_sentinel")?(K=c=>{J(c.currentTarget.value)},e[12]=K):K=e[12];const he=K;let Z;e[13]===Symbol.for("react.memo_cache_sentinel")?(Z=c=>{I(c.currentTarget.value)},e[13]=Z):Z=e[13];const pe=Z;let ee;e[14]===Symbol.for("react.memo_cache_sentinel")?(ee=c=>{L(c.currentTarget.value)},e[14]=ee):ee=e[14];const ge=ee;let te;e[15]===Symbol.for("react.memo_cache_sentinel")?(te=c=>{je(c.currentTarget.checked)},e[15]=te):te=e[15];const xe=te;let se;e[16]!==ue?(se=()=>{Ce(ue())},e[16]=ue,e[17]=se):se=e[17];const ye=se;let ae;e[18]!==me?(ae=c=>{const{id:S}=c.currentTarget.dataset;S!==void 0&&Ce(me(S))},e[18]=me,e[19]=ae):ae=e[19];const be=ae;let re;e[20]!==fe?(re=()=>{Ce(fe())},e[20]=fe,e[21]=re):re=e[21];const Ne=re,Pe="flex flex-col gap-6",ze="lunora-queues-panel";let B;e[22]!==a||e[23]!==o?(B=s("div",{className:"flex items-center gap-1","data-testid":"queues-tabs",role:"tablist",children:["declared","messages","send"].map(c=>s(we,{"aria-selected":o===c,"data-tab":c,"data-testid":`queues-tab-${c}`,onClick:Ge,role:"tab",size:"sm",type:"button",variant:o===c?"secondary":"ghost",children:ft(c,a)},c))}),e[22]=a,e[23]=o,e[24]=B):B=e[24];let R;e[25]!==ie||e[26]!==ce?(R=ie!==null&&s(Xe,{error:ce,testId:"queues-error"}),e[25]=ie,e[26]=ce,e[27]=R):R=e[27];const qe=D&&s(Ke,{icon:s("span",{"aria-hidden":"true",className:"text-base leading-none",children:"⚠"}),testId:"queues-dlq-warning",variant:"warning",children:q("div",{className:"flex flex-col gap-1",children:[w.length>0&&q(Fe,{children:[s("p",{className:"font-medium",children:a("No dead-letter queue on {queues}.",{queues:w.map(qt).join(", ")})}),s("p",{className:"text-muted-foreground",children:a("Exhausted messages are dropped after retries. Add a deadLetterQueue to capture them.")})]}),v>0&&s("p",{className:w.length>0?"text-muted-foreground":"font-medium",children:v===1?a("1 message was recently dead-lettered."):a("{count} messages were recently dead-lettered.",{count:v})})]})});let $;e[28]!==E||e[29]!==y||e[30]!==o?($=o==="declared"&&s(ht,{loaded:y!==void 0,queues:E}),e[28]=E,e[29]=y,e[30]=o,e[31]=$):$=e[31];let O;e[32]!==Q||e[33]!==h||e[34]!==Ne||e[35]!==be||e[36]!==de||e[37]!==o?(O=o==="messages"&&s(gt,{hasError:h!==null,messages:Q,onClear:Ne,onReplay:be,replayingId:de}),e[32]=Q,e[33]=h,e[34]=Ne,e[35]=be,e[36]=de,e[37]=o,e[38]=O):O=e[38];let k;e[39]!==F||e[40]!==A||e[41]!==C||e[42]!==xe||e[43]!==pe||e[44]!==ge||e[45]!==he||e[46]!==ye||e[47]!==E||e[48]!==z||e[49]!==le||e[50]!==o?(k=o==="send"&&s(xt,{batchMode:F,bodyText:A,delayText:C,onBatchModeChange:xe,onBodyChange:pe,onDelayChange:ge,onSelectExport:he,onSend:ye,queues:E,selectedExportName:z,sending:le}),e[39]=F,e[40]=A,e[41]=C,e[42]=xe,e[43]=pe,e[44]=ge,e[45]=he,e[46]=ye,e[47]=E,e[48]=z,e[49]=le,e[50]=o,e[51]=k):k=e[51];let ne;return e[52]!==B||e[53]!==R||e[54]!==qe||e[55]!==$||e[56]!==O||e[57]!==k?(ne=q("div",{className:Pe,"data-testid":ze,children:[B,R,qe,$,O,k]}),e[52]=B,e[53]=R,e[54]=qe,e[55]=$,e[56]=O,e[57]=k,e[58]=ne):ne=e[58],ne};function yt(n){return q(oe,{"data-testid":`queues-row-${n.exportName}`,children:[s(T,{className:"font-mono text-xs",children:n.exportName}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.name}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.mode}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.binding}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.deadLetterQueue??"—"})]},n.exportName)}function bt(n){return s("option",{value:n.exportName,children:n.exportName},n.exportName)}function Nt(n,e){return n.exportName.localeCompare(e.exportName)}function qt(n){return n.name}export{jt as default};
|
|
1
|
+
import{c as G}from"react/compiler-runtime";import{useLunora as Ve}from"@lunora/react";import{useState as M}from"react";import{ConfirmButton as Ye}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{E as Xe}from"../packem_shared/error-alert-DueSEkt-.mjs";import{A as Ke}from"../packem_shared/alert-PB5W11MM.mjs";import{B as ve}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as we}from"../packem_shared/button-q0UYSmrn.mjs";import{C as $e,a as Oe}from"../packem_shared/card-By2O8ULa.mjs";import{E as Qe}from"../packem_shared/empty-state-D7jEML_T.mjs";import{I as Ze}from"../packem_shared/input-CXhxesPC.mjs";import{S as et}from"../packem_shared/scroll-area-CXCQH7VT.mjs";import{T as ke,a as Ue,b as oe,c as _,d as Je,e as T}from"../packem_shared/table-D0SBiDu-.mjs";import{T as tt}from"../packem_shared/textarea--40GKAyz.mjs";import{u as Be}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useAutoRefresh as st}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{useT as P}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as W}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{d as _e,b as Te,c as Ae,f as Ce,h as at,j as rt}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as s,jsxs as q,Fragment as Fe}from"react/jsx-runtime";const nt=(n,e)=>{const t=new Set(n.map(a=>a.deadLetterQueue).filter(a=>typeof a=="string"&&a!=="")),i=n.filter(a=>(a.deadLetterQueue===void 0||a.deadLetterQueue==="")&&!t.has(a.name)),l=e.filter(a=>a.deadLettered).length;return{deadLetteredCount:l,queuesWithoutDlq:i,showReliabilityWarning:i.length>0||l>0}},ot=200,lt=Ae(W.sendQueueMessage),dt=Ae(W.replayQueueMessage),it=Ae(W.clearQueueMessages),Re=96,ct=n=>{if(n===void 0)return"—";try{return JSON.stringify(n,rt)}catch{return"[unserializable]"}},ut=n=>n.length>Re?`${n.slice(0,Re)}…`:n,mt=n=>n==="error"?"destructive":n==="retry"?"outline":"secondary",ft=(n,e)=>e(n==="messages"?"Messages":n==="send"?"Send":"Declared"),ht=n=>{const e=G(11),{loaded:t,queues:i}=n,l=P();let a;e[0]!==l?(a=l("Queues are declared in code with defineQueue. Enqueue from a mutation or action with ctx.queues.<name>.send(...); push consumers process batches in the worker."),e[0]=l,e[1]=a):a=e[1];let o;e[2]!==a?(o=s("p",{className:"text-sm text-muted-foreground",children:a}),e[2]=a,e[3]=o):o=e[3];let r;e[4]!==t||e[5]!==i||e[6]!==l?(r=t&&i.length===0?s(Qe,{description:l("No defineQueue is declared in lunora/queues.ts in this deployment. Add one to offload async work to a Cloudflare Queue."),testId:"queues-empty",title:l("No queues defined")}):s($e,{className:"overflow-hidden py-0",children:s(Oe,{className:"px-0",children:q(ke,{"data-testid":"queues-table",children:[s(Ue,{children:q(oe,{children:[s(_,{children:l("Export")}),s(_,{children:l("Queue")}),s(_,{children:l("Mode")}),s(_,{children:l("Binding")}),s(_,{children:l("Dead-letter")})]})}),s(Je,{children:i.map(yt)})]})})}),e[4]=t,e[5]=i,e[6]=l,e[7]=r):r=e[7];let f;return e[8]!==o||e[9]!==r?(f=q("div",{className:"flex flex-col gap-4","data-testid":"queues-declared",children:[o,r]}),e[8]=o,e[9]=r,e[10]=f):f=e[10],f},pt=n=>{const e=G(67),{message:t,onReplay:i,replayingId:l}=n,a=P();let o,r,f,u,g,y,x,d,m,p;if(e[0]!==t.attempts||e[1]!==t.body||e[2]!==t.deadLettered||e[3]!==t.exportName||e[4]!==t.id||e[5]!==t.messageId||e[6]!==t.outcome||e[7]!==t.queue||e[8]!==a){const U=ct(t.body);r=oe,y=`queues-message-${t.id}`;const J=t.exportName??t.queue;e[19]!==J?(x=s(T,{className:"font-mono text-xs",children:J}),e[19]=J,e[20]=x):x=e[20],e[21]!==t.messageId?(d=s(T,{className:"max-w-[16ch] truncate font-mono text-xs text-muted-foreground",title:t.messageId,children:t.messageId}),e[21]=t.messageId,e[22]=d):d=e[22],e[23]!==t.attempts?(m=s(T,{className:"font-mono text-xs tabular-nums",children:t.attempts}),e[23]=t.attempts,e[24]=m):m=e[24];const A=`queues-outcome-${t.id}`;let I;e[25]!==t.outcome?(I=mt(t.outcome),e[25]=t.outcome,e[26]=I):I=e[26];let C;e[27]!==t.outcome||e[28]!==A||e[29]!==I?(C=s(ve,{"data-testid":A,variant:I,children:t.outcome}),e[27]=t.outcome,e[28]=A,e[29]=I,e[30]=C):C=e[30];let L;e[31]!==t.deadLettered||e[32]!==t.id||e[33]!==a?(L=t.deadLettered&&s(ve,{"data-testid":`queues-dlq-${t.id}`,variant:"destructive",children:a("DLQ")}),e[31]=t.deadLettered,e[32]=t.id,e[33]=a,e[34]=L):L=e[34],e[35]!==C||e[36]!==L?(p=s(T,{children:q("span",{className:"inline-flex items-center gap-1",children:[C,L]})}),e[35]=C,e[36]=L,e[37]=p):p=e[37],o=T,f="max-w-[32ch] truncate font-mono text-xs text-muted-foreground",u=U,g=ut(U),e[0]=t.attempts,e[1]=t.body,e[2]=t.deadLettered,e[3]=t.exportName,e[4]=t.id,e[5]=t.messageId,e[6]=t.outcome,e[7]=t.queue,e[8]=a,e[9]=o,e[10]=r,e[11]=f,e[12]=u,e[13]=g,e[14]=y,e[15]=x,e[16]=d,e[17]=m,e[18]=p}else o=e[9],r=e[10],f=e[11],u=e[12],g=e[13],y=e[14],x=e[15],d=e[16],m=e[17],p=e[18];let h;e[38]!==o||e[39]!==f||e[40]!==u||e[41]!==g?(h=s(o,{className:f,title:u,children:g}),e[38]=o,e[39]=f,e[40]=u,e[41]=g,e[42]=h):h=e[42];let N;e[43]!==t.capturedAt?(N=at(t.capturedAt,"—"),e[43]=t.capturedAt,e[44]=N):N=e[44];let b;e[45]!==N?(b=s(T,{className:"text-xs text-muted-foreground tabular-nums",children:N}),e[45]=N,e[46]=b):b=e[46];const E=`queues-replay-${t.id}`,Q=l!==null;let v;e[47]!==t.id||e[48]!==l||e[49]!==a?(v=l===t.id?a("Replaying…"):a("Replay"),e[47]=t.id,e[48]=l,e[49]=a,e[50]=v):v=e[50];let w;e[51]!==t.id||e[52]!==i||e[53]!==E||e[54]!==Q||e[55]!==v?(w=s(T,{children:s(we,{"data-id":t.id,"data-testid":E,disabled:Q,onClick:i,size:"xs",type:"button",variant:"outline",children:v})}),e[51]=t.id,e[52]=i,e[53]=E,e[54]=Q,e[55]=v,e[56]=w):w=e[56];let D;return e[57]!==r||e[58]!==b||e[59]!==w||e[60]!==y||e[61]!==x||e[62]!==d||e[63]!==m||e[64]!==p||e[65]!==h?(D=q(r,{"data-testid":y,children:[x,d,m,p,h,b,w]}),e[57]=r,e[58]=b,e[59]=w,e[60]=y,e[61]=x,e[62]=d,e[63]=m,e[64]=p,e[65]=h,e[66]=D):D=e[66],D},gt=n=>{const e=G(29),{hasError:t,messages:i,onClear:l,onReplay:a,replayingId:o}=n,r=P();let f;e[0]!==r?(f=r("Cloudflare Queues have no peek API, so this is what push consumers actually processed — not pending depth."),e[0]=r,e[1]=f):f=e[1];let u;e[2]!==f?(u=s("p",{className:"text-sm text-muted-foreground",children:f}),e[2]=f,e[3]=u):u=e[3];let g;e[4]!==r?(g=r("Clear the whole message log?"),e[4]=r,e[5]=g):g=e[5];const y=i.length===0;let x;e[6]!==r?(x=r("Clear log"),e[6]=r,e[7]=x):x=e[7];let d;e[8]!==l||e[9]!==g||e[10]!==y||e[11]!==x?(d=s("div",{className:"ml-auto",children:s(Ye,{confirmLabel:g,disabled:y,onConfirm:l,testId:"queues-clear",children:x})}),e[8]=l,e[9]=g,e[10]=y,e[11]=x,e[12]=d):d=e[12];let m;e[13]!==i.length||e[14]!==r?(m=i.length>0&&s(ve,{"data-testid":"queues-count",variant:"secondary",children:r("{count} messages",{count:i.length})}),e[13]=i.length,e[14]=r,e[15]=m):m=e[15];let p;e[16]!==u||e[17]!==d||e[18]!==m?(p=q("div",{className:"flex flex-wrap items-center gap-2",children:[u,d,m]}),e[16]=u,e[17]=d,e[18]=m,e[19]=p):p=e[19];let h;e[20]!==t||e[21]!==i||e[22]!==a||e[23]!==o||e[24]!==r?(h=!t&&i.length===0?s(Qe,{description:r("Consumed messages appear here once a push consumer processes a batch in dev. Send one from the Send tab to see it captured."),testId:"queues-messages-empty",title:r("No consumed messages yet.")}):s($e,{className:"overflow-hidden py-0",children:s(Oe,{className:"px-0",children:s(et,{className:"max-h-[32rem]","data-testid":"queues-messages-scroll",children:q(ke,{"data-testid":"queues-messages-table",children:[s(Ue,{children:q(oe,{children:[s(_,{children:r("Export")}),s(_,{children:r("Message")}),s(_,{children:r("Attempts")}),s(_,{children:r("Outcome")}),s(_,{children:r("Body")}),s(_,{children:r("Captured")}),s(_,{})]})}),s(Je,{children:i.map(b=>s(pt,{message:b,onReplay:a,replayingId:o},b.id))})]})})})}),e[20]=t,e[21]=i,e[22]=a,e[23]=o,e[24]=r,e[25]=h):h=e[25];let N;return e[26]!==p||e[27]!==h?(N=q("div",{className:"flex flex-col gap-4","data-testid":"queues-messages",children:[p,h]}),e[26]=p,e[27]=h,e[28]=N):N=e[28],N},xt=n=>{const e=G(20),{batchMode:t,bodyText:i,delayText:l,onBatchModeChange:a,onBodyChange:o,onDelayChange:r,onSelectExport:f,onSend:u,queues:g,selectedExportName:y,sending:x}=n,d=P();let m;e[0]!==d?(m=d("Enqueue a JSON message to a declared producer to exercise its consumer. Nothing is captured until the consumer processes it."),e[0]=d,e[1]=m):m=e[1];let p;e[2]!==m?(p=s("p",{className:"text-sm text-muted-foreground",children:m}),e[2]=m,e[3]=p):p=e[3];let h;e[4]!==t||e[5]!==i||e[6]!==l||e[7]!==a||e[8]!==o||e[9]!==r||e[10]!==f||e[11]!==u||e[12]!==g||e[13]!==y||e[14]!==x||e[15]!==d?(h=g.length===0?s(Qe,{description:d("Declare a queue with defineQueue in lunora/queues.ts to enqueue a test message."),testId:"queues-send-empty",title:d("No queues to send to")}):q(Fe,{children:[q("div",{className:"flex flex-wrap items-center gap-2",children:[s("select",{"aria-label":d("Queue"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"queues-send-select",onChange:f,value:y,children:g.map(bt)}),s(Ze,{"aria-label":d("Delay (seconds)"),className:"max-w-36","data-testid":"queues-send-delay",min:0,onChange:r,placeholder:d("Delay (s)"),type:"number",value:l}),q("label",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"queues-send-batch",children:[s("input",{checked:t,"data-testid":"queues-send-batch",id:"queues-send-batch",onChange:a,type:"checkbox"}),d("Send as batch (JSON array)")]}),s(we,{className:"ml-auto","data-testid":"queues-send-button",disabled:x||y==="",onClick:u,type:"button",children:d(x?"Sending…":"Send message")})]}),s(tt,{"aria-label":d("Message body (JSON)"),className:"font-mono","data-testid":"queues-send-body",onChange:o,placeholder:t?'[ { "hello": "world" } ]':'{ "hello": "world" }',value:i})]}),e[4]=t,e[5]=i,e[6]=l,e[7]=a,e[8]=o,e[9]=r,e[10]=f,e[11]=u,e[12]=g,e[13]=y,e[14]=x,e[15]=d,e[16]=h):h=e[16];let N;return e[17]!==p||e[18]!==h?(N=q("div",{className:"flex flex-col gap-3","data-testid":"queues-send",children:[p,h]}),e[17]=p,e[18]=h,e[19]=N):N=e[19],N},jt=n=>{const e=G(59),{limit:t}=n,i=t??ot,l=Ve(),a=P(),[o,r]=M("declared"),[f,u]=M(null);let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g={},e[0]=g):g=e[0];const{data:y,error:x,errorSource:d}=Be(W.listQueues,g);let m;e[1]!==i?(m={limit:i},e[1]=i,e[2]=m):m=e[2];const{data:p,error:h,errorSource:N,refetch:b}=Be(W.getQueueMessages,m),E=Array.isArray(y?.queues)?[...y.queues].toSorted(Nt):[],Q=p?.entries??[],{deadLetteredCount:v,queuesWithoutDlq:w,showReliabilityWarning:D}=nt(E,Q),[U,J]=M(""),[A,I]=M(""),[C,L]=M(""),[F,je]=M(!1),[le,Ie]=M(!1),[de,Le]=M(null),z=E.some(c=>c.exportName===U)?U:E[0]?.exportName??"",Me=o==="messages"?h:x,We=o==="messages"?N:d,ie=Me??f,ce=Me===null?f:We;let H;e[3]!==b?(H=()=>{b()},e[3]=b,e[4]=H):H=e[4],st(H,o==="messages");const ue=async()=>{u(null);const c=z;if(c==="")return;let S=null;const Se=A.trim();if(Se!=="")try{S=JSON.parse(Se)}catch{u(a("Body must be valid JSON."));return}let Ee;const De=C.trim();if(De!==""){const j=Number(De);if(!Number.isFinite(j)||j<0){u(a("Delay must be a non-negative number of seconds."));return}Ee=j}if(F&&!Array.isArray(S)){u(a("Batch mode needs a JSON array body — each element is enqueued as one message."));return}Ie(!0);const He=F?{batch:S,delaySeconds:Ee,exportName:c}:{body:S,delaySeconds:Ee,exportName:c};try{await l.query(lt,He,_e("")),b()}catch(j){u(Te(j))}Ie(!1)};let V;e[5]!==l||e[6]!==b?(V=async c=>{u(null),Le(c);try{await l.query(dt,{id:c},_e("")),b()}catch(S){u(Te(S))}Le(null)},e[5]=l,e[6]=b,e[7]=V):V=e[7];const me=V;let Y;e[8]!==l||e[9]!==b?(Y=async()=>{u(null);try{await l.query(it,{},_e("")),b()}catch(c){u(Te(c))}},e[8]=l,e[9]=b,e[10]=Y):Y=e[10];const fe=Y;let X;e[11]===Symbol.for("react.memo_cache_sentinel")?(X=c=>{const S=c.currentTarget.dataset.tab;(S==="declared"||S==="messages"||S==="send")&&r(S)},e[11]=X):X=e[11];const Ge=X;let K;e[12]===Symbol.for("react.memo_cache_sentinel")?(K=c=>{J(c.currentTarget.value)},e[12]=K):K=e[12];const he=K;let Z;e[13]===Symbol.for("react.memo_cache_sentinel")?(Z=c=>{I(c.currentTarget.value)},e[13]=Z):Z=e[13];const pe=Z;let ee;e[14]===Symbol.for("react.memo_cache_sentinel")?(ee=c=>{L(c.currentTarget.value)},e[14]=ee):ee=e[14];const ge=ee;let te;e[15]===Symbol.for("react.memo_cache_sentinel")?(te=c=>{je(c.currentTarget.checked)},e[15]=te):te=e[15];const xe=te;let se;e[16]!==ue?(se=()=>{Ce(ue())},e[16]=ue,e[17]=se):se=e[17];const ye=se;let ae;e[18]!==me?(ae=c=>{const{id:S}=c.currentTarget.dataset;S!==void 0&&Ce(me(S))},e[18]=me,e[19]=ae):ae=e[19];const be=ae;let re;e[20]!==fe?(re=()=>{Ce(fe())},e[20]=fe,e[21]=re):re=e[21];const Ne=re,Pe="flex flex-col gap-6",ze="lunora-queues-panel";let B;e[22]!==a||e[23]!==o?(B=s("div",{className:"flex items-center gap-1","data-testid":"queues-tabs",role:"tablist",children:["declared","messages","send"].map(c=>s(we,{"aria-selected":o===c,"data-tab":c,"data-testid":`queues-tab-${c}`,onClick:Ge,role:"tab",size:"sm",type:"button",variant:o===c?"secondary":"ghost",children:ft(c,a)},c))}),e[22]=a,e[23]=o,e[24]=B):B=e[24];let R;e[25]!==ie||e[26]!==ce?(R=ie!==null&&s(Xe,{error:ce,testId:"queues-error"}),e[25]=ie,e[26]=ce,e[27]=R):R=e[27];const qe=D&&s(Ke,{icon:s("span",{"aria-hidden":"true",className:"text-base leading-none",children:"⚠"}),testId:"queues-dlq-warning",variant:"warning",children:q("div",{className:"flex flex-col gap-1",children:[w.length>0&&q(Fe,{children:[s("p",{className:"font-medium",children:a("No dead-letter queue on {queues}.",{queues:w.map(qt).join(", ")})}),s("p",{className:"text-muted-foreground",children:a("Exhausted messages are dropped after retries. Add a deadLetterQueue to capture them.")})]}),v>0&&s("p",{className:w.length>0?"text-muted-foreground":"font-medium",children:v===1?a("1 message was recently dead-lettered."):a("{count} messages were recently dead-lettered.",{count:v})})]})});let $;e[28]!==E||e[29]!==y||e[30]!==o?($=o==="declared"&&s(ht,{loaded:y!==void 0,queues:E}),e[28]=E,e[29]=y,e[30]=o,e[31]=$):$=e[31];let O;e[32]!==Q||e[33]!==h||e[34]!==Ne||e[35]!==be||e[36]!==de||e[37]!==o?(O=o==="messages"&&s(gt,{hasError:h!==null,messages:Q,onClear:Ne,onReplay:be,replayingId:de}),e[32]=Q,e[33]=h,e[34]=Ne,e[35]=be,e[36]=de,e[37]=o,e[38]=O):O=e[38];let k;e[39]!==F||e[40]!==A||e[41]!==C||e[42]!==xe||e[43]!==pe||e[44]!==ge||e[45]!==he||e[46]!==ye||e[47]!==E||e[48]!==z||e[49]!==le||e[50]!==o?(k=o==="send"&&s(xt,{batchMode:F,bodyText:A,delayText:C,onBatchModeChange:xe,onBodyChange:pe,onDelayChange:ge,onSelectExport:he,onSend:ye,queues:E,selectedExportName:z,sending:le}),e[39]=F,e[40]=A,e[41]=C,e[42]=xe,e[43]=pe,e[44]=ge,e[45]=he,e[46]=ye,e[47]=E,e[48]=z,e[49]=le,e[50]=o,e[51]=k):k=e[51];let ne;return e[52]!==B||e[53]!==R||e[54]!==qe||e[55]!==$||e[56]!==O||e[57]!==k?(ne=q("div",{className:Pe,"data-testid":ze,children:[B,R,qe,$,O,k]}),e[52]=B,e[53]=R,e[54]=qe,e[55]=$,e[56]=O,e[57]=k,e[58]=ne):ne=e[58],ne};function yt(n){return q(oe,{"data-testid":`queues-row-${n.exportName}`,children:[s(T,{className:"font-mono text-xs",children:n.exportName}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.name}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.mode}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.binding}),s(T,{className:"font-mono text-xs text-muted-foreground",children:n.deadLetterQueue??"—"})]},n.exportName)}function bt(n){return s("option",{value:n.exportName,children:n.exportName},n.exportName)}function Nt(n,e){return n.exportName.localeCompare(e.exportName)}function qt(n){return n.name}export{jt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as g}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as N}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as v,a as b}from"../packem_shared/card
|
|
1
|
+
import{E as g}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as N}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as v,a as b}from"../packem_shared/card-By2O8ULa.mjs";import{E as y}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T,a as w,b as m,c as s,d as S,e as n}from"../packem_shared/table-D0SBiDu-.mjs";import{u as A}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as E}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as C}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsx as e,jsxs as o}from"react/jsx-runtime";const R={active:"default",failing:"destructive",idle:"secondary"},I=a=>a===void 0?"—":`${new Date(a).toISOString().slice(0,19).replace("T"," ")} UTC`,$=a=>{const r=a.runs+a.suppressed;return r===0?void 0:Math.round(a.suppressed/r*100)},U=({initialShardKey:a=""})=>{const r=E(),{data:l,error:p,errorSource:u,liveError:f}=A(C.listReactors,{},{live:!0,shardKey:a}),x=l!==void 0,d=Array.isArray(l?.reactors)?l.reactors:[];let i;x&&d.length===0?i=e(y,{description:r("No reactor is declared in this deployment. Export an onQueryChange(select, handler) from lunora/ to run server-side logic when a query's result changes."),testId:"reactors-empty",title:r("No reactors declared")}):i=e(v,{className:"overflow-hidden py-0",children:e(b,{className:"px-0",children:o(T,{"data-testid":"reactors-table",children:[e(w,{children:o(m,{children:[e(s,{children:r("Reactor")}),e(s,{children:r("State")}),e(s,{children:r("Ran")}),e(s,{children:r("Suppressed")}),e(s,{children:r("Errors")}),e(s,{children:r("Watches")}),e(s,{children:r("Last dispatch")})]})}),e(S,{children:d.map(t=>{const h=$(t);return o(m,{"data-testid":`reactors-row-${t.path}`,children:[e(n,{className:"font-mono text-xs",children:t.path}),e(n,{children:e(N,{"data-testid":`reactors-state-${t.path}`,variant:R[t.state],children:t.state})}),e(n,{className:"font-mono text-xs",children:t.runs}),o(n,{className:"font-mono text-xs text-muted-foreground",children:[t.suppressed,h===void 0?"":` (${String(h)}%)`]}),e(n,{className:"font-mono text-xs",children:t.errors===0?e("span",{className:"text-muted-foreground",children:"0"}):e("span",{className:"text-destructive",children:t.errors})}),e(n,{className:"font-mono text-xs text-muted-foreground",children:t.tables===void 0||t.tables.length===0?"—":t.tables.join(", ")}),e(n,{className:"font-mono text-xs text-muted-foreground",children:I(t.lastRanAt)})]},t.path)})})]})})});const c=d.filter(t=>t.state==="failing");return o("div",{className:"flex flex-col gap-6","data-testid":"lunora-reactors-panel",children:[p!==null&&e(g,{error:u,testId:"reactors-error"}),e("p",{className:"text-sm text-muted-foreground",children:r("A reactor runs after a write flush, but only when the result of the query it watches actually changed — a trigger fires on a row write, a reactor fires on a result changing. Suppressed dispatches are the ones where the read re-ran and nothing had moved.")}),c.length>0&&e("div",{className:"flex flex-col gap-2","data-testid":"reactors-failing",children:c.map(t=>o("p",{className:"text-xs text-destructive",role:"alert",children:[e("span",{className:"font-mono",children:t.path}),": ",t.lastError??r("last dispatch failed")]},t.path))}),f!==void 0&&e("p",{className:"text-xs text-amber-600 dark:text-amber-500","data-testid":"reactors-live-error",role:"alert",children:r("Live updates unavailable; showing the last reading.")}),i]})};export{U as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as U}from"react/compiler-runtime";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as M}from"../packem_shared/badge-r_5B4LHP.mjs";import{a as _,C as j}from"../packem_shared/card
|
|
1
|
+
import{c as U}from"react/compiler-runtime";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as M}from"../packem_shared/badge-r_5B4LHP.mjs";import{a as _,C as j}from"../packem_shared/card-By2O8ULa.mjs";import{E as D}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as O,a as $,b as E,c as R,d as G,e as S}from"../packem_shared/table-D0SBiDu-.mjs";import{u as L}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as Q}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as q}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsx as t,jsxs as a}from"react/jsx-runtime";const H=["read","insert","update","delete"],z=(e,r)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[r],J=e=>{const r=new Map;for(const s of e){const l=r.get(s.table)??{operations:new Set,procedures:new Set,table:s.table};l.operations.add(s.on),l.procedures.add(s.procedure),r.set(s.table,l)}return[...r.values()].toSorted((s,l)=>s.table.localeCompare(l.table))},oe=()=>{const e=U(49),r=Q();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={},e[0]=s):s=e[0];const{data:l,error:C,errorSource:I}=L(q.rlsPolicies,s),c=l!==void 0;let p,n,m,o,f,h,u,b,i;if(e[1]!==l||e[2]!==C||e[3]!==I||e[4]!==c||e[5]!==r){const k=J(Array.isArray(l?.policies)?l.policies:[]);let v;e[15]!==l?(v=Array.isArray(l?.roles)?l.roles:[],e[15]=l,e[16]=v):v=e[16],n=v,u="flex flex-col gap-6",b="lunora-rls-panel",e[17]!==C||e[18]!==I?(i=C!==null&&t(F,{error:I,testId:"rls-error"}),e[17]=C,e[18]=I,e[19]=i):i=e[19],h="flex flex-col gap-2",p=j,m="overflow-hidden py-0";let A;e[20]!==r?(A=r("Policies"),e[20]=r,e[21]=A):A=e[21],e[22]!==A?(o=t("header",{className:"border-b border-border px-4 py-3",children:t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:A})}),e[22]=A,e[23]=o):o=e[23],f=c&&k.length===0?t(D,{description:r("No `definePolicy` is wired through `.use(rls(...))` in this deployment. Add one to guard a table's rows."),testId:"rls-policies-empty",title:r("No policies defined")}):t(_,{className:"px-0",children:a(O,{"data-testid":"rls-policies-table",children:[t($,{children:a(E,{children:[t(R,{children:r("Table")}),H.map(d=>t(R,{children:z(r,d)},d)),t(R,{children:r("Guarded by")})]})}),t(G,{children:k.map(d=>a(E,{"data-testid":`rls-table-${d.table}`,children:[t(S,{className:"font-mono text-xs",children:d.table}),H.map(B=>t(S,{children:d.operations.has(B)?t(M,{variant:"secondary",children:r("Guarded")}):t("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"})},B)),t(S,{className:"font-mono text-xs text-muted-foreground",children:[...d.procedures].join(", ")})]},d.table))})]})}),e[1]=l,e[2]=C,e[3]=I,e[4]=c,e[5]=r,e[6]=p,e[7]=n,e[8]=m,e[9]=o,e[10]=f,e[11]=h,e[12]=u,e[13]=b,e[14]=i}else p=e[6],n=e[7],m=e[8],o=e[9],f=e[10],h=e[11],u=e[12],b=e[13],i=e[14];let x;e[24]!==p||e[25]!==m||e[26]!==o||e[27]!==f?(x=a(p,{className:m,children:[o,f]}),e[24]=p,e[25]=m,e[26]=o,e[27]=f,e[28]=x):x=e[28];let N;e[29]!==h||e[30]!==x?(N=t("section",{className:h,children:x}),e[29]=h,e[30]=x,e[31]=N):N=e[31];let y;e[32]!==r?(y=r("Roles"),e[32]=r,e[33]=y):y=e[33];let g;e[34]!==y?(g=t("header",{className:"border-b border-border px-4 py-3",children:t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:y})}),e[34]=y,e[35]=g):g=e[35];let T;e[36]!==c||e[37]!==n||e[38]!==r?(T=c&&n.length===0?t(D,{description:r("No `defineRole` is registered via `rls(policies, { roles })`. Roles back `ctx.auth.can(...)` permission checks."),testId:"rls-roles-empty",title:r("No roles defined")}):t(_,{className:"px-0",children:a(O,{"data-testid":"rls-roles-table",children:[t($,{children:a(E,{children:[t(R,{children:r("Role")}),t(R,{children:r("Description")}),t(R,{children:r("Permissions")})]})}),t(G,{children:n.map(V)})]})}),e[36]=c,e[37]=n,e[38]=r,e[39]=T):T=e[39];let w;e[40]!==g||e[41]!==T?(w=t("section",{className:"flex flex-col gap-2",children:a(j,{className:"overflow-hidden py-0",children:[g,T]})}),e[40]=g,e[41]=T,e[42]=w):w=e[42];let P;return e[43]!==w||e[44]!==u||e[45]!==b||e[46]!==i||e[47]!==N?(P=a("div",{className:u,"data-testid":b,children:[i,N,w]}),e[43]=w,e[44]=u,e[45]=b,e[46]=i,e[47]=N,e[48]=P):P=e[48],P};function K(e){return t(M,{variant:"outline",children:e},e)}function V(e){return a(E,{"data-testid":`rls-role-${e.name}`,children:[t(S,{className:"font-mono text-xs",children:e.name}),t(S,{className:"text-muted-foreground",children:e.description??""}),t(S,{children:e.permissions.length===0?t("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):t("span",{className:"flex flex-wrap gap-1",children:e.permissions.map(K)})})]},e.name)}export{oe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as D}from"react/compiler-runtime";import{useState as F}from"react";import{B as Y}from"../packem_shared/button-q0UYSmrn.mjs";import{useT as M}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{useLunora as V}from"@lunora/react";import{ConfirmButton as G}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{B as O}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as P,a as R}from"../packem_shared/card--2hKx4L2.mjs";import{E as W}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as Q,a as K,b as q,c as x,d as z,e as b}from"../packem_shared/table-D0SBiDu-.mjs";import{b as H}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{f as A,b as U,h as j}from"../packem_shared/internal-Df43vQI0.mjs";import{jsxs as m,jsx as t}from"react/jsx-runtime";import{useAutoRefresh as X}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{ScheduledJobs as ee}from"../packem_shared/ScheduledJobs-nPx7NmOE.mjs";const te={kind:"idle"},re=(n,e,c)=>c!==void 0?c:e===void 0?a=>n.runCronJob(a):void 0,le=({loadCronJobs:n,runCronJob:e}={})=>{const c=V(),a=M(),[p,o]=F({}),s=H(["lunora-cron-jobs",n?"custom":"default"],()=>(n??(()=>c.getCronJobs()))()),{data:r,error:y}=s,h=re(c,n,e),i=async l=>{if(h!==void 0){o(d=>({...d,[l]:{kind:"running"}}));try{await h(l),o(d=>({...d,[l]:{kind:"ok"}})),s.refetch()}catch(d){o(g=>({...g,[l]:{kind:"error",message:U(d)}}))}}};return m("div",{className:"flex flex-col gap-3","data-testid":"lunora-cron-triggers",children:[y!==null&&t("p",{className:"text-sm text-destructive","data-testid":"cron-error",role:"alert",children:y}),r?.length===0&&t(W,{description:a("Triggers declared with the cronJobs() builder appear here."),icon:m("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M12 7.5V12l4 2"})]}),testId:"cron-empty",title:a("No cron triggers.")}),r!==void 0&&r.length>0&&t(P,{className:"overflow-hidden py-0",children:t(R,{className:"px-0",children:m(Q,{"data-testid":"cron-table",children:[t(K,{children:m(q,{children:[t(x,{children:a("name")}),t(x,{children:a("schedule")}),t(x,{children:a("target")}),t(x,{children:a("shard")}),h!==void 0&&t(x,{"aria-label":a("Actions")})]})}),t(z,{children:r.map(l=>{const d=p[l.name]??te;return m(q,{"data-testid":`cron-row-${l.name}`,children:[t(b,{children:l.name}),t(b,{className:"font-mono text-xs tabular-nums",children:l.cron}),t(b,{children:m("span",{className:"flex items-center gap-2",children:[l.workflow===void 0?t(O,{variant:"outline",children:a("function")}):t(O,{variant:"secondary",children:a("workflow")}),t("span",{className:"font-mono text-xs",children:l.workflow??l.functionPath})]})}),t(b,{children:l.shardKey??""}),h!==void 0&&t(b,{className:"text-right",children:m("span",{className:"flex items-center justify-end gap-2",children:[d.kind==="ok"&&t("span",{className:"text-xs text-muted-foreground","data-testid":`cron-ran-${l.name}`,children:a("ran")}),d.kind==="error"&&t("span",{className:"text-xs text-destructive","data-testid":`cron-run-error-${l.name}`,role:"alert",children:d.message}),t(G,{confirmLabel:a("Run now?"),disabled:d.kind==="running",onConfirm:()=>{A(i(l.name))},testId:`cron-run-${l.name}`,children:d.kind==="running"?a("Running…"):a("Run now")})]})})]},`${l.cron}:${l.name}`)})})]})})})]})},se=n=>Number.isFinite(n)?j(n,"—"):"—",ne=n=>{const e=D(34);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadJobs:a,removeJob:p,retryJob:o}=c,s=V(),r=M();let y;e[2]===Symbol.for("react.memo_cache_sentinel")?(y=["lunora-dead-jobs"],e[2]=y):y=e[2];let h;e[3]!==s||e[4]!==a?(h=async()=>(await(a??(()=>s.listDeadJobs()))()).toSorted(oe),e[3]=s,e[4]=a,e[5]=h):h=e[5];const i=H(y,h),l=i.data,[d,g]=F(void 0),N=i.error??d,f=a===void 0;let C;e[6]!==s||e[7]!==f||e[8]!==o?(C=o??(f?u=>s.retryDeadJob(u):void 0),e[6]=s,e[7]=f,e[8]=o,e[9]=C):C=e[9];const v=C;let k;e[10]!==s||e[11]!==f||e[12]!==p?(k=p??(f?u=>s.removeDeadJob(u):void 0),e[10]=s,e[11]=f,e[12]=p,e[13]=k):k=e[13];const S=k;let $;e[14]!==i?($=()=>{i.refetch()},e[14]=i,e[15]=$):$=e[15],X($,!0);let I;e[16]!==i?(I=async u=>{g(void 0);try{await u,i.refetch()}catch(Z){g(U(Z))}},e[16]=i,e[17]=I):I=e[17];const L=I,T=v!==void 0||S!==void 0;let J;e[18]!==N?(J=N!==void 0&&t("p",{className:"text-sm text-destructive","data-testid":"dlq-error",role:"alert",children:N}),e[18]=N,e[19]=J):J=e[19];let w;e[20]!==l?.length||e[21]!==r?(w=l?.length===0&&t(W,{description:r("Jobs that exhaust their retry budget are parked here instead of being dropped."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M3 6h18M8 6V4h8v2M6 6l1 14h10l1-14"})}),testId:"dlq-empty",title:r("No dead-letter jobs.")}),e[20]=l?.length,e[21]=r,e[22]=w):w=e[22];let _;e[23]!==L||e[24]!==T||e[25]!==l||e[26]!==S||e[27]!==v||e[28]!==r?(_=l!==void 0&&l.length>0&&t(P,{className:"overflow-hidden py-0",children:t(R,{className:"px-0",children:m(Q,{"data-testid":"dlq-table",children:[t(K,{children:m(q,{children:[t(x,{children:r("function")}),t(x,{children:r("attempts")}),t(x,{children:r("last tried")}),t(x,{children:r("pool")}),t(x,{children:r("shard")}),t(x,{children:r("id")}),T&&t(x,{"aria-label":r("Actions")})]})}),t(z,{children:l.map(u=>m(q,{"data-testid":`dlq-row-${u.id}`,children:[t(b,{className:"font-mono text-xs",children:u.workflow??u.functionPath}),t(b,{className:"tabular-nums",children:u.attempts??0}),t(b,{className:"text-muted-foreground tabular-nums",children:se(u.scheduledFor)}),t(b,{className:"font-mono text-xs",children:u.pool??""}),t(b,{children:u.shardKey??""}),t(b,{className:"font-mono text-xs",children:u.id}),T&&t(b,{className:"text-right",children:m("div",{className:"flex justify-end gap-1.5",children:[v!==void 0&&t(Y,{"data-testid":`dlq-retry-${u.id}`,onClick:()=>{A(L(v(u.id)))},size:"sm",type:"button",variant:"outline",children:r("Retry")}),S!==void 0&&t(G,{confirmLabel:r("Drop job?"),onConfirm:()=>{A(L(S(u.id)))},testId:`dlq-remove-${u.id}`,children:r("Drop")})]})})]},u.id))})]})})}),e[23]=L,e[24]=T,e[25]=l,e[26]=S,e[27]=v,e[28]=r,e[29]=_):_=e[29];let B;return e[30]!==_||e[31]!==J||e[32]!==w?(B=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-dead-letter",children:[J,w,_]}),e[30]=_,e[31]=J,e[32]=w,e[33]=B):B=e[33],B};function oe(n,e){return(e.attempts??0)-(n.attempts??0)}const E=n=>{const e=D(8),{label:c,testId:a,value:p}=n;let o;e[0]!==c?(o=t("span",{className:"text-xs text-muted-foreground",children:c}),e[0]=c,e[1]=o):o=e[1];let s;e[2]!==a||e[3]!==p?(s=t("span",{className:"text-2xl font-semibold tabular-nums","data-testid":a,children:p}),e[2]=a,e[3]=p,e[4]=s):s=e[4];let r;return e[5]!==o||e[6]!==s?(r=t(P,{className:"flex-1 py-0",children:m(R,{className:"flex flex-col gap-1 p-4",children:[o,s]})}),e[5]=o,e[6]=s,e[7]=r):r=e[7],r},ae=n=>{const e=D(25);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadStatus:a}=c,p=V(),o=M(),s=a===void 0;let r;e[2]!==s?(r=["lunora-scheduler-status",s],e[2]=s,e[3]=r):r=e[3];let y;e[4]!==p||e[5]!==a?(y=async()=>{const k=await(a??(()=>p.schedulerStatus()))();return{...k,pools:k.pools.toSorted(ie)}},e[4]=p,e[5]=a,e[6]=y):y=e[6];const h=H(r,y),{data:i,error:l}=h;let d;e[7]!==h?(d=()=>{h.refetch()},e[7]=h,e[8]=d):d=e[8],X(d,!0);let g;e[9]!==l?(g=l!==null&&t("p",{className:"text-sm text-destructive","data-testid":"pools-error",role:"alert",children:l}),e[9]=l,e[10]=g):g=e[10];let N;e[11]!==i||e[12]!==o?(N=i!==void 0&&m("div",{className:"flex gap-3","data-testid":"pools-totals",children:[t(E,{label:o("backlog"),testId:"pools-backlog",value:i.backlog}),t(E,{label:o("in flight"),testId:"pools-inflight",value:i.inFlight}),t(E,{label:o("pools"),testId:"pools-count",value:i.pools.length})]}),e[11]=i,e[12]=o,e[13]=N):N=e[13];let f;e[14]!==i?.pools.length||e[15]!==o?(f=i?.pools.length===0&&t(W,{description:o("Pools created with createWorkpool appear here once they have activity."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M4 7h16M4 12h16M4 17h16"})}),testId:"pools-empty",title:o("No workpools.")}),e[14]=i?.pools.length,e[15]=o,e[16]=f):f=e[16];let C;e[17]!==i||e[18]!==o?(C=i!==void 0&&i.pools.length>0&&t(P,{className:"overflow-hidden py-0",children:t(R,{className:"px-0",children:m(Q,{"data-testid":"pools-table",children:[t(K,{children:m(q,{children:[t(x,{children:o("pool")}),t(x,{children:o("queued")}),t(x,{children:o("in flight")}),t(x,{children:o("max concurrency")})]})}),t(z,{children:i.pools.map(de)})]})})}),e[17]=i,e[18]=o,e[19]=C):C=e[19];let v;return e[20]!==g||e[21]!==N||e[22]!==f||e[23]!==C?(v=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-scheduler-pools",children:[g,N,f,C]}),e[20]=g,e[21]=N,e[22]=f,e[23]=C,e[24]=v):v=e[24],v};function ie(n,e){return e.queued-n.queued}function de(n){return m(q,{"data-testid":`pools-row-${n.name}`,children:[t(b,{className:"font-mono text-xs",children:n.name}),t(b,{className:"tabular-nums",children:n.queued}),m(b,{className:"tabular-nums",children:[n.inFlight," / ",n.maxConcurrency]}),t(b,{className:"tabular-nums",children:n.maxConcurrency})]},n.name)}const ce=["jobs","dead","pools","cron"],Ie=n=>{const e=D(41);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadCronJobs:a,scheduledCancel:p,scheduledLoad:o}=c,s=M(),[r,y]=F("jobs");let h;e[2]!==s?(h=s("Cron triggers"),e[2]=s,e[3]=h):h=e[3];let i;e[4]!==s?(i=s("Dead letter"),e[4]=s,e[5]=i):i=e[5];let l;e[6]!==s?(l=s("Scheduled jobs"),e[6]=s,e[7]=l):l=e[7];let d;e[8]!==s?(d=s("Pools"),e[8]=s,e[9]=d):d=e[9];let g;e[10]!==h||e[11]!==i||e[12]!==l||e[13]!==d?(g={cron:h,dead:i,jobs:l,pools:d},e[10]=h,e[11]=i,e[12]=l,e[13]=d,e[14]=g):g=e[14];const N=g;let f;e[15]===Symbol.for("react.memo_cache_sentinel")?(f=w=>{y(w.currentTarget.dataset.view)},e[15]=f):f=e[15];const C=f;let v;e[16]!==s?(v=s("Schedule view"),e[16]=s,e[17]=v):v=e[17];let k;e[18]!==r||e[19]!==N?(k=ce.map(w=>t(Y,{"aria-selected":r===w,"data-testid":`schedule-view-${w}`,"data-view":w,onClick:C,role:"tab",size:"sm",type:"button",variant:r===w?"default":"outline",children:N[w]},w)),e[18]=r,e[19]=N,e[20]=k):k=e[20];let S;e[21]!==v||e[22]!==k?(S=t("div",{"aria-label":v,className:"flex gap-1.5","data-testid":"schedule-view-toggle",role:"tablist",children:k}),e[21]=v,e[22]=k,e[23]=S):S=e[23];let $;e[24]!==p||e[25]!==o||e[26]!==r?($=r==="jobs"&&t(ee,{cancelJob:p,loadJobs:o}),e[24]=p,e[25]=o,e[26]=r,e[27]=$):$=e[27];let I;e[28]!==r?(I=r==="dead"&&t(ne,{}),e[28]=r,e[29]=I):I=e[29];let L;e[30]!==r?(L=r==="pools"&&t(ae,{}),e[30]=r,e[31]=L):L=e[31];let T;e[32]!==a||e[33]!==r?(T=r==="cron"&&t(le,{loadCronJobs:a}),e[32]=a,e[33]=r,e[34]=T):T=e[34];let J;return e[35]!==S||e[36]!==$||e[37]!==I||e[38]!==L||e[39]!==T?(J=m("div",{className:"flex flex-col gap-4","data-testid":"lunora-schedule",children:[S,$,I,L,T]}),e[35]=S,e[36]=$,e[37]=I,e[38]=L,e[39]=T,e[40]=J):J=e[40],J};export{Ie as SchedulePanel};
|
|
1
|
+
import{c as D}from"react/compiler-runtime";import{useState as F}from"react";import{B as Y}from"../packem_shared/button-q0UYSmrn.mjs";import{useT as M}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{useLunora as V}from"@lunora/react";import{ConfirmButton as G}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{B as O}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as P,a as R}from"../packem_shared/card-By2O8ULa.mjs";import{E as W}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as Q,a as K,b as q,c as x,d as z,e as b}from"../packem_shared/table-D0SBiDu-.mjs";import{b as H}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{f as A,b as U,h as j}from"../packem_shared/internal-Df43vQI0.mjs";import{jsxs as m,jsx as t}from"react/jsx-runtime";import{useAutoRefresh as X}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{ScheduledJobs as ee}from"../packem_shared/ScheduledJobs-BZNcYWBP.mjs";const te={kind:"idle"},re=(n,e,c)=>c!==void 0?c:e===void 0?a=>n.runCronJob(a):void 0,le=({loadCronJobs:n,runCronJob:e}={})=>{const c=V(),a=M(),[p,o]=F({}),s=H(["lunora-cron-jobs",n?"custom":"default"],()=>(n??(()=>c.getCronJobs()))()),{data:r,error:y}=s,h=re(c,n,e),i=async l=>{if(h!==void 0){o(d=>({...d,[l]:{kind:"running"}}));try{await h(l),o(d=>({...d,[l]:{kind:"ok"}})),s.refetch()}catch(d){o(g=>({...g,[l]:{kind:"error",message:U(d)}}))}}};return m("div",{className:"flex flex-col gap-3","data-testid":"lunora-cron-triggers",children:[y!==null&&t("p",{className:"text-sm text-destructive","data-testid":"cron-error",role:"alert",children:y}),r?.length===0&&t(W,{description:a("Triggers declared with the cronJobs() builder appear here."),icon:m("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M12 7.5V12l4 2"})]}),testId:"cron-empty",title:a("No cron triggers.")}),r!==void 0&&r.length>0&&t(P,{className:"overflow-hidden py-0",children:t(R,{className:"px-0",children:m(Q,{"data-testid":"cron-table",children:[t(K,{children:m(q,{children:[t(x,{children:a("name")}),t(x,{children:a("schedule")}),t(x,{children:a("target")}),t(x,{children:a("shard")}),h!==void 0&&t(x,{"aria-label":a("Actions")})]})}),t(z,{children:r.map(l=>{const d=p[l.name]??te;return m(q,{"data-testid":`cron-row-${l.name}`,children:[t(b,{children:l.name}),t(b,{className:"font-mono text-xs tabular-nums",children:l.cron}),t(b,{children:m("span",{className:"flex items-center gap-2",children:[l.workflow===void 0?t(O,{variant:"outline",children:a("function")}):t(O,{variant:"secondary",children:a("workflow")}),t("span",{className:"font-mono text-xs",children:l.workflow??l.functionPath})]})}),t(b,{children:l.shardKey??""}),h!==void 0&&t(b,{className:"text-right",children:m("span",{className:"flex items-center justify-end gap-2",children:[d.kind==="ok"&&t("span",{className:"text-xs text-muted-foreground","data-testid":`cron-ran-${l.name}`,children:a("ran")}),d.kind==="error"&&t("span",{className:"text-xs text-destructive","data-testid":`cron-run-error-${l.name}`,role:"alert",children:d.message}),t(G,{confirmLabel:a("Run now?"),disabled:d.kind==="running",onConfirm:()=>{A(i(l.name))},testId:`cron-run-${l.name}`,children:d.kind==="running"?a("Running…"):a("Run now")})]})})]},`${l.cron}:${l.name}`)})})]})})})]})},se=n=>Number.isFinite(n)?j(n,"—"):"—",ne=n=>{const e=D(34);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadJobs:a,removeJob:p,retryJob:o}=c,s=V(),r=M();let y;e[2]===Symbol.for("react.memo_cache_sentinel")?(y=["lunora-dead-jobs"],e[2]=y):y=e[2];let h;e[3]!==s||e[4]!==a?(h=async()=>(await(a??(()=>s.listDeadJobs()))()).toSorted(oe),e[3]=s,e[4]=a,e[5]=h):h=e[5];const i=H(y,h),l=i.data,[d,g]=F(void 0),N=i.error??d,f=a===void 0;let C;e[6]!==s||e[7]!==f||e[8]!==o?(C=o??(f?u=>s.retryDeadJob(u):void 0),e[6]=s,e[7]=f,e[8]=o,e[9]=C):C=e[9];const v=C;let k;e[10]!==s||e[11]!==f||e[12]!==p?(k=p??(f?u=>s.removeDeadJob(u):void 0),e[10]=s,e[11]=f,e[12]=p,e[13]=k):k=e[13];const S=k;let $;e[14]!==i?($=()=>{i.refetch()},e[14]=i,e[15]=$):$=e[15],X($,!0);let I;e[16]!==i?(I=async u=>{g(void 0);try{await u,i.refetch()}catch(Z){g(U(Z))}},e[16]=i,e[17]=I):I=e[17];const L=I,T=v!==void 0||S!==void 0;let J;e[18]!==N?(J=N!==void 0&&t("p",{className:"text-sm text-destructive","data-testid":"dlq-error",role:"alert",children:N}),e[18]=N,e[19]=J):J=e[19];let w;e[20]!==l?.length||e[21]!==r?(w=l?.length===0&&t(W,{description:r("Jobs that exhaust their retry budget are parked here instead of being dropped."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M3 6h18M8 6V4h8v2M6 6l1 14h10l1-14"})}),testId:"dlq-empty",title:r("No dead-letter jobs.")}),e[20]=l?.length,e[21]=r,e[22]=w):w=e[22];let _;e[23]!==L||e[24]!==T||e[25]!==l||e[26]!==S||e[27]!==v||e[28]!==r?(_=l!==void 0&&l.length>0&&t(P,{className:"overflow-hidden py-0",children:t(R,{className:"px-0",children:m(Q,{"data-testid":"dlq-table",children:[t(K,{children:m(q,{children:[t(x,{children:r("function")}),t(x,{children:r("attempts")}),t(x,{children:r("last tried")}),t(x,{children:r("pool")}),t(x,{children:r("shard")}),t(x,{children:r("id")}),T&&t(x,{"aria-label":r("Actions")})]})}),t(z,{children:l.map(u=>m(q,{"data-testid":`dlq-row-${u.id}`,children:[t(b,{className:"font-mono text-xs",children:u.workflow??u.functionPath}),t(b,{className:"tabular-nums",children:u.attempts??0}),t(b,{className:"text-muted-foreground tabular-nums",children:se(u.scheduledFor)}),t(b,{className:"font-mono text-xs",children:u.pool??""}),t(b,{children:u.shardKey??""}),t(b,{className:"font-mono text-xs",children:u.id}),T&&t(b,{className:"text-right",children:m("div",{className:"flex justify-end gap-1.5",children:[v!==void 0&&t(Y,{"data-testid":`dlq-retry-${u.id}`,onClick:()=>{A(L(v(u.id)))},size:"sm",type:"button",variant:"outline",children:r("Retry")}),S!==void 0&&t(G,{confirmLabel:r("Drop job?"),onConfirm:()=>{A(L(S(u.id)))},testId:`dlq-remove-${u.id}`,children:r("Drop")})]})})]},u.id))})]})})}),e[23]=L,e[24]=T,e[25]=l,e[26]=S,e[27]=v,e[28]=r,e[29]=_):_=e[29];let B;return e[30]!==_||e[31]!==J||e[32]!==w?(B=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-dead-letter",children:[J,w,_]}),e[30]=_,e[31]=J,e[32]=w,e[33]=B):B=e[33],B};function oe(n,e){return(e.attempts??0)-(n.attempts??0)}const E=n=>{const e=D(8),{label:c,testId:a,value:p}=n;let o;e[0]!==c?(o=t("span",{className:"text-xs text-muted-foreground",children:c}),e[0]=c,e[1]=o):o=e[1];let s;e[2]!==a||e[3]!==p?(s=t("span",{className:"text-2xl font-semibold tabular-nums","data-testid":a,children:p}),e[2]=a,e[3]=p,e[4]=s):s=e[4];let r;return e[5]!==o||e[6]!==s?(r=t(P,{className:"flex-1 py-0",children:m(R,{className:"flex flex-col gap-1 p-4",children:[o,s]})}),e[5]=o,e[6]=s,e[7]=r):r=e[7],r},ae=n=>{const e=D(25);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadStatus:a}=c,p=V(),o=M(),s=a===void 0;let r;e[2]!==s?(r=["lunora-scheduler-status",s],e[2]=s,e[3]=r):r=e[3];let y;e[4]!==p||e[5]!==a?(y=async()=>{const k=await(a??(()=>p.schedulerStatus()))();return{...k,pools:k.pools.toSorted(ie)}},e[4]=p,e[5]=a,e[6]=y):y=e[6];const h=H(r,y),{data:i,error:l}=h;let d;e[7]!==h?(d=()=>{h.refetch()},e[7]=h,e[8]=d):d=e[8],X(d,!0);let g;e[9]!==l?(g=l!==null&&t("p",{className:"text-sm text-destructive","data-testid":"pools-error",role:"alert",children:l}),e[9]=l,e[10]=g):g=e[10];let N;e[11]!==i||e[12]!==o?(N=i!==void 0&&m("div",{className:"flex gap-3","data-testid":"pools-totals",children:[t(E,{label:o("backlog"),testId:"pools-backlog",value:i.backlog}),t(E,{label:o("in flight"),testId:"pools-inflight",value:i.inFlight}),t(E,{label:o("pools"),testId:"pools-count",value:i.pools.length})]}),e[11]=i,e[12]=o,e[13]=N):N=e[13];let f;e[14]!==i?.pools.length||e[15]!==o?(f=i?.pools.length===0&&t(W,{description:o("Pools created with createWorkpool appear here once they have activity."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M4 7h16M4 12h16M4 17h16"})}),testId:"pools-empty",title:o("No workpools.")}),e[14]=i?.pools.length,e[15]=o,e[16]=f):f=e[16];let C;e[17]!==i||e[18]!==o?(C=i!==void 0&&i.pools.length>0&&t(P,{className:"overflow-hidden py-0",children:t(R,{className:"px-0",children:m(Q,{"data-testid":"pools-table",children:[t(K,{children:m(q,{children:[t(x,{children:o("pool")}),t(x,{children:o("queued")}),t(x,{children:o("in flight")}),t(x,{children:o("max concurrency")})]})}),t(z,{children:i.pools.map(de)})]})})}),e[17]=i,e[18]=o,e[19]=C):C=e[19];let v;return e[20]!==g||e[21]!==N||e[22]!==f||e[23]!==C?(v=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-scheduler-pools",children:[g,N,f,C]}),e[20]=g,e[21]=N,e[22]=f,e[23]=C,e[24]=v):v=e[24],v};function ie(n,e){return e.queued-n.queued}function de(n){return m(q,{"data-testid":`pools-row-${n.name}`,children:[t(b,{className:"font-mono text-xs",children:n.name}),t(b,{className:"tabular-nums",children:n.queued}),m(b,{className:"tabular-nums",children:[n.inFlight," / ",n.maxConcurrency]}),t(b,{className:"tabular-nums",children:n.maxConcurrency})]},n.name)}const ce=["jobs","dead","pools","cron"],Ie=n=>{const e=D(41);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadCronJobs:a,scheduledCancel:p,scheduledLoad:o}=c,s=M(),[r,y]=F("jobs");let h;e[2]!==s?(h=s("Cron triggers"),e[2]=s,e[3]=h):h=e[3];let i;e[4]!==s?(i=s("Dead letter"),e[4]=s,e[5]=i):i=e[5];let l;e[6]!==s?(l=s("Scheduled jobs"),e[6]=s,e[7]=l):l=e[7];let d;e[8]!==s?(d=s("Pools"),e[8]=s,e[9]=d):d=e[9];let g;e[10]!==h||e[11]!==i||e[12]!==l||e[13]!==d?(g={cron:h,dead:i,jobs:l,pools:d},e[10]=h,e[11]=i,e[12]=l,e[13]=d,e[14]=g):g=e[14];const N=g;let f;e[15]===Symbol.for("react.memo_cache_sentinel")?(f=w=>{y(w.currentTarget.dataset.view)},e[15]=f):f=e[15];const C=f;let v;e[16]!==s?(v=s("Schedule view"),e[16]=s,e[17]=v):v=e[17];let k;e[18]!==r||e[19]!==N?(k=ce.map(w=>t(Y,{"aria-selected":r===w,"data-testid":`schedule-view-${w}`,"data-view":w,onClick:C,role:"tab",size:"sm",type:"button",variant:r===w?"default":"outline",children:N[w]},w)),e[18]=r,e[19]=N,e[20]=k):k=e[20];let S;e[21]!==v||e[22]!==k?(S=t("div",{"aria-label":v,className:"flex gap-1.5","data-testid":"schedule-view-toggle",role:"tablist",children:k}),e[21]=v,e[22]=k,e[23]=S):S=e[23];let $;e[24]!==p||e[25]!==o||e[26]!==r?($=r==="jobs"&&t(ee,{cancelJob:p,loadJobs:o}),e[24]=p,e[25]=o,e[26]=r,e[27]=$):$=e[27];let I;e[28]!==r?(I=r==="dead"&&t(ne,{}),e[28]=r,e[29]=I):I=e[29];let L;e[30]!==r?(L=r==="pools"&&t(ae,{}),e[30]=r,e[31]=L):L=e[31];let T;e[32]!==a||e[33]!==r?(T=r==="cron"&&t(le,{loadCronJobs:a}),e[32]=a,e[33]=r,e[34]=T):T=e[34];let J;return e[35]!==S||e[36]!==$||e[37]!==I||e[38]!==L||e[39]!==T?(J=m("div",{className:"flex flex-col gap-4","data-testid":"lunora-schedule",children:[S,$,I,L,T]}),e[35]=S,e[36]=$,e[37]=I,e[38]=L,e[39]=T,e[40]=J):J=e[40],J};export{Ie as SchedulePanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as y}from"react/compiler-runtime";import{E as N}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as R}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as T,a as k}from"../packem_shared/card
|
|
1
|
+
import{c as y}from"react/compiler-runtime";import{E as N}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as R}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as T,a as k}from"../packem_shared/card-By2O8ULa.mjs";import{E as S}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as w,a as C,b as g,c as f,d as $,e as p}from"../packem_shared/table-D0SBiDu-.mjs";import{u as A}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as E}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as v}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsxs as u,jsx as r}from"react/jsx-runtime";const I=(e,t)=>({delete:e("Delete"),list:e("List"),read:e("Read"),write:e("Write")})[t],b={delete:2,list:3,read:0,write:1},O=e=>[...e].toSorted((t,a)=>t.bucket.localeCompare(a.bucket)||b[t.on]-b[a.on]||(t.prefix??"").localeCompare(a.prefix??"")),M=()=>{const e=y(14),t=E();let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a={},e[0]=a):a=e[0];const{data:l,error:d,errorSource:i}=A(v.storageRules,a),h=l!==void 0;let n;if(e[1]!==l||e[2]!==d||e[3]!==i||e[4]!==h||e[5]!==t){const x=O(Array.isArray(l?.rules)?l.rules:[]);let c;e[7]!==d||e[8]!==i?(c=d!==null&&r(N,{error:i,testId:"storage-rules-error"}),e[7]=d,e[8]=i,e[9]=c):c=e[9];let s;e[10]!==t?(s=t("Storage rules are declared in code with defineStorageRule and gate ctx.storage access per bucket. This view is read-only."),e[10]=t,e[11]=s):s=e[11];let m;e[12]!==s?(m=r("p",{className:"text-sm text-muted-foreground","data-testid":"storage-rules-note",children:s}),e[12]=s,e[13]=m):m=e[13],n=u("div",{className:"flex flex-col gap-4","data-testid":"lunora-storage-rules-panel",children:[c,m,h&&x.length===0?r(S,{description:t("No defineStorageRule is wired through .use(storageRules(...)) in this deployment. Add one to gate object access by key prefix."),testId:"storage-rules-empty",title:t("No storage rules defined")}):r(T,{className:"overflow-hidden py-0",children:r(k,{className:"px-0",children:u(w,{"data-testid":"storage-rules-table",children:[r(C,{children:u(g,{children:[r(f,{children:t("Bucket")}),r(f,{children:t("Operation")}),r(f,{children:t("Key prefix")}),r(f,{children:t("Guarded by")})]})}),r($,{children:x.map(o=>u(g,{"data-testid":`storage-rule-${o.bucket}-${o.on}-${o.prefix??""}`,children:[r(p,{className:"font-mono text-xs",children:o.bucket}),r(p,{children:r(R,{variant:"secondary",children:I(t,o.on)})}),r(p,{className:"font-mono text-xs",children:o.prefix??r("span",{className:"text-muted-foreground",children:t("(whole bucket)")})}),r(p,{className:"font-mono text-xs text-muted-foreground",children:o.procedure})]},`${o.bucket}:${o.on}:${o.prefix??""}:${o.procedure}`))})]})})})]}),e[1]=l,e[2]=d,e[3]=i,e[4]=h,e[5]=t,e[6]=n}else n=e[6];return n};export{M as default};
|