@edge-base/server 0.1.5 → 0.2.1
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/19.4Si2ZFC_.css +1 -0
- package/admin-build/_app/immutable/assets/{3.Dg81Pgmd.css → 3.BtHYobTg.css} +1 -1
- package/admin-build/_app/immutable/assets/SqlEditor.Bbp1RIk0.css +1 -0
- package/admin-build/_app/immutable/assets/TableSqlTab.yeNZfhgG.css +1 -0
- package/admin-build/_app/immutable/chunks/B0QyxC2M.js +128 -0
- package/admin-build/_app/immutable/chunks/{Bsp3uE8m.js → BCKr7yKd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CWHVkYdi.js → BFs_qStz.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CKIubXVC.js → BTJcQFEp.js} +1 -1
- package/admin-build/_app/immutable/chunks/BY07qVPA.js +1 -0
- package/admin-build/_app/immutable/chunks/{Cn5ZQY9O.js → BcIUK2sk.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CKFIU4S8.js → BsFiK_FJ.js} +1 -1
- package/admin-build/_app/immutable/chunks/{COYZ6F_d.js → CSGrwS7E.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DLc6L4xD.js → CqUxCvs_.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DLTo2HQr.js → D-x55wdW.js} +1 -1
- package/admin-build/_app/immutable/chunks/D755Tqat.js +1 -0
- package/admin-build/_app/immutable/chunks/{Jxx0jGlP.js → DjOEv9M9.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DLRcaFHo.js → DnLqc9L1.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BnlxEqP4.js → Dqk2TGNU.js} +1 -1
- package/admin-build/_app/immutable/chunks/{7FYfV8UU.js → k0CIJkw4.js} +1 -1
- package/admin-build/_app/immutable/chunks/lSpxLU5p.js +2 -0
- package/admin-build/_app/immutable/chunks/m9QZTyVV.js +1 -0
- package/admin-build/_app/immutable/entry/{app.C4kLStKR.js → app.BTsq3_xq.js} +2 -2
- package/admin-build/_app/immutable/entry/start.zXCirpgY.js +1 -0
- package/admin-build/_app/immutable/nodes/0.BZ00WDYH.js +1 -0
- package/admin-build/_app/immutable/nodes/{1.s1kW8gyv.js → 1.RzSJ3yyr.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.Cr9ml-GD.js → 10.D-rsiquF.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.DXTOyMEn.js → 11.l7-bgtFD.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.DzhitECA.js → 12.Dkq0H7B5.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.U_1VNA5x.js → 13.DtK_4oRz.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.x0SzmV0P.js → 14.BKo7-AMx.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.BJI1Z1hk.js → 15.CQAj_6lq.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.CUvRFqLW.js → 16.XVIG-Ffr.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.sDFD-Vbm.js → 17.g6raZLCM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.DdoTnAXc.js → 18.IQz6a3T6.js} +1 -1
- package/admin-build/_app/immutable/nodes/19.CAAZ8i8h.js +2 -0
- package/admin-build/_app/immutable/nodes/{20.fxudyPKp.js → 20.BPcX3KPj.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.DoPabrY_.js +1 -0
- package/admin-build/_app/immutable/nodes/{22.CY6ICoyn.js → 22.Br5AG_5Z.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.DmEaHsZw.js → 23.KjbrdXoE.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.Cqerdln2.js → 24.C3n2-hgw.js} +1 -1
- package/admin-build/_app/immutable/nodes/25.SFDSBzHd.js +2 -0
- package/admin-build/_app/immutable/nodes/26.D95vui6E.js +1 -0
- package/admin-build/_app/immutable/nodes/{27.DAeKhnG9.js → 27.FgLgdjwB.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.D_lJZpNR.js → 28.B9sYYm1F.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.Dx7iQCpT.js → 29.DyqZ_wbN.js} +1 -1
- package/admin-build/_app/immutable/nodes/3.Bzo2yVIO.js +2 -0
- package/admin-build/_app/immutable/nodes/{30.DcO-bjQZ.js → 30.c1CiNwiS.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.DesWAzIF.js → 31.CXty66Vh.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.B2rm4_4a.js → 4.BgQaXZ27.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.4Os1aYeW.js → 5.BuJrHvxH.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.BzR--5Dj.js → 6.CkBBC94k.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.QDC-47H1.js → 7.D2YBvNFM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.DDPWEc96.js → 8.D8qQWo_z.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.fyfVIJPa.js → 9.BLDLX5hV.js} +1 -1
- package/admin-build/_app/version.json +1 -1
- package/admin-build/index.html +7 -7
- package/openapi.json +6710 -5866
- package/package.json +2 -2
- package/src/__tests__/functions-route.test.ts +153 -0
- package/src/__tests__/internal-request.test.ts +5 -5
- package/src/__tests__/meta-export-coverage.test.ts +3 -2
- package/src/__tests__/meta-route-registration.test.ts +3 -2
- package/src/__tests__/openapi-coverage.test.ts +5 -1
- package/src/__tests__/pagination.test.ts +12 -8
- package/src/__tests__/postgres-dialect.test.ts +2 -2
- package/src/__tests__/query.test.ts +7 -7
- package/src/__tests__/rate-limit.test.ts +0 -1
- package/src/__tests__/room-handler-context.test.ts +31 -0
- package/src/__tests__/room-runtime-routing.test.ts +48 -0
- package/src/__tests__/runtime-surface-accounting.test.ts +5 -4
- package/src/__tests__/smoke-skip-report.test.ts +3 -2
- package/src/durable-objects/database-do.ts +9 -4
- package/src/durable-objects/database-live-do.ts +22 -10
- package/src/durable-objects/logs-do.ts +2 -2
- package/src/durable-objects/rooms-do.ts +202 -0
- package/src/lib/auth-d1-service.ts +1 -1
- package/src/lib/auth-d1.ts +10 -0
- package/src/lib/d1-handler.ts +23 -4
- package/src/lib/internal-request.ts +5 -8
- package/src/lib/openapi.ts +1 -0
- package/src/lib/pagination.ts +3 -3
- package/src/lib/postgres-handler.ts +2 -2
- package/src/lib/query-engine.ts +2 -2
- package/src/middleware/rate-limit.ts +11 -11
- package/src/routes/admin.ts +30 -3
- package/src/routes/auth.ts +74 -33
- package/src/routes/room.ts +42 -0
- package/src/types.ts +6 -0
- package/admin-build/_app/immutable/assets/TableSqlTab.BHquaMBM.css +0 -1
- package/admin-build/_app/immutable/chunks/BPXFNSAT.js +0 -128
- package/admin-build/_app/immutable/chunks/DKjA1S1a.js +0 -1
- package/admin-build/_app/immutable/chunks/fBE8lw-R.js +0 -1
- package/admin-build/_app/immutable/chunks/gE9fQ_Ff.js +0 -2
- package/admin-build/_app/immutable/entry/start.CAAH6ztW.js +0 -1
- package/admin-build/_app/immutable/nodes/0.BywaJfpH.js +0 -1
- package/admin-build/_app/immutable/nodes/19.CUvRFqLW.js +0 -1
- package/admin-build/_app/immutable/nodes/21.N2QN0lbw.js +0 -1
- package/admin-build/_app/immutable/nodes/25.x3hL7Y-O.js +0 -2
- package/admin-build/_app/immutable/nodes/26.CEzfjTSO.js +0 -1
- package/admin-build/_app/immutable/nodes/3.CKC_yDnF.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as ya}from"../chunks/Bn2NtlTj.js";import{p as $a,d as v,M as wa,f as Fe,a as Sa,b as l,g as e,s as r,u as g,c as t,ae as x,r as a,t as C,af as Da}from"../chunks/BdTBlfLy.js";import{s as A}from"../chunks/DtZk82gG.js";import{i as Me}from"../chunks/Y22E1hJM.js";import{a as h,b as E,t as P,e as ka}from"../chunks/DLc6L4xD.js";import{a as o,f as p,c as Aa,t as b}from"../chunks/DEELgv7K.js";import{a as Te}from"../chunks/CoI6jjbg.js";import{s as Ea,a as Pa}from"../chunks/Cp8V0Xy2.js";import{p as Ua}from"../chunks/COYZ6F_d.js";import{g as Ra}from"../chunks/DKjA1S1a.js";import{b as ie}from"../chunks/fBE8lw-R.js";import{P as Fa}from"../chunks/B8s_s9QY.js";import{c as Ma}from"../chunks/Q2nPFxS6.js";import{B as y}from"../chunks/C72lTcG0.js";import{B as Le}from"../chunks/B0HRJ657.js";import{S as Oe}from"../chunks/Bsp3uE8m.js";import{C as ne}from"../chunks/DILS_-VJ.js";var Ta=p("<a><!></a>"),La=p('<div class="loading-state svelte-1579lxm"><span class="spinner svelte-1579lxm"></span> Loading user...</div>'),Oa=p('<div class="error-state svelte-1579lxm"><p>User not found.</p> <a><!></a></div>'),Ba=p('<p class="no-data svelte-1579lxm">No profile data available.</p>'),Ia=p('<div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm"> </span> <span class="info-value svelte-1579lxm"> </span></div>'),za=p('<div class="info-grid svelte-1579lxm"></div>'),Ca=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>`),Va=p("<!> <!> <!> <!>",1);function is(Be,Ie){$a(Ie,!0);const ze=()=>Pa(Ua,"$page",Ce),[Ce,Ve]=Ea();let f=g(()=>ze().params.userId??""),U=v(!1),n=v(null),R=v(wa({})),$=v(""),w=v(""),V=v(!1),F=v(!1),j=v(!1),M=v(!1),N=v(!1),T=v(!1),H=v(!1),J=v(!1);const je=[{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"banned",label:"Banned"},{value:"disabled",label:"Disabled"}],Ne=[{value:"user",label:"User"},{value:"admin",label:"Admin"}];let He=g(()=>e(n)!==null&&(e($)!==e(n).status||e(w)!==e(n).role));async function Je(){l(n,null),l(U,!1),l(R,{},!0);try{const s=await h.fetch(`data/users/${e(f)}`);l(n,s.user,!0),l($,s.user.status??"active",!0),l(w,s.user.role??"user",!0);try{const S=await h.fetch(`data/users/${e(f)}/profile`),{id:D,...k}=S;l(R,k,!0)}catch{l(R,{},!0)}}catch{l(U,!0)}}ya(()=>{Je()});async function Ze(){l(V,!0);try{await h.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),E("User updated successfully")}catch(s){P(s instanceof Error?s.message:"Failed to update user")}finally{l(V,!1)}}async function qe(){l(F,!1),l(j,!0);try{await h.fetch(`data/users/${e(f)}/sessions`,{method:"DELETE"}),E("All sessions revoked")}catch(s){P(s instanceof Error?s.message:"Failed to revoke sessions")}finally{l(j,!1)}}function Ge(s){switch(s){case"active":return"success";case"suspended":return"warning";case"banned":return"danger";case"disabled":return"danger";default:return"default"}}function oe(s){return s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}async function Ke(){l(M,!1),l(N,!0);try{await h.fetch(`data/users/${e(f)}`,{method:"DELETE"}),E("User deleted"),Ra(`${ie}/auth`)}catch(s){P(s instanceof Error?s.message:"Failed to delete user")}finally{l(N,!1)}}async function Qe(){l(J,!0);try{await h.fetch(`data/users/${e(f)}/send-password-reset`,{method:"POST"}),E("Password reset email sent")}catch(s){P(s instanceof Error?s.message:"Failed to send password reset email")}finally{l(J,!1)}}async function We(){l(T,!1),l(H,!0);try{await h.fetch(`data/users/${e(f)}/mfa`,{method:"DELETE"}),E("MFA disabled")}catch(s){P(s instanceof Error?s.message:"Failed to disable MFA")}finally{l(H,!1)}}function Xe(s){return s==null?"-":typeof s=="object"?JSON.stringify(s):String(s)}let de=g(()=>Object.entries(e(R)));var ve=Va(),ce=Fe(ve);Fa(ce,{title:"User Detail",get description(){return`User ID: ${e(f)??""}`},get docsHref(){return Ma},actions:S=>{var D=Ta(),k=t(D);y(k,{variant:"ghost",size:"sm",children:(Z,fe)=>{x();var q=b("Back to Users");o(Z,q)},$$slots:{default:!0}}),a(D),C(()=>Te(D,"href",`${ie??""}/auth`)),o(S,D)},children:(S,D)=>{var k=Aa(),Z=Fe(k);{var fe=u=>{var m=La();o(u,m)},q=u=>{var m=Oa(),_=r(t(m),2),L=t(_);y(L,{variant:"secondary",children:(O,B)=>{x();var I=b("Back to Users");o(O,I)},$$slots:{default:!0}}),a(_),a(m),C(()=>Te(_,"href",`${ie??""}/auth`)),o(u,m)},ea=u=>{var m=Ca(),_=t(m),L=r(t(_),2),O=t(L),B=t(O),I=r(t(B),2),aa=t(I,!0);a(I),a(B);var G=r(B,2),pe=r(t(G),2),sa=t(pe,!0);a(pe),a(G);var K=r(G,2),_e=r(t(K),2),ta=t(_e);{let i=g(()=>Ge(e(n).status));Le(ta,{get variant(){return e(i)},get text(){return e(n).status}})}a(_e),a(K);var Q=r(K,2),ge=r(t(Q),2),ra=t(ge);{let i=g(()=>e(n).role==="admin"?"primary":"default");Le(ra,{get variant(){return e(i)},get text(){return e(n).role}})}a(ge),a(Q);var W=r(Q,2),xe=r(t(W),2),la=t(xe,!0);a(xe),a(W);var he=r(W,2),be=r(t(he),2),ia=t(be,!0);a(be),a(he),a(O),a(L),a(_);var X=r(_,2),ye=r(t(X),2),Y=t(ye),$e=t(Y);Oe($e,{label:"Status",get options(){return je},get value(){return e($)},set value(i){l($,i,!0)}});var na=r($e,2);Oe(na,{label:"Role",get options(){return Ne},get value(){return e(w)},set value(i){l(w,i,!0)}}),a(Y);var we=r(Y,2),oa=t(we);{let i=g(()=>!e(He));y(oa,{variant:"primary",onclick:Ze,get disabled(){return e(i)},get loading(){return e(V)},children:(d,c)=>{x();var z=b("Save Changes");o(d,z)},$$slots:{default:!0}})}a(we),a(ye),a(X);var ee=r(X,2),Se=r(t(ee),2),da=t(Se);{var va=i=>{var d=Ba();o(i,d)},ca=i=>{var d=za();ka(d,21,()=>e(de),([c,z])=>c,(c,z)=>{var Ue=g(()=>Da(e(z),2));let _a=()=>e(Ue)[0],ga=()=>e(Ue)[1];var re=Ia(),le=t(re),xa=t(le,!0);a(le);var Re=r(le,2),ha=t(Re,!0);a(Re),a(re),C(ba=>{A(xa,_a()),A(ha,ba)},[()=>Xe(ga())]),o(c,re)}),a(d),o(i,d)};Me(da,i=>{e(de).length===0?i(va):i(ca,!1)})}a(Se),a(ee);var ae=r(ee,2),De=r(t(ae),2),ke=t(De),ua=r(t(ke),2);y(ua,{variant:"secondary",size:"sm",onclick:Qe,get loading(){return e(J)},children:(i,d)=>{x();var c=b("Send Reset Email");o(i,c)},$$slots:{default:!0}}),a(ke),a(De),a(ae);var Ae=r(ae,2),Ee=r(t(Ae),2),se=t(Ee),ma=r(t(se),2);y(ma,{variant:"danger",size:"sm",onclick:()=>l(F,!0),get loading(){return e(j)},children:(i,d)=>{x();var c=b("Revoke Sessions");o(i,c)},$$slots:{default:!0}}),a(se);var te=r(se,4),fa=r(t(te),2);y(fa,{variant:"danger",size:"sm",onclick:()=>l(T,!0),get loading(){return e(H)},children:(i,d)=>{x();var c=b("Disable MFA");o(i,c)},$$slots:{default:!0}}),a(te);var Pe=r(te,4),pa=r(t(Pe),2);y(pa,{variant:"danger",size:"sm",onclick:()=>l(M,!0),get loading(){return e(N)},children:(i,d)=>{x();var c=b("Delete User");o(i,c)},$$slots:{default:!0}}),a(Pe),a(Ee),a(Ae),a(m),C((i,d)=>{A(aa,e(n).id),A(sa,e(n).email),A(la,i),A(ia,d)},[()=>oe(e(n).createdAt),()=>oe(e(n).lastSignedInAt)]),o(u,m)};Me(Z,u=>{!e(n)&&!e(U)?u(fe):e(U)?u(q,1):e(n)&&u(ea,2)})}o(S,k)}});var ue=r(ce,2);ne(ue,{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:qe,get open(){return e(F)},set open(s){l(F,s,!0)}});var me=r(ue,2);ne(me,{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:We,get open(){return e(T)},set open(s){l(T,s,!0)}});var Ye=r(me,2);ne(Ye,{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:Ke,get open(){return e(M)},set open(s){l(M,s,!0)}}),o(Be,ve),Sa(),Ve()}export{is as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as ya}from"../chunks/Bn2NtlTj.js";import{p as $a,d as v,M as wa,f as Fe,a as Sa,b as l,g as e,s as r,u as g,c as t,ae as x,r as a,t as C,af as Da}from"../chunks/BdTBlfLy.js";import{s as A}from"../chunks/DtZk82gG.js";import{i as Me}from"../chunks/Y22E1hJM.js";import{a as h,b as E,t as P,e as ka}from"../chunks/CqUxCvs_.js";import{a as o,f as p,c as Aa,t as b}from"../chunks/DEELgv7K.js";import{a as Te}from"../chunks/CoI6jjbg.js";import{s as Ea,a as Pa}from"../chunks/Cp8V0Xy2.js";import{p as Ua}from"../chunks/CSGrwS7E.js";import{g as Ra}from"../chunks/m9QZTyVV.js";import{b as ie}from"../chunks/D755Tqat.js";import{P as Fa}from"../chunks/B8s_s9QY.js";import{c as Ma}from"../chunks/Q2nPFxS6.js";import{B as y}from"../chunks/C72lTcG0.js";import{B as Le}from"../chunks/B0HRJ657.js";import{S as Oe}from"../chunks/BCKr7yKd.js";import{C as ne}from"../chunks/DILS_-VJ.js";var Ta=p("<a><!></a>"),La=p('<div class="loading-state svelte-1579lxm"><span class="spinner svelte-1579lxm"></span> Loading user...</div>'),Oa=p('<div class="error-state svelte-1579lxm"><p>User not found.</p> <a><!></a></div>'),Ba=p('<p class="no-data svelte-1579lxm">No profile data available.</p>'),Ia=p('<div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm"> </span> <span class="info-value svelte-1579lxm"> </span></div>'),za=p('<div class="info-grid svelte-1579lxm"></div>'),Ca=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>`),Va=p("<!> <!> <!> <!>",1);function is(Be,Ie){$a(Ie,!0);const ze=()=>Pa(Ua,"$page",Ce),[Ce,Ve]=Ea();let f=g(()=>ze().params.userId??""),U=v(!1),n=v(null),R=v(wa({})),$=v(""),w=v(""),V=v(!1),F=v(!1),j=v(!1),M=v(!1),N=v(!1),T=v(!1),H=v(!1),J=v(!1);const je=[{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"banned",label:"Banned"},{value:"disabled",label:"Disabled"}],Ne=[{value:"user",label:"User"},{value:"admin",label:"Admin"}];let He=g(()=>e(n)!==null&&(e($)!==e(n).status||e(w)!==e(n).role));async function Je(){l(n,null),l(U,!1),l(R,{},!0);try{const s=await h.fetch(`data/users/${e(f)}`);l(n,s.user,!0),l($,s.user.status??"active",!0),l(w,s.user.role??"user",!0);try{const S=await h.fetch(`data/users/${e(f)}/profile`),{id:D,...k}=S;l(R,k,!0)}catch{l(R,{},!0)}}catch{l(U,!0)}}ya(()=>{Je()});async function Ze(){l(V,!0);try{await h.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),E("User updated successfully")}catch(s){P(s instanceof Error?s.message:"Failed to update user")}finally{l(V,!1)}}async function qe(){l(F,!1),l(j,!0);try{await h.fetch(`data/users/${e(f)}/sessions`,{method:"DELETE"}),E("All sessions revoked")}catch(s){P(s instanceof Error?s.message:"Failed to revoke sessions")}finally{l(j,!1)}}function Ge(s){switch(s){case"active":return"success";case"suspended":return"warning";case"banned":return"danger";case"disabled":return"danger";default:return"default"}}function oe(s){return s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}async function Ke(){l(M,!1),l(N,!0);try{await h.fetch(`data/users/${e(f)}`,{method:"DELETE"}),E("User deleted"),Ra(`${ie}/auth`)}catch(s){P(s instanceof Error?s.message:"Failed to delete user")}finally{l(N,!1)}}async function Qe(){l(J,!0);try{await h.fetch(`data/users/${e(f)}/send-password-reset`,{method:"POST"}),E("Password reset email sent")}catch(s){P(s instanceof Error?s.message:"Failed to send password reset email")}finally{l(J,!1)}}async function We(){l(T,!1),l(H,!0);try{await h.fetch(`data/users/${e(f)}/mfa`,{method:"DELETE"}),E("MFA disabled")}catch(s){P(s instanceof Error?s.message:"Failed to disable MFA")}finally{l(H,!1)}}function Xe(s){return s==null?"-":typeof s=="object"?JSON.stringify(s):String(s)}let de=g(()=>Object.entries(e(R)));var ve=Va(),ce=Fe(ve);Fa(ce,{title:"User Detail",get description(){return`User ID: ${e(f)??""}`},get docsHref(){return Ma},actions:S=>{var D=Ta(),k=t(D);y(k,{variant:"ghost",size:"sm",children:(Z,fe)=>{x();var q=b("Back to Users");o(Z,q)},$$slots:{default:!0}}),a(D),C(()=>Te(D,"href",`${ie??""}/auth`)),o(S,D)},children:(S,D)=>{var k=Aa(),Z=Fe(k);{var fe=u=>{var m=La();o(u,m)},q=u=>{var m=Oa(),_=r(t(m),2),L=t(_);y(L,{variant:"secondary",children:(O,B)=>{x();var I=b("Back to Users");o(O,I)},$$slots:{default:!0}}),a(_),a(m),C(()=>Te(_,"href",`${ie??""}/auth`)),o(u,m)},ea=u=>{var m=Ca(),_=t(m),L=r(t(_),2),O=t(L),B=t(O),I=r(t(B),2),aa=t(I,!0);a(I),a(B);var G=r(B,2),pe=r(t(G),2),sa=t(pe,!0);a(pe),a(G);var K=r(G,2),_e=r(t(K),2),ta=t(_e);{let i=g(()=>Ge(e(n).status));Le(ta,{get variant(){return e(i)},get text(){return e(n).status}})}a(_e),a(K);var Q=r(K,2),ge=r(t(Q),2),ra=t(ge);{let i=g(()=>e(n).role==="admin"?"primary":"default");Le(ra,{get variant(){return e(i)},get text(){return e(n).role}})}a(ge),a(Q);var W=r(Q,2),xe=r(t(W),2),la=t(xe,!0);a(xe),a(W);var he=r(W,2),be=r(t(he),2),ia=t(be,!0);a(be),a(he),a(O),a(L),a(_);var X=r(_,2),ye=r(t(X),2),Y=t(ye),$e=t(Y);Oe($e,{label:"Status",get options(){return je},get value(){return e($)},set value(i){l($,i,!0)}});var na=r($e,2);Oe(na,{label:"Role",get options(){return Ne},get value(){return e(w)},set value(i){l(w,i,!0)}}),a(Y);var we=r(Y,2),oa=t(we);{let i=g(()=>!e(He));y(oa,{variant:"primary",onclick:Ze,get disabled(){return e(i)},get loading(){return e(V)},children:(d,c)=>{x();var z=b("Save Changes");o(d,z)},$$slots:{default:!0}})}a(we),a(ye),a(X);var ee=r(X,2),Se=r(t(ee),2),da=t(Se);{var va=i=>{var d=Ba();o(i,d)},ca=i=>{var d=za();ka(d,21,()=>e(de),([c,z])=>c,(c,z)=>{var Ue=g(()=>Da(e(z),2));let _a=()=>e(Ue)[0],ga=()=>e(Ue)[1];var re=Ia(),le=t(re),xa=t(le,!0);a(le);var Re=r(le,2),ha=t(Re,!0);a(Re),a(re),C(ba=>{A(xa,_a()),A(ha,ba)},[()=>Xe(ga())]),o(c,re)}),a(d),o(i,d)};Me(da,i=>{e(de).length===0?i(va):i(ca,!1)})}a(Se),a(ee);var ae=r(ee,2),De=r(t(ae),2),ke=t(De),ua=r(t(ke),2);y(ua,{variant:"secondary",size:"sm",onclick:Qe,get loading(){return e(J)},children:(i,d)=>{x();var c=b("Send Reset Email");o(i,c)},$$slots:{default:!0}}),a(ke),a(De),a(ae);var Ae=r(ae,2),Ee=r(t(Ae),2),se=t(Ee),ma=r(t(se),2);y(ma,{variant:"danger",size:"sm",onclick:()=>l(F,!0),get loading(){return e(j)},children:(i,d)=>{x();var c=b("Revoke Sessions");o(i,c)},$$slots:{default:!0}}),a(se);var te=r(se,4),fa=r(t(te),2);y(fa,{variant:"danger",size:"sm",onclick:()=>l(T,!0),get loading(){return e(H)},children:(i,d)=>{x();var c=b("Disable MFA");o(i,c)},$$slots:{default:!0}}),a(te);var Pe=r(te,4),pa=r(t(Pe),2);y(pa,{variant:"danger",size:"sm",onclick:()=>l(M,!0),get loading(){return e(N)},children:(i,d)=>{x();var c=b("Delete User");o(i,c)},$$slots:{default:!0}}),a(Pe),a(Ee),a(Ae),a(m),C((i,d)=>{A(aa,e(n).id),A(sa,e(n).email),A(la,i),A(ia,d)},[()=>oe(e(n).createdAt),()=>oe(e(n).lastSignedInAt)]),o(u,m)};Me(Z,u=>{!e(n)&&!e(U)?u(fe):e(U)?u(q,1):e(n)&&u(ea,2)})}o(S,k)}});var ue=r(ce,2);ne(ue,{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:qe,get open(){return e(F)},set open(s){l(F,s,!0)}});var me=r(ue,2);ne(me,{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:We,get open(){return e(T)},set open(s){l(T,s,!0)}});var Ye=r(me,2);ne(Ye,{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:Ke,get open(){return e(M)},set open(s){l(M,s,!0)}}),o(Be,ve),Sa(),Ve()}export{is as component};
|