diff --git a/src/services/token.ts b/src/services/token.ts index 223ee52..10e7ee5 100644 --- a/src/services/token.ts +++ b/src/services/token.ts @@ -60,28 +60,34 @@ export default class TokenService { console.error('Erreur de validation du token:', error); return false; } - - return true; } - removeToken(token: string): void { - this.tokens.delete(token); - this.saveTokensToStorage(); - } - - cleanExpiredTokens(): void { - const now = Date.now(); - let hasExpired = false; - - for (const [token, data] of this.tokens.entries()) { - if (data.expiration < now) { - this.tokens.delete(token); - hasExpired = true; + async refreshAccessToken(refreshToken: string, origin: string): Promise { + try { + // Vérifier si le refresh token est valide + const isValid = await this.validateToken(refreshToken, origin); + if (!isValid) { + return null; } - } - - if (hasExpired) { - this.saveTokensToStorage(); + + // Vérifier le type du token + const secret = new Uint8Array(this.encoder.encode(this.SECRET_KEY)); + const { payload } = await jose.jwtVerify(refreshToken, secret); + if (payload.type !== 'refresh') { + return null; + } + + // Générer un nouveau access token + const newAccessToken = await new jose.SignJWT({ origin, type: 'access' }) + .setProtectedHeader({ alg: 'HS256' }) + .setIssuedAt() + .setExpirationTime(this.ACCESS_TOKEN_EXPIRATION) + .sign(secret); + + return newAccessToken; + } catch (error) { + console.error('Erreur lors du refresh du token:', error); + return null; } } } \ No newline at end of file