Fix: Debounce token refresh to prevent PocketBase auto-cancellation on rapid calls
This commit is contained in:
@@ -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 () => {
|
const refreshGraphToken = async () => {
|
||||||
try {
|
try {
|
||||||
const authData = await pb.collection('users').authRefresh();
|
// If already refreshing, return that promise
|
||||||
const meta = authData?.meta || pb?.authStore?.model?.meta || {};
|
if (refreshPromise) {
|
||||||
const token = extractGraphToken(meta);
|
return await refreshPromise;
|
||||||
if (token) localStorage.setItem(GRAPH_TOKEN_KEY, token);
|
}
|
||||||
return token || '';
|
|
||||||
|
// 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){
|
} catch(err){
|
||||||
|
refreshPromise = null;
|
||||||
console.warn('Graph token refresh failed:', err?.message||err);
|
console.warn('Graph token refresh failed:', err?.message||err);
|
||||||
return '';
|
return getGraphToken(); // Return cached token if refresh fails
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user