A social knowledge tool for researchers built on ATProto
at development 48 lines 1.4 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 { GenerateExtensionTokensErrors } from './errors/GenerateExtensionTokensErrors'; 7 8export interface GenerateExtensionTokensRequest { 9 userDid: string; 10} 11 12export type GenerateExtensionTokensResponse = Result< 13 TokenPair, 14 GenerateExtensionTokensErrors.TokenGenerationError | AppError.UnexpectedError 15>; 16 17export class GenerateExtensionTokensUseCase 18 implements 19 UseCase< 20 GenerateExtensionTokensRequest, 21 Promise<GenerateExtensionTokensResponse> 22 > 23{ 24 constructor(private tokenService: ITokenService) {} 25 26 async execute( 27 request: GenerateExtensionTokensRequest, 28 ): Promise<GenerateExtensionTokensResponse> { 29 try { 30 // Generate new tokens for the authenticated user 31 const tokenResult = await this.tokenService.generateToken( 32 request.userDid, 33 ); 34 35 if (tokenResult.isErr()) { 36 return err( 37 new GenerateExtensionTokensErrors.TokenGenerationError( 38 tokenResult.error.message, 39 ), 40 ); 41 } 42 43 return ok(tokenResult.value); 44 } catch (error: any) { 45 return err(new AppError.UnexpectedError(error)); 46 } 47 } 48}