diff --git a/Mode3Test/frontend/index.html b/Mode3Test/frontend/index.html index 4e41756..782aaff 100644 --- a/Mode3Test/frontend/index.html +++ b/Mode3Test/frontend/index.html @@ -276,16 +276,42 @@ ); }; + // Queue to prevent concurrent refresh calls (PocketBase auto-cancels duplicates) + let refreshPromise = null; + let lastRefreshTime = 0; + const REFRESH_COOLDOWN = 2000; // 2 second cooldown between refreshes + const refreshGraphToken = async () => { try { - const authData = await pb.collection('users').authRefresh(); - const meta = authData?.meta || pb?.authStore?.model?.meta || {}; - const token = extractGraphToken(meta); - if (token) localStorage.setItem(GRAPH_TOKEN_KEY, token); - return token || ''; + // If already refreshing, return that promise + if (refreshPromise) { + return await refreshPromise; + } + + // If refreshed recently, return cached token + if (Date.now() - lastRefreshTime < REFRESH_COOLDOWN) { + return getGraphToken(); + } + + // Start new refresh + refreshPromise = (async () => { + try { + const authData = await pb.collection('users').authRefresh(); + const meta = authData?.meta || pb?.authStore?.model?.meta || {}; + const token = extractGraphToken(meta); + if (token) localStorage.setItem(GRAPH_TOKEN_KEY, token); + lastRefreshTime = Date.now(); + return token || ''; + } finally { + refreshPromise = null; + } + })(); + + return await refreshPromise; } catch(err){ + refreshPromise = null; console.warn('Graph token refresh failed:', err?.message||err); - return ''; + return getGraphToken(); // Return cached token if refresh fails } }