@edge-base/server 0.2.6 → 0.2.8
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/chunks/{CbfX3ELZ.js → B9efkx2V.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CLHN9MVr.js → BMXWUTG-.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DemDWbs-.js → Bt4AyT3o.js} +3 -3
- package/admin-build/_app/immutable/chunks/CKVjMXZi.js +1 -0
- package/admin-build/_app/immutable/chunks/{BvoGcDFV.js → CMYgGhZR.js} +1 -1
- package/admin-build/_app/immutable/chunks/{LL3ulaxa.js → CTRjWhGs.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BN_-k-Ck.js → CwyE59Yt.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DQVP4KC-.js → D8aeTKry.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Ff90owjx.js → DGAHkap7.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CR37B8DX.js → DPgR4-0v.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DdvsFblq.js → DYtrHeVQ.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CrwlCAM0.js → DcVb45Ds.js} +1 -1
- package/admin-build/_app/immutable/chunks/Djnkhy-S.js +1 -0
- package/admin-build/_app/immutable/chunks/{DmDTovpg.js → fPy6xmgG.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CCUxCptE.js → j4jxnAKj.js} +1 -1
- package/admin-build/_app/immutable/chunks/{qBm6xof8.js → zl2AUKMP.js} +1 -1
- package/admin-build/_app/immutable/entry/{app.CP83Ni80.js → app.Cmz0WjMl.js} +2 -2
- package/admin-build/_app/immutable/entry/start.JE7dcbK1.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.DiRq7puO.js → 0.y6D_QyUb.js} +1 -1
- package/admin-build/_app/immutable/nodes/{1.BFeyKLGT.js → 1.CndRxhbH.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.zcee7hJx.js → 10.CdA5FmXy.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.BW7wLs2Y.js → 11.DG8SzMp_.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.CxJRlYSd.js → 12.CvmQqpFa.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.pp0F_5hn.js → 13.BbGNdswT.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.t3AfGiGo.js → 14.CZKsN7-O.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.B3agc7NX.js → 15.A7-CYgkG.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.C4uG2-i8.js → 16.hgJT9H-x.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.CwGxi1Bn.js → 17.DkWZbcN2.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.CrQyN_gU.js → 18.sX3Fb5gh.js} +1 -1
- package/admin-build/_app/immutable/nodes/{19.NEPUOXl7.js → 19.VAZUW-1K.js} +1 -1
- package/admin-build/_app/immutable/nodes/{20.DGHO8ipr.js → 20.DkIKxacG.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.DOjJlQKc.js +1 -0
- package/admin-build/_app/immutable/nodes/{22.Dri5It7a.js → 22.BDaHvtaw.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.BPQP_Zte.js → 23.BVRzw_pD.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.D580FdSS.js → 24.CVhSJyG0.js} +1 -1
- package/admin-build/_app/immutable/nodes/{25.BMNPOZwF.js → 25.Bme-9bZn.js} +1 -1
- package/admin-build/_app/immutable/nodes/{26.XcpEcbiz.js → 26.Dsx7RIIs.js} +1 -1
- package/admin-build/_app/immutable/nodes/{27.C1zHHcYv.js → 27.DMGQnzFM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.CuKzzrY8.js → 28.GGwFmEhZ.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.nLpBMXnM.js → 29.Dnghr0nk.js} +1 -1
- package/admin-build/_app/immutable/nodes/{3.5G_aseoL.js → 3.Cg7zZJP1.js} +1 -1
- package/admin-build/_app/immutable/nodes/{30.CQC4nLoU.js → 30.C0J24z3I.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.Bet8kxOK.js → 31.MdxFI8v6.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.nmJDYJpC.js → 4.DCAOVzGE.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.CnbYLG4E.js → 5.DzUQ-cTc.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.KA01b-3y.js → 6.CptBYTVj.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.CP9fkn1L.js → 7.DfeeQ0Rg.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.BTzDb---.js → 8.CIcvctW7.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.DkNJg_J6.js → 9.QKrvq4RA.js} +1 -1
- package/admin-build/_app/version.json +1 -1
- package/admin-build/index.html +7 -7
- package/openapi.json +6 -1941
- package/package.json +3 -3
- package/src/__tests__/admin-assets.test.ts +7 -7
- package/src/__tests__/frontend-assets.test.ts +75 -0
- package/src/__tests__/frontend-config.test.ts +16 -0
- package/src/__tests__/frontend-routing.test.ts +200 -0
- package/src/__tests__/openapi-coverage.test.ts +0 -6
- package/src/__tests__/room-auth-state-loss.test.ts +6 -0
- package/src/__tests__/room-handler-context.test.ts +0 -31
- package/src/__tests__/room-rate-limit-scopes.test.ts +1 -5
- package/src/__tests__/room-runtime-routing.test.ts +1 -111
- package/src/__tests__/smoke-skip-report.test.ts +1 -1
- package/src/durable-objects/room-runtime-base.ts +243 -17
- package/src/durable-objects/rooms-do.ts +190 -1345
- package/src/index.ts +97 -3
- package/src/lib/admin-assets.ts +5 -5
- package/src/lib/frontend-assets.ts +129 -0
- package/src/lib/frontend-config.ts +11 -0
- package/src/lib/openapi.ts +1 -4
- package/src/routes/room.ts +0 -285
- package/src/types.ts +1 -14
- package/admin-build/_app/immutable/chunks/Q3vAxeY-.js +0 -1
- package/admin-build/_app/immutable/chunks/SQVAC3Cv.js +0 -1
- package/admin-build/_app/immutable/entry/start.DY6YakU0.js +0 -1
- package/admin-build/_app/immutable/nodes/21.UVKBDvp4.js +0 -1
- package/src/__tests__/cloudflare-realtime.test.ts +0 -113
- package/src/lib/cloudflare-realtime.ts +0 -251
|
@@ -1 +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};
|
|
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/DcVb45Ds.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/DYtrHeVQ.js";import{g as Fa}from"../chunks/CKVjMXZi.js";import{b as ne}from"../chunks/Djnkhy-S.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/DGAHkap7.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};
|