/** * TokenStorage - Service de gestion du stockage des tokens dans localStorage * T0169: Service simple pour stocker, récupérer et supprimer les tokens d'authentification * * IMPORTANT: Pour les tests E2E, le token peut être en mémoire Zustand mais pas encore * synchronisé avec localStorage. Cette classe vérifie d'abord localStorage, puis essaie * de récupérer depuis le store Zustand si disponible. */ const ACCESS_TOKEN_KEY = 'veza_access_token'; const REFRESH_TOKEN_KEY = 'veza_refresh_token'; /** * Classe TokenStorage pour gérer le stockage des tokens * T0169: Service de gestion du stockage tokens avec localStorage */ export class TokenStorage { /** * Stocke les tokens d'authentification dans localStorage * T0169: Stocke access token et refresh token * @param accessToken - Token d'accès JWT * @param refreshToken - Token de rafraîchissement */ static setTokens(accessToken: string, refreshToken: string): void { localStorage.setItem(ACCESS_TOKEN_KEY, accessToken); localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken); } /** * Récupère le token d'accès depuis localStorage * T0169: Récupère access token * * IMPORTANT: Le token DOIT être stocké dans localStorage via TokenStorage.setTokens() * lors du login. Si le token n'est pas trouvé, c'est que le login n'a pas réussi * ou que les tokens n'ont pas été stockés correctement. * * @returns Token d'accès ou null si non trouvé */ static getAccessToken(): string | null { return localStorage.getItem(ACCESS_TOKEN_KEY); } /** * Récupère le token de rafraîchissement depuis localStorage * T0169: Récupère refresh token * @returns Token de rafraîchissement ou null si non trouvé */ static getRefreshToken(): string | null { return localStorage.getItem(REFRESH_TOKEN_KEY); } /** * Supprime tous les tokens de localStorage * T0169: Supprime tokens (logout) */ static clearTokens(): void { localStorage.removeItem(ACCESS_TOKEN_KEY); localStorage.removeItem(REFRESH_TOKEN_KEY); } /** * Vérifie si des tokens sont présents dans localStorage * T0169: Vérifie la présence des tokens * @returns true si les deux tokens sont présents, false sinon */ static hasTokens(): boolean { return !!this.getAccessToken() && !!this.getRefreshToken(); } }