@edge-base/server 0.1.2 → 0.1.3
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/admin-build/_app/immutable/assets/21.x9OgMBdi.css +1 -0
- package/admin-build/_app/immutable/assets/TableSqlTab.BHquaMBM.css +1 -0
- package/admin-build/_app/immutable/chunks/{DOxNYcs9.js → 9Ch6RgcX.js} +1 -1
- package/admin-build/_app/immutable/chunks/B-pVQkKM.js +1 -0
- package/admin-build/_app/immutable/chunks/{eFQHTGwA.js → B0HRJ657.js} +1 -1
- package/admin-build/_app/immutable/chunks/B2bEC_Hm.js +1 -0
- package/admin-build/_app/immutable/chunks/{CwROoZK0.js → B8s_s9QY.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CY1F93Wv.js → BOSBsYO8.js} +1 -1
- package/admin-build/_app/immutable/chunks/{ehbppgYb.js → Bb0e0sAP.js} +1 -1
- package/admin-build/_app/immutable/chunks/{glwixJlP.js → BdTBlfLy.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DoPXzH7F.js → Bn2NtlTj.js} +1 -1
- package/admin-build/_app/immutable/chunks/BvukSxhJ.js +128 -0
- package/admin-build/_app/immutable/chunks/BwxFS5FL.js +2 -0
- package/admin-build/_app/immutable/chunks/{Cs0GwzJA.js → C72lTcG0.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BmRjiP5k.js → C8s55wKu.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BK8YUsyH.js → CBVE2cdU.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Ga6XaOJm.js → CF95mcQY.js} +1 -1
- package/admin-build/_app/immutable/chunks/CGgVJi7f.js +1 -0
- package/admin-build/_app/immutable/chunks/{NuUjtcO2.js → CYatlt7w.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CLHXYVje.js → CnWwy2Sf.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C6puvcoR.js → CoI6jjbg.js} +2 -2
- package/admin-build/_app/immutable/chunks/{B8vJP3wz.js → Cp8V0Xy2.js} +1 -1
- package/admin-build/_app/immutable/chunks/{p-WBlAu3.js → D8o7yzcA.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BR_fL5Yv.js → DEELgv7K.js} +1 -1
- package/admin-build/_app/immutable/chunks/{7f08Id8e.js → DHWOQ9Ui.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Bh56EfQ_.js → DILS_-VJ.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BF8I5XXQ.js → DTmaM1M6.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DYDZ2Kma.js → DroeC-Do.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Br0qug7_.js → DskOoVLT.js} +1 -1
- package/admin-build/_app/immutable/chunks/{7B47DvSx.js → Dt4vL4Df.js} +1 -1
- package/admin-build/_app/immutable/chunks/{D5h5A1cc.js → DtZk82gG.js} +2 -2
- package/admin-build/_app/immutable/chunks/{C4D51vTW.js → F9_4wRrd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BhjcOf7X.js → I0AZRbV2.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BMMOfNi6.js → MKsm6wXE.js} +1 -1
- package/admin-build/_app/immutable/chunks/WtDa8jKW.js +1 -0
- package/admin-build/_app/immutable/chunks/XmteHKH_.js +1 -0
- package/admin-build/_app/immutable/chunks/{UUazaC_N.js → Y22E1hJM.js} +1 -1
- package/admin-build/_app/immutable/chunks/{vApWTCBs.js → Z41NK6i6.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DrQSgw-f.js → _teD5ji5.js} +1 -1
- package/admin-build/_app/immutable/chunks/{MdeqaOQx.js → gtu8uwJD.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DnyL7Zq-.js → m9eWh0Cd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C0LrJucL.js → v2HHbTgy.js} +1 -1
- package/admin-build/_app/immutable/entry/app.Dh4eYd90.js +2 -0
- package/admin-build/_app/immutable/entry/start.DjnjDre4.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.B13aXl3s.js → 0._kCczuod.js} +1 -1
- package/admin-build/_app/immutable/nodes/{1.we4dgVtx.js → 1.C8vaAzdV.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.hrAvOhgI.js → 10.TsbpWcyB.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.BZM_Cbjk.js → 11.DbwjQWdP.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.pfrTdfHj.js → 12.BMCb3LcM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.BvR9UoZX.js → 13.CTXx-p7a.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.BCE_g1DT.js → 14.BW1Sfg3E.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.DZrUjo5V.js → 15.DAKEfLVF.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.B_K_CGU4.js → 16.BZHOIVRq.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.D7RlNUbd.js → 17.DcntvsXi.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.dw9OGxA1.js → 18.Badw-bZ2.js} +1 -1
- package/admin-build/_app/immutable/nodes/{19.B_K_CGU4.js → 19.BZHOIVRq.js} +1 -1
- package/admin-build/_app/immutable/nodes/2.Bn3R2oDm.js +1 -0
- package/admin-build/_app/immutable/nodes/{20.Bij6g6xR.js → 20.DDTfgFOS.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.BbdBT511.js +1 -0
- package/admin-build/_app/immutable/nodes/{22.wLPyRbDg.js → 22.DLaL76VE.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.DnjIdPPl.js → 23.D1tjWuvB.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.PhJEmwPf.js → 24.8cwANb8Q.js} +1 -1
- package/admin-build/_app/immutable/nodes/{25.HUYuEeiI.js → 25.DCU-ztvR.js} +1 -1
- package/admin-build/_app/immutable/nodes/{26.CtrQ3jI5.js → 26.CuHUfaEI.js} +1 -1
- package/admin-build/_app/immutable/nodes/{27.CMM8T90I.js → 27.fOpy2ckO.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.CH6XAnHt.js → 28.DWB877rH.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.Bos0u5_B.js → 29.D9hvrxFP.js} +1 -1
- package/admin-build/_app/immutable/nodes/{3.BPnU2jxx.js → 3.BJG5UaW0.js} +1 -1
- package/admin-build/_app/immutable/nodes/{30.ScIH1W0H.js → 30.52Okvb4S.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.CXHVAiwb.js → 31.B2rKWEXY.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.BY6Ri1gh.js → 4.BMrPKdZ6.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.D0tPp_Kt.js → 5.BHBRNfgt.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.BuWVNVH1.js → 6.Uq3G0mmd.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.B26-qam0.js → 7.BS-ss8zw.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.CdDKHsMK.js → 8.5bzwkzMM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.BSo7a28L.js → 9.BA61CCFG.js} +1 -1
- package/admin-build/_app/version.json +1 -1
- package/admin-build/favicon.svg +3 -2
- package/admin-build/index.html +17 -16
- package/package.json +2 -2
- package/admin-build/_app/immutable/assets/21.Dz2RJ56c.css +0 -1
- package/admin-build/_app/immutable/chunks/BOjkBtym.js +0 -1
- package/admin-build/_app/immutable/chunks/CB8xN3_t.js +0 -1
- package/admin-build/_app/immutable/chunks/CxbRue-5.js +0 -1
- package/admin-build/_app/immutable/chunks/CyqB6g-D.js +0 -1
- package/admin-build/_app/immutable/entry/app.BcgNsUX3.js +0 -2
- package/admin-build/_app/immutable/entry/start.otAJzcqZ.js +0 -1
- package/admin-build/_app/immutable/nodes/2.BKoKrw1i.js +0 -1
- package/admin-build/_app/immutable/nodes/21.DyYxtUDl.js +0 -128
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as we}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as we}from"../chunks/Bn2NtlTj.js";import{p as Pe,d as v,M as pe,a as Ee,f as re,b as l,g as e,s as o,c as r,r as s,ae as le,ag as Ue,t as z,u as G}from"../chunks/BdTBlfLy.js";import{s as I}from"../chunks/DtZk82gG.js";import{i as K}from"../chunks/Y22E1hJM.js";import{a as oe,t as Q,b as Fe,e as he}from"../chunks/MKsm6wXE.js";import{a as c,t as ne,f as b}from"../chunks/DEELgv7K.js";import{a as V}from"../chunks/CoI6jjbg.js";import{b as Be}from"../chunks/CYatlt7w.js";import{P as Me}from"../chunks/B8s_s9QY.js";import{p as Le}from"../chunks/Q2nPFxS6.js";import{T as Oe}from"../chunks/BOSBsYO8.js";import{I as R}from"../chunks/_teD5ji5.js";import{B as ie}from"../chunks/C72lTcG0.js";import{B as de}from"../chunks/B0HRJ657.js";import{E as _e}from"../chunks/m9eWh0Cd.js";var Re=b('<tr class="svelte-8uesg1"><td class="mono svelte-8uesg1"> </td><td class="svelte-8uesg1"><!></td><td class="mono svelte-8uesg1"> </td><td class="secondary svelte-8uesg1"> </td></tr>'),Je=b('<div class="table-wrapper svelte-8uesg1"><table class="data-table svelte-8uesg1"><thead class="svelte-8uesg1"><tr><th class="svelte-8uesg1">Device ID</th><th class="svelte-8uesg1">Platform</th><th class="svelte-8uesg1">Token</th><th class="svelte-8uesg1">Registered</th></tr></thead><tbody class="svelte-8uesg1"></tbody></table></div>'),Ae=b('<div class="search-bar svelte-8uesg1"><!> <!></div> <!>',1),Ce=b('<div class="send-result svelte-8uesg1"><!> <span> </span></div>'),qe=b('<div class="send-form svelte-8uesg1"><!> <!> <!> <div class="form-field svelte-8uesg1"><label class="form-label svelte-8uesg1">Custom Data (JSON)</label> <textarea class="form-textarea svelte-8uesg1" rows="3"></textarea></div> <!> <!></div>'),He=b('<tr class="svelte-8uesg1"><td class="secondary svelte-8uesg1"> </td><td class="mono svelte-8uesg1"> </td><td class="svelte-8uesg1"><!></td><td class="svelte-8uesg1"> </td><td class="secondary svelte-8uesg1"> </td></tr>'),je=b('<div class="table-wrapper svelte-8uesg1"><table class="data-table svelte-8uesg1"><thead class="svelte-8uesg1"><tr><th class="svelte-8uesg1">Time</th><th class="svelte-8uesg1">User</th><th class="svelte-8uesg1">Status</th><th class="svelte-8uesg1">Sent/Failed</th><th class="svelte-8uesg1">Payload</th></tr></thead><tbody class="svelte-8uesg1"></tbody></table></div>'),ze=b('<div class="search-bar svelte-8uesg1"><!> <!></div> <!>',1),Ge=b('<!> <div class="tab-content svelte-8uesg1"><!></div>',1);function dt(be,ye){Pe(ye,!0);let U=v("tokens");const Se=[{id:"tokens",label:"Tokens"},{id:"send",label:"Test Send"},{id:"logs",label:"Logs"}];let J=v(""),F=v(pe([])),W=v(!1);async function ke(){if(!e(J).trim()){l(F,[],!0);return}l(W,!0);try{const t=await oe.fetch(`data/push/tokens?userId=${encodeURIComponent(e(J).trim())}`);l(F,t.items,!0)}catch(t){Q(t instanceof Error?t.message:"Failed to load tokens"),l(F,[],!0)}finally{l(W,!1)}}let B=v(""),M=v(""),X=v(""),A=v(""),C=v(!1),D=v(null);const ve=`push-send-data-${Math.random().toString(36).slice(2,9)}`;async function xe(){if(!(!e(B).trim()||!e(M).trim())){l(C,!0),l(D,null);try{const t={userId:e(B).trim(),title:e(M).trim(),body:e(X).trim()};if(e(A).trim())try{t.data=JSON.parse(e(A).trim())}catch{Q('Invalid JSON in data field. Example: {"key": "value"}'),l(C,!1);return}const y=await oe.fetch("data/push/test-send",{method:"POST",body:t});l(D,y,!0),Fe(`Sent to ${y.sent??0} device(s)`)}catch(t){Q(t instanceof Error?t.message:"Failed to send")}finally{l(C,!1)}}}let q=v(""),H=v(pe([])),Y=v(!1);async function ue(){l(Y,!0);try{let t="data/push/logs?limit=50";e(q).trim()&&(t+=`&userId=${encodeURIComponent(e(q).trim())}`);const y=await oe.fetch(t);l(H,y.items,!0)}catch(t){Q(t instanceof Error?t.message:"Failed to load logs"),l(H,[],!0)}finally{l(Y,!1)}}we(()=>{ue()});function ce(t){if(!t)return"-";try{return new Date(t).toLocaleString()}catch{return String(t)}}function j(t,y=24){return t.length>y?t.slice(0,y)+"...":t}Me(be,{title:"Push Notifications",description:"Manage push tokens, test sends, and view logs",get docsHref(){return Le},children:(t,y)=>{var ge=Ge(),fe=re(ge);Oe(fe,{get tabs(){return Se},get activeTab(){return e(U)},set activeTab(g){l(U,g,!0)}});var me=o(fe,2),Ie=r(me);{var $e=g=>{var h=Ae(),p=re(h),S=r(p);R(S,{placeholder:"Enter User ID...",get value(){return e(J)},set value(a){l(J,a,!0)}});var N=o(S,2);ie(N,{variant:"primary",onclick:ke,get loading(){return e(W)},children:(a,f)=>{le();var m=ne("Search");c(a,m)},$$slots:{default:!0}}),s(p);var $=o(p,2);{var w=a=>{_e(a,{title:"No tokens",description:"Enter a user ID to search for registered push tokens."})},k=a=>{var f=Je(),m=r(f),n=o(r(m));he(n,21,()=>e(F),d=>d.deviceId??Math.random(),(d,i)=>{var u=Re(),_=r(u),Z=r(_,!0);s(_);var T=o(_),ee=r(T);{let E=G(()=>String(e(i).platform??"unknown"));de(ee,{variant:"primary",get text(){return e(E)}})}s(T);var x=o(T),te=r(x,!0);s(x);var P=o(x),ae=r(P,!0);s(P),s(u),z((E,se,L,O)=>{I(Z,E),V(x,"title",se),I(te,L),I(ae,O)},[()=>j(String(e(i).deviceId??""),16),()=>String(e(i).token??""),()=>j(String(e(i).token??""),30),()=>ce(e(i).registeredAt)]),c(d,u)}),s(n),s(m),s(f),c(a,f)};K($,a=>{e(F).length===0?a(w):a(k,!1)})}c(g,h)},Te=g=>{var h=qe(),p=r(h);R(p,{label:"User ID",placeholder:"Target user ID",required:!0,get value(){return e(B)},set value(n){l(B,n,!0)}});var S=o(p,2);R(S,{label:"Title",placeholder:"Notification title",required:!0,get value(){return e(M)},set value(n){l(M,n,!0)}});var N=o(S,2);R(N,{label:"Body",placeholder:"Notification body (optional)",get value(){return e(X)},set value(n){l(X,n,!0)}});var $=o(N,2),w=r($),k=o(w,2);Ue(k),V(k,"placeholder",'{"key": "value"}'),s($);var a=o($,2);{let n=G(()=>!e(B).trim()||!e(M).trim());ie(a,{variant:"primary",onclick:xe,get loading(){return e(C)},get disabled(){return e(n)},children:(d,i)=>{le();var u=ne("Send Test Notification");c(d,u)},$$slots:{default:!0}})}var f=o(a,2);{var m=n=>{var d=Ce(),i=r(d);de(i,{variant:"success",text:"Sent"});var u=o(i,2),_=r(u);s(u),s(d),z(()=>I(_,`Sent: ${e(D).sent??""}, Failed: ${e(D).failed??""}, Total: ${e(D).total??""}`)),c(n,d)};K(f,n=>{e(D)&&n(m)})}s(h),z(()=>{V(w,"for",ve),V(k,"id",ve)}),Be(k,()=>e(A),n=>l(A,n)),c(g,h)},De=g=>{var h=ze(),p=re(h),S=r(p);R(S,{placeholder:"Filter by User ID (optional)...",get value(){return e(q)},set value(a){l(q,a,!0)}});var N=o(S,2);ie(N,{variant:"primary",onclick:ue,get loading(){return e(Y)},children:(a,f)=>{le();var m=ne("Refresh");c(a,m)},$$slots:{default:!0}}),s(p);var $=o(p,2);{var w=a=>{_e(a,{title:"No logs",description:"No push notification logs found."})},k=a=>{var f=je(),m=r(f),n=o(r(m));he(n,21,()=>e(H),d=>d.sentAt??Math.random(),(d,i)=>{var u=He(),_=r(u),Z=r(_,!0);s(_);var T=o(_),ee=r(T,!0);s(T);var x=o(T),te=r(x);{let L=G(()=>e(i).status==="success"?"success":e(i).status==="partial"?"warning":"danger"),O=G(()=>String(e(i).status??"-"));de(te,{get variant(){return e(L)},get text(){return e(O)}})}s(x);var P=o(x),ae=r(P);s(P);var E=o(P),se=r(E,!0);s(E),s(u),z((L,O,Ne)=>{I(Z,L),I(ee,O),I(ae,`${e(i).tokensSent??0??""} / ${e(i).tokensFailed??0??""}`),I(se,Ne)},[()=>ce(e(i).sentAt),()=>j(String(e(i).userId??""),16),()=>j(JSON.stringify(e(i).payload??{}),40)]),c(d,u)}),s(n),s(m),s(f),c(a,f)};K($,a=>{e(H).length===0?a(w):a(k,!1)})}c(g,h)};K(Ie,g=>{e(U)==="tokens"?g($e):e(U)==="send"?g(Te,1):e(U)==="logs"&&g(De,2)})}s(me),c(t,ge)}}),Ee()}export{dt as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as gs}from"../chunks/DoPXzH7F.js";import{p as _s,d as A,M as ps,f as te,a as fs,b as o,g as e,r as t,c as s,s as a,ae as D,t as C,u as Y}from"../chunks/glwixJlP.js";import{d as ms,s as g,a as hs,e as yt}from"../chunks/D5h5A1cc.js";import{i as P}from"../chunks/UUazaC_N.js";import{a as se,e as U,i as Z,b as ve,t as ae}from"../chunks/BMMOfNi6.js";import{a as n,f as p,c as ge,t as w}from"../chunks/BR_fL5Yv.js";import{s as ys}from"../chunks/C6puvcoR.js";import{d as ws}from"../chunks/wJsUhbfZ.js";import"../chunks/Ga6XaOJm.js";import{P as $s}from"../chunks/CwROoZK0.js";import{b as xs}from"../chunks/Q2nPFxS6.js";import{B as _e}from"../chunks/eFQHTGwA.js";import{B as V}from"../chunks/Cs0GwzJA.js";import{M as Ie}from"../chunks/7B47DvSx.js";import{I as $e}from"../chunks/DrQSgw-f.js";import{C as wt}from"../chunks/Bh56EfQ_.js";import{S as pe}from"../chunks/BK8YUsyH.js";var bs=p('<div class="settings-row svelte-1i19ct2"><!> <!></div>'),ks=p('<div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2"><!></h3> <div class="settings-rows svelte-1i19ct2"></div></div>'),As=p('<div class="settings-grid svelte-1i19ct2"></div>'),Ds=p('<div class="settings-error svelte-1i19ct2">Failed to load configuration.</div>'),Ps=p('<div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2"></span> <span class="settings-value settings-value--key svelte-1i19ct2"><code class="key-preview svelte-1i19ct2"> </code> <button class="copy-btn svelte-1i19ct2" title="Copy masked key"><svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="5" y="5" width="8" height="8" rx="1"></rect><path d="M3 11V3h8" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></span></div>'),Es=p('<div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2"> </span> <span class="settings-value svelte-1i19ct2"> <!></span></div>'),Cs=p('<div class="settings-empty svelte-1i19ct2">No databases configured</div>'),Ss=p('<div class="settings-row settings-row--top svelte-1i19ct2"><span class="settings-key settings-key--stack svelte-1i19ct2"><code class="settings-code svelte-1i19ct2"> </code> <!></span> <span class="settings-value settings-value--stack settings-value--rate svelte-1i19ct2"><span><span class="settings-inline-label svelte-1i19ct2">Soft</span> </span> <span class="settings-subvalue svelte-1i19ct2"> </span></span></div>'),zs=p('<div class="settings-empty svelte-1i19ct2">No rate limit settings found</div>'),Ls=p('<div class="settings-row svelte-1i19ct2"><!> <!></div>'),Bs=p('<div class="settings-empty svelte-1i19ct2">No admin accounts found</div>'),Ts=p('<div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2"> </span> <span class="settings-value settings-value--actions svelte-1i19ct2"><span class="settings-date svelte-1i19ct2"> </span> <!> <!></span></div>'),Ns=p('<li class="svelte-1i19ct2"> </li>'),Rs=p('<div class="danger-zone__result-section svelte-1i19ct2"><strong>Deleted:</strong> <ul class="svelte-1i19ct2"></ul></div>'),Ks=p('<li class="svelte-1i19ct2"> </li>'),js=p('<div class="danger-zone__result-section danger-zone__result-section--error svelte-1i19ct2"><strong>Failed:</strong> <ul class="svelte-1i19ct2"></ul></div>'),Vs=p('<div class="danger-zone__result svelte-1i19ct2"><p> </p> <!> <!></div>'),Ms=p('<div class="danger-zone__content svelte-1i19ct2"><div class="danger-zone__item svelte-1i19ct2"><div><p class="danger-zone__item-title svelte-1i19ct2">Delete this app</p> <p class="danger-zone__item-desc svelte-1i19ct2">Permanently delete all Cloudflare resources including databases, storage, KV namespaces, and the Worker itself. This action cannot be undone.</p></div> <!></div></div>'),Os=p('<div class="danger-zone svelte-1i19ct2"><div class="danger-zone__header svelte-1i19ct2"><h3 class="danger-zone__title svelte-1i19ct2">Danger Zone</h3></div> <!></div>'),Fs=p('<div class="settings-grid svelte-1i19ct2"><div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Environment</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Mode</span> <!></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Release</span> <!></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Service Keys</span> <span class="settings-value svelte-1i19ct2"> </span></div> <!></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Databases</h3> <div class="settings-rows svelte-1i19ct2"><!> <!></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Bindings</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">KV Namespaces</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">D1 Databases</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Vectorize Indexes</span> <span class="settings-value svelte-1i19ct2"> </span></div></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Auth</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Anonymous Auth</span> <!></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">OAuth Providers</span> <span class="settings-value svelte-1i19ct2"><!></span></div></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Storage</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Buckets</span> <span class="settings-value svelte-1i19ct2"><!></span></div></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Rate Limiting</h3> <div class="settings-rows svelte-1i19ct2"><!></div> <div class="settings-note svelte-1i19ct2">Defined in <code>edgebase.config.ts</code> or <code>config/rate-limits.ts</code>.</div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Native Resources</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">KV Namespaces</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">D1 Databases</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Vectorize Indexes</span> <span class="settings-value svelte-1i19ct2"> </span></div></div></div></div> <div class="settings-card settings-card--full svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Admin Accounts <!></h3> <div class="settings-rows svelte-1i19ct2"><!></div></div> <!>',1),Is=p('<div class="delete-confirm svelte-1i19ct2"><p class="delete-confirm__warning svelte-1i19ct2">This is your final confirmation. All data will be permanently lost.</p> <p class="delete-confirm__instruction svelte-1i19ct2">Type <strong>DELETE_ALL_RESOURCES</strong> to confirm:</p> <!> <div class="modal-actions svelte-1i19ct2"><!> <!></div></div>'),Us=p('<form><div class="modal-fields svelte-1i19ct2"><!> <!></div> <div class="modal-actions svelte-1i19ct2"><!> <!></div></form>'),qs=p('<form><p class="modal-info svelte-1i19ct2">Changing password for <strong> </strong></p> <div class="modal-fields svelte-1i19ct2"><!></div> <div class="modal-actions svelte-1i19ct2"><!> <!></div></form>'),Ws=p("<!> <!> <!> <!> <!> <!>",1);function ca($t,xt){_s(xt,!0);let Ue=A(!0),v=A(null);function bt(r,$){return`${r.toLocaleString()} / ${$}`}function kt(r){if(!r)return"No binding";if(!r.enabled)return"Binding disabled";if(r.limit==null||r.period==null)return"Binding configured";const $=`${r.limit.toLocaleString()} / ${r.period}s`;return r.source==="override"||r.source==="custom"?`Binding ${$}`:`Binding ${$} (default)`}function xe(r){return r.length>0?r.join(", "):"None configured"}function At(r){return r?r.enabled?r.source==="override"?"primary":r.source==="custom"?"warning":"default":"danger":"default"}function Dt(r){return r?r.enabled?r.source==="override"?"Binding override":r.source==="custom"?"Custom group":"Default binding":"Binding off":"Soft only"}async function Pt(r){try{await navigator.clipboard.writeText(r),ve("Copied to clipboard (masked)")}catch{ae("Failed to copy")}}gs(async()=>{try{o(v,await se.fetch("data/config-info"),!0)}catch{o(v,null)}finally{o(Ue,!1)}Ae()});let de=A(ps([])),qe=A(!0),ce=A(!1),re=A(""),ie=A(""),be=A(!1),G=A(null),q=A(null),Q=A(""),ke=A(!1);async function Ae(){try{const r=await se.fetch("data/admins");o(de,r.admins,!0)}catch{o(de,[],!0)}finally{o(qe,!1)}}async function Et(){if(!(!e(re).trim()||!e(ie).trim())){o(be,!0);try{await se.fetch("data/admins",{method:"POST",body:{email:e(re),password:e(ie)}}),ve("Admin account created"),o(ce,!1),o(re,""),o(ie,""),await Ae()}catch(r){ae(r instanceof Error?r.message:"Failed to create admin")}finally{o(be,!1)}}}async function Ct(){if(!e(G))return;const r=e(G);o(G,null);try{await se.fetch(`data/admins/${r.id}`,{method:"DELETE"}),ve("Admin account deleted"),await Ae()}catch($){ae($ instanceof Error?$.message:"Failed to delete admin")}}async function St(){if(!(!e(q)||!e(Q).trim())){o(ke,!0);try{await se.fetch(`data/admins/${e(q).id}/password`,{method:"PUT",body:{password:e(Q)}}),ve("Password updated"),o(q,null),o(Q,"")}catch(r){ae(r instanceof Error?r.message:"Failed to change password")}finally{o(ke,!1)}}}async function zt(){try{const r=await se.fetch("data/backup/config"),$=new Blob([JSON.stringify(r,null,2)],{type:"application/json"});ws($,`edgebase-config-snapshot-${new Date().toISOString().slice(0,10)}.json`),ve("Config snapshot downloaded")}catch(r){ae(r instanceof Error?r.message:"Failed to download config")}}let fe=A(!1),me=A(!1),ne=A(""),De=A(!1),W=A(null);function Lt(){o(fe,!0)}function Bt(){o(fe,!1),o(me,!0),o(ne,"")}function Pe(){o(fe,!1),o(me,!1),o(ne,"")}async function Tt(){o(De,!0);try{const r=await se.fetch("data/destroy-app",{method:"POST",body:{confirm:"DELETE_ALL_RESOURCES"}});o(W,r,!0),o(me,!1),r.success?ve("All resources destroyed. This app has been deleted."):ae(`Partial destruction: ${r.failed.length} resource(s) failed to delete.`)}catch(r){ae(r instanceof Error?r.message:"Failed to destroy app")}finally{o(De,!1),o(ne,"")}}var We=Ws(),He=te(We);$s(He,{title:"Project Info",description:"Environment and resource overview with admin account controls",get docsHref(){return xs},actions:$=>{V($,{variant:"secondary",size:"sm",onclick:zt,children:(ue,x)=>{D();var S=w("Download Config Snapshot");n(ue,S)},$$slots:{default:!0}})},children:($,ue)=>{var x=ge(),S=te(x);{var M=h=>{var E=As();U(E,20,()=>Array(5),Z,(f,K)=>{var b=ks(),T=s(b),le=s(T);pe(le,{width:"120px",height:"13px"}),t(T);var J=a(T,2);U(J,20,()=>Array(3),Z,(Ee,he)=>{var oe=bs(),ye=s(oe);pe(ye,{width:"80px",height:"12px"});var Ce=a(ye,2);pe(Ce,{width:"100px",height:"12px"}),t(oe),n(Ee,oe)}),t(J),t(b),n(f,b)}),t(E),n(h,E)},H=h=>{var E=Ds();n(h,E)},O=h=>{var E=Fs(),f=te(E),K=s(f),b=a(s(K),2),T=s(b),le=a(s(T),2);{let i=Y(()=>e(v).devMode?"warning":"success");_e(le,{get variant(){return e(i)},children:(l,_)=>{D();var d=w();C(()=>g(d,e(v).devMode?"Development":"Production")),n(l,d)},$$slots:{default:!0}})}t(T);var J=a(T,2),Ee=a(s(J),2);{let i=Y(()=>e(v).release?"success":"default");_e(Ee,{get variant(){return e(i)},children:(l,_)=>{D();var d=w();C(()=>g(d,e(v).release?"Enabled (deny-by-default)":"Disabled (dev permissive)")),n(l,d)},$$slots:{default:!0}})}t(J);var he=a(J,2),oe=a(s(he),2),ye=s(oe);t(oe),t(he);var Ce=a(he,2);{var Ot=i=>{var l=ge(),_=te(l);U(_,17,()=>e(v).serviceKeys,Z,(d,m,c)=>{var u=Ps(),y=s(u);y.textContent=`Key ${c+1}`;var z=a(y,2),k=s(z),N=s(k,!0);t(k);var B=a(k,2);t(z),t(u),C(()=>g(N,e(m))),hs("click",B,()=>Pt(e(m))),n(d,u)}),n(i,l)};P(Ce,i=>{e(v).serviceKeys&&e(v).serviceKeys.length>0&&i(Ot)})}t(b),t(K);var Se=a(K,2),Qe=a(s(Se),2),Xe=s(Qe);U(Xe,17,()=>e(v).databases,Z,(i,l)=>{var _=Es(),d=s(_),m=s(d,!0);t(d);var c=a(d,2),u=s(c),y=a(u);{var z=k=>{_e(k,{variant:"primary",children:(N,B)=>{D();var X=w("access rule");n(N,X)},$$slots:{default:!0}})};P(y,k=>{e(l).hasAccess&&k(z)})}t(c),t(_),C(()=>{g(m,e(l).name),g(u,`${e(l).tableCount??""} table${e(l).tableCount!==1?"s":""} `)}),n(i,_)});var Ft=a(Xe,2);{var It=i=>{var l=Cs();n(i,l)};P(Ft,i=>{e(v).databases.length===0&&i(It)})}t(Qe),t(Se);var ze=a(Se,2),et=a(s(ze),2),Le=s(et),tt=a(s(Le),2),Ut=s(tt,!0);t(tt),t(Le);var Be=a(Le,2),st=a(s(Be),2),qt=s(st,!0);t(st),t(Be);var at=a(Be,2),rt=a(s(at),2),Wt=s(rt,!0);t(rt),t(at),t(et),t(ze);var Te=a(ze,2),it=a(s(Te),2),Ne=s(it),Ht=a(s(Ne),2);{let i=Y(()=>e(v).auth.anonymousAuth?"success":"default");_e(Ht,{get variant(){return e(i)},children:(l,_)=>{D();var d=w();C(()=>g(d,e(v).auth.anonymousAuth?"Enabled":"Disabled")),n(l,d)},$$slots:{default:!0}})}t(Ne);var nt=a(Ne,2),lt=a(s(nt),2),Jt=s(lt);{var Yt=i=>{var l=w();C(_=>g(l,_),[()=>e(v).auth.providers.join(", ")]),n(i,l)},Zt=i=>{var l=w("None configured");n(i,l)};P(Jt,i=>{e(v).auth.providers.length>0?i(Yt):i(Zt,!1)})}t(lt),t(nt),t(it),t(Te);var Re=a(Te,2),ot=a(s(Re),2),vt=s(ot),dt=a(s(vt),2),Gt=s(dt);{var Qt=i=>{var l=w();C(_=>g(l,_),[()=>e(v).storageBuckets.join(", ")]),n(i,l)},Xt=i=>{var l=w("None configured");n(i,l)};P(Gt,i=>{e(v).storageBuckets.length>0?i(Qt):i(Xt,!1)})}t(dt),t(vt),t(ot),t(Re);var Ke=a(Re,2),ct=a(s(Ke),2),es=s(ct);{var ts=i=>{var l=ge(),_=te(l);U(_,17,()=>e(v).rateLimiting,Z,(d,m)=>{var c=Ss(),u=s(c),y=s(u),z=s(y,!0);t(y);var k=a(y,2);{let L=Y(()=>At(e(m).binding));_e(k,{get variant(){return e(L)},children:(j,we)=>{D();var ee=w();C(I=>g(ee,I),[()=>Dt(e(m).binding)]),n(j,ee)},$$slots:{default:!0}})}t(u);var N=a(u,2),B=s(N),X=a(s(B),1,!0);t(B);var F=a(B,2),R=s(F,!0);t(F),t(N),t(c),C((L,j)=>{g(z,e(m).group),g(X,L),g(R,j)},[()=>bt(e(m).requests,e(m).window),()=>kt(e(m).binding)]),n(d,c)}),n(i,l)},ss=i=>{var l=zs();n(i,l)};P(es,i=>{e(v).rateLimiting.length>0?i(ts):i(ss,!1)})}t(ct),D(2),t(Ke);var ut=a(Ke,2),gt=a(s(ut),2),je=s(gt),_t=a(s(je),2),as=s(_t,!0);t(_t),t(je);var Ve=a(je,2),pt=a(s(Ve),2),rs=s(pt,!0);t(pt),t(Ve);var ft=a(Ve,2),mt=a(s(ft),2),is=s(mt,!0);t(mt),t(ft),t(gt),t(ut),t(f);var Me=a(f,2),Oe=s(Me),ns=a(s(Oe));V(ns,{variant:"primary",size:"sm",onclick:()=>o(ce,!0),children:(i,l)=>{D();var _=w("+ Add Admin");n(i,_)},$$slots:{default:!0}}),t(Oe);var ht=a(Oe,2),ls=s(ht);{var os=i=>{var l=ge(),_=te(l);U(_,16,()=>Array(2),Z,(d,m)=>{var c=Ls(),u=s(c);pe(u,{width:"150px",height:"12px"});var y=a(u,2);pe(y,{width:"80px",height:"12px"}),t(c),n(d,c)}),n(i,l)},vs=i=>{var l=Bs();n(i,l)},ds=i=>{var l=ge(),_=te(l);U(_,17,()=>e(de),d=>d.id,(d,m)=>{var c=Ts(),u=s(c),y=s(u,!0);t(u);var z=a(u,2),k=s(z),N=s(k,!0);t(k);var B=a(k,2);V(B,{variant:"secondary",size:"sm",onclick:()=>{o(q,e(m),!0),o(Q,"")},children:(F,R)=>{D();var L=w("Change Password");n(F,L)},$$slots:{default:!0}});var X=a(B,2);{let F=Y(()=>e(de).length<=1);V(X,{variant:"danger",size:"sm",onclick:()=>o(G,e(m),!0),get disabled(){return e(F)},children:(R,L)=>{D();var j=w("Delete");n(R,j)},$$slots:{default:!0}})}t(z),t(c),C(F=>{g(y,e(m).email),g(N,F)},[()=>new Date(e(m).createdAt).toLocaleDateString()]),n(d,c)}),n(i,l)};P(ls,i=>{e(qe)?i(os):e(de).length===0?i(vs,1):i(ds,!1)})}t(ht),t(Me);var cs=a(Me,2);{var us=i=>{var l=Os(),_=a(s(l),2);{var d=c=>{var u=Vs(),y=s(u);let z;var k=s(y,!0);t(y);var N=a(y,2);{var B=R=>{var L=Rs(),j=a(s(L),2);U(j,21,()=>e(W).deleted,Z,(we,ee)=>{var I=Ns(),Fe=s(I,!0);t(I),C(()=>g(Fe,e(ee))),n(we,I)}),t(j),t(L),n(R,L)};P(N,R=>{e(W).deleted.length>0&&R(B)})}var X=a(N,2);{var F=R=>{var L=js(),j=a(s(L),2);U(j,21,()=>e(W).failed,Z,(we,ee)=>{var I=Ks(),Fe=s(I);t(I),C(()=>g(Fe,`${e(ee).resource??""}: ${e(ee).error??""}`)),n(we,I)}),t(j),t(L),n(R,L)};P(X,R=>{e(W).failed.length>0&&R(F)})}t(u),C(()=>{z=ys(y,1,"danger-zone__result-message svelte-1i19ct2",null,z,{"danger-zone__result-message--success":e(W).success}),g(k,e(W).message)}),n(c,u)},m=c=>{var u=Ms(),y=s(u),z=a(s(y),2);V(z,{variant:"danger",size:"sm",onclick:Lt,children:(k,N)=>{D();var B=w("Delete App");n(k,B)},$$slots:{default:!0}}),t(y),t(u),n(c,u)};P(_,c=>{e(W)?c(d):c(m,!1)})}t(l),n(i,l)};P(cs,i=>{e(v).devMode||i(us)})}C((i,l,_,d,m,c)=>{g(ye,`${e(v).serviceKeyCount??""} configured`),g(Ut,i),g(qt,l),g(Wt,_),g(as,d),g(rs,m),g(is,c)},[()=>xe(e(v).bindings.kv),()=>xe(e(v).bindings.d1),()=>xe(e(v).bindings.vectorize),()=>e(v).bindings.kv.length>0?e(v).bindings.kv.join(", "):"None",()=>e(v).bindings.d1.length>0?e(v).bindings.d1.join(", "):"None",()=>e(v).bindings.vectorize.length>0?e(v).bindings.vectorize.join(", "):"None"]),n(h,E)};P(S,h=>{e(Ue)?h(M):e(v)?h(O,!1):h(H,1)})}n($,x)}});var Je=a(He,2);{var Nt=r=>{wt(r,{open:!0,title:"Delete App",message:"This will permanently delete ALL Cloudflare resources (databases, storage, KV, vectorize indexes, and the Worker). This action cannot be undone. Do you want to proceed?",confirmLabel:"Yes, delete everything",confirmVariant:"danger",onconfirm:Bt,oncancel:Pe})};P(Je,r=>{e(fe)&&r(Nt)})}var Ye=a(Je,2);{var Rt=r=>{Ie(r,{open:!0,title:"Confirm App Deletion",onclose:Pe,children:($,ue)=>{var x=Is(),S=a(s(x),4);$e(S,{placeholder:"DELETE_ALL_RESOURCES",get value(){return e(ne)},set value(h){o(ne,h,!0)}});var M=a(S,2),H=s(M);V(H,{variant:"secondary",onclick:Pe,children:(h,E)=>{D();var f=w("Cancel");n(h,f)},$$slots:{default:!0}});var O=a(H,2);{let h=Y(()=>e(ne)!=="DELETE_ALL_RESOURCES");V(O,{variant:"danger",get loading(){return e(De)},get disabled(){return e(h)},onclick:Tt,children:(E,f)=>{D();var K=w("Permanently Delete App");n(E,K)},$$slots:{default:!0}})}t(M),t(x),n($,x)},$$slots:{default:!0}})};P(Ye,r=>{e(me)&&r(Rt)})}var Ze=a(Ye,2);{var Kt=r=>{Ie(r,{open:!0,title:"Add Admin Account",onclose:()=>o(ce,!1),children:($,ue)=>{var x=Us(),S=s(x),M=s(S);$e(M,{label:"Email",type:"email",get value(){return e(re)},set value(f){o(re,f,!0)}});var H=a(M,2);$e(H,{label:"Password",type:"password",get value(){return e(ie)},set value(f){o(ie,f,!0)}}),t(S);var O=a(S,2),h=s(O);V(h,{variant:"secondary",onclick:()=>o(ce,!1),children:(f,K)=>{D();var b=w("Cancel");n(f,b)},$$slots:{default:!0}});var E=a(h,2);{let f=Y(()=>!e(re).trim()||e(ie).length<8);V(E,{variant:"primary",type:"submit",get loading(){return e(be)},get disabled(){return e(f)},children:(K,b)=>{D();var T=w("Create Admin");n(K,T)},$$slots:{default:!0}})}t(O),t(x),yt("submit",x,f=>{f.preventDefault(),Et()}),n($,x)},$$slots:{default:!0}})};P(Ze,r=>{e(ce)&&r(Kt)})}var Ge=a(Ze,2);{var jt=r=>{Ie(r,{open:!0,title:"Change Password",onclose:()=>o(q,null),children:($,ue)=>{var x=qs(),S=s(x),M=a(s(S)),H=s(M,!0);t(M),t(S);var O=a(S,2),h=s(O);$e(h,{label:"New Password",type:"password",get value(){return e(Q)},set value(b){o(Q,b,!0)}}),t(O);var E=a(O,2),f=s(E);V(f,{variant:"secondary",onclick:()=>o(q,null),children:(b,T)=>{D();var le=w("Cancel");n(b,le)},$$slots:{default:!0}});var K=a(f,2);{let b=Y(()=>e(Q).length<8);V(K,{variant:"primary",type:"submit",get loading(){return e(ke)},get disabled(){return e(b)},children:(T,le)=>{D();var J=w("Update Password");n(T,J)},$$slots:{default:!0}})}t(E),t(x),C(()=>g(H,e(q).email)),yt("submit",x,b=>{b.preventDefault(),St()}),n($,x)},$$slots:{default:!0}})};P(Ge,r=>{e(q)&&r(jt)})}var Vt=a(Ge,2);{var Mt=r=>{wt(r,{open:!0,title:"Delete Admin Account",get message(){return`Are you sure you want to delete the admin account ${e(G).email??""}? This cannot be undone.`},confirmLabel:"Delete",confirmVariant:"danger",onconfirm:Ct,oncancel:()=>o(G,null)})};P(Vt,r=>{e(G)&&r(Mt)})}n($t,We),fs()}ms(["click"]);export{ca as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as gs}from"../chunks/Bn2NtlTj.js";import{p as _s,d as A,M as ps,f as te,a as fs,b as o,g as e,r as t,c as s,s as a,ae as D,t as C,u as Y}from"../chunks/BdTBlfLy.js";import{d as ms,s as g,a as hs,e as yt}from"../chunks/DtZk82gG.js";import{i as P}from"../chunks/Y22E1hJM.js";import{a as se,e as U,i as Z,b as ve,t as ae}from"../chunks/MKsm6wXE.js";import{a as n,f as p,c as ge,t as w}from"../chunks/DEELgv7K.js";import{s as ys}from"../chunks/CoI6jjbg.js";import{d as ws}from"../chunks/wJsUhbfZ.js";import"../chunks/CF95mcQY.js";import{P as $s}from"../chunks/B8s_s9QY.js";import{b as xs}from"../chunks/Q2nPFxS6.js";import{B as _e}from"../chunks/B0HRJ657.js";import{B as V}from"../chunks/C72lTcG0.js";import{M as Ie}from"../chunks/Dt4vL4Df.js";import{I as $e}from"../chunks/_teD5ji5.js";import{C as wt}from"../chunks/DILS_-VJ.js";import{S as pe}from"../chunks/CBVE2cdU.js";var bs=p('<div class="settings-row svelte-1i19ct2"><!> <!></div>'),ks=p('<div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2"><!></h3> <div class="settings-rows svelte-1i19ct2"></div></div>'),As=p('<div class="settings-grid svelte-1i19ct2"></div>'),Ds=p('<div class="settings-error svelte-1i19ct2">Failed to load configuration.</div>'),Ps=p('<div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2"></span> <span class="settings-value settings-value--key svelte-1i19ct2"><code class="key-preview svelte-1i19ct2"> </code> <button class="copy-btn svelte-1i19ct2" title="Copy masked key"><svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="5" y="5" width="8" height="8" rx="1"></rect><path d="M3 11V3h8" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></span></div>'),Es=p('<div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2"> </span> <span class="settings-value svelte-1i19ct2"> <!></span></div>'),Cs=p('<div class="settings-empty svelte-1i19ct2">No databases configured</div>'),Ss=p('<div class="settings-row settings-row--top svelte-1i19ct2"><span class="settings-key settings-key--stack svelte-1i19ct2"><code class="settings-code svelte-1i19ct2"> </code> <!></span> <span class="settings-value settings-value--stack settings-value--rate svelte-1i19ct2"><span><span class="settings-inline-label svelte-1i19ct2">Soft</span> </span> <span class="settings-subvalue svelte-1i19ct2"> </span></span></div>'),zs=p('<div class="settings-empty svelte-1i19ct2">No rate limit settings found</div>'),Ls=p('<div class="settings-row svelte-1i19ct2"><!> <!></div>'),Bs=p('<div class="settings-empty svelte-1i19ct2">No admin accounts found</div>'),Ts=p('<div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2"> </span> <span class="settings-value settings-value--actions svelte-1i19ct2"><span class="settings-date svelte-1i19ct2"> </span> <!> <!></span></div>'),Ns=p('<li class="svelte-1i19ct2"> </li>'),Rs=p('<div class="danger-zone__result-section svelte-1i19ct2"><strong>Deleted:</strong> <ul class="svelte-1i19ct2"></ul></div>'),Ks=p('<li class="svelte-1i19ct2"> </li>'),js=p('<div class="danger-zone__result-section danger-zone__result-section--error svelte-1i19ct2"><strong>Failed:</strong> <ul class="svelte-1i19ct2"></ul></div>'),Vs=p('<div class="danger-zone__result svelte-1i19ct2"><p> </p> <!> <!></div>'),Ms=p('<div class="danger-zone__content svelte-1i19ct2"><div class="danger-zone__item svelte-1i19ct2"><div><p class="danger-zone__item-title svelte-1i19ct2">Delete this app</p> <p class="danger-zone__item-desc svelte-1i19ct2">Permanently delete all Cloudflare resources including databases, storage, KV namespaces, and the Worker itself. This action cannot be undone.</p></div> <!></div></div>'),Os=p('<div class="danger-zone svelte-1i19ct2"><div class="danger-zone__header svelte-1i19ct2"><h3 class="danger-zone__title svelte-1i19ct2">Danger Zone</h3></div> <!></div>'),Fs=p('<div class="settings-grid svelte-1i19ct2"><div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Environment</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Mode</span> <!></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Release</span> <!></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Service Keys</span> <span class="settings-value svelte-1i19ct2"> </span></div> <!></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Databases</h3> <div class="settings-rows svelte-1i19ct2"><!> <!></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Bindings</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">KV Namespaces</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">D1 Databases</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Vectorize Indexes</span> <span class="settings-value svelte-1i19ct2"> </span></div></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Auth</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Anonymous Auth</span> <!></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">OAuth Providers</span> <span class="settings-value svelte-1i19ct2"><!></span></div></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Storage</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Buckets</span> <span class="settings-value svelte-1i19ct2"><!></span></div></div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Rate Limiting</h3> <div class="settings-rows svelte-1i19ct2"><!></div> <div class="settings-note svelte-1i19ct2">Defined in <code>edgebase.config.ts</code> or <code>config/rate-limits.ts</code>.</div></div> <div class="settings-card svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Native Resources</h3> <div class="settings-rows svelte-1i19ct2"><div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">KV Namespaces</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">D1 Databases</span> <span class="settings-value svelte-1i19ct2"> </span></div> <div class="settings-row svelte-1i19ct2"><span class="settings-key svelte-1i19ct2">Vectorize Indexes</span> <span class="settings-value svelte-1i19ct2"> </span></div></div></div></div> <div class="settings-card settings-card--full svelte-1i19ct2"><h3 class="settings-card__title svelte-1i19ct2">Admin Accounts <!></h3> <div class="settings-rows svelte-1i19ct2"><!></div></div> <!>',1),Is=p('<div class="delete-confirm svelte-1i19ct2"><p class="delete-confirm__warning svelte-1i19ct2">This is your final confirmation. All data will be permanently lost.</p> <p class="delete-confirm__instruction svelte-1i19ct2">Type <strong>DELETE_ALL_RESOURCES</strong> to confirm:</p> <!> <div class="modal-actions svelte-1i19ct2"><!> <!></div></div>'),Us=p('<form><div class="modal-fields svelte-1i19ct2"><!> <!></div> <div class="modal-actions svelte-1i19ct2"><!> <!></div></form>'),qs=p('<form><p class="modal-info svelte-1i19ct2">Changing password for <strong> </strong></p> <div class="modal-fields svelte-1i19ct2"><!></div> <div class="modal-actions svelte-1i19ct2"><!> <!></div></form>'),Ws=p("<!> <!> <!> <!> <!> <!>",1);function ca($t,xt){_s(xt,!0);let Ue=A(!0),v=A(null);function bt(r,$){return`${r.toLocaleString()} / ${$}`}function kt(r){if(!r)return"No binding";if(!r.enabled)return"Binding disabled";if(r.limit==null||r.period==null)return"Binding configured";const $=`${r.limit.toLocaleString()} / ${r.period}s`;return r.source==="override"||r.source==="custom"?`Binding ${$}`:`Binding ${$} (default)`}function xe(r){return r.length>0?r.join(", "):"None configured"}function At(r){return r?r.enabled?r.source==="override"?"primary":r.source==="custom"?"warning":"default":"danger":"default"}function Dt(r){return r?r.enabled?r.source==="override"?"Binding override":r.source==="custom"?"Custom group":"Default binding":"Binding off":"Soft only"}async function Pt(r){try{await navigator.clipboard.writeText(r),ve("Copied to clipboard (masked)")}catch{ae("Failed to copy")}}gs(async()=>{try{o(v,await se.fetch("data/config-info"),!0)}catch{o(v,null)}finally{o(Ue,!1)}Ae()});let de=A(ps([])),qe=A(!0),ce=A(!1),re=A(""),ie=A(""),be=A(!1),G=A(null),q=A(null),Q=A(""),ke=A(!1);async function Ae(){try{const r=await se.fetch("data/admins");o(de,r.admins,!0)}catch{o(de,[],!0)}finally{o(qe,!1)}}async function Et(){if(!(!e(re).trim()||!e(ie).trim())){o(be,!0);try{await se.fetch("data/admins",{method:"POST",body:{email:e(re),password:e(ie)}}),ve("Admin account created"),o(ce,!1),o(re,""),o(ie,""),await Ae()}catch(r){ae(r instanceof Error?r.message:"Failed to create admin")}finally{o(be,!1)}}}async function Ct(){if(!e(G))return;const r=e(G);o(G,null);try{await se.fetch(`data/admins/${r.id}`,{method:"DELETE"}),ve("Admin account deleted"),await Ae()}catch($){ae($ instanceof Error?$.message:"Failed to delete admin")}}async function St(){if(!(!e(q)||!e(Q).trim())){o(ke,!0);try{await se.fetch(`data/admins/${e(q).id}/password`,{method:"PUT",body:{password:e(Q)}}),ve("Password updated"),o(q,null),o(Q,"")}catch(r){ae(r instanceof Error?r.message:"Failed to change password")}finally{o(ke,!1)}}}async function zt(){try{const r=await se.fetch("data/backup/config"),$=new Blob([JSON.stringify(r,null,2)],{type:"application/json"});ws($,`edgebase-config-snapshot-${new Date().toISOString().slice(0,10)}.json`),ve("Config snapshot downloaded")}catch(r){ae(r instanceof Error?r.message:"Failed to download config")}}let fe=A(!1),me=A(!1),ne=A(""),De=A(!1),W=A(null);function Lt(){o(fe,!0)}function Bt(){o(fe,!1),o(me,!0),o(ne,"")}function Pe(){o(fe,!1),o(me,!1),o(ne,"")}async function Tt(){o(De,!0);try{const r=await se.fetch("data/destroy-app",{method:"POST",body:{confirm:"DELETE_ALL_RESOURCES"}});o(W,r,!0),o(me,!1),r.success?ve("All resources destroyed. This app has been deleted."):ae(`Partial destruction: ${r.failed.length} resource(s) failed to delete.`)}catch(r){ae(r instanceof Error?r.message:"Failed to destroy app")}finally{o(De,!1),o(ne,"")}}var We=Ws(),He=te(We);$s(He,{title:"Project Info",description:"Environment and resource overview with admin account controls",get docsHref(){return xs},actions:$=>{V($,{variant:"secondary",size:"sm",onclick:zt,children:(ue,x)=>{D();var S=w("Download Config Snapshot");n(ue,S)},$$slots:{default:!0}})},children:($,ue)=>{var x=ge(),S=te(x);{var M=h=>{var E=As();U(E,20,()=>Array(5),Z,(f,K)=>{var b=ks(),T=s(b),le=s(T);pe(le,{width:"120px",height:"13px"}),t(T);var J=a(T,2);U(J,20,()=>Array(3),Z,(Ee,he)=>{var oe=bs(),ye=s(oe);pe(ye,{width:"80px",height:"12px"});var Ce=a(ye,2);pe(Ce,{width:"100px",height:"12px"}),t(oe),n(Ee,oe)}),t(J),t(b),n(f,b)}),t(E),n(h,E)},H=h=>{var E=Ds();n(h,E)},O=h=>{var E=Fs(),f=te(E),K=s(f),b=a(s(K),2),T=s(b),le=a(s(T),2);{let i=Y(()=>e(v).devMode?"warning":"success");_e(le,{get variant(){return e(i)},children:(l,_)=>{D();var d=w();C(()=>g(d,e(v).devMode?"Development":"Production")),n(l,d)},$$slots:{default:!0}})}t(T);var J=a(T,2),Ee=a(s(J),2);{let i=Y(()=>e(v).release?"success":"default");_e(Ee,{get variant(){return e(i)},children:(l,_)=>{D();var d=w();C(()=>g(d,e(v).release?"Enabled (deny-by-default)":"Disabled (dev permissive)")),n(l,d)},$$slots:{default:!0}})}t(J);var he=a(J,2),oe=a(s(he),2),ye=s(oe);t(oe),t(he);var Ce=a(he,2);{var Ot=i=>{var l=ge(),_=te(l);U(_,17,()=>e(v).serviceKeys,Z,(d,m,c)=>{var u=Ps(),y=s(u);y.textContent=`Key ${c+1}`;var z=a(y,2),k=s(z),N=s(k,!0);t(k);var B=a(k,2);t(z),t(u),C(()=>g(N,e(m))),hs("click",B,()=>Pt(e(m))),n(d,u)}),n(i,l)};P(Ce,i=>{e(v).serviceKeys&&e(v).serviceKeys.length>0&&i(Ot)})}t(b),t(K);var Se=a(K,2),Qe=a(s(Se),2),Xe=s(Qe);U(Xe,17,()=>e(v).databases,Z,(i,l)=>{var _=Es(),d=s(_),m=s(d,!0);t(d);var c=a(d,2),u=s(c),y=a(u);{var z=k=>{_e(k,{variant:"primary",children:(N,B)=>{D();var X=w("access rule");n(N,X)},$$slots:{default:!0}})};P(y,k=>{e(l).hasAccess&&k(z)})}t(c),t(_),C(()=>{g(m,e(l).name),g(u,`${e(l).tableCount??""} table${e(l).tableCount!==1?"s":""} `)}),n(i,_)});var Ft=a(Xe,2);{var It=i=>{var l=Cs();n(i,l)};P(Ft,i=>{e(v).databases.length===0&&i(It)})}t(Qe),t(Se);var ze=a(Se,2),et=a(s(ze),2),Le=s(et),tt=a(s(Le),2),Ut=s(tt,!0);t(tt),t(Le);var Be=a(Le,2),st=a(s(Be),2),qt=s(st,!0);t(st),t(Be);var at=a(Be,2),rt=a(s(at),2),Wt=s(rt,!0);t(rt),t(at),t(et),t(ze);var Te=a(ze,2),it=a(s(Te),2),Ne=s(it),Ht=a(s(Ne),2);{let i=Y(()=>e(v).auth.anonymousAuth?"success":"default");_e(Ht,{get variant(){return e(i)},children:(l,_)=>{D();var d=w();C(()=>g(d,e(v).auth.anonymousAuth?"Enabled":"Disabled")),n(l,d)},$$slots:{default:!0}})}t(Ne);var nt=a(Ne,2),lt=a(s(nt),2),Jt=s(lt);{var Yt=i=>{var l=w();C(_=>g(l,_),[()=>e(v).auth.providers.join(", ")]),n(i,l)},Zt=i=>{var l=w("None configured");n(i,l)};P(Jt,i=>{e(v).auth.providers.length>0?i(Yt):i(Zt,!1)})}t(lt),t(nt),t(it),t(Te);var Re=a(Te,2),ot=a(s(Re),2),vt=s(ot),dt=a(s(vt),2),Gt=s(dt);{var Qt=i=>{var l=w();C(_=>g(l,_),[()=>e(v).storageBuckets.join(", ")]),n(i,l)},Xt=i=>{var l=w("None configured");n(i,l)};P(Gt,i=>{e(v).storageBuckets.length>0?i(Qt):i(Xt,!1)})}t(dt),t(vt),t(ot),t(Re);var Ke=a(Re,2),ct=a(s(Ke),2),es=s(ct);{var ts=i=>{var l=ge(),_=te(l);U(_,17,()=>e(v).rateLimiting,Z,(d,m)=>{var c=Ss(),u=s(c),y=s(u),z=s(y,!0);t(y);var k=a(y,2);{let L=Y(()=>At(e(m).binding));_e(k,{get variant(){return e(L)},children:(j,we)=>{D();var ee=w();C(I=>g(ee,I),[()=>Dt(e(m).binding)]),n(j,ee)},$$slots:{default:!0}})}t(u);var N=a(u,2),B=s(N),X=a(s(B),1,!0);t(B);var F=a(B,2),R=s(F,!0);t(F),t(N),t(c),C((L,j)=>{g(z,e(m).group),g(X,L),g(R,j)},[()=>bt(e(m).requests,e(m).window),()=>kt(e(m).binding)]),n(d,c)}),n(i,l)},ss=i=>{var l=zs();n(i,l)};P(es,i=>{e(v).rateLimiting.length>0?i(ts):i(ss,!1)})}t(ct),D(2),t(Ke);var ut=a(Ke,2),gt=a(s(ut),2),je=s(gt),_t=a(s(je),2),as=s(_t,!0);t(_t),t(je);var Ve=a(je,2),pt=a(s(Ve),2),rs=s(pt,!0);t(pt),t(Ve);var ft=a(Ve,2),mt=a(s(ft),2),is=s(mt,!0);t(mt),t(ft),t(gt),t(ut),t(f);var Me=a(f,2),Oe=s(Me),ns=a(s(Oe));V(ns,{variant:"primary",size:"sm",onclick:()=>o(ce,!0),children:(i,l)=>{D();var _=w("+ Add Admin");n(i,_)},$$slots:{default:!0}}),t(Oe);var ht=a(Oe,2),ls=s(ht);{var os=i=>{var l=ge(),_=te(l);U(_,16,()=>Array(2),Z,(d,m)=>{var c=Ls(),u=s(c);pe(u,{width:"150px",height:"12px"});var y=a(u,2);pe(y,{width:"80px",height:"12px"}),t(c),n(d,c)}),n(i,l)},vs=i=>{var l=Bs();n(i,l)},ds=i=>{var l=ge(),_=te(l);U(_,17,()=>e(de),d=>d.id,(d,m)=>{var c=Ts(),u=s(c),y=s(u,!0);t(u);var z=a(u,2),k=s(z),N=s(k,!0);t(k);var B=a(k,2);V(B,{variant:"secondary",size:"sm",onclick:()=>{o(q,e(m),!0),o(Q,"")},children:(F,R)=>{D();var L=w("Change Password");n(F,L)},$$slots:{default:!0}});var X=a(B,2);{let F=Y(()=>e(de).length<=1);V(X,{variant:"danger",size:"sm",onclick:()=>o(G,e(m),!0),get disabled(){return e(F)},children:(R,L)=>{D();var j=w("Delete");n(R,j)},$$slots:{default:!0}})}t(z),t(c),C(F=>{g(y,e(m).email),g(N,F)},[()=>new Date(e(m).createdAt).toLocaleDateString()]),n(d,c)}),n(i,l)};P(ls,i=>{e(qe)?i(os):e(de).length===0?i(vs,1):i(ds,!1)})}t(ht),t(Me);var cs=a(Me,2);{var us=i=>{var l=Os(),_=a(s(l),2);{var d=c=>{var u=Vs(),y=s(u);let z;var k=s(y,!0);t(y);var N=a(y,2);{var B=R=>{var L=Rs(),j=a(s(L),2);U(j,21,()=>e(W).deleted,Z,(we,ee)=>{var I=Ns(),Fe=s(I,!0);t(I),C(()=>g(Fe,e(ee))),n(we,I)}),t(j),t(L),n(R,L)};P(N,R=>{e(W).deleted.length>0&&R(B)})}var X=a(N,2);{var F=R=>{var L=js(),j=a(s(L),2);U(j,21,()=>e(W).failed,Z,(we,ee)=>{var I=Ks(),Fe=s(I);t(I),C(()=>g(Fe,`${e(ee).resource??""}: ${e(ee).error??""}`)),n(we,I)}),t(j),t(L),n(R,L)};P(X,R=>{e(W).failed.length>0&&R(F)})}t(u),C(()=>{z=ys(y,1,"danger-zone__result-message svelte-1i19ct2",null,z,{"danger-zone__result-message--success":e(W).success}),g(k,e(W).message)}),n(c,u)},m=c=>{var u=Ms(),y=s(u),z=a(s(y),2);V(z,{variant:"danger",size:"sm",onclick:Lt,children:(k,N)=>{D();var B=w("Delete App");n(k,B)},$$slots:{default:!0}}),t(y),t(u),n(c,u)};P(_,c=>{e(W)?c(d):c(m,!1)})}t(l),n(i,l)};P(cs,i=>{e(v).devMode||i(us)})}C((i,l,_,d,m,c)=>{g(ye,`${e(v).serviceKeyCount??""} configured`),g(Ut,i),g(qt,l),g(Wt,_),g(as,d),g(rs,m),g(is,c)},[()=>xe(e(v).bindings.kv),()=>xe(e(v).bindings.d1),()=>xe(e(v).bindings.vectorize),()=>e(v).bindings.kv.length>0?e(v).bindings.kv.join(", "):"None",()=>e(v).bindings.d1.length>0?e(v).bindings.d1.join(", "):"None",()=>e(v).bindings.vectorize.length>0?e(v).bindings.vectorize.join(", "):"None"]),n(h,E)};P(S,h=>{e(Ue)?h(M):e(v)?h(O,!1):h(H,1)})}n($,x)}});var Je=a(He,2);{var Nt=r=>{wt(r,{open:!0,title:"Delete App",message:"This will permanently delete ALL Cloudflare resources (databases, storage, KV, vectorize indexes, and the Worker). This action cannot be undone. Do you want to proceed?",confirmLabel:"Yes, delete everything",confirmVariant:"danger",onconfirm:Bt,oncancel:Pe})};P(Je,r=>{e(fe)&&r(Nt)})}var Ye=a(Je,2);{var Rt=r=>{Ie(r,{open:!0,title:"Confirm App Deletion",onclose:Pe,children:($,ue)=>{var x=Is(),S=a(s(x),4);$e(S,{placeholder:"DELETE_ALL_RESOURCES",get value(){return e(ne)},set value(h){o(ne,h,!0)}});var M=a(S,2),H=s(M);V(H,{variant:"secondary",onclick:Pe,children:(h,E)=>{D();var f=w("Cancel");n(h,f)},$$slots:{default:!0}});var O=a(H,2);{let h=Y(()=>e(ne)!=="DELETE_ALL_RESOURCES");V(O,{variant:"danger",get loading(){return e(De)},get disabled(){return e(h)},onclick:Tt,children:(E,f)=>{D();var K=w("Permanently Delete App");n(E,K)},$$slots:{default:!0}})}t(M),t(x),n($,x)},$$slots:{default:!0}})};P(Ye,r=>{e(me)&&r(Rt)})}var Ze=a(Ye,2);{var Kt=r=>{Ie(r,{open:!0,title:"Add Admin Account",onclose:()=>o(ce,!1),children:($,ue)=>{var x=Us(),S=s(x),M=s(S);$e(M,{label:"Email",type:"email",get value(){return e(re)},set value(f){o(re,f,!0)}});var H=a(M,2);$e(H,{label:"Password",type:"password",get value(){return e(ie)},set value(f){o(ie,f,!0)}}),t(S);var O=a(S,2),h=s(O);V(h,{variant:"secondary",onclick:()=>o(ce,!1),children:(f,K)=>{D();var b=w("Cancel");n(f,b)},$$slots:{default:!0}});var E=a(h,2);{let f=Y(()=>!e(re).trim()||e(ie).length<8);V(E,{variant:"primary",type:"submit",get loading(){return e(be)},get disabled(){return e(f)},children:(K,b)=>{D();var T=w("Create Admin");n(K,T)},$$slots:{default:!0}})}t(O),t(x),yt("submit",x,f=>{f.preventDefault(),Et()}),n($,x)},$$slots:{default:!0}})};P(Ze,r=>{e(ce)&&r(Kt)})}var Ge=a(Ze,2);{var jt=r=>{Ie(r,{open:!0,title:"Change Password",onclose:()=>o(q,null),children:($,ue)=>{var x=qs(),S=s(x),M=a(s(S)),H=s(M,!0);t(M),t(S);var O=a(S,2),h=s(O);$e(h,{label:"New Password",type:"password",get value(){return e(Q)},set value(b){o(Q,b,!0)}}),t(O);var E=a(O,2),f=s(E);V(f,{variant:"secondary",onclick:()=>o(q,null),children:(b,T)=>{D();var le=w("Cancel");n(b,le)},$$slots:{default:!0}});var K=a(f,2);{let b=Y(()=>e(Q).length<8);V(K,{variant:"primary",type:"submit",get loading(){return e(ke)},get disabled(){return e(b)},children:(T,le)=>{D();var J=w("Update Password");n(T,J)},$$slots:{default:!0}})}t(E),t(x),C(()=>g(H,e(q).email)),yt("submit",x,b=>{b.preventDefault(),St()}),n($,x)},$$slots:{default:!0}})};P(Ge,r=>{e(q)&&r(jt)})}var Vt=a(Ge,2);{var Mt=r=>{wt(r,{open:!0,title:"Delete Admin Account",get message(){return`Are you sure you want to delete the admin account ${e(G).email??""}? This cannot be undone.`},confirmLabel:"Delete",confirmVariant:"danger",onconfirm:Ct,oncancel:()=>o(G,null)})};P(Vt,r=>{e(G)&&r(Mt)})}n($t,We),fs()}ms(["click"]);export{ca as component};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as Ne}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as Ne}from"../chunks/Bn2NtlTj.js";import{p as Te,t as f,g as t,a as Ee,d as g,c as o,b,s as d,r as i,u as w,ae as S,f as Re}from"../chunks/BdTBlfLy.js";import{d as We,s as B,a as X,e as ke}from"../chunks/DtZk82gG.js";import{i as M}from"../chunks/Y22E1hJM.js";import{e as oe,i as ie}from"../chunks/MKsm6wXE.js";import{a as l,f as p,t as N}from"../chunks/DEELgv7K.js";import{s as Ae}from"../chunks/XmteHKH_.js";import{b as Pe,c as Ce,a as T,s as F}from"../chunks/CoI6jjbg.js";import{b as He}from"../chunks/CGgVJi7f.js";import{s as Le,a as E}from"../chunks/Cp8V0Xy2.js";import{p as Xe}from"../chunks/D8o7yzcA.js";import{b as U}from"../chunks/B-pVQkKM.js";import{s as Fe,n as Ue,t as je}from"../chunks/v2HHbTgy.js";import{d as qe}from"../chunks/CF95mcQY.js";import{B as R}from"../chunks/C72lTcG0.js";var Ge=p("<option> </option>"),Ke=p('<div class="tables-create-actions svelte-scy45p"><a class="tables-create-link svelte-scy45p"><!></a> <a class="tables-create-link svelte-scy45p"><!></a></div>'),Oe=p(`<div class="tables-create-actions svelte-scy45p" aria-label="Schema editing unavailable outside dev mode"><!> <!></div> <p class="tables-dev-note svelte-scy45p">Schema changes require dev mode. Start <code class="svelte-scy45p">pnpm dev</code> to create DB blocks, add tables,
|
|
2
2
|
edit schema, or run upgrades.</p>`,1),Ve=p('<span class="tables-sidebar__provider-badge svelte-scy45p"> </span>'),Ye=p('<a><span class="tables-sidebar__icon svelte-scy45p"><svg width="14" height="14" viewBox="0 0 16 16" fill="none"><rect x="2" y="2" width="12" height="12" rx="1.5" stroke="currentColor" stroke-width="1.5"></rect><path d="M2 6H14M2 10H14M6 6V14" stroke="currentColor" stroke-width="1.5"></path></svg></span> <span class="tables-sidebar__name svelte-scy45p"> </span> <!> <span> </span></a>'),Je=p('<div class="tables-sidebar__empty svelte-scy45p">No tables</div>'),Qe=p('<button type="button" aria-label="Resize tables sidebar"></button>'),Ze=p('<div class="tables-layout svelte-scy45p"><aside class="tables-sidebar svelte-scy45p"><div class="tables-sidebar__header svelte-scy45p"><select class="tables-ns-filter svelte-scy45p" aria-label="Database filter"><option>All databases</option><!></select> <!></div> <nav class="tables-sidebar__list svelte-scy45p"><!> <!></nav></aside> <!> <div class="tables-main svelte-scy45p"><!></div></div>');function ua(ne,j){Te(j,!0);const le=()=>E(Xe,"$page",x),de=()=>E(qe,"$devInfoStore",x),ce=()=>E(Ue,"$namespaceNames",x),pe=()=>E(je,"$tablesByNamespace",x),[x,ve]=Le();let me=w(()=>le().params.table??""),_e=w(()=>de().devMode);const q="edgebase_tables_sidebar_width",G=180,K=360,O=200;let u=g(O),y=g(!1),W=g(!1),k=g(null),V=0,Y=O,D=g("all"),be=w(ce),J=w(()=>{const a=[];for(const[e,s]of Object.entries(pe()))for(const r of s)a.push({name:r.name,namespace:e,provider:r.def.provider,dynamic:r.def.dynamic});return a.sort((e,s)=>e.name.localeCompare(s.name)),a}),Q=w(()=>t(D)==="all"?t(J):t(J).filter(a=>a.namespace===t(D)));function Z(a){return a?"Per-tenant DB":"Single DB"}Ne(()=>{if(Fe.loadSchema(),typeof window>"u")return;try{const e=Number.parseInt(localStorage.getItem(q)??"",10);Number.isFinite(e)&&b(u,Math.min(K,Math.max(G,e)),!0)}catch{}const a=()=>{b(W,window.innerWidth<=768)};return a(),window.addEventListener("resize",a),()=>{A(),window.removeEventListener("resize",a)}});function ue(a){return Math.min(K,Math.max(G,a))}function fe(a){if(!(typeof window>"u"))try{localStorage.setItem(q,String(a))}catch{}}function A(){t(y)&&(b(y,!1),document.body.style.cursor="",document.body.style.userSelect="",fe(t(u)))}function ye(a){t(y)&&(a.preventDefault(),b(u,ue(Y+a.clientX-V),!0))}function he(a){var e;t(W)||(a.preventDefault(),b(y,!0),V=a.clientX,Y=t(u),document.body.style.cursor="col-resize",document.body.style.userSelect="none",(e=t(k))==null||e.setPointerCapture(a.pointerId))}var P=Ze(),z=o(P),C=o(z),I=o(C),H=o(I);H.value=H.__value="all";var $e=d(H);oe($e,17,()=>t(be),ie,(a,e)=>{var s=Ge(),r=o(s,!0);i(s);var n={};f(()=>{B(r,t(e)),n!==(n=t(e))&&(s.value=(s.__value=t(e))??"")}),l(a,s)}),i(I);var ge=d(I,2);{var we=a=>{var e=Ke(),s=o(e),r=o(s);R(r,{variant:"secondary",size:"sm",children:(c,m)=>{S();var _=N("+ DB");l(c,_)},$$slots:{default:!0}}),i(s);var n=d(s,2),v=o(n);R(v,{variant:"primary",size:"sm",children:(c,m)=>{S();var _=N("+ Table");l(c,_)},$$slots:{default:!0}}),i(n),i(e),f(()=>{T(s,"href",`${U??""}/database/new`),T(n,"href",`${U??""}/database/tables/new`)}),l(a,e)},Se=a=>{var e=Oe(),s=Re(e),r=o(s);R(r,{variant:"secondary",size:"sm",disabled:!0,children:(v,c)=>{S();var m=N("+ DB");l(v,m)},$$slots:{default:!0}});var n=d(r,2);R(n,{variant:"primary",size:"sm",disabled:!0,children:(v,c)=>{S();var m=N("+ Table");l(v,m)},$$slots:{default:!0}}),i(s),S(2),l(a,e)};M(ge,a=>{t(_e)?a(we):a(Se,!1)})}i(C);var ee=d(C,2),ae=o(ee);oe(ae,17,()=>t(Q),ie,(a,e)=>{var s=Ye();let r;var n=d(o(s),2),v=o(n,!0);i(n);var c=d(n,2);{var m=h=>{var $=Ve(),L=o($,!0);i($),f(Me=>B(L,Me),[()=>t(e).provider==="postgres"?"PG":t(e).provider.toUpperCase()]),l(h,$)};M(c,h=>{t(e).provider&&h(m)})}var _=d(c,2);let re;var Be=o(_,!0);i(_),i(s),f((h,$,L)=>{T(s,"href",`${U??""}/database/tables/${h??""}`),r=F(s,1,"tables-sidebar__item svelte-scy45p",null,r,{"tables-sidebar__item--active":t(me)===t(e).name}),T(s,"title",`${t(e).name??""} (${t(e).namespace??""}${t(e).provider?` · ${t(e).provider}`:""} · ${$??""})`),B(v,t(e).name),re=F(_,1,"tables-sidebar__topology-badge svelte-scy45p",null,re,{"tables-sidebar__topology-badge--tenant":t(e).dynamic}),B(Be,L)},[()=>encodeURIComponent(t(e).name),()=>Z(t(e).dynamic),()=>Z(t(e).dynamic)]),l(a,s)});var xe=d(ae,2);{var De=a=>{var e=Je();l(a,e)};M(xe,a=>{t(Q).length===0&&a(De)})}i(ee),i(z);var te=d(z,2);{var ze=a=>{var e=Qe();let s;He(e,r=>b(k,r),()=>t(k)),f(()=>s=F(e,1,"tables-sidebar__resizer svelte-scy45p",null,s,{"tables-sidebar__resizer--active":t(y)})),X("pointerdown",e,he),X("pointermove",e,ye),X("pointerup",e,A),ke("pointercancel",e,A),l(a,e)};M(te,a=>{t(W)||a(ze)})}var se=d(te,2),Ie=o(se);Ae(Ie,()=>j.children),i(se),i(P),f(()=>Ce(z,`width:${t(u)}px; min-width:${t(u)}px;`)),Pe(I,()=>t(D),a=>b(D,a)),l(ne,P),Ee(),ve()}We(["pointerdown","pointermove","pointerup"]);export{ua as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as vt}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as vt}from"../chunks/Bn2NtlTj.js";import{p as pt,d as f,M as K,f as S,a as mt,b as a,g as r,s as B,u as L,c as b,r as v,ae as q,t as U}from"../chunks/BdTBlfLy.js";import{s as j}from"../chunks/DtZk82gG.js";import{i as z}from"../chunks/Y22E1hJM.js";import{a as F,b as _t,t as W,e as bt}from"../chunks/MKsm6wXE.js";import{a as n,f as u,t as N,c as A}from"../chunks/DEELgv7K.js";import{a as gt}from"../chunks/CoI6jjbg.js";import{s as ht,a as kt}from"../chunks/Cp8V0Xy2.js";import{b as $t}from"../chunks/B-pVQkKM.js";import{d as Bt}from"../chunks/CF95mcQY.js";import{P as yt}from"../chunks/B8s_s9QY.js";import{s as wt}from"../chunks/Q2nPFxS6.js";import{E as xt}from"../chunks/m9eWh0Cd.js";import{B as T}from"../chunks/C72lTcG0.js";import{I as Mt}from"../chunks/_teD5ji5.js";import{M as St}from"../chunks/Dt4vL4Df.js";var qt=u('<div class="loading-state svelte-b46l0q"><div class="loading-spinner svelte-b46l0q"></div> <span>Loading storage buckets...</span></div>'),Ct=u('<div class="bucket-card__stats svelte-b46l0q"><span> </span> <span class="bucket-card__dot svelte-b46l0q">·</span> <span> </span></div>'),Pt=u('<div class="bucket-card__hint svelte-b46l0q">Browse files</div>'),Et=u('<a class="bucket-card svelte-b46l0q"><div class="bucket-card__icon svelte-b46l0q" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19C3 20.66 7.03 22 12 22C16.97 22 21 20.66 21 19V5"></path><path d="M3 12C3 13.66 7.03 15 12 15C16.97 15 21 13.66 21 12"></path></svg></div> <div class="bucket-card__name svelte-b46l0q"> </div> <!></a>'),It=u('<div class="bucket-grid svelte-b46l0q"></div>'),Ot=u('<div class="create-modal svelte-b46l0q"><!> <p class="create-modal__hint svelte-b46l0q">This adds a new bucket entry to <code>edgebase.config.ts</code> for local development.</p></div>'),jt=u("<!> <!>",1),zt=u("<!> <!>",1);function Zt(J,Q){pt(Q,!0);const X=()=>kt(Bt,"$devInfoStore",Y),[Y,Z]=ht();let V=f(!0),p=f(K([])),g=f(K({})),h=f(!1),y=f(""),m=f(""),C=f(!1);function tt(t){return new Promise(s=>setTimeout(s,t))}async function R(){const t=await F.fetch("data/storage/buckets");return a(p,t.buckets,!0),t.buckets.length>0?await rt(t.buckets):a(g,{},!0),t.buckets}async function et(t,s=20,o=300){for(let e=0;e<s;e+=1){try{if((await R()).includes(t))return!0}catch{}e<s-1&&await tt(o)}return!1}function at(t){if(t===0)return"0 B";const s=["B","KB","MB","GB","TB"],o=Math.floor(Math.log(t)/Math.log(1024)),e=t/Math.pow(1024,o);return`${e<10?e.toFixed(1):Math.round(e)} ${s[o]}`}async function rt(t){const s=await Promise.allSettled(t.map(async e=>{const l=await F.fetch(`data/storage/buckets/${encodeURIComponent(e)}/stats`);return{bucket:e,stats:l}})),o={};for(const e of s)e.status==="fulfilled"&&(o[e.value.bucket]=e.value.stats);a(g,o,!0)}vt(async()=>{try{await R()}catch(t){W(t instanceof Error?t.message:"Failed to load storage buckets. Check your connection and configuration.")}finally{a(V,!1)}});async function st(){const t=r(y).trim();if(!t){a(m,"Bucket name is required.");return}a(C,!0),a(m,"");try{await F.schemaMutation("schema/storage/buckets",{method:"POST",body:{name:t}}),!await et(t)&&!r(p).includes(t)&&(a(p,[...r(p),t],!0),a(g,{...r(g),[t]:{totalObjects:0,totalSize:0}},!0)),a(h,!1),a(y,""),_t(`Bucket "${t}" created`)}catch(s){a(m,s instanceof Error?s.message:"Failed to create bucket.",!0),W(r(m))}finally{a(C,!1)}}var D=zt(),G=S(D);yt(G,{title:"Storage",description:"Manage file storage buckets",get docsHref(){return wt},actions:s=>{var o=A(),e=S(o);{var l=c=>{T(c,{variant:"primary",size:"sm",onclick:()=>{a(m,""),a(h,!0)},children:(d,w)=>{q();var i=N("+ Create Bucket");n(d,i)},$$slots:{default:!0}})};z(e,c=>{X().devMode&&c(l)})}n(s,o)},children:(s,o)=>{var e=A(),l=S(e);{var c=i=>{var k=qt();n(i,k)},d=i=>{xt(i,{title:"No buckets",description:"No storage buckets found. Buckets are defined in your EdgeBase configuration."})},w=i=>{var k=It();bt(k,20,()=>r(p),P=>P,(P,E)=>{const x=L(()=>r(g)[E]);var M=Et(),I=B(b(M),2),it=b(I,!0);v(I);var nt=B(I,2);{var lt=_=>{var $=Ct(),O=b($),dt=b(O);v(O);var H=B(O,4),ut=b(H,!0);v(H),v($),U(ft=>{j(dt,`${r(x).totalObjects??""} ${r(x).totalObjects===1?"file":"files"}`),j(ut,ft)},[()=>at(r(x).totalSize)]),n(_,$)},ct=_=>{var $=Pt();n(_,$)};z(nt,_=>{r(x)?_(lt):_(ct,!1)})}v(M),U(()=>{gt(M,"href",`${$t??""}/storage/${E??""}`),j(it,E)}),n(P,M)}),v(k),n(i,k)};z(l,i=>{r(V)?i(c):r(p).length===0?i(d,1):i(w,!1)})}n(s,e)}});var ot=B(G,2);St(ot,{title:"Create Bucket",maxWidth:"420px",get open(){return r(h)},set open(o){a(h,o,!0)},children:o=>{var e=Ot(),l=b(e);{let c=L(()=>r(m)||void 0);Mt(l,{label:"Bucket Name",placeholder:"uploads",get error(){return r(c)},get value(){return r(y)},set value(d){a(y,d,!0)}})}q(2),v(e),n(o,e)},footer:o=>{var e=jt(),l=S(e);T(l,{variant:"secondary",onclick:()=>a(h,!1),children:(d,w)=>{q();var i=N("Cancel");n(d,i)},$$slots:{default:!0}});var c=B(l,2);T(c,{variant:"primary",get loading(){return r(C)},onclick:st,children:(d,w)=>{q();var i=N("Create Bucket");n(d,i)},$$slots:{default:!0}}),n(o,e)},$$slots:{default:!0,footer:!0}}),n(J,D),mt(),Z()}export{Zt as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{g as jt,o as Nt}from"../chunks/DoPXzH7F.js";import{p as tt,d as u,M as Je,a as at,f as me,t as k,s,g as e,b as t,c as l,u as x,ae as j,r,w as St}from"../chunks/glwixJlP.js";import{d as ut,e as vt,a as W,s as M}from"../chunks/D5h5A1cc.js";import{i as ie}from"../chunks/UUazaC_N.js";import{t as Pe,b as Ye,e as Qe,i as Pt,a as Xe}from"../chunks/BMMOfNi6.js";import{a as n,t as ne,f as h,c as Mt}from"../chunks/BR_fL5Yv.js";import{s as Me,a as q,f as Gt,r as et,g as $t,e as xt}from"../chunks/C6puvcoR.js";import{s as Tt,a as dt}from"../chunks/B8vJP3wz.js";import{p as Zt}from"../chunks/p-WBlAu3.js";import{g as Bt,a as ft,c as qt,d as Jt}from"../chunks/Br0qug7_.js";import{d as Qt}from"../chunks/wJsUhbfZ.js";import{P as Xt}from"../chunks/CwROoZK0.js";import{s as Yt}from"../chunks/Q2nPFxS6.js";import{B as ce}from"../chunks/Cs0GwzJA.js";import{E as ea}from"../chunks/DnyL7Zq-.js";import{C as zt}from"../chunks/Bh56EfQ_.js";import{p as Oe}from"../chunks/C4D51vTW.js";import{M as pt}from"../chunks/7B47DvSx.js";import{I as ta}from"../chunks/DrQSgw-f.js";import{S as aa}from"../chunks/BF8I5XXQ.js";var ra=h("<!> <!>",1),la=h('<div class="key-input svelte-1myht9e"><!></div>'),sa=h('<img class="file-item__thumb svelte-1myht9e"/>'),oa=h('<div class="file-item__icon svelte-1myht9e"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></div>'),ia=h('<div class="file-item svelte-1myht9e"><!> <div class="file-item__info svelte-1myht9e"><span class="file-item__name svelte-1myht9e"> </span> <span class="file-item__meta svelte-1myht9e"> </span></div> <button class="file-item__remove svelte-1myht9e" aria-label="Remove"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div>'),na=h('<div class="file-list svelte-1myht9e"></div>'),ca=h('<label><svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg> <p class="dropzone__text svelte-1myht9e">Drag & drop files here</p> <p class="dropzone__hint svelte-1myht9e">or click to browse</p> <input type="file" multiple="" class="dropzone__input svelte-1myht9e"/></label> <!> <!>',1);function va(ke,m){tt(m,!0);const J=()=>dt(ft,"$authStore",Q),[Q,B]=Tt();let L=Oe(m,"open",15,!1),D=Oe(m,"onUploaded",3,()=>{}),_=u(Je([])),A=u(""),ve=u(!1),z=u(!1);const w=`file-upload-${Math.random().toString(36).slice(2,9)}`;let o=x(()=>e(_).map(v=>({name:v.name,size:K(v.size),type:v.type,isImage:v.type.startsWith("image/"),url:v.type.startsWith("image/")?URL.createObjectURL(v):""})));function F(){t(_,[],!0),t(A,""),t(z,!1)}function I(v){var f;v.preventDefault(),t(z,!1),(f=v.dataTransfer)!=null&&f.files&&t(_,[...e(_),...Array.from(v.dataTransfer.files)],!0)}function R(v){const f=v.target;f.files&&t(_,[...e(_),...Array.from(f.files)],!0),f.value=""}function y(v){t(_,e(_).filter((f,d)=>d!==v),!0)}async function de(){if(e(_).length===0)return;t(ve,!0);let v=0;for(const f of e(_))try{const d=new FormData;d.append("file",f),e(_).length===1&&e(A).trim()&&d.append("key",e(A).trim());const c=await fetch(Bt(`data/storage/buckets/${m.bucket}/upload`),{method:"POST",headers:{Authorization:`Bearer ${J().accessToken}`},body:d});if(!c.ok){const b=await c.json().catch(()=>({message:"Upload failed"}));throw new Error(b.message||"Upload failed")}v++}catch(d){Pe(`Failed to upload ${f.name}: ${d instanceof Error?d.message:"Unknown error"}`)}t(ve,!1),v>0&&(Ye(`Uploaded ${v} file${v>1?"s":""}`),L(!1),F(),D()())}function K(v){if(v===0)return"0 B";const f=["B","KB","MB","GB"],d=Math.floor(Math.log(v)/Math.log(1024));return`${(v/Math.pow(1024,d)).toFixed(d===0?0:1)} ${f[d]}`}pt(ke,{title:"Upload Files",onclose:F,get open(){return L()},set open(f){L(f)},footer:f=>{var d=ra(),c=me(d);ce(c,{variant:"secondary",onclick:()=>{L(!1),F()},children:(N,ue)=>{j();var fe=ne("Cancel");n(N,fe)},$$slots:{default:!0}});var b=s(c,2);{let N=x(()=>e(_).length===0);ce(b,{variant:"primary",onclick:de,get loading(){return e(ve)},get disabled(){return e(N)},children:(ue,fe)=>{j();var U=ne();k(()=>M(U,`Upload ${e(_).length>0?`(${e(_).length})`:""}`)),n(ue,U)},$$slots:{default:!0}})}n(f,d)},children:(f,d)=>{var c=ca(),b=me(c);let N;var ue=s(l(b),6);r(b);var fe=s(b,2);{var U=T=>{var O=la(),Y=l(O);ta(Y,{label:"Custom key (optional)",get placeholder(){return e(_)[0].name},get value(){return e(A)},set value(H){t(A,H,!0)}}),r(O),n(T,O)};ie(fe,T=>{e(_).length===1&&T(U)})}var re=s(fe,2);{var X=T=>{var O=na();Qe(O,21,()=>e(o),Pt,(Y,H,Te)=>{var De=ia(),He=l(De);{var rt=pe=>{var ge=sa();k(()=>{q(ge,"src",e(H).url),q(ge,"alt",e(H).name)}),n(pe,ge)},Ce=pe=>{var ge=oa();n(pe,ge)};ie(He,pe=>{e(H).isImage?pe(rt):pe(Ce,!1)})}var Le=s(He,2),Be=l(Le),Ve=l(Be,!0);r(Be);var ee=s(Be,2),We=l(ee);r(ee),r(Le);var je=s(Le,2);r(De),k(()=>{M(Ve,e(H).name),M(We,`${e(H).size??""} · ${(e(H).type||"unknown")??""}`)}),W("click",je,()=>y(Te)),n(Y,De)}),r(O),n(T,O)};ie(re,T=>{e(o).length>0&&T(X)})}k(()=>{N=Me(b,1,"dropzone svelte-1myht9e",null,N,{"dropzone--active":e(z)}),q(b,"for",w),q(ue,"id",w)}),vt("dragover",b,T=>{T.preventDefault(),t(z,!0)}),vt("dragleave",b,()=>{t(z,!1)}),vt("drop",b,I),W("change",ue,R),n(f,c)},$$slots:{footer:!0,default:!0}}),at(),B()}ut(["change","click"]);var da=h("<img/>"),ua=h('<span><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" class="svelte-zoylhi"><rect x="2" y="2" width="12" height="12" rx="1.5" class="svelte-zoylhi"></rect><circle cx="5.5" cy="5.5" r="1" class="svelte-zoylhi"></circle><path d="M2 11l3-3 2 2 3-3 4 4" class="svelte-zoylhi"></path></svg></span>'),fa=h("<span></span>");function Ut(ke,m){tt(m,!0);let J=Oe(m,"alt",3,""),Q=Oe(m,"class",3,""),B=u(null),L=u(!1);St(()=>{const w=m.src;let o=!1,F=null;t(B,null),t(L,!1);const I=jt(ft);return fetch(w,{headers:I.accessToken?{Authorization:`Bearer ${I.accessToken}`}:{}}).then(R=>o||!R.ok?(o||t(L,!0),null):R.blob()).then(R=>{o||!R||(F=URL.createObjectURL(R),t(B,F,!0))}).catch(()=>{o||t(L,!0)}),()=>{o=!0,F&&URL.revokeObjectURL(F)}});var D=Mt(),_=me(D);{var A=w=>{var o=da();k(()=>{q(o,"src",e(B)),q(o,"alt",J()),Me(o,1,Gt(Q()),"svelte-zoylhi")}),n(w,o)},ve=w=>{var o=ua();k(()=>{Me(o,1,`auth-img-fallback ${Q()??""}`,"svelte-zoylhi"),q(o,"aria-label",J())}),n(w,o)},z=w=>{var o=fa();k(()=>Me(o,1,`auth-img-loading ${Q()??""}`,"svelte-zoylhi")),n(w,o)};ie(_,w=>{e(B)?w(A):e(L)?w(ve,1):w(z,!1)})}n(ke,D),at()}var pa=h('<div class="share__url-row svelte-vlp39"><input class="share__url-input svelte-vlp39" type="text" readonly=""/> <!></div>'),ha=h('<div class="share svelte-vlp39"><p class="share__filename svelte-vlp39"> </p> <div class="share__section svelte-vlp39"><div class="share__label svelte-vlp39"><span class="share__label-text svelte-vlp39">Public URL</span> <span class="share__hint svelte-vlp39">Works if bucket read rule allows public access</span></div> <div class="share__url-row svelte-vlp39"><input class="share__url-input svelte-vlp39" type="text" readonly=""/> <!></div></div> <div class="share__section svelte-vlp39"><div class="share__label svelte-vlp39"><span class="share__label-text svelte-vlp39">Signed URL</span> <span class="share__hint svelte-vlp39">Time-limited access, no auth required</span></div> <div class="share__signed-row svelte-vlp39"><!> <!></div> <!></div> <div class="share__usage svelte-vlp39"><p class="share__usage-title svelte-vlp39">Usage in HTML</p> <code class="share__code svelte-vlp39"><img src="<span class="share__code-url svelte-vlp39">…copied URL…</span>" /></code></div></div>');function _a(ke,m){tt(m,!0);let J=Oe(m,"open",15,!1),Q=u("1h"),B=u(""),L=u(!1),D=u(null);const _=[{value:"1h",label:"1 hour"},{value:"1d",label:"1 day"},{value:"7d",label:"7 days"},{value:"30d",label:"30 days"}];let A=x(()=>qt(`/api/storage/${m.bucket}/${m.fileKey}`)),ve=x(()=>m.fileKey.includes("/")?m.fileKey.split("/").pop()??m.fileKey:m.fileKey);async function z(){t(L,!0),t(B,"");try{const o=await Xe.fetch(`data/storage/buckets/${m.bucket}/signed-url`,{method:"POST",body:{key:m.fileKey,expiresIn:e(Q)}});t(B,o.url,!0)}catch(o){Pe(o instanceof Error?o.message:"Failed to create signed URL")}finally{t(L,!1)}}async function w(o,F){try{await navigator.clipboard.writeText(o),t(D,F,!0),Ye("URL copied to clipboard"),setTimeout(()=>{t(D,null)},2e3)}catch{Pe("Failed to copy URL")}}St(()=>{J()&&(t(B,""),t(D,null))}),pt(ke,{title:"Share File",get open(){return J()},set open(o){J(o)},children:(o,F)=>{var I=ha(),R=l(I),y=l(R,!0);r(R);var de=s(R,2),K=s(l(de),2),v=l(K);et(v);var f=s(v,2);{let U=x(()=>e(D)==="public"?"primary":"secondary");ce(f,{get variant(){return e(U)},size:"sm",onclick:()=>w(e(A),"public"),children:(re,X)=>{j();var T=ne();k(()=>M(T,e(D)==="public"?"Copied!":"Copy")),n(re,T)},$$slots:{default:!0}})}r(K),r(de);var d=s(de,2),c=s(l(d),2),b=l(c);aa(b,{get options(){return _},get value(){return e(Q)},set value(U){t(Q,U,!0)}});var N=s(b,2);ce(N,{variant:"primary",size:"sm",get loading(){return e(L)},onclick:z,children:(U,re)=>{j();var X=ne("Generate");n(U,X)},$$slots:{default:!0}}),r(c);var ue=s(c,2);{var fe=U=>{var re=pa(),X=l(re);et(X);var T=s(X,2);{let O=x(()=>e(D)==="signed"?"primary":"secondary");ce(T,{get variant(){return e(O)},size:"sm",onclick:()=>w(e(B),"signed"),children:(Y,H)=>{j();var Te=ne();k(()=>M(Te,e(D)==="signed"?"Copied!":"Copy")),n(Y,Te)},$$slots:{default:!0}})}r(re),k(()=>$t(X,e(B))),W("click",X,O=>O.currentTarget.select()),n(U,re)};ie(ue,U=>{e(B)&&U(fe)})}r(d),j(2),r(I),k(()=>{M(y,e(ve)),$t(v,e(A))}),W("click",v,U=>U.currentTarget.select()),n(o,I)},$$slots:{default:!0}}),at()}ut(["click"]);var ma=h("<!> <a><!></a>",1),ga=h('<span class="breadcrumb__sep svelte-f2o7w5">/</span> <button> </button>',1),wa=h('<div class="bulk-bar svelte-f2o7w5"><span class="bulk-bar__count svelte-f2o7w5"> </span> <div class="bulk-bar__actions svelte-f2o7w5"><!></div> <button class="bulk-bar__clear svelte-f2o7w5">Clear</button></div>'),ya=h('<div class="loading-state svelte-f2o7w5">Loading files...</div>'),ba=h('<tr class="folder-row svelte-f2o7w5"><td class="col-checkbox svelte-f2o7w5"></td><td class="col-preview svelte-f2o7w5"><span class="folder-icon svelte-f2o7w5"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 4V13H14V5H8L6.5 3H2V4Z" stroke-linejoin="round"></path></svg></span></td><td class="col-key svelte-f2o7w5" colspan="4"><button class="folder-btn svelte-f2o7w5"> </button></td><td class="col-actions svelte-f2o7w5"></td></tr>'),ka=h('<button type="button" class="thumb-button svelte-f2o7w5"><!></button>'),$a=h('<span class="file-icon svelte-f2o7w5"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 2H10L13 5V14H4V2Z" stroke-linejoin="round"></path><path d="M10 2V5H13"></path></svg></span>'),xa=h('<tr><td class="col-checkbox svelte-f2o7w5"><input type="checkbox" class="svelte-f2o7w5"/></td><td class="col-preview svelte-f2o7w5"><!></td><td class="col-key svelte-f2o7w5"><span class="file-key svelte-f2o7w5"> </span></td><td class="col-size svelte-f2o7w5"> </td><td class="col-type svelte-f2o7w5"><span class="mime-type svelte-f2o7w5"> </span></td><td class="col-date svelte-f2o7w5"> </td><td class="col-actions svelte-f2o7w5"><div class="action-btns svelte-f2o7w5"><button class="icon-btn svelte-f2o7w5" title="Download"><svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M8 2v9M4 8l4 4 4-4" stroke-linecap="round" stroke-linejoin="round"></path><path d="M2 13h12" stroke-linecap="round"></path></svg></button> <button class="icon-btn svelte-f2o7w5" title="Share"><svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="4" cy="8" r="2"></circle><circle cx="12" cy="4" r="2"></circle><circle cx="12" cy="12" r="2"></circle><path d="M5.7 7l4.6-2M5.7 9l4.6 2"></path></svg></button> <!></div></td></tr>'),za=h('<div class="pagination svelte-f2o7w5"><!></div>'),Ua=h('<div class="table-wrapper svelte-f2o7w5"><table class="file-table svelte-f2o7w5"><thead class="svelte-f2o7w5"><tr><th class="col-checkbox svelte-f2o7w5"><input type="checkbox" aria-label="Select all files" class="svelte-f2o7w5"/></th><th class="col-preview svelte-f2o7w5"></th><th class="col-key svelte-f2o7w5">Name</th><th class="col-size svelte-f2o7w5">Size</th><th class="col-type svelte-f2o7w5">Type</th><th class="col-date svelte-f2o7w5">Uploaded</th><th class="col-actions svelte-f2o7w5"></th></tr></thead><tbody class="svelte-f2o7w5"><!><!></tbody></table></div> <!>',1),Sa=h('<nav class="breadcrumb svelte-f2o7w5"><button> </button> <!></nav> <!> <!>',1),Pa=h('<div class="image-preview svelte-f2o7w5"><div class="image-preview__frame svelte-f2o7w5"><!></div> <dl class="image-preview__meta svelte-f2o7w5"><div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Path</dt> <dd class="svelte-f2o7w5"> </dd></div> <div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Type</dt> <dd class="svelte-f2o7w5"> </dd></div> <div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Size</dt> <dd class="svelte-f2o7w5"> </dd></div> <div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Uploaded</dt> <dd class="svelte-f2o7w5"> </dd></div></dl></div>'),Ma=h("<!> <!> <!> <!> <!> <!>",1);function Qa(ke,m){tt(m,!0);const J=()=>dt(Zt,"$page",B),Q=()=>dt(ft,"$authStore",B),[B,L]=Tt();let D=u(!1),_=u(!1),A=u("");function ve(a){return!!a&&a.startsWith("image/")}let z=x(()=>J().params.bucket??""),w=u(!0),o=u(Je([])),F=u(Je([])),I=u(null),R=u(!1),y=u(""),de=u(!1),K=u(null),v=u(!1),f=u(!1),d=u(null),c=u(Je(new Set)),b=u(!1),N=u(!1);function ue(a){const i=new Set(e(c));i.has(a)?i.delete(a):i.add(a),t(c,i,!0)}function fe(){e(c).size===e(o).length?t(c,new Set,!0):t(c,new Set(e(o).map(a=>a.key)),!0)}function U(){t(c,new Set,!0)}async function re(){t(b,!1),t(N,!0);const a=[...e(c)],i=await Promise.allSettled(a.map(async S=>{await Xe.fetch(`data/storage/buckets/${e(z)}/objects/${encodeURIComponent(S)}`,{method:"DELETE"})})),g=i.filter(S=>S.status==="fulfilled").length,$=i.filter(S=>S.status==="rejected").length;$===0?Ye(`Deleted ${g} file${g!==1?"s":""}`):Pe(`${g} succeeded, ${$} failed`),t(c,new Set,!0),t(N,!1),Y()}let X=x(()=>(()=>{if(!e(y))return[];const a=e(y).replace(/\/$/,"").split("/");return a.map((i,g)=>({label:i,prefix:a.slice(0,g+1).join("/")+"/"}))})());function T(a){return a?a.endsWith("/")?a:`${a}/`:""}function O(a){const i=new URL(window.location.href);a?i.searchParams.set("prefix",a):i.searchParams.delete("prefix"),history.replaceState(history.state,"",i.toString())}async function Y(a=!1){a?t(R,!0):t(w,!0);try{let i=`data/storage/buckets/${e(z)}/objects?limit=50&delimiter=/`;e(y)&&(i+=`&prefix=${encodeURIComponent(e(y))}`),a&&e(I)&&(i+=`&cursor=${encodeURIComponent(e(I))}`);const g=await Xe.fetch(i),$=(g.objects||[]).filter(S=>(e(y)?S.key.replace(e(y),""):S.key).length>0);a?t(o,[...e(o),...$],!0):(t(o,$,!0),t(F,g.folders||[],!0)),t(I,g.cursor,!0)}catch(i){Pe(i instanceof Error?i.message:"Failed to load objects")}finally{t(w,!1),t(R,!1)}}function H(a){t(y,T(a),!0),O(e(y)),t(I,null),t(c,new Set,!0),Y()}function Te(a){t(K,a,!0),t(de,!0)}function De(a){t(d,a,!0),t(f,!0)}function He(){t(f,!1),t(d,null)}async function rt(){if(e(K)){t(v,!0);try{await Xe.fetch(`data/storage/buckets/${e(z)}/objects/${encodeURIComponent(e(K))}`,{method:"DELETE"}),t(o,e(o).filter(a=>a.key!==e(K)),!0),e(c).delete(e(K)),t(c,new Set(e(c)),!0),Ye(`Deleted ${e(K)}`)}catch(a){Pe(a instanceof Error?a.message:"Failed to delete object")}finally{t(v,!1),t(K,null)}}}function Ce(a){return Bt(`data/storage/buckets/${e(z)}/objects/${encodeURIComponent(a)}`)}async function Le(a){try{const i=await fetch(Ce(a),{headers:{Authorization:`Bearer ${Q().accessToken}`}});if(!i.ok){const $=await i.json().catch(()=>({message:"Download failed"}));throw new Error($.message||"Download failed")}const g=await i.blob();Qt(g,ee(a))}catch(i){Pe(i instanceof Error?i.message:"Failed to download file")}}function Be(a){if(a===0)return"0 B";const i=["B","KB","MB","GB","TB"],g=Math.floor(Math.log(a)/Math.log(1024));return`${(a/Math.pow(1024,g)).toFixed(g===0?0:1)} ${i[g]}`}function Ve(a){try{return new Date(a).toLocaleString()}catch{return a}}function ee(a){return e(y)&&a.startsWith(e(y))?a.slice(e(y).length):a}Nt(()=>{t(y,T(J().url.searchParams.get("prefix")??""),!0),Y()});var We=Ma(),je=me(We);Xt(je,{get title(){return e(z)},description:"Browse files in this bucket",get docsHref(){return Yt},actions:i=>{var g=ma(),$=me(g);ce($,{variant:"primary",size:"sm",onclick:()=>t(D,!0),children:(se,$e)=>{j();var he=ne("Upload Files");n(se,he)},$$slots:{default:!0}});var S=s($,2),le=l(S);ce(le,{variant:"secondary",size:"sm",children:(se,$e)=>{j();var he=ne("Back to Buckets");n(se,he)},$$slots:{default:!0}}),r(S),k(()=>q(S,"href",`${Jt}/storage`)),n(i,g)},children:(i,g)=>{var $=Sa(),S=me($),le=l(S);let se;var $e=l(le,!0);r(le);var he=s(le,2);Qe(he,17,()=>e(X),Pt,(P,C)=>{var E=ga(),G=s(me(E),2);let Z;var _e=l(G,!0);r(G),k(()=>{Z=Me(G,1,"breadcrumb__item svelte-f2o7w5",null,Z,{"breadcrumb__item--active":e(C).prefix===e(y)}),M(_e,e(C).label)}),W("click",G,()=>H(e(C).prefix)),n(P,E)}),r(S);var Ne=s(S,2);{var Ge=P=>{var C=wa(),E=l(C),G=l(E);r(E);var Z=s(E,2),_e=l(Z);ce(_e,{variant:"danger",size:"sm",onclick:()=>t(b,!0),get disabled(){return e(N)},children:(ze,Ue)=>{j();var we=ne("Delete Selected");n(ze,we)},$$slots:{default:!0}}),r(Z);var xe=s(Z,2);r(C),k(()=>M(G,`${e(c).size??""} selected`)),W("click",xe,U),n(P,C)};ie(Ne,P=>{e(c).size>0&&P(Ge)})}var Fe=s(Ne,2);{var Ze=P=>{var C=ya();n(P,C)},lt=P=>{{let C=x(()=>e(y)?"This folder is empty.":"This bucket is empty.");ea(P,{title:"No files",get description(){return e(C)}})}},Re=P=>{var C=Ua(),E=me(C),G=l(E),Z=l(G),_e=l(Z),xe=l(_e),ze=l(xe);et(ze),r(xe),j(6),r(_e),r(Z);var Ue=s(Z),we=l(Ue);Qe(we,16,()=>e(F),te=>te,(te,p)=>{var oe=ba(),Se=s(l(oe),2),ye=l(Se),be=l(ye);r(ye),r(Se),j(),r(oe),k(Ie=>M(be,`${Ie??""}/`),[()=>p.replace(e(y),"").replace(/\/$/,"")]),W("click",ye,()=>H(p)),n(te,oe)});var qe=s(we);Qe(qe,17,()=>e(o),te=>te.key,(te,p)=>{var oe=xa();let Se;var ye=l(oe),be=l(ye);et(be),r(ye);var Ie=s(ye),Ft=l(Ie);{var Rt=V=>{var ae=ka(),Ee=l(ae);{let Ae=x(()=>Ce(e(p).key)),Ke=x(()=>ee(e(p).key));Ut(Ee,{class:"file-thumb",get src(){return e(Ae)},get alt(){return e(Ke)}})}r(ae),k((Ae,Ke)=>{q(ae,"aria-label",Ae),q(ae,"title",Ke)},[()=>`Preview ${ee(e(p).key)}`,()=>`Preview ${ee(e(p).key)}`]),W("click",ae,()=>De(e(p))),n(V,ae)},It=x(()=>{var V;return ve((V=e(p).httpMetadata)==null?void 0:V.contentType)}),Et=V=>{var ae=$a();n(V,ae)};ie(Ft,V=>{e(It)?V(Rt):V(Et,!1)})}r(Ie);var st=s(Ie),ot=l(st),At=l(ot,!0);r(ot),r(st);var it=s(st),Kt=l(it,!0);r(it);var nt=s(it),mt=l(nt),Ot=l(mt,!0);r(mt),r(nt);var ct=s(nt),Ht=l(ct,!0);r(ct);var gt=s(ct),wt=l(gt),yt=l(wt),bt=s(yt,2),Vt=s(bt,2);ce(Vt,{variant:"danger",size:"sm",onclick:()=>Te(e(p).key),children:(V,ae)=>{j();var Ee=ne("Delete");n(V,Ee)},$$slots:{default:!0}}),r(wt),r(gt),r(oe),k((V,ae,Ee,Ae,Ke,Wt)=>{var kt;Se=Me(oe,1,"svelte-f2o7w5",null,Se,V),xt(be,ae),q(be,"aria-label",`Select ${Ee??""}`),q(ot,"title",e(p).key),M(At,Ae),M(Kt,Ke),M(Ot,((kt=e(p).httpMetadata)==null?void 0:kt.contentType)??"--"),M(Ht,Wt)},[()=>({"row--selected":e(c).has(e(p).key)}),()=>e(c).has(e(p).key),()=>ee(e(p).key),()=>ee(e(p).key),()=>Be(e(p).size),()=>Ve(e(p).uploaded)]),W("change",be,()=>ue(e(p).key)),W("click",yt,()=>Le(e(p).key)),W("click",bt,()=>{t(A,e(p).key,!0),t(_,!0)}),n(te,oe)}),r(Ue),r(G),r(E);var Ct=s(E,2);{var Lt=te=>{var p=za(),oe=l(p);ce(oe,{variant:"secondary",get loading(){return e(R)},onclick:()=>Y(!0),children:(Se,ye)=>{j();var be=ne("Load More");n(Se,be)},$$slots:{default:!0}}),r(p),n(te,p)};ie(Ct,te=>{e(I)&&te(Lt)})}k(()=>xt(ze,e(o).length>0&&e(c).size===e(o).length)),W("change",ze,fe),n(P,C)};ie(Fe,P=>{e(w)?P(Ze):e(o).length===0&&e(F).length===0?P(lt,1):P(Re,!1)})}k(()=>{se=Me(le,1,"breadcrumb__item svelte-f2o7w5",null,se,{"breadcrumb__item--active":!e(y)}),M($e,e(z))}),W("click",le,()=>H("")),n(i,$)}});var pe=s(je,2);{let a=x(()=>`Are you sure you want to delete "${e(K)??""}"? This action cannot be undone.`);zt(pe,{title:"Delete File",get message(){return e(a)},confirmLabel:"Delete",confirmVariant:"danger",onconfirm:rt,get open(){return e(de)},set open(i){t(de,i,!0)}})}var ge=s(pe,2);{let a=x(()=>e(c).size),i=x(()=>e(c).size!==1?"s":""),g=x(()=>`Are you sure you want to delete ${e(c).size} selected file${e(c).size!==1?"s":""}? This action cannot be undone.`);zt(ge,{get title(){return`Delete ${e(a)??""} File${e(i)??""}`},get message(){return e(g)},confirmLabel:"Delete All",confirmVariant:"danger",onconfirm:re,get open(){return e(b)},set open($){t(b,$,!0)}})}var ht=s(ge,2);va(ht,{get bucket(){return e(z)},onUploaded:()=>Y(),get open(){return e(D)},set open(a){t(D,a,!0)}});var _t=s(ht,2);{let a=x(()=>e(d)?ee(e(d).key):"Image Preview");pt(_t,{get title(){return e(a)},maxWidth:"min(92vw, 960px)",onclose:He,get open(){return e(f)},set open(i){t(f,i,!0)},children:(i,g)=>{var $=Mt(),S=me($);{var le=se=>{var $e=Pa(),he=l($e),Ne=l(he);{let Ue=x(()=>Ce(e(d).key)),we=x(()=>`Preview of ${ee(e(d).key)}`);Ut(Ne,{class:"image-preview__image",get src(){return e(Ue)},get alt(){return e(we)}})}r(he);var Ge=s(he,2),Fe=l(Ge),Ze=s(l(Fe),2),lt=l(Ze,!0);r(Ze),r(Fe);var Re=s(Fe,2),P=s(l(Re),2),C=l(P,!0);r(P),r(Re);var E=s(Re,2),G=s(l(E),2),Z=l(G,!0);r(G),r(E);var _e=s(E,2),xe=s(l(_e),2),ze=l(xe,!0);r(xe),r(_e),r(Ge),r($e),k((Ue,we)=>{var qe;M(lt,e(d).key),M(C,((qe=e(d).httpMetadata)==null?void 0:qe.contentType)??"--"),M(Z,Ue),M(ze,we)},[()=>Be(e(d).size),()=>Ve(e(d).uploaded)]),n(se,$e)};ie(S,se=>{e(d)&&se(le)})}n(i,$)},$$slots:{default:!0}})}var Dt=s(_t,2);_a(Dt,{get bucket(){return e(z)},get fileKey(){return e(A)},get open(){return e(_)},set open(a){t(_,a,!0)}}),n(ke,We),at(),L()}ut(["click","change"]);export{Qa as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{g as jt,o as Nt}from"../chunks/Bn2NtlTj.js";import{p as tt,d as u,M as Je,a as at,f as me,t as k,s,g as e,b as t,c as l,u as x,ae as j,r,w as St}from"../chunks/BdTBlfLy.js";import{d as ut,e as vt,a as W,s as M}from"../chunks/DtZk82gG.js";import{i as ie}from"../chunks/Y22E1hJM.js";import{t as Pe,b as Ye,e as Qe,i as Pt,a as Xe}from"../chunks/MKsm6wXE.js";import{a as n,t as ne,f as h,c as Mt}from"../chunks/DEELgv7K.js";import{s as Me,a as q,f as Gt,r as et,g as $t,e as xt}from"../chunks/CoI6jjbg.js";import{s as Tt,a as dt}from"../chunks/Cp8V0Xy2.js";import{p as Zt}from"../chunks/D8o7yzcA.js";import{g as Bt,a as ft,c as qt,d as Jt}from"../chunks/DskOoVLT.js";import{d as Qt}from"../chunks/wJsUhbfZ.js";import{P as Xt}from"../chunks/B8s_s9QY.js";import{s as Yt}from"../chunks/Q2nPFxS6.js";import{B as ce}from"../chunks/C72lTcG0.js";import{E as ea}from"../chunks/m9eWh0Cd.js";import{C as zt}from"../chunks/DILS_-VJ.js";import{p as Oe}from"../chunks/F9_4wRrd.js";import{M as pt}from"../chunks/Dt4vL4Df.js";import{I as ta}from"../chunks/_teD5ji5.js";import{S as aa}from"../chunks/DTmaM1M6.js";var ra=h("<!> <!>",1),la=h('<div class="key-input svelte-1myht9e"><!></div>'),sa=h('<img class="file-item__thumb svelte-1myht9e"/>'),oa=h('<div class="file-item__icon svelte-1myht9e"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></div>'),ia=h('<div class="file-item svelte-1myht9e"><!> <div class="file-item__info svelte-1myht9e"><span class="file-item__name svelte-1myht9e"> </span> <span class="file-item__meta svelte-1myht9e"> </span></div> <button class="file-item__remove svelte-1myht9e" aria-label="Remove"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div>'),na=h('<div class="file-list svelte-1myht9e"></div>'),ca=h('<label><svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg> <p class="dropzone__text svelte-1myht9e">Drag & drop files here</p> <p class="dropzone__hint svelte-1myht9e">or click to browse</p> <input type="file" multiple="" class="dropzone__input svelte-1myht9e"/></label> <!> <!>',1);function va(ke,m){tt(m,!0);const J=()=>dt(ft,"$authStore",Q),[Q,B]=Tt();let L=Oe(m,"open",15,!1),D=Oe(m,"onUploaded",3,()=>{}),_=u(Je([])),A=u(""),ve=u(!1),z=u(!1);const w=`file-upload-${Math.random().toString(36).slice(2,9)}`;let o=x(()=>e(_).map(v=>({name:v.name,size:K(v.size),type:v.type,isImage:v.type.startsWith("image/"),url:v.type.startsWith("image/")?URL.createObjectURL(v):""})));function F(){t(_,[],!0),t(A,""),t(z,!1)}function I(v){var f;v.preventDefault(),t(z,!1),(f=v.dataTransfer)!=null&&f.files&&t(_,[...e(_),...Array.from(v.dataTransfer.files)],!0)}function R(v){const f=v.target;f.files&&t(_,[...e(_),...Array.from(f.files)],!0),f.value=""}function y(v){t(_,e(_).filter((f,d)=>d!==v),!0)}async function de(){if(e(_).length===0)return;t(ve,!0);let v=0;for(const f of e(_))try{const d=new FormData;d.append("file",f),e(_).length===1&&e(A).trim()&&d.append("key",e(A).trim());const c=await fetch(Bt(`data/storage/buckets/${m.bucket}/upload`),{method:"POST",headers:{Authorization:`Bearer ${J().accessToken}`},body:d});if(!c.ok){const b=await c.json().catch(()=>({message:"Upload failed"}));throw new Error(b.message||"Upload failed")}v++}catch(d){Pe(`Failed to upload ${f.name}: ${d instanceof Error?d.message:"Unknown error"}`)}t(ve,!1),v>0&&(Ye(`Uploaded ${v} file${v>1?"s":""}`),L(!1),F(),D()())}function K(v){if(v===0)return"0 B";const f=["B","KB","MB","GB"],d=Math.floor(Math.log(v)/Math.log(1024));return`${(v/Math.pow(1024,d)).toFixed(d===0?0:1)} ${f[d]}`}pt(ke,{title:"Upload Files",onclose:F,get open(){return L()},set open(f){L(f)},footer:f=>{var d=ra(),c=me(d);ce(c,{variant:"secondary",onclick:()=>{L(!1),F()},children:(N,ue)=>{j();var fe=ne("Cancel");n(N,fe)},$$slots:{default:!0}});var b=s(c,2);{let N=x(()=>e(_).length===0);ce(b,{variant:"primary",onclick:de,get loading(){return e(ve)},get disabled(){return e(N)},children:(ue,fe)=>{j();var U=ne();k(()=>M(U,`Upload ${e(_).length>0?`(${e(_).length})`:""}`)),n(ue,U)},$$slots:{default:!0}})}n(f,d)},children:(f,d)=>{var c=ca(),b=me(c);let N;var ue=s(l(b),6);r(b);var fe=s(b,2);{var U=T=>{var O=la(),Y=l(O);ta(Y,{label:"Custom key (optional)",get placeholder(){return e(_)[0].name},get value(){return e(A)},set value(H){t(A,H,!0)}}),r(O),n(T,O)};ie(fe,T=>{e(_).length===1&&T(U)})}var re=s(fe,2);{var X=T=>{var O=na();Qe(O,21,()=>e(o),Pt,(Y,H,Te)=>{var De=ia(),He=l(De);{var rt=pe=>{var ge=sa();k(()=>{q(ge,"src",e(H).url),q(ge,"alt",e(H).name)}),n(pe,ge)},Ce=pe=>{var ge=oa();n(pe,ge)};ie(He,pe=>{e(H).isImage?pe(rt):pe(Ce,!1)})}var Le=s(He,2),Be=l(Le),Ve=l(Be,!0);r(Be);var ee=s(Be,2),We=l(ee);r(ee),r(Le);var je=s(Le,2);r(De),k(()=>{M(Ve,e(H).name),M(We,`${e(H).size??""} · ${(e(H).type||"unknown")??""}`)}),W("click",je,()=>y(Te)),n(Y,De)}),r(O),n(T,O)};ie(re,T=>{e(o).length>0&&T(X)})}k(()=>{N=Me(b,1,"dropzone svelte-1myht9e",null,N,{"dropzone--active":e(z)}),q(b,"for",w),q(ue,"id",w)}),vt("dragover",b,T=>{T.preventDefault(),t(z,!0)}),vt("dragleave",b,()=>{t(z,!1)}),vt("drop",b,I),W("change",ue,R),n(f,c)},$$slots:{footer:!0,default:!0}}),at(),B()}ut(["change","click"]);var da=h("<img/>"),ua=h('<span><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" class="svelte-zoylhi"><rect x="2" y="2" width="12" height="12" rx="1.5" class="svelte-zoylhi"></rect><circle cx="5.5" cy="5.5" r="1" class="svelte-zoylhi"></circle><path d="M2 11l3-3 2 2 3-3 4 4" class="svelte-zoylhi"></path></svg></span>'),fa=h("<span></span>");function Ut(ke,m){tt(m,!0);let J=Oe(m,"alt",3,""),Q=Oe(m,"class",3,""),B=u(null),L=u(!1);St(()=>{const w=m.src;let o=!1,F=null;t(B,null),t(L,!1);const I=jt(ft);return fetch(w,{headers:I.accessToken?{Authorization:`Bearer ${I.accessToken}`}:{}}).then(R=>o||!R.ok?(o||t(L,!0),null):R.blob()).then(R=>{o||!R||(F=URL.createObjectURL(R),t(B,F,!0))}).catch(()=>{o||t(L,!0)}),()=>{o=!0,F&&URL.revokeObjectURL(F)}});var D=Mt(),_=me(D);{var A=w=>{var o=da();k(()=>{q(o,"src",e(B)),q(o,"alt",J()),Me(o,1,Gt(Q()),"svelte-zoylhi")}),n(w,o)},ve=w=>{var o=ua();k(()=>{Me(o,1,`auth-img-fallback ${Q()??""}`,"svelte-zoylhi"),q(o,"aria-label",J())}),n(w,o)},z=w=>{var o=fa();k(()=>Me(o,1,`auth-img-loading ${Q()??""}`,"svelte-zoylhi")),n(w,o)};ie(_,w=>{e(B)?w(A):e(L)?w(ve,1):w(z,!1)})}n(ke,D),at()}var pa=h('<div class="share__url-row svelte-vlp39"><input class="share__url-input svelte-vlp39" type="text" readonly=""/> <!></div>'),ha=h('<div class="share svelte-vlp39"><p class="share__filename svelte-vlp39"> </p> <div class="share__section svelte-vlp39"><div class="share__label svelte-vlp39"><span class="share__label-text svelte-vlp39">Public URL</span> <span class="share__hint svelte-vlp39">Works if bucket read rule allows public access</span></div> <div class="share__url-row svelte-vlp39"><input class="share__url-input svelte-vlp39" type="text" readonly=""/> <!></div></div> <div class="share__section svelte-vlp39"><div class="share__label svelte-vlp39"><span class="share__label-text svelte-vlp39">Signed URL</span> <span class="share__hint svelte-vlp39">Time-limited access, no auth required</span></div> <div class="share__signed-row svelte-vlp39"><!> <!></div> <!></div> <div class="share__usage svelte-vlp39"><p class="share__usage-title svelte-vlp39">Usage in HTML</p> <code class="share__code svelte-vlp39"><img src="<span class="share__code-url svelte-vlp39">…copied URL…</span>" /></code></div></div>');function _a(ke,m){tt(m,!0);let J=Oe(m,"open",15,!1),Q=u("1h"),B=u(""),L=u(!1),D=u(null);const _=[{value:"1h",label:"1 hour"},{value:"1d",label:"1 day"},{value:"7d",label:"7 days"},{value:"30d",label:"30 days"}];let A=x(()=>qt(`/api/storage/${m.bucket}/${m.fileKey}`)),ve=x(()=>m.fileKey.includes("/")?m.fileKey.split("/").pop()??m.fileKey:m.fileKey);async function z(){t(L,!0),t(B,"");try{const o=await Xe.fetch(`data/storage/buckets/${m.bucket}/signed-url`,{method:"POST",body:{key:m.fileKey,expiresIn:e(Q)}});t(B,o.url,!0)}catch(o){Pe(o instanceof Error?o.message:"Failed to create signed URL")}finally{t(L,!1)}}async function w(o,F){try{await navigator.clipboard.writeText(o),t(D,F,!0),Ye("URL copied to clipboard"),setTimeout(()=>{t(D,null)},2e3)}catch{Pe("Failed to copy URL")}}St(()=>{J()&&(t(B,""),t(D,null))}),pt(ke,{title:"Share File",get open(){return J()},set open(o){J(o)},children:(o,F)=>{var I=ha(),R=l(I),y=l(R,!0);r(R);var de=s(R,2),K=s(l(de),2),v=l(K);et(v);var f=s(v,2);{let U=x(()=>e(D)==="public"?"primary":"secondary");ce(f,{get variant(){return e(U)},size:"sm",onclick:()=>w(e(A),"public"),children:(re,X)=>{j();var T=ne();k(()=>M(T,e(D)==="public"?"Copied!":"Copy")),n(re,T)},$$slots:{default:!0}})}r(K),r(de);var d=s(de,2),c=s(l(d),2),b=l(c);aa(b,{get options(){return _},get value(){return e(Q)},set value(U){t(Q,U,!0)}});var N=s(b,2);ce(N,{variant:"primary",size:"sm",get loading(){return e(L)},onclick:z,children:(U,re)=>{j();var X=ne("Generate");n(U,X)},$$slots:{default:!0}}),r(c);var ue=s(c,2);{var fe=U=>{var re=pa(),X=l(re);et(X);var T=s(X,2);{let O=x(()=>e(D)==="signed"?"primary":"secondary");ce(T,{get variant(){return e(O)},size:"sm",onclick:()=>w(e(B),"signed"),children:(Y,H)=>{j();var Te=ne();k(()=>M(Te,e(D)==="signed"?"Copied!":"Copy")),n(Y,Te)},$$slots:{default:!0}})}r(re),k(()=>$t(X,e(B))),W("click",X,O=>O.currentTarget.select()),n(U,re)};ie(ue,U=>{e(B)&&U(fe)})}r(d),j(2),r(I),k(()=>{M(y,e(ve)),$t(v,e(A))}),W("click",v,U=>U.currentTarget.select()),n(o,I)},$$slots:{default:!0}}),at()}ut(["click"]);var ma=h("<!> <a><!></a>",1),ga=h('<span class="breadcrumb__sep svelte-f2o7w5">/</span> <button> </button>',1),wa=h('<div class="bulk-bar svelte-f2o7w5"><span class="bulk-bar__count svelte-f2o7w5"> </span> <div class="bulk-bar__actions svelte-f2o7w5"><!></div> <button class="bulk-bar__clear svelte-f2o7w5">Clear</button></div>'),ya=h('<div class="loading-state svelte-f2o7w5">Loading files...</div>'),ba=h('<tr class="folder-row svelte-f2o7w5"><td class="col-checkbox svelte-f2o7w5"></td><td class="col-preview svelte-f2o7w5"><span class="folder-icon svelte-f2o7w5"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 4V13H14V5H8L6.5 3H2V4Z" stroke-linejoin="round"></path></svg></span></td><td class="col-key svelte-f2o7w5" colspan="4"><button class="folder-btn svelte-f2o7w5"> </button></td><td class="col-actions svelte-f2o7w5"></td></tr>'),ka=h('<button type="button" class="thumb-button svelte-f2o7w5"><!></button>'),$a=h('<span class="file-icon svelte-f2o7w5"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 2H10L13 5V14H4V2Z" stroke-linejoin="round"></path><path d="M10 2V5H13"></path></svg></span>'),xa=h('<tr><td class="col-checkbox svelte-f2o7w5"><input type="checkbox" class="svelte-f2o7w5"/></td><td class="col-preview svelte-f2o7w5"><!></td><td class="col-key svelte-f2o7w5"><span class="file-key svelte-f2o7w5"> </span></td><td class="col-size svelte-f2o7w5"> </td><td class="col-type svelte-f2o7w5"><span class="mime-type svelte-f2o7w5"> </span></td><td class="col-date svelte-f2o7w5"> </td><td class="col-actions svelte-f2o7w5"><div class="action-btns svelte-f2o7w5"><button class="icon-btn svelte-f2o7w5" title="Download"><svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M8 2v9M4 8l4 4 4-4" stroke-linecap="round" stroke-linejoin="round"></path><path d="M2 13h12" stroke-linecap="round"></path></svg></button> <button class="icon-btn svelte-f2o7w5" title="Share"><svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="4" cy="8" r="2"></circle><circle cx="12" cy="4" r="2"></circle><circle cx="12" cy="12" r="2"></circle><path d="M5.7 7l4.6-2M5.7 9l4.6 2"></path></svg></button> <!></div></td></tr>'),za=h('<div class="pagination svelte-f2o7w5"><!></div>'),Ua=h('<div class="table-wrapper svelte-f2o7w5"><table class="file-table svelte-f2o7w5"><thead class="svelte-f2o7w5"><tr><th class="col-checkbox svelte-f2o7w5"><input type="checkbox" aria-label="Select all files" class="svelte-f2o7w5"/></th><th class="col-preview svelte-f2o7w5"></th><th class="col-key svelte-f2o7w5">Name</th><th class="col-size svelte-f2o7w5">Size</th><th class="col-type svelte-f2o7w5">Type</th><th class="col-date svelte-f2o7w5">Uploaded</th><th class="col-actions svelte-f2o7w5"></th></tr></thead><tbody class="svelte-f2o7w5"><!><!></tbody></table></div> <!>',1),Sa=h('<nav class="breadcrumb svelte-f2o7w5"><button> </button> <!></nav> <!> <!>',1),Pa=h('<div class="image-preview svelte-f2o7w5"><div class="image-preview__frame svelte-f2o7w5"><!></div> <dl class="image-preview__meta svelte-f2o7w5"><div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Path</dt> <dd class="svelte-f2o7w5"> </dd></div> <div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Type</dt> <dd class="svelte-f2o7w5"> </dd></div> <div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Size</dt> <dd class="svelte-f2o7w5"> </dd></div> <div class="image-preview__meta-row svelte-f2o7w5"><dt class="svelte-f2o7w5">Uploaded</dt> <dd class="svelte-f2o7w5"> </dd></div></dl></div>'),Ma=h("<!> <!> <!> <!> <!> <!>",1);function Qa(ke,m){tt(m,!0);const J=()=>dt(Zt,"$page",B),Q=()=>dt(ft,"$authStore",B),[B,L]=Tt();let D=u(!1),_=u(!1),A=u("");function ve(a){return!!a&&a.startsWith("image/")}let z=x(()=>J().params.bucket??""),w=u(!0),o=u(Je([])),F=u(Je([])),I=u(null),R=u(!1),y=u(""),de=u(!1),K=u(null),v=u(!1),f=u(!1),d=u(null),c=u(Je(new Set)),b=u(!1),N=u(!1);function ue(a){const i=new Set(e(c));i.has(a)?i.delete(a):i.add(a),t(c,i,!0)}function fe(){e(c).size===e(o).length?t(c,new Set,!0):t(c,new Set(e(o).map(a=>a.key)),!0)}function U(){t(c,new Set,!0)}async function re(){t(b,!1),t(N,!0);const a=[...e(c)],i=await Promise.allSettled(a.map(async S=>{await Xe.fetch(`data/storage/buckets/${e(z)}/objects/${encodeURIComponent(S)}`,{method:"DELETE"})})),g=i.filter(S=>S.status==="fulfilled").length,$=i.filter(S=>S.status==="rejected").length;$===0?Ye(`Deleted ${g} file${g!==1?"s":""}`):Pe(`${g} succeeded, ${$} failed`),t(c,new Set,!0),t(N,!1),Y()}let X=x(()=>(()=>{if(!e(y))return[];const a=e(y).replace(/\/$/,"").split("/");return a.map((i,g)=>({label:i,prefix:a.slice(0,g+1).join("/")+"/"}))})());function T(a){return a?a.endsWith("/")?a:`${a}/`:""}function O(a){const i=new URL(window.location.href);a?i.searchParams.set("prefix",a):i.searchParams.delete("prefix"),history.replaceState(history.state,"",i.toString())}async function Y(a=!1){a?t(R,!0):t(w,!0);try{let i=`data/storage/buckets/${e(z)}/objects?limit=50&delimiter=/`;e(y)&&(i+=`&prefix=${encodeURIComponent(e(y))}`),a&&e(I)&&(i+=`&cursor=${encodeURIComponent(e(I))}`);const g=await Xe.fetch(i),$=(g.objects||[]).filter(S=>(e(y)?S.key.replace(e(y),""):S.key).length>0);a?t(o,[...e(o),...$],!0):(t(o,$,!0),t(F,g.folders||[],!0)),t(I,g.cursor,!0)}catch(i){Pe(i instanceof Error?i.message:"Failed to load objects")}finally{t(w,!1),t(R,!1)}}function H(a){t(y,T(a),!0),O(e(y)),t(I,null),t(c,new Set,!0),Y()}function Te(a){t(K,a,!0),t(de,!0)}function De(a){t(d,a,!0),t(f,!0)}function He(){t(f,!1),t(d,null)}async function rt(){if(e(K)){t(v,!0);try{await Xe.fetch(`data/storage/buckets/${e(z)}/objects/${encodeURIComponent(e(K))}`,{method:"DELETE"}),t(o,e(o).filter(a=>a.key!==e(K)),!0),e(c).delete(e(K)),t(c,new Set(e(c)),!0),Ye(`Deleted ${e(K)}`)}catch(a){Pe(a instanceof Error?a.message:"Failed to delete object")}finally{t(v,!1),t(K,null)}}}function Ce(a){return Bt(`data/storage/buckets/${e(z)}/objects/${encodeURIComponent(a)}`)}async function Le(a){try{const i=await fetch(Ce(a),{headers:{Authorization:`Bearer ${Q().accessToken}`}});if(!i.ok){const $=await i.json().catch(()=>({message:"Download failed"}));throw new Error($.message||"Download failed")}const g=await i.blob();Qt(g,ee(a))}catch(i){Pe(i instanceof Error?i.message:"Failed to download file")}}function Be(a){if(a===0)return"0 B";const i=["B","KB","MB","GB","TB"],g=Math.floor(Math.log(a)/Math.log(1024));return`${(a/Math.pow(1024,g)).toFixed(g===0?0:1)} ${i[g]}`}function Ve(a){try{return new Date(a).toLocaleString()}catch{return a}}function ee(a){return e(y)&&a.startsWith(e(y))?a.slice(e(y).length):a}Nt(()=>{t(y,T(J().url.searchParams.get("prefix")??""),!0),Y()});var We=Ma(),je=me(We);Xt(je,{get title(){return e(z)},description:"Browse files in this bucket",get docsHref(){return Yt},actions:i=>{var g=ma(),$=me(g);ce($,{variant:"primary",size:"sm",onclick:()=>t(D,!0),children:(se,$e)=>{j();var he=ne("Upload Files");n(se,he)},$$slots:{default:!0}});var S=s($,2),le=l(S);ce(le,{variant:"secondary",size:"sm",children:(se,$e)=>{j();var he=ne("Back to Buckets");n(se,he)},$$slots:{default:!0}}),r(S),k(()=>q(S,"href",`${Jt}/storage`)),n(i,g)},children:(i,g)=>{var $=Sa(),S=me($),le=l(S);let se;var $e=l(le,!0);r(le);var he=s(le,2);Qe(he,17,()=>e(X),Pt,(P,C)=>{var E=ga(),G=s(me(E),2);let Z;var _e=l(G,!0);r(G),k(()=>{Z=Me(G,1,"breadcrumb__item svelte-f2o7w5",null,Z,{"breadcrumb__item--active":e(C).prefix===e(y)}),M(_e,e(C).label)}),W("click",G,()=>H(e(C).prefix)),n(P,E)}),r(S);var Ne=s(S,2);{var Ge=P=>{var C=wa(),E=l(C),G=l(E);r(E);var Z=s(E,2),_e=l(Z);ce(_e,{variant:"danger",size:"sm",onclick:()=>t(b,!0),get disabled(){return e(N)},children:(ze,Ue)=>{j();var we=ne("Delete Selected");n(ze,we)},$$slots:{default:!0}}),r(Z);var xe=s(Z,2);r(C),k(()=>M(G,`${e(c).size??""} selected`)),W("click",xe,U),n(P,C)};ie(Ne,P=>{e(c).size>0&&P(Ge)})}var Fe=s(Ne,2);{var Ze=P=>{var C=ya();n(P,C)},lt=P=>{{let C=x(()=>e(y)?"This folder is empty.":"This bucket is empty.");ea(P,{title:"No files",get description(){return e(C)}})}},Re=P=>{var C=Ua(),E=me(C),G=l(E),Z=l(G),_e=l(Z),xe=l(_e),ze=l(xe);et(ze),r(xe),j(6),r(_e),r(Z);var Ue=s(Z),we=l(Ue);Qe(we,16,()=>e(F),te=>te,(te,p)=>{var oe=ba(),Se=s(l(oe),2),ye=l(Se),be=l(ye);r(ye),r(Se),j(),r(oe),k(Ie=>M(be,`${Ie??""}/`),[()=>p.replace(e(y),"").replace(/\/$/,"")]),W("click",ye,()=>H(p)),n(te,oe)});var qe=s(we);Qe(qe,17,()=>e(o),te=>te.key,(te,p)=>{var oe=xa();let Se;var ye=l(oe),be=l(ye);et(be),r(ye);var Ie=s(ye),Ft=l(Ie);{var Rt=V=>{var ae=ka(),Ee=l(ae);{let Ae=x(()=>Ce(e(p).key)),Ke=x(()=>ee(e(p).key));Ut(Ee,{class:"file-thumb",get src(){return e(Ae)},get alt(){return e(Ke)}})}r(ae),k((Ae,Ke)=>{q(ae,"aria-label",Ae),q(ae,"title",Ke)},[()=>`Preview ${ee(e(p).key)}`,()=>`Preview ${ee(e(p).key)}`]),W("click",ae,()=>De(e(p))),n(V,ae)},It=x(()=>{var V;return ve((V=e(p).httpMetadata)==null?void 0:V.contentType)}),Et=V=>{var ae=$a();n(V,ae)};ie(Ft,V=>{e(It)?V(Rt):V(Et,!1)})}r(Ie);var st=s(Ie),ot=l(st),At=l(ot,!0);r(ot),r(st);var it=s(st),Kt=l(it,!0);r(it);var nt=s(it),mt=l(nt),Ot=l(mt,!0);r(mt),r(nt);var ct=s(nt),Ht=l(ct,!0);r(ct);var gt=s(ct),wt=l(gt),yt=l(wt),bt=s(yt,2),Vt=s(bt,2);ce(Vt,{variant:"danger",size:"sm",onclick:()=>Te(e(p).key),children:(V,ae)=>{j();var Ee=ne("Delete");n(V,Ee)},$$slots:{default:!0}}),r(wt),r(gt),r(oe),k((V,ae,Ee,Ae,Ke,Wt)=>{var kt;Se=Me(oe,1,"svelte-f2o7w5",null,Se,V),xt(be,ae),q(be,"aria-label",`Select ${Ee??""}`),q(ot,"title",e(p).key),M(At,Ae),M(Kt,Ke),M(Ot,((kt=e(p).httpMetadata)==null?void 0:kt.contentType)??"--"),M(Ht,Wt)},[()=>({"row--selected":e(c).has(e(p).key)}),()=>e(c).has(e(p).key),()=>ee(e(p).key),()=>ee(e(p).key),()=>Be(e(p).size),()=>Ve(e(p).uploaded)]),W("change",be,()=>ue(e(p).key)),W("click",yt,()=>Le(e(p).key)),W("click",bt,()=>{t(A,e(p).key,!0),t(_,!0)}),n(te,oe)}),r(Ue),r(G),r(E);var Ct=s(E,2);{var Lt=te=>{var p=za(),oe=l(p);ce(oe,{variant:"secondary",get loading(){return e(R)},onclick:()=>Y(!0),children:(Se,ye)=>{j();var be=ne("Load More");n(Se,be)},$$slots:{default:!0}}),r(p),n(te,p)};ie(Ct,te=>{e(I)&&te(Lt)})}k(()=>xt(ze,e(o).length>0&&e(c).size===e(o).length)),W("change",ze,fe),n(P,C)};ie(Fe,P=>{e(w)?P(Ze):e(o).length===0&&e(F).length===0?P(lt,1):P(Re,!1)})}k(()=>{se=Me(le,1,"breadcrumb__item svelte-f2o7w5",null,se,{"breadcrumb__item--active":!e(y)}),M($e,e(z))}),W("click",le,()=>H("")),n(i,$)}});var pe=s(je,2);{let a=x(()=>`Are you sure you want to delete "${e(K)??""}"? This action cannot be undone.`);zt(pe,{title:"Delete File",get message(){return e(a)},confirmLabel:"Delete",confirmVariant:"danger",onconfirm:rt,get open(){return e(de)},set open(i){t(de,i,!0)}})}var ge=s(pe,2);{let a=x(()=>e(c).size),i=x(()=>e(c).size!==1?"s":""),g=x(()=>`Are you sure you want to delete ${e(c).size} selected file${e(c).size!==1?"s":""}? This action cannot be undone.`);zt(ge,{get title(){return`Delete ${e(a)??""} File${e(i)??""}`},get message(){return e(g)},confirmLabel:"Delete All",confirmVariant:"danger",onconfirm:re,get open(){return e(b)},set open($){t(b,$,!0)}})}var ht=s(ge,2);va(ht,{get bucket(){return e(z)},onUploaded:()=>Y(),get open(){return e(D)},set open(a){t(D,a,!0)}});var _t=s(ht,2);{let a=x(()=>e(d)?ee(e(d).key):"Image Preview");pt(_t,{get title(){return e(a)},maxWidth:"min(92vw, 960px)",onclose:He,get open(){return e(f)},set open(i){t(f,i,!0)},children:(i,g)=>{var $=Mt(),S=me($);{var le=se=>{var $e=Pa(),he=l($e),Ne=l(he);{let Ue=x(()=>Ce(e(d).key)),we=x(()=>`Preview of ${ee(e(d).key)}`);Ut(Ne,{class:"image-preview__image",get src(){return e(Ue)},get alt(){return e(we)}})}r(he);var Ge=s(he,2),Fe=l(Ge),Ze=s(l(Fe),2),lt=l(Ze,!0);r(Ze),r(Fe);var Re=s(Fe,2),P=s(l(Re),2),C=l(P,!0);r(P),r(Re);var E=s(Re,2),G=s(l(E),2),Z=l(G,!0);r(G),r(E);var _e=s(E,2),xe=s(l(_e),2),ze=l(xe,!0);r(xe),r(_e),r(Ge),r($e),k((Ue,we)=>{var qe;M(lt,e(d).key),M(C,((qe=e(d).httpMetadata)==null?void 0:qe.contentType)??"--"),M(Z,Ue),M(ze,we)},[()=>Be(e(d).size),()=>Ve(e(d).uploaded)]),n(se,$e)};ie(S,se=>{e(d)&&se(le)})}n(i,$)},$$slots:{default:!0}})}var Dt=s(_t,2);_a(Dt,{get bucket(){return e(z)},get fileKey(){return e(A)},get open(){return e(_)},set open(a){t(_,a,!0)}}),n(ke,We),at(),L()}ut(["click","change"]);export{Qa as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as $e}from"../chunks/DoPXzH7F.js";import{p as Me,f as Y,a as ye,b as D,g as e,d as q,c as n,s as l,r as s,ae as je,t as H,u as v}from"../chunks/glwixJlP.js";import{s as m}from"../chunks/D5h5A1cc.js";import{i as B}from"../chunks/UUazaC_N.js";import{a as He,t as Be,e as ee,i as te}from"../chunks/BMMOfNi6.js";import{h as Ve}from"../chunks/7f08Id8e.js";import{c as Te,a as h,f as p}from"../chunks/BR_fL5Yv.js";import{a as F,s as re}from"../chunks/C6puvcoR.js";import{s as Re,a as Se}from"../chunks/B8vJP3wz.js";import{b as L}from"../chunks/BOjkBtym.js";import{a as Pe}from"../chunks/Br0qug7_.js";import{g as Ae}from"../chunks/R6arueIl.js";import{P as De}from"../chunks/CwROoZK0.js";import{M as V,T as qe}from"../chunks/CLHXYVje.js";import{b as ae}from"../chunks/Q2nPFxS6.js";var Fe=p('<div class="overview-panel__loading svelte-1uha8ag">Loading...</div>'),Ee=p('<div class="overview-service svelte-1uha8ag"><span></span> <span class="overview-service__name svelte-1uha8ag"> </span> <span class="overview-service__detail svelte-1uha8ag"> </span></div>'),Ue=p('<div class="overview-services svelte-1uha8ag"></div>'),Oe=p('<div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Auth</span> <span class="overview-info__value svelte-1uha8ag"> </span></div>'),Ze=p('<div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Buckets</span> <span class="overview-info__value svelte-1uha8ag"> </span></div>'),Ke=p('<div class="overview-info svelte-1uha8ag"><!> <!> <div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Service Keys</span> <span class="overview-info__value svelte-1uha8ag"> </span></div> <div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Mode</span> <span> </span></div></div>'),Qe=p('<a class="overview-action svelte-1uha8ag"><span class="overview-action__icon svelte-1uha8ag"><!></span> <span class="overview-action__label svelte-1uha8ag"> </span> <span class="overview-action__arrow svelte-1uha8ag"><svg width="14" height="14" viewBox="0 0 16 16" fill="none"><path d="M6 4L10 8L6 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></a>'),ze=p('<div class="overview-metrics svelte-1uha8ag"><!> <!> <!> <!> <!></div> <div class="overview-chart svelte-1uha8ag"><!></div> <div class="overview-panels svelte-1uha8ag"><div class="overview-panel svelte-1uha8ag"><h3 class="overview-panel__title svelte-1uha8ag">Services</h3> <!> <!></div> <div class="overview-panel svelte-1uha8ag"><h3 class="overview-panel__title svelte-1uha8ag">Quick Actions</h3> <div class="overview-actions svelte-1uha8ag"></div></div></div>',1);function vt(oe,se){Me(se,!0);const ie=()=>Se(Pe,"$authStore",ne),[ne,le]=Re();let E=q(!1),u=q(!0),i=q(null);const ve={"1h":{cardLabel:"1H",chartLabel:"Last 1 hour"},"6h":{cardLabel:"6H",chartLabel:"Last 6 hours"},"24h":{cardLabel:"24H",chartLabel:"Last 24 hours"}};async function ce(){try{const r=await He.fetch("data/overview");D(i,r,!0)}catch(r){Be(r instanceof Error?r.message:"Failed to load dashboard overview. Check your server connection and try reloading.")}finally{D(u,!1)}}const de=v(()=>()=>{var _,$;if(!(($=(_=e(i))==null?void 0:_.traffic)!=null&&$.summary))return 0;const{totalRequests:r,totalErrors:b}=e(i).traffic.summary;return r>0?b/r*100:0}),he=v(()=>()=>{var r,b;return(b=(r=e(i))==null?void 0:r.traffic)!=null&&b.timeSeries?e(i).traffic.timeSeries.map(_=>({timestamp:_.timestamp,value:_.requests??_.value??0})):[]}),U=v(()=>{var r;return((r=e(i))==null?void 0:r.traffic.appliedRange)??"24h"}),O=v(()=>ve[e(U)]),ue=v(()=>Ae(e(U)));$e(()=>{ie().accessToken&&(D(E,!0),ce())});const ge=[{label:"Users",href:`${L}/auth`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="5" r="2.5" stroke="currentColor" stroke-width="1.5"/><path d="M3 14C3 11.2386 5.23858 9 8 9C10.7614 9 13 11.2386 13 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'},{label:"Schema",href:`${L}/database/tables`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><rect x="2" y="2" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="9" y="9" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M7 4.5H9.5V9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'},{label:"ERD",href:`${L}/database/erd`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><rect x="1" y="2" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="10" y="10" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M6 4H8.5V12H10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'},{label:"Files",href:`${L}/storage`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><path d="M2 4L8 2L14 4V12L8 14L2 12V4Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M2 4L8 6L14 4" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 6V14" stroke="currentColor" stroke-width="1.5"/></svg>'},{label:"Analytics",href:`${L}/analytics`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><rect x="2" y="9" width="3" height="5" rx="0.5" stroke="currentColor" stroke-width="1.5"/><rect x="6.5" y="5" width="3" height="9" rx="0.5" stroke="currentColor" stroke-width="1.5"/><rect x="11" y="2" width="3" height="12" rx="0.5" stroke="currentColor" stroke-width="1.5"/></svg>'},{label:"Logs",href:`${L}/logs`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><path d="M4 4H12M4 7H10M4 10H12M4 13H8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'},{label:"Docs",href:ae,external:!0,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><path d="M3 2H10L13 5V14H3V2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M10 2V5H13" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M6 8H10M6 10.5H9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'}],pe=v(()=>()=>{if(!e(i))return[];const r=e(i).project;return[{name:"Auth",active:!0,detail:`${r.authProviders.length} provider${r.authProviders.length!==1?"s":""}`},{name:"Database",active:r.totalTables>0,detail:`${r.totalTables} table${r.totalTables!==1?"s":""}`},{name:"Storage",active:r.storageBuckets.length>0,detail:`${r.storageBuckets.length} bucket${r.storageBuckets.length!==1?"s":""}`},{name:"Live",active:!0,detail:`${r.liveConnections} conn${r.liveConnections!==1?"s":""}`}]});var Z=Te(),_e=Y(Z);{var we=r=>{De(r,{title:"Overview",description:"Project dashboard",get docsHref(){return ae},children:(b,_)=>{var $=ze(),T=Y($),K=n(T);{let a=v(()=>{var t,o;return((o=(t=e(i))==null?void 0:t.project)==null?void 0:o.totalUsers)??0});V(K,{label:"Total Users",get value(){return e(a)},get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="5" r="2.5" stroke="currentColor" stroke-width="1.5"/><path d="M3 14C3 11.2386 5.23858 9 8 9C10.7614 9 13 11.2386 13 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'})}var Q=l(K,2);{let a=v(()=>{var t,o;return((o=(t=e(i))==null?void 0:t.project)==null?void 0:o.totalTables)??0});V(Q,{label:"Tables",get value(){return e(a)},get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="2" y="2" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="9" y="9" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M7 4.5H9.5V9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'})}var z=l(Q,2);{let a=v(()=>`Requests (${e(O).cardLabel})`),t=v(()=>{var o,c,d;return((d=(c=(o=e(i))==null?void 0:o.traffic)==null?void 0:c.summary)==null?void 0:d.totalRequests)??0});V(z,{get label(){return e(a)},get value(){return e(t)},get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M2 14V8L5 4L8 7L11 2L14 6V14H2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></svg>'})}var G=l(z,2);{let a=v(()=>e(de)().toFixed(1));V(G,{label:"5xx Rate",get value(){return e(a)},unit:"%",get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 5V9M8 11V11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'})}var fe=l(G,2);{let a=v(()=>{var t,o;return((o=(t=e(i))==null?void 0:t.project)==null?void 0:o.liveConnections)??0});V(fe,{label:"Live",get value(){return e(a)},unit:"conns",get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1 8H3L5 3L8 13L11 6L13 8H15" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'})}s(T);var R=l(T,2),ke=n(R);{let a=v(()=>e(he)()),t=v(()=>`Requests — ${e(O).chartLabel}`);qe(ke,{get data(){return e(a)},type:"line",height:240,get label(){return e(t)},get formatTime(){return e(ue)},get loading(){return e(u)}})}s(R);var I=l(R,2),S=n(I),J=l(n(S),2);{var me=a=>{var t=Fe();h(a,t)},be=a=>{var t=Ue();ee(t,21,()=>e(pe)(),te,(o,c)=>{var d=Ee(),w=n(d);let g;var x=l(w,2),P=n(x,!0);s(x);var M=l(x,2),y=n(M,!0);s(M),s(d),H(()=>{g=re(w,1,"overview-service__dot svelte-1uha8ag",null,g,{"overview-service__dot--active":e(c).active}),m(P,e(c).name),m(y,e(c).detail)}),h(o,d)}),s(t),h(a,t)};B(J,a=>{e(u)?a(me):a(be,!1)})}var xe=l(J,2);{var Ce=a=>{var t=Ke(),o=n(t);{var c=f=>{var k=Oe(),j=l(n(k),2),A=n(j,!0);s(j),s(k),H(C=>m(A,C),[()=>e(i).project.authProviders.map(C=>C.charAt(0).toUpperCase()+C.slice(1)).join(", ")]),h(f,k)};B(o,f=>{e(i).project.authProviders.length>0&&f(c)})}var d=l(o,2);{var w=f=>{var k=Ze(),j=l(n(k),2),A=n(j,!0);s(j),s(k),H(C=>m(A,C),[()=>e(i).project.storageBuckets.join(", ")]),h(f,k)};B(d,f=>{e(i).project.storageBuckets.length>0&&f(w)})}var g=l(d,2),x=l(n(g),2),P=n(x,!0);s(x),s(g);var M=l(g,2),y=l(n(M),2);let X;var Le=n(y,!0);s(y),s(M),s(t),H(()=>{m(P,e(i).project.serviceKeyCount),X=re(y,1,"overview-info__value overview-info__badge svelte-1uha8ag",null,X,{"overview-info__badge--dev":e(i).project.devMode}),m(Le,e(i).project.devMode?"Development":"Production")}),h(a,t)};B(xe,a=>{var t;(t=e(i))!=null&&t.project&&a(Ce)})}s(S);var N=l(S,2),W=l(n(N),2);ee(W,21,()=>ge,te,(a,t)=>{var o=Qe(),c=n(o),d=n(c);Ve(d,()=>e(t).icon),s(c);var w=l(c,2),g=n(w,!0);s(w),je(2),s(o),H(()=>{F(o,"href",e(t).href),F(o,"target",e(t).external?"_blank":void 0),F(o,"rel",e(t).external?"noreferrer":void 0),m(g,e(t).label)}),h(a,o)}),s(W),s(N),s(I),h(b,$)}})};B(_e,r=>{e(E)&&r(we)})}h(oe,Z),ye(),le()}export{vt as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as $e}from"../chunks/Bn2NtlTj.js";import{p as Me,f as Y,a as ye,b as D,g as e,d as q,c as n,s as l,r as s,ae as je,t as H,u as v}from"../chunks/BdTBlfLy.js";import{s as m}from"../chunks/DtZk82gG.js";import{i as B}from"../chunks/Y22E1hJM.js";import{a as He,t as Be,e as ee,i as te}from"../chunks/MKsm6wXE.js";import{h as Ve}from"../chunks/DHWOQ9Ui.js";import{c as Te,a as h,f as p}from"../chunks/DEELgv7K.js";import{a as F,s as re}from"../chunks/CoI6jjbg.js";import{s as Re,a as Se}from"../chunks/Cp8V0Xy2.js";import{b as L}from"../chunks/B-pVQkKM.js";import{a as Pe}from"../chunks/DskOoVLT.js";import{g as Ae}from"../chunks/R6arueIl.js";import{P as De}from"../chunks/B8s_s9QY.js";import{M as V,T as qe}from"../chunks/CnWwy2Sf.js";import{b as ae}from"../chunks/Q2nPFxS6.js";var Fe=p('<div class="overview-panel__loading svelte-1uha8ag">Loading...</div>'),Ee=p('<div class="overview-service svelte-1uha8ag"><span></span> <span class="overview-service__name svelte-1uha8ag"> </span> <span class="overview-service__detail svelte-1uha8ag"> </span></div>'),Ue=p('<div class="overview-services svelte-1uha8ag"></div>'),Oe=p('<div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Auth</span> <span class="overview-info__value svelte-1uha8ag"> </span></div>'),Ze=p('<div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Buckets</span> <span class="overview-info__value svelte-1uha8ag"> </span></div>'),Ke=p('<div class="overview-info svelte-1uha8ag"><!> <!> <div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Service Keys</span> <span class="overview-info__value svelte-1uha8ag"> </span></div> <div class="overview-info__row svelte-1uha8ag"><span class="overview-info__label svelte-1uha8ag">Mode</span> <span> </span></div></div>'),Qe=p('<a class="overview-action svelte-1uha8ag"><span class="overview-action__icon svelte-1uha8ag"><!></span> <span class="overview-action__label svelte-1uha8ag"> </span> <span class="overview-action__arrow svelte-1uha8ag"><svg width="14" height="14" viewBox="0 0 16 16" fill="none"><path d="M6 4L10 8L6 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></a>'),ze=p('<div class="overview-metrics svelte-1uha8ag"><!> <!> <!> <!> <!></div> <div class="overview-chart svelte-1uha8ag"><!></div> <div class="overview-panels svelte-1uha8ag"><div class="overview-panel svelte-1uha8ag"><h3 class="overview-panel__title svelte-1uha8ag">Services</h3> <!> <!></div> <div class="overview-panel svelte-1uha8ag"><h3 class="overview-panel__title svelte-1uha8ag">Quick Actions</h3> <div class="overview-actions svelte-1uha8ag"></div></div></div>',1);function vt(oe,se){Me(se,!0);const ie=()=>Se(Pe,"$authStore",ne),[ne,le]=Re();let E=q(!1),u=q(!0),i=q(null);const ve={"1h":{cardLabel:"1H",chartLabel:"Last 1 hour"},"6h":{cardLabel:"6H",chartLabel:"Last 6 hours"},"24h":{cardLabel:"24H",chartLabel:"Last 24 hours"}};async function ce(){try{const r=await He.fetch("data/overview");D(i,r,!0)}catch(r){Be(r instanceof Error?r.message:"Failed to load dashboard overview. Check your server connection and try reloading.")}finally{D(u,!1)}}const de=v(()=>()=>{var _,$;if(!(($=(_=e(i))==null?void 0:_.traffic)!=null&&$.summary))return 0;const{totalRequests:r,totalErrors:b}=e(i).traffic.summary;return r>0?b/r*100:0}),he=v(()=>()=>{var r,b;return(b=(r=e(i))==null?void 0:r.traffic)!=null&&b.timeSeries?e(i).traffic.timeSeries.map(_=>({timestamp:_.timestamp,value:_.requests??_.value??0})):[]}),U=v(()=>{var r;return((r=e(i))==null?void 0:r.traffic.appliedRange)??"24h"}),O=v(()=>ve[e(U)]),ue=v(()=>Ae(e(U)));$e(()=>{ie().accessToken&&(D(E,!0),ce())});const ge=[{label:"Users",href:`${L}/auth`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="5" r="2.5" stroke="currentColor" stroke-width="1.5"/><path d="M3 14C3 11.2386 5.23858 9 8 9C10.7614 9 13 11.2386 13 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'},{label:"Schema",href:`${L}/database/tables`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><rect x="2" y="2" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="9" y="9" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M7 4.5H9.5V9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'},{label:"ERD",href:`${L}/database/erd`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><rect x="1" y="2" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="10" y="10" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M6 4H8.5V12H10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'},{label:"Files",href:`${L}/storage`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><path d="M2 4L8 2L14 4V12L8 14L2 12V4Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M2 4L8 6L14 4" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 6V14" stroke="currentColor" stroke-width="1.5"/></svg>'},{label:"Analytics",href:`${L}/analytics`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><rect x="2" y="9" width="3" height="5" rx="0.5" stroke="currentColor" stroke-width="1.5"/><rect x="6.5" y="5" width="3" height="9" rx="0.5" stroke="currentColor" stroke-width="1.5"/><rect x="11" y="2" width="3" height="12" rx="0.5" stroke="currentColor" stroke-width="1.5"/></svg>'},{label:"Logs",href:`${L}/logs`,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><path d="M4 4H12M4 7H10M4 10H12M4 13H8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'},{label:"Docs",href:ae,external:!0,icon:'<svg width="18" height="18" viewBox="0 0 16 16" fill="none"><path d="M3 2H10L13 5V14H3V2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M10 2V5H13" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M6 8H10M6 10.5H9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'}],pe=v(()=>()=>{if(!e(i))return[];const r=e(i).project;return[{name:"Auth",active:!0,detail:`${r.authProviders.length} provider${r.authProviders.length!==1?"s":""}`},{name:"Database",active:r.totalTables>0,detail:`${r.totalTables} table${r.totalTables!==1?"s":""}`},{name:"Storage",active:r.storageBuckets.length>0,detail:`${r.storageBuckets.length} bucket${r.storageBuckets.length!==1?"s":""}`},{name:"Live",active:!0,detail:`${r.liveConnections} conn${r.liveConnections!==1?"s":""}`}]});var Z=Te(),_e=Y(Z);{var we=r=>{De(r,{title:"Overview",description:"Project dashboard",get docsHref(){return ae},children:(b,_)=>{var $=ze(),T=Y($),K=n(T);{let a=v(()=>{var t,o;return((o=(t=e(i))==null?void 0:t.project)==null?void 0:o.totalUsers)??0});V(K,{label:"Total Users",get value(){return e(a)},get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="5" r="2.5" stroke="currentColor" stroke-width="1.5"/><path d="M3 14C3 11.2386 5.23858 9 8 9C10.7614 9 13 11.2386 13 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'})}var Q=l(K,2);{let a=v(()=>{var t,o;return((o=(t=e(i))==null?void 0:t.project)==null?void 0:o.totalTables)??0});V(Q,{label:"Tables",get value(){return e(a)},get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="2" y="2" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="9" y="9" width="5" height="5" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M7 4.5H9.5V9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'})}var z=l(Q,2);{let a=v(()=>`Requests (${e(O).cardLabel})`),t=v(()=>{var o,c,d;return((d=(c=(o=e(i))==null?void 0:o.traffic)==null?void 0:c.summary)==null?void 0:d.totalRequests)??0});V(z,{get label(){return e(a)},get value(){return e(t)},get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M2 14V8L5 4L8 7L11 2L14 6V14H2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></svg>'})}var G=l(z,2);{let a=v(()=>e(de)().toFixed(1));V(G,{label:"5xx Rate",get value(){return e(a)},unit:"%",get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 5V9M8 11V11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'})}var fe=l(G,2);{let a=v(()=>{var t,o;return((o=(t=e(i))==null?void 0:t.project)==null?void 0:o.liveConnections)??0});V(fe,{label:"Live",get value(){return e(a)},unit:"conns",get loading(){return e(u)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1 8H3L5 3L8 13L11 6L13 8H15" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'})}s(T);var R=l(T,2),ke=n(R);{let a=v(()=>e(he)()),t=v(()=>`Requests — ${e(O).chartLabel}`);qe(ke,{get data(){return e(a)},type:"line",height:240,get label(){return e(t)},get formatTime(){return e(ue)},get loading(){return e(u)}})}s(R);var I=l(R,2),S=n(I),J=l(n(S),2);{var me=a=>{var t=Fe();h(a,t)},be=a=>{var t=Ue();ee(t,21,()=>e(pe)(),te,(o,c)=>{var d=Ee(),w=n(d);let g;var x=l(w,2),P=n(x,!0);s(x);var M=l(x,2),y=n(M,!0);s(M),s(d),H(()=>{g=re(w,1,"overview-service__dot svelte-1uha8ag",null,g,{"overview-service__dot--active":e(c).active}),m(P,e(c).name),m(y,e(c).detail)}),h(o,d)}),s(t),h(a,t)};B(J,a=>{e(u)?a(me):a(be,!1)})}var xe=l(J,2);{var Ce=a=>{var t=Ke(),o=n(t);{var c=f=>{var k=Oe(),j=l(n(k),2),A=n(j,!0);s(j),s(k),H(C=>m(A,C),[()=>e(i).project.authProviders.map(C=>C.charAt(0).toUpperCase()+C.slice(1)).join(", ")]),h(f,k)};B(o,f=>{e(i).project.authProviders.length>0&&f(c)})}var d=l(o,2);{var w=f=>{var k=Ze(),j=l(n(k),2),A=n(j,!0);s(j),s(k),H(C=>m(A,C),[()=>e(i).project.storageBuckets.join(", ")]),h(f,k)};B(d,f=>{e(i).project.storageBuckets.length>0&&f(w)})}var g=l(d,2),x=l(n(g),2),P=n(x,!0);s(x),s(g);var M=l(g,2),y=l(n(M),2);let X;var Le=n(y,!0);s(y),s(M),s(t),H(()=>{m(P,e(i).project.serviceKeyCount),X=re(y,1,"overview-info__value overview-info__badge svelte-1uha8ag",null,X,{"overview-info__badge--dev":e(i).project.devMode}),m(Le,e(i).project.devMode?"Development":"Production")}),h(a,t)};B(xe,a=>{var t;(t=e(i))!=null&&t.project&&a(Ce)})}s(S);var N=l(S,2),W=l(n(N),2);ee(W,21,()=>ge,te,(a,t)=>{var o=Qe(),c=n(o),d=n(c);Ve(d,()=>e(t).icon),s(c);var w=l(c,2),g=n(w,!0);s(w),je(2),s(o),H(()=>{F(o,"href",e(t).href),F(o,"target",e(t).external?"_blank":void 0),F(o,"rel",e(t).external?"noreferrer":void 0),m(g,e(t).label)}),h(a,o)}),s(W),s(N),s(I),h(b,$)}})};B(_e,r=>{e(E)&&r(we)})}h(oe,Z),ye(),le()}export{vt as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as nt}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as nt}from"../chunks/Bn2NtlTj.js";import{p as it,a as lt,g as t,f as ct,c as f,s as c,r as d,u as l,t as S,b as m,d as y,ae as ut}from"../chunks/BdTBlfLy.js";import{d as vt,s as j,a as U}from"../chunks/DtZk82gG.js";import{i as B}from"../chunks/Y22E1hJM.js";import{a as dt,t as z,e as mt,i as gt}from"../chunks/MKsm6wXE.js";import{a as x,f as C}from"../chunks/DEELgv7K.js";import{s as Z,a as pt,r as G}from"../chunks/CoI6jjbg.js";import{b as J}from"../chunks/CYatlt7w.js";import{g as ft}from"../chunks/R6arueIl.js";import{P as ht}from"../chunks/B8s_s9QY.js";import{a as _t}from"../chunks/Q2nPFxS6.js";import{M as H,T as bt}from"../chunks/CnWwy2Sf.js";import{D as yt,T as kt}from"../chunks/DroeC-Do.js";var wt=C("<button> </button>"),xt=C('<div class="analytics-actions__custom svelte-1m0gshv"><input type="datetime-local" class="custom-date-input svelte-1m0gshv"/> <span class="custom-date-sep svelte-1m0gshv">→</span> <input type="datetime-local" class="custom-date-input svelte-1m0gshv"/> <button class="custom-date-apply svelte-1m0gshv">Apply</button></div>'),Ct=C('<span class="analytics-actions__updated svelte-1m0gshv"> </span>'),Tt=C('<span class="analytics-actions__dot svelte-1m0gshv"></span>'),Dt=C('<div class="analytics-actions svelte-1m0gshv"><div class="analytics-actions__ranges svelte-1m0gshv"></div> <button type="button">Exclude admin traffic</button> <!> <div class="analytics-actions__status svelte-1m0gshv"><!> <button><!> ⟳</button></div></div>'),$t=C('<p class="analytics-custom-error svelte-1m0gshv"> </p>'),Mt=C('<div class="analytics-grid svelte-1m0gshv"><!> <!> <!> <!></div> <div class="analytics-chart svelte-1m0gshv"><!></div> <!> <div class="analytics-bottom svelte-1m0gshv"><!> <!></div>',1);function Ot(K,Q){it(Q,!0);let v=y(!0),u=y(null),h=y("24h"),T=y(!0),P=y(""),E=y(!1);const W=[{value:"1h",label:"1H"},{value:"6h",label:"6H"},{value:"24h",label:"24H"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"custom",label:"Custom"}];let g=y(""),p=y("");const D=l(()=>()=>{if(t(h)!=="custom"||!t(g)||!t(p))return"";const e=new Date(t(g)).getTime(),r=new Date(t(p)).getTime();return Number.isNaN(e)||Number.isNaN(r)?"Enter a valid start and end time.":r<e?"End time must be after the start time.":""});async function A(){try{const e=new URLSearchParams({metric:"overview"});t(h)==="custom"&&t(g)&&t(p)?(e.set("start",new Date(t(g)).toISOString()),e.set("end",new Date(t(p)).toISOString())):e.set("range",t(h)),t(E)&&e.set("excludeCategory","admin");const r=`data/analytics?${e.toString()}`,_=await dt.fetch(r);m(u,_,!0),m(P,new Date().toLocaleTimeString(),!0)}catch(e){z(e instanceof Error?e.message:"Failed to load analytics data")}finally{m(v,!1)}}function X(e){m(h,e,!0),e!=="custom"&&(m(v,!0),A())}function Y(){m(E,!t(E)),(t(h)!=="custom"||t(g)&&t(p)&&!t(D)())&&(m(v,!0),A())}function tt(){if(!(!t(g)||!t(p))){if(t(D)()){z(t(D)());return}m(v,!0),A()}}nt(()=>{A();const e=setInterval(()=>{t(T)&&A()},3e4);return()=>clearInterval(e)});const et=l(()=>()=>{var _;if(!((_=t(u))!=null&&_.summary))return 0;const{totalRequests:e,totalErrors:r}=t(u).summary;return e>0?r/e*100:0}),at=l(()=>()=>{var e;return(e=t(u))!=null&&e.timeSeries?t(u).timeSeries.map(r=>({timestamp:r.timestamp,value:r.requests??r.value??0})):[]}),rt=l(()=>ft(t(h),t(g),t(p))),st=l(()=>()=>{var e;return(e=t(u))!=null&&e.breakdown?t(u).breakdown.map(r=>({label:r.label||"other",value:r.count})):[]}),ot=l(()=>()=>{var e;return(e=t(u))!=null&&e.topItems?t(u).topItems.map(r=>({label:r.label,count:r.count,secondary:`${Math.round(r.avgLatency)}ms avg · ${r.errorRate.toFixed(1)}% 5xx`})):[]});ht(K,{title:"Analytics",description:"API traffic and performance overview",get docsHref(){return _t},actions:r=>{var _=Dt(),$=f(_);mt($,21,()=>W,gt,(o,n)=>{var a=wt();let s;var i=f(a,!0);d(a),S(()=>{s=Z(a,1,"analytics-actions__range-btn svelte-1m0gshv",null,s,{"analytics-actions__range-btn--active":t(h)===t(n).value}),j(i,t(n).label)}),U("click",a,()=>X(t(n).value)),x(o,a)}),d($);var k=c($,2);let L;var R=c(k,2);{var I=o=>{var n=xt(),a=f(n);G(a);var s=c(a,4);G(s);var i=c(s,2);d(n),S(w=>i.disabled=w,[()=>!t(g)||!t(p)||!!t(D)()]),J(a,()=>t(g),w=>m(g,w)),J(s,()=>t(p),w=>m(p,w)),U("click",i,tt),x(o,n)};B(R,o=>{t(h)==="custom"&&o(I)})}var q=c(R,2),M=f(q);{var V=o=>{var n=Ct(),a=f(n);d(n),S(()=>j(a,`Updated ${t(P)??""}`)),x(o,n)};B(M,o=>{t(P)&&o(V)})}var b=c(M,2);let F;var O=f(b);{var N=o=>{var n=Tt();x(o,n)};B(O,o=>{t(T)&&o(N)})}ut(),d(b),d(q),d(_),S(()=>{L=Z(k,1,"analytics-actions__filter-btn svelte-1m0gshv",null,L,{"analytics-actions__filter-btn--active":t(E)}),F=Z(b,1,"analytics-actions__refresh-btn svelte-1m0gshv",null,F,{"analytics-actions__refresh-btn--active":t(T)}),pt(b,"title",t(T)?"Auto-refresh ON (30s)":"Auto-refresh OFF")}),U("click",k,Y),U("click",b,()=>m(T,!t(T))),x(r,_)},children:(r,_)=>{var $=Mt(),k=ct($),L=f(k);{let a=l(()=>{var s,i;return((i=(s=t(u))==null?void 0:s.summary)==null?void 0:i.totalRequests)??0});H(L,{label:"Total Requests",get value(){return t(a)},get loading(){return t(v)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M2 14V8L5 4L8 7L11 2L14 6V14H2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></svg>'})}var R=c(L,2);{let a=l(()=>{var s,i;return((i=(s=t(u))==null?void 0:s.summary)==null?void 0:i.uniqueUsers)??0});H(R,{label:"Unique Users",get value(){return t(a)},get loading(){return t(v)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="5" r="2.5" stroke="currentColor" stroke-width="1.5"/><path d="M3 14C3 11.2386 5.23858 9 8 9C10.7614 9 13 11.2386 13 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'})}var I=c(R,2);{let a=l(()=>t(et)().toFixed(1));H(I,{label:"5xx Rate",get value(){return t(a)},unit:"%",get loading(){return t(v)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 5V9M8 11V11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>'})}var q=c(I,2);{let a=l(()=>{var s,i;return Math.round(((i=(s=t(u))==null?void 0:s.summary)==null?void 0:i.avgLatency)??0)});H(q,{label:"Avg Latency",get value(){return t(a)},unit:"ms",get loading(){return t(v)},icon:'<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 4V8L10.5 10.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'})}d(k);var M=c(k,2),V=f(M);{let a=l(()=>t(at)());bt(V,{get data(){return t(a)},type:"line",height:260,label:"Requests over time",get formatTime(){return t(rt)},get loading(){return t(v)}})}d(M);var b=c(M,2);{var F=a=>{var s=$t(),i=f(s,!0);d(s),S(w=>j(i,w),[()=>t(D)()]),x(a,s)},O=l(()=>t(h)==="custom"&&t(D)());B(b,a=>{t(O)&&a(F)})}var N=c(b,2),o=f(N);{let a=l(()=>t(st)());yt(o,{get items(){return t(a)},title:"Category Distribution",get loading(){return t(v)}})}var n=c(o,2);{let a=l(()=>t(ot)());kt(n,{get items(){return t(a)},title:"Top Endpoints",get loading(){return t(v)}})}d(N),x(r,$)}}),lt()}vt(["click"]);export{Ot as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as z}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as z}from"../chunks/Bn2NtlTj.js";import{p as B,a as O,f as j,c as b,g as t,s as d,r as g,u as s,b as y,d as x,t as G}from"../chunks/BdTBlfLy.js";import{d as J,s as K,a as N}from"../chunks/DtZk82gG.js";import{a as Q,t as V,e as W,i as X}from"../chunks/MKsm6wXE.js";import{a as D,f as T}from"../chunks/DEELgv7K.js";import{s as Y}from"../chunks/CoI6jjbg.js";import{g as Z}from"../chunks/R6arueIl.js";import{P as tt}from"../chunks/B8s_s9QY.js";import{a as et}from"../chunks/Q2nPFxS6.js";import{M as _,T as at}from"../chunks/CnWwy2Sf.js";import{D as rt,T as st}from"../chunks/DroeC-Do.js";var ot=T("<button> </button>"),nt=T('<div class="range-selector"></div>'),it=T('<div class="analytics-grid"><!> <!> <!> <!></div> <div class="analytics-chart"><!></div> <div class="analytics-bottom"><!> <!></div>',1);function _t(F,I){B(I,!0);let o=x(!0),n=x(null),h=x("24h");const M=[{value:"1h",label:"1H"},{value:"6h",label:"6H"},{value:"24h",label:"24H"},{value:"7d",label:"7D"},{value:"30d",label:"30D"}];async function $(){try{const e=await Q.fetch(`data/analytics?range=${t(h)}&category=auth&metric=overview`);y(n,e,!0)}catch(e){V(e instanceof Error?e.message:"Failed to load auth analytics")}finally{y(o,!1)}}function k(e){y(h,e,!0),y(o,!0),$()}z(()=>{$();const e=setInterval(()=>void $(),3e4);return()=>clearInterval(e)});const w=s(()=>()=>{var c;if(!((c=t(n))!=null&&c.summary))return 0;const{totalRequests:e,totalErrors:a}=t(n).summary;return e>0?a/e*100:0}),H=s(()=>()=>{var e;return(((e=t(n))==null?void 0:e.timeSeries)||[]).map(a=>({timestamp:a.timestamp,value:a.requests??a.value??0}))}),L=s(()=>Z(t(h))),C=s(()=>()=>{var e;return(((e=t(n))==null?void 0:e.breakdown)||[]).map(a=>({label:a.label||"other",value:a.count}))}),E=s(()=>()=>{var e;return(((e=t(n))==null?void 0:e.topItems)||[]).map(a=>({label:a.label,count:a.count,secondary:`${Math.round(a.avgLatency)}ms · ${a.errorRate.toFixed(1)}% 5xx`}))});tt(F,{title:"Auth Analytics",description:"Authentication and authorization metrics",get docsHref(){return et},actions:a=>{var c=nt();W(c,21,()=>M,X,(p,m)=>{var i=ot();let v;var f=b(i,!0);g(i),G(()=>{v=Y(i,1,"range-btn",null,v,{"range-btn--active":t(h)===t(m).value}),K(f,t(m).label)}),N("click",i,()=>k(t(m).value)),D(p,i)}),g(c),D(a,c)},children:(a,c)=>{var p=it(),m=j(p),i=b(m);{let r=s(()=>{var l,u;return((u=(l=t(n))==null?void 0:l.summary)==null?void 0:u.totalRequests)??0});_(i,{label:"Auth Requests",get value(){return t(r)},get loading(){return t(o)}})}var v=d(i,2);{let r=s(()=>{var l,u;return((u=(l=t(n))==null?void 0:l.summary)==null?void 0:u.uniqueUsers)??0});_(v,{label:"Unique Users",get value(){return t(r)},get loading(){return t(o)}})}var f=d(v,2);{let r=s(()=>t(w)().toFixed(1));_(f,{label:"5xx Rate",get value(){return t(r)},unit:"%",get loading(){return t(o)}})}var P=d(f,2);{let r=s(()=>{var l,u;return Math.round(((u=(l=t(n))==null?void 0:l.summary)==null?void 0:u.avgLatency)??0)});_(P,{label:"Avg Latency",get value(){return t(r)},unit:"ms",get loading(){return t(o)}})}g(m);var A=d(m,2),U=b(A);{let r=s(()=>t(H)());at(U,{get data(){return t(r)},type:"line",height:240,label:"Auth requests over time",get formatTime(){return t(L)},get loading(){return t(o)},color:"#7c3aed"})}g(A);var q=d(A,2),R=b(q);{let r=s(()=>t(C)());rt(R,{get items(){return t(r)},title:"Action Distribution (signup, signin, oauth...)",get loading(){return t(o)}})}var S=d(R,2);{let r=s(()=>t(E)());st(S,{get items(){return t(r)},title:"Top Auth Operations",get loading(){return t(o)}})}g(q),D(a,p)}}),O()}J(["click"]);export{_t as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as S}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as S}from"../chunks/Bn2NtlTj.js";import{p as O,a as Q,f as j,c as h,g as e,s as m,r as g,u as s,b as y,d as x,t as z}from"../chunks/BdTBlfLy.js";import{d as G,s as J,a as K}from"../chunks/DtZk82gG.js";import{a as N,t as V,e as W,i as X}from"../chunks/MKsm6wXE.js";import{a as R,f as T}from"../chunks/DEELgv7K.js";import{s as Y}from"../chunks/CoI6jjbg.js";import{g as Z}from"../chunks/R6arueIl.js";import{P as ee}from"../chunks/B8s_s9QY.js";import{a as te}from"../chunks/Q2nPFxS6.js";import{M as _,T as ae}from"../chunks/CnWwy2Sf.js";import{D as re,T as se}from"../chunks/DroeC-Do.js";var oe=T("<button> </button>"),le=T('<div class="range-selector"></div>'),ne=T('<div class="analytics-grid"><!> <!> <!> <!></div> <div class="analytics-chart"><!></div> <div class="analytics-bottom"><!> <!></div>',1);function _e(C,F){O(F,!0);let o=x(!0),l=x(null),p=x("24h");const I=[{value:"1h",label:"1H"},{value:"6h",label:"6H"},{value:"24h",label:"24H"},{value:"7d",label:"7D"},{value:"30d",label:"30D"}];async function D(){try{const t=await N.fetch(`data/analytics?range=${e(p)}&category=db&metric=overview`);y(l,t,!0)}catch(t){V(t instanceof Error?t.message:"Failed to load database analytics")}finally{y(o,!1)}}function k(t){y(p,t,!0),y(o,!0),D()}S(()=>{D();const t=setInterval(()=>void D(),3e4);return()=>clearInterval(t)});const q=s(()=>()=>{var c;if(!((c=e(l))!=null&&c.summary))return 0;const{totalRequests:t,totalErrors:a}=e(l).summary;return t>0?a/t*100:0}),w=s(()=>()=>{var t;return(((t=e(l))==null?void 0:t.timeSeries)||[]).map(a=>({timestamp:a.timestamp,value:a.requests??a.value??0}))}),H=s(()=>Z(e(p))),L=s(()=>()=>{var t;return(((t=e(l))==null?void 0:t.breakdown)||[]).map(a=>({label:a.label||"other",value:a.count}))}),U=s(()=>()=>{var t;return(((t=e(l))==null?void 0:t.topItems)||[]).map(a=>({label:a.label,count:a.count,secondary:`${Math.round(a.avgLatency)}ms · ${a.errorRate.toFixed(1)}% 5xx`}))});ee(C,{title:"Database Analytics",description:"CRUD operations and table usage metrics",get docsHref(){return te},actions:a=>{var c=le();W(c,21,()=>I,X,(b,d)=>{var n=oe();let v;var f=h(n,!0);g(n),z(()=>{v=Y(n,1,"range-btn",null,v,{"range-btn--active":e(p)===e(d).value}),J(f,e(d).label)}),K("click",n,()=>k(e(d).value)),R(b,n)}),g(c),R(a,c)},children:(a,c)=>{var b=ne(),d=j(b),n=h(d);{let r=s(()=>{var i,u;return((u=(i=e(l))==null?void 0:i.summary)==null?void 0:u.totalRequests)??0});_(n,{label:"DB Queries",get value(){return e(r)},get loading(){return e(o)}})}var v=m(n,2);{let r=s(()=>{var i,u;return((u=(i=e(l))==null?void 0:i.summary)==null?void 0:u.uniqueUsers)??0});_(v,{label:"Active Users",get value(){return e(r)},get loading(){return e(o)}})}var f=m(v,2);{let r=s(()=>e(q)().toFixed(1));_(f,{label:"5xx Rate",get value(){return e(r)},unit:"%",get loading(){return e(o)}})}var E=m(f,2);{let r=s(()=>{var i,u;return Math.round(((u=(i=e(l))==null?void 0:i.summary)==null?void 0:u.avgLatency)??0)});_(E,{label:"Avg Latency",get value(){return e(r)},unit:"ms",get loading(){return e(o)}})}g(d);var $=m(d,2),P=h($);{let r=s(()=>e(w)());ae(P,{get data(){return e(r)},type:"bar",height:240,label:"Database operations over time",get formatTime(){return e(H)},get loading(){return e(o)},color:"#16a34a"})}g($);var A=m($,2),M=h(A);{let r=s(()=>e(L)());re(M,{get items(){return e(r)},title:"Operation Distribution (CRUD)",get loading(){return e(o)}})}var B=m(M,2);{let r=s(()=>e(U)());se(B,{get items(){return e(r)},title:"Most Accessed Tables",get loading(){return e(o)}})}g(A),R(a,b)}}),Q()}G(["click"]);export{_e as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as be}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as be}from"../chunks/Bn2NtlTj.js";import{p as Se,d as g,M as q,a as we,f as De,c as o,b as c,g as e,s as d,r as i,ae as z,t as h,u as G}from"../chunks/BdTBlfLy.js";import{d as Ee,s as p,a as Ie}from"../chunks/DtZk82gG.js";import{i as E}from"../chunks/Y22E1hJM.js";import{e as $e,a as Be,t as Le}from"../chunks/MKsm6wXE.js";import{t as K,a as u,f as m}from"../chunks/DEELgv7K.js";import{s as Te,a as Oe}from"../chunks/CoI6jjbg.js";import{P as Pe}from"../chunks/B8s_s9QY.js";import{a as Me}from"../chunks/Q2nPFxS6.js";import{B as ke}from"../chunks/C72lTcG0.js";import{S as Q}from"../chunks/DTmaM1M6.js";import{I as Ce}from"../chunks/_teD5ji5.js";import{E as He}from"../chunks/m9eWh0Cd.js";import{B as Ne}from"../chunks/B0HRJ657.js";var Re=m('<div class="loading-state svelte-1tn2f4x">Loading events...</div>'),Ae=m('<span class="timeline-item__line svelte-1tn2f4x"></span>'),Fe=m('<span class="timeline-item__user svelte-1tn2f4x"> </span>'),Ue=m('<span class="timeline-item__user svelte-1tn2f4x"> </span>'),Je=m('<pre class="timeline-item__detail svelte-1tn2f4x"> </pre>'),je=m('<pre class="timeline-item__detail svelte-1tn2f4x"> </pre>'),Ve=m('<button type="button"><div class="timeline-item__connector svelte-1tn2f4x"><span class="timeline-item__icon svelte-1tn2f4x"> </span> <!></div> <div class="timeline-item__content svelte-1tn2f4x"><div class="timeline-item__header svelte-1tn2f4x"><!> <!> <span class="timeline-item__time svelte-1tn2f4x"> </span></div> <!></div></button>'),qe=m('<div class="timeline svelte-1tn2f4x"></div>'),ze=m('<div class="controls svelte-1tn2f4x"><div class="controls__fields svelte-1tn2f4x"><!> <!> <!></div> <div class="controls__actions svelte-1tn2f4x"><!></div></div> <!>',1);function ot(W,X){Se(X,!0);let I=g(!0),x=g(q([])),S=g("all"),$=g("24h"),w=g(""),D=g(q(new Set));const Y=[{value:"all",label:"All Events"},{value:"signup",label:"Signup"},{value:"signin",label:"Sign In"},{value:"signout",label:"Sign Out"},{value:"password_reset",label:"Password Reset"},{value:"oauth",label:"OAuth"},{value:"custom",label:"Custom"}],Z=[{value:"1h",label:"Last 1 Hour"},{value:"6h",label:"Last 6 Hours"},{value:"24h",label:"Last 24 Hours"},{value:"7d",label:"Last 7 Days"},{value:"30d",label:"Last 30 Days"}];async function H(){c(I,!0);try{let t=`data/analytics/events?range=${e($)}&limit=100`;e(S)!=="all"&&(t+=`&type=${encodeURIComponent(e(S))}`),e(w).trim()&&(t+=`&userId=${encodeURIComponent(e(w).trim())}`);const n=await Be.fetch(t);c(x,n.events??n.data??[],!0)}catch(t){Le(t instanceof Error?t.message:"Failed to load events"),c(x,[],!0)}finally{c(I,!1)}}function ee(){c(D,new Set,!0),H()}function te(t){const n=new Set(e(D));n.has(t)?n.delete(t):n.add(t),c(D,n,!0)}be(()=>{H()});function ae(t){try{return new Date(t).toLocaleString()}catch{return String(t)}}function re(t){try{const n=Date.now()-new Date(t).getTime();return n<6e4?"just now":n<36e5?`${Math.floor(n/6e4)}m ago`:n<864e5?`${Math.floor(n/36e5)}h ago`:`${Math.floor(n/864e5)}d ago`}catch{return""}}function se(t){switch(t){case"signup":return"success";case"signin":return"primary";case"signout":return"default";case"password_reset":return"warning";case"oauth":return"primary";case"error":case"failed":return"danger";default:return"default"}}function ne(t){switch(t){case"signup":return"➕";case"signin":return"→";case"signout":return"←";case"password_reset":return"🔑";case"oauth":return"🔗";default:return"○"}}Pe(W,{title:"Event Timeline",description:"Browse auth and custom events chronologically",get docsHref(){return Me},children:(t,n)=>{var N=ze(),B=De(N),L=o(B),R=o(L);Q(R,{label:"Event Type",get options(){return Y},get value(){return e(S)},set value(s){c(S,s,!0)}});var A=d(R,2);Q(A,{label:"Time Range",get options(){return Z},get value(){return e($)},set value(s){c($,s,!0)}});var le=d(A,2);Ce(le,{label:"User ID",placeholder:"Filter by user...",get value(){return e(w)},set value(s){c(w,s,!0)}}),i(L);var F=d(L,2),ie=o(F);ke(ie,{variant:"primary",onclick:ee,children:(s,f)=>{z();var y=K("Search");u(s,y)},$$slots:{default:!0}}),i(F),i(B);var oe=d(B,2);{var ue=s=>{var f=Re();u(s,f)},ve=s=>{He(s,{title:"No events found",description:"No events match the current filters."})},ce=s=>{var f=qe();$e(f,23,()=>e(x),(y,l)=>y.id??l,(y,l,T)=>{const O=G(()=>e(D).has(e(T)));var b=Ve();let U;var P=o(b),M=o(P),de=o(M,!0);i(M);var me=d(M,2);{var pe=a=>{var r=Ae();u(a,r)};E(me,a=>{e(T)<e(x).length-1&&a(pe)})}i(P);var J=d(P,2),k=o(J),j=o(k);{let a=G(()=>se(e(l).type));Ne(j,{get variant(){return e(a)},children:(r,v)=>{z();var _=K();h(()=>p(_,e(l).type)),u(r,_)},$$slots:{default:!0}})}var V=d(j,2);{var fe=a=>{var r=Fe(),v=o(r,!0);i(r),h(()=>p(v,e(l).userEmail)),u(a,r)},_e=a=>{var r=Ue(),v=o(r,!0);i(r),h(()=>p(v,e(l).userId)),u(a,r)};E(V,a=>{e(l).userEmail?a(fe):e(l).userId&&a(_e,1)})}var C=d(V,2),ge=o(C,!0);i(C),i(k);var he=d(k,2);{var xe=a=>{var r=Je(),v=o(r,!0);i(r),h(_=>p(v,_),[()=>JSON.stringify(e(l).metadata,null,2)]),u(a,r)},ye=a=>{var r=je(),v=o(r,!0);i(r),h(_=>p(v,_),[()=>JSON.stringify(e(l),null,2)]),u(a,r)};E(he,a=>{e(O)&&e(l).metadata?a(xe):e(O)&&a(ye,1)})}i(J),i(b),h((a,r,v)=>{U=Te(b,1,"timeline-item svelte-1tn2f4x",null,U,{"timeline-item--expanded":e(O)}),p(de,a),Oe(C,"title",r),p(ge,v)},[()=>ne(e(l).type),()=>ae(e(l).timestamp),()=>re(e(l).timestamp)]),Ie("click",b,()=>te(e(T))),u(y,b)}),i(f),u(s,f)};E(oe,s=>{e(I)?s(ue):e(x).length===0?s(ve,1):s(ce,!1)})}u(t,N)}}),we()}Ee(["click"]);export{ot as component};
|