A social knowledge tool for researchers built on ATProto
at development 1.2 kB view raw
1import { Result, ok, err } from 'src/shared/core/Result'; 2import { 3 ITokenRepository, 4 RefreshToken, 5} from '../../domain/repositories/ITokenRepository'; 6 7export class InMemoryTokenRepository implements ITokenRepository { 8 private tokens: Map<string, RefreshToken> = new Map(); 9 10 async saveRefreshToken(token: RefreshToken): Promise<Result<void>> { 11 try { 12 this.tokens.set(token.refreshToken, token); 13 return ok(undefined); 14 } catch (error: any) { 15 return err(error); 16 } 17 } 18 19 async findRefreshToken( 20 refreshToken: string, 21 ): Promise<Result<RefreshToken | null>> { 22 try { 23 const token = this.tokens.get(refreshToken); 24 if (!token || token.revoked) { 25 return ok(null); 26 } 27 return ok(token); 28 } catch (error: any) { 29 return err(error); 30 } 31 } 32 33 async revokeRefreshToken(refreshToken: string): Promise<Result<void>> { 34 try { 35 const token = this.tokens.get(refreshToken); 36 if (token) { 37 token.revoked = true; 38 this.tokens.set(refreshToken, token); 39 } 40 return ok(undefined); 41 } catch (error: any) { 42 return err(error); 43 } 44 } 45 46 // Helper method for testing 47 clear(): void { 48 this.tokens.clear(); 49 } 50}