@lunora/studio 1.0.0-alpha.79 → 1.0.0-alpha.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/dist/index.d.ts +28 -14
  2. package/dist/index.js +1 -1
  3. package/dist/mount.d.ts +1 -1
  4. package/dist/mount.js +1 -1
  5. package/dist/packem_chunks/ApiTab.js +1 -1
  6. package/dist/packem_chunks/AuditPanel.js +1 -1
  7. package/dist/packem_chunks/DeploymentHealthPanel.js +1 -1
  8. package/dist/packem_chunks/ExportImportPanel.js +3 -3
  9. package/dist/packem_chunks/FileBrowser.js +4 -4
  10. package/dist/packem_chunks/FunctionRunner.js +1 -1
  11. package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
  12. package/dist/packem_chunks/HealthPanel.js +1 -1
  13. package/dist/packem_chunks/InsightsPanel.js +1 -1
  14. package/dist/packem_chunks/LogsPanel.js +1 -1
  15. package/dist/packem_chunks/MailPanel.js +2 -2
  16. package/dist/packem_chunks/MetricsPanel.js +1 -1
  17. package/dist/packem_chunks/NotificationsPanel.js +1 -1
  18. package/dist/packem_chunks/PitrPanel.js +1 -1
  19. package/dist/packem_chunks/SchemaViewer.js +1 -2
  20. package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
  21. package/dist/packem_chunks/SettingsPanel.js +1 -1
  22. package/dist/packem_chunks/SqlEditorPanel.js +6 -4
  23. package/dist/packem_chunks/TableEditor.js +1 -1
  24. package/dist/packem_chunks/agents-panel.js +1 -1
  25. package/dist/packem_chunks/analytics-panel.js +1 -1
  26. package/dist/packem_chunks/auth-audit-panel.js +1 -1
  27. package/dist/packem_chunks/auth-config-panel.js +1 -1
  28. package/dist/packem_chunks/auth-sessions-panel.js +1 -1
  29. package/dist/packem_chunks/containers-panel.js +1 -1
  30. package/dist/packem_chunks/dashboards-panel.js +1 -1
  31. package/dist/packem_chunks/fanout-panel.js +1 -1
  32. package/dist/packem_chunks/flags-panel.js +1 -1
  33. package/dist/packem_chunks/issues-panel.js +1 -1
  34. package/dist/packem_chunks/kv-browser.js +1 -1
  35. package/dist/packem_chunks/log-drains-panel.js +4 -4
  36. package/dist/packem_chunks/migrations-route.js +1 -0
  37. package/dist/packem_chunks/organizations-panel.js +1 -1
  38. package/dist/packem_chunks/payments-panel.js +1 -1
  39. package/dist/packem_chunks/permissions-panel.js +1 -1
  40. package/dist/packem_chunks/queues-panel.js +1 -1
  41. package/dist/packem_chunks/rls-panel.js +1 -1
  42. package/dist/packem_chunks/schedule-panel.js +1 -1
  43. package/dist/packem_chunks/sparkline.js +1 -1
  44. package/dist/packem_chunks/storage-rules-panel.js +1 -1
  45. package/dist/packem_chunks/subscriptions-panel.js +1 -1
  46. package/dist/packem_chunks/sync-client-panel.js +1 -1
  47. package/dist/packem_chunks/traces-panel.js +1 -1
  48. package/dist/packem_chunks/users-panel.js +1 -1
  49. package/dist/packem_chunks/vector-browser.js +1 -1
  50. package/dist/packem_chunks/workflows-panel.js +1 -1
  51. package/dist/packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js +1 -0
  52. package/dist/packem_shared/ApiDocsPanel-DfUQ1ZAF.js +2 -0
  53. package/dist/packem_shared/{ApiReferencePanel-C42v1jr6.js → ApiReferencePanel-9q8BbJl-.js} +1 -1
  54. package/dist/packem_shared/CommandPalette--SQwfTW1.js +1 -0
  55. package/dist/packem_shared/DataBrowser-CuRlztBz.js +1 -0
  56. package/dist/packem_shared/DataFilters-B26ZeqBZ.js +1 -0
  57. package/dist/packem_shared/GlobalDataBrowser-DB-vQ2_H.js +1 -0
  58. package/dist/packem_shared/HomePanel-Dcs4a3Ax.js +1 -0
  59. package/dist/packem_shared/MigrationsPanel-C2OnsqRb.js +1 -0
  60. package/dist/packem_shared/{OpenRpcReferencePanel-sGsIgYWj.js → OpenRpcReferencePanel-qOZcWXMs.js} +1 -1
  61. package/dist/packem_shared/ScheduledJobs-D8kBZWBu.js +1 -0
  62. package/dist/packem_shared/Studio-B26_pT8J.js +1 -0
  63. package/dist/packem_shared/StudioApp-bXhJeLlZ.js +1 -0
  64. package/dist/packem_shared/advisor-view-Pa8HLtBv.js +1 -0
  65. package/dist/packem_shared/{app.d-bRPJhby-.d.ts → app.d-DW7yZsfu.d.ts} +1 -3
  66. package/dist/packem_shared/bar-chart-DraN_srt.js +9 -0
  67. package/dist/packem_shared/data-grid-DcxyIXwG.js +1 -0
  68. package/dist/packem_shared/data-view-params-ClrV7XgF.js +1 -0
  69. package/dist/packem_shared/error-alert-t6cpEi0z.js +1 -0
  70. package/dist/packem_shared/grid-features-jnrD0SpX.js +6 -0
  71. package/dist/packem_shared/{home-panel-Cm88Nvqh.js → home-panel-CU6MWLHG.js} +2 -2
  72. package/dist/packem_shared/{internal-AtZ4bTal.js → internal-BSIsQVC6.js} +1 -1
  73. package/dist/packem_shared/live-status-CmuRLFKf.js +1 -0
  74. package/dist/packem_shared/operation-console-provider-BMJNtiyB.js +1 -0
  75. package/dist/packem_shared/recording-client-DRAZEmzE.js +1 -0
  76. package/dist/packem_shared/reference-view-DnYYWr7I.js +12 -0
  77. package/dist/packem_shared/result-chart-DzJOVsaw.js +1 -0
  78. package/dist/packem_shared/schema-diagram-cg-bz_VL.js +2 -0
  79. package/dist/packem_shared/{sparkline-DtcZoU48.js → sparkline-CgjeUU2I.js} +1 -1
  80. package/dist/packem_shared/studio-q-C-acL7.js +2 -0
  81. package/dist/packem_shared/table-list-sidebar-BFkSQwlB.js +1 -0
  82. package/dist/packem_shared/use-admin-query-QJ-ibl5u.js +1 -0
  83. package/dist/packem_shared/use-async-submit-q3ymBJkD.js +1 -0
  84. package/dist/packem_shared/{use-auth-config-9S_K_W-G.js → use-auth-config-BObBpdsi.js} +1 -1
  85. package/dist/packem_shared/use-sql-assistant-CHEu2-Rk.js +1 -0
  86. package/dist/standalone/chunk-2GA4SHO7.js +1 -0
  87. package/dist/standalone/{chunk-NG6LYBPJ.js → chunk-2VDFV5TD.js} +1 -1
  88. package/dist/standalone/chunk-2WOIRKEI.js +1 -0
  89. package/dist/standalone/chunk-33CL6OHR.js +1 -0
  90. package/dist/standalone/{chunk-EIT7ERYE.js → chunk-34D36UCW.js} +1 -1
  91. package/dist/standalone/chunk-3C3CG7ZK.js +1 -0
  92. package/dist/standalone/{chunk-6CULAILE.js → chunk-3O3HAXW7.js} +1 -1
  93. package/dist/standalone/{chunk-LSEZN2ZL.js → chunk-3STOIE7Q.js} +1 -1
  94. package/dist/standalone/chunk-53WEPGUD.js +1 -0
  95. package/dist/standalone/chunk-5CVJS7ON.js +1 -0
  96. package/dist/standalone/chunk-6IKEW5LG.js +1 -0
  97. package/dist/standalone/chunk-6LNCYDZO.js +1 -0
  98. package/dist/standalone/chunk-6NY7SPDL.js +1 -0
  99. package/dist/standalone/chunk-6PNPIW6I.js +2 -0
  100. package/dist/standalone/{chunk-AVZGVZZ7.js → chunk-6VAKZALJ.js} +1 -1
  101. package/dist/standalone/chunk-6YI4WJO4.js +1 -0
  102. package/dist/standalone/{chunk-HYT2ZUNP.js → chunk-6YTSSIEJ.js} +2 -2
  103. package/dist/standalone/{chunk-KYF2E5CJ.js → chunk-7LWMHTJ3.js} +1 -1
  104. package/dist/standalone/chunk-A74VSSA2.js +4 -0
  105. package/dist/standalone/chunk-CCVXYYPJ.js +1 -0
  106. package/dist/standalone/chunk-CT5MMH4O.js +1 -0
  107. package/dist/standalone/chunk-CTNB2KIA.js +1 -0
  108. package/dist/standalone/chunk-CU55Y5TV.js +62 -0
  109. package/dist/standalone/chunk-D2RKH6JK.js +1 -0
  110. package/dist/standalone/chunk-E3NMX2VU.js +4 -0
  111. package/dist/standalone/chunk-FNPJ7GJZ.js +1 -0
  112. package/dist/standalone/chunk-FOBRNWBG.js +3 -0
  113. package/dist/standalone/chunk-G6PSMGLD.js +1 -0
  114. package/dist/standalone/chunk-GAX5IZYG.js +8 -0
  115. package/dist/standalone/chunk-GB6U2BPU.js +1 -0
  116. package/dist/standalone/chunk-GEDMLM4A.js +6 -0
  117. package/dist/standalone/chunk-GXSZH7VJ.js +13 -0
  118. package/dist/standalone/chunk-GYKVBKT5.js +1 -0
  119. package/dist/standalone/chunk-H6YOWRFB.js +1 -0
  120. package/dist/standalone/chunk-HJ3E4YF5.js +1 -0
  121. package/dist/standalone/chunk-HJD2YUQS.js +1 -0
  122. package/dist/standalone/chunk-IHQC7J35.js +1 -0
  123. package/dist/standalone/chunk-JLOWAJRR.js +1 -0
  124. package/dist/standalone/chunk-JRMMYIAF.js +1 -0
  125. package/dist/standalone/{chunk-W6TE2I2D.js → chunk-KC44QCN6.js} +1 -1
  126. package/dist/standalone/chunk-KJB7YAKB.js +1 -0
  127. package/dist/standalone/chunk-KLQYC6CC.js +1 -0
  128. package/dist/standalone/{chunk-XQGANNLS.js → chunk-KZ3ALMMP.js} +1 -1
  129. package/dist/standalone/chunk-L7R74G63.js +1 -0
  130. package/dist/standalone/{chunk-3RTTXLMU.js → chunk-OY2RVUZL.js} +1 -1
  131. package/dist/standalone/chunk-P4YLIBCN.js +1 -0
  132. package/dist/standalone/chunk-PZVU2QMX.js +1 -0
  133. package/dist/standalone/{chunk-PRJ4RJDU.js → chunk-Q7O6B7WC.js} +1 -1
  134. package/dist/standalone/chunk-QLQADHFE.js +1 -0
  135. package/dist/standalone/{chunk-7LQWFOEU.js → chunk-QXXIJAD5.js} +1 -1
  136. package/dist/standalone/chunk-QZGTH6WH.js +1 -0
  137. package/dist/standalone/chunk-RJP3WBZ4.js +1 -0
  138. package/dist/standalone/chunk-RNL6BSFM.js +1 -0
  139. package/dist/standalone/chunk-RNRJKBY3.js +4 -0
  140. package/dist/standalone/{chunk-7YEFOSPH.js → chunk-RQ7AFLIV.js} +1 -1
  141. package/dist/standalone/chunk-S252DAFP.js +1 -0
  142. package/dist/standalone/chunk-S2VVR7HI.js +1 -0
  143. package/dist/standalone/chunk-SKW6J4VW.js +1 -0
  144. package/dist/standalone/chunk-T7IUZIF4.js +1 -0
  145. package/dist/standalone/chunk-TTGOOYLF.js +1 -0
  146. package/dist/standalone/chunk-U6TNNM5U.js +1 -0
  147. package/dist/standalone/chunk-VHWOCPRK.js +1 -0
  148. package/dist/standalone/chunk-W6SAOXGH.js +6 -0
  149. package/dist/standalone/{chunk-YCRMVBPW.js → chunk-WBYSSCV2.js} +1 -1
  150. package/dist/standalone/{chunk-LFXFP4IF.js → chunk-X665E2HU.js} +1 -1
  151. package/dist/standalone/chunk-XDAT7LHC.js +1 -0
  152. package/dist/standalone/chunk-XS5LDR52.js +1 -0
  153. package/dist/standalone/chunk-Y5Y7DHFW.js +1 -0
  154. package/dist/standalone/chunk-YJYTMQJI.js +1 -0
  155. package/dist/standalone/chunk-Z2V42P7J.js +1 -0
  156. package/dist/standalone/studio.js +5 -5
  157. package/dist/styles.css +1 -1
  158. package/package.json +1 -1
  159. package/dist/packem_chunks/MigrationsPanel.js +0 -1
  160. package/dist/packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js +0 -1
  161. package/dist/packem_shared/ApiDocsPanel-CjdsxN1t.js +0 -2
  162. package/dist/packem_shared/CommandPalette-CVIaY3j8.js +0 -1
  163. package/dist/packem_shared/DataBrowser-Bfstz_au.js +0 -1
  164. package/dist/packem_shared/DataFilters-Csb30F0C.js +0 -1
  165. package/dist/packem_shared/GlobalDataBrowser-RLJ6NvOs.js +0 -1
  166. package/dist/packem_shared/HomePanel-B8EFM4u3.js +0 -1
  167. package/dist/packem_shared/ScheduledJobs-DUbo6epc.js +0 -1
  168. package/dist/packem_shared/Studio-BDtS9C5g.js +0 -1
  169. package/dist/packem_shared/StudioApp-DjLzIO9E.js +0 -1
  170. package/dist/packem_shared/advisor-view-DaCX9Jy5.js +0 -1
  171. package/dist/packem_shared/bar-chart-AryFCeoa.js +0 -9
  172. package/dist/packem_shared/data-grid-BMBKzMEJ.js +0 -1
  173. package/dist/packem_shared/data-view-params-C8T3bW1z.js +0 -1
  174. package/dist/packem_shared/error-alert-B59DnrDI.js +0 -1
  175. package/dist/packem_shared/grid-features-uZCUj955.js +0 -6
  176. package/dist/packem_shared/live-status-CGW2JHf_.js +0 -1
  177. package/dist/packem_shared/reference-view-KvhektwF.js +0 -12
  178. package/dist/packem_shared/result-chart-CwKhhKM0.js +0 -1
  179. package/dist/packem_shared/studio-BmWFd-Rz.js +0 -2
  180. package/dist/packem_shared/table-list-sidebar-CMCcNALK.js +0 -1
  181. package/dist/packem_shared/use-admin-query-Di3fLE8H.js +0 -1
  182. package/dist/packem_shared/use-async-submit-DLNCqLFq.js +0 -1
  183. package/dist/standalone/chunk-2SHUN7KF.js +0 -1
  184. package/dist/standalone/chunk-2Y36BVVM.js +0 -4
  185. package/dist/standalone/chunk-3EXLKL6V.js +0 -1
  186. package/dist/standalone/chunk-3KAERFMC.js +0 -1
  187. package/dist/standalone/chunk-4XDMVUS5.js +0 -1
  188. package/dist/standalone/chunk-5RF4QDDA.js +0 -6
  189. package/dist/standalone/chunk-5YWJNF5X.js +0 -1
  190. package/dist/standalone/chunk-66YJ3IOZ.js +0 -1
  191. package/dist/standalone/chunk-6KHEBRBB.js +0 -1
  192. package/dist/standalone/chunk-6WCIFGDW.js +0 -1
  193. package/dist/standalone/chunk-7RG3AKPY.js +0 -1
  194. package/dist/standalone/chunk-A2FPLOMJ.js +0 -1
  195. package/dist/standalone/chunk-AADXUXZO.js +0 -1
  196. package/dist/standalone/chunk-ARI4JTIH.js +0 -1
  197. package/dist/standalone/chunk-BDO4J5AP.js +0 -1
  198. package/dist/standalone/chunk-BMQJ4CAO.js +0 -1
  199. package/dist/standalone/chunk-CMUP7HPS.js +0 -1
  200. package/dist/standalone/chunk-CP7AUUOU.js +0 -1
  201. package/dist/standalone/chunk-DX3RMFQU.js +0 -8
  202. package/dist/standalone/chunk-E2CJUP53.js +0 -13
  203. package/dist/standalone/chunk-FLYO3XY5.js +0 -1
  204. package/dist/standalone/chunk-FWCKM2CU.js +0 -1
  205. package/dist/standalone/chunk-GITJXQOS.js +0 -4
  206. package/dist/standalone/chunk-GP6IRITM.js +0 -1
  207. package/dist/standalone/chunk-GXU3ATKS.js +0 -1
  208. package/dist/standalone/chunk-H5Y5NQPL.js +0 -1
  209. package/dist/standalone/chunk-HALNNKTC.js +0 -1
  210. package/dist/standalone/chunk-HK4OVYG3.js +0 -1
  211. package/dist/standalone/chunk-HQEMYD2K.js +0 -1
  212. package/dist/standalone/chunk-I4WGRDL2.js +0 -1
  213. package/dist/standalone/chunk-ISZSYNTI.js +0 -4
  214. package/dist/standalone/chunk-JWG3VRGB.js +0 -1
  215. package/dist/standalone/chunk-KDYNM3GV.js +0 -1
  216. package/dist/standalone/chunk-KP6JQSH2.js +0 -4
  217. package/dist/standalone/chunk-LLXFYRGQ.js +0 -1
  218. package/dist/standalone/chunk-LU3GW7HI.js +0 -1
  219. package/dist/standalone/chunk-M536Y2KX.js +0 -1
  220. package/dist/standalone/chunk-MVGE3JJN.js +0 -1
  221. package/dist/standalone/chunk-MXSHWB3M.js +0 -1
  222. package/dist/standalone/chunk-NL2DZKFI.js +0 -1
  223. package/dist/standalone/chunk-OGVCXKRL.js +0 -2
  224. package/dist/standalone/chunk-OPC233PZ.js +0 -1
  225. package/dist/standalone/chunk-P4CWOYFL.js +0 -1
  226. package/dist/standalone/chunk-PUY3YDXI.js +0 -1
  227. package/dist/standalone/chunk-QZMR6MUG.js +0 -1
  228. package/dist/standalone/chunk-WCWYSOCN.js +0 -62
  229. package/dist/standalone/chunk-WEO3YVP6.js +0 -3
  230. package/dist/standalone/chunk-X2FQ6B5V.js +0 -1
  231. package/dist/standalone/chunk-XIZNYKOD.js +0 -1
  232. package/dist/standalone/chunk-XS6Q6GGV.js +0 -1
  233. package/dist/standalone/chunk-Y3CQDULJ.js +0 -1
  234. package/dist/standalone/chunk-Z2JPEI2V.js +0 -1
  235. /package/dist/standalone/{chunk-4CGALXS3.js → chunk-OG4N2XHD.js} +0 -0
@@ -1,2 +0,0 @@
1
- import{a as B}from"./chunk-LEDWUPXM.js";import"./chunk-2PJNAWB3.js";import{a as k}from"./chunk-IC4L6G56.js";import{a as D}from"./chunk-54MMVNPT.js";import"./chunk-BGBLQ563.js";import{a as P}from"./chunk-HK4OVYG3.js";import"./chunk-XXQUMVWH.js";import{b as q}from"./chunk-BMQJ4CAO.js";import{R as I}from"./chunk-CFPZYHPY.js";import"./chunk-7QIFDWQV.js";import{c}from"./chunk-FXCBF4XT.js";import"./chunk-2OUPA2WJ.js";import{b as H}from"./chunk-THIXMMZD.js";import"./chunk-6ST5ECQA.js";import{a as f}from"./chunk-AADXUXZO.js";import{f as A}from"./chunk-EN2QAEO4.js";import"./chunk-XBDKZZ67.js";import{a as O}from"./chunk-XQCVZAGU.js";import{d as F,f as v,g as N,h as w,m as y,o as _,q as C}from"./chunk-4CGALXS3.js";import"./chunk-AADILRJW.js";import{a as s,e as $,f as se,h as de,j as E}from"./chunk-3XIESWL4.js";var l=$(se(),1);var e=$(de(),1);function le({className:r,orientation:h="horizontal",...a}){return(0,e.jsx)(k,{"data-slot":"separator",orientation:h,className:E("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",r),...a})}s(le,"de");var oe=v(f.clearCapturedMail),ne=v(f.sendTestMail),ce=/https?:\/\/[^\s"'<>)]+/i,K=s(r=>r===void 0?void 0:ce.exec(r)?.[0],"S"),me=s(r=>{if(r!==void 0)return K(r.html)??K(r.text)},"ce"),ue=`<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:">`,he=s(r=>`${ue}${r}`,"ue"),x=s(r=>r===void 0?"":Array.isArray(r)?r.join(", "):r,"f"),Le=s(({limit:r=100})=>{let h=A(),a=F(),{data:j,error:T,errorSource:R,isLoading:U,refetch:g}=q(f.getCapturedMail,{limit:r}),[z,p]=(0,l.useState)(null),[M,S]=(0,l.useState)(null),[m,W]=(0,l.useState)("html"),[b,G]=(0,l.useState)(""),o=(0,l.useMemo)(()=>j?.entries??[],[j]),L=T??z,J=T===null?z:R,Q=s(async()=>{p(null);try{await h.query(oe,{},N("")),S(null),g()}catch(t){p(w(t))}},"I"),V=s(async()=>{p(null);try{await h.query(ne,{},N("")),g()}catch(t){p(w(t))}},"_");D(()=>{g()},!0);let X=s(()=>{y(Q())},"q"),Y=s(()=>{y(V())},"P"),Z=s(t=>{G(t.currentTarget.value)},"D"),ee=s(t=>{let{id:d}=t.currentTarget.dataset;d!==void 0&&S(d)},"R"),te=s(t=>{let d=t.currentTarget.dataset.tab;(d==="headers"||d==="html"||d==="text")&&W(d)},"B"),ae=s(t=>a(t==="html"?"HTML":t==="text"?"Plain text":"Headers"),"K"),u=(0,l.useMemo)(()=>{let t=b.trim().toLowerCase();return t===""?o:o.filter(d=>`${d.subject} ${x(d.to)}`.toLowerCase().includes(t))},[o,b]),i=(0,l.useMemo)(()=>{if(u.length!==0)return u.find(t=>t.id===M)??u[0]},[u,M]),n=me(i),re=s(()=>{n!==void 0&&_(n)},"U"),ie=s(()=>{n!==void 0&&"window"in globalThis&&globalThis.window.open(n,"_blank","noopener")},"W");return(0,e.jsxs)("div",{className:"flex flex-col gap-4","data-testid":"mail-panel",children:[(0,e.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,e.jsx)(c,{"data-testid":"mail-send-test",onClick:Y,size:"sm",type:"button",variant:"outline",children:a("Send test")}),(0,e.jsx)(c,{"data-testid":"mail-clear",disabled:o.length===0,onClick:X,size:"sm",type:"button",variant:"outline",children:a("Clear inbox")}),o.length>0&&(0,e.jsx)(H,{className:"ml-auto","data-testid":"mail-count",variant:"secondary",children:a("{count} messages",{count:o.length})})]}),L!==null&&(0,e.jsx)(P,{error:J,testId:"mail-error"}),L===null&&!U&&o.length===0&&(0,e.jsx)(O,{description:a("Email your app sends in dev is captured here \u2014 nothing is delivered."),icon:(0,e.jsxs)("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[(0,e.jsx)("path",{d:"M4 5h16v14H4z"}),(0,e.jsx)("path",{d:"m4 6 8 6 8-6"})]}),testId:"mail-empty",title:a("No captured email.")}),o.length>0&&(0,e.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-[minmax(0,22rem)_1fr]","data-testid":"mail-reader",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,e.jsx)(I,{"aria-label":a("Search messages"),"data-testid":"mail-search",onChange:Z,placeholder:a("Filter messages"),type:"search",value:b}),(0,e.jsx)(B,{className:"max-h-[32rem] rounded-xl border border-border bg-card shadow-xs","data-testid":"mail-list",children:(0,e.jsx)("ul",{className:"divide-y",children:u.map(t=>{let d=t.id===i?.id;return(0,e.jsx)("li",{children:(0,e.jsxs)("button",{className:`flex w-full flex-col items-start gap-0.5 px-3 py-2 text-left text-sm hover:bg-muted/60 ${d?"bg-muted":""}`,"data-active":d,"data-id":t.id,"data-testid":"mail-list-item",onClick:ee,type:"button",children:[(0,e.jsx)("span",{className:"w-full truncate font-medium",children:t.subject||a("(no subject)")}),(0,e.jsx)("span",{className:"w-full truncate text-xs text-muted-foreground",children:x(t.to)}),(0,e.jsx)("span",{className:"text-xs text-muted-foreground tabular-nums",children:C(t.capturedAt,"\u2014")})]})},t.id)})})})]}),i!==void 0&&(0,e.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"mail-detail",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,e.jsx)("h2",{className:"truncate text-base font-semibold","data-testid":"mail-subject",children:i.subject||a("(no subject)")}),(0,e.jsxs)("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs text-muted-foreground",children:[(0,e.jsx)("dt",{children:a("From")}),(0,e.jsx)("dd",{className:"truncate font-mono",children:i.from??"\u2014"}),(0,e.jsx)("dt",{children:a("To")}),(0,e.jsx)("dd",{className:"truncate font-mono",children:x(i.to)}),i.cc!==void 0&&i.cc.length>0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("dt",{children:a("Cc")}),(0,e.jsx)("dd",{className:"truncate font-mono",children:x(i.cc)})]}),(0,e.jsx)("dt",{children:a("Sent")}),(0,e.jsx)("dd",{className:"tabular-nums",children:C(i.capturedAt,"\u2014")})]})]}),(0,e.jsxs)("div",{className:"flex flex-wrap items-center gap-2","data-testid":"mail-actions",children:[(0,e.jsx)(c,{"data-testid":"mail-copy-link",disabled:n===void 0,onClick:re,size:"sm",type:"button",variant:"outline",children:a("Copy link")}),(0,e.jsx)(c,{"data-testid":"mail-open-link",disabled:n===void 0,onClick:ie,size:"sm",type:"button",variant:"outline",children:a("Open in new tab")})]}),(0,e.jsx)(le,{}),(0,e.jsx)("div",{className:"flex items-center gap-1","data-testid":"mail-tabs",role:"tablist",children:["html","text","headers"].map(t=>(0,e.jsx)(c,{"aria-selected":m===t,"data-tab":t,"data-testid":`mail-tab-${t}`,onClick:te,role:"tab",size:"sm",type:"button",variant:m===t?"secondary":"ghost",children:ae(t)},t))}),(0,e.jsxs)("div",{className:"min-h-[12rem]",children:[m==="html"&&(i.html===void 0?(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:a("No HTML body.")}):(0,e.jsx)("iframe",{className:"h-[24rem] w-full rounded-md border bg-white","data-testid":"mail-preview-html",sandbox:"",srcDoc:he(i.html),title:a("Email preview")})),m==="text"&&(i.text===void 0?(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:a("No text body.")}):(0,e.jsx)("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-text",children:i.text})),m==="headers"&&(i.headers===void 0||Object.keys(i.headers).length===0?(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:a("No headers.")}):(0,e.jsx)("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-headers",children:Object.entries(i.headers).map(([t,d])=>`${t}: ${d}`).join(`
2
- `)}))]})]})]})]})},"ze");export{Le as MailPanel};
@@ -1 +0,0 @@
1
- import{b as de,e as F}from"./chunk-CMUP7HPS.js";import{a as ce}from"./chunk-X2FQ6B5V.js";import"./chunk-WCWYSOCN.js";import"./chunk-4UOFSGUS.js";import"./chunk-ILNELDFC.js";import"./chunk-T6VMSOBB.js";import{b as ie}from"./chunk-BMQJ4CAO.js";import{a as k}from"./chunk-UZERI5YC.js";import{a as oe}from"./chunk-GRL5MG3Z.js";import"./chunk-7T7UOTYK.js";import"./chunk-7QIFDWQV.js";import{b as A}from"./chunk-THIXMMZD.js";import"./chunk-6ST5ECQA.js";import{a as y}from"./chunk-AADXUXZO.js";import{f as ae,g as le}from"./chunk-EN2QAEO4.js";import"./chunk-XBDKZZ67.js";import{d as R,f as S,g as Q,h as V,m as z,q as ne}from"./chunk-4CGALXS3.js";import"./chunk-AADILRJW.js";import{a as p,e as q,f as qe,g as re,h as se,j as w}from"./chunk-3XIESWL4.js";var xe=q(re(),1);var c=q(qe(),1);var ue=q(re(),1);var K=q(se(),1);var Ae={connected:"bg-success",connecting:"bg-warning",idle:"bg-muted-foreground",offline:"bg-destructive"},me=p(()=>{let t=(0,ue.c)(16),e=R(),a=le(),s;e:switch(a){case"connected":{let i;t[0]!==e?(i=e("Connected"),t[0]=e,t[1]=i):i=t[1],s=i;break e}case"connecting":{let i;t[2]!==e?(i=e("Connecting\u2026"),t[2]=e,t[3]=i):i=t[3],s=i;break e}case"idle":{let i;t[4]!==e?(i=e("Idle"),t[4]=e,t[5]=i):i=t[5],s=i;break e}case"offline":{let i;t[6]!==e?(i=e("Offline"),t[6]=e,t[7]=i):i=t[7],s=i;break e}default:s=a}let l=Ae[a],d;t[8]!==l?(d=w("size-2 rounded-full",l),t[8]=l,t[9]=d):d=t[9];let u;t[10]!==d?(u=(0,K.jsx)("span",{"aria-hidden":"true",className:d}),t[10]=d,t[11]=u):u=t[11];let o;return t[12]!==a||t[13]!==u||t[14]!==s?(o=(0,K.jsxs)("span",{"aria-live":"polite",className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground","data-status":a,"data-testid":"dash-connection",role:"status",children:[u,s]}),t[12]=a,t[13]=u,t[14]=s,t[15]=o):o=t[15],o},"j");var r=q(se(),1);var fe={completed:0,failed:2,in_progress:1},Ee=p(t=>{let e=0,a=0,s=0,l=0,d=[];for(let{metrics:u}of t){if(u===null){l+=1;continue}s+=1,e+=u.requests,a+=u.errors,d.push(...u.history??[])}return{errors:a,failed:l,history:d,reachable:s,requests:e}},"Se"),je=p(t=>{let e=new Map;for(let a of t)for(let s of a){let l=e.get(s.path);if(l===void 0){e.set(s.path,{...s});continue}l.calls+=s.calls,l.errors+=s.errors,l.totalDurationMs+=s.totalDurationMs,l.scans=(l.scans??0)+(s.scans??0),l.maxDurationMs=Math.max(l.maxDurationMs,s.maxDurationMs),l.lastCalledAt=Math.max(l.lastCalledAt,s.lastCalledAt),(s.lastErrorAt??0)>(l.lastErrorAt??0)&&(l.lastErrorAt=s.lastErrorAt,l.lastErrorMessage=s.lastErrorMessage)}return[...e.values()]},"Me"),Ie=p(t=>{let e=new Map;for(let a of t)for(let s of a){let l=e.get(s.id);if(l===void 0){e.set(s.id,s);continue}let d=fe[s.status]-fe[l.status];(d>0||d===0&&(s.updatedAt??0)>(l.updatedAt??0))&&e.set(s.id,s)}return[...e.values()]},"qe"),De=S(y.getAuthMetrics),Ce=S(y.getFunctionStats),Pe=S(y.getLogs),Le=S(y.getMetrics),Te=S(y.migrationStatus),Re=5,pe=2e3,ze=5,he=.01,ge=.05,Fe=.1,Ke=.3,Oe=1,_e=50,W=p((t,e,a)=>t>=a?"crit":t>=e?"warn":"ok","V"),$e=p((t,e,a)=>t>=a?"crit":t>=e?"warn":"ok","Re"),He={crit:"destructive",ok:"secondary",warn:"default"},O=p((t,e)=>e===0?"\u2014":`${(t/e*100).toFixed(1)}%`,"F"),Ue=p(t=>{let e=new Map;for(let s of t??[]){let l=e.get(s.bucketMs)??{calls:0,errors:0};l.calls+=s.calls,l.errors+=s.errors,e.set(s.bucketMs,l)}let a=[...e.entries()].toSorted((s,l)=>s[0]-l[0]);return{errors:a.map(([,s])=>s.errors),requests:a.map(([,s])=>s.calls)}},"_e"),Be=p(t=>{let e=0,a=0;for(let l of t)l.status==="failed"?e+=1:l.status==="in_progress"&&(a+=1);let s="ok";return e>0?s="crit":a>0&&(s="warn"),{failed:e,level:s,running:a}},"ze"),Ge=p((t,e)=>t.failed>0?e("{count} failed",{count:t.failed.toString()}):t.running>0?e("{count} running",{count:t.running.toString()}):e("OK"),"Ke"),ve={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},be={crit:"text-destructive",ok:"text-foreground",warn:"text-warning"},Je={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Qe=p(t=>t.includes("crit")?"crit":t.includes("warn")?"warn":"ok","Ue"),_=p(t=>{let e=(0,xe.c)(19),{chart:a,label:s,level:l,testId:d,value:u}=t,o=ve[l],i;e[0]!==o?(i=w("size-1.5 shrink-0 rounded-full",o),e[0]=o,e[1]=i):i=e[1];let h;e[2]!==i?(h=(0,r.jsx)("span",{"aria-hidden":"true",className:i}),e[2]=i,e[3]=h):h=e[3];let g;e[4]!==s||e[5]!==h?(g=(0,r.jsxs)("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[h,s]}),e[4]=s,e[5]=h,e[6]=g):g=e[6];let N=be[l],f;e[7]!==N?(f=w("truncate text-2xl font-semibold tabular-nums",N),e[7]=N,e[8]=f):f=e[8];let m;e[9]!==f||e[10]!==d||e[11]!==u?(m=(0,r.jsx)("span",{className:f,"data-testid":d,children:u}),e[9]=f,e[10]=d,e[11]=u,e[12]=m):m=e[12];let x;e[13]!==a||e[14]!==m?(x=(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[m,a]}),e[13]=a,e[14]=m,e[15]=x):x=e[15];let v;return e[16]!==g||e[17]!==x?(v=(0,r.jsx)(k,{className:"gap-0 py-0",children:(0,r.jsxs)("div",{className:"flex flex-col gap-2.5 p-4",children:[g,x]})}),e[16]=g,e[17]=x,e[18]=v):v=e[18],v},"R"),Ve=p(async(t,e,a)=>{let s=await Promise.all(a.map(f=>{let m=Q(f);return Promise.allSettled([t.query(Le,{},m),t.query(Ce,{},m),t.query(Te,{},m)])})),l=Q(e),d=typeof t.schedulerStatus=="function"?t.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[u,o,i]=await Promise.allSettled([t.query(Pe,{},l),t.query(De,{},l),d]),h=s.map(([f,m,x])=>({functions:m.status==="fulfilled"?m.value.functions:[],metrics:f.status==="fulfilled"?f.value:null,migrations:x.status==="fulfilled"?x.value.migrations:[]})),g=Ee(h),N=s[0]?.[0];return{auth:o.status==="fulfilled"?o.value:null,entries:u.status==="fulfilled"?u.value.entries:[],functions:je(h.map(f=>f.functions)),logsError:u.status==="rejected"?V(u.reason):null,metricsError:g.reachable===0&&N?.status==="rejected"?V(N.reason):null,migrations:Ie(h.map(f=>f.migrations)),scheduler:i.status==="fulfilled"?i.value:null,totals:g}},"Be"),pt=p(({initialShardKey:t})=>{let e=ae(),a=R(),[s,l]=(0,c.useState)([]),[d,u]=(0,c.useState)(null),[o,i]=(0,c.useState)(null),[h,g]=(0,c.useState)(null),[N,f]=(0,c.useState)([]),[m,x]=(0,c.useState)(null),[v,Ne]=(0,c.useState)(null),[we,ye]=(0,c.useState)([]),[M]=(0,c.useState)(oe),E=(0,c.useRef)(!1),$=(0,c.useRef)(!0);(0,c.useEffect)(()=>($.current=!0,()=>{$.current=!1}),[]);let j=t??"",I=(0,c.useCallback)(async()=>{if(E.current)return;E.current=!0;let n=await Ve(e,j,de(j,M));if(!$.current){E.current=!1;return}i(n.totals),g(n.metricsError),f(n.functions),ye(n.migrations),l(n.entries),u(n.logsError),x(n.auth),Ne(n.scheduler),E.current=!1},[e,M,j]);(0,c.useEffect)(()=>{z(I())},[I]);let H=(0,c.useRef)(0),D=(0,c.useRef)(null),ke=p(()=>{let n=Date.now()-H.current;if(n>=pe){H.current=Date.now(),z(I());return}D.current??=setTimeout(()=>{D.current=null,H.current=Date.now(),z(I())},pe-n)},"de");(0,c.useEffect)(()=>()=>{D.current!==null&&clearTimeout(D.current)},[]);let{data:X,liveError:Se}=ie(y.getMetrics,{},{live:!0,shardKey:j});(0,c.useEffect)(()=>{X!==void 0&&ke()},[X]);let U=s.filter(n=>n.level==="error"),B=U.slice(0,Re),C=Ue(o?.history),Y=(0,c.useMemo)(()=>{let n=m?.history??[];return{attempts:n.map(b=>b.attempts),failures:n.map(b=>b.failures)}},[m?.history]),Z=N.filter(n=>n.calls>0).toSorted((n,b)=>b.errors/b.calls-n.errors/n.calls||b.calls-n.calls).slice(0,ze),G=Be(we),Me=o===null||o.requests===0?0:o.errors/o.requests,J=W(Me,he,ge),ee=m===null?"ok":W(m.failureRate,Fe,Ke),te=v===null?"ok":$e(v.backlog,Oe,_e),P=Qe([J,ee,te,G.level]),L,T;return P==="crit"?(L=a("Critical"),T=a("One or more service levels are breached.")):P==="warn"?(L=a("Degraded"),T=a("Some service levels need attention.")):(L=a("All systems healthy"),T=a("All service levels are within target.")),(0,r.jsxs)("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[(0,r.jsxs)(k,{className:"gap-0 py-0",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{"aria-hidden":"true",className:w("flex size-10 shrink-0 items-center justify-center rounded-full",Je[P]),children:(0,r.jsx)("span",{className:w("size-3 rounded-full",ve[P])})}),(0,r.jsxs)("div",{className:"grid leading-tight",children:[(0,r.jsx)("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:L}),(0,r.jsx)("span",{className:"text-[13px] text-muted-foreground",children:T})]})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-4",children:[(0,r.jsxs)("div",{className:"text-end",children:[(0,r.jsx)("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:a("Requests")}),(0,r.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[C.requests.length>=2&&(0,r.jsx)(F,{ariaLabel:a("Requests over time"),className:"h-6 w-20 text-foreground",series:C.requests,testId:"hl-spark-requests"}),(0,r.jsx)("span",{className:"text-lg font-semibold tabular-nums text-foreground","data-testid":"hl-requests",children:(o?.requests??0).toString()})]})]}),(0,r.jsx)("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),(0,r.jsxs)("div",{className:"text-end",children:[(0,r.jsx)("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:a("Error rate")}),(0,r.jsx)("div",{className:w("text-lg font-semibold tabular-nums",be[J]),"data-testid":"hl-error-rate",children:o===null?"\u2014":O(o.errors,o.requests)})]}),(0,r.jsx)("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(me,{}),(0,r.jsx)(ce,{message:Se,prefix:"hl"})]})]})]}),h!==null&&(0,r.jsx)("div",{className:"border-t border-border bg-destructive/5 px-4 py-2 text-sm text-destructive","data-testid":"hl-metrics-error",role:"alert",children:h})]}),(0,r.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[(0,r.jsx)(_,{chart:C.errors.length>=2?(0,r.jsx)(F,{ariaLabel:a("Errors over time"),className:"h-7 w-20 text-destructive",series:C.errors,testId:"hl-spark-errors"}):void 0,label:a("Error rate"),level:J,testId:"hl-slo-errorrate",value:o===null?"\u2014":O(o.errors,o.requests)}),(0,r.jsx)(_,{chart:Y.failures.length>=2?(0,r.jsx)(F,{ariaLabel:a("Auth failures over time"),className:"h-7 w-20 text-destructive",series:Y.failures,testId:"hl-spark-auth"}):void 0,label:a("Auth failures"),level:ee,testId:"hl-slo-auth",value:m===null?"\u2014":O(m.failures,m.attempts)}),(0,r.jsx)(_,{label:a("Scheduler backlog"),level:te,testId:"hl-slo-backlog",value:v===null?"\u2014":v.backlog.toString()}),(0,r.jsx)(_,{label:a("Migrations"),level:G.level,testId:"hl-slo-migrations",value:Ge(G,a)})]}),(0,r.jsxs)("div",{className:"grid gap-3 lg:grid-cols-2",children:[(0,r.jsxs)(k,{className:"gap-0 py-0","data-testid":"hl-functions",children:[(0,r.jsx)("header",{className:"border-b border-border px-4 py-3",children:(0,r.jsx)("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Functions by error rate")})}),Z.length===0?(0,r.jsx)("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-functions-empty",children:a("No function activity yet.")}):(0,r.jsx)("ul",{className:"divide-y divide-border",children:Z.map(n=>(0,r.jsxs)("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2 text-xs","data-testid":"hl-fn-row",children:[(0,r.jsx)("span",{className:"truncate font-mono text-foreground",children:n.path}),(0,r.jsxs)("span",{className:"flex shrink-0 items-center gap-2",children:[(0,r.jsx)("span",{className:"tabular-nums text-muted-foreground",children:a("{count} calls",{count:n.calls.toString()})}),(0,r.jsx)(A,{variant:He[W(n.errors/n.calls,he,ge)],children:O(n.errors,n.calls)})]})]},n.path))})]}),(0,r.jsxs)(k,{className:"gap-0 py-0",children:[(0,r.jsxs)("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,r.jsx)("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Recent errors")}),(0,r.jsx)(A,{"data-testid":"hl-error-count",variant:U.length>0?"destructive":"outline",children:U.length})]}),d!==null&&(0,r.jsx)("p",{className:"px-4 py-8 text-center text-sm text-destructive","data-testid":"hl-logs-error",role:"alert",children:d}),d===null&&B.length===0&&(0,r.jsx)("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-errors-empty",children:a("No recent errors.")}),B.length>0&&(0,r.jsx)("ul",{className:"divide-y divide-border",children:B.map((n,b)=>(0,r.jsxs)("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)("time",{className:"shrink-0 text-muted-foreground",children:ne(n.timestamp)}),n.functionPath!==void 0&&(0,r.jsx)("span",{className:"truncate font-mono text-foreground",children:n.functionPath})]}),(0,r.jsx)("span",{className:"text-destructive",children:n.message})]},`${n.timestamp.toString()}-${b.toString()}`))})]})]}),(0,r.jsxs)(k,{className:"gap-0 py-0",children:[(0,r.jsxs)("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,r.jsx)("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Shards seen")}),(0,r.jsx)(A,{"data-testid":"hl-shard-count",variant:"outline",children:M.length})]}),M.length>0&&(0,r.jsx)("ul",{className:"flex flex-wrap gap-1.5 p-4",children:M.map(n=>(0,r.jsx)("li",{"data-testid":"hl-shard",children:(0,r.jsx)(A,{variant:"secondary",children:n})},n))})]})]})},"ot");export{pt as HealthPanel};
@@ -1 +0,0 @@
1
- import{a as w}from"./chunk-HK4OVYG3.js";import"./chunk-XXQUMVWH.js";import{b as S}from"./chunk-BMQJ4CAO.js";import{a as A,b as F,c as O,d as m,e as s,f as l}from"./chunk-MIQTKZAR.js";import{a as N,e as b}from"./chunk-UZERI5YC.js";import{a as C}from"./chunk-V53KNYRN.js";import{a as T}from"./chunk-5Y3QLNWX.js";import{b as y}from"./chunk-THIXMMZD.js";import"./chunk-6ST5ECQA.js";import{a as k}from"./chunk-AADXUXZO.js";import"./chunk-EN2QAEO4.js";import"./chunk-XBDKZZ67.js";import{a as g}from"./chunk-XQCVZAGU.js";import{d as v}from"./chunk-4CGALXS3.js";import"./chunk-AADILRJW.js";import{a as i,e as x,f as L,h as _}from"./chunk-3XIESWL4.js";var d=x(L(),1);var e=x(_(),1);var $=i(a=>{let t=a.trim();if(t.length===0)return{context:void 0,error:null};try{let o=JSON.parse(t);return o===null||typeof o!="object"||Array.isArray(o)?{context:void 0,error:"Targeting context must be a JSON object."}:{context:o,error:null}}catch{return{context:void 0,error:"Targeting context is not valid JSON."}}},"L"),q='{ "targetingKey": "user-123", "plan": "premium" }',D=i(a=>a.type==="object"?JSON.stringify(a.value):String(a.value),"_"),X=i(({initialShardKey:a=""})=>{let t=v(),[o,j]=(0,d.useState)(""),{context:f,error:u}=$(o),I=(0,d.useMemo)(()=>f===void 0?{}:{context:f},[f]),{data:n,error:J,errorSource:K,liveError:E}=S(k.listFlags,I,{live:!0,shardKey:a}),h=n!==void 0,M=n?.configured??!1,p=(0,d.useMemo)(()=>Array.isArray(n?.flags)?[...n.flags].toSorted((r,V)=>r.key.localeCompare(V.key)):[],[n]),c;return h&&!M?c=(0,e.jsx)(g,{description:t("No @lunora/flags provider is wired in this deployment. Add lunora/flags.ts with defineFlags({ provider }) to gate code paths on feature flags."),testId:"flags-unconfigured",title:t("No flags provider configured")}):h&&p.length===0?c=(0,e.jsx)(g,{description:t('A flags provider is configured, but no handler reads a flag yet. Call ctx.flags.boolean("key", false) in a query, mutation, or action.'),testId:"flags-empty",title:t("No flags read")}):c=(0,e.jsx)(N,{className:"overflow-hidden py-0",children:(0,e.jsx)(b,{className:"px-0",children:(0,e.jsxs)(A,{"data-testid":"flags-table",children:[(0,e.jsx)(F,{children:(0,e.jsxs)(m,{children:[(0,e.jsx)(s,{children:t("Key")}),(0,e.jsx)(s,{children:t("Type")}),(0,e.jsx)(s,{children:t("Value")}),(0,e.jsx)(s,{children:t("Reason")}),(0,e.jsx)(s,{children:t("Variant")})]})}),(0,e.jsx)(O,{children:p.map(r=>(0,e.jsxs)(m,{"data-testid":`flags-row-${r.key}`,children:[(0,e.jsx)(l,{className:"font-mono text-xs",children:r.key}),(0,e.jsx)(l,{className:"font-mono text-xs text-muted-foreground",children:r.type}),(0,e.jsx)(l,{className:"font-mono text-xs",children:D(r)}),(0,e.jsx)(l,{children:r.errorCode===void 0?(0,e.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:r.reason??"\u2014"}):(0,e.jsx)(y,{"data-testid":`flags-error-${r.key}`,variant:"destructive",children:r.errorCode})}),(0,e.jsx)(l,{className:"font-mono text-xs text-muted-foreground",children:r.variant??"\u2014"})]},r.key))})]})})}),(0,e.jsxs)("div",{className:"flex flex-col gap-6","data-testid":"lunora-flags-panel",children:[J!==null&&(0,e.jsx)(w,{error:K,testId:"flags-error"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:t('Feature flags are read in code with ctx.flags.<type>("key", default). They evaluate through the OpenFeature provider configured in lunora/flags.ts; edit the targeting context below to see how each flag resolves for a given audience.')}),(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,e.jsx)(T,{htmlFor:"flags-targeting-context",children:t("Targeting context (JSON)")}),(0,e.jsx)(C,{className:"font-mono text-xs","data-testid":"flags-context-input",id:"flags-targeting-context",onChange:i(r=>{j(r.target.value)},"onChange"),placeholder:q,rows:3,value:o}),u!==null&&(0,e.jsx)("p",{className:"text-xs text-destructive","data-testid":"flags-context-error",role:"alert",children:t(u)}),E!==void 0&&(0,e.jsx)("p",{className:"text-xs text-amber-600 dark:text-amber-500","data-testid":"flags-live-error",role:"alert",children:t("Live updates unavailable; showing the last evaluation.")})]}),c]})},"Y");export{X as FlagsPanel};
@@ -1 +0,0 @@
1
- import{b as R}from"./chunk-Z2JPEI2V.js";import"./chunk-HK4OVYG3.js";import"./chunk-XXQUMVWH.js";import{b as h}from"./chunk-BMQJ4CAO.js";import"./chunk-MIQTKZAR.js";import"./chunk-UZERI5YC.js";import{a as p}from"./chunk-AADXUXZO.js";import"./chunk-EN2QAEO4.js";import"./chunk-XBDKZZ67.js";import{d as g}from"./chunk-4CGALXS3.js";import"./chunk-AADILRJW.js";import{a as s,e as m,g as S,h as _}from"./chunk-3XIESWL4.js";var f=m(S(),1);var k=m(_(),1);var A=s((e,t)=>({"admin-token-weak":e("Weak admin token"),"auth-secret-weak":e("Weak auth secret"),"cookies-insecure":e("Session cookies are not Secure"),"cors-wildcard-credentials":e("Wildcard CORS with credentials"),"csrf-disabled":e("CSRF/origin guard is off"),"dev-args-unredacted":e("Request log keeps un-redacted args"),"security-headers-disabled":e("Security headers are off"),"ws-gate-open":e("Live admin subscriptions are ungated")})[t.kind],"R"),w=s(e=>Array.isArray(e.findings)?e.findings:[],"k"),E=s(e=>({"admin-token-weak":"LUNORA_ADMIN_TOKEN","auth-secret-weak":"AUTH_SECRET","cookies-insecure":"BETTER_AUTH_URL","cors-wildcard-credentials":"LUNORA_ALLOWED_ORIGINS","csrf-disabled":"LUNORA_SECURITY_CSRF","dev-args-unredacted":"request log","security-headers-disabled":"LUNORA_SECURITY_HEADERS","ws-gate-open":"LUNORA_WS_BEARER"})[e.kind],"S"),T=s((e,t)=>({"admin-token-weak":e("Your admin token is {length} characters \u2014 use at least {min} for a brute-force-resistant secret.",{length:t.detail?.length,min:t.detail?.min}),"auth-secret-weak":e("Your auth secret is {length} characters \u2014 use at least {min} (e.g. `openssl rand -hex 32`) to sign sessions safely.",{length:t.detail?.length,min:t.detail?.min}),"cookies-insecure":e("BETTER_AUTH_URL is a plaintext http:// origin, so session cookies cannot be Secure and ride in cleartext. Serve auth over https:// in production."),"cors-wildcard-credentials":e("LUNORA_ALLOWED_ORIGINS includes a wildcard while credentials are allowed \u2014 browsers reject this and it defeats the allowlist. Name explicit origins instead of *."),"csrf-disabled":e("LUNORA_SECURITY_CSRF is off, so cross-origin state-changing cookie requests are not blocked. Re-enable it in production to keep mutations un-forgeable."),"dev-args-unredacted":e("This worker reports a development environment, so the request log stores raw args and identity. Confirm it isn't a mislabeled production deploy."),"security-headers-disabled":e("LUNORA_SECURITY_HEADERS is off, so HSTS, CSP, nosniff, and frame-options are not applied. Re-enable the baseline headers in production."),"ws-gate-open":e("LUNORA_WS_BEARER is unset, so the WebSocket upgrade gate is open: live admin subscriptions need no credential. Set it to gate them like the HTTP admin RPCs.")})[t.kind],"A"),O=s(()=>{let e=(0,f.c)(8),t=g(),r;e[0]===Symbol.for("react.memo_cache_sentinel")?(r={},e[0]=r):r=e[0];let{data:a,error:d,errorSource:c}=h(p.getSecurityAudit,r),n;if(e[1]!==a||e[2]!==t){let u=a===void 0?null:w(a);n=u===null?null:u.map(i=>({description:T(t,i),entity:E(i),issueType:A(t,i),key:i.kind,level:i.level})),e[1]=a,e[2]=t,e[3]=n}else n=e[3];let l=n,o;return e[4]!==d||e[5]!==c||e[6]!==l?(o=(0,k.jsx)(R,{error:d,errorSource:c,rows:l,testId:"lunora-security-advisor"}),e[4]=d,e[5]=c,e[6]=l,e[7]=o):o=e[7],o},"N");export{O as default};
@@ -1 +0,0 @@
1
- import{a as be,b as fe,c as xe,d as Ne,e as we}from"./chunk-3RTTXLMU.js";import"./chunk-2PJNAWB3.js";import"./chunk-SD4BERSA.js";import"./chunk-IC4L6G56.js";import{a as ue}from"./chunk-JN2Y24PY.js";import{g as me,h as ve,i as pe,j as ye}from"./chunk-H5Y5NQPL.js";import"./chunk-HYT2ZUNP.js";import"./chunk-M536Y2KX.js";import"./chunk-KYF2E5CJ.js";import"./chunk-7YEFOSPH.js";import"./chunk-BGBLQ563.js";import"./chunk-IVFHIQOT.js";import"./chunk-ILNELDFC.js";import"./chunk-SFDOII3B.js";import"./chunk-SMIESS7P.js";import"./chunk-T6VMSOBB.js";import"./chunk-BMQJ4CAO.js";import{a as se,b as ie,c as oe,d as Q,e as X,f as Y}from"./chunk-MIQTKZAR.js";import{a as re,e as ne}from"./chunk-UZERI5YC.js";import{a as ce}from"./chunk-V53KNYRN.js";import{a as q}from"./chunk-5Y3QLNWX.js";import"./chunk-HPFLBYRI.js";import"./chunk-QBWRC5YX.js";import{R as ae}from"./chunk-CFPZYHPY.js";import"./chunk-7QIFDWQV.js";import{c as $}from"./chunk-FXCBF4XT.js";import"./chunk-2OUPA2WJ.js";import{b as he}from"./chunk-THIXMMZD.js";import"./chunk-6ST5ECQA.js";import"./chunk-AADXUXZO.js";import{f as G}from"./chunk-EN2QAEO4.js";import"./chunk-XBDKZZ67.js";import{a as ke}from"./chunk-XQCVZAGU.js";import{d as R,h as Z,m as A,o as de,p as ge}from"./chunk-4CGALXS3.js";import"./chunk-AADILRJW.js";import{a as i,e as le,f as Oe,g as _e,h as De}from"./chunk-3XIESWL4.js";var B=le(Oe(),1);var ee=le(_e(),1);var a=le(De(),1);var Je=i(r=>{let e=r.trim();if(e==="")return;let n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):void 0},"_e"),Le=i(r=>r===void 0?"\u2014":new Date(r*1e3).toISOString(),"Je"),Pe=i(r=>new TextEncoder().encode(r).length,"De"),Fe=i(r=>{if(r.trim()!=="")try{return JSON.stringify(JSON.parse(r),void 0,2)}catch{return}},"ge"),Ee=i(r=>{if(r.trim()==="")return!0;try{return JSON.parse(r),!0}catch{return!1}},"xe"),Ke=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],Ce=i((r,e)=>{let n=r.trim();if(n==="")return"";let u=Number(n),s=Ke.find(p=>p.key===e)?.seconds??1;return Number.isFinite(u)&&u>0?String(Math.round(u*s)):n},"ue"),Ve=i(r=>{let e=r.trim();if(e==="")return!0;let n=Number(e);return Number.isInteger(n)&&n>=60},"Ce"),Te=i((r,e,n,u)=>{let s=Je(r.ttl);return{expiration:s===void 0?u:void 0,expirationTtl:s,key:e,metadata:r.metadata.trim()===""?void 0:JSON.parse(r.metadata),namespace:n,value:r.value}},"we"),Me=i(r=>{let e=(0,ee.c)(60),{helper:n,id:u,invalid:s,onChange:p,testId:o}=r,t=R(),[l,y]=(0,B.useState)(""),[c,x]=(0,B.useState)("seconds"),b;e[0]!==p||e[1]!==c?(b=i(f=>{y(f.target.value),p(Ce(f.target.value,c))},"f"),e[0]=p,e[1]=c,e[2]=b):b=e[2];let O=b,T;e[3]!==l||e[4]!==p?(T=i(f=>{f!==null&&(x(f),p(Ce(l,f)))},"V"),e[3]=l,e[4]=p,e[5]=T):T=e[5];let _=T,h;e[6]!==t?(h=t("days"),e[6]=t,e[7]=h):h=e[7];let v;e[8]!==t?(v=t("hours"),e[8]=t,e[9]=v):v=e[9];let k;e[10]!==t?(k=t("minutes"),e[10]=t,e[11]=k):k=e[11];let N;e[12]!==t?(N=t("seconds"),e[12]=t,e[13]=N):N=e[13];let w;e[14]!==h||e[15]!==v||e[16]!==k||e[17]!==N?(w={days:h,hours:v,minutes:k,seconds:N},e[14]=h,e[15]=v,e[16]=k,e[17]=N,e[18]=w):w=e[18];let C=w,g;e[19]!==t?(g=t("Expires after"),e[19]=t,e[20]=g):g=e[20];let S;e[21]!==u||e[22]!==g?(S=(0,a.jsx)(q,{className:"text-xs",htmlFor:u,children:g}),e[21]=u,e[22]=g,e[23]=S):S=e[23];let E;e[24]!==t?(E=t("No expiration"),e[24]=t,e[25]=E):E=e[25];let D;e[26]!==l||e[27]!==u||e[28]!==s||e[29]!==O||e[30]!==E||e[31]!==o?(D=(0,a.jsx)(ae,{"aria-invalid":s,className:"flex-1","data-testid":o,id:u,inputMode:"numeric",onChange:O,placeholder:E,value:l}),e[26]=l,e[27]=u,e[28]=s,e[29]=O,e[30]=E,e[31]=o,e[32]=D):D=e[32];let M;e[33]!==t?(M=t("TTL unit"),e[33]=t,e[34]=M):M=e[34];let L=`${o}-unit`,J;e[35]===Symbol.for("react.memo_cache_sentinel")?(J=(0,a.jsx)(fe,{}),e[35]=J):J=e[35];let d;e[36]!==M||e[37]!==L?(d=(0,a.jsx)(xe,{"aria-label":M,className:"w-[7.5rem]","data-testid":L,children:J}),e[36]=M,e[37]=L,e[38]=d):d=e[38];let m;e[39]!==C?(m=Ke.map(f=>(0,a.jsx)(we,{value:f.key,children:C[f.key]},f.key)),e[39]=C,e[40]=m):m=e[40];let V;e[41]!==m?(V=(0,a.jsx)(Ne,{children:m}),e[41]=m,e[42]=V):V=e[42];let F;e[43]!==_||e[44]!==d||e[45]!==V||e[46]!==c?(F=(0,a.jsxs)(be,{onValueChange:_,value:c,children:[d,V]}),e[43]=_,e[44]=d,e[45]=V,e[46]=c,e[47]=F):F=e[47];let I;e[48]!==D||e[49]!==F?(I=(0,a.jsxs)("div",{className:"flex gap-2",children:[D,F]}),e[48]=D,e[49]=F,e[50]=I):I=e[50];let K;e[51]!==n||e[52]!==s||e[53]!==t||e[54]!==o?(K=s?(0,a.jsx)("p",{className:"text-xs text-destructive","data-testid":`${o}-invalid`,children:t("TTL must be at least 60 seconds.")}):n!==void 0&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:n}),e[51]=n,e[52]=s,e[53]=t,e[54]=o,e[55]=K):K=e[55];let P;return e[56]!==I||e[57]!==K||e[58]!==S?(P=(0,a.jsxs)("div",{className:"mb-3 grid gap-1",children:[S,I,K]}),e[56]=I,e[57]=K,e[58]=S,e[59]=P):P=e[59],P},"$e"),Ie=i(r=>{let e=(0,ee.c)(36),{id:n,invalidTestId:u,onChange:s,testId:p,valid:o,value:t}=r,l=R(),y;e[0]!==t?(y=Fe(t),e[0]=t,e[1]=y):y=e[1];let c=y,x;e[2]!==l?(x=l("Metadata (JSON)"),e[2]=l,e[3]=x):x=e[3];let b;e[4]!==n||e[5]!==x?(b=(0,a.jsx)(q,{className:"text-xs",htmlFor:n,children:x}),e[4]=n,e[5]=x,e[6]=b):b=e[6];let O=`${p}-format`,T=c===void 0,_;e[7]!==c||e[8]!==s?(_=i(()=>{c!==void 0&&s(c)},"O"),e[7]=c,e[8]=s,e[9]=_):_=e[9];let h;e[10]!==l?(h=l("Format JSON"),e[10]=l,e[11]=h):h=e[11];let v;e[12]!==O||e[13]!==T||e[14]!==_||e[15]!==h?(v=(0,a.jsx)($,{"data-testid":O,disabled:T,onClick:_,size:"sm",variant:"outline",children:h}),e[12]=O,e[13]=T,e[14]=_,e[15]=h,e[16]=v):v=e[16];let k;e[17]!==b||e[18]!==v?(k=(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[b,v]}),e[17]=b,e[18]=v,e[19]=k):k=e[19];let N=!o,w;e[20]!==s?(w=i(E=>{s(E.target.value)},"N"),e[20]=s,e[21]=w):w=e[21];let C;e[22]!==n||e[23]!==N||e[24]!==w||e[25]!==p||e[26]!==t?(C=(0,a.jsx)(ce,{"aria-invalid":N,className:"min-h-[4rem] font-mono text-xs","data-testid":p,id:n,onChange:w,value:t}),e[22]=n,e[23]=N,e[24]=w,e[25]=p,e[26]=t,e[27]=C):C=e[27];let g;e[28]!==u||e[29]!==l||e[30]!==o?(g=!o&&(0,a.jsx)("p",{className:"text-xs text-destructive","data-testid":u,children:l("Metadata must be valid JSON.")}),e[28]=u,e[29]=l,e[30]=o,e[31]=g):g=e[31];let S;return e[32]!==C||e[33]!==g||e[34]!==k?(S=(0,a.jsxs)("div",{className:"mb-3 grid gap-1",children:[k,C,g]}),e[32]=C,e[33]=g,e[34]=k,e[35]=S):S=e[35],S},"Se"),Be={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},$e=i((r,e)=>{switch(e.type){case"setField":return{...r,[e.field]:e.value};case"submitFailed":return{...r,busy:!1,error:e.error};case"submitStart":return{...r,busy:!0,error:null};default:return r}},"Be"),je=i(r=>{let e=(0,ee.c)(73),{namespace:n,onCancel:u,onCreated:s}=r,p=G(),o=R(),[t,l]=(0,B.useReducer)($e,Be),y;e[0]!==t.metadata?(y=Ee(t.metadata),e[0]=t.metadata,e[1]=y):y=e[1];let c=y,x;e[2]!==t.ttl?(x=Ve(t.ttl),e[2]=t.ttl,e[3]=x):x=e[3];let b=x,O;e[4]!==c||e[5]!==t.busy||e[6]!==t.name||e[7]!==b?(O=t.name.trim()!==""&&c&&b&&!t.busy,e[4]=c,e[5]=t.busy,e[6]=t.name,e[7]=b,e[8]=O):O=e[8];let T=O,_;e[9]!==T||e[10]!==p||e[11]!==n||e[12]!==s||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(_=i(()=>{T&&(l({type:"submitStart"}),A((async()=>{try{await p.putKvValue(Te({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,n)),s()}catch(z){l({error:Z(z),type:"submitFailed"})}})()))},"O"),e[9]=T,e[10]=p,e[11]=n,e[12]=s,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=_):_=e[17];let h=_,v;e[18]!==o?(v=o("Key name"),e[18]=o,e[19]=v):v=e[19];let k;e[20]!==v?(k=(0,a.jsx)(q,{className:"text-xs",htmlFor:"kv-create-name",children:v}),e[20]=v,e[21]=k):k=e[21];let N;e[22]===Symbol.for("react.memo_cache_sentinel")?(N=i(z=>{l({field:"name",type:"setField",value:z.target.value})},"x"),e[22]=N):N=e[22];let w;e[23]!==o?(w=o("Key name"),e[23]=o,e[24]=w):w=e[24];let C;e[25]!==t.name||e[26]!==w?(C=(0,a.jsx)(ae,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:N,placeholder:w,value:t.name}),e[25]=t.name,e[26]=w,e[27]=C):C=e[27];let g;e[28]!==k||e[29]!==C?(g=(0,a.jsxs)("div",{className:"grid gap-1",children:[k,C]}),e[28]=k,e[29]=C,e[30]=g):g=e[30];let S;e[31]!==o?(S=o("Value"),e[31]=o,e[32]=S):S=e[32];let E;e[33]!==S?(E=(0,a.jsx)(q,{className:"text-xs",htmlFor:"kv-create-value",children:S}),e[33]=S,e[34]=E):E=e[34];let D;e[35]===Symbol.for("react.memo_cache_sentinel")?(D=i(z=>{l({field:"value",type:"setField",value:z.target.value})},"_"),e[35]=D):D=e[35];let M;e[36]!==t.value?(M=(0,a.jsx)(ce,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:D,value:t.value}),e[36]=t.value,e[37]=M):M=e[37];let L;e[38]!==E||e[39]!==M?(L=(0,a.jsxs)("div",{className:"grid gap-1",children:[E,M]}),e[38]=E,e[39]=M,e[40]=L):L=e[40];let J=!b,d;e[41]===Symbol.for("react.memo_cache_sentinel")?(d=i(z=>{l({field:"ttl",type:"setField",value:z})},"d"),e[41]=d):d=e[41];let m;e[42]!==J?(m=(0,a.jsx)(Me,{id:"kv-create-ttl",invalid:J,onChange:d,testId:"kv-create-ttl"}),e[42]=J,e[43]=m):m=e[43];let V;e[44]===Symbol.for("react.memo_cache_sentinel")?(V=i(z=>{l({field:"metadata",type:"setField",value:z})},"E"),e[44]=V):V=e[44];let F;e[45]!==c||e[46]!==t.metadata?(F=(0,a.jsx)(Ie,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:V,testId:"kv-create-metadata",valid:c,value:t.metadata}),e[45]=c,e[46]=t.metadata,e[47]=F):F=e[47];let I=!T,K;e[48]!==t.busy||e[49]!==o?(K=t.busy?o("Creating\u2026"):o("Create key"),e[48]=t.busy,e[49]=o,e[50]=K):K=e[50];let P;e[51]!==h||e[52]!==I||e[53]!==K?(P=(0,a.jsx)($,{"data-testid":"kv-create-submit",disabled:I,onClick:h,children:K}),e[51]=h,e[52]=I,e[53]=K,e[54]=P):P=e[54];let f=t.busy,j;e[55]!==o?(j=o("Cancel"),e[55]=o,e[56]=j):j=e[56];let H;e[57]!==u||e[58]!==t.busy||e[59]!==j?(H=(0,a.jsx)($,{"data-testid":"kv-create-cancel",disabled:f,onClick:u,variant:"outline",children:j}),e[57]=u,e[58]=t.busy,e[59]=j,e[60]=H):H=e[60];let U;e[61]!==P||e[62]!==H?(U=(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[P,H]}),e[61]=P,e[62]=H,e[63]=U):U=e[63];let W;e[64]!==t.error?(W=t.error!==null&&(0,a.jsx)("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=W):W=e[65];let te;return e[66]!==g||e[67]!==L||e[68]!==m||e[69]!==F||e[70]!==U||e[71]!==W?(te=(0,a.jsxs)("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[g,L,m,F,U,W]}),e[66]=g,e[67]=L,e[68]=m,e[69]=F,e[70]=U,e[71]=W,e[72]=te):te=e[72],te},"Pe"),ze={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},Ae=i((r,e)=>{switch(e.type){case"deleteStart":return{...r,busy:"deleting",writeError:null};case"editMetadata":return{...r,editedMetadata:e.value};case"editTtl":return{...r,editedTtl:e.value};case"editValue":return{...r,editedValue:e.value};case"loaded":return{...r,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{...r,loadError:e.error,loading:!1};case"saveOk":return{...r,busy:"",value:r.editedValue};case"saveStart":return{...r,busy:"saving",writeError:null};case"writeFailed":return{...r,busy:"",writeError:e.error};default:return r}},"Ae"),He=i(r=>{let e=(0,ee.c)(67),{expiration:n,keyName:u,namespace:s,onDeleted:p}=r,o=G(),t=R(),[l,y]=(0,B.useReducer)(Ae,ze),c,x;e[0]!==o||e[1]!==u||e[2]!==s?(c=i(()=>{let f={cancelled:!1};return A((async()=>{try{let j=await o.getKvValue({key:u,namespace:s});f.cancelled||y({metadata:j.metadata,type:"loaded",value:j.value})}catch(j){let H=j;f.cancelled||y({error:Z(H),type:"loadFailed"})}})()),()=>{f.cancelled=!0}},"o"),x=[o,s,u],e[0]=o,e[1]=u,e[2]=s,e[3]=c,e[4]=x):(c=e[3],x=e[4]),(0,B.useEffect)(c,x);let b;e[5]===Symbol.for("react.memo_cache_sentinel")?(b=i(f=>{y({type:"editValue",value:f.target.value})},"f"),e[5]=b):b=e[5];let O=b,T;e[6]===Symbol.for("react.memo_cache_sentinel")?(T=i(f=>{y({type:"editMetadata",value:f})},"V"),e[6]=T):T=e[6];let _=T,h;e[7]!==l.editedValue?(h=Fe(l.editedValue),e[7]=l.editedValue,e[8]=h):h=e[8];let v=h,k;e[9]!==l.editedMetadata?(k=Ee(l.editedMetadata),e[9]=l.editedMetadata,e[10]=k):k=e[10];let N=k,w;e[11]!==l.editedTtl?(w=Ve(l.editedTtl),e[11]=l.editedTtl,e[12]=w):w=e[12];let C=w,g;e[13]!==v?(g=i(()=>{v!==void 0&&y({type:"editValue",value:v})},"k"),e[13]=v,e[14]=g):g=e[14];let S=g,E;e[15]!==o||e[16]!==n||e[17]!==u||e[18]!==N||e[19]!==s||e[20]!==l.editedMetadata||e[21]!==l.editedTtl||e[22]!==l.editedValue||e[23]!==t?(E=i(()=>{if(!N){y({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}y({type:"saveStart"}),A((async()=>{try{await o.putKvValue(Te({metadata:l.editedMetadata,ttl:l.editedTtl,value:l.editedValue},u,s,n)),y({type:"saveOk"})}catch(f){y({error:Z(f),type:"writeFailed"})}})())},"F"),e[15]=o,e[16]=n,e[17]=u,e[18]=N,e[19]=s,e[20]=l.editedMetadata,e[21]=l.editedTtl,e[22]=l.editedValue,e[23]=t,e[24]=E):E=e[24];let D=E,M;e[25]!==o||e[26]!==u||e[27]!==s||e[28]!==p?(M=i(()=>{y({type:"deleteStart"}),A((async()=>{try{await o.deleteKvKey({key:u,namespace:s}),p(u)}catch(f){y({error:Z(f),type:"writeFailed"})}})())},"M"),e[25]=o,e[26]=u,e[27]=s,e[28]=p,e[29]=M):M=e[29];let L=M,J;e[30]!==u?(J=i(()=>{de(u)},"J"),e[30]=u,e[31]=J):J=e[31];let d;e[32]!==t?(d=t("Copy key"),e[32]=t,e[33]=d):d=e[33];let m;e[34]!==J||e[35]!==d?(m=(0,a.jsx)("div",{className:"mb-2 flex justify-end",children:(0,a.jsx)($,{"data-testid":"kv-copy-key-btn",onClick:J,size:"sm",variant:"outline",children:d})}),e[34]=J,e[35]=d,e[36]=m):m=e[36];let V;e[37]!==l.loadError?(V=l.loadError!==null&&(0,a.jsx)("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:l.loadError}),e[37]=l.loadError,e[38]=V):V=e[38];let F;e[39]!==l.loading||e[40]!==t?(F=l.loading&&(0,a.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading\u2026")}),e[39]=l.loading,e[40]=t,e[41]=F):F=e[41];let I;e[42]!==v||e[43]!==N||e[44]!==L||e[45]!==S||e[46]!==D||e[47]!==l.busy||e[48]!==l.editedMetadata||e[49]!==l.editedValue||e[50]!==l.loading||e[51]!==l.value||e[52]!==l.writeError||e[53]!==t||e[54]!==C?(I=!l.loading&&l.value!==null&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[(0,a.jsx)(q,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),v!==void 0&&(0,a.jsx)(he,{variant:"secondary",children:t("JSON")}),(0,a.jsx)("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:ge(Pe(l.editedValue))})]}),(0,a.jsx)("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:O,value:l.editedValue}),(0,a.jsxs)("div",{className:"mb-3 flex flex-wrap gap-2",children:[(0,a.jsx)($,{"data-testid":"kv-format-btn",disabled:v===void 0,onClick:S,size:"sm",variant:"outline",children:t("Format JSON")}),(0,a.jsx)($,{"data-testid":"kv-copy-value-btn",onClick:i(()=>{de(l.editedValue)},"onClick"),size:"sm",variant:"outline",children:t("Copy value")})]}),(0,a.jsx)(Me,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:i(f=>{y({type:"editTtl",value:f})},"onChange"),testId:"kv-ttl-input"}),(0,a.jsx)(Ie,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:_,testId:"kv-metadata-editor",valid:N,value:l.editedMetadata}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)($,{"data-testid":"kv-save-btn",disabled:l.busy!==""||!N||!C,onClick:D,children:l.busy==="saving"?t("Saving\u2026"):t("Save")}),(0,a.jsx)($,{"data-testid":"kv-delete-btn",disabled:l.busy!=="",onClick:L,variant:"destructive",children:l.busy==="deleting"?t("Deleting\u2026"):t("Delete")})]}),l.writeError!==null&&(0,a.jsx)("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:l.writeError})]}),e[42]=v,e[43]=N,e[44]=L,e[45]=S,e[46]=D,e[47]=l.busy,e[48]=l.editedMetadata,e[49]=l.editedValue,e[50]=l.loading,e[51]=l.value,e[52]=l.writeError,e[53]=t,e[54]=C,e[55]=I):I=e[55];let K;e[56]!==l.loadError||e[57]!==l.loading||e[58]!==l.value||e[59]!==t?(K=!l.loading&&l.value===null&&l.loadError===null&&(0,a.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=l.loadError,e[57]=l.loading,e[58]=l.value,e[59]=t,e[60]=K):K=e[60];let P;return e[61]!==m||e[62]!==V||e[63]!==F||e[64]!==I||e[65]!==K?(P=(0,a.jsxs)("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[m,V,F,I,K]}),e[61]=m,e[62]=V,e[63]=F,e[64]=I,e[65]=K,e[66]=P):P=e[66],P},"ze"),Se=100,Ze={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},Re=i((r,e)=>{switch(e.type){case"appendPage":return{...r,cursor:e.cursor,keys:[...r.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...r,appliedPrefix:r.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,selectedKey:null};case"bulkDeleted":{let n=new Set(e.deleted);return{...r,bulk:r.bulk.filter(u=>!n.has(u)),bulkBusy:!1,bulkError:e.error,keys:r.keys===null?null:r.keys.filter(u=>!n.has(u.name)),selectedKey:r.selectedKey!==null&&n.has(r.selectedKey)?null:r.selectedKey}}case"bulkDeleteStart":return{...r,bulkBusy:!0,bulkError:null};case"firstPage":return{...r,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...r,bulk:r.bulk.filter(n=>n!==e.name),keys:r.keys===null?null:r.keys.filter(n=>n.name!==e.name),selectedKey:null};case"loadFailed":return{...r,loadError:e.error,loading:!1};case"loadStart":return{...r,loadError:null,loading:!0};case"prefixInput":return{...r,prefixInput:e.value};case"reload":return{...r,bulk:[],bulkError:null,reloadNonce:r.reloadNonce+1,selectedKey:null};case"selectKey":return{...r,selectedKey:e.name};case"toggleAllBulk":return{...r,bulk:e.names};case"toggleBulk":return{...r,bulk:r.bulk.includes(e.name)?r.bulk.filter(n=>n!==e.name):[...r.bulk,e.name]};default:return r}},"Re"),Ue=i(({namespace:r})=>{let e=G(),n=R(),[u,s]=(0,B.useReducer)(Re,Ze),{appliedPrefix:p,bulk:o,bulkBusy:t,bulkError:l,cursor:y,keys:c,listComplete:x,loadError:b,loading:O,prefixInput:T,reloadNonce:_,selectedKey:h}=u,[v,k]=(0,B.useState)(!1);(0,B.useEffect)(()=>{let d={cancelled:!1};return A((async()=>{s({type:"loadStart"});try{let m=await e.listKvKeys({limit:Se,namespace:r,prefix:p===""?void 0:p});d.cancelled||s({cursor:m.cursor??null,keys:m.keys,listComplete:m.listComplete,type:"firstPage"})}catch(m){d.cancelled||s({error:Z(m),type:"loadFailed"})}})()),()=>{d.cancelled=!0}},[e,r,p,_]);let N=i(d=>{s({type:"prefixInput",value:d.target.value})},"x"),w=i(()=>{s({type:"applyFilter"})},"N"),C=i(d=>{s({name:d.currentTarget.dataset.key??null,type:"selectKey"})},"C"),g=i(()=>{y!==null&&(s({type:"loadStart"}),A((async()=>{try{let d=await e.listKvKeys({cursor:y,limit:Se,namespace:r,prefix:p===""?void 0:p});s({cursor:d.cursor??null,keys:d.keys,listComplete:d.listComplete,type:"appendPage"})}catch(d){s({error:Z(d),type:"loadFailed"})}})()))},"k"),S=i(d=>{s({name:d,type:"keyDeleted"})},"w"),E=i(d=>{s({name:d,type:"toggleBulk"})},"F"),D=i(d=>{s({names:d&&c!==null?c.map(m=>m.name):[],type:"toggleAllBulk"})},"_"),M=i(()=>{if(o.length===0)return;let d=[...o];s({type:"bulkDeleteStart"}),A((async()=>{let m=await Promise.allSettled(d.map(I=>e.deleteKvKey({key:I,namespace:r}))),V=d.filter((I,K)=>m[K]?.status==="fulfilled"),F=d.length-V.length;s({deleted:V,error:F>0?n("Failed to delete {count} keys.",{count:F}):null,type:"bulkDeleted"})})())},"M"),L=i(()=>{k(!1),s({type:"reload"})},"D"),J=c!==null&&c.length>0&&o.length===c.length;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[(0,a.jsxs)("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[(0,a.jsx)(ae,{"aria-label":n("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:N,placeholder:n("Filter by prefix\u2026"),value:T}),(0,a.jsx)($,{"data-testid":"kv-filter-btn",disabled:O,onClick:w,children:n("Filter")}),(0,a.jsx)($,{"data-testid":"kv-new-key-btn",onClick:i(()=>{k(d=>!d)},"onClick"),variant:"outline",children:n("New key")}),o.length>0&&(0,a.jsx)($,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:M,variant:"destructive",children:t?n("Deleting\u2026"):n("Delete {count}",{count:o.length})})]}),l!==null&&(0,a.jsx)("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:l}),b!==null&&(0,a.jsx)("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:b}),c!==null&&c.length===0&&!O&&(0,a.jsx)("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:n("No keys.")}),c!==null&&c.length>0&&(0,a.jsx)(re,{className:"overflow-hidden py-0",children:(0,a.jsx)(ne,{className:"px-0",children:(0,a.jsxs)(se,{"data-testid":"kv-key-table",children:[(0,a.jsx)(ie,{children:(0,a.jsxs)(Q,{children:[(0,a.jsx)(X,{className:"w-10",children:(0,a.jsx)(ue,{"aria-label":n("Select all"),checked:J,"data-testid":"kv-select-all",onCheckedChange:D})}),(0,a.jsx)(X,{children:n("Key")}),(0,a.jsx)(X,{children:n("Expiration")})]})}),(0,a.jsx)(oe,{children:c.map(d=>(0,a.jsxs)(Q,{className:d.name===h?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":d.name,"data-testid":`kv-key-row-${d.name}`,onClick:C,children:[(0,a.jsx)(Y,{onClick:i(m=>{m.stopPropagation()},"onClick"),children:(0,a.jsx)(ue,{"aria-label":n("Select {name}",{name:d.name}),checked:o.includes(d.name),"data-testid":`kv-select-${d.name}`,onCheckedChange:i(()=>{E(d.name)},"onCheckedChange")})}),(0,a.jsx)(Y,{className:"font-mono text-xs",children:d.name}),(0,a.jsx)(Y,{className:"tabular-nums text-xs",children:Le(d.expiration)})]},d.name))})]})})}),!x&&y!==null&&(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)($,{"data-testid":"kv-load-more",disabled:O,onClick:g,variant:"outline",children:n(O?"Loading\u2026":"Load more")})})]}),(0,a.jsx)(me,{onOpenChange:i(d=>{d||k(!1)},"onOpenChange"),open:v,children:(0,a.jsxs)(ve,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[(0,a.jsx)(pe,{children:(0,a.jsx)(ye,{children:n("New key")})}),(0,a.jsx)(je,{namespace:r,onCancel:i(()=>{k(!1)},"onCancel"),onCreated:L})]})}),(0,a.jsx)(me,{onOpenChange:i(d=>{d||s({name:null,type:"selectKey"})},"onOpenChange"),open:h!==null,children:(0,a.jsxs)(ve,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[(0,a.jsx)(pe,{children:(0,a.jsx)(ye,{className:"truncate font-mono text-xs",children:h})}),h!==null&&(0,a.jsx)(He,{expiration:c?.find(d=>d.name===h)?.expiration,keyName:h,namespace:r,onDeleted:S},`${r}:${h}`)]})})]})},"Ue"),it=i(({loadNamespaces:r}={})=>{let e=G(),n=R(),[u,s]=(0,B.useState)(null),[p,o]=(0,B.useState)(null),[t,l]=(0,B.useState)(null);(0,B.useEffect)(()=>{let c={cancelled:!1};return A((async()=>{try{let x=await(r??(()=>e.listKvNamespaces()))();c.cancelled||(s(x),o(null),l(b=>b??x[0]?.binding??null))}catch(x){c.cancelled||(s(null),o(Z(x)))}})()),()=>{c.cancelled=!0}},[e,r]);let y=i(c=>{l(c.currentTarget.dataset.ns??null)},"p");return(0,a.jsxs)("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[p!==null&&(0,a.jsx)("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:p}),u!==null&&u.length===0&&(0,a.jsx)(ke,{description:n("Add a kv_namespaces binding to wrangler.jsonc \u2014 it appears here automatically, no wiring needed."),icon:(0,a.jsx)("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:n("No KV namespaces.")}),u!==null&&u.length>0&&(0,a.jsx)(re,{className:"overflow-hidden py-0",children:(0,a.jsx)(ne,{className:"px-0",children:(0,a.jsxs)(se,{"data-testid":"kv-namespace-table",children:[(0,a.jsx)(ie,{children:(0,a.jsx)(Q,{children:(0,a.jsx)(X,{children:n("Namespace")})})}),(0,a.jsx)(oe,{children:u.map(c=>(0,a.jsx)(Q,{className:c.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":c.binding,"data-testid":`kv-ns-row-${c.binding}`,onClick:y,children:(0,a.jsx)(Y,{className:"font-mono text-xs",children:c.binding})},c.binding))})]})})}),t!==null&&(0,a.jsx)(Ue,{namespace:t},t)]})},"ct");export{it as KvBrowser};