From 18fa7c0cf665710b24d3eb70166d5aea41099f08 Mon Sep 17 00:00:00 2001 From: Bigint <69431456+bigint@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:07:47 +0530 Subject: [PATCH] refactor: Enhance token refresh mechanism with retry logic --- apps/web/src/helpers/authLink.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/web/src/helpers/authLink.ts b/apps/web/src/helpers/authLink.ts index 2c1912ef102b..13c1fe295a31 100644 --- a/apps/web/src/helpers/authLink.ts +++ b/apps/web/src/helpers/authLink.ts @@ -22,7 +22,12 @@ const REFRESH_AUTHENTICATION_MUTATION = ` let refreshPromise: Promise | null = null; -const executeTokenRefresh = async (refreshToken: string): Promise => { +const MAX_RETRIES = 5; + +const executeTokenRefresh = async ( + refreshToken: string, + attempt = 0 +): Promise => { try { const response = await axios.post( LENS_API_URL, @@ -37,9 +42,14 @@ const executeTokenRefresh = async (refreshToken: string): Promise => { const { accessToken, refreshToken: newRefreshToken, - idToken + idToken, + __typename } = response?.data?.data?.refresh ?? {}; + if (__typename !== "AuthenticationTokens" && attempt < MAX_RETRIES) { + return executeTokenRefresh(refreshToken, attempt + 1); + } + if (!accessToken || !newRefreshToken) { signOut(); throw new Error("Invalid refresh response"); @@ -59,6 +69,7 @@ const refreshTokens = (refreshToken: string): Promise => { if (!refreshPromise) { refreshPromise = executeTokenRefresh(refreshToken); } + return refreshPromise; };