import { Result, ok, err } from 'src/shared/core/Result'; import { ITokenRepository, RefreshToken, } from '../../domain/repositories/ITokenRepository'; export class InMemoryTokenRepository implements ITokenRepository { private tokens: Map = new Map(); async saveRefreshToken(token: RefreshToken): Promise> { try { this.tokens.set(token.refreshToken, token); return ok(undefined); } catch (error: any) { return err(error); } } async findRefreshToken( refreshToken: string, ): Promise> { try { const token = this.tokens.get(refreshToken); if (!token || token.revoked) { return ok(null); } return ok(token); } catch (error: any) { return err(error); } } async revokeRefreshToken(refreshToken: string): Promise> { try { const token = this.tokens.get(refreshToken); if (token) { token.revoked = true; this.tokens.set(refreshToken, token); } return ok(undefined); } catch (error: any) { return err(error); } } // Helper method for testing clear(): void { this.tokens.clear(); } }