correjida logica de refresh

ahora si tiene en cuenta el .exp del jwt para saber cuando va a renovar
This commit is contained in:
2025-11-27 21:30:50 -03:00
parent 8d0fab49cd
commit 5a96152410

View File

@@ -27,8 +27,43 @@ if (browser) {
});
}
if (browser) {
const decodeJWT = (token: string) => {
try {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
const jsonPayload = decodeURIComponent(
atob(base64)
.split('')
.map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
.join('')
);
return JSON.parse(jsonPayload);
} catch (error) {
console.error('Error decodificando JWT:', error);
return null;
}
};
const shouldRefreshToken = (sesion: Sesion | null): boolean => {
if (!sesion || !sesion.accessToken) return false;
const decoded = decodeJWT(sesion.accessToken);
if (!decoded || !decoded.exp) return false;
const expirationTime = decoded.exp * 1000;
const currentTime = Date.now();
const timeUntilExpiration = expirationTime - currentTime;
return timeUntilExpiration <= 60 * 1000; // 1 minuto
};
const refreshAccessToken = async () => {
try {
const sesion = get(currentSesion);
if (!shouldRefreshToken(sesion)) return;
console.log('refrescando token');
const response = await fetch(get(apiBase) + '/api/auth/refresh', {
method: 'POST',
headers: {
@@ -46,14 +81,14 @@ if (browser) {
return sesion;
});
} else {
console.error('Error refreshing token:', response.statusText);
console.error('Error refrescando token:', response.statusText);
currentSesion.set(null);
}
} catch (error) {
console.error('Error refreshing token:', error);
console.error('Error refrescando token:', error);
currentSesion.set(null);
}
};
setInterval(refreshAccessToken, 10 * 60 * 1000);
setInterval(refreshAccessToken, 30 * 1000); // Check every 30 seconds
}