@edge-base/server 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/admin-build/_app/immutable/chunks/{DILS_-VJ.js → B3CvhH3c.js} +1 -1
  2. package/admin-build/_app/immutable/chunks/BN_-k-Ck.js +1 -0
  3. package/admin-build/_app/immutable/chunks/{Dt4vL4Df.js → BYL_uBga.js} +1 -1
  4. package/admin-build/_app/immutable/chunks/{C72lTcG0.js → Bcs4KYNp.js} +1 -1
  5. package/admin-build/_app/immutable/chunks/{B8s_s9QY.js → BkZCgsc3.js} +1 -1
  6. package/admin-build/_app/immutable/chunks/{D2j3I1VQ.js → BvoGcDFV.js} +1 -1
  7. package/admin-build/_app/immutable/chunks/{B2TnDKF7.js → CCUxCptE.js} +1 -1
  8. package/admin-build/_app/immutable/chunks/CLHN9MVr.js +1 -0
  9. package/admin-build/_app/immutable/chunks/{J2Gw0SMu.js → CR37B8DX.js} +1 -1
  10. package/admin-build/_app/immutable/chunks/CbfX3ELZ.js +1 -0
  11. package/admin-build/_app/immutable/chunks/CjcrXziO.js +2 -0
  12. package/admin-build/_app/immutable/chunks/CrwlCAM0.js +1 -0
  13. package/admin-build/_app/immutable/chunks/{B0HRJ657.js → DOOPbWwG.js} +1 -1
  14. package/admin-build/_app/immutable/chunks/DQVP4KC-.js +1 -0
  15. package/admin-build/_app/immutable/chunks/{B6MschND.js → DdvsFblq.js} +1 -1
  16. package/admin-build/_app/immutable/chunks/DemDWbs-.js +128 -0
  17. package/admin-build/_app/immutable/chunks/{CaVKAiCe.js → DmDTovpg.js} +1 -1
  18. package/admin-build/_app/immutable/chunks/{B94PilAN.js → Ff90owjx.js} +1 -1
  19. package/admin-build/_app/immutable/chunks/{BqTb6Mxk.js → LL3ulaxa.js} +1 -1
  20. package/admin-build/_app/immutable/chunks/Q3vAxeY-.js +1 -0
  21. package/admin-build/_app/immutable/chunks/SQVAC3Cv.js +1 -0
  22. package/admin-build/_app/immutable/chunks/{Z41NK6i6.js → bguI1TeA.js} +1 -1
  23. package/admin-build/_app/immutable/chunks/{_teD5ji5.js → nlAMTi52.js} +1 -1
  24. package/admin-build/_app/immutable/chunks/{Cdm5zBRA.js → qBm6xof8.js} +1 -1
  25. package/admin-build/_app/immutable/entry/{app.D3flihMw.js → app.CP83Ni80.js} +2 -2
  26. package/admin-build/_app/immutable/entry/start.DY6YakU0.js +1 -0
  27. package/admin-build/_app/immutable/nodes/{0.CdczqZLK.js → 0.DiRq7puO.js} +1 -1
  28. package/admin-build/_app/immutable/nodes/1.BFeyKLGT.js +1 -0
  29. package/admin-build/_app/immutable/nodes/10.zcee7hJx.js +1 -0
  30. package/admin-build/_app/immutable/nodes/11.BW7wLs2Y.js +1 -0
  31. package/admin-build/_app/immutable/nodes/12.CxJRlYSd.js +1 -0
  32. package/admin-build/_app/immutable/nodes/13.pp0F_5hn.js +110 -0
  33. package/admin-build/_app/immutable/nodes/14.t3AfGiGo.js +3 -0
  34. package/admin-build/_app/immutable/nodes/15.B3agc7NX.js +1 -0
  35. package/admin-build/_app/immutable/nodes/{16.BR7WwQrS.js → 16.C4uG2-i8.js} +1 -1
  36. package/admin-build/_app/immutable/nodes/{17.Cm57KKXV.js → 17.CwGxi1Bn.js} +1 -1
  37. package/admin-build/_app/immutable/nodes/18.CrQyN_gU.js +1 -0
  38. package/admin-build/_app/immutable/nodes/19.NEPUOXl7.js +2 -0
  39. package/admin-build/_app/immutable/nodes/{20.DnHeFlTv.js → 20.DGHO8ipr.js} +1 -1
  40. package/admin-build/_app/immutable/nodes/21.UVKBDvp4.js +1 -0
  41. package/admin-build/_app/immutable/nodes/22.Dri5It7a.js +1 -0
  42. package/admin-build/_app/immutable/nodes/{23.CWSGMcKJ.js → 23.BPQP_Zte.js} +2 -2
  43. package/admin-build/_app/immutable/nodes/24.D580FdSS.js +2 -0
  44. package/admin-build/_app/immutable/nodes/25.BMNPOZwF.js +2 -0
  45. package/admin-build/_app/immutable/nodes/26.XcpEcbiz.js +1 -0
  46. package/admin-build/_app/immutable/nodes/27.C1zHHcYv.js +1 -0
  47. package/admin-build/_app/immutable/nodes/28.CuKzzrY8.js +1 -0
  48. package/admin-build/_app/immutable/nodes/29.nLpBMXnM.js +1 -0
  49. package/admin-build/_app/immutable/nodes/{3.B6q-7qr8.js → 3.5G_aseoL.js} +1 -1
  50. package/admin-build/_app/immutable/nodes/30.CQC4nLoU.js +1 -0
  51. package/admin-build/_app/immutable/nodes/31.Bet8kxOK.js +1 -0
  52. package/admin-build/_app/immutable/nodes/4.nmJDYJpC.js +1 -0
  53. package/admin-build/_app/immutable/nodes/5.CnbYLG4E.js +1 -0
  54. package/admin-build/_app/immutable/nodes/6.KA01b-3y.js +1 -0
  55. package/admin-build/_app/immutable/nodes/7.CP9fkn1L.js +1 -0
  56. package/admin-build/_app/immutable/nodes/8.BTzDb---.js +1 -0
  57. package/admin-build/_app/immutable/nodes/9.DkNJg_J6.js +1 -0
  58. package/admin-build/_app/version.json +1 -1
  59. package/admin-build/index.html +7 -7
  60. package/package.json +3 -3
  61. package/src/__tests__/push-handlers.test.ts +1 -1
  62. package/src/__tests__/room-runtime-routing.test.ts +23 -0
  63. package/src/__tests__/route-parser.test.ts +6 -0
  64. package/src/__tests__/schema.test.ts +15 -6
  65. package/src/durable-objects/database-do.ts +7 -1
  66. package/src/durable-objects/room-runtime-base.ts +49 -40
  67. package/src/durable-objects/rooms-do.ts +32 -1
  68. package/src/index.ts +23 -9
  69. package/src/lib/d1-handler.ts +32 -17
  70. package/src/lib/postgres-handler.ts +24 -12
  71. package/src/lib/route-parser.ts +3 -0
  72. package/src/lib/schemas.ts +12 -2
  73. package/src/middleware/captcha-verify.ts +16 -3
  74. package/src/middleware/error-handler.ts +1 -1
  75. package/src/middleware/rules.ts +28 -9
  76. package/src/routes/admin-auth.ts +3 -3
  77. package/src/routes/admin.ts +13 -8
  78. package/src/routes/analytics-api.ts +3 -3
  79. package/src/routes/auth.ts +1 -1
  80. package/src/routes/backup.ts +1 -1
  81. package/src/routes/d1.ts +14 -7
  82. package/src/routes/database-live.ts +13 -6
  83. package/src/routes/kv.ts +21 -10
  84. package/src/routes/oauth.ts +1 -1
  85. package/src/routes/push.ts +119 -77
  86. package/src/routes/room.ts +215 -7
  87. package/src/routes/schema-endpoint.ts +2 -2
  88. package/src/routes/sql.ts +10 -6
  89. package/src/routes/storage.ts +4 -2
  90. package/src/routes/vectorize.ts +16 -4
  91. package/admin-build/_app/immutable/chunks/6oMK_164.js +0 -1
  92. package/admin-build/_app/immutable/chunks/BEW7Ez_g.js +0 -1
  93. package/admin-build/_app/immutable/chunks/BoOooyH6.js +0 -1
  94. package/admin-build/_app/immutable/chunks/BvHnF5tV.js +0 -1
  95. package/admin-build/_app/immutable/chunks/CoI6jjbg.js +0 -2
  96. package/admin-build/_app/immutable/chunks/CrOZMmdF.js +0 -1
  97. package/admin-build/_app/immutable/chunks/Cw6OYcq-.js +0 -1
  98. package/admin-build/_app/immutable/chunks/DPdQ7z0T.js +0 -128
  99. package/admin-build/_app/immutable/chunks/pUxw8jfq.js +0 -1
  100. package/admin-build/_app/immutable/entry/start.Cl6sLxnz.js +0 -1
  101. package/admin-build/_app/immutable/nodes/1.DxcSsEqS.js +0 -1
  102. package/admin-build/_app/immutable/nodes/10.DuAd4aIm.js +0 -1
  103. package/admin-build/_app/immutable/nodes/11.0jgHQL92.js +0 -1
  104. package/admin-build/_app/immutable/nodes/12.CKNPqmyy.js +0 -1
  105. package/admin-build/_app/immutable/nodes/13.B1p2POXS.js +0 -110
  106. package/admin-build/_app/immutable/nodes/14.Bb-REBND.js +0 -3
  107. package/admin-build/_app/immutable/nodes/15.1uBFCX0X.js +0 -1
  108. package/admin-build/_app/immutable/nodes/18.CoiwfAuQ.js +0 -1
  109. package/admin-build/_app/immutable/nodes/19.B8ZdLlXj.js +0 -2
  110. package/admin-build/_app/immutable/nodes/21.CJFaf0Ia.js +0 -1
  111. package/admin-build/_app/immutable/nodes/22.CItETFzy.js +0 -1
  112. package/admin-build/_app/immutable/nodes/24.CWbEqNMB.js +0 -2
  113. package/admin-build/_app/immutable/nodes/25.DRkLEhKi.js +0 -2
  114. package/admin-build/_app/immutable/nodes/26.BRxO8AYH.js +0 -1
  115. package/admin-build/_app/immutable/nodes/27.BLs-nVHz.js +0 -1
  116. package/admin-build/_app/immutable/nodes/28.G79qkdBK.js +0 -1
  117. package/admin-build/_app/immutable/nodes/29.BOcI6g0N.js +0 -1
  118. package/admin-build/_app/immutable/nodes/30.DAIC7dKd.js +0 -1
  119. package/admin-build/_app/immutable/nodes/31.pl0XXjXF.js +0 -1
  120. package/admin-build/_app/immutable/nodes/4.DOdvVlZj.js +0 -1
  121. package/admin-build/_app/immutable/nodes/5.BW_zlgye.js +0 -1
  122. package/admin-build/_app/immutable/nodes/6.Dxy1CAI2.js +0 -1
  123. package/admin-build/_app/immutable/nodes/7.BG98w_o7.js +0 -1
  124. package/admin-build/_app/immutable/nodes/8.DoG5R2rG.js +0 -1
  125. package/admin-build/_app/immutable/nodes/9.Dmxf6zAC.js +0 -1
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{o as pt}from"../chunks/Bn2NtlTj.js";import{p as Ge,a as He,c as r,b as t,g as e,s as l,ae as N,r as a,t as le,f as fe,d,M as Re,w as mt,u as E}from"../chunks/BdTBlfLy.js";import{e as bt,s as W,d as gt,a as _e}from"../chunks/DtZk82gG.js";import{i as ne}from"../chunks/Y22E1hJM.js";import{a as be,b as Ze,t as Ae,e as qe,i as $t}from"../chunks/CrwlCAM0.js";import{a as i,t as X,f as $}from"../chunks/DEELgv7K.js";import{d as Je,r as Le,f as Ne,a as me,s as zt}from"../chunks/CjcrXziO.js";import{g as yt}from"../chunks/SQVAC3Cv.js";import{b as Oe}from"../chunks/Q3vAxeY-.js";import{P as xt}from"../chunks/BkZCgsc3.js";import{c as wt}from"../chunks/Q2nPFxS6.js";import{B as Y}from"../chunks/Bcs4KYNp.js";import{I as ge}from"../chunks/nlAMTi52.js";import{B as Ve}from"../chunks/DOOPbWwG.js";import{C as St}from"../chunks/B3CvhH3c.js";import{E as kt}from"../chunks/m9eWh0Cd.js";import{p as je}from"../chunks/F9_4wRrd.js";import{M as Pt}from"../chunks/BYL_uBga.js";import{S as Ce}from"../chunks/Ff90owjx.js";import{S as re}from"../chunks/CR37B8DX.js";var Ut=$("<!> <!>",1),At=$('<p class="form__error svelte-17zxii7"> </p>'),Ct=$('<form class="form svelte-17zxii7"><!> <!> <!> <!> <!> <button class="form__submit svelte-17zxii7" type="submit" aria-hidden="true" tabindex="-1">Create User</button></form>');function Dt($e,oe){Ge(oe,!0);let O=je(oe,"open",15,!1),ze=je(oe,"onCreated",3,()=>{}),k=d(""),P=d(""),U=d(""),T=d("user"),M=d(!1),b=d("");const ie=[{value:"user",label:"User"},{value:"admin",label:"Admin"}];function V(){t(k,""),t(P,""),t(U,""),t(T,"user"),t(b,"")}async function A(){if(t(b,""),!e(k).trim()){t(b,"Email is required.");return}if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e(k).trim())){t(b,"Invalid email format.");return}if(!e(P)){t(b,"Password is required.");return}if(e(P).length<8){t(b,"Password must be at least 8 characters.");return}t(M,!0);try{await be.fetch("data/users",{method:"POST",body:{email:e(k).trim(),password:e(P),displayName:e(U).trim()||void 0,role:e(T)}}),Ze("User created successfully"),O(!1),V(),ze()()}catch(C){t(b,Je(C,"Failed to create user."),!0),Ae(e(b))}finally{t(M,!1)}}Pt($e,{title:"Create User",onclose:V,get open(){return O()},set open(Z){O(Z)},footer:Z=>{var de=Ut(),h=fe(de);Y(h,{variant:"secondary",onclick:()=>{O(!1),V()},children:(u,B)=>{N();var I=X("Cancel");i(u,I)},$$slots:{default:!0}});var n=l(h,2);Y(n,{variant:"primary",onclick:A,get loading(){return e(M)},children:(u,B)=>{N();var I=X("Create User");i(u,I)},$$slots:{default:!0}}),i(Z,de)},children:(Z,de)=>{var h=Ct(),n=r(h);ge(n,{label:"Email",type:"email",placeholder:"user@example.com",required:!0,get value(){return e(k)},set value(p){t(k,p,!0)}});var u=l(n,2);ge(u,{label:"Password",type:"password",placeholder:"Minimum 8 characters",required:!0,get value(){return e(P)},set value(p){t(P,p,!0)}});var B=l(u,2);ge(B,{label:"Display Name",placeholder:"(optional)",get value(){return e(U)},set value(p){t(U,p,!0)}});var I=l(B,2);Ce(I,{label:"Role",get options(){return ie},get value(){return e(T)},set value(p){t(T,p,!0)}});var he=l(I,2);{var ye=p=>{var ue=At(),xe=r(ue,!0);a(ue),le(()=>W(xe,e(b))),i(p,ue)};ne(he,p=>{e(b)&&p(ye)})}N(2),a(h),bt("submit",h,p=>{p.preventDefault(),A()}),i(Z,h)},$$slots:{footer:!0,default:!0}}),He()}var Et=$("<!> <a><!></a>",1),Tt=$('<div class="bulk-bar svelte-1s728sz"><span class="bulk-bar__count svelte-1s728sz"> </span> <div class="bulk-bar__actions svelte-1s728sz"><!> <!></div> <button class="bulk-bar__clear svelte-1s728sz">Clear</button></div>'),Mt=$('<tr class="table__row svelte-1s728sz"><td class="table__td svelte-1s728sz" style="width:40px"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td></tr>'),Bt=$('<div class="table-wrapper svelte-1s728sz"><table class="table svelte-1s728sz"><thead><tr><th class="table__th table__th--checkbox svelte-1s728sz" style="width:40px"></th><th class="table__th svelte-1s728sz">ID</th><th class="table__th svelte-1s728sz">Email</th><th class="table__th svelte-1s728sz">Status</th><th class="table__th svelte-1s728sz">Role</th><th class="table__th svelte-1s728sz">Created</th></tr></thead><tbody></tbody></table></div>'),It=$('<tr role="button"><td class="table__td table__td--checkbox svelte-1s728sz"><input type="checkbox" class="svelte-1s728sz"/></td><td class="table__td table__td--mono svelte-1s728sz"> </td><td class="table__td svelte-1s728sz"> </td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td table__td--secondary svelte-1s728sz"> </td><td class="table__td table__td--secondary svelte-1s728sz"> </td></tr>'),Ft=$('<span class="pagination__info svelte-1s728sz"> </span>'),Rt=$('<div class="pagination svelte-1s728sz"><!> <!></div>'),qt=$('<div class="table-wrapper svelte-1s728sz"><table class="table svelte-1s728sz"><thead><tr><th class="table__th table__th--checkbox svelte-1s728sz"><input type="checkbox" aria-label="Select all users" class="svelte-1s728sz"/></th><th class="table__th svelte-1s728sz">ID</th><th class="table__th svelte-1s728sz">Email</th><th class="table__th svelte-1s728sz">Status</th><th class="table__th svelte-1s728sz">Role</th><th class="table__th svelte-1s728sz">Created</th><th class="table__th svelte-1s728sz">Last Sign-in</th></tr></thead><tbody></tbody></table></div> <!>',1),Lt=$('<div class="toolbar svelte-1s728sz"><div class="toolbar__search svelte-1s728sz"><!></div> <div class="toolbar__filters svelte-1s728sz"><!> <!></div></div> <!> <!>',1),Nt=$("<!> <!> <!>",1);function da($e,oe){Ge(oe,!0);let O=d(!1);const ze=20;let k=d(!0),P=d(Re([])),U=d(null),T=d(null),M=d(""),b=null,ie=d(!1),V=0,A=d("all"),C=d("all");const Z=[{value:"all",label:"All Status"},{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"banned",label:"Banned"},{value:"disabled",label:"Disabled"}],de=[{value:"all",label:"All Roles"},{value:"user",label:"User"},{value:"admin",label:"Admin"}],h=E(()=>e(P).filter(s=>!(e(A)!=="all"&&s.status!==e(A)||e(C)!=="all"&&s.role!==e(C))));let n=d(Re(new Set)),u=d(null),B=d(!1),I=d("all"),he=d("all");mt(()=>{(e(A)!==e(I)||e(C)!==e(he))&&(t(n,new Set,!0),t(I,e(A),!0),t(he,e(C),!0))});function ye(s){const _=new Set(e(n));_.has(s)?_.delete(s):_.add(s),t(n,_,!0)}function p(){e(n).size===e(h).length?t(n,new Set,!0):t(n,new Set(e(h).map(s=>s.id)),!0)}function ue(){t(n,new Set,!0)}function xe(){return e(u)?`${e(u)==="delete"?"Delete":"Ban"} ${e(n).size} user${e(n).size!==1?"s":""}?`:"Confirm"}function Ke(){return e(u)?e(u)==="delete"?"This will permanently delete the selected users and all associated data. This action cannot be undone.":"This will ban the selected users, preventing them from signing in.":"Are you sure?"}async function Qe(){const s=e(u);if(!s||e(n).size===0)return;t(u,null),t(B,!0);const _=[...e(n)],z=await Promise.allSettled(_.map(async y=>{s==="delete"?await be.fetch(`data/users/${y}`,{method:"DELETE"}):s==="ban"&&await be.fetch(`data/users/${y}`,{method:"PUT",body:{status:"banned"}})})),f=z.filter(y=>y.status==="fulfilled").length,v=z.filter(y=>y.status==="rejected").length;v===0?Ze(`${s==="delete"?"Deleted":"Banned"} ${f} user${f!==1?"s":""}`):Ae(`${f} succeeded, ${v} failed`),t(n,new Set,!0),t(B,!1),ce()}async function ce(s=0,_=!1){const z=++V;_?t(ie,!0):t(k,!0);try{let f=`data/users?limit=${ze}&cursor=${s}`;e(M).trim()&&(f+=`&email=${encodeURIComponent(e(M).trim())}`);const v=await be.fetch(f);if(z!==V)return;t(P,_?[...e(P),...v.users]:v.users,!0),t(U,v.cursor,!0),v.total!=null&&t(T,v.total,!0)}catch(f){if(z!==V)return;Ae(Je(f,"Failed to load users."))}finally{z===V&&(t(k,!1),t(ie,!1))}}pt(()=>{ce()});function We(){t(n,new Set,!0),b&&clearTimeout(b),b=setTimeout(()=>{ce()},300)}function Xe(){e(U)&&ce(e(U),!0)}function De(s){yt(`${Oe}/auth/${s}`)}function Ye(s){return s.length<=12?s:s.slice(0,8)+"..."}function et(s){switch(s){case"active":return"success";case"suspended":return"warning";case"banned":return"danger";case"disabled":return"danger";default:return"default"}}function tt(s){return s==="admin"?"primary":"default"}function Ee(s){return s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}var Te=Nt(),Me=fe(Te);xt(Me,{title:"Users",description:"Manage user accounts",get docsHref(){return wt},actions:_=>{var z=Et(),f=fe(z);Y(f,{variant:"primary",size:"sm",onclick:()=>t(O,!0),children:(ve,pe)=>{N();var ee=X("+ Create User");i(ve,ee)},$$slots:{default:!0}});var v=l(f,2),y=r(v);Y(y,{variant:"secondary",size:"sm",children:(ve,pe)=>{N();var ee=X("Auth Settings");i(ve,ee)},$$slots:{default:!0}}),a(v),le(()=>me(v,"href",`${Oe??""}/auth/settings`)),i(_,z)},children:(_,z)=>{var f=Lt(),v=fe(f),y=r(v),ve=r(y);ge(ve,{placeholder:"Search by email...",oninput:We,get value(){return e(M)},set value(c){t(M,c,!0)}}),a(y);var pe=l(y,2),ee=r(pe);Ce(ee,{get options(){return Z},get value(){return e(A)},set value(c){t(A,c,!0)}});var st=l(ee,2);Ce(st,{get options(){return de},get value(){return e(C)},set value(c){t(C,c,!0)}}),a(pe),a(v);var Ie=l(v,2);{var rt=c=>{var x=Tt(),D=r(x),J=r(D);a(D);var F=l(D,2),te=r(F);Y(te,{variant:"secondary",size:"sm",onclick:()=>t(u,"ban"),get disabled(){return e(B)},children:(G,K)=>{N();var Q=X("Ban Selected");i(G,Q)},$$slots:{default:!0}});var j=l(te,2);Y(j,{variant:"danger",size:"sm",onclick:()=>t(u,"delete"),get disabled(){return e(B)},children:(G,K)=>{N();var Q=X("Delete Selected");i(G,Q)},$$slots:{default:!0}}),a(F);var R=l(F,2);a(x),le(()=>W(J,`${e(n).size??""} selected`)),_e("click",R,ue),i(c,x)};ne(Ie,c=>{e(n).size>0&&c(rt)})}var lt=l(Ie,2);{var nt=c=>{var x=Bt(),D=r(x),J=l(r(D));qe(J,20,()=>Array(8),$t,(F,te)=>{var j=Mt(),R=r(j),G=r(R);re(G,{width:"16px",height:"16px"}),a(R);var K=l(R),Q=r(K);re(Q,{width:"70px",height:"14px"}),a(K);var w=l(K),o=r(w);re(o,{width:"160px",height:"14px"}),a(w);var g=l(w),ae=r(g);re(ae,{width:"60px",height:"20px"}),a(g);var q=l(g),H=r(q);re(H,{width:"50px",height:"14px"}),a(q);var m=l(q),L=r(m);re(L,{width:"80px",height:"14px"}),a(m),a(j),i(F,j)}),a(J),a(D),a(x),i(c,x)},ot=c=>{{let x=E(()=>e(M)||e(A)!=="all"||e(C)!=="all"?"Try adjusting your search or filters.":"No users have been created yet.");kt(c,{title:"No users found",get description(){return e(x)}})}},it=c=>{var x=qt(),D=fe(x),J=r(D),F=r(J),te=r(F),j=r(te),R=r(j);Le(R),a(j),N(6),a(te),a(F);var G=l(F);qe(G,21,()=>e(h),w=>w.id,(w,o)=>{var g=It();let ae;me(g,"tabindex",0);var q=r(g),H=r(q);Le(H),a(q);var m=l(q),L=r(m,!0);a(m);var se=l(m),we=r(se,!0);a(se);var Se=l(se),dt=r(Se);{let S=E(()=>et(e(o).status||"active")),Ue=E(()=>e(o).status||"active");Ve(dt,{get variant(){return e(S)},get text(){return e(Ue)}})}a(Se);var ke=l(Se),ut=r(ke);{let S=E(()=>tt(e(o).role));Ve(ut,{get variant(){return e(S)},get text(){return e(o).role}})}a(ke);var Pe=l(ke),ct=r(Pe,!0);a(Pe);var Fe=l(Pe),vt=r(Fe,!0);a(Fe),a(g),le((S,Ue,_t,ft,ht)=>{ae=zt(g,1,"table__row table__row--clickable svelte-1s728sz",null,ae,S),Ne(H,Ue),me(H,"aria-label",`Select user ${e(o).email??""}`),me(m,"title",e(o).id),W(L,_t),W(we,e(o).email),W(ct,ft),W(vt,ht)},[()=>({"table__row--selected":e(n).has(e(o).id)}),()=>e(n).has(e(o).id),()=>Ye(e(o).id),()=>Ee(e(o).createdAt),()=>Ee(e(o).lastSignedInAt)]),_e("click",g,()=>De(e(o).id)),_e("keydown",g,S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),De(e(o).id))}),_e("change",H,S=>{S.stopPropagation(),ye(e(o).id)}),i(w,g)}),a(G),a(J),a(D);var K=l(D,2);{var Q=w=>{var o=Rt(),g=r(o);{var ae=m=>{var L=Ft(),se=r(L);a(L),le(()=>W(se,`Showing ${e(h).length??""} of ${e(T)??""} users`)),i(m,L)};ne(g,m=>{e(T)!=null&&m(ae)})}var q=l(g,2);{var H=m=>{Y(m,{variant:"secondary",onclick:Xe,get loading(){return e(ie)},children:(L,se)=>{N();var we=X("Load More");i(L,we)},$$slots:{default:!0}})};ne(q,m=>{e(U)&&m(H)})}a(o),i(w,o)};ne(K,w=>{(e(U)||e(T)!=null)&&w(Q)})}le(()=>Ne(R,e(h).length>0&&e(n).size===e(h).length)),_e("change",R,p),i(c,x)};ne(lt,c=>{e(k)?c(nt):e(h).length===0?c(ot,1):c(it,!1)})}i(_,f)}});var Be=l(Me,2);{let s=E(()=>e(u)!==null),_=E(xe),z=E(Ke),f=E(()=>e(u)==="delete"?"Delete":"Ban"),v=E(()=>e(u)==="delete"?"danger":"primary");St(Be,{get open(){return e(s)},get title(){return e(_)},get message(){return e(z)},get confirmLabel(){return e(f)},get confirmVariant(){return e(v)},oncancel:()=>t(u,null),onconfirm:Qe})}var at=l(Be,2);Dt(at,{onCreated:()=>ce(),get open(){return e(O)},set open(s){t(O,s,!0)}}),i($e,Te),He()}gt(["click","change","keydown"]);export{da as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{o as $a}from"../chunks/Bn2NtlTj.js";import{p as wa,d as v,M as Sa,f as Me,a as Da,b as l,g as e,s as t,u as g,c as s,ae as h,r as a,t as V,af as ka}from"../chunks/BdTBlfLy.js";import{s as A}from"../chunks/DtZk82gG.js";import{i as Te}from"../chunks/Y22E1hJM.js";import{a as x,b as P,t as U,e as Aa}from"../chunks/CrwlCAM0.js";import{a as o,f as p,c as Pa,t as b}from"../chunks/DEELgv7K.js";import{d as E,a as Le}from"../chunks/CjcrXziO.js";import{s as Ua,a as Ea}from"../chunks/Cp8V0Xy2.js";import{p as Ra}from"../chunks/DdvsFblq.js";import{g as Fa}from"../chunks/SQVAC3Cv.js";import{b as ne}from"../chunks/Q3vAxeY-.js";import{P as Ma}from"../chunks/BkZCgsc3.js";import{c as Ta}from"../chunks/Q2nPFxS6.js";import{B as y}from"../chunks/Bcs4KYNp.js";import{B as Oe}from"../chunks/DOOPbWwG.js";import{S as Be}from"../chunks/Ff90owjx.js";import{C as oe}from"../chunks/B3CvhH3c.js";var La=p("<a><!></a>"),Oa=p('<div class="loading-state svelte-1579lxm"><span class="spinner svelte-1579lxm"></span> Loading user...</div>'),Ba=p('<div class="error-state svelte-1579lxm"><p>User not found.</p> <a><!></a></div>'),Ia=p('<p class="no-data svelte-1579lxm">No profile data available.</p>'),za=p('<div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm"> </span> <span class="info-value svelte-1579lxm"> </span></div>'),Ca=p('<div class="info-grid svelte-1579lxm"></div>'),Va=p(`<div class="user-layout svelte-1579lxm"><div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Account Info</h3></div> <div class="card__body svelte-1579lxm"><div class="info-grid svelte-1579lxm"><div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">ID</span> <span class="info-value info-value--mono svelte-1579lxm"> </span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Email</span> <span class="info-value svelte-1579lxm"> </span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Status</span> <span class="info-value svelte-1579lxm"><!></span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Role</span> <span class="info-value svelte-1579lxm"><!></span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Created</span> <span class="info-value svelte-1579lxm"> </span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Last Sign-in</span> <span class="info-value svelte-1579lxm"> </span></div></div></div></div> <div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Manage User</h3></div> <div class="card__body svelte-1579lxm"><div class="form-fields svelte-1579lxm"><!> <!></div> <div class="card__actions svelte-1579lxm"><!></div></div></div> <div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Profile</h3></div> <div class="card__body svelte-1579lxm"><!></div></div> <div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Actions</h3></div> <div class="card__body svelte-1579lxm"><div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Send Password Reset Email</p> <p class="danger-desc svelte-1579lxm">Send a password reset link to the user's email address.</p></div> <!></div></div></div> <div class="card card--danger svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title card__title--danger svelte-1579lxm">Danger Zone</h3></div> <div class="card__body svelte-1579lxm"><div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Revoke All Sessions</p> <p class="danger-desc svelte-1579lxm">Force sign-out from all devices. The user will need to sign in again.</p></div> <!></div> <hr class="danger-divider svelte-1579lxm"/> <div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Disable MFA</p> <p class="danger-desc svelte-1579lxm">Remove all multi-factor authentication methods. The user can re-enroll later.</p></div> <!></div> <hr class="danger-divider svelte-1579lxm"/> <div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Delete User</p> <p class="danger-desc svelte-1579lxm">Permanently delete this user and all associated data. This cannot be undone.</p></div> <!></div></div></div></div>`),ja=p("<!> <!> <!> <!>",1);function ns(Ie,ze){wa(ze,!0);const Ce=()=>Ea(Ra,"$page",Ve),[Ve,je]=Ua();let f=g(()=>Ce().params.userId??""),R=v(!1),n=v(null),F=v(Sa({})),$=v(""),w=v(""),j=v(!1),M=v(!1),N=v(!1),T=v(!1),H=v(!1),L=v(!1),J=v(!1),Z=v(!1);const Ne=[{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"banned",label:"Banned"},{value:"disabled",label:"Disabled"}],He=[{value:"user",label:"User"},{value:"admin",label:"Admin"}];let Je=g(()=>e(n)!==null&&(e($)!==e(n).status||e(w)!==e(n).role));async function Ze(){l(n,null),l(R,!1),l(F,{},!0);try{const r=await x.fetch(`data/users/${e(f)}`);l(n,r.user,!0),l($,r.user.status??"active",!0),l(w,r.user.role??"user",!0);try{const S=await x.fetch(`data/users/${e(f)}/profile`),{id:D,...k}=S;l(F,k,!0)}catch{l(F,{},!0)}}catch{l(R,!0)}}$a(()=>{Ze()});async function qe(){l(j,!0);try{await x.fetch(`data/users/${e(f)}`,{method:"PUT",body:{status:e($),role:e(w)}}),e(n)&&l(n,{...e(n),status:e($),role:e(w)},!0),P("User updated successfully")}catch(r){U(E(r,"Failed to update the user."))}finally{l(j,!1)}}async function Ge(){l(M,!1),l(N,!0);try{await x.fetch(`data/users/${e(f)}/sessions`,{method:"DELETE"}),P("All sessions revoked")}catch(r){U(E(r,"Failed to revoke the user sessions."))}finally{l(N,!1)}}function Ke(r){switch(r){case"active":return"success";case"suspended":return"warning";case"banned":return"danger";case"disabled":return"danger";default:return"default"}}function de(r){return r?new Date(r).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}async function Qe(){l(T,!1),l(H,!0);try{await x.fetch(`data/users/${e(f)}`,{method:"DELETE"}),P("User deleted"),Fa(`${ne}/auth`)}catch(r){U(E(r,"Failed to delete the user."))}finally{l(H,!1)}}async function We(){l(Z,!0);try{await x.fetch(`data/users/${e(f)}/send-password-reset`,{method:"POST"}),P("Password reset email sent")}catch(r){U(E(r,"Failed to send the password reset email."))}finally{l(Z,!1)}}async function Xe(){l(L,!1),l(J,!0);try{await x.fetch(`data/users/${e(f)}/mfa`,{method:"DELETE"}),P("MFA disabled")}catch(r){U(E(r,"Failed to disable MFA."))}finally{l(J,!1)}}function Ye(r){return r==null?"-":typeof r=="object"?JSON.stringify(r):String(r)}let ve=g(()=>Object.entries(e(F)));var ce=ja(),ue=Me(ce);Ma(ue,{title:"User Detail",get description(){return`User ID: ${e(f)??""}`},get docsHref(){return Ta},actions:S=>{var D=La(),k=s(D);y(k,{variant:"ghost",size:"sm",children:(q,pe)=>{h();var G=b("Back to Users");o(q,G)},$$slots:{default:!0}}),a(D),V(()=>Le(D,"href",`${ne??""}/auth`)),o(S,D)},children:(S,D)=>{var k=Pa(),q=Me(k);{var pe=u=>{var m=Oa();o(u,m)},G=u=>{var m=Ba(),_=t(s(m),2),O=s(_);y(O,{variant:"secondary",children:(B,I)=>{h();var z=b("Back to Users");o(B,z)},$$slots:{default:!0}}),a(_),a(m),V(()=>Le(_,"href",`${ne??""}/auth`)),o(u,m)},aa=u=>{var m=Va(),_=s(m),O=t(s(_),2),B=s(O),I=s(B),z=t(s(I),2),sa=s(z,!0);a(z),a(I);var K=t(I,2),_e=t(s(K),2),ta=s(_e,!0);a(_e),a(K);var Q=t(K,2),ge=t(s(Q),2),ra=s(ge);{let i=g(()=>Ke(e(n).status));Oe(ra,{get variant(){return e(i)},get text(){return e(n).status}})}a(ge),a(Q);var W=t(Q,2),he=t(s(W),2),la=s(he);{let i=g(()=>e(n).role==="admin"?"primary":"default");Oe(la,{get variant(){return e(i)},get text(){return e(n).role}})}a(he),a(W);var X=t(W,2),xe=t(s(X),2),ia=s(xe,!0);a(xe),a(X);var be=t(X,2),ye=t(s(be),2),na=s(ye,!0);a(ye),a(be),a(B),a(O),a(_);var Y=t(_,2),$e=t(s(Y),2),ee=s($e),we=s(ee);Be(we,{label:"Status",get options(){return Ne},get value(){return e($)},set value(i){l($,i,!0)}});var oa=t(we,2);Be(oa,{label:"Role",get options(){return He},get value(){return e(w)},set value(i){l(w,i,!0)}}),a(ee);var Se=t(ee,2),da=s(Se);{let i=g(()=>!e(Je));y(da,{variant:"primary",onclick:qe,get disabled(){return e(i)},get loading(){return e(j)},children:(d,c)=>{h();var C=b("Save Changes");o(d,C)},$$slots:{default:!0}})}a(Se),a($e),a(Y);var ae=t(Y,2),De=t(s(ae),2),va=s(De);{var ca=i=>{var d=Ia();o(i,d)},ua=i=>{var d=Ca();Aa(d,21,()=>e(ve),([c,C])=>c,(c,C)=>{var Re=g(()=>ka(e(C),2));let ga=()=>e(Re)[0],ha=()=>e(Re)[1];var le=za(),ie=s(le),xa=s(ie,!0);a(ie);var Fe=t(ie,2),ba=s(Fe,!0);a(Fe),a(le),V(ya=>{A(xa,ga()),A(ba,ya)},[()=>Ye(ha())]),o(c,le)}),a(d),o(i,d)};Te(va,i=>{e(ve).length===0?i(ca):i(ua,!1)})}a(De),a(ae);var se=t(ae,2),ke=t(s(se),2),Ae=s(ke),ma=t(s(Ae),2);y(ma,{variant:"secondary",size:"sm",onclick:We,get loading(){return e(Z)},children:(i,d)=>{h();var c=b("Send Reset Email");o(i,c)},$$slots:{default:!0}}),a(Ae),a(ke),a(se);var Pe=t(se,2),Ue=t(s(Pe),2),te=s(Ue),fa=t(s(te),2);y(fa,{variant:"danger",size:"sm",onclick:()=>l(M,!0),get loading(){return e(N)},children:(i,d)=>{h();var c=b("Revoke Sessions");o(i,c)},$$slots:{default:!0}}),a(te);var re=t(te,4),pa=t(s(re),2);y(pa,{variant:"danger",size:"sm",onclick:()=>l(L,!0),get loading(){return e(J)},children:(i,d)=>{h();var c=b("Disable MFA");o(i,c)},$$slots:{default:!0}}),a(re);var Ee=t(re,4),_a=t(s(Ee),2);y(_a,{variant:"danger",size:"sm",onclick:()=>l(T,!0),get loading(){return e(H)},children:(i,d)=>{h();var c=b("Delete User");o(i,c)},$$slots:{default:!0}}),a(Ee),a(Ue),a(Pe),a(m),V((i,d)=>{A(sa,e(n).id),A(ta,e(n).email),A(ia,i),A(na,d)},[()=>de(e(n).createdAt),()=>de(e(n).lastSignedInAt)]),o(u,m)};Te(q,u=>{!e(n)&&!e(R)?u(pe):e(R)?u(G,1):e(n)&&u(aa,2)})}o(S,k)}});var me=t(ue,2);oe(me,{title:"Revoke All Sessions",message:"Are you sure you want to revoke all sessions for this user? They will be signed out from all devices immediately.",confirmLabel:"Revoke",confirmVariant:"danger",onconfirm:Ge,get open(){return e(M)},set open(r){l(M,r,!0)}});var fe=t(me,2);oe(fe,{title:"Disable MFA",message:"Are you sure you want to disable all multi-factor authentication methods for this user?",confirmLabel:"Disable MFA",confirmVariant:"danger",onconfirm:Xe,get open(){return e(L)},set open(r){l(L,r,!0)}});var ea=t(fe,2);oe(ea,{title:"Delete User",message:"Are you sure you want to permanently delete this user? All associated data (auth indexes, sessions, push tokens) will be removed. This action cannot be undone.",confirmLabel:"Delete User",confirmVariant:"danger",onconfirm:Qe,get open(){return e(T)},set open(r){l(T,r,!0)}}),o(Ie,ce),Da(),je()}export{ns as component};