logout.ts (827B)
1 import { AuthRepository } from "#core/application/authn/auth_repository.ts"; 2 import { ExpiredSessionToken } from "#core/domain/session_token.ts"; 3 import { InvalidToken, Token } from "#core/domain/token.ts"; 4 5 export type AuthLogoutRequest = { 6 sessionToken: string; 7 }; 8 9 export class AuthLogoutUseCase { 10 constructor(private readonly authRepo: AuthRepository) { 11 } 12 13 async execute(request: AuthLogoutRequest): Promise<void> { 14 try { 15 const sessionToken = new Token(request.sessionToken); 16 const auth = await this.authRepo.findBySessionToken(sessionToken); 17 auth.logout(sessionToken); 18 await this.authRepo.store(auth); 19 } catch (error) { 20 if ( 21 error instanceof InvalidToken || 22 error instanceof ExpiredSessionToken 23 ) { 24 return; 25 } 26 throw error; 27 } 28 } 29 }