@lunora/studio 1.0.0-alpha.287 → 1.0.0-alpha.289
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 +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +1 -1
- package/dist/mount.d.mts +1 -1
- package/dist/mount.d.ts +1 -1
- package/dist/mount.mjs +1 -1
- package/dist/packem_chunks/kv-browser.mjs +1 -1
- package/dist/packem_chunks/payments-panel.mjs +1 -1
- package/dist/packem_chunks/privacy-requests-panel.mjs +1 -0
- package/dist/packem_shared/{HomePanel-C-g2umyB.mjs → HomePanel-CUuYsApa.mjs} +1 -1
- package/dist/packem_shared/{Studio-D2BDkB20.mjs → Studio-CZjQXFHC.mjs} +1 -1
- package/dist/packem_shared/{StudioApp-vzv6-90m.mjs → StudioApp-C9ENwcOH.mjs} +1 -1
- package/dist/packem_shared/{app.d-BIfsPhiH.d.ts → app.d-D7vL0y8y.d.mts} +40 -1
- package/dist/packem_shared/{app.d-BIfsPhiH.d.mts → app.d-D7vL0y8y.d.ts} +40 -1
- package/dist/packem_shared/{home-panel-DIaVZra4.mjs → home-panel-BcE8S2Nn.mjs} +1 -1
- package/dist/packem_shared/studio-fK2DTLde.mjs +2 -0
- package/dist/standalone/{chunk-YRSZ7R5M.js → chunk-4A6ICQ33.js} +1 -1
- package/dist/standalone/{chunk-SMRF3OF3.js → chunk-4JV44PC5.js} +2 -2
- package/dist/standalone/{chunk-EVRDIDUZ.js → chunk-4U2J2ME3.js} +1 -1
- package/dist/standalone/{chunk-TSWDU7TX.js → chunk-4UO2OTLK.js} +1 -1
- package/dist/standalone/chunk-54JZD74E.js +15 -0
- package/dist/standalone/{chunk-XQIDTBFH.js → chunk-5KFKN5DE.js} +1 -1
- package/dist/standalone/{chunk-FHNG7QHV.js → chunk-5WVYD4BT.js} +1 -1
- package/dist/standalone/{chunk-6R4ROTON.js → chunk-63IQGHPL.js} +1 -1
- package/dist/standalone/{chunk-OQBYCVDK.js → chunk-6FGQ5E2B.js} +1 -1
- package/dist/standalone/{chunk-P5TMMDVW.js → chunk-6JHWSJQU.js} +1 -1
- package/dist/standalone/{chunk-OM5AXBYZ.js → chunk-6MPWC5MD.js} +1 -1
- package/dist/standalone/chunk-6RXWGRH7.js +1 -0
- package/dist/standalone/{chunk-OUEJHLUX.js → chunk-A6EGILT4.js} +1 -1
- package/dist/standalone/{chunk-ZWK2KMDB.js → chunk-AF5ERKUP.js} +1 -1
- package/dist/standalone/{chunk-FIX4YZH3.js → chunk-AGWOZ6P2.js} +1 -1
- package/dist/standalone/{chunk-U7RUITYE.js → chunk-BL4ORKKN.js} +1 -1
- package/dist/standalone/chunk-C7DRRPQQ.js +1 -0
- package/dist/standalone/{chunk-GBL7WEUY.js → chunk-CESYGLNZ.js} +1 -1
- package/dist/standalone/{chunk-OHZY3Z6U.js → chunk-CK6HFTG7.js} +1 -1
- package/dist/standalone/{chunk-R7D2S6ZG.js → chunk-CQWFDDTK.js} +1 -1
- package/dist/standalone/{chunk-QRFKR22V.js → chunk-DQHTOUUS.js} +1 -1
- package/dist/standalone/{chunk-GQYM4BFO.js → chunk-DVMO32RX.js} +1 -1
- package/dist/standalone/{chunk-XI6S7YPS.js → chunk-E5XPDR5D.js} +1 -1
- package/dist/standalone/{chunk-DIHZQ4D5.js → chunk-EASJRBTN.js} +1 -1
- package/dist/standalone/{chunk-V4UFDTTR.js → chunk-EN2PGJWN.js} +1 -1
- package/dist/standalone/{chunk-3PG4P5EM.js → chunk-F6VN7MAF.js} +1 -1
- package/dist/standalone/{chunk-2POR2UIU.js → chunk-FA46V4KR.js} +1 -1
- package/dist/standalone/{chunk-QLVYMNCS.js → chunk-FED7KM46.js} +1 -1
- package/dist/standalone/{chunk-7RZ6FOG6.js → chunk-FGWGG424.js} +1 -1
- package/dist/standalone/{chunk-S4TCG3US.js → chunk-G6N5A4TA.js} +1 -1
- package/dist/standalone/{chunk-QP3PPO4S.js → chunk-GJ6J6JZA.js} +1 -1
- package/dist/standalone/{chunk-NQNVQNER.js → chunk-GTV5WDXF.js} +1 -1
- package/dist/standalone/{chunk-JBNZ6BGE.js → chunk-GXXIGCIF.js} +1 -1
- package/dist/standalone/{chunk-AFSCX4L2.js → chunk-HDVUWQQM.js} +1 -1
- package/dist/standalone/{chunk-I2LU36YS.js → chunk-HGTKL66S.js} +1 -1
- package/dist/standalone/{chunk-H6WO3TFT.js → chunk-HPY2HNZK.js} +1 -1
- package/dist/standalone/{chunk-YBILTG2T.js → chunk-IHPSJ2PU.js} +1 -1
- package/dist/standalone/{chunk-SLUVTEPX.js → chunk-JNKH43IG.js} +1 -1
- package/dist/standalone/{chunk-LZXXQXL7.js → chunk-JYTVI62T.js} +1 -1
- package/dist/standalone/{chunk-KD6OU5GM.js → chunk-KIVY3C4V.js} +1 -1
- package/dist/standalone/{chunk-NPR6Q6JS.js → chunk-KKVPUQD2.js} +1 -1
- package/dist/standalone/chunk-KU6ZTYP4.js +9 -0
- package/dist/standalone/{chunk-GE3WXW3Y.js → chunk-MJ3WFI7T.js} +1 -1
- package/dist/standalone/{chunk-SVZOEJEA.js → chunk-MKRA2W3P.js} +1 -1
- package/dist/standalone/{chunk-U3MTI3IN.js → chunk-NR2U7C6X.js} +1 -1
- package/dist/standalone/{chunk-QGZCKYPT.js → chunk-OE6FYYDJ.js} +1 -1
- package/dist/standalone/{chunk-RI2TLT4W.js → chunk-OFURQPKP.js} +1 -1
- package/dist/standalone/{chunk-B3K4TPMS.js → chunk-OKQS3RV4.js} +1 -1
- package/dist/standalone/chunk-PHEWXIFF.js +1 -0
- package/dist/standalone/{chunk-225RE5GA.js → chunk-PQPCOO6E.js} +1 -1
- package/dist/standalone/{chunk-WBMTG4DM.js → chunk-RY2R7KP5.js} +1 -1
- package/dist/standalone/{chunk-K342KBP5.js → chunk-SAOBVEGV.js} +1 -1
- package/dist/standalone/{chunk-5EPYBABM.js → chunk-SFPHDV3R.js} +1 -1
- package/dist/standalone/{chunk-SUCU3ZAO.js → chunk-SUOPCQD7.js} +1 -1
- package/dist/standalone/{chunk-VINW46KZ.js → chunk-TRPBILYS.js} +1 -1
- package/dist/standalone/{chunk-IA25TFHO.js → chunk-VK26SQ7G.js} +1 -1
- package/dist/standalone/{chunk-RDOLNBRM.js → chunk-VOJEROA7.js} +1 -1
- package/dist/standalone/{chunk-RKS4LAKS.js → chunk-WSUUMPYP.js} +1 -1
- package/dist/standalone/{chunk-LRABO5JF.js → chunk-XSZHBDQO.js} +1 -1
- package/dist/standalone/{chunk-BMKNXB4P.js → chunk-YF7ZNDI4.js} +1 -1
- package/dist/standalone/{chunk-K2OUSI63.js → chunk-YK7KJ3B6.js} +1 -1
- package/dist/standalone/{chunk-PO3S7KA4.js → chunk-YKGW4P6U.js} +1 -1
- package/dist/standalone/{chunk-MNHPOCDO.js → chunk-YU53KJ7Y.js} +1 -1
- package/dist/standalone/{chunk-OB7U2YW6.js → chunk-ZEFFMYSN.js} +1 -1
- package/dist/standalone/chunk-ZKESOLYY.js +1 -0
- package/dist/standalone/{chunk-2OPEPZPK.js → chunk-ZMBT2OFU.js} +1 -1
- package/dist/standalone/studio.js +1 -1
- package/package.json +5 -5
- package/dist/packem_shared/studio-ySYj-BsV.mjs +0 -2
- package/dist/standalone/chunk-2TCG7CHR.js +0 -1
- package/dist/standalone/chunk-46U4572L.js +0 -1
- package/dist/standalone/chunk-B3WCNVKG.js +0 -9
- package/dist/standalone/chunk-OACO7GME.js +0 -15
- package/dist/standalone/chunk-W7TF6FTU.js +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{StudioApp as r}from"./packem_shared/StudioApp-
|
|
1
|
+
import{StudioApp as r}from"./packem_shared/StudioApp-C9ENwcOH.mjs";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-D9ZY-qQd.mjs";import{S as m}from"./packem_shared/studio-fK2DTLde.mjs";import{ConfirmButton as l}from"./packem_shared/ConfirmButton-DU4p72Er.mjs";import{default as s}from"./packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-BWNF98VF.mjs";import{ShardInput as P}from"./packem_shared/ShardInput-C6mjgAh4.mjs";import{default as A}from"./packem_chunks/AdvisorHealthPanel.mjs";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.mjs";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.mjs";import{default as h}from"./packem_shared/ApiDocsPanel-fhDlZGE4.mjs";import{default as C}from"./packem_shared/ApiReferencePanel-nAf8tNRr.mjs";import{default as O}from"./packem_chunks/ApiTab.mjs";import{default as N}from"./packem_shared/OpenRpcReferencePanel-BxEr49D9.mjs";import{DataBrowser as U}from"./packem_shared/DataBrowser-C14aRmmR.mjs";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-CYZFt2EK.mjs";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{TableEditor as q}from"./packem_chunks/TableEditor.mjs";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.mjs";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-CkVIwAbK.mjs";import{PitrPanel as z}from"./packem_chunks/PitrPanel.mjs";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.mjs";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.mjs";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.mjs";import{H as oe}from"./packem_shared/home-panel-BcE8S2Nn.mjs";import{AuditPanel as te}from"./packem_chunks/AuditPanel.mjs";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.mjs";import{MailPanel as me}from"./packem_chunks/MailPanel.mjs";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-BZNcYWBP.mjs";import{default as se}from"./packem_chunks/NotificationsPanel.mjs";import{HealthPanel as de}from"./packem_chunks/HealthPanel.mjs";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-DKFJc-o5.mjs";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.mjs";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.mjs";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.mjs";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.mjs";import{FileBrowser as he}from"./packem_chunks/FileBrowser.mjs";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{default as Le}from"./packem_shared/useDebounced-DVeQ5-oW.mjs";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-fVsCSs5L.mjs";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.mjs";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
|
package/dist/mount.d.mts
CHANGED
package/dist/mount.d.ts
CHANGED
package/dist/mount.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LunoraError as m}from"@lunora/errors";import{createRoot as i}from"react-dom/client";import{StudioApp as p}from"./packem_shared/StudioApp-
|
|
1
|
+
import{LunoraError as m}from"@lunora/errors";import{createRoot as i}from"react-dom/client";import{StudioApp as p}from"./packem_shared/StudioApp-C9ENwcOH.mjs";import{jsx as u}from"react/jsx-runtime";const a=(n={})=>{const{container:o="#root",...e}=n,t=typeof o=="string"?document.querySelector(o):o;if(t===null)throw new m("INTERNAL",`mountStudio: container ${typeof o=="string"?o:"element"} not found`);const r=i(t);return r.render(u(p,{...e})),r};export{a as mountStudio};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useLunora as ee}from"@lunora/react";import{useState as Z,useReducer as le,useEffect as ae}from"react";import{C as ve,a as fe}from"../packem_shared/card-By2O8ULa.mjs";import{E as Ee}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as pe,a as he,b as X,c as q,d as ye,e as Q}from"../packem_shared/table-D0SBiDu-.mjs";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{f as H,b as R,m as Fe,g as se}from"../packem_shared/internal-Df43vQI0.mjs";import{B as P}from"../packem_shared/button-q0UYSmrn.mjs";import{C as ne}from"../packem_shared/checkbox-CnS9cyCz.mjs";import{I as re}from"../packem_shared/input-CXhxesPC.mjs";import{b as ie,c as de,d as oe,e as ce}from"../packem_shared/studio-ySYj-BsV.mjs";import{c as te}from"react/compiler-runtime";import{L as W}from"../packem_shared/label-DKFzyHq6.mjs";import{T as ke}from"../packem_shared/textarea--40GKAyz.mjs";import{c as Ke,S as Ve,a as Ie,b as _e,d as Me}from"../packem_shared/select-DPyS18Vy.mjs";import{jsx as r,jsxs as w,Fragment as be}from"react/jsx-runtime";import{B as Le}from"../packem_shared/badge-r_5B4LHP.mjs";const Be=l=>{const e=l.trim();if(e==="")return;const s=Number(e);return Number.isFinite(s)&&s>0?Math.floor(s):void 0},Oe=l=>l===void 0?"—":new Date(l*1e3).toISOString(),Ae=l=>new TextEncoder().encode(l).length,ge=l=>{if(l.trim()!=="")try{return JSON.stringify(JSON.parse(l),void 0,2)}catch{return}},xe=l=>{if(l.trim()==="")return!0;try{return JSON.parse(l),!0}catch{return!1}},Ne=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],ue=(l,e)=>{const s=l.trim();if(s==="")return"";const c=Number(s),i=Ne.find(v=>v.key===e)?.seconds??1;return Number.isFinite(c)&&c>0?String(Math.round(c*i)):s},Ce=l=>{const e=l.trim();if(e==="")return!0;const s=Number(e);return Number.isInteger(s)&&s>=60},Se=(l,e,s,c)=>{const i=Be(l.ttl);return{expiration:i===void 0?c:void 0,expirationTtl:i,key:e,metadata:l.metadata.trim()===""?void 0:JSON.parse(l.metadata),namespace:s,value:l.value}},we=l=>{const e=te(60),{helper:s,id:c,invalid:i,onChange:v,testId:d}=l,t=G(),[a,f]=Z(""),[o,g]=Z("seconds");let k;e[0]!==v||e[1]!==o?(k=b=>{f(b.target.value),v(ue(b.target.value,o))},e[0]=v,e[1]=o,e[2]=k):k=e[2];const L=k;let K;e[3]!==a||e[4]!==v?(K=b=>{b!==null&&(g(b),v(ue(a,b)))},e[3]=a,e[4]=v,e[5]=K):K=e[5];const V=K;let p;e[6]!==t?(p=t("days"),e[6]=t,e[7]=p):p=e[7];let m;e[8]!==t?(m=t("hours"),e[8]=t,e[9]=m):m=e[9];let h;e[10]!==t?(h=t("minutes"),e[10]=t,e[11]=h):h=e[11];let x;e[12]!==t?(x=t("seconds"),e[12]=t,e[13]=x):x=e[13];let N;e[14]!==p||e[15]!==m||e[16]!==h||e[17]!==x?(N={days:p,hours:m,minutes:h,seconds:x},e[14]=p,e[15]=m,e[16]=h,e[17]=x,e[18]=N):N=e[18];const C=N;let y;e[19]!==t?(y=t("Expires after"),e[19]=t,e[20]=y):y=e[20];let S;e[21]!==c||e[22]!==y?(S=r(W,{className:"text-xs",htmlFor:c,children:y}),e[21]=c,e[22]=y,e[23]=S):S=e[23];let F;e[24]!==t?(F=t("No expiration"),e[24]=t,e[25]=F):F=e[25];let O;e[26]!==a||e[27]!==c||e[28]!==i||e[29]!==L||e[30]!==F||e[31]!==d?(O=r(re,{"aria-invalid":i,className:"flex-1","data-testid":d,id:c,inputMode:"numeric",onChange:L,placeholder:F,value:a}),e[26]=a,e[27]=c,e[28]=i,e[29]=L,e[30]=F,e[31]=d,e[32]=O):O=e[32];let I;e[33]!==t?(I=t("TTL unit"),e[33]=t,e[34]=I):I=e[34];const D=`${d}-unit`;let A;e[35]===Symbol.for("react.memo_cache_sentinel")?(A=r(Ve,{}),e[35]=A):A=e[35];let _;e[36]!==I||e[37]!==D?(_=r(Ie,{"aria-label":I,className:"w-[7.5rem]","data-testid":D,children:A}),e[36]=I,e[37]=D,e[38]=_):_=e[38];let n;e[39]!==C?(n=Ne.map(b=>r(Ke,{value:b.key,children:C[b.key]},b.key)),e[39]=C,e[40]=n):n=e[40];let u;e[41]!==n?(u=r(_e,{children:n}),e[41]=n,e[42]=u):u=e[42];let T;e[43]!==V||e[44]!==_||e[45]!==u||e[46]!==o?(T=w(Me,{onValueChange:V,value:o,children:[_,u]}),e[43]=V,e[44]=_,e[45]=u,e[46]=o,e[47]=T):T=e[47];let M;e[48]!==O||e[49]!==T?(M=w("div",{className:"flex gap-2",children:[O,T]}),e[48]=O,e[49]=T,e[50]=M):M=e[50];let E;e[51]!==s||e[52]!==i||e[53]!==t||e[54]!==d?(E=i?r("p",{className:"text-xs text-destructive","data-testid":`${d}-invalid`,children:t("TTL must be at least 60 seconds.")}):s!==void 0&&r("p",{className:"text-xs text-muted-foreground",children:s}),e[51]=s,e[52]=i,e[53]=t,e[54]=d,e[55]=E):E=e[55];let B;return e[56]!==M||e[57]!==E||e[58]!==S?(B=w("div",{className:"mb-3 grid gap-1",children:[S,M,E]}),e[56]=M,e[57]=E,e[58]=S,e[59]=B):B=e[59],B},Te=l=>{const e=te(36),{id:s,invalidTestId:c,onChange:i,testId:v,valid:d,value:t}=l,a=G();let f;e[0]!==t?(f=ge(t),e[0]=t,e[1]=f):f=e[1];const o=f;let g;e[2]!==a?(g=a("Metadata (JSON)"),e[2]=a,e[3]=g):g=e[3];let k;e[4]!==s||e[5]!==g?(k=r(W,{className:"text-xs",htmlFor:s,children:g}),e[4]=s,e[5]=g,e[6]=k):k=e[6];const L=`${v}-format`,K=o===void 0;let V;e[7]!==o||e[8]!==i?(V=()=>{o!==void 0&&i(o)},e[7]=o,e[8]=i,e[9]=V):V=e[9];let p;e[10]!==a?(p=a("Format JSON"),e[10]=a,e[11]=p):p=e[11];let m;e[12]!==L||e[13]!==K||e[14]!==V||e[15]!==p?(m=r(P,{"data-testid":L,disabled:K,onClick:V,size:"sm",variant:"outline",children:p}),e[12]=L,e[13]=K,e[14]=V,e[15]=p,e[16]=m):m=e[16];let h;e[17]!==k||e[18]!==m?(h=w("div",{className:"flex items-center justify-between gap-2",children:[k,m]}),e[17]=k,e[18]=m,e[19]=h):h=e[19];const x=!d;let N;e[20]!==i?(N=F=>{i(F.target.value)},e[20]=i,e[21]=N):N=e[21];let C;e[22]!==s||e[23]!==x||e[24]!==N||e[25]!==v||e[26]!==t?(C=r(ke,{"aria-invalid":x,className:"min-h-[4rem] font-mono text-xs","data-testid":v,id:s,onChange:N,value:t}),e[22]=s,e[23]=x,e[24]=N,e[25]=v,e[26]=t,e[27]=C):C=e[27];let y;e[28]!==c||e[29]!==a||e[30]!==d?(y=!d&&r("p",{className:"text-xs text-destructive","data-testid":c,children:a("Metadata must be valid JSON.")}),e[28]=c,e[29]=a,e[30]=d,e[31]=y):y=e[31];let S;return e[32]!==C||e[33]!==y||e[34]!==h?(S=w("div",{className:"mb-3 grid gap-1",children:[h,C,y]}),e[32]=C,e[33]=y,e[34]=h,e[35]=S):S=e[35],S},De={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},Je=(l,e)=>{switch(e.type){case"setField":return{...l,[e.field]:e.value};case"submitFailed":return{...l,busy:!1,error:e.error};case"submitStart":return{...l,busy:!0,error:null};default:return l}},Pe=l=>{const e=te(73),{namespace:s,onCancel:c,onCreated:i}=l,v=ee(),d=G(),[t,a]=le(Je,De);let f;e[0]!==t.metadata?(f=xe(t.metadata),e[0]=t.metadata,e[1]=f):f=e[1];const o=f;let g;e[2]!==t.ttl?(g=Ce(t.ttl),e[2]=t.ttl,e[3]=g):g=e[3];const k=g;let L;e[4]!==o||e[5]!==t.busy||e[6]!==t.name||e[7]!==k?(L=t.name.trim()!==""&&o&&k&&!t.busy,e[4]=o,e[5]=t.busy,e[6]=t.name,e[7]=k,e[8]=L):L=e[8];const K=L;let V;e[9]!==K||e[10]!==v||e[11]!==s||e[12]!==i||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(V=()=>{K&&(a({type:"submitStart"}),H((async()=>{try{await v.putKvValue(Se({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,s)),i()}catch($){a({error:R($),type:"submitFailed"})}})()))},e[9]=K,e[10]=v,e[11]=s,e[12]=i,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=V):V=e[17];const p=V;let m;e[18]!==d?(m=d("Key name"),e[18]=d,e[19]=m):m=e[19];let h;e[20]!==m?(h=r(W,{className:"text-xs",htmlFor:"kv-create-name",children:m}),e[20]=m,e[21]=h):h=e[21];let x;e[22]===Symbol.for("react.memo_cache_sentinel")?(x=$=>{a({field:"name",type:"setField",value:$.target.value})},e[22]=x):x=e[22];let N;e[23]!==d?(N=d("Key name"),e[23]=d,e[24]=N):N=e[24];let C;e[25]!==t.name||e[26]!==N?(C=r(re,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:x,placeholder:N,value:t.name}),e[25]=t.name,e[26]=N,e[27]=C):C=e[27];let y;e[28]!==h||e[29]!==C?(y=w("div",{className:"grid gap-1",children:[h,C]}),e[28]=h,e[29]=C,e[30]=y):y=e[30];let S;e[31]!==d?(S=d("Value"),e[31]=d,e[32]=S):S=e[32];let F;e[33]!==S?(F=r(W,{className:"text-xs",htmlFor:"kv-create-value",children:S}),e[33]=S,e[34]=F):F=e[34];let O;e[35]===Symbol.for("react.memo_cache_sentinel")?(O=$=>{a({field:"value",type:"setField",value:$.target.value})},e[35]=O):O=e[35];let I;e[36]!==t.value?(I=r(ke,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:O,value:t.value}),e[36]=t.value,e[37]=I):I=e[37];let D;e[38]!==F||e[39]!==I?(D=w("div",{className:"grid gap-1",children:[F,I]}),e[38]=F,e[39]=I,e[40]=D):D=e[40];const A=!k;let _;e[41]===Symbol.for("react.memo_cache_sentinel")?(_=$=>{a({field:"ttl",type:"setField",value:$})},e[41]=_):_=e[41];let n;e[42]!==A?(n=r(we,{id:"kv-create-ttl",invalid:A,onChange:_,testId:"kv-create-ttl"}),e[42]=A,e[43]=n):n=e[43];let u;e[44]===Symbol.for("react.memo_cache_sentinel")?(u=$=>{a({field:"metadata",type:"setField",value:$})},e[44]=u):u=e[44];let T;e[45]!==o||e[46]!==t.metadata?(T=r(Te,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:u,testId:"kv-create-metadata",valid:o,value:t.metadata}),e[45]=o,e[46]=t.metadata,e[47]=T):T=e[47];const M=!K;let E;e[48]!==t.busy||e[49]!==d?(E=t.busy?d("Creating…"):d("Create key"),e[48]=t.busy,e[49]=d,e[50]=E):E=e[50];let B;e[51]!==p||e[52]!==M||e[53]!==E?(B=r(P,{"data-testid":"kv-create-submit",disabled:M,onClick:p,children:E}),e[51]=p,e[52]=M,e[53]=E,e[54]=B):B=e[54];const b=t.busy;let J;e[55]!==d?(J=d("Cancel"),e[55]=d,e[56]=J):J=e[56];let j;e[57]!==c||e[58]!==t.busy||e[59]!==J?(j=r(P,{"data-testid":"kv-create-cancel",disabled:b,onClick:c,variant:"outline",children:J}),e[57]=c,e[58]=t.busy,e[59]=J,e[60]=j):j=e[60];let z;e[61]!==B||e[62]!==j?(z=w("div",{className:"flex flex-wrap gap-2",children:[B,j]}),e[61]=B,e[62]=j,e[63]=z):z=e[63];let U;e[64]!==t.error?(U=t.error!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=U):U=e[65];let Y;return e[66]!==y||e[67]!==D||e[68]!==n||e[69]!==T||e[70]!==z||e[71]!==U?(Y=w("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[y,D,n,T,z,U]}),e[66]=y,e[67]=D,e[68]=n,e[69]=T,e[70]=z,e[71]=U,e[72]=Y):Y=e[72],Y},$e={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},je=(l,e)=>{switch(e.type){case"deleteStart":return{...l,busy:"deleting",writeError:null};case"editMetadata":return{...l,editedMetadata:e.value};case"editTtl":return{...l,editedTtl:e.value};case"editValue":return{...l,editedValue:e.value};case"loaded":return{...l,editedMetadata:e.metadata===null||e.metadata===void 0?"":JSON.stringify(e.metadata,null,2),editedValue:e.value??"",loading:!1,value:e.value};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"saveOk":return{...l,busy:"",value:l.editedValue};case"saveStart":return{...l,busy:"saving",writeError:null};case"writeFailed":return{...l,busy:"",writeError:e.error};default:return l}},He=l=>{const e=te(67),{expiration:s,keyName:c,namespace:i,onDeleted:v}=l,d=ee(),t=G(),[a,f]=le(je,$e);let o,g;e[0]!==d||e[1]!==c||e[2]!==i?(o=()=>{const b={cancelled:!1};return H((async()=>{try{const J=await d.getKvValue({key:c,namespace:i});b.cancelled||f({metadata:J.metadata,type:"loaded",value:J.value})}catch(J){const j=J;b.cancelled||f({error:R(j),type:"loadFailed"})}})()),()=>{b.cancelled=!0}},g=[d,i,c],e[0]=d,e[1]=c,e[2]=i,e[3]=o,e[4]=g):(o=e[3],g=e[4]),ae(o,g);let k;e[5]===Symbol.for("react.memo_cache_sentinel")?(k=b=>{f({type:"editValue",value:b.target.value})},e[5]=k):k=e[5];const L=k;let K;e[6]===Symbol.for("react.memo_cache_sentinel")?(K=b=>{f({type:"editMetadata",value:b})},e[6]=K):K=e[6];const V=K;let p;e[7]!==a.editedValue?(p=ge(a.editedValue),e[7]=a.editedValue,e[8]=p):p=e[8];const m=p;let h;e[9]!==a.editedMetadata?(h=xe(a.editedMetadata),e[9]=a.editedMetadata,e[10]=h):h=e[10];const x=h;let N;e[11]!==a.editedTtl?(N=Ce(a.editedTtl),e[11]=a.editedTtl,e[12]=N):N=e[12];const C=N;let y;e[13]!==m?(y=()=>{m!==void 0&&f({type:"editValue",value:m})},e[13]=m,e[14]=y):y=e[14];const S=y;let F;e[15]!==d||e[16]!==s||e[17]!==c||e[18]!==x||e[19]!==i||e[20]!==a.editedMetadata||e[21]!==a.editedTtl||e[22]!==a.editedValue||e[23]!==t?(F=()=>{if(!x){f({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}f({type:"saveStart"}),H((async()=>{try{await d.putKvValue(Se({metadata:a.editedMetadata,ttl:a.editedTtl,value:a.editedValue},c,i,s)),f({type:"saveOk"})}catch(b){f({error:R(b),type:"writeFailed"})}})())},e[15]=d,e[16]=s,e[17]=c,e[18]=x,e[19]=i,e[20]=a.editedMetadata,e[21]=a.editedTtl,e[22]=a.editedValue,e[23]=t,e[24]=F):F=e[24];const O=F;let I;e[25]!==d||e[26]!==c||e[27]!==i||e[28]!==v?(I=()=>{f({type:"deleteStart"}),H((async()=>{try{await d.deleteKvKey({key:c,namespace:i}),v(c)}catch(b){f({error:R(b),type:"writeFailed"})}})())},e[25]=d,e[26]=c,e[27]=i,e[28]=v,e[29]=I):I=e[29];const D=I;let A;e[30]!==c?(A=()=>{se(c)},e[30]=c,e[31]=A):A=e[31];let _;e[32]!==t?(_=t("Copy key"),e[32]=t,e[33]=_):_=e[33];let n;e[34]!==A||e[35]!==_?(n=r("div",{className:"mb-2 flex justify-end",children:r(P,{"data-testid":"kv-copy-key-btn",onClick:A,size:"sm",variant:"outline",children:_})}),e[34]=A,e[35]=_,e[36]=n):n=e[36];let u;e[37]!==a.loadError?(u=a.loadError!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:a.loadError}),e[37]=a.loadError,e[38]=u):u=e[38];let T;e[39]!==a.loading||e[40]!==t?(T=a.loading&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading…")}),e[39]=a.loading,e[40]=t,e[41]=T):T=e[41];let M;e[42]!==m||e[43]!==x||e[44]!==D||e[45]!==S||e[46]!==O||e[47]!==a.busy||e[48]!==a.editedMetadata||e[49]!==a.editedValue||e[50]!==a.loading||e[51]!==a.value||e[52]!==a.writeError||e[53]!==t||e[54]!==C?(M=!a.loading&&a.value!==null&&w(be,{children:[w("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[r(W,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),m!==void 0&&r(Le,{variant:"secondary",children:t("JSON")}),r("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:Fe(Ae(a.editedValue))})]}),r("textarea",{"aria-label":t("KV value"),className:"mb-2 min-h-[8rem] w-full rounded border border-border bg-muted/30 p-2 font-mono text-xs","data-testid":"kv-value-editor",id:"kv-value-editor",onChange:L,value:a.editedValue}),w("div",{className:"mb-3 flex flex-wrap gap-2",children:[r(P,{"data-testid":"kv-format-btn",disabled:m===void 0,onClick:S,size:"sm",variant:"outline",children:t("Format JSON")}),r(P,{"data-testid":"kv-copy-value-btn",onClick:()=>{se(a.editedValue)},size:"sm",variant:"outline",children:t("Copy value")})]}),r(we,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:b=>{f({type:"editTtl",value:b})},testId:"kv-ttl-input"}),r(Te,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:V,testId:"kv-metadata-editor",valid:x,value:a.editedMetadata}),w("div",{className:"flex flex-wrap gap-2",children:[r(P,{"data-testid":"kv-save-btn",disabled:a.busy!==""||!x||!C,onClick:O,children:a.busy==="saving"?t("Saving…"):t("Save")}),r(P,{"data-testid":"kv-delete-btn",disabled:a.busy!=="",onClick:D,variant:"destructive",children:a.busy==="deleting"?t("Deleting…"):t("Delete")})]}),a.writeError!==null&&r("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:a.writeError})]}),e[42]=m,e[43]=x,e[44]=D,e[45]=S,e[46]=O,e[47]=a.busy,e[48]=a.editedMetadata,e[49]=a.editedValue,e[50]=a.loading,e[51]=a.value,e[52]=a.writeError,e[53]=t,e[54]=C,e[55]=M):M=e[55];let E;e[56]!==a.loadError||e[57]!==a.loading||e[58]!==a.value||e[59]!==t?(E=!a.loading&&a.value===null&&a.loadError===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=a.loadError,e[57]=a.loading,e[58]=a.value,e[59]=t,e[60]=E):E=e[60];let B;return e[61]!==n||e[62]!==u||e[63]!==T||e[64]!==M||e[65]!==E?(B=w("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[n,u,T,M,E]}),e[61]=n,e[62]=u,e[63]=T,e[64]=M,e[65]=E,e[66]=B):B=e[66],B},me=100,Re={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},ze=(l,e)=>{switch(e.type){case"appendPage":return e.generation!==l.reloadNonce?l:{...l,cursor:e.cursor,keys:[...l.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...l,appliedPrefix:l.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,reloadNonce:l.reloadNonce+1,selectedKey:null};case"bulkDeleted":{const s=new Set(e.deleted);return{...l,bulk:l.bulk.filter(c=>!s.has(c)),bulkBusy:!1,bulkError:e.error,keys:l.keys===null?null:l.keys.filter(c=>!s.has(c.name)),selectedKey:l.selectedKey!==null&&s.has(l.selectedKey)?null:l.selectedKey}}case"bulkDeleteStart":return{...l,bulkBusy:!0,bulkError:null};case"firstPage":return{...l,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...l,bulk:l.bulk.filter(s=>s!==e.name),keys:l.keys===null?null:l.keys.filter(s=>s.name!==e.name),selectedKey:null};case"loadFailed":return e.generation!==void 0&&e.generation!==l.reloadNonce?l:{...l,loadError:e.error,loading:!1};case"loadStart":return{...l,loadError:null,loading:!0};case"prefixInput":return{...l,prefixInput:e.value};case"reload":return{...l,bulk:[],bulkError:null,reloadNonce:l.reloadNonce+1,selectedKey:null};case"selectKey":return{...l,selectedKey:e.name};case"toggleAllBulk":return{...l,bulk:e.names};case"toggleBulk":return{...l,bulk:l.bulk.includes(e.name)?l.bulk.filter(s=>s!==e.name):[...l.bulk,e.name]};default:return l}},Ue=({namespace:l})=>{const e=ee(),s=G(),[c,i]=le(ze,Re),{appliedPrefix:v,bulk:d,bulkBusy:t,bulkError:a,cursor:f,keys:o,listComplete:g,loadError:k,loading:L,prefixInput:K,reloadNonce:V,selectedKey:p}=c,[m,h]=Z(!1);ae(()=>{const n={cancelled:!1};return H((async()=>{i({type:"loadStart"});try{const u=await e.listKvKeys({limit:me,namespace:l,prefix:v===""?void 0:v});n.cancelled||i({cursor:u.cursor??null,keys:u.keys,listComplete:u.listComplete,type:"firstPage"})}catch(u){n.cancelled||i({error:R(u),type:"loadFailed"})}})()),()=>{n.cancelled=!0}},[e,l,v,V]);const x=n=>{i({type:"prefixInput",value:n.target.value})},N=()=>{i({type:"applyFilter"})},C=n=>{i({name:n.currentTarget.dataset.key??null,type:"selectKey"})},y=()=>{if(f===null)return;i({type:"loadStart"});const n=V;H((async()=>{try{const u=await e.listKvKeys({cursor:f,limit:me,namespace:l,prefix:v===""?void 0:v});i({cursor:u.cursor??null,generation:n,keys:u.keys,listComplete:u.listComplete,type:"appendPage"})}catch(u){i({error:R(u),generation:n,type:"loadFailed"})}})())},S=n=>{i({name:n,type:"keyDeleted"})},F=n=>{i({name:n,type:"toggleBulk"})},O=n=>{i({names:n&&o!==null?o.map(u=>u.name):[],type:"toggleAllBulk"})},I=()=>{if(d.length===0)return;const n=[...d];i({type:"bulkDeleteStart"}),H((async()=>{const u=await Promise.allSettled(n.map(E=>e.deleteKvKey({key:E,namespace:l}))),T=n.filter((E,B)=>u[B]?.status==="fulfilled"),M=n.length-T.length;i({deleted:T,error:M>0?s("Failed to delete {count} keys.",{count:M}):null,type:"bulkDeleted"})})())},D=()=>{h(!1),i({type:"reload"})},A=o!==null&&o.length>0&&d.length===o.length,_=new Set(d);return w(be,{children:[w("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[w("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[r(re,{"aria-label":s("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:x,placeholder:s("Filter by prefix…"),value:K}),r(P,{"data-testid":"kv-filter-btn",disabled:L,onClick:N,children:s("Filter")}),r(P,{"data-testid":"kv-new-key-btn",onClick:()=>{h(n=>!n)},variant:"outline",children:s("New key")}),d.length>0&&r(P,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:I,variant:"destructive",children:t?s("Deleting…"):s("Delete {count}",{count:d.length})})]}),a!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:a}),k!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:k}),o!==null&&o.length===0&&!L&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:s("No keys.")}),o!==null&&o.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(fe,{className:"px-0",children:w(pe,{"data-testid":"kv-key-table",children:[r(he,{children:w(X,{children:[r(q,{className:"w-10",children:r(ne,{"aria-label":s("Select all"),checked:A,"data-testid":"kv-select-all",onCheckedChange:O})}),r(q,{children:s("Key")}),r(q,{children:s("Expiration")})]})}),r(ye,{children:o.map(n=>w(X,{className:n.name===p?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":n.name,"data-testid":`kv-key-row-${n.name}`,onClick:C,children:[r(Q,{onClick:u=>{u.stopPropagation()},children:r(ne,{"aria-label":s("Select {name}",{name:n.name}),checked:_.has(n.name),"data-testid":`kv-select-${n.name}`,onCheckedChange:()=>{F(n.name)}})}),r(Q,{className:"font-mono text-xs",children:n.name}),r(Q,{className:"tabular-nums text-xs",children:Oe(n.expiration)})]},n.name))})]})})}),!g&&f!==null&&r("div",{className:"mt-2",children:r(P,{"data-testid":"kv-load-more",disabled:L,onClick:y,variant:"outline",children:s(L?"Loading…":"Load more")})})]}),r(ie,{onOpenChange:n=>{n||h(!1)},open:m,children:w(de,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[r(oe,{children:r(ce,{children:s("New key")})}),r(Pe,{namespace:l,onCancel:()=>{h(!1)},onCreated:D})]})}),r(ie,{onOpenChange:n=>{n||i({name:null,type:"selectKey"})},open:p!==null,children:w(de,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[r(oe,{children:r(ce,{className:"truncate font-mono text-xs",children:p})}),p!==null&&r(He,{expiration:o?.find(n=>n.name===p)?.expiration,keyName:p,namespace:l,onDeleted:S},`${l}:${p}`)]})})]})},ut=({loadNamespaces:l}={})=>{const e=ee(),s=G(),[c,i]=Z(null),[v,d]=Z(null),[t,a]=Z(null);ae(()=>{const o={cancelled:!1};return H((async()=>{try{const g=await(l??(()=>e.listKvNamespaces()))();o.cancelled||(i(g),d(null),a(k=>k??g[0]?.binding??null))}catch(g){o.cancelled||(i(null),d(R(g)))}})()),()=>{o.cancelled=!0}},[e,l]);const f=o=>{a(o.currentTarget.dataset.ns??null)};return w("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[v!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:v}),c!==null&&c.length===0&&r(Ee,{description:s("Add a kv_namespaces binding to wrangler.jsonc — it appears here automatically, no wiring needed."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:s("No KV namespaces.")}),c!==null&&c.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(fe,{className:"px-0",children:w(pe,{"data-testid":"kv-namespace-table",children:[r(he,{children:r(X,{children:r(q,{children:s("Namespace")})})}),r(ye,{children:c.map(o=>r(X,{className:o.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":o.binding,"data-testid":`kv-ns-row-${o.binding}`,onClick:f,children:r(Q,{className:"font-mono text-xs",children:o.binding})},o.binding))})]})})}),t!==null&&r(Ue,{namespace:t},t)]})};export{ut as KvBrowser};
|
|
1
|
+
import{useLunora as ee}from"@lunora/react";import{useState as Z,useReducer as le,useEffect as ae}from"react";import{C as ve,a as fe}from"../packem_shared/card-By2O8ULa.mjs";import{E as Ee}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as pe,a as he,b as X,c as q,d as ye,e as Q}from"../packem_shared/table-D0SBiDu-.mjs";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{f as H,b as R,m as Fe,g as se}from"../packem_shared/internal-Df43vQI0.mjs";import{B as P}from"../packem_shared/button-q0UYSmrn.mjs";import{C as ne}from"../packem_shared/checkbox-CnS9cyCz.mjs";import{I as re}from"../packem_shared/input-CXhxesPC.mjs";import{b as ie,c as de,d as oe,e as ce}from"../packem_shared/studio-fK2DTLde.mjs";import{c as te}from"react/compiler-runtime";import{L as W}from"../packem_shared/label-DKFzyHq6.mjs";import{T as ke}from"../packem_shared/textarea--40GKAyz.mjs";import{c as Ke,S as Ve,a as Ie,b as _e,d as Me}from"../packem_shared/select-DPyS18Vy.mjs";import{jsx as r,jsxs as w,Fragment as be}from"react/jsx-runtime";import{B as Le}from"../packem_shared/badge-r_5B4LHP.mjs";const Be=l=>{const e=l.trim();if(e==="")return;const s=Number(e);return Number.isFinite(s)&&s>0?Math.floor(s):void 0},Oe=l=>l===void 0?"—":new Date(l*1e3).toISOString(),Ae=l=>new TextEncoder().encode(l).length,ge=l=>{if(l.trim()!=="")try{return JSON.stringify(JSON.parse(l),void 0,2)}catch{return}},xe=l=>{if(l.trim()==="")return!0;try{return JSON.parse(l),!0}catch{return!1}},Ne=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],ue=(l,e)=>{const s=l.trim();if(s==="")return"";const c=Number(s),i=Ne.find(v=>v.key===e)?.seconds??1;return Number.isFinite(c)&&c>0?String(Math.round(c*i)):s},Ce=l=>{const e=l.trim();if(e==="")return!0;const s=Number(e);return Number.isInteger(s)&&s>=60},Se=(l,e,s,c)=>{const i=Be(l.ttl);return{expiration:i===void 0?c:void 0,expirationTtl:i,key:e,metadata:l.metadata.trim()===""?void 0:JSON.parse(l.metadata),namespace:s,value:l.value}},we=l=>{const e=te(60),{helper:s,id:c,invalid:i,onChange:v,testId:d}=l,t=G(),[a,f]=Z(""),[o,g]=Z("seconds");let k;e[0]!==v||e[1]!==o?(k=b=>{f(b.target.value),v(ue(b.target.value,o))},e[0]=v,e[1]=o,e[2]=k):k=e[2];const L=k;let K;e[3]!==a||e[4]!==v?(K=b=>{b!==null&&(g(b),v(ue(a,b)))},e[3]=a,e[4]=v,e[5]=K):K=e[5];const V=K;let p;e[6]!==t?(p=t("days"),e[6]=t,e[7]=p):p=e[7];let m;e[8]!==t?(m=t("hours"),e[8]=t,e[9]=m):m=e[9];let h;e[10]!==t?(h=t("minutes"),e[10]=t,e[11]=h):h=e[11];let x;e[12]!==t?(x=t("seconds"),e[12]=t,e[13]=x):x=e[13];let N;e[14]!==p||e[15]!==m||e[16]!==h||e[17]!==x?(N={days:p,hours:m,minutes:h,seconds:x},e[14]=p,e[15]=m,e[16]=h,e[17]=x,e[18]=N):N=e[18];const C=N;let y;e[19]!==t?(y=t("Expires after"),e[19]=t,e[20]=y):y=e[20];let S;e[21]!==c||e[22]!==y?(S=r(W,{className:"text-xs",htmlFor:c,children:y}),e[21]=c,e[22]=y,e[23]=S):S=e[23];let F;e[24]!==t?(F=t("No expiration"),e[24]=t,e[25]=F):F=e[25];let O;e[26]!==a||e[27]!==c||e[28]!==i||e[29]!==L||e[30]!==F||e[31]!==d?(O=r(re,{"aria-invalid":i,className:"flex-1","data-testid":d,id:c,inputMode:"numeric",onChange:L,placeholder:F,value:a}),e[26]=a,e[27]=c,e[28]=i,e[29]=L,e[30]=F,e[31]=d,e[32]=O):O=e[32];let I;e[33]!==t?(I=t("TTL unit"),e[33]=t,e[34]=I):I=e[34];const D=`${d}-unit`;let A;e[35]===Symbol.for("react.memo_cache_sentinel")?(A=r(Ve,{}),e[35]=A):A=e[35];let _;e[36]!==I||e[37]!==D?(_=r(Ie,{"aria-label":I,className:"w-[7.5rem]","data-testid":D,children:A}),e[36]=I,e[37]=D,e[38]=_):_=e[38];let n;e[39]!==C?(n=Ne.map(b=>r(Ke,{value:b.key,children:C[b.key]},b.key)),e[39]=C,e[40]=n):n=e[40];let u;e[41]!==n?(u=r(_e,{children:n}),e[41]=n,e[42]=u):u=e[42];let T;e[43]!==V||e[44]!==_||e[45]!==u||e[46]!==o?(T=w(Me,{onValueChange:V,value:o,children:[_,u]}),e[43]=V,e[44]=_,e[45]=u,e[46]=o,e[47]=T):T=e[47];let M;e[48]!==O||e[49]!==T?(M=w("div",{className:"flex gap-2",children:[O,T]}),e[48]=O,e[49]=T,e[50]=M):M=e[50];let E;e[51]!==s||e[52]!==i||e[53]!==t||e[54]!==d?(E=i?r("p",{className:"text-xs text-destructive","data-testid":`${d}-invalid`,children:t("TTL must be at least 60 seconds.")}):s!==void 0&&r("p",{className:"text-xs text-muted-foreground",children:s}),e[51]=s,e[52]=i,e[53]=t,e[54]=d,e[55]=E):E=e[55];let B;return e[56]!==M||e[57]!==E||e[58]!==S?(B=w("div",{className:"mb-3 grid gap-1",children:[S,M,E]}),e[56]=M,e[57]=E,e[58]=S,e[59]=B):B=e[59],B},Te=l=>{const e=te(36),{id:s,invalidTestId:c,onChange:i,testId:v,valid:d,value:t}=l,a=G();let f;e[0]!==t?(f=ge(t),e[0]=t,e[1]=f):f=e[1];const o=f;let g;e[2]!==a?(g=a("Metadata (JSON)"),e[2]=a,e[3]=g):g=e[3];let k;e[4]!==s||e[5]!==g?(k=r(W,{className:"text-xs",htmlFor:s,children:g}),e[4]=s,e[5]=g,e[6]=k):k=e[6];const L=`${v}-format`,K=o===void 0;let V;e[7]!==o||e[8]!==i?(V=()=>{o!==void 0&&i(o)},e[7]=o,e[8]=i,e[9]=V):V=e[9];let p;e[10]!==a?(p=a("Format JSON"),e[10]=a,e[11]=p):p=e[11];let m;e[12]!==L||e[13]!==K||e[14]!==V||e[15]!==p?(m=r(P,{"data-testid":L,disabled:K,onClick:V,size:"sm",variant:"outline",children:p}),e[12]=L,e[13]=K,e[14]=V,e[15]=p,e[16]=m):m=e[16];let h;e[17]!==k||e[18]!==m?(h=w("div",{className:"flex items-center justify-between gap-2",children:[k,m]}),e[17]=k,e[18]=m,e[19]=h):h=e[19];const x=!d;let N;e[20]!==i?(N=F=>{i(F.target.value)},e[20]=i,e[21]=N):N=e[21];let C;e[22]!==s||e[23]!==x||e[24]!==N||e[25]!==v||e[26]!==t?(C=r(ke,{"aria-invalid":x,className:"min-h-[4rem] font-mono text-xs","data-testid":v,id:s,onChange:N,value:t}),e[22]=s,e[23]=x,e[24]=N,e[25]=v,e[26]=t,e[27]=C):C=e[27];let y;e[28]!==c||e[29]!==a||e[30]!==d?(y=!d&&r("p",{className:"text-xs text-destructive","data-testid":c,children:a("Metadata must be valid JSON.")}),e[28]=c,e[29]=a,e[30]=d,e[31]=y):y=e[31];let S;return e[32]!==C||e[33]!==y||e[34]!==h?(S=w("div",{className:"mb-3 grid gap-1",children:[h,C,y]}),e[32]=C,e[33]=y,e[34]=h,e[35]=S):S=e[35],S},De={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},Je=(l,e)=>{switch(e.type){case"setField":return{...l,[e.field]:e.value};case"submitFailed":return{...l,busy:!1,error:e.error};case"submitStart":return{...l,busy:!0,error:null};default:return l}},Pe=l=>{const e=te(73),{namespace:s,onCancel:c,onCreated:i}=l,v=ee(),d=G(),[t,a]=le(Je,De);let f;e[0]!==t.metadata?(f=xe(t.metadata),e[0]=t.metadata,e[1]=f):f=e[1];const o=f;let g;e[2]!==t.ttl?(g=Ce(t.ttl),e[2]=t.ttl,e[3]=g):g=e[3];const k=g;let L;e[4]!==o||e[5]!==t.busy||e[6]!==t.name||e[7]!==k?(L=t.name.trim()!==""&&o&&k&&!t.busy,e[4]=o,e[5]=t.busy,e[6]=t.name,e[7]=k,e[8]=L):L=e[8];const K=L;let V;e[9]!==K||e[10]!==v||e[11]!==s||e[12]!==i||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(V=()=>{K&&(a({type:"submitStart"}),H((async()=>{try{await v.putKvValue(Se({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,s)),i()}catch($){a({error:R($),type:"submitFailed"})}})()))},e[9]=K,e[10]=v,e[11]=s,e[12]=i,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=V):V=e[17];const p=V;let m;e[18]!==d?(m=d("Key name"),e[18]=d,e[19]=m):m=e[19];let h;e[20]!==m?(h=r(W,{className:"text-xs",htmlFor:"kv-create-name",children:m}),e[20]=m,e[21]=h):h=e[21];let x;e[22]===Symbol.for("react.memo_cache_sentinel")?(x=$=>{a({field:"name",type:"setField",value:$.target.value})},e[22]=x):x=e[22];let N;e[23]!==d?(N=d("Key name"),e[23]=d,e[24]=N):N=e[24];let C;e[25]!==t.name||e[26]!==N?(C=r(re,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:x,placeholder:N,value:t.name}),e[25]=t.name,e[26]=N,e[27]=C):C=e[27];let y;e[28]!==h||e[29]!==C?(y=w("div",{className:"grid gap-1",children:[h,C]}),e[28]=h,e[29]=C,e[30]=y):y=e[30];let S;e[31]!==d?(S=d("Value"),e[31]=d,e[32]=S):S=e[32];let F;e[33]!==S?(F=r(W,{className:"text-xs",htmlFor:"kv-create-value",children:S}),e[33]=S,e[34]=F):F=e[34];let O;e[35]===Symbol.for("react.memo_cache_sentinel")?(O=$=>{a({field:"value",type:"setField",value:$.target.value})},e[35]=O):O=e[35];let I;e[36]!==t.value?(I=r(ke,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:O,value:t.value}),e[36]=t.value,e[37]=I):I=e[37];let D;e[38]!==F||e[39]!==I?(D=w("div",{className:"grid gap-1",children:[F,I]}),e[38]=F,e[39]=I,e[40]=D):D=e[40];const A=!k;let _;e[41]===Symbol.for("react.memo_cache_sentinel")?(_=$=>{a({field:"ttl",type:"setField",value:$})},e[41]=_):_=e[41];let n;e[42]!==A?(n=r(we,{id:"kv-create-ttl",invalid:A,onChange:_,testId:"kv-create-ttl"}),e[42]=A,e[43]=n):n=e[43];let u;e[44]===Symbol.for("react.memo_cache_sentinel")?(u=$=>{a({field:"metadata",type:"setField",value:$})},e[44]=u):u=e[44];let T;e[45]!==o||e[46]!==t.metadata?(T=r(Te,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:u,testId:"kv-create-metadata",valid:o,value:t.metadata}),e[45]=o,e[46]=t.metadata,e[47]=T):T=e[47];const M=!K;let E;e[48]!==t.busy||e[49]!==d?(E=t.busy?d("Creating…"):d("Create key"),e[48]=t.busy,e[49]=d,e[50]=E):E=e[50];let B;e[51]!==p||e[52]!==M||e[53]!==E?(B=r(P,{"data-testid":"kv-create-submit",disabled:M,onClick:p,children:E}),e[51]=p,e[52]=M,e[53]=E,e[54]=B):B=e[54];const b=t.busy;let J;e[55]!==d?(J=d("Cancel"),e[55]=d,e[56]=J):J=e[56];let j;e[57]!==c||e[58]!==t.busy||e[59]!==J?(j=r(P,{"data-testid":"kv-create-cancel",disabled:b,onClick:c,variant:"outline",children:J}),e[57]=c,e[58]=t.busy,e[59]=J,e[60]=j):j=e[60];let z;e[61]!==B||e[62]!==j?(z=w("div",{className:"flex flex-wrap gap-2",children:[B,j]}),e[61]=B,e[62]=j,e[63]=z):z=e[63];let U;e[64]!==t.error?(U=t.error!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=U):U=e[65];let Y;return e[66]!==y||e[67]!==D||e[68]!==n||e[69]!==T||e[70]!==z||e[71]!==U?(Y=w("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[y,D,n,T,z,U]}),e[66]=y,e[67]=D,e[68]=n,e[69]=T,e[70]=z,e[71]=U,e[72]=Y):Y=e[72],Y},$e={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},je=(l,e)=>{switch(e.type){case"deleteStart":return{...l,busy:"deleting",writeError:null};case"editMetadata":return{...l,editedMetadata:e.value};case"editTtl":return{...l,editedTtl:e.value};case"editValue":return{...l,editedValue:e.value};case"loaded":return{...l,editedMetadata:e.metadata===null||e.metadata===void 0?"":JSON.stringify(e.metadata,null,2),editedValue:e.value??"",loading:!1,value:e.value};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"saveOk":return{...l,busy:"",value:l.editedValue};case"saveStart":return{...l,busy:"saving",writeError:null};case"writeFailed":return{...l,busy:"",writeError:e.error};default:return l}},He=l=>{const e=te(67),{expiration:s,keyName:c,namespace:i,onDeleted:v}=l,d=ee(),t=G(),[a,f]=le(je,$e);let o,g;e[0]!==d||e[1]!==c||e[2]!==i?(o=()=>{const b={cancelled:!1};return H((async()=>{try{const J=await d.getKvValue({key:c,namespace:i});b.cancelled||f({metadata:J.metadata,type:"loaded",value:J.value})}catch(J){const j=J;b.cancelled||f({error:R(j),type:"loadFailed"})}})()),()=>{b.cancelled=!0}},g=[d,i,c],e[0]=d,e[1]=c,e[2]=i,e[3]=o,e[4]=g):(o=e[3],g=e[4]),ae(o,g);let k;e[5]===Symbol.for("react.memo_cache_sentinel")?(k=b=>{f({type:"editValue",value:b.target.value})},e[5]=k):k=e[5];const L=k;let K;e[6]===Symbol.for("react.memo_cache_sentinel")?(K=b=>{f({type:"editMetadata",value:b})},e[6]=K):K=e[6];const V=K;let p;e[7]!==a.editedValue?(p=ge(a.editedValue),e[7]=a.editedValue,e[8]=p):p=e[8];const m=p;let h;e[9]!==a.editedMetadata?(h=xe(a.editedMetadata),e[9]=a.editedMetadata,e[10]=h):h=e[10];const x=h;let N;e[11]!==a.editedTtl?(N=Ce(a.editedTtl),e[11]=a.editedTtl,e[12]=N):N=e[12];const C=N;let y;e[13]!==m?(y=()=>{m!==void 0&&f({type:"editValue",value:m})},e[13]=m,e[14]=y):y=e[14];const S=y;let F;e[15]!==d||e[16]!==s||e[17]!==c||e[18]!==x||e[19]!==i||e[20]!==a.editedMetadata||e[21]!==a.editedTtl||e[22]!==a.editedValue||e[23]!==t?(F=()=>{if(!x){f({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}f({type:"saveStart"}),H((async()=>{try{await d.putKvValue(Se({metadata:a.editedMetadata,ttl:a.editedTtl,value:a.editedValue},c,i,s)),f({type:"saveOk"})}catch(b){f({error:R(b),type:"writeFailed"})}})())},e[15]=d,e[16]=s,e[17]=c,e[18]=x,e[19]=i,e[20]=a.editedMetadata,e[21]=a.editedTtl,e[22]=a.editedValue,e[23]=t,e[24]=F):F=e[24];const O=F;let I;e[25]!==d||e[26]!==c||e[27]!==i||e[28]!==v?(I=()=>{f({type:"deleteStart"}),H((async()=>{try{await d.deleteKvKey({key:c,namespace:i}),v(c)}catch(b){f({error:R(b),type:"writeFailed"})}})())},e[25]=d,e[26]=c,e[27]=i,e[28]=v,e[29]=I):I=e[29];const D=I;let A;e[30]!==c?(A=()=>{se(c)},e[30]=c,e[31]=A):A=e[31];let _;e[32]!==t?(_=t("Copy key"),e[32]=t,e[33]=_):_=e[33];let n;e[34]!==A||e[35]!==_?(n=r("div",{className:"mb-2 flex justify-end",children:r(P,{"data-testid":"kv-copy-key-btn",onClick:A,size:"sm",variant:"outline",children:_})}),e[34]=A,e[35]=_,e[36]=n):n=e[36];let u;e[37]!==a.loadError?(u=a.loadError!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:a.loadError}),e[37]=a.loadError,e[38]=u):u=e[38];let T;e[39]!==a.loading||e[40]!==t?(T=a.loading&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading…")}),e[39]=a.loading,e[40]=t,e[41]=T):T=e[41];let M;e[42]!==m||e[43]!==x||e[44]!==D||e[45]!==S||e[46]!==O||e[47]!==a.busy||e[48]!==a.editedMetadata||e[49]!==a.editedValue||e[50]!==a.loading||e[51]!==a.value||e[52]!==a.writeError||e[53]!==t||e[54]!==C?(M=!a.loading&&a.value!==null&&w(be,{children:[w("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[r(W,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),m!==void 0&&r(Le,{variant:"secondary",children:t("JSON")}),r("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:Fe(Ae(a.editedValue))})]}),r("textarea",{"aria-label":t("KV value"),className:"mb-2 min-h-[8rem] w-full rounded border border-border bg-muted/30 p-2 font-mono text-xs","data-testid":"kv-value-editor",id:"kv-value-editor",onChange:L,value:a.editedValue}),w("div",{className:"mb-3 flex flex-wrap gap-2",children:[r(P,{"data-testid":"kv-format-btn",disabled:m===void 0,onClick:S,size:"sm",variant:"outline",children:t("Format JSON")}),r(P,{"data-testid":"kv-copy-value-btn",onClick:()=>{se(a.editedValue)},size:"sm",variant:"outline",children:t("Copy value")})]}),r(we,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:b=>{f({type:"editTtl",value:b})},testId:"kv-ttl-input"}),r(Te,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:V,testId:"kv-metadata-editor",valid:x,value:a.editedMetadata}),w("div",{className:"flex flex-wrap gap-2",children:[r(P,{"data-testid":"kv-save-btn",disabled:a.busy!==""||!x||!C,onClick:O,children:a.busy==="saving"?t("Saving…"):t("Save")}),r(P,{"data-testid":"kv-delete-btn",disabled:a.busy!=="",onClick:D,variant:"destructive",children:a.busy==="deleting"?t("Deleting…"):t("Delete")})]}),a.writeError!==null&&r("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:a.writeError})]}),e[42]=m,e[43]=x,e[44]=D,e[45]=S,e[46]=O,e[47]=a.busy,e[48]=a.editedMetadata,e[49]=a.editedValue,e[50]=a.loading,e[51]=a.value,e[52]=a.writeError,e[53]=t,e[54]=C,e[55]=M):M=e[55];let E;e[56]!==a.loadError||e[57]!==a.loading||e[58]!==a.value||e[59]!==t?(E=!a.loading&&a.value===null&&a.loadError===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=a.loadError,e[57]=a.loading,e[58]=a.value,e[59]=t,e[60]=E):E=e[60];let B;return e[61]!==n||e[62]!==u||e[63]!==T||e[64]!==M||e[65]!==E?(B=w("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[n,u,T,M,E]}),e[61]=n,e[62]=u,e[63]=T,e[64]=M,e[65]=E,e[66]=B):B=e[66],B},me=100,Re={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},ze=(l,e)=>{switch(e.type){case"appendPage":return e.generation!==l.reloadNonce?l:{...l,cursor:e.cursor,keys:[...l.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...l,appliedPrefix:l.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,reloadNonce:l.reloadNonce+1,selectedKey:null};case"bulkDeleted":{const s=new Set(e.deleted);return{...l,bulk:l.bulk.filter(c=>!s.has(c)),bulkBusy:!1,bulkError:e.error,keys:l.keys===null?null:l.keys.filter(c=>!s.has(c.name)),selectedKey:l.selectedKey!==null&&s.has(l.selectedKey)?null:l.selectedKey}}case"bulkDeleteStart":return{...l,bulkBusy:!0,bulkError:null};case"firstPage":return{...l,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...l,bulk:l.bulk.filter(s=>s!==e.name),keys:l.keys===null?null:l.keys.filter(s=>s.name!==e.name),selectedKey:null};case"loadFailed":return e.generation!==void 0&&e.generation!==l.reloadNonce?l:{...l,loadError:e.error,loading:!1};case"loadStart":return{...l,loadError:null,loading:!0};case"prefixInput":return{...l,prefixInput:e.value};case"reload":return{...l,bulk:[],bulkError:null,reloadNonce:l.reloadNonce+1,selectedKey:null};case"selectKey":return{...l,selectedKey:e.name};case"toggleAllBulk":return{...l,bulk:e.names};case"toggleBulk":return{...l,bulk:l.bulk.includes(e.name)?l.bulk.filter(s=>s!==e.name):[...l.bulk,e.name]};default:return l}},Ue=({namespace:l})=>{const e=ee(),s=G(),[c,i]=le(ze,Re),{appliedPrefix:v,bulk:d,bulkBusy:t,bulkError:a,cursor:f,keys:o,listComplete:g,loadError:k,loading:L,prefixInput:K,reloadNonce:V,selectedKey:p}=c,[m,h]=Z(!1);ae(()=>{const n={cancelled:!1};return H((async()=>{i({type:"loadStart"});try{const u=await e.listKvKeys({limit:me,namespace:l,prefix:v===""?void 0:v});n.cancelled||i({cursor:u.cursor??null,keys:u.keys,listComplete:u.listComplete,type:"firstPage"})}catch(u){n.cancelled||i({error:R(u),type:"loadFailed"})}})()),()=>{n.cancelled=!0}},[e,l,v,V]);const x=n=>{i({type:"prefixInput",value:n.target.value})},N=()=>{i({type:"applyFilter"})},C=n=>{i({name:n.currentTarget.dataset.key??null,type:"selectKey"})},y=()=>{if(f===null)return;i({type:"loadStart"});const n=V;H((async()=>{try{const u=await e.listKvKeys({cursor:f,limit:me,namespace:l,prefix:v===""?void 0:v});i({cursor:u.cursor??null,generation:n,keys:u.keys,listComplete:u.listComplete,type:"appendPage"})}catch(u){i({error:R(u),generation:n,type:"loadFailed"})}})())},S=n=>{i({name:n,type:"keyDeleted"})},F=n=>{i({name:n,type:"toggleBulk"})},O=n=>{i({names:n&&o!==null?o.map(u=>u.name):[],type:"toggleAllBulk"})},I=()=>{if(d.length===0)return;const n=[...d];i({type:"bulkDeleteStart"}),H((async()=>{const u=await Promise.allSettled(n.map(E=>e.deleteKvKey({key:E,namespace:l}))),T=n.filter((E,B)=>u[B]?.status==="fulfilled"),M=n.length-T.length;i({deleted:T,error:M>0?s("Failed to delete {count} keys.",{count:M}):null,type:"bulkDeleted"})})())},D=()=>{h(!1),i({type:"reload"})},A=o!==null&&o.length>0&&d.length===o.length,_=new Set(d);return w(be,{children:[w("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[w("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[r(re,{"aria-label":s("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:x,placeholder:s("Filter by prefix…"),value:K}),r(P,{"data-testid":"kv-filter-btn",disabled:L,onClick:N,children:s("Filter")}),r(P,{"data-testid":"kv-new-key-btn",onClick:()=>{h(n=>!n)},variant:"outline",children:s("New key")}),d.length>0&&r(P,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:I,variant:"destructive",children:t?s("Deleting…"):s("Delete {count}",{count:d.length})})]}),a!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:a}),k!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:k}),o!==null&&o.length===0&&!L&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:s("No keys.")}),o!==null&&o.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(fe,{className:"px-0",children:w(pe,{"data-testid":"kv-key-table",children:[r(he,{children:w(X,{children:[r(q,{className:"w-10",children:r(ne,{"aria-label":s("Select all"),checked:A,"data-testid":"kv-select-all",onCheckedChange:O})}),r(q,{children:s("Key")}),r(q,{children:s("Expiration")})]})}),r(ye,{children:o.map(n=>w(X,{className:n.name===p?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":n.name,"data-testid":`kv-key-row-${n.name}`,onClick:C,children:[r(Q,{onClick:u=>{u.stopPropagation()},children:r(ne,{"aria-label":s("Select {name}",{name:n.name}),checked:_.has(n.name),"data-testid":`kv-select-${n.name}`,onCheckedChange:()=>{F(n.name)}})}),r(Q,{className:"font-mono text-xs",children:n.name}),r(Q,{className:"tabular-nums text-xs",children:Oe(n.expiration)})]},n.name))})]})})}),!g&&f!==null&&r("div",{className:"mt-2",children:r(P,{"data-testid":"kv-load-more",disabled:L,onClick:y,variant:"outline",children:s(L?"Loading…":"Load more")})})]}),r(ie,{onOpenChange:n=>{n||h(!1)},open:m,children:w(de,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[r(oe,{children:r(ce,{children:s("New key")})}),r(Pe,{namespace:l,onCancel:()=>{h(!1)},onCreated:D})]})}),r(ie,{onOpenChange:n=>{n||i({name:null,type:"selectKey"})},open:p!==null,children:w(de,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[r(oe,{children:r(ce,{className:"truncate font-mono text-xs",children:p})}),p!==null&&r(He,{expiration:o?.find(n=>n.name===p)?.expiration,keyName:p,namespace:l,onDeleted:S},`${l}:${p}`)]})})]})},ut=({loadNamespaces:l}={})=>{const e=ee(),s=G(),[c,i]=Z(null),[v,d]=Z(null),[t,a]=Z(null);ae(()=>{const o={cancelled:!1};return H((async()=>{try{const g=await(l??(()=>e.listKvNamespaces()))();o.cancelled||(i(g),d(null),a(k=>k??g[0]?.binding??null))}catch(g){o.cancelled||(i(null),d(R(g)))}})()),()=>{o.cancelled=!0}},[e,l]);const f=o=>{a(o.currentTarget.dataset.ns??null)};return w("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[v!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:v}),c!==null&&c.length===0&&r(Ee,{description:s("Add a kv_namespaces binding to wrangler.jsonc — it appears here automatically, no wiring needed."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:s("No KV namespaces.")}),c!==null&&c.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(fe,{className:"px-0",children:w(pe,{"data-testid":"kv-namespace-table",children:[r(he,{children:r(X,{children:r(q,{children:s("Namespace")})})}),r(ye,{children:c.map(o=>r(X,{className:o.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":o.binding,"data-testid":`kv-ns-row-${o.binding}`,onClick:f,children:r(Q,{className:"font-mono text-xs",children:o.binding})},o.binding))})]})})}),t!==null&&r(Ue,{namespace:t},t)]})};export{ut as KvBrowser};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as D}from"../packem_shared/wire-codec-B2DgCbKt.mjs";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as E}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as x,a as A}from"../packem_shared/card-By2O8ULa.mjs";import{E as I}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as P,a as V,b as g,c as m,d as C,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-
|
|
1
|
+
import{a as D}from"../packem_shared/wire-codec-B2DgCbKt.mjs";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as E}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as x,a as A}from"../packem_shared/card-By2O8ULa.mjs";import{E as I}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as P,a as V,b as g,c as m,d as C,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-BcE8S2Nn.mjs";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as b}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{h as B}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as e,jsxs as d}from"react/jsx-runtime";const T="payment_subscriptions",R="payment_events",k=[T,R],G={},N=new Set(["active","trialing"]),Y=new Set(["past_due","unpaid"]),a=(n,r)=>{if(n[r]!==void 0)return n[r];const p=n.__doc__;return typeof p=="string"?D(p)?.[r]:void 0},s=n=>typeof n=="string"?n:typeof n=="number"||typeof n=="bigint"||typeof n=="boolean"?String(n):"",q=n=>N.has(n)?"default":Y.has(n)?"destructive":"outline",oe=({limit:n=100})=>{const r=U(),p=M(),{data:y}=h(b.listTables,G,{live:!0}),_=y!==void 0,w=Array.isArray(y)&&k.every(t=>y.some(c=>c.name===t)),l=p.payments&&w,i=h(b.readTablePage,{filters:[],limit:n,offset:0,orderBy:{column:"updatedAt",direction:"desc"},search:"",table:T},{enabled:l}),u=h(b.readTablePage,{filters:[],limit:25,offset:0,orderBy:{column:"processedAt",direction:"desc"},search:"",table:R},{enabled:l}),v=h(b.facetColumn,{column:"state",table:T},{enabled:l});H(()=>{l&&(i.refetch(),u.refetch(),v.refetch())},!0);const f=i.data?.rows??[],L=u.data?.rows??[],O=i.error??u.error,Q=i.error===null?u.errorSource:i.errorSource,j=i.data?.total??f.length,S=v.data?.values===void 0?f.filter(t=>N.has(s(a(t,"state")))).length:v.data.values.reduce((t,c)=>t+(N.has(s(c.value))?c.count:0),0);return _&&!l?e("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:e(I,{description:r("No @lunora/payment tables found in this deployment. Add `.extend(paymentExtension)` to lunora/schema.ts and wire `payment` on createShardDO() to sync customers and subscriptions."),testId:"payments-unconfigured",title:r("No payments configured")})}):d("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:d(x,{className:"justify-between gap-0 py-0",children:[d("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")}),d("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:S}),e(E,{variant:"default",children:r("{count} active",{count:S})})]})]}),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:j})})]})}),O===null?void 0:e(F,{error:Q}),f.length===0&&!i.isLoading?e(I,{testId:"payments-empty",title:r("No subscriptions yet")}):e(x,{className:"overflow-hidden py-0",children:e(A,{className:"px-0",children:d(P,{children:[e(V,{children:d(g,{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(C,{children:f.map(t=>{const c=s(a(t,"state"));return d(g,{"data-testid":"payment-subscription-row",children:[e(o,{children:s(a(t,"provider"))}),e(o,{children:s(a(t,"referenceId"))}),e(o,{children:s(a(t,"priceId"))}),e(o,{children:e(E,{variant:q(c),children:c})}),e(o,{children:B(a(t,"currentPeriodEnd"))})]},s(a(t,"providerSubscriptionId")))})})]})})}),d(x,{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(P,{children:e(C,{children:L.map(t=>d(g,{"data-testid":"payment-event-row",children:[e(o,{children:s(a(t,"provider"))}),e(o,{className:"font-medium",children:s(a(t,"type"))}),e(o,{className:"text-muted-foreground",children:s(a(t,"providerEventId"))}),e(o,{children:B(a(t,"processedAt"))})]},s(a(t,"providerEventId"))))})})})]})]})};export{oe as PaymentsPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as W}from"react/compiler-runtime";import{useQueryClient as se,useQuery as ie,useMutation as re}from"@tanstack/react-query";import{useId as le}from"react";import{E as Z}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as G}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as ne}from"../packem_shared/button-q0UYSmrn.mjs";import{E as ee}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as w,a as ae,b as te,d as de,T as ce,e as O}from"../packem_shared/table-D0SBiDu-.mjs";import{useT as X}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{h as J}from"../packem_shared/internal-Df43vQI0.mjs";import{c as oe}from"../packem_shared/utils-bhneXptQ.mjs";import{jsx as i,jsxs as z}from"react/jsx-runtime";const ue=new Set(["cancelled","completed","expired"]),fe=r=>ue.has(r),me=r=>r.extendedDueAt??r.dueAt,ve=r=>!fe(r)&&r!=="ready",pe=(r,e)=>ve(r.status)&&e.getTime()>me(r).getTime(),ye=(r,e)=>pe({dueAt:new Date(r.dueAt),status:r.status,...r.extendedDueAt===void 0||r.extendedDueAt===null?{}:{extendedDueAt:new Date(r.extendedDueAt)}},new Date(e)),he=["studio","privacy-requests"],xe={cancelled:"outline",completed:"success",expired:"outline",failed:"destructive",grace:"secondary",processing:"warning",ready:"success",received:"info"},Ae=r=>J(r??void 0,"—"),ge=r=>{const e=W(55),{asOf:o,retrying:t,row:s,onRetry:q}=r,a=X();let d,c,D;e[0]!==o||e[1]!==s?(c=ye(s,o),d=te,D=oe(c&&"bg-destructive/5"),e[0]=o,e[1]=s,e[2]=d,e[3]=c,e[4]=D):(d=e[2],c=e[3],D=e[4]);const S=c?"true":"false";let u;e[5]!==s.id?(u=i(O,{className:"font-mono text-xs",children:s.id}),e[5]=s.id,e[6]=u):u=e[6];let f;e[7]!==s.type||e[8]!==a?(f=s.type==="export"?a("Export"):a("Erasure"),e[7]=s.type,e[8]=a,e[9]=f):f=e[9];let E;e[10]!==f?(E=i(O,{children:i(G,{variant:"secondary",children:f})}),e[10]=f,e[11]=E):E=e[11];let n;e[12]!==s.subjectId?(n=i(O,{className:"font-mono text-xs",children:s.subjectId}),e[12]=s.subjectId,e[13]=n):n=e[13];const N=xe[s.status];let b;e[14]!==s.status||e[15]!==N?(b=i(O,{children:i(G,{variant:N,children:s.status})}),e[14]=s.status,e[15]=N,e[16]=b):b=e[16];let R;e[17]!==s.receivedAt?(R=J(s.receivedAt),e[17]=s.receivedAt,e[18]=R):R=e[18];let P;e[19]!==R?(P=i(O,{children:R}),e[19]=R,e[20]=P):P=e[20];let m;e[21]!==s.dueAt?(m=J(s.dueAt),e[21]=s.dueAt,e[22]=m):m=e[22];let v;e[23]!==m?(v=i(O,{children:m}),e[23]=m,e[24]=v):v=e[24];let p;e[25]!==s.extendedDueAt?(p=Ae(s.extendedDueAt),e[25]=s.extendedDueAt,e[26]=p):p=e[26];let y;e[27]!==p?(y=i(O,{children:p}),e[27]=p,e[28]=y):y=e[28];let h;e[29]!==c||e[30]!==a?(h=c&&i(G,{"data-testid":"privacy-overdue",variant:"destructive",children:a("Overdue")}),e[29]=c,e[30]=a,e[31]=h):h=e[31];let x;e[32]!==h?(x=i(O,{children:h}),e[32]=h,e[33]=x):x=e[33];let A;e[34]!==q||e[35]!==t||e[36]!==s.id||e[37]!==s.status||e[38]!==a?(A=s.status==="failed"&&i(ne,{disabled:t,onClick:()=>{q(s.id)},size:"xs",variant:"outline",children:a("Retry")}),e[34]=q,e[35]=t,e[36]=s.id,e[37]=s.status,e[38]=a,e[39]=A):A=e[39];let g;e[40]!==A?(g=i(O,{children:A}),e[40]=A,e[41]=g):g=e[41];let I;return e[42]!==d||e[43]!==D||e[44]!==P||e[45]!==v||e[46]!==y||e[47]!==x||e[48]!==g||e[49]!==S||e[50]!==u||e[51]!==E||e[52]!==n||e[53]!==b?(I=z(d,{className:D,"data-overdue":S,"data-testid":"privacy-request-row",children:[u,E,n,b,P,v,y,x,g]}),e[42]=d,e[43]=D,e[44]=P,e[45]=v,e[46]=y,e[47]=x,e[48]=g,e[49]=S,e[50]=u,e[51]=E,e[52]=n,e[53]=b,e[54]=I):I=e[54],I},Te=r=>{const e=W(95),{source:o}=r,t=X(),s=se(),q=le();let a;e[0]!==q?(a=[...he,q],e[0]=q,e[1]=a):a=e[1];const d=a;let c;e[2]!==o?(c=async()=>({asOf:Date.now(),requests:await o.listOpenPrivacyRequests()}),e[2]=o,e[3]=c):c=e[3];let D;e[4]!==d||e[5]!==c?(D={queryKey:d,refetchInterval:6e4,queryFn:c,staleTime:0},e[4]=d,e[5]=c,e[6]=D):D=e[6];const S=ie(D);let u;e[7]!==o?(u=l=>o.retryPrivacyRequest(l),e[7]=o,e[8]=u):u=e[8];let f;e[9]!==s||e[10]!==d?(f=async()=>{await s.invalidateQueries({queryKey:d})},e[9]=s,e[10]=d,e[11]=f):f=e[11];let E;e[12]!==u||e[13]!==f?(E={mutationFn:u,onSuccess:f},e[12]=u,e[13]=f,e[14]=E):E=e[14];const n=re(E);let N;e[15]!==n?(N=l=>{n.mutate(l)},e[15]=n,e[16]=N):N=e[16];const b=N;if(S.isPending){let l;e[17]!==t?(l=t("Loading privacy requests…"),e[17]=t,e[18]=l):l=e[18];let T;return e[19]!==l?(T=i("p",{className:"text-sm text-muted-foreground","data-testid":"privacy-requests-loading",role:"status",children:l}),e[19]=l,e[20]=T):T=e[20],T}if(S.isError){let l;return e[21]!==S.error?(l=i(Z,{error:S.error,testId:"privacy-requests-error"}),e[21]=S.error,e[22]=l):l=e[22],l}const{asOf:R,requests:P}=S.data;if(P.length===0){let l;e[23]!==t?(l=t("No open privacy requests."),e[23]=t,e[24]=l):l=e[24];let T;return e[25]!==l?(T=i(ee,{testId:"privacy-requests-empty",title:l}),e[25]=l,e[26]=T):T=e[26],T}let m;e[27]!==n.error||e[28]!==n.isError?(m=n.isError&&i(Z,{error:n.error,testId:"privacy-retry-error"}),e[27]=n.error,e[28]=n.isError,e[29]=m):m=e[29];let v;e[30]!==t?(v=t("ID"),e[30]=t,e[31]=v):v=e[31];let p;e[32]!==v?(p=i(w,{children:v}),e[32]=v,e[33]=p):p=e[33];let y;e[34]!==t?(y=t("Type"),e[34]=t,e[35]=y):y=e[35];let h;e[36]!==y?(h=i(w,{children:y}),e[36]=y,e[37]=h):h=e[37];let x;e[38]!==t?(x=t("Subject"),e[38]=t,e[39]=x):x=e[39];let A;e[40]!==x?(A=i(w,{children:x}),e[40]=x,e[41]=A):A=e[41];let g;e[42]!==t?(g=t("Status"),e[42]=t,e[43]=g):g=e[43];let I;e[44]!==g?(I=i(w,{children:g}),e[44]=g,e[45]=I):I=e[45];let j;e[46]!==t?(j=t("Received"),e[46]=t,e[47]=j):j=e[47];let B;e[48]!==j?(B=i(w,{children:j}),e[48]=j,e[49]=B):B=e[49];let C;e[50]!==t?(C=t("Due"),e[50]=t,e[51]=C):C=e[51];let Q;e[52]!==C?(Q=i(w,{children:C}),e[52]=C,e[53]=Q):Q=e[53];let U;e[54]!==t?(U=t("Extended due"),e[54]=t,e[55]=U):U=e[55];let V;e[56]!==U?(V=i(w,{children:U}),e[56]=U,e[57]=V):V=e[57];let _;e[58]!==t?(_=t("Overdue"),e[58]=t,e[59]=_):_=e[59];let $;e[60]!==_?($=i(w,{children:_}),e[60]=_,e[61]=$):$=e[61];let F;e[62]!==t?(F=t("Actions"),e[62]=t,e[63]=F):F=e[63];let H;e[64]!==F?(H=i(w,{children:F}),e[64]=F,e[65]=H):H=e[65];let K;e[66]!==p||e[67]!==h||e[68]!==A||e[69]!==I||e[70]!==B||e[71]!==Q||e[72]!==V||e[73]!==$||e[74]!==H?(K=i(ae,{children:z(te,{children:[p,h,A,I,B,Q,V,$,H]})}),e[66]=p,e[67]=h,e[68]=A,e[69]=I,e[70]=B,e[71]=Q,e[72]=V,e[73]=$,e[74]=H,e[75]=K):K=e[75];let L;if(e[76]!==R||e[77]!==b||e[78]!==P||e[79]!==n.isPending||e[80]!==n.variables){let l;e[82]!==R||e[83]!==b||e[84]!==n.isPending||e[85]!==n.variables?(l=T=>i(ge,{asOf:R,onRetry:b,retrying:n.isPending&&n.variables===T.id,row:T},T.id),e[82]=R,e[83]=b,e[84]=n.isPending,e[85]=n.variables,e[86]=l):l=e[86],L=P.map(l),e[76]=R,e[77]=b,e[78]=P,e[79]=n.isPending,e[80]=n.variables,e[81]=L}else L=e[81];let M;e[87]!==L?(M=i(de,{children:L}),e[87]=L,e[88]=M):M=e[88];let Y;e[89]!==K||e[90]!==M?(Y=z(ce,{children:[K,M]}),e[89]=K,e[90]=M,e[91]=Y):Y=e[91];let k;return e[92]!==Y||e[93]!==m?(k=z("div",{className:"flex flex-col gap-3",children:[m,Y]}),e[92]=Y,e[93]=m,e[94]=k):k=e[94],k},Be=r=>{const e=W(11);let o;e[0]!==r?(o=r===void 0?{}:r,e[0]=r,e[1]=o):o=e[1];const{source:t}=o,s=X();if(t===void 0){let a;e[2]!==s?(a=s("Pass privacyRequests to the Studio to list and retry data-subject requests."),e[2]=s,e[3]=a):a=e[3];let d;e[4]!==s?(d=s("Privacy requests not configured"),e[4]=s,e[5]=d):d=e[5];let c;return e[6]!==a||e[7]!==d?(c=i(ee,{description:a,testId:"privacy-requests-not-configured",title:d}),e[6]=a,e[7]=d,e[8]=c):c=e[8],c}let q;return e[9]!==t?(q=i(Te,{source:t}),e[9]=t,e[10]=q):q=e[10],q};export{Be as PrivacyRequestsPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./badge-r_5B4LHP.mjs";import"./card-By2O8ULa.mjs";import"./empty-state-D7jEML_T.mjs";import"./use-admin-query-tlBof8Yg.mjs";import"./DEFAULT_LOCALE-A1Yg5ORA.mjs";import"./ADMIN_FUNCTIONS-B8yyk5BX.mjs";import"./internal-Df43vQI0.mjs";import"./utils-bhneXptQ.mjs";import"./DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{H,c as f}from"./home-panel-
|
|
1
|
+
import"./badge-r_5B4LHP.mjs";import"./card-By2O8ULa.mjs";import"./empty-state-D7jEML_T.mjs";import"./use-admin-query-tlBof8Yg.mjs";import"./DEFAULT_LOCALE-A1Yg5ORA.mjs";import"./ADMIN_FUNCTIONS-B8yyk5BX.mjs";import"./internal-Df43vQI0.mjs";import"./utils-bhneXptQ.mjs";import"./DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{H,c as f}from"./home-panel-BcE8S2Nn.mjs";export{H as HomePanel,f as cacheFooterText};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as b}from"./studio-
|
|
1
|
+
import{S as b}from"./studio-fK2DTLde.mjs";import"./ErrorBoundary-BWNF98VF.mjs";import"./operation-console-provider-DoloEvon.mjs";import"./badge-r_5B4LHP.mjs";import"./input-CXhxesPC.mjs";import"./skeleton-DX1gfixl.mjs";import"./home-panel-BcE8S2Nn.mjs";import"./DEFAULT_LOCALE-A1Yg5ORA.mjs";import"./StudioI18nProvider-fVsCSs5L.mjs";import"./data-view-params-DhYmAkcj.mjs";import"./internal-Df43vQI0.mjs";import"./utils-bhneXptQ.mjs";import"./CommandPalette-D9ZY-qQd.mjs";export{b as Studio};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as O}from"react/compiler-runtime";import{LunoraClient as G}from"@lunora/client";import{LunoraProvider as H}from"@lunora/react";import{useState as B,useEffect as $}from"react";import{ErrorBoundary as z}from"./ErrorBoundary-BWNF98VF.mjs";import{u as U,B as V,T as Y,a as q,S as J}from"./studio-
|
|
1
|
+
import{c as O}from"react/compiler-runtime";import{LunoraClient as G}from"@lunora/client";import{LunoraProvider as H}from"@lunora/react";import{useState as B,useEffect as $}from"react";import{ErrorBoundary as z}from"./ErrorBoundary-BWNF98VF.mjs";import{u as U,B as V,T as Y,a as q,S as J}from"./studio-fK2DTLde.mjs";import Q from"./useDebounced-DVeQ5-oW.mjs";import{useT as j,createStudioI18n as X}from"./DEFAULT_LOCALE-A1Yg5ORA.mjs";import{StudioI18nProvider as D}from"./StudioI18nProvider-fVsCSs5L.mjs";import{r as Z}from"./internal-Df43vQI0.mjs";import{w as R}from"./recording-client-CyFiAE2l.mjs";import F from"./STUDIO_ROOT_CLASS-C6MccdVk.mjs";import{a as K}from"./browser-storage-BH1MxLZs.mjs";import{c as W}from"./utils-bhneXptQ.mjs";import{B as ee}from"./button-q0UYSmrn.mjs";import{I as te}from"./input-CXhxesPC.mjs";import{jsx as f,jsxs as C}from"react/jsx-runtime";const M="lunora-studio-admin-token",oe=()=>{try{return K("session")?.getItem(M)??""}catch{return""}},ne=m=>{const e=K("session");if(e!==void 0)try{m===""?e.removeItem(M):e.setItem(M,m)}catch{}},ie="/_lunora/admin/ws-token",se=1e4,le=m=>{const e=m;return typeof e?.token=="string"&&e.token.length>0&&typeof e.expiresAtMs=="number"},re=m=>{const{adminToken:e,baseUrl:a}=m,o=m.fetchImpl??fetch;let l=a;for(;l.endsWith("/");)l=l.slice(0,-1);const r=`${l}${ie}`;let t,n;const i=async()=>{const s=await o(r,{headers:{authorization:`Bearer ${e}`},method:"POST"});if(!s.ok)throw new Error(`ws-token mint failed: ${String(s.status)}`);const u=await s.json().catch(()=>{});if(!le(u))throw new Error("ws-token mint failed: malformed response body");return t=u,u.token};return{getToken:async()=>t!==void 0&&t.expiresAtMs-se>Date.now()?t.token:(n??=i().finally(()=>{n=void 0}),n),invalidate:()=>{t=void 0}}},ae=m=>{const e=O(42),{onSubmit:a}=m,o=j(),[l,r]=B("");let t;e[0]!==l?(t=l.trim(),e[0]=l,e[1]=t):t=e[1];const n=t;let i;e[2]!==a||e[3]!==n?(i=_=>{_.preventDefault(),n!==""&&a(n)},e[2]=a,e[3]=n,e[4]=i):i=e[4];const s=i;let u;e[5]===Symbol.for("react.memo_cache_sentinel")?(u=f("div",{className:"h-10 w-10 text-foreground",children:f(V,{})}),e[5]=u):u=e[5];let d;e[6]!==o?(d=o("Connect to Lunora Studio"),e[6]=o,e[7]=d):d=e[7];let v;e[8]!==d?(v=f("h1",{className:"text-base font-semibold text-foreground",children:d}),e[8]=d,e[9]=v):v=e[9];let k;e[10]!==o?(k=o("Enter your admin token to access the studio."),e[10]=o,e[11]=k):k=e[11];let p;e[12]!==k?(p=f("p",{className:"text-[13px] text-muted-foreground",children:k}),e[12]=k,e[13]=p):p=e[13];let h;e[14]!==v||e[15]!==p?(h=C("div",{className:"flex flex-col items-center gap-3 text-center",children:[u,C("div",{className:"flex flex-col gap-1",children:[v,p]})]}),e[14]=v,e[15]=p,e[16]=h):h=e[16];let g;e[17]!==o?(g=o("admin token"),e[17]=o,e[18]=g):g=e[18];let c;e[19]!==g?(c=f("label",{className:"text-xs font-medium text-foreground",htmlFor:"lunora-studio-login-token",children:g}),e[19]=g,e[20]=c):c=e[20];let b;e[21]===Symbol.for("react.memo_cache_sentinel")?(b=_=>{r(_.target.value)},e[21]=b):b=e[21];let x;e[22]!==l?(x=f(te,{autoComplete:"off",autoFocus:!0,"data-testid":"lunora-studio-login-token",id:"lunora-studio-login-token",onChange:b,placeholder:"LUNORA_ADMIN_TOKEN",type:"password",value:l}),e[22]=l,e[23]=x):x=e[23];let T;e[24]!==o?(T=o("From your worker's LUNORA_ADMIN_TOKEN — your project's .dev.vars in dev, or a deployment secret in production."),e[24]=o,e[25]=T):T=e[25];let I;e[26]!==T?(I=f("p",{className:"text-[11px] text-muted-foreground",children:T}),e[26]=T,e[27]=I):I=e[27];let S;e[28]!==c||e[29]!==x||e[30]!==I?(S=C("div",{className:"flex flex-col gap-1.5",children:[c,x,I]}),e[28]=c,e[29]=x,e[30]=I,e[31]=S):S=e[31];const E=n==="";let y;e[32]!==o?(y=o("Connect"),e[32]=o,e[33]=y):y=e[33];let w;e[34]!==E||e[35]!==y?(w=f(ee,{"data-testid":"lunora-studio-login-submit",disabled:E,type:"submit",children:y}),e[34]=E,e[35]=y,e[36]=w):w=e[36];let N;return e[37]!==s||e[38]!==S||e[39]!==w||e[40]!==h?(N=C("form",{className:"flex w-full max-w-sm flex-col gap-5 rounded-xl border border-border bg-card p-7 shadow-lg","data-testid":"lunora-studio-login",onSubmit:s,children:[h,S,w]}),e[37]=s,e[38]=S,e[39]=w,e[40]=h,e[41]=N):N=e[41],N},de=m=>{const e=O(10),{i18n:a,onSubmit:o}=m,{resolvedTheme:l}=U(),r=l==="dark"&&"dark";let t;e[0]!==r?(t=W(F,r,"flex h-dvh items-center justify-center bg-sidebar p-6 text-sm text-foreground"),e[0]=r,e[1]=t):t=e[1];let n;e[2]!==o?(n=f(ae,{onSubmit:o}),e[2]=o,e[3]=n):n=e[3];let i;e[4]!==a||e[5]!==n?(i=f(D,{i18n:a,children:n}),e[4]=a,e[5]=n,e[6]=i):i=e[6];let s;return e[7]!==t||e[8]!==i?(s=f("div",{className:t,"data-testid":"lunora-studio-login-root",children:i}),e[7]=t,e[8]=i,e[9]=s):s=e[9],s},ce=m=>{const e=O(15),{basePath:a,chrome:o,studio:l}=m,r=j();let t;e[0]!==r?(t=r("Studio failed"),e[0]=r,e[1]=t):t=e[1];let n;e[2]!==r?(n=r("Studio"),e[2]=r,e[3]=n):n=e[3];let i;e[4]!==r?(i=r("Try again"),e[4]=r,e[5]=i):i=e[5];let s;e[6]!==a||e[7]!==o||e[8]!==l?(s=f(J,{...l,basePath:a,chrome:o}),e[6]=a,e[7]=o,e[8]=l,e[9]=s):s=e[9];let u;return e[10]!==t||e[11]!==n||e[12]!==i||e[13]!==s?(u=f(z,{fallbackTitle:t,label:n,retryLabel:i,children:s}),e[10]=t,e[11]=n,e[12]=i,e[13]=s,e[14]=u):u=e[14],u},fe=m=>{const e=O(20),{basePath:a,clearToken:o,client:l,i18n:r,onTokenChange:t,rulesInstalled:n,studio:i,token:s}=m,{resolvedTheme:u}=U();let d;e[0]!==o||e[1]!==t||e[2]!==n||e[3]!==s?(d={clearToken:o,onTokenChange:t,rulesInstalled:n,token:s},e[0]=o,e[1]=t,e[2]=n,e[3]=s,e[4]=d):d=e[4];const v=d,k=u==="dark"&&"dark";let p;e[5]!==k?(p=W(F,k,"flex h-dvh flex-col overflow-hidden bg-sidebar text-sm text-foreground"),e[5]=k,e[6]=p):p=e[6];let h;e[7]!==a||e[8]!==v||e[9]!==i?(h=f(q,{children:f(ce,{basePath:a,chrome:v,studio:i})}),e[7]=a,e[8]=v,e[9]=i,e[10]=h):h=e[10];let g;e[11]!==r||e[12]!==h?(g=f(D,{i18n:r,children:h}),e[11]=r,e[12]=h,e[13]=g):g=e[13];let c;e[14]!==l||e[15]!==g?(c=f(H,{client:l,children:g}),e[14]=l,e[15]=g,e[16]=c):c=e[16];let b;return e[17]!==p||e[18]!==c?(b=f("div",{className:p,"data-testid":"lunora-studio-app",children:c}),e[17]=p,e[18]=c,e[19]=b):b=e[19],b},Ee=m=>{const e=O(28);let a;e[0]!==m?(a=m===void 0?{}:m,e[0]=m,e[1]=a):a=e[1];const{adminToken:o,basePath:l,baseUrl:r,client:t,rulesInstalled:n,studio:i,locale:s}=a;let u;e[2]!==o?(u=()=>o??oe(),e[2]=o,e[3]=u):u=e[3];const[d,v]=B(u);let k,p;e[4]!==d?(k=()=>{ne(d)},p=[d],e[4]=d,e[5]=k,e[6]=p):(k=e[5],p=e[6]),$(k,p);const h=Q(d,300,d==="");let g;e:{if(t!==void 0){let A;e[7]!==t?(A=R(t),e[7]=t,e[8]=A):A=e[8],g=A;break e}let _;if(e[9]!==r||e[10]!==h){const A=Z(r),P=h===""?void 0:re({adminToken:h,baseUrl:A}),L=new G({url:A,...P===void 0?{}:{wsToken:P.getToken}});P!==void 0&&(L.setAuthToken(h),L.onTokenExpired(P.invalidate)),_=R(L),e[9]=r,e[10]=h,e[11]=_}else _=e[11];g=_}const c=g;let b,x;e[12]!==c||e[13]!==t?(b=()=>()=>{t===void 0&&c.close()},x=[c,t],e[12]=c,e[13]=t,e[14]=b,e[15]=x):(b=e[14],x=e[15]),$(b,x);let T;e[16]===Symbol.for("react.memo_cache_sentinel")?(T=_=>{v(_.target.value)},e[16]=T):T=e[16];const I=T;let S;e[17]===Symbol.for("react.memo_cache_sentinel")?(S=()=>{v("")},e[17]=S):S=e[17];const E=S;let y;e[18]!==s?(y=X(s),e[18]=s,e[19]=y):y=e[19];const w=y;let N;return e[20]!==l||e[21]!==c||e[22]!==w||e[23]!==t||e[24]!==n||e[25]!==i||e[26]!==d?(N=f(Y,{children:d===""&&t===void 0?f(de,{i18n:w,onSubmit:v}):f(fe,{basePath:l,clearToken:E,client:c,i18n:w,onTokenChange:I,rulesInstalled:n,studio:i,token:d})}),e[20]=l,e[21]=c,e[22]=w,e[23]=t,e[24]=n,e[25]=i,e[26]=d,e[27]=N):N=e[27],N};export{Ee as StudioApp};
|
|
@@ -73,6 +73,38 @@ interface SchedulePanelProps {
|
|
|
73
73
|
/** Override how the Scheduled jobs sub-view loads jobs; see {@link ScheduledJobs}. */
|
|
74
74
|
readonly scheduledLoad?: ScheduledJobsProps["loadJobs"];
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* The statuses a privacy request moves through, and which of them are terminal.
|
|
78
|
+
*
|
|
79
|
+
* `@lunora/privacy` stores them and the Studio's Privacy requests page renders them.
|
|
80
|
+
* The Studio must not depend on the runtime package, so both read the list from here
|
|
81
|
+
* and the bundler inlines it into each. A status added here reaches both, and the
|
|
82
|
+
* Studio's exhaustive badge map fails to compile until it has a variant.
|
|
83
|
+
*/
|
|
84
|
+
/** Every status, in lifecycle order. */
|
|
85
|
+
declare const REQUEST_STATUSES: readonly ["received", "grace", "processing", "ready", "completed", "failed", "cancelled", "expired"];
|
|
86
|
+
type RequestStatus = (typeof REQUEST_STATUSES)[number];
|
|
87
|
+
type RequestType = "erasure" | "export";
|
|
88
|
+
/**
|
|
89
|
+
* Timestamps are epoch milliseconds. `extendedDueAt` is set only when the deadline was extended, so
|
|
90
|
+
* the effective deadline is `extendedDueAt ?? dueAt`.
|
|
91
|
+
*/
|
|
92
|
+
interface PrivacyRequestRow {
|
|
93
|
+
readonly dueAt: number;
|
|
94
|
+
readonly extendedDueAt?: null | number;
|
|
95
|
+
readonly id: string;
|
|
96
|
+
readonly receivedAt: number;
|
|
97
|
+
readonly status: RequestStatus;
|
|
98
|
+
readonly subjectId: string;
|
|
99
|
+
readonly type: RequestType;
|
|
100
|
+
}
|
|
101
|
+
/** What the Studio's Privacy requests page reads and writes. */
|
|
102
|
+
interface PrivacyRequestsSource {
|
|
103
|
+
/** The open requests, in any order; the page sorts nothing. */
|
|
104
|
+
listOpenPrivacyRequests: () => Promise<ReadonlyArray<PrivacyRequestRow>>;
|
|
105
|
+
/** Re-run a failed request. Rejects with the server's message on failure. */
|
|
106
|
+
retryPrivacyRequest: (id: string) => Promise<unknown>;
|
|
107
|
+
}
|
|
76
108
|
/** Which client method a {@link FunctionDescriptor} is invoked through. */
|
|
77
109
|
type FunctionKind = "action" | "mutation" | "query";
|
|
78
110
|
/**
|
|
@@ -189,6 +221,13 @@ interface StudioProps {
|
|
|
189
221
|
* `GET /_lunora/admin/openrpc` endpoint via the client.
|
|
190
222
|
*/
|
|
191
223
|
readonly openRpcSpec?: unknown;
|
|
224
|
+
/**
|
|
225
|
+
* The app's data-subject request source for the Privacy requests page, built
|
|
226
|
+
* from the app's own admin functions (`listOpenPrivacyRequests`,
|
|
227
|
+
* `retryPrivacyRequest`). Without one the page renders a "not configured" state
|
|
228
|
+
* and issues no request. Pass a STABLE reference, as for `analyticsSqlQuery`.
|
|
229
|
+
*/
|
|
230
|
+
readonly privacyRequests?: PrivacyRequestsSource;
|
|
192
231
|
/**
|
|
193
232
|
* Allow the function runner to execute a function AS a chosen authenticated
|
|
194
233
|
* identity (the "Run as identity" tool), so an operator can test auth + RLS
|
|
@@ -307,4 +346,4 @@ interface StudioAppProps {
|
|
|
307
346
|
* or `<Studio>` under your own provider instead.
|
|
308
347
|
*/
|
|
309
348
|
declare const StudioApp: ({ adminToken, basePath, baseUrl, client: injectedClient, rulesInstalled, studio, locale }?: StudioAppProps) => ReactElement;
|
|
310
|
-
export { FunctionDescriptor as F, RunStatus as R, StudioAppProps as S, FunctionKind as a,
|
|
349
|
+
export { FunctionDescriptor as F, PrivacyRequestRow as P, RunStatus as R, StudioAppProps as S, FunctionKind as a, PrivacyRequestsSource as b, ScheduledJobs as c, ScheduledJobsProps as d, Studio as e, StudioApp as f, StudioProps as g };
|
|
@@ -73,6 +73,38 @@ interface SchedulePanelProps {
|
|
|
73
73
|
/** Override how the Scheduled jobs sub-view loads jobs; see {@link ScheduledJobs}. */
|
|
74
74
|
readonly scheduledLoad?: ScheduledJobsProps["loadJobs"];
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* The statuses a privacy request moves through, and which of them are terminal.
|
|
78
|
+
*
|
|
79
|
+
* `@lunora/privacy` stores them and the Studio's Privacy requests page renders them.
|
|
80
|
+
* The Studio must not depend on the runtime package, so both read the list from here
|
|
81
|
+
* and the bundler inlines it into each. A status added here reaches both, and the
|
|
82
|
+
* Studio's exhaustive badge map fails to compile until it has a variant.
|
|
83
|
+
*/
|
|
84
|
+
/** Every status, in lifecycle order. */
|
|
85
|
+
declare const REQUEST_STATUSES: readonly ["received", "grace", "processing", "ready", "completed", "failed", "cancelled", "expired"];
|
|
86
|
+
type RequestStatus = (typeof REQUEST_STATUSES)[number];
|
|
87
|
+
type RequestType = "erasure" | "export";
|
|
88
|
+
/**
|
|
89
|
+
* Timestamps are epoch milliseconds. `extendedDueAt` is set only when the deadline was extended, so
|
|
90
|
+
* the effective deadline is `extendedDueAt ?? dueAt`.
|
|
91
|
+
*/
|
|
92
|
+
interface PrivacyRequestRow {
|
|
93
|
+
readonly dueAt: number;
|
|
94
|
+
readonly extendedDueAt?: null | number;
|
|
95
|
+
readonly id: string;
|
|
96
|
+
readonly receivedAt: number;
|
|
97
|
+
readonly status: RequestStatus;
|
|
98
|
+
readonly subjectId: string;
|
|
99
|
+
readonly type: RequestType;
|
|
100
|
+
}
|
|
101
|
+
/** What the Studio's Privacy requests page reads and writes. */
|
|
102
|
+
interface PrivacyRequestsSource {
|
|
103
|
+
/** The open requests, in any order; the page sorts nothing. */
|
|
104
|
+
listOpenPrivacyRequests: () => Promise<ReadonlyArray<PrivacyRequestRow>>;
|
|
105
|
+
/** Re-run a failed request. Rejects with the server's message on failure. */
|
|
106
|
+
retryPrivacyRequest: (id: string) => Promise<unknown>;
|
|
107
|
+
}
|
|
76
108
|
/** Which client method a {@link FunctionDescriptor} is invoked through. */
|
|
77
109
|
type FunctionKind = "action" | "mutation" | "query";
|
|
78
110
|
/**
|
|
@@ -189,6 +221,13 @@ interface StudioProps {
|
|
|
189
221
|
* `GET /_lunora/admin/openrpc` endpoint via the client.
|
|
190
222
|
*/
|
|
191
223
|
readonly openRpcSpec?: unknown;
|
|
224
|
+
/**
|
|
225
|
+
* The app's data-subject request source for the Privacy requests page, built
|
|
226
|
+
* from the app's own admin functions (`listOpenPrivacyRequests`,
|
|
227
|
+
* `retryPrivacyRequest`). Without one the page renders a "not configured" state
|
|
228
|
+
* and issues no request. Pass a STABLE reference, as for `analyticsSqlQuery`.
|
|
229
|
+
*/
|
|
230
|
+
readonly privacyRequests?: PrivacyRequestsSource;
|
|
192
231
|
/**
|
|
193
232
|
* Allow the function runner to execute a function AS a chosen authenticated
|
|
194
233
|
* identity (the "Run as identity" tool), so an operator can test auth + RLS
|
|
@@ -307,4 +346,4 @@ interface StudioAppProps {
|
|
|
307
346
|
* or `<Studio>` under your own provider instead.
|
|
308
347
|
*/
|
|
309
348
|
declare const StudioApp: ({ adminToken, basePath, baseUrl, client: injectedClient, rulesInstalled, studio, locale }?: StudioAppProps) => ReactElement;
|
|
310
|
-
export { FunctionDescriptor as F, RunStatus as R, StudioAppProps as S, FunctionKind as a,
|
|
349
|
+
export { FunctionDescriptor as F, PrivacyRequestRow as P, RunStatus as R, StudioAppProps as S, FunctionKind as a, PrivacyRequestsSource as b, ScheduledJobs as c, ScheduledJobsProps as d, Studio as e, StudioApp as f, StudioProps as g };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{c as A}from"react/compiler-runtime";import{useNavigate as Je}from"@tanstack/react-router";import{useState as Fe,useEffect as Ue,Suspense as et,lazy as tt}from"react";import{B as Ye}from"./badge-r_5B4LHP.mjs";import{C as B,a as Ze}from"./card-By2O8ULa.mjs";import{E as st}from"./empty-state-D7jEML_T.mjs";import{u as ve}from"./use-admin-query-tlBof8Yg.mjs";import{useT as I}from"./DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as ye}from"./ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as nt,f as Ne,d as lt,w as at,g as rt,m as ot}from"./internal-Df43vQI0.mjs";import{c as Xe}from"./utils-bhneXptQ.mjs";import{deriveInsights as it}from"./DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{useLunora as qe}from"@lunora/react";import{jsx as l,jsxs as h}from"react/jsx-runtime";import{B as Ve}from"./button-q0UYSmrn.mjs";const ct=nt(ye.studioFeatures),Ke={analytics:!0,auth:!0,containers:!0,flags:!0,kv:!0,mail:!0,notifications:!0,payments:!0,queues:!0,scheduler:!0,storage:!0,vectors:!0,workflows:!0},dt=t=>{if(t===null||typeof t!="object")return;const{id:e,name:n,unsupported:s}=t;if(!(typeof e!="string"||typeof n!="string"||!Array.isArray(s)))return{id:e,name:n,unsupported:s.filter(a=>typeof a=="string")}},ut=t=>{if(t===null||typeof t!="object")return Ke;const e=t,n=s=>typeof e[s]=="boolean"?e[s]:!0;return{analytics:n("analytics"),auth:n("auth"),containers:n("containers"),flags:n("flags"),kv:n("kv"),mail:n("mail"),notifications:n("notifications"),payments:n("payments"),platform:dt(e.platform),queues:n("queues"),scheduler:n("scheduler"),storage:n("storage"),vectors:n("vectors"),workflows:n("workflows")}},mt={...Ke,settled:!1},ft=()=>{const t=A(3),e=qe(),[n,s]=Fe(void 0);let a,r;return t[0]!==e?(a=()=>{const i=new AbortController;return Ne((async()=>{let o;try{o={...ut(await e.query(ct,{},lt(""))),settled:!0}}catch{o={...Ke,settled:!0}}i.signal.aborted||s({client:e,features:o})})()),()=>{i.abort()}},r=[e],t[0]=e,t[1]=a,t[2]=r):(a=t[1],r=t[2]),Ue(a,r),n?.client===e?n.features:mt},pt=()=>{const t=A(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=l("svg",{"aria-hidden":"true",className:"size-4 text-muted-foreground",fill:"none",stroke:"currentColor",strokeWidth:1.6,viewBox:"0 0 24 24",children:l("path",{d:"m9 6 6 6-6 6",strokeLinecap:"round",strokeLinejoin:"round"})}),t[0]=e):e=t[0],e},ht=t=>{const e=A(24),{group:n}=t,s=I(),a=Je();let r;e[0]!==n.tab||e[1]!==a?(r=()=>{Ne(a({to:`/${n.tab}`}))},e[0]=n.tab,e[1]=a,e[2]=r):r=e[2];const i=r,o=n.bindings.length;let c;e[3]!==n.label?(c=l("span",{className:"text-sm font-medium text-foreground",children:n.label}),e[3]=n.label,e[4]=c):c=e[4];let u;e[5]===Symbol.for("react.memo_cache_sentinel")?(u=l(pt,{}),e[5]=u):u=e[5];let m;e[6]!==c?(m=h("div",{className:"flex items-center justify-between",children:[c,u]}),e[6]=c,e[7]=m):m=e[7];let d;e[8]!==o||e[9]!==s?(d=o===1?s("1 binding"):s("{count} bindings",{count:o}),e[8]=o,e[9]=s,e[10]=d):d=e[10];let f;e[11]!==d?(f=l("span",{className:"text-xs text-muted-foreground",children:d}),e[11]=d,e[12]=f):f=e[12];let p;e[13]!==o||e[14]!==n.bindings?(p=o>0&&l("div",{className:"flex flex-wrap gap-1.5",children:n.bindings.map(bt)}),e[13]=o,e[14]=n.bindings,e[15]=p):p=e[15];let g;e[16]!==m||e[17]!==f||e[18]!==p?(g=h(Ze,{className:"flex flex-col gap-2 py-4",children:[m,f,p]}),e[16]=m,e[17]=f,e[18]=p,e[19]=g):g=e[19];let x;return e[20]!==n.testId||e[21]!==i||e[22]!==g?(x=l(B,{className:"cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/40","data-testid":n.testId,onClick:i,children:g}),e[20]=n.testId,e[21]=i,e[22]=g,e[23]=x):x=e[23],x},We=["kv","files","vectors"],gt=(t,e)=>[...t.filter(n=>n.tab!==e.tab),e].toSorted((n,s)=>We.indexOf(n.tab)-We.indexOf(s.tab)),xt=()=>{const t=A(19),e=qe(),n=ft(),s=I();let a;t[0]===Symbol.for("react.memo_cache_sentinel")?(a=[],t[0]=a):a=t[0];const[r,i]=Fe(a);let o,c;if(t[1]!==e||t[2]!==n.kv||t[3]!==n.storage||t[4]!==n.vectors||t[5]!==s?(o=()=>{const g={cancelled:!1},x=[{enabled:n.kv,label:s("KV Namespaces"),load:async()=>(await e.listKvNamespaces()).map(yt),tab:"kv",testId:"home-binding-kv"},{enabled:n.storage,label:s("R2 Buckets"),load:()=>e.listStorageBuckets(),tab:"files",testId:"home-binding-r2"},{enabled:n.vectors,label:s("Vectorize Indexes"),load:async()=>(await e.listVectorIndexes()).map(vt),tab:"vectors",testId:"home-binding-vectors"}];for(const b of x)b.enabled&&Ne((async()=>{try{const v=await b.load();if(!g.cancelled){const _={bindings:v,label:b.label,tab:b.tab,testId:b.testId};i(S=>gt(S,_))}}catch{}})());return()=>{g.cancelled=!0}},c=[e,n.kv,n.storage,n.vectors,s],t[1]=e,t[2]=n.kv,t[3]=n.storage,t[4]=n.vectors,t[5]=s,t[6]=o,t[7]=c):(o=t[6],c=t[7]),Ue(o,c),r.length===0)return null;let u;t[8]!==s?(u=s("Bindings"),t[8]=s,t[9]=u):u=t[9];let m;t[10]!==u?(m=l("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:u}),t[10]=u,t[11]=m):m=t[11];let d;t[12]!==r?(d=r.map(Nt),t[12]=r,t[13]=d):d=t[13];let f;t[14]!==d?(f=l("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:d}),t[14]=d,t[15]=f):f=t[15];let p;return t[16]!==m||t[17]!==f?(p=h("section",{className:"flex flex-col gap-3","data-testid":"home-bindings",children:[m,f]}),t[16]=m,t[17]=f,t[18]=p):p=t[18],p};function bt(t){return l(Ye,{variant:"secondary",children:t},t)}function yt(t){return t.binding}function vt(t){return t.name}function Nt(t){return l(ht,{group:t},t.tab)}const _t=[{name:"lunora_list_functions",summary:"list every query, mutation, and action with its path"},{name:"lunora_list_tables",summary:"list the schema's tables"},{name:"lunora_get_function_schema",summary:"read a function's argument JSON Schema before calling it"},{name:"lunora_run_query",summary:"run a read-only query"},{name:"lunora_run_mutation",summary:"run a mutation — writes; only when LUNORA_MCP_ALLOW_WRITES is set"},{name:"lunora_run_action",summary:"run an action — writes/effects; only when LUNORA_MCP_ALLOW_WRITES is set"}],St=t=>JSON.stringify({mcpServers:{lunora:{args:["-y","@lunora/mcp"],command:"npx",env:{LUNORA_ADMIN_TOKEN:"<your-admin-token>",LUNORA_URL:t}}}},null,2),kt=t=>{const e=_t.map(n=>`- ${n.name} — ${n.summary}`).join(`
|
|
1
|
+
import{c as A}from"react/compiler-runtime";import{useNavigate as Je}from"@tanstack/react-router";import{useState as Fe,useEffect as Ue,Suspense as et,lazy as tt}from"react";import{B as Ye}from"./badge-r_5B4LHP.mjs";import{C as B,a as Ze}from"./card-By2O8ULa.mjs";import{E as st}from"./empty-state-D7jEML_T.mjs";import{u as ve}from"./use-admin-query-tlBof8Yg.mjs";import{useT as I}from"./DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as ye}from"./ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as nt,f as Ne,d as lt,w as at,g as rt,m as ot}from"./internal-Df43vQI0.mjs";import{c as Xe}from"./utils-bhneXptQ.mjs";import{deriveInsights as it}from"./DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{useLunora as qe}from"@lunora/react";import{jsx as l,jsxs as h}from"react/jsx-runtime";import{B as Ve}from"./button-q0UYSmrn.mjs";const ct=nt(ye.studioFeatures),Ke={analytics:!0,auth:!0,containers:!0,flags:!0,kv:!0,mail:!0,notifications:!0,payments:!0,privacy:!0,queues:!0,scheduler:!0,storage:!0,vectors:!0,workflows:!0},dt=t=>{if(t===null||typeof t!="object")return;const{id:e,name:n,unsupported:s}=t;if(!(typeof e!="string"||typeof n!="string"||!Array.isArray(s)))return{id:e,name:n,unsupported:s.filter(a=>typeof a=="string")}},ut=t=>{if(t===null||typeof t!="object")return Ke;const e=t,n=s=>typeof e[s]=="boolean"?e[s]:!0;return{analytics:n("analytics"),auth:n("auth"),containers:n("containers"),flags:n("flags"),kv:n("kv"),mail:n("mail"),notifications:n("notifications"),payments:n("payments"),privacy:n("privacy"),platform:dt(e.platform),queues:n("queues"),scheduler:n("scheduler"),storage:n("storage"),vectors:n("vectors"),workflows:n("workflows")}},mt={...Ke,settled:!1},ft=()=>{const t=A(3),e=qe(),[n,s]=Fe(void 0);let a,r;return t[0]!==e?(a=()=>{const i=new AbortController;return Ne((async()=>{let o;try{o={...ut(await e.query(ct,{},lt(""))),settled:!0}}catch{o={...Ke,settled:!0}}i.signal.aborted||s({client:e,features:o})})()),()=>{i.abort()}},r=[e],t[0]=e,t[1]=a,t[2]=r):(a=t[1],r=t[2]),Ue(a,r),n?.client===e?n.features:mt},pt=()=>{const t=A(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=l("svg",{"aria-hidden":"true",className:"size-4 text-muted-foreground",fill:"none",stroke:"currentColor",strokeWidth:1.6,viewBox:"0 0 24 24",children:l("path",{d:"m9 6 6 6-6 6",strokeLinecap:"round",strokeLinejoin:"round"})}),t[0]=e):e=t[0],e},ht=t=>{const e=A(24),{group:n}=t,s=I(),a=Je();let r;e[0]!==n.tab||e[1]!==a?(r=()=>{Ne(a({to:`/${n.tab}`}))},e[0]=n.tab,e[1]=a,e[2]=r):r=e[2];const i=r,o=n.bindings.length;let c;e[3]!==n.label?(c=l("span",{className:"text-sm font-medium text-foreground",children:n.label}),e[3]=n.label,e[4]=c):c=e[4];let u;e[5]===Symbol.for("react.memo_cache_sentinel")?(u=l(pt,{}),e[5]=u):u=e[5];let m;e[6]!==c?(m=h("div",{className:"flex items-center justify-between",children:[c,u]}),e[6]=c,e[7]=m):m=e[7];let d;e[8]!==o||e[9]!==s?(d=o===1?s("1 binding"):s("{count} bindings",{count:o}),e[8]=o,e[9]=s,e[10]=d):d=e[10];let f;e[11]!==d?(f=l("span",{className:"text-xs text-muted-foreground",children:d}),e[11]=d,e[12]=f):f=e[12];let p;e[13]!==o||e[14]!==n.bindings?(p=o>0&&l("div",{className:"flex flex-wrap gap-1.5",children:n.bindings.map(bt)}),e[13]=o,e[14]=n.bindings,e[15]=p):p=e[15];let g;e[16]!==m||e[17]!==f||e[18]!==p?(g=h(Ze,{className:"flex flex-col gap-2 py-4",children:[m,f,p]}),e[16]=m,e[17]=f,e[18]=p,e[19]=g):g=e[19];let x;return e[20]!==n.testId||e[21]!==i||e[22]!==g?(x=l(B,{className:"cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/40","data-testid":n.testId,onClick:i,children:g}),e[20]=n.testId,e[21]=i,e[22]=g,e[23]=x):x=e[23],x},We=["kv","files","vectors"],gt=(t,e)=>[...t.filter(n=>n.tab!==e.tab),e].toSorted((n,s)=>We.indexOf(n.tab)-We.indexOf(s.tab)),xt=()=>{const t=A(19),e=qe(),n=ft(),s=I();let a;t[0]===Symbol.for("react.memo_cache_sentinel")?(a=[],t[0]=a):a=t[0];const[r,i]=Fe(a);let o,c;if(t[1]!==e||t[2]!==n.kv||t[3]!==n.storage||t[4]!==n.vectors||t[5]!==s?(o=()=>{const g={cancelled:!1},x=[{enabled:n.kv,label:s("KV Namespaces"),load:async()=>(await e.listKvNamespaces()).map(yt),tab:"kv",testId:"home-binding-kv"},{enabled:n.storage,label:s("R2 Buckets"),load:()=>e.listStorageBuckets(),tab:"files",testId:"home-binding-r2"},{enabled:n.vectors,label:s("Vectorize Indexes"),load:async()=>(await e.listVectorIndexes()).map(vt),tab:"vectors",testId:"home-binding-vectors"}];for(const b of x)b.enabled&&Ne((async()=>{try{const v=await b.load();if(!g.cancelled){const _={bindings:v,label:b.label,tab:b.tab,testId:b.testId};i(S=>gt(S,_))}}catch{}})());return()=>{g.cancelled=!0}},c=[e,n.kv,n.storage,n.vectors,s],t[1]=e,t[2]=n.kv,t[3]=n.storage,t[4]=n.vectors,t[5]=s,t[6]=o,t[7]=c):(o=t[6],c=t[7]),Ue(o,c),r.length===0)return null;let u;t[8]!==s?(u=s("Bindings"),t[8]=s,t[9]=u):u=t[9];let m;t[10]!==u?(m=l("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:u}),t[10]=u,t[11]=m):m=t[11];let d;t[12]!==r?(d=r.map(Nt),t[12]=r,t[13]=d):d=t[13];let f;t[14]!==d?(f=l("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:d}),t[14]=d,t[15]=f):f=t[15];let p;return t[16]!==m||t[17]!==f?(p=h("section",{className:"flex flex-col gap-3","data-testid":"home-bindings",children:[m,f]}),t[16]=m,t[17]=f,t[18]=p):p=t[18],p};function bt(t){return l(Ye,{variant:"secondary",children:t},t)}function yt(t){return t.binding}function vt(t){return t.name}function Nt(t){return l(ht,{group:t},t.tab)}const _t=[{name:"lunora_list_functions",summary:"list every query, mutation, and action with its path"},{name:"lunora_list_tables",summary:"list the schema's tables"},{name:"lunora_get_function_schema",summary:"read a function's argument JSON Schema before calling it"},{name:"lunora_run_query",summary:"run a read-only query"},{name:"lunora_run_mutation",summary:"run a mutation — writes; only when LUNORA_MCP_ALLOW_WRITES is set"},{name:"lunora_run_action",summary:"run an action — writes/effects; only when LUNORA_MCP_ALLOW_WRITES is set"}],St=t=>JSON.stringify({mcpServers:{lunora:{args:["-y","@lunora/mcp"],command:"npx",env:{LUNORA_ADMIN_TOKEN:"<your-admin-token>",LUNORA_URL:t}}}},null,2),kt=t=>{const e=_t.map(n=>`- ${n.name} — ${n.summary}`).join(`
|
|
2
2
|
`);return[`You have a Lunora MCP server connected to the deployment at ${t}.`,"It exposes this backend's functions and schema so you can inspect and operate it:",e,"",`Start by calling lunora_list_functions and lunora_list_tables to learn what exists, then lunora_get_function_schema before any run call. The full HTTP API is also documented at ${t}/_lunora/admin/openapi (that endpoint needs the same admin token the MCP server is configured with).`].join(`
|
|
3
3
|
`)},wt=1500,Ct=()=>{const t=A(40),e=I(),{url:n}=qe();let s;t[0]!==n?(s=at(n),t[0]=n,t[1]=s):s=t[1];const a=s,[r,i]=Fe(null);let o,c;t[2]!==r?(o=()=>{if(r===null)return;const M=globalThis.setTimeout(()=>{i(null)},wt);return()=>{globalThis.clearTimeout(M)}},c=[r],t[2]=r,t[3]=o,t[4]=c):(o=t[3],c=t[4]),Ue(o,c);let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u=(M,T)=>{rt(T)&&i(M)},t[5]=u):u=t[5];const m=u;let d;t[6]!==a?(d=()=>{m("config",St(a))},t[6]=a,t[7]=d):d=t[7];const f=d;let p;t[8]!==a?(p=()=>{m("prompt",kt(a))},t[8]=a,t[9]=p):p=t[9];const g=p;let x;t[10]!==e?(x=e("Connect an AI agent"),t[10]=e,t[11]=x):x=t[11];let b;t[12]!==x?(b=l("span",{className:"text-sm font-medium text-foreground",children:x}),t[12]=x,t[13]=b):b=t[13];let v;t[14]!==e?(v=e("Drive this deployment from an AI agent over the Model Context Protocol — it can list functions and tables, read schemas, and run read-only queries. Writes stay off unless you opt in."),t[14]=e,t[15]=v):v=t[15];let _;t[16]!==v?(_=l("span",{className:"text-xs text-muted-foreground",children:v}),t[16]=v,t[17]=_):_=t[17];let S;t[18]!==b||t[19]!==_?(S=h("div",{className:"flex flex-col gap-1.5 p-4",children:[b,_]}),t[18]=b,t[19]=_,t[20]=S):S=t[20];let L;t[21]===Symbol.for("react.memo_cache_sentinel")?(L=l("code",{className:"font-mono text-xs text-muted-foreground","data-testid":"home-connect-agent-command",children:"npx -y @lunora/mcp"}),t[21]=L):L=t[21];let y;t[22]!==r||t[23]!==e?(y=e(r==="config"?"Copied":"Copy MCP config"),t[22]=r,t[23]=e,t[24]=y):y=t[24];let k;t[25]!==f||t[26]!==y?(k=l(Ve,{"data-testid":"home-connect-agent-copy-config",onClick:f,size:"xs",variant:"outline",children:y}),t[25]=f,t[26]=y,t[27]=k):k=t[27];let w;t[28]!==r||t[29]!==e?(w=e(r==="prompt"?"Copied":"Copy agent prompt"),t[28]=r,t[29]=e,t[30]=w):w=t[30];let C;t[31]!==g||t[32]!==w?(C=l(Ve,{"data-testid":"home-connect-agent-copy-prompt",onClick:g,size:"xs",variant:"outline",children:w}),t[31]=g,t[32]=w,t[33]=C):C=t[33];let N;t[34]!==k||t[35]!==C?(N=h("div",{className:"flex flex-col gap-3 border-t border-border bg-muted/50 px-4 py-3",children:[L,h("div",{className:"flex flex-wrap gap-2",children:[k,C]})]}),t[34]=k,t[35]=C,t[36]=N):N=t[36];let $;return t[37]!==S||t[38]!==N?($=h(B,{className:"gap-0 py-0","data-testid":"home-connect-agent",children:[S,N]}),t[37]=S,t[38]=N,t[39]=$):$=t[39],$},At=tt(()=>import("../packem_chunks/sparkline.mjs")),$t=(t,e)=>{if(e==null)return t("cache not enabled");const n=e.hits+e.misses;return n===0?t("no cache traffic yet"):`${Math.round(e.hits/n*100).toString()}% ${t("cache hit")}`},Pe=t=>{if(t<1e3)return`${String(Math.round(t))}ms`;const e=t>=1e4?0:1;return`${(t/1e3).toFixed(e)}s`},Lt=(t,e)=>{const n=Math.max(0,Math.round((e-t)/1e3));if(n<60)return`${String(n)}s ago`;const s=Math.round(n/60);if(s<60)return`${String(s)}m ago`;const a=Math.round(s/60);return a<24?`${String(a)}h ago`:`${String(Math.round(a/24))}d ago`},Qe=(t,e)=>{if(t===void 0||t.length===0)return[];const n=new Map;for(const s of t)n.set(s.bucketMs,(n.get(s.bucketMs)??0)+s[e]);return[...n.entries()].toSorted(([s],[a])=>s-a).map(([,s])=>s)},He=(t,e=!0)=>{if(t.length<4)return null;const n=Math.floor(t.length/2),s=t.slice(0,n).reduce((i,o)=>i+o,0),a=t.slice(n).reduce((i,o)=>i+o,0);if(s===0)return null;const r=(a-s)/s*100;return{positive:e?r>=0:r<=0,text:`${r>=0?"+":""}${r.toFixed(1)}%`}},Te=t=>{const e=A(24),{delta:n,footer:s,label:a,trend:r,unit:i,value:o}=t,c=I();let u;e[0]!==a?(u=l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a}),e[0]=a,e[1]=u):u=e[1];let m;e[2]!==o?(m=l("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:o}),e[2]=o,e[3]=m):m=e[3];let d;e[4]!==i?(d=i!==void 0&&l("span",{className:"text-xs text-muted-foreground",children:i}),e[4]=i,e[5]=d):d=e[5];let f;e[6]!==m||e[7]!==d?(f=h("span",{className:"flex items-baseline gap-1.5",children:[m,d]}),e[6]=m,e[7]=d,e[8]=f):f=e[8];let p;e[9]!==r?(p=r!==void 0&&l(et,{fallback:l("div",{"aria-hidden":"true",className:"h-8 w-28"}),children:l(At,{data:r})}),e[9]=r,e[10]=p):p=e[10];let g;e[11]!==f||e[12]!==p?(g=h("div",{className:"flex items-center justify-between gap-3",children:[f,p]}),e[11]=f,e[12]=p,e[13]=g):g=e[13];let x;e[14]!==u||e[15]!==g?(x=h("div",{className:"flex flex-col gap-2.5 p-4",children:[u,g]}),e[14]=u,e[15]=g,e[16]=x):x=e[16];let b;e[17]!==n||e[18]!==s||e[19]!==c?(b=n==null?s!=null&&l("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:s}):h("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px]",children:[l("span",{className:Xe("font-semibold",n.positive?"text-success":"text-destructive"),children:n.text})," ",l("span",{className:"text-muted-foreground",children:c("vs. prev.")})]}),e[17]=n,e[18]=s,e[19]=c,e[20]=b):b=e[20];let v;return e[21]!==x||e[22]!==b?(v=h(B,{className:"justify-between gap-0 py-0",children:[x,b]}),e[21]=x,e[22]=b,e[23]=v):v=e[23],v},Mt=()=>{const t=A(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=l("svg",{"aria-hidden":"true",className:"size-3.5",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.8,viewBox:"0 0 24 24",children:l("path",{d:"m9 6 6 6-6 6"})}),t[0]=e):e=t[0],e},De=t=>{const e=A(7),{command:n,label:s}=t;let a;e[0]!==s?(a=l("div",{className:"p-4",children:l("span",{className:"text-sm font-medium text-foreground",children:s})}),e[0]=s,e[1]=a):a=e[1];let r;e[2]!==n?(r=l("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5",children:l("code",{className:"font-mono text-xs text-muted-foreground",children:n})}),e[2]=n,e[3]=r):r=e[3];let i;return e[4]!==a||e[5]!==r?(i=h(B,{className:"justify-between gap-0 py-0",children:[a,r]}),e[4]=a,e[5]=r,e[6]=i):i=e[6],i},Ge=t=>{const e=A(18),{count:n,onView:s,testId:a,title:r}=t,i=I();let o;e[0]!==r?(o=l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r}),e[0]=r,e[1]=o):o=e[1];let c;e[2]!==n||e[3]!==i?(c=n===null?l("span",{className:"text-xs text-muted-foreground",children:i("No data yet")}):l(Ye,{variant:n>0?"destructive":"success",children:n>0?n:i("All clear")}),e[2]=n,e[3]=i,e[4]=c):c=e[4];let u;e[5]!==o||e[6]!==c?(u=h("div",{className:"flex items-start justify-between gap-2 p-4",children:[o,c]}),e[5]=o,e[6]=c,e[7]=u):u=e[7];let m;e[8]!==i?(m=i("View"),e[8]=i,e[9]=m):m=e[9];let d;e[10]===Symbol.for("react.memo_cache_sentinel")?(d=l(Mt,{}),e[10]=d):d=e[10];let f;e[11]!==s||e[12]!==m?(f=h("button",{className:"flex items-center gap-1 border-t border-border bg-muted/50 px-4 py-2.5 text-[12px] font-medium text-foreground outline-none transition-colors hover:bg-muted focus-visible:bg-muted",onClick:s,type:"button",children:[m,d]}),e[11]=s,e[12]=m,e[13]=f):f=e[13];let p;return e[14]!==u||e[15]!==f||e[16]!==a?(p=h(B,{className:"justify-between gap-0 py-0","data-testid":a,children:[u,f]}),e[14]=u,e[15]=f,e[16]=a,e[17]=p):p=e[17],p},It=t=>{const e=A(7),{functions:n}=t,s=I();let a;if(e[0]!==n||e[1]!==s){const r=[...n].toSorted(Et).slice(0,5);let i;e[3]!==s?(i=s("Top functions"),e[3]=s,e[4]=i):i=e[4];let o;e[5]!==i?(o=l("div",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:i})}),e[5]=i,e[6]=o):o=e[6],a=h(B,{className:"gap-0 py-0","data-testid":"home-top-functions",children:[o,r.length===0?l("p",{className:"px-4 py-8 text-center text-xs text-muted-foreground",children:s("No functions called yet.")}):h("div",{className:"divide-y divide-border",children:[h("div",{className:"grid grid-cols-[1fr_auto_auto_auto] gap-4 px-4 py-1.5 font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:[l("span",{children:s("Function")}),l("span",{className:"text-end",children:s("Calls")}),l("span",{className:"w-12 text-end",children:s("Avg")}),l("span",{className:"w-8 text-end",children:s("Err")})]}),r.map(jt)]})]}),e[0]=n,e[1]=s,e[2]=a}else a=e[2];return a},Tt=t=>{const e=A(26),{subs:n}=t,s=I();let a;e[0]!==s?(a=s("Live connections"),e[0]=s,e[1]=a):a=e[1];let r;e[2]!==a?(r=l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a}),e[2]=a,e[3]=r):r=e[3];const i=n?.totalConnections??0;let o;e[4]!==i?(o=i.toLocaleString(),e[4]=i,e[5]=o):o=e[5];let c;e[6]!==o?(c=l("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:o}),e[6]=o,e[7]=c):c=e[7];let u;e[8]!==s?(u=s("sockets"),e[8]=s,e[9]=u):u=e[9];let m;e[10]!==u?(m=l("span",{className:"text-xs text-muted-foreground",children:u}),e[10]=u,e[11]=m):m=e[11];let d;e[12]!==c||e[13]!==m?(d=h("span",{className:"flex items-baseline gap-1.5",children:[c,m]}),e[12]=c,e[13]=m,e[14]=d):d=e[14];const f=n?.totalSubscriptions??0;let p;e[15]!==f?(p=f.toLocaleString(),e[15]=f,e[16]=p):p=e[16];let g;e[17]!==s?(g=s("active subscriptions"),e[17]=s,e[18]=g):g=e[18];let x;e[19]!==p||e[20]!==g?(x=h("span",{className:"text-[11px] text-muted-foreground",children:[p," ",g]}),e[19]=p,e[20]=g,e[21]=x):x=e[21];let b;return e[22]!==x||e[23]!==r||e[24]!==d?(b=l(B,{"data-testid":"home-live-connections",children:h(Ze,{className:"flex flex-col gap-2.5 py-4",children:[r,d,x]})}),e[22]=x,e[23]=r,e[24]=d,e[25]=b):b=e[25],b},Ot=t=>{const e=A(7),{entries:n}=t,s=I();let a;if(e[0]!==n||e[1]!==s){const r=Date.now();let i;e[3]!==s?(i=s("Recent activity"),e[3]=s,e[4]=i):i=e[4];let o;e[5]!==i?(o=l("div",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:i})}),e[5]=i,e[6]=o):o=e[6],a=h(B,{className:"gap-0 py-0","data-testid":"home-recent-activity",children:[o,n.length===0?l("p",{className:"px-4 py-8 text-center text-xs text-muted-foreground",children:s("No recent activity.")}):l("ul",{className:"divide-y divide-border",children:n.slice(0,5).map(c=>h("li",{className:"flex items-center justify-between gap-3 px-4 py-2 text-[13px]",children:[h("span",{className:"flex min-w-0 items-center gap-2",children:[l("span",{"aria-hidden":"true",className:"size-1.5 shrink-0 rounded-full bg-muted-foreground/40"}),h("span",{className:"truncate text-foreground",children:[c.op,c.table!==void 0&&h("span",{className:"text-muted-foreground",children:[" · ",c.table,c.id===void 0?"":`#${c.id}`]})]})]}),l("span",{className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:Lt(c.ts,r)})]},c.seq))})]}),e[0]=n,e[1]=s,e[2]=a}else a=e[2];return a},Rt=t=>{const e=t.reduce((n,s)=>n+s.calls,0);return e===0?null:t.reduce((n,s)=>n+s.totalDurationMs,0)/e},Xt=t=>{const e=A(149),{initialShardKey:n}=t,s=I(),a=Je(),r=n??"";let i;e[0]===Symbol.for("react.memo_cache_sentinel")?(i={},e[0]=i):i=e[0];let o;e[1]!==r?(o={shardKey:r},e[1]=r,e[2]=o):o=e[2];const c=ve(ye.getMetrics,i,o);let u;e[3]===Symbol.for("react.memo_cache_sentinel")?(u={},e[3]=u):u=e[3];let m;e[4]!==r?(m={shardKey:r},e[4]=r,e[5]=m):m=e[5];const d=ve(ye.getFunctionStats,u,m);let f,p;e[6]===Symbol.for("react.memo_cache_sentinel")?(f={},p={shardKey:""},e[6]=f,e[7]=p):(f=e[6],p=e[7]);const g=ve(ye.getSecurityAudit,f,p);let x;e[8]===Symbol.for("react.memo_cache_sentinel")?(x={},e[8]=x):x=e[8];let b;e[9]!==r?(b={shardKey:r},e[9]=r,e[10]=b):b=e[10];const v=ve(ye.listSubscriptions,x,b);let _;e[11]===Symbol.for("react.memo_cache_sentinel")?(_={},e[11]=_):_=e[11];let S;e[12]!==r?(S={shardKey:r},e[12]=r,e[13]=S):S=e[13];const L=ve(ye.getAuditLog,_,S),y=c.data??null;let k,w,C,N,$,M,T,O,R,D,P,F,E,j,U,q,K,z;if(e[14]!==L.data||e[15]!==g.data||e[16]!==y||e[17]!==c.data||e[18]!==a||e[19]!==d.data||e[20]!==v.data||e[21]!==s){N=Array.isArray(d.data?.functions)?d.data.functions:[],T=v.data??null;let we;e[40]!==L.data?(we=Array.isArray(L.data?.entries)?L.data.entries:[],e[40]=L.data,e[41]=we):we=e[41],w=we,$=c.data===void 0||d.data===void 0?null:it(y,N).length,M=Array.isArray(g.data?.findings)?g.data.findings.length:null;let Ce;e[42]!==a?(Ce=()=>{Ne(a({to:"/security"}))},e[42]=a,e[43]=Ce):Ce=e[43],z=Ce;let Ae;e[44]!==a?(Ae=()=>{Ne(a({to:"/insights"}))},e[44]=a,e[45]=Ae):Ae=e[45],K=Ae;const $e=Qe(y?.history,"calls"),Le=Qe(y?.history,"errors"),ze=Rt(N),Me=Math.max(0,...N.map(Bt));let Ie;e[46]!==y||e[47]!==s?(Ie=y===null?void 0:$t(s,y.cache),e[46]=y,e[47]=s,e[48]=Ie):Ie=e[48],C=Ie,U="flex flex-col gap-6",q="lunora-home",P="grid gap-3 sm:grid-cols-2 xl:grid-cols-4",F="home-health";const Re=He($e);let he;e[49]!==s?(he=s("Requests"),e[49]=s,e[50]=he):he=e[50];const Ee=y?.requests??0;let ge;e[51]!==Ee?(ge=Ee.toLocaleString(),e[51]=Ee,e[52]=ge):ge=e[52],e[53]!==$e||e[54]!==Re||e[55]!==he||e[56]!==ge?(E=l(Te,{delta:Re,label:he,trend:$e,value:ge}),e[53]=$e,e[54]=Re,e[55]=he,e[56]=ge,e[57]=E):E=e[57];const je=He(Le,!1);let xe;e[58]!==s?(xe=s("Errors"),e[58]=s,e[59]=xe):xe=e[59];const Be=y?.errors??0;let be;e[60]!==Be?(be=Be.toLocaleString(),e[60]=Be,e[61]=be):be=e[61],e[62]!==Le||e[63]!==je||e[64]!==xe||e[65]!==be?(j=l(Te,{delta:je,label:xe,trend:Le,value:be}),e[62]=Le,e[63]=je,e[64]=xe,e[65]=be,e[66]=j):j=e[66],k=Te,e[67]!==Me||e[68]!==s?(O=Me>0?`${s("max")} ${Pe(Me)}`:void 0,e[67]=Me,e[68]=s,e[69]=O):O=e[69],e[70]!==s?(R=s("Avg latency"),e[70]=s,e[71]=R):R=e[71],D=ze===null?"—":Pe(ze),e[14]=L.data,e[15]=g.data,e[16]=y,e[17]=c.data,e[18]=a,e[19]=d.data,e[20]=v.data,e[21]=s,e[22]=k,e[23]=w,e[24]=C,e[25]=N,e[26]=$,e[27]=M,e[28]=T,e[29]=O,e[30]=R,e[31]=D,e[32]=P,e[33]=F,e[34]=E,e[35]=j,e[36]=U,e[37]=q,e[38]=K,e[39]=z}else k=e[22],w=e[23],C=e[24],N=e[25],$=e[26],M=e[27],T=e[28],O=e[29],R=e[30],D=e[31],P=e[32],F=e[33],E=e[34],j=e[35],U=e[36],q=e[37],K=e[38],z=e[39];let V;e[72]!==k||e[73]!==O||e[74]!==R||e[75]!==D?(V=l(k,{footer:O,label:R,value:D}),e[72]=k,e[73]=O,e[74]=R,e[75]=D,e[76]=V):V=e[76];let W;e[77]!==s?(W=s("Database size"),e[77]=s,e[78]=W):W=e[78];const Oe=y?.databaseSize??null;let Q;e[79]!==Oe?(Q=ot(Oe),e[79]=Oe,e[80]=Q):Q=e[80];let H;e[81]!==C||e[82]!==W||e[83]!==Q?(H=l(Te,{footer:C,label:W,value:Q}),e[81]=C,e[82]=W,e[83]=Q,e[84]=H):H=e[84];let G;e[85]!==P||e[86]!==F||e[87]!==E||e[88]!==j||e[89]!==V||e[90]!==H?(G=h("div",{className:P,"data-testid":F,children:[E,j,V,H]}),e[85]=P,e[86]=F,e[87]=E,e[88]=j,e[89]=V,e[90]=H,e[91]=G):G=e[91];let _e;e[92]===Symbol.for("react.memo_cache_sentinel")?(_e=l(xt,{}),e[92]=_e):_e=e[92];let J;e[93]!==N?(J=l("div",{className:"lg:col-span-2",children:l(It,{functions:N})}),e[93]=N,e[94]=J):J=e[94];let Y;e[95]!==T?(Y=l(Tt,{subs:T}),e[95]=T,e[96]=Y):Y=e[96];let Z;e[97]!==w?(Z=l(Ot,{entries:w}),e[97]=w,e[98]=Z):Z=e[98];let X;e[99]!==Y||e[100]!==Z?(X=h("div",{className:"flex flex-col gap-3",children:[Y,Z]}),e[99]=Y,e[100]=Z,e[101]=X):X=e[101];let ee;e[102]!==J||e[103]!==X?(ee=h("div",{className:"grid gap-3 lg:grid-cols-3",children:[J,X]}),e[102]=J,e[103]=X,e[104]=ee):ee=e[104];let te;e[105]!==s?(te=s("Advisors"),e[105]=s,e[106]=te):te=e[106];let se;e[107]!==te?(se=l("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:te}),e[107]=te,e[108]=se):se=e[108];let ne;e[109]!==$||e[110]!==M||e[111]!==s||e[112]!==K||e[113]!==z?(ne=M===0&&$===0?l(st,{description:s("No security or performance issues detected."),icon:h("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[l("path",{d:"M12 3 4 6v5c0 5 3.4 8.5 8 10 4.6-1.5 8-5 8-10V6l-8-3Z"}),l("path",{d:"m9 12 2 2 4-4"})]}),testId:"home-advisors-clear",title:s("No issues found")}):h("div",{className:"grid gap-3 sm:grid-cols-2",children:[l(Ge,{count:M,onView:z,testId:"home-security",title:s("Security findings")}),l(Ge,{count:$,onView:K,testId:"home-performance",title:s("Performance issues")})]}),e[109]=$,e[110]=M,e[111]=s,e[112]=K,e[113]=z,e[114]=ne):ne=e[114];let le;e[115]!==se||e[116]!==ne?(le=h("section",{className:"flex flex-col gap-3","data-testid":"home-advisors",children:[se,ne]}),e[115]=se,e[116]=ne,e[117]=le):le=e[117];let ae;e[118]!==s?(ae=s("Get connected"),e[118]=s,e[119]=ae):ae=e[119];let re;e[120]!==ae?(re=l("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:ae}),e[120]=ae,e[121]=re):re=e[121];let oe;e[122]!==s?(oe=s("Client SDK"),e[122]=s,e[123]=oe):oe=e[123];let ie;e[124]!==oe?(ie=l(De,{command:"npm i @lunora/client",label:oe}),e[124]=oe,e[125]=ie):ie=e[125];let ce;e[126]!==s?(ce=s("React"),e[126]=s,e[127]=ce):ce=e[127];let de;e[128]!==ce?(de=l(De,{command:"npm i @lunora/react",label:ce}),e[128]=ce,e[129]=de):de=e[129];let ue;e[130]!==s?(ue=s("CLI"),e[130]=s,e[131]=ue):ue=e[131];let me;e[132]!==ue?(me=l(De,{command:"lunora dev",label:ue}),e[132]=ue,e[133]=me):me=e[133];let fe;e[134]!==ie||e[135]!==de||e[136]!==me?(fe=h("div",{className:"grid gap-3 sm:grid-cols-3",children:[ie,de,me]}),e[134]=ie,e[135]=de,e[136]=me,e[137]=fe):fe=e[137];let Se;e[138]===Symbol.for("react.memo_cache_sentinel")?(Se=l(Ct,{}),e[138]=Se):Se=e[138];let pe;e[139]!==re||e[140]!==fe?(pe=h("section",{className:"flex flex-col gap-3","data-testid":"home-get-connected",children:[re,fe,Se]}),e[139]=re,e[140]=fe,e[141]=pe):pe=e[141];let ke;return e[142]!==U||e[143]!==q||e[144]!==G||e[145]!==ee||e[146]!==le||e[147]!==pe?(ke=h("div",{className:U,"data-testid":q,children:[G,_e,ee,le,pe]}),e[142]=U,e[143]=q,e[144]=G,e[145]=ee,e[146]=le,e[147]=pe,e[148]=ke):ke=e[148],ke};function Et(t,e){return e.calls-t.calls}function jt(t){return h("div",{className:"grid grid-cols-[1fr_auto_auto_auto] items-center gap-4 px-4 py-2 text-[13px]",children:[l("span",{className:"truncate font-mono text-xs text-foreground",children:t.path}),l("span",{className:"text-end tabular-nums",children:t.calls.toLocaleString()}),l("span",{className:"w-12 text-end tabular-nums text-muted-foreground",children:Pe(t.calls>0?t.totalDurationMs/t.calls:0)}),l("span",{className:Xe("w-8 text-end tabular-nums",t.errors>0?"text-destructive":"text-muted-foreground"),children:t.errors})]},t.path)}function Bt(t){return t.maxDurationMs}export{Xt as H,$t as c,ft as u};
|