fix: window scoped state for token refresh

This commit is contained in:
2025-05-30 21:25:39 +02:00
parent 8a28fca3d9
commit 03697b2f67
4 changed files with 20 additions and 5 deletions

View File

@ -12,7 +12,6 @@ export const axios = Axios.create({
},
});
let isRefreshing = false;
let refreshQueue: ((token: string | null) => void)[] = [];
const waitForTokenRefresh = () => {
@ -60,7 +59,7 @@ const refreshToken = async (
} finally {
localStorage.removeItem("refreshing");
loadAccounts?.();
isRefreshing = false;
window.guard.refreshing = false;
}
};
@ -74,8 +73,9 @@ axios.interceptors.request.use(
return request;
}
if (!isRefreshing) {
isRefreshing = true;
if (!window.guard.refreshing) {
console.log(`request to ${request.url} is refreshing token`);
window.guard.refreshing = true;
try {
const { access } = await refreshToken(
account!.accountId,
@ -87,7 +87,9 @@ axios.interceptors.request.use(
throw err;
}
} else {
console.log(`request to ${request.url} is waiting for token`);
token = await waitForTokenRefresh();
console.log(`request to ${request.url} waited for token:`, token);
}
if (!token) {