@@ -14,10 +14,27 @@ export const useAuthStore = defineStore("auth", () => {
1414 const user = ref < User | null > ( null ) ;
1515 const { apiFetch } = useApi ( ) ;
1616
17+ let resolveReady : ( ( ) => void ) | null = null ;
18+ const authReady = new Promise < void > ( ( resolve ) => {
19+ resolveReady = resolve ;
20+ } ) ;
21+
22+ function markAuthReady ( ) {
23+ authStateChanged . value = true ;
24+ if ( resolveReady ) {
25+ resolveReady ( ) ;
26+ resolveReady = null ;
27+ }
28+ }
29+
30+ function waitForAuthReady ( ) : Promise < void > {
31+ return authReady ;
32+ }
33+
1734 async function setAuthUserAction ( newUser : AuthUser | null | undefined ) {
1835 const userChanged = newUser ?. id !== authUser . value ?. id ;
1936 authUser . value = newUser ?? null ;
20- authStateChanged . value = true ;
37+ markAuthReady ( ) ;
2138
2239 if ( userChanged && newUser !== null ) {
2340 await Promise . all ( [ loadUser ( ) , loadPhones ( ) ] ) ;
@@ -28,14 +45,14 @@ export const useAuthStore = defineStore("auth", () => {
2845 if ( firebaseUser == null ) {
2946 authUser . value = null ;
3047 user . value = null ;
31- authStateChanged . value = true ;
48+ markAuthReady ( ) ;
3249 setApiKey ( "" ) ;
3350 return ;
3451 }
3552 setAuthHeader ( await firebaseUser . getIdToken ( ) ) ;
3653 const { uid, email, displayName } = firebaseUser ;
3754 authUser . value = { id : uid , email, displayName } ;
38- authStateChanged . value = true ;
55+ markAuthReady ( ) ;
3956 }
4057
4158 async function onIdTokenChanged ( firebaseUser : any ) {
@@ -107,6 +124,7 @@ export const useAuthStore = defineStore("auth", () => {
107124 authStateChanged,
108125 authUser,
109126 user,
127+ waitForAuthReady,
110128 setAuthUserAction,
111129 onAuthStateChanged,
112130 onIdTokenChanged,
0 commit comments