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
}
}