A social knowledge tool for researchers built on ATProto
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}