A social knowledge tool for researchers built on ATProto
at development 1.3 kB view raw
1import { UseCase } from 'src/shared/core/UseCase'; 2import { Result, err, ok } from 'src/shared/core/Result'; 3import { AppError } from 'src/shared/core/AppError'; 4import { ITokenService } from '../services/ITokenService'; 5import { TokenPair } from '../dtos/TokenDTO'; 6import { RefreshAccessTokenErrors } from './errors/RefreshAccessTokenErrors'; 7 8export interface RefreshAccessTokenDTO { 9 refreshToken: string; 10} 11 12export type RefreshAccessTokenResponse = Result< 13 TokenPair, 14 RefreshAccessTokenErrors.InvalidRefreshTokenError | AppError.UnexpectedError 15>; 16 17export class RefreshAccessTokenUseCase 18 implements UseCase<RefreshAccessTokenDTO, Promise<RefreshAccessTokenResponse>> 19{ 20 constructor(private tokenService: ITokenService) {} 21 22 async execute( 23 request: RefreshAccessTokenDTO, 24 ): Promise<RefreshAccessTokenResponse> { 25 try { 26 const tokenResult = await this.tokenService.refreshToken( 27 request.refreshToken, 28 ); 29 30 if (tokenResult.isErr()) { 31 return err(new AppError.UnexpectedError(tokenResult.error)); 32 } 33 34 if (!tokenResult.value) { 35 return err(new RefreshAccessTokenErrors.InvalidRefreshTokenError()); 36 } 37 38 return ok(tokenResult.value); 39 } catch (error: any) { 40 return err(new AppError.UnexpectedError(error)); 41 } 42 } 43}