@strands.gg/accui 2.17.16 → 2.17.17

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/dist/index.es.js CHANGED
@@ -3,7 +3,7 @@ import { m as Hu } from "./StrandsUIPlugin-RTFzvRED.es.js";
3
3
  import { defineComponent as Ve, computed as H, provide as Yt, onMounted as Ye, onUnmounted as Mt, createElementBlock as o, openBlock as a, normalizeClass as Me, createElementVNode as e, createBlock as ye, renderSlot as Pe, Teleport as Wt, createCommentVNode as I, toDisplayString as R, ref as M, watch as Le, createTextVNode as J, reactive as Ge, withModifiers as qe, createStaticVNode as Qt, createVNode as d, withDirectives as Qe, withCtx as _, unref as i, vModelText as Xe, nextTick as yt, Fragment as De, Transition as rt, createSlots as Ft, normalizeStyle as je, renderList as Ze, mergeProps as xa, useSlots as ha, inject as fa, resolveDynamicComponent as ot, onBeforeUnmount as Ra, withKeys as st, h as oe, isMemoSame as as, getCurrentInstance as ss } from "vue";
4
4
  import { u as vt, p as La } from "./useStrandsConfig-CMKVW1p3.es.js";
5
5
  import { s as Du } from "./useStrandsConfig-CMKVW1p3.es.js";
6
- import { u as ft } from "./useStrandsAuth-D0lFZGwG.es.js";
6
+ import { u as ft } from "./useStrandsAuth-DzMk9Hla.es.js";
7
7
  const os = { class: "app-content" }, ls = {
8
8
  key: 0,
9
9
  class: "ui-app-loading-overlay"
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("nuxt/app"),a=require("../../../useStrandsAuth-CA_pJ6rc.cjs.js"),u=()=>{const t=e.useRuntimeConfig().public.strandsAuth,n=a.useStrandsAuth();return{...n,initialize:async()=>{await n.initialize()},signIn:async s=>{const i=await n.signIn(s);return i&&t.onSignInUrl&&await e.navigateTo(t.onSignInUrl),i},signUp:async s=>await n.signUp({email:s.email,password:"",firstName:"",lastName:""}),signOut:async()=>{await n.signOut(),t.onSignOutUrl&&await e.navigateTo(t.onSignOutUrl)}}},r=()=>{const{user:t}=u();return{user:t}},o=()=>{const{isAuthenticated:t,isLoading:n}=u();return{isAuthenticated:t,isLoading:n}};exports.useAuthState=o;exports.useAuthUser=r;exports.useStrandsAuth=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("nuxt/app"),a=require("../../../useStrandsAuth-BCnZXu1A.cjs.js"),u=()=>{const t=e.useRuntimeConfig().public.strandsAuth,n=a.useStrandsAuth();return{...n,initialize:async()=>{await n.initialize()},signIn:async s=>{const i=await n.signIn(s);return i&&t.onSignInUrl&&await e.navigateTo(t.onSignInUrl),i},signUp:async s=>await n.signUp({email:s.email,password:"",firstName:"",lastName:""}),signOut:async()=>{await n.signOut(),t.onSignOutUrl&&await e.navigateTo(t.onSignOutUrl)}}},r=()=>{const{user:t}=u();return{user:t}},o=()=>{const{isAuthenticated:t,isLoading:n}=u();return{isAuthenticated:t,isLoading:n}};exports.useAuthState=o;exports.useAuthUser=r;exports.useStrandsAuth=u;
@@ -1,5 +1,5 @@
1
1
  import { useRuntimeConfig as e, navigateTo as a } from "nuxt/app";
2
- import { u as r } from "../../../useStrandsAuth-D0lFZGwG.es.js";
2
+ import { u as r } from "../../../useStrandsAuth-DzMk9Hla.es.js";
3
3
  const u = () => {
4
4
  const n = e().public.strandsAuth, t = r();
5
5
  return {
@@ -0,0 +1 @@
1
+ "use strict";const u=require("vue"),we=require("./useStrandsConfig-B5kp4aF9.cjs.js");class ye{cache=new Map;DEFAULT_TTL=300*1e3;async fetch(d,v,g=this.DEFAULT_TTL){const b=Date.now(),i=this.cache.get(d);if(i&&b-i.timestamp<i.ttl)return i.promise;this.cleanExpired();const o=v().finally(()=>{setTimeout(()=>{this.cache.delete(d)},g)});return this.cache.set(d,{promise:o,timestamp:b,ttl:g}),o}clear(){this.cache.clear()}invalidate(d){this.cache.delete(d)}cleanExpired(){const d=Date.now();for(const[v,g]of this.cache.entries())d-g.timestamp>g.ttl&&this.cache.delete(v)}getStats(){return{size:this.cache.size,entries:Array.from(this.cache.keys())}}}const m=new ye;function pe(){return{fetch:m.fetch.bind(m),clear:m.clear.bind(m),invalidate:m.invalidate.bind(m),getStats:m.getStats.bind(m)}}function Se(n,d){let v=null;return(...g)=>{v&&clearTimeout(v),v=setTimeout(()=>{n(...g)},d)}}const F=Se((n,d)=>{typeof window<"u"&&localStorage.setItem(n,d)},300),E=n=>({id:n.id,email:n.email,firstName:n.first_name||n.firstName||"",lastName:n.last_name||n.lastName||"",avatar:n.avatar_url||n.avatar,mfaEnabled:n.mfa_enabled??n.mfaEnabled??!1,emailVerified:n.email_verified??n.emailVerified??!1,passwordUpdatedAt:n.password_updated_at||n.passwordUpdatedAt,settings:n.settings||{},xp:n.xp||0,level:n.level||1,next_level_xp:n.next_level_xp||n.next_level_xp||4,username:n.username,usernameLastChangedAt:n.username_last_changed_at||n.usernameLastChangedAt,createdAt:n.created_at||n.createdAt,updatedAt:n.updated_at||n.updatedAt||new Date().toISOString()}),_e={currentUser:u.ref(null),currentSession:u.ref(null),loadingStates:u.ref({initializing:!0,signingIn:!1,signingUp:!1,signingOut:!1,refreshingToken:!1,sendingMfaEmail:!1,verifyingMfa:!1,loadingProfile:!1}),isInitialized:u.ref(!1),mfaRequired:u.ref(!1),mfaSessionId:u.ref(null),availableMfaMethods:u.ref([])};let T=null,w=null,I=null,x=null;function Te(){const{getUrl:n,config:d}=we.useStrandsConfig(),{fetch:v,clear:g,invalidate:b}=pe(),{currentUser:i,currentSession:o,loadingStates:s,isInitialized:k,mfaRequired:y,mfaSessionId:h,availableMfaMethods:p}=_e,S=()=>{if(i.value=null,o.value=null,y.value=!1,h.value=null,p.value=[],typeof window<"u"&&(localStorage.removeItem("strands_auth_session"),localStorage.removeItem("strands_auth_user")),O(),$(),w=null,g(),typeof window<"u"&&d.value?.onSignOutUrl){const e=window.location.pathname+window.location.search,t=d.value.onSignOutUrl;e!==t&&(window.location.href=t)}},L=u.computed(()=>s.value.initializing),R=u.computed(()=>s.value.signingIn),U=u.computed(()=>s.value.signingUp),q=u.computed(()=>s.value.signingOut),B=u.computed(()=>s.value.refreshingToken),V=u.computed(()=>s.value.sendingMfaEmail),K=u.computed(()=>s.value.verifyingMfa);u.computed(()=>s.value.loadingProfile);const J=u.computed(()=>s.value.signingIn||s.value.signingUp||s.value.signingOut||s.value.refreshingToken||s.value.sendingMfaEmail||s.value.verifyingMfa||s.value.loadingProfile),G=u.computed(()=>s.value.initializing||J.value),H=u.computed(()=>{const e=s.value;return e.initializing?"Checking authentication...":e.signingIn?"Signing you in...":e.signingUp?"Creating your account...":e.signingOut?"Signing you out...":e.refreshingToken?"Refreshing session...":e.sendingMfaEmail?"Sending verification code...":e.verifyingMfa?"Verifying code...":e.loadingProfile?"Loading profile...":"Loading..."}),A=()=>{const e={};return o.value?.accessToken&&(e.Authorization=`Bearer ${o.value.accessToken}`),o.value?.refreshToken&&(e["x-refresh-token"]=o.value.refreshToken),e},W=async(e,t,a)=>{const r=await fetch(n("mfaHardwareCompleteRegistration"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value.accessToken}`},body:JSON.stringify({device_id:e,credential:t})});if(!r.ok){const c=await r.text();let l="Failed to complete hardware key registration";try{const f=JSON.parse(c);l=f.message||f.error||c}catch{l=c||"Failed to complete hardware key registration"}throw new Error(l)}return r.json()},Y=async(e,t,a="hardware")=>{const r=await fetch(n("mfaHardwareStartRegistration"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value.accessToken}`},body:JSON.stringify({device_name:e,device_type:a})});if(!r.ok){const c=await r.text();let l="Failed to start hardware key registration";try{const f=JSON.parse(c);l=f.message||f.error||c}catch{l=c||"Failed to start hardware key registration"}throw new Error(l)}return r.json()},Q=u.computed(()=>i.value!==null),X=async e=>{s.value.signingIn=!0;try{y.value=!1,h.value=null,p.value=[];const t={"Content-Type":"application/json"};typeof window<"u"&&window.location&&(t.Origin=window.location.origin);const a=await fetch(n("signIn"),{method:"POST",headers:t,body:JSON.stringify(e)});if(!a.ok)throw a.status===401?new Error("Invalid email or password"):a.status===403?new Error("Please verify your email address before signing in"):new Error(`Sign in failed: ${a.status} ${a.statusText}`);const r=await a.json();if(r.mfa_required){y.value=!0,h.value=r.mfa_session_id||null;const c=(r.available_mfa_methods||[]).map(l=>{let f=`${l.device_type.charAt(0).toUpperCase()+l.device_type.slice(1)} Authentication`;return l.device_type==="hardware"?f=l.device_name||"Security Key":l.device_type==="totp"?f=l.device_name||"Authenticator App":l.device_type==="email"&&(f=l.device_name||"Email Verification"),{id:l.device_id,device_type:l.device_type,device_name:l.device_name||f,is_active:!0,created_at:new Date().toISOString(),last_used_at:l.last_used_at,credential_id:l.credential_id,device_info:l.device_info}});return p.value=c,s.value.signingIn=!1,r}return await C(r),r}catch(t){throw t}finally{s.value.signingIn=!1}},Z=async e=>{s.value.signingUp=!0;try{throw new Error("Sign up not implemented - please integrate with auth SDK")}finally{s.value.signingUp=!1}},ee=async()=>{s.value.signingOut=!0;try{O(),$(),w=null,g(),i.value=null,o.value=null,y.value=!1,h.value=null,p.value=[],typeof window<"u"&&(localStorage.removeItem("strands_auth_session"),localStorage.removeItem("strands_auth_user")),typeof window<"u"&&d.value?.onSignOutUrl&&(window.location.href=d.value.onSignOutUrl)}finally{s.value.signingOut=!1}},P=async()=>{if(!o.value?.refreshToken)return!1;if(w)return await w;w=(async()=>{s.value.refreshingToken=!0;try{const t=await fetch(n("refresh"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:o.value.refreshToken})});if(!t.ok){if(t.status===401)return S(),!1;throw new Error(`Token refresh failed: ${t.status} ${t.statusText}`)}const a=await t.json();a.user&&(i.value=E(a.user),i.value&&typeof window<"u"&&localStorage.setItem("strands_auth_user",JSON.stringify(i.value)));const r={accessToken:a.access_token,refreshToken:a.refresh_token,expiresAt:new Date(Date.now()+300*1e3),userId:a.user?.id||i.value?.id};return o.value=r,typeof window<"u"&&localStorage.setItem("strands_auth_session",JSON.stringify(r)),_(),M(),b(`sessions:${o.value.accessToken.slice(0,20)}`),!0}catch{return S(),!1}finally{s.value.refreshingToken=!1}})();const e=await w;return w=null,e},te=async()=>{const e=`profile:${o.value.accessToken.slice(0,20)}`;s.value.loadingProfile=!0;try{return await v(e,async()=>{const t=await fetch(n("profile"),{method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value?.accessToken}`}});if(!t.ok)throw t.status===401?new Error("Authentication expired. Please sign in again."):new Error(`Failed to fetch profile: ${t.status} ${t.statusText}`);const a=await t.json();return i.value=E(a),i.value&&typeof window<"u"&&localStorage.setItem("strands_auth_user",JSON.stringify(i.value)),i.value})}finally{s.value.loadingProfile=!1}},ae=async e=>{s.value.loadingProfile=!0;try{const t=await fetch(n("profile"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value.accessToken}`},body:JSON.stringify({first_name:e.firstName,last_name:e.lastName})});if(!t.ok)throw t.status===401?new Error("Authentication expired. Please sign in again."):new Error(`Profile update failed: ${t.status} ${t.statusText}`);const a=await t.json();return i.value=E(a),i.value&&F("strands_auth_user",JSON.stringify(i.value)),i.value}finally{s.value.loadingProfile=!1}},ne=async e=>{s.value.loadingProfile=!0;try{const t=await fetch(n("settings"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value.accessToken}`},body:JSON.stringify({settings:e})});if(!t.ok)throw t.status===401?new Error("Authentication expired. Please sign in again."):new Error(`Settings update failed: ${t.status} ${t.statusText}`);const a=await t.json();return i.value=E(a),i.value&&F("strands_auth_user",JSON.stringify(i.value)),i.value}finally{s.value.loadingProfile=!1}},se=async(e,t)=>{s.value.loadingProfile=!0;try{const a=await fetch(n("changeEmail"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value.accessToken}`},body:JSON.stringify({new_email:e,password:t})});if(!a.ok){if(a.status===401)throw new Error("Authentication expired. Please sign in again.");{const c=await a.json().catch(()=>({}));throw new Error(c.message||`Email change failed: ${a.status} ${a.statusText}`)}}const r=await a.json();return i.value&&(i.value={...i.value,email:e,emailVerified:!1,updatedAt:new Date().toISOString()},typeof window<"u"&&localStorage.setItem("strands_auth_user",JSON.stringify(i.value))),r}finally{s.value.loadingProfile=!1}},ie=async(e,t,a=!1)=>{if(!h.value)throw new Error("No MFA session available");s.value.verifyingMfa=!0;try{const r=n(a?"mfaBackupCodeVerify":"mfaSigninVerify"),c=a?{mfa_session_id:h.value,backup_code:t}:{mfa_session_id:h.value,device_id:e,code:t},l=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!l.ok){const D=await l.text();let j="MFA verification failed";try{const z=JSON.parse(D);j=z.message||z.error||D}catch{j=D||"MFA verification failed"}throw new Error(j)}const f=await l.json();return y.value=!1,h.value=null,p.value=[],await C(f),f}finally{s.value.verifyingMfa=!1}},re=async e=>{if(!h.value)throw new Error("No MFA session available");s.value.sendingMfaEmail=!0;try{const t=await fetch(n("mfaSigninSendEmail"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mfa_session_id:h.value,device_id:e})});if(!t.ok){const r=await t.text();let c="Failed to send MFA email code";try{const l=JSON.parse(r);c=l.message||l.error||r}catch{c=r||"Failed to send MFA email code"}throw new Error(c)}return await t.json()}finally{s.value.sendingMfaEmail=!1}},oe=async e=>{if(!h.value)throw new Error("No MFA session available");const t=await fetch(n("mfaWebAuthnChallenge"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mfa_session_id:h.value,device_id:e})});if(!t.ok){const a=await t.text();let r="Failed to get WebAuthn challenge";try{const c=JSON.parse(a);r=c.message||c.error||a}catch{r=a||r}throw new Error(r)}return t.json()},C=async e=>{try{e.user&&(i.value=E(e.user));const t={accessToken:e.access_token,refreshToken:e.refresh_token,expiresAt:new Date(Date.now()+300*1e3),userId:i.value?.id||e.user?.id};o.value=t,typeof window<"u"&&(localStorage.setItem("strands_auth_session",JSON.stringify(t)),i.value&&localStorage.setItem("strands_auth_user",JSON.stringify(i.value))),_(),M()}catch{}},_=()=>{if(T&&clearTimeout(T),!o.value||typeof document<"u"&&document.visibilityState==="hidden")return;const e=new Date,a=o.value.expiresAt.getTime()-e.getTime()-60*1e3;if(a<=0){P();return}T=setTimeout(async()=>{(typeof document>"u"||document.visibilityState==="visible")&&await P()&&_()},a)},O=()=>{T&&(clearTimeout(T),T=null)},M=()=>{I||typeof window>"u"||(I=setInterval(()=>{i.value&&o.value&&(localStorage.getItem("strands_auth_session")||($(),S()))},2e3))},$=()=>{I&&(clearInterval(I),I=null)},N=async()=>{if(k.value){s.value.initializing=!1;return}return x||(x=(async()=>{s.value.initializing=!0;try{if(typeof window<"u"){const e=localStorage.getItem("strands_auth_session"),t=localStorage.getItem("strands_auth_user");if(e&&t)try{const a=JSON.parse(e),r=JSON.parse(t);a.expiresAt=new Date(a.expiresAt),a.expiresAt<=new Date&&a.refreshToken?(o.value=a,i.value=r,await Promise.race([P(),new Promise(f=>setTimeout(()=>f(!1),5e3))])||S()):a.expiresAt>new Date?(o.value=a,i.value=r,_(),M()):(localStorage.removeItem("strands_auth_session"),localStorage.removeItem("strands_auth_user"))}catch{localStorage.removeItem("strands_auth_session"),localStorage.removeItem("strands_auth_user")}}k.value=!0,await new Promise(e=>setTimeout(e,50))}catch(e){console.error("[useStrandsAuth] initialization error:",e)}finally{s.value.initializing=!1,x=null}})(),x)},le=async e=>{s.value.loadingProfile=!0;try{const t=await fetch(n("changeUsername"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.value.accessToken}`},body:JSON.stringify({username:e})});if(!t.ok){const r=await t.json().catch(()=>({}));throw t.status===409?new Error("Username is already taken"):r.cooldown_end?new Error(`You can only change your username once every 30 days. You can change it again on ${new Date(r.cooldown_end).toLocaleDateString()}`):new Error(r.message||`Username change failed: ${t.status} ${t.statusText}`)}const a=await t.json();return i.value&&(i.value={...i.value,username:e,usernameLastChangedAt:new Date().toISOString(),updatedAt:new Date().toISOString()},typeof window<"u"&&localStorage.setItem("strands_auth_user",JSON.stringify(i.value))),a}finally{s.value.loadingProfile=!1}},ue=async()=>{const e=await fetch(n("usernameCooldown"),{method:"GET",headers:{Authorization:`Bearer ${o.value.accessToken}`}});if(!e.ok)throw new Error(`Failed to get username cooldown: ${e.status} ${e.statusText}`);return e.json()},ce=async e=>{const t=n("checkUsernameAvailability").replace("{username}",encodeURIComponent(e)),a=await fetch(t,{method:"GET",headers:{"Content-Type":"application/json"}});if(!a.ok)throw new Error(`Failed to check username availability: ${a.status} ${a.statusText}`);return a.json()},de=async()=>{const e=`sessions:${o.value?.accessToken?.slice(0,20)||"no-token"}`;try{return await v(e,async()=>{const t=A(),a=await fetch(n("sessions"),{method:"GET",headers:t});if(!a.ok)throw await a.text(),new Error(`Failed to get user sessions: ${a.status} ${a.statusText}`);return a.json()},120*1e3)}catch(t){throw t}},fe=async()=>{const e=await fetch(n("sessionsStats"),{method:"GET",headers:A()});if(!e.ok)throw new Error(`Failed to get session stats: ${e.status} ${e.statusText}`);return e.json()},he=async e=>{const t=n("sessionRevoke").replace("{session_id}",encodeURIComponent(e)),a=await fetch(t,{method:"POST",headers:A()});if(!a.ok)throw new Error(`Failed to revoke session: ${a.status} ${a.statusText}`);return a.status===200},ge=async()=>{const e=await fetch(n("sessionsRevokeAll"),{method:"POST",headers:A()});if(!e.ok)throw new Error(`Failed to revoke all other sessions: ${e.status} ${e.statusText}`);return e.status===200};typeof document<"u"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&o.value?(_(),ve()):document.visibilityState==="hidden"&&O()}),typeof window<"u"&&window.addEventListener("storage",e=>{(e.key==="strands_auth_session"||e.key==="strands_auth_user")&&!e.newValue&&i.value&&S()});const ve=()=>{if(!(typeof window>"u")&&i.value&&o.value){const e=localStorage.getItem("strands_auth_session"),t=localStorage.getItem("strands_auth_user");(!e||!t)&&S()}},me=()=>{O(),$(),g()};try{u.getCurrentInstance()&&u.onUnmounted(me)}catch{}return k.value||N(),{user:u.computed(()=>i.value),currentUser:u.computed(()=>i.value),currentSession:u.computed(()=>o.value),isAuthenticated:Q,isLoading:u.computed(()=>G.value||!k.value),loading:J,loadingMessage:H,isInitializing:L,isSigningIn:R,isSigningUp:U,isSigningOut:q,isRefreshingToken:B,isSendingMfaEmail:V,isVerifyingMfa:K,mfaRequired:u.computed(()=>y.value),mfaSessionId:u.computed(()=>h.value),availableMfaMethods:u.computed(()=>p.value),signIn:X,signUp:Z,signOut:ee,refreshToken:P,fetchProfile:te,updateProfile:ae,updateUserSettings:ne,changeEmail:se,changeUsername:le,getUsernameCooldown:ue,checkUsernameAvailability:ce,getUserSessions:de,getSessionStats:fe,revokeSession:he,revokeAllOtherSessions:ge,initialize:N,setAuthData:C,verifyMfa:ie,sendMfaEmailCode:re,getMfaWebAuthnChallenge:oe,registerHardwareKey:Y,completeHardwareKeyRegistration:W,startTokenRefreshTimer:_,stopTokenRefreshTimer:O,getAuthHeaders:A,forceReInit:()=>{k.value=!1,s.value.initializing=!0,N()}}}exports.useStrandsAuth=Te;
@@ -1,6 +1,6 @@
1
- import { computed as c, ref as m, getCurrentInstance as me, onUnmounted as ye } from "vue";
2
- import { u as pe } from "./useStrandsConfig-CMKVW1p3.es.js";
3
- class Se {
1
+ import { computed as c, ref as m, getCurrentInstance as ye, onUnmounted as pe } from "vue";
2
+ import { u as Se } from "./useStrandsConfig-CMKVW1p3.es.js";
3
+ class _e {
4
4
  cache = /* @__PURE__ */ new Map();
5
5
  DEFAULT_TTL = 300 * 1e3;
6
6
  // 5 minutes
@@ -8,8 +8,8 @@ class Se {
8
8
  * Memoized fetch - prevents duplicate requests and caches results
9
9
  */
10
10
  async fetch(f, v, g = this.DEFAULT_TTL) {
11
- const b = Date.now(), i = this.cache.get(f);
12
- if (i && b - i.timestamp < i.ttl)
11
+ const P = Date.now(), i = this.cache.get(f);
12
+ if (i && P - i.timestamp < i.ttl)
13
13
  return i.promise;
14
14
  this.cleanExpired();
15
15
  const o = v().finally(() => {
@@ -19,7 +19,7 @@ class Se {
19
19
  });
20
20
  return this.cache.set(f, {
21
21
  promise: o,
22
- timestamp: b,
22
+ timestamp: P,
23
23
  ttl: g
24
24
  }), o;
25
25
  }
@@ -53,8 +53,8 @@ class Se {
53
53
  };
54
54
  }
55
55
  }
56
- const w = new Se();
57
- function _e() {
56
+ const w = new _e();
57
+ function Te() {
58
58
  return {
59
59
  fetch: w.fetch.bind(w),
60
60
  clear: w.clear.bind(w),
@@ -62,7 +62,7 @@ function _e() {
62
62
  getStats: w.getStats.bind(w)
63
63
  };
64
64
  }
65
- function Te(n, f) {
65
+ function ke(n, f) {
66
66
  let v = null;
67
67
  return (...g) => {
68
68
  v && clearTimeout(v), v = setTimeout(() => {
@@ -70,9 +70,9 @@ function Te(n, f) {
70
70
  }, f);
71
71
  };
72
72
  }
73
- const F = Te((n, f) => {
73
+ const L = ke((n, f) => {
74
74
  typeof window < "u" && localStorage.setItem(n, f);
75
- }, 300), E = (n) => ({
75
+ }, 300), I = (n) => ({
76
76
  id: n.id,
77
77
  email: n.email,
78
78
  firstName: n.first_name || n.firstName || "",
@@ -89,7 +89,7 @@ const F = Te((n, f) => {
89
89
  usernameLastChangedAt: n.username_last_changed_at || n.usernameLastChangedAt,
90
90
  createdAt: n.created_at || n.createdAt,
91
91
  updatedAt: n.updated_at || n.updatedAt || (/* @__PURE__ */ new Date()).toISOString()
92
- }), ke = {
92
+ }), Ae = {
93
93
  currentUser: m(null),
94
94
  currentSession: m(null),
95
95
  loadingStates: m({
@@ -107,24 +107,24 @@ const F = Te((n, f) => {
107
107
  mfaSessionId: m(null),
108
108
  availableMfaMethods: m([])
109
109
  };
110
- let A = null, y = null, x = null;
110
+ let k = null, y = null, x = null, b = null;
111
111
  function Ie() {
112
- const { getUrl: n, config: f } = pe(), { fetch: v, clear: g, invalidate: b } = _e(), { currentUser: i, currentSession: o, loadingStates: s, isInitialized: p, mfaRequired: S, mfaSessionId: h, availableMfaMethods: _ } = ke, T = () => {
113
- if (i.value = null, o.value = null, S.value = !1, h.value = null, _.value = [], typeof window < "u" && (localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user")), I(), $(), y = null, g(), typeof window < "u" && f.value?.onSignOutUrl) {
112
+ const { getUrl: n, config: f } = Se(), { fetch: v, clear: g, invalidate: P } = Te(), { currentUser: i, currentSession: o, loadingStates: s, isInitialized: A, mfaRequired: p, mfaSessionId: h, availableMfaMethods: S } = Ae, _ = () => {
113
+ if (i.value = null, o.value = null, p.value = !1, h.value = null, S.value = [], typeof window < "u" && (localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user")), E(), M(), y = null, g(), typeof window < "u" && f.value?.onSignOutUrl) {
114
114
  const e = window.location.pathname + window.location.search, t = f.value.onSignOutUrl;
115
115
  e !== t && (window.location.href = t);
116
116
  }
117
- }, L = c(() => s.value.initializing), R = c(() => s.value.signingIn), U = c(() => s.value.signingUp), B = c(() => s.value.signingOut), V = c(() => s.value.refreshingToken), q = c(() => s.value.sendingMfaEmail), K = c(() => s.value.verifyingMfa);
117
+ }, R = c(() => s.value.initializing), U = c(() => s.value.signingIn), B = c(() => s.value.signingUp), V = c(() => s.value.signingOut), q = c(() => s.value.refreshingToken), K = c(() => s.value.sendingMfaEmail), G = c(() => s.value.verifyingMfa);
118
118
  c(() => s.value.loadingProfile);
119
119
  const z = c(
120
120
  () => s.value.signingIn || s.value.signingUp || s.value.signingOut || s.value.refreshingToken || s.value.sendingMfaEmail || s.value.verifyingMfa || s.value.loadingProfile
121
- ), G = c(() => s.value.initializing || z.value), H = c(() => {
121
+ ), H = c(() => s.value.initializing || z.value), W = c(() => {
122
122
  const e = s.value;
123
123
  return e.initializing ? "Checking authentication..." : e.signingIn ? "Signing you in..." : e.signingUp ? "Creating your account..." : e.signingOut ? "Signing you out..." : e.refreshingToken ? "Refreshing session..." : e.sendingMfaEmail ? "Sending verification code..." : e.verifyingMfa ? "Verifying code..." : e.loadingProfile ? "Loading profile..." : "Loading...";
124
124
  }), O = () => {
125
125
  const e = {};
126
126
  return o.value?.accessToken && (e.Authorization = `Bearer ${o.value.accessToken}`), o.value?.refreshToken && (e["x-refresh-token"] = o.value.refreshToken), e;
127
- }, W = async (e, t, a) => {
127
+ }, Y = async (e, t, a) => {
128
128
  const r = await fetch(n("mfaHardwareCompleteRegistration"), {
129
129
  method: "POST",
130
130
  headers: {
@@ -148,7 +148,7 @@ function Ie() {
148
148
  throw new Error(l);
149
149
  }
150
150
  return r.json();
151
- }, Y = async (e, t, a = "hardware") => {
151
+ }, Q = async (e, t, a = "hardware") => {
152
152
  const r = await fetch(n("mfaHardwareStartRegistration"), {
153
153
  method: "POST",
154
154
  headers: {
@@ -172,10 +172,10 @@ function Ie() {
172
172
  throw new Error(l);
173
173
  }
174
174
  return r.json();
175
- }, Q = c(() => i.value !== null), X = async (e) => {
175
+ }, X = c(() => i.value !== null), Z = async (e) => {
176
176
  s.value.signingIn = !0;
177
177
  try {
178
- S.value = !1, h.value = null, _.value = [];
178
+ p.value = !1, h.value = null, S.value = [];
179
179
  const t = {
180
180
  "Content-Type": "application/json"
181
181
  };
@@ -189,7 +189,7 @@ function Ie() {
189
189
  throw a.status === 401 ? new Error("Invalid email or password") : a.status === 403 ? new Error("Please verify your email address before signing in") : new Error(`Sign in failed: ${a.status} ${a.statusText}`);
190
190
  const r = await a.json();
191
191
  if (r.mfa_required) {
192
- S.value = !0, h.value = r.mfa_session_id || null;
192
+ p.value = !0, h.value = r.mfa_session_id || null;
193
193
  const u = (r.available_mfa_methods || []).map((l) => {
194
194
  let d = `${l.device_type.charAt(0).toUpperCase() + l.device_type.slice(1)} Authentication`;
195
195
  return l.device_type === "hardware" ? d = l.device_name || "Security Key" : l.device_type === "totp" ? d = l.device_name || "Authenticator App" : l.device_type === "email" && (d = l.device_name || "Email Verification"), {
@@ -204,29 +204,29 @@ function Ie() {
204
204
  device_info: l.device_info
205
205
  };
206
206
  });
207
- return _.value = u, s.value.signingIn = !1, r;
207
+ return S.value = u, s.value.signingIn = !1, r;
208
208
  }
209
- return await M(r), r;
209
+ return await N(r), r;
210
210
  } catch (t) {
211
211
  throw t;
212
212
  } finally {
213
213
  s.value.signingIn = !1;
214
214
  }
215
- }, Z = async (e) => {
215
+ }, ee = async (e) => {
216
216
  s.value.signingUp = !0;
217
217
  try {
218
218
  throw new Error("Sign up not implemented - please integrate with auth SDK");
219
219
  } finally {
220
220
  s.value.signingUp = !1;
221
221
  }
222
- }, ee = async () => {
222
+ }, te = async () => {
223
223
  s.value.signingOut = !0;
224
224
  try {
225
- I(), $(), y = null, g(), i.value = null, o.value = null, S.value = !1, h.value = null, _.value = [], typeof window < "u" && (localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user")), typeof window < "u" && f.value?.onSignOutUrl && (window.location.href = f.value.onSignOutUrl);
225
+ E(), M(), y = null, g(), i.value = null, o.value = null, p.value = !1, h.value = null, S.value = [], typeof window < "u" && (localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user")), typeof window < "u" && f.value?.onSignOutUrl && (window.location.href = f.value.onSignOutUrl);
226
226
  } finally {
227
227
  s.value.signingOut = !1;
228
228
  }
229
- }, P = async () => {
229
+ }, $ = async () => {
230
230
  if (!o.value?.refreshToken)
231
231
  return !1;
232
232
  if (y)
@@ -245,11 +245,11 @@ function Ie() {
245
245
  });
246
246
  if (!t.ok) {
247
247
  if (t.status === 401)
248
- return T(), !1;
248
+ return _(), !1;
249
249
  throw new Error(`Token refresh failed: ${t.status} ${t.statusText}`);
250
250
  }
251
251
  const a = await t.json();
252
- a.user && (i.value = E(a.user), i.value && typeof window < "u" && localStorage.setItem("strands_auth_user", JSON.stringify(i.value)));
252
+ a.user && (i.value = I(a.user), i.value && typeof window < "u" && localStorage.setItem("strands_auth_user", JSON.stringify(i.value)));
253
253
  const r = {
254
254
  accessToken: a.access_token,
255
255
  refreshToken: a.refresh_token,
@@ -257,16 +257,16 @@ function Ie() {
257
257
  // 5 minutes from now
258
258
  userId: a.user?.id || i.value?.id
259
259
  };
260
- return o.value = r, typeof window < "u" && localStorage.setItem("strands_auth_session", JSON.stringify(r)), k(), N(), b(`sessions:${o.value.accessToken.slice(0, 20)}`), !0;
260
+ return o.value = r, typeof window < "u" && localStorage.setItem("strands_auth_session", JSON.stringify(r)), T(), C(), P(`sessions:${o.value.accessToken.slice(0, 20)}`), !0;
261
261
  } catch {
262
- return T(), !1;
262
+ return _(), !1;
263
263
  } finally {
264
264
  s.value.refreshingToken = !1;
265
265
  }
266
266
  })();
267
267
  const e = await y;
268
268
  return y = null, e;
269
- }, te = async () => {
269
+ }, ae = async () => {
270
270
  const e = `profile:${o.value.accessToken.slice(0, 20)}`;
271
271
  s.value.loadingProfile = !0;
272
272
  try {
@@ -281,12 +281,12 @@ function Ie() {
281
281
  if (!t.ok)
282
282
  throw t.status === 401 ? new Error("Authentication expired. Please sign in again.") : new Error(`Failed to fetch profile: ${t.status} ${t.statusText}`);
283
283
  const a = await t.json();
284
- return i.value = E(a), i.value && typeof window < "u" && localStorage.setItem("strands_auth_user", JSON.stringify(i.value)), i.value;
284
+ return i.value = I(a), i.value && typeof window < "u" && localStorage.setItem("strands_auth_user", JSON.stringify(i.value)), i.value;
285
285
  });
286
286
  } finally {
287
287
  s.value.loadingProfile = !1;
288
288
  }
289
- }, ae = async (e) => {
289
+ }, ne = async (e) => {
290
290
  s.value.loadingProfile = !0;
291
291
  try {
292
292
  const t = await fetch(n("profile"), {
@@ -303,11 +303,11 @@ function Ie() {
303
303
  if (!t.ok)
304
304
  throw t.status === 401 ? new Error("Authentication expired. Please sign in again.") : new Error(`Profile update failed: ${t.status} ${t.statusText}`);
305
305
  const a = await t.json();
306
- return i.value = E(a), i.value && F("strands_auth_user", JSON.stringify(i.value)), i.value;
306
+ return i.value = I(a), i.value && L("strands_auth_user", JSON.stringify(i.value)), i.value;
307
307
  } finally {
308
308
  s.value.loadingProfile = !1;
309
309
  }
310
- }, ne = async (e) => {
310
+ }, se = async (e) => {
311
311
  s.value.loadingProfile = !0;
312
312
  try {
313
313
  const t = await fetch(n("settings"), {
@@ -323,11 +323,11 @@ function Ie() {
323
323
  if (!t.ok)
324
324
  throw t.status === 401 ? new Error("Authentication expired. Please sign in again.") : new Error(`Settings update failed: ${t.status} ${t.statusText}`);
325
325
  const a = await t.json();
326
- return i.value = E(a), i.value && F("strands_auth_user", JSON.stringify(i.value)), i.value;
326
+ return i.value = I(a), i.value && L("strands_auth_user", JSON.stringify(i.value)), i.value;
327
327
  } finally {
328
328
  s.value.loadingProfile = !1;
329
329
  }
330
- }, se = async (e, t) => {
330
+ }, ie = async (e, t) => {
331
331
  s.value.loadingProfile = !0;
332
332
  try {
333
333
  const a = await fetch(n("changeEmail"), {
@@ -360,7 +360,7 @@ function Ie() {
360
360
  } finally {
361
361
  s.value.loadingProfile = !1;
362
362
  }
363
- }, ie = async (e, t, a = !1) => {
363
+ }, re = async (e, t, a = !1) => {
364
364
  if (!h.value)
365
365
  throw new Error("No MFA session available");
366
366
  s.value.verifyingMfa = !0;
@@ -371,22 +371,22 @@ function Ie() {
371
371
  body: JSON.stringify(u)
372
372
  });
373
373
  if (!l.ok) {
374
- const D = await l.text();
375
- let j = "MFA verification failed";
374
+ const j = await l.text();
375
+ let J = "MFA verification failed";
376
376
  try {
377
- const J = JSON.parse(D);
378
- j = J.message || J.error || D;
377
+ const F = JSON.parse(j);
378
+ J = F.message || F.error || j;
379
379
  } catch {
380
- j = D || "MFA verification failed";
380
+ J = j || "MFA verification failed";
381
381
  }
382
- throw new Error(j);
382
+ throw new Error(J);
383
383
  }
384
384
  const d = await l.json();
385
- return S.value = !1, h.value = null, _.value = [], await M(d), d;
385
+ return p.value = !1, h.value = null, S.value = [], await N(d), d;
386
386
  } finally {
387
387
  s.value.verifyingMfa = !1;
388
388
  }
389
- }, re = async (e) => {
389
+ }, oe = async (e) => {
390
390
  if (!h.value)
391
391
  throw new Error("No MFA session available");
392
392
  s.value.sendingMfaEmail = !0;
@@ -414,7 +414,7 @@ function Ie() {
414
414
  } finally {
415
415
  s.value.sendingMfaEmail = !1;
416
416
  }
417
- }, oe = async (e) => {
417
+ }, le = async (e) => {
418
418
  if (!h.value)
419
419
  throw new Error("No MFA session available");
420
420
  const t = await fetch(n("mfaWebAuthnChallenge"), {
@@ -437,9 +437,9 @@ function Ie() {
437
437
  throw new Error(r);
438
438
  }
439
439
  return t.json();
440
- }, M = async (e) => {
440
+ }, N = async (e) => {
441
441
  try {
442
- e.user && (i.value = E(e.user));
442
+ e.user && (i.value = I(e.user));
443
443
  const t = {
444
444
  accessToken: e.access_token,
445
445
  refreshToken: e.refresh_token,
@@ -447,55 +447,57 @@ function Ie() {
447
447
  // 5 minutes from now (matching API token expiry)
448
448
  userId: i.value?.id || e.user?.id
449
449
  };
450
- o.value = t, typeof window < "u" && (localStorage.setItem("strands_auth_session", JSON.stringify(t)), i.value && localStorage.setItem("strands_auth_user", JSON.stringify(i.value))), k(), N();
450
+ o.value = t, typeof window < "u" && (localStorage.setItem("strands_auth_session", JSON.stringify(t)), i.value && localStorage.setItem("strands_auth_user", JSON.stringify(i.value))), T(), C();
451
451
  } catch {
452
452
  }
453
- }, k = () => {
454
- if (A && clearTimeout(A), !o.value || typeof document < "u" && document.visibilityState === "hidden")
453
+ }, T = () => {
454
+ if (k && clearTimeout(k), !o.value || typeof document < "u" && document.visibilityState === "hidden")
455
455
  return;
456
456
  const e = /* @__PURE__ */ new Date(), a = o.value.expiresAt.getTime() - e.getTime() - 60 * 1e3;
457
457
  if (a <= 0) {
458
- P();
458
+ $();
459
459
  return;
460
460
  }
461
- A = setTimeout(async () => {
462
- (typeof document > "u" || document.visibilityState === "visible") && await P() && k();
461
+ k = setTimeout(async () => {
462
+ (typeof document > "u" || document.visibilityState === "visible") && await $() && T();
463
463
  }, a);
464
- }, I = () => {
465
- A && (clearTimeout(A), A = null);
466
- }, N = () => {
464
+ }, E = () => {
465
+ k && (clearTimeout(k), k = null);
466
+ }, C = () => {
467
467
  x || typeof window > "u" || (x = setInterval(() => {
468
- i.value && o.value && (localStorage.getItem("strands_auth_session") || ($(), T()));
468
+ i.value && o.value && (localStorage.getItem("strands_auth_session") || (M(), _()));
469
469
  }, 2e3));
470
- }, $ = () => {
470
+ }, M = () => {
471
471
  x && (clearInterval(x), x = null);
472
- }, C = async () => {
473
- if (console.log("[useStrandsAuth] initialize() called, isInitialized:", p.value), p.value) {
474
- console.log("[useStrandsAuth] Already initialized, setting initializing=false"), s.value.initializing = !1;
472
+ }, D = async () => {
473
+ if (A.value) {
474
+ s.value.initializing = !1;
475
475
  return;
476
476
  }
477
- s.value.initializing = !0, console.log("[useStrandsAuth] Starting initialization...");
478
- try {
479
- if (typeof window < "u") {
480
- const e = localStorage.getItem("strands_auth_session"), t = localStorage.getItem("strands_auth_user");
481
- if (e && t)
482
- try {
483
- const a = JSON.parse(e), r = JSON.parse(t);
484
- a.expiresAt = new Date(a.expiresAt), a.expiresAt <= /* @__PURE__ */ new Date() && a.refreshToken ? (o.value = a, i.value = r, await Promise.race([
485
- P(),
486
- new Promise((d) => setTimeout(() => d(!1), 5e3))
487
- ]) || T()) : a.expiresAt > /* @__PURE__ */ new Date() ? (o.value = a, i.value = r, k(), N()) : (localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user"));
488
- } catch {
489
- localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user");
490
- }
477
+ return b || (b = (async () => {
478
+ s.value.initializing = !0;
479
+ try {
480
+ if (typeof window < "u") {
481
+ const e = localStorage.getItem("strands_auth_session"), t = localStorage.getItem("strands_auth_user");
482
+ if (e && t)
483
+ try {
484
+ const a = JSON.parse(e), r = JSON.parse(t);
485
+ a.expiresAt = new Date(a.expiresAt), a.expiresAt <= /* @__PURE__ */ new Date() && a.refreshToken ? (o.value = a, i.value = r, await Promise.race([
486
+ $(),
487
+ new Promise((d) => setTimeout(() => d(!1), 5e3))
488
+ ]) || _()) : a.expiresAt > /* @__PURE__ */ new Date() ? (o.value = a, i.value = r, T(), C()) : (localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user"));
489
+ } catch {
490
+ localStorage.removeItem("strands_auth_session"), localStorage.removeItem("strands_auth_user");
491
+ }
492
+ }
493
+ A.value = !0, await new Promise((e) => setTimeout(e, 50));
494
+ } catch (e) {
495
+ console.error("[useStrandsAuth] initialization error:", e);
496
+ } finally {
497
+ s.value.initializing = !1, b = null;
491
498
  }
492
- p.value = !0, console.log("[useStrandsAuth] isInitialized set to true"), await new Promise((e) => setTimeout(e, 50));
493
- } catch (e) {
494
- console.error("[useStrandsAuth] initialization error:", e);
495
- } finally {
496
- console.log("[useStrandsAuth] finally block - setting initializing=false"), s.value.initializing = !1;
497
- }
498
- }, le = async (e) => {
499
+ })(), b);
500
+ }, ue = async (e) => {
499
501
  s.value.loadingProfile = !0;
500
502
  try {
501
503
  const t = await fetch(n("changeUsername"), {
@@ -522,7 +524,7 @@ function Ie() {
522
524
  } finally {
523
525
  s.value.loadingProfile = !1;
524
526
  }
525
- }, ue = async () => {
527
+ }, ce = async () => {
526
528
  const e = await fetch(n("usernameCooldown"), {
527
529
  method: "GET",
528
530
  headers: {
@@ -532,7 +534,7 @@ function Ie() {
532
534
  if (!e.ok)
533
535
  throw new Error(`Failed to get username cooldown: ${e.status} ${e.statusText}`);
534
536
  return e.json();
535
- }, ce = async (e) => {
537
+ }, fe = async (e) => {
536
538
  const t = n("checkUsernameAvailability").replace("{username}", encodeURIComponent(e)), a = await fetch(t, {
537
539
  method: "GET",
538
540
  headers: {
@@ -542,7 +544,7 @@ function Ie() {
542
544
  if (!a.ok)
543
545
  throw new Error(`Failed to check username availability: ${a.status} ${a.statusText}`);
544
546
  return a.json();
545
- }, fe = async () => {
547
+ }, de = async () => {
546
548
  const e = `sessions:${o.value?.accessToken?.slice(0, 20) || "no-token"}`;
547
549
  try {
548
550
  return await v(e, async () => {
@@ -557,7 +559,7 @@ function Ie() {
557
559
  } catch (t) {
558
560
  throw t;
559
561
  }
560
- }, de = async () => {
562
+ }, he = async () => {
561
563
  const e = await fetch(n("sessionsStats"), {
562
564
  method: "GET",
563
565
  headers: O()
@@ -565,7 +567,7 @@ function Ie() {
565
567
  if (!e.ok)
566
568
  throw new Error(`Failed to get session stats: ${e.status} ${e.statusText}`);
567
569
  return e.json();
568
- }, he = async (e) => {
570
+ }, ge = async (e) => {
569
571
  const t = n("sessionRevoke").replace("{session_id}", encodeURIComponent(e)), a = await fetch(t, {
570
572
  method: "POST",
571
573
  headers: O()
@@ -573,7 +575,7 @@ function Ie() {
573
575
  if (!a.ok)
574
576
  throw new Error(`Failed to revoke session: ${a.status} ${a.statusText}`);
575
577
  return a.status === 200;
576
- }, ge = async () => {
578
+ }, ve = async () => {
577
579
  const e = await fetch(n("sessionsRevokeAll"), {
578
580
  method: "POST",
579
581
  headers: O()
@@ -583,74 +585,74 @@ function Ie() {
583
585
  return e.status === 200;
584
586
  };
585
587
  typeof document < "u" && document.addEventListener("visibilitychange", () => {
586
- document.visibilityState === "visible" && o.value ? (k(), ve()) : document.visibilityState === "hidden" && I();
588
+ document.visibilityState === "visible" && o.value ? (T(), we()) : document.visibilityState === "hidden" && E();
587
589
  }), typeof window < "u" && window.addEventListener("storage", (e) => {
588
- (e.key === "strands_auth_session" || e.key === "strands_auth_user") && !e.newValue && i.value && T();
590
+ (e.key === "strands_auth_session" || e.key === "strands_auth_user") && !e.newValue && i.value && _();
589
591
  });
590
- const ve = () => {
592
+ const we = () => {
591
593
  if (!(typeof window > "u") && i.value && o.value) {
592
594
  const e = localStorage.getItem("strands_auth_session"), t = localStorage.getItem("strands_auth_user");
593
- (!e || !t) && T();
595
+ (!e || !t) && _();
594
596
  }
595
- }, we = () => {
596
- I(), $(), g();
597
+ }, me = () => {
598
+ E(), M(), g();
597
599
  };
598
600
  try {
599
- me() && ye(we);
601
+ ye() && pe(me);
600
602
  } catch {
601
603
  }
602
- return p.value || C(), {
604
+ return A.value || D(), {
603
605
  // State
604
606
  user: c(() => i.value),
605
607
  currentUser: c(() => i.value),
606
608
  currentSession: c(() => o.value),
607
- isAuthenticated: Q,
608
- isLoading: c(() => G.value || !p.value),
609
+ isAuthenticated: X,
610
+ isLoading: c(() => H.value || !A.value),
609
611
  loading: z,
610
- loadingMessage: H,
612
+ loadingMessage: W,
611
613
  // Specific loading states
612
- isInitializing: L,
613
- isSigningIn: R,
614
- isSigningUp: U,
615
- isSigningOut: B,
616
- isRefreshingToken: V,
617
- isSendingMfaEmail: q,
618
- isVerifyingMfa: K,
614
+ isInitializing: R,
615
+ isSigningIn: U,
616
+ isSigningUp: B,
617
+ isSigningOut: V,
618
+ isRefreshingToken: q,
619
+ isSendingMfaEmail: K,
620
+ isVerifyingMfa: G,
619
621
  // MFA State
620
- mfaRequired: c(() => S.value),
622
+ mfaRequired: c(() => p.value),
621
623
  mfaSessionId: c(() => h.value),
622
- availableMfaMethods: c(() => _.value),
624
+ availableMfaMethods: c(() => S.value),
623
625
  // Methods
624
- signIn: X,
625
- signUp: Z,
626
- signOut: ee,
627
- refreshToken: P,
628
- fetchProfile: te,
629
- updateProfile: ae,
630
- updateUserSettings: ne,
631
- changeEmail: se,
632
- changeUsername: le,
633
- getUsernameCooldown: ue,
634
- checkUsernameAvailability: ce,
626
+ signIn: Z,
627
+ signUp: ee,
628
+ signOut: te,
629
+ refreshToken: $,
630
+ fetchProfile: ae,
631
+ updateProfile: ne,
632
+ updateUserSettings: se,
633
+ changeEmail: ie,
634
+ changeUsername: ue,
635
+ getUsernameCooldown: ce,
636
+ checkUsernameAvailability: fe,
635
637
  // Session management
636
- getUserSessions: fe,
637
- getSessionStats: de,
638
- revokeSession: he,
639
- revokeAllOtherSessions: ge,
640
- initialize: C,
641
- setAuthData: M,
642
- verifyMfa: ie,
643
- sendMfaEmailCode: re,
644
- getMfaWebAuthnChallenge: oe,
645
- registerHardwareKey: Y,
646
- completeHardwareKeyRegistration: W,
638
+ getUserSessions: de,
639
+ getSessionStats: he,
640
+ revokeSession: ge,
641
+ revokeAllOtherSessions: ve,
642
+ initialize: D,
643
+ setAuthData: N,
644
+ verifyMfa: re,
645
+ sendMfaEmailCode: oe,
646
+ getMfaWebAuthnChallenge: le,
647
+ registerHardwareKey: Q,
648
+ completeHardwareKeyRegistration: Y,
647
649
  // Token management
648
- startTokenRefreshTimer: k,
649
- stopTokenRefreshTimer: I,
650
+ startTokenRefreshTimer: T,
651
+ stopTokenRefreshTimer: E,
650
652
  getAuthHeaders: O,
651
653
  // Force re-initialization (useful for testing or navigation)
652
654
  forceReInit: () => {
653
- p.value = !1, s.value.initializing = !0, C();
655
+ A.value = !1, s.value.initializing = !0, D();
654
656
  }
655
657
  };
656
658
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strands.gg/accui",
3
- "version": "2.17.16",
3
+ "version": "2.17.17",
4
4
  "description": "Strands Authentication UI Components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",