From 127aa11f1ebffae8591ae709ac44365f23209bc8 Mon Sep 17 00:00:00 2001 From: ALOK-TV Date: Thu, 16 Jul 2026 16:06:13 +0530 Subject: [PATCH] refactor: improve refresh token persistence and implement automatic session restoration logic in SupabaseAuth --- src/services/auth/SupabaseAuth.ts | 35 ++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/services/auth/SupabaseAuth.ts b/src/services/auth/SupabaseAuth.ts index b7942f8e6b..5917e5bd2f 100644 --- a/src/services/auth/SupabaseAuth.ts +++ b/src/services/auth/SupabaseAuth.ts @@ -71,9 +71,8 @@ export class SupabaseAuth implements ServiceAuth { has_session: !!session, has_refresh_token: !!session?.refresh_token, }); - if (event === 'TOKEN_REFRESHED') { - if (session?.refresh_token) - Util.addRefreshTokenToStore(session?.refresh_token); + if (session?.refresh_token) { + Util.addRefreshTokenToStore(session.refresh_token); } }, ); @@ -476,6 +475,7 @@ export class SupabaseAuth implements ServiceAuth { Util.addRefreshTokenToStore( currentSession.data.session.refresh_token, ); + return; } if (currentSession?.error) { logger.error( @@ -483,7 +483,36 @@ export class SupabaseAuth implements ServiceAuth { currentSession.error, ); } + + const stored = Util.getRefreshTokenFromStore(); + if (!stored?.token) return; + + const refreshToken = String(stored.token).replace(/"/g, ''); + const response = await this._auth?.refreshSession({ + refresh_token: refreshToken, + }); + if (response?.error) { + throw new Error( + 'Web session refresh failed: ' + response.error.message, + ); + } + if (response?.data?.session) { + const { access_token, refresh_token } = response.data.session; + await this._auth?.setSession({ access_token, refresh_token }); + Util.addRefreshTokenToStore(refresh_token); + } } catch (error) { + if (this.isInvalidRefreshTokenError(error)) { + store.dispatch(setRefreshToken(null)); + logAuthDebug( + 'Cleared stale web refresh token after refresh failure.', + { + source: 'SupabaseAuth.doRefreshSession', + reason: 'web_invalid_refresh_token', + }, + ); + return; + } logger.error('Unexpected error while resolving web session:', error); } return;