factory.ts (4442B)
1 import { AuthRepository } from "#core/application/authn/auth_repository.ts"; 2 import { 3 AuthEmailChallengeMailer, 4 AuthEmailChallengeUseCase, 5 } from "#core/application/authn/email_challenge.ts"; 6 import { AuthExistsUseCase } from "#core/application/authn/exists.ts"; 7 import { AuthLoginUseCase } from "#core/application/authn/login.ts"; 8 import { AuthLogoutUseCase } from "#core/application/authn/logout.ts"; 9 import { AuthRegisterUseCase } from "#core/application/authn/register.ts"; 10 import { AuthSessionUseCase } from "#core/application/authn/session.ts"; 11 import { AuthVerifyEmailUseCase } from "#core/application/authn/verify_email.ts"; 12 import { CustomerInfoUseCase } from "#core/application/customer_info.ts"; 13 import { AdminRepository } from "#core/application/id_document/admin_repository.ts"; 14 import { IDDocumentApproveUseCase } from "#core/application/id_document/approve.ts"; 15 import { IDDocumentCaptureUseCase } from "#core/application/id_document/capture.ts"; 16 import { IDDocumentDeclineUseCase } from "#core/application/id_document/decline.ts"; 17 import { IDDocumentRepository } from "#core/application/id_document/id_document_repository.ts"; 18 import { IDDocumentListUseCase } from "#core/application/id_document/list.ts"; 19 import { IDDocumentMRZScan } from "#core/application/id_document/mrzscan.ts"; 20 import { OAuth2FlowAuthorizeUseCase } from "#core/application/oauth2/authorize.ts"; 21 import { ClientRepository } from "#core/application/oauth2/client_repository.ts"; 22 import { OAuth2FlowRepository } from "#core/application/oauth2/flow_repository.ts"; 23 import { OAuth2FlowInitiateUseCase } from "#core/application/oauth2/initiate.ts"; 24 import { RateLimitRepository } from "#core/application/oauth2/ratelimit_repository.ts"; 25 import { OAuth2FlowTokenUseCase } from "#core/application/oauth2/token.ts"; 26 import { OAuth2FlowUserInfoUseCase } from "#core/application/oauth2/user_info.ts"; 27 import { OAuth2FlowValidateUseCase } from "#core/application/oauth2/validate.ts"; 28 import { PhoneRepository } from "#core/application/phone/phone_repository.ts"; 29 import { 30 PhoneRegisterUseCase, 31 PhoneSmsChallengeSender, 32 } from "#core/application/phone/register.ts"; 33 import { PhoneVerifySmsUseCase } from "#core/application/phone/verify_sms.ts"; 34 import { IsIDDocumentAdminUseCase } from "#core/application/id_document/is_admin.ts"; 35 36 export type AuthnDependencies = { 37 customerInfo: CustomerInfoUseCase; 38 authRepo: AuthRepository; 39 authEmailChallengeMailer: AuthEmailChallengeMailer; 40 phoneRepo: PhoneRepository; 41 phoneSmsChallengeSender: PhoneSmsChallengeSender; 42 clientRepo: ClientRepository; 43 flowRepo: OAuth2FlowRepository; 44 rateLimitRepo: RateLimitRepository; 45 idDocumentRepo: IDDocumentRepository; 46 idDocumentMRZScan: IDDocumentMRZScan; 47 idDocumentList: IDDocumentListUseCase; 48 adminRepo: AdminRepository; 49 }; 50 51 export function createUseCases(dependencies: AuthnDependencies) { 52 const { 53 authRepo, 54 authEmailChallengeMailer, 55 phoneRepo, 56 phoneSmsChallengeSender, 57 clientRepo, 58 flowRepo, 59 idDocumentRepo, 60 idDocumentMRZScan, 61 rateLimitRepo, 62 adminRepo, 63 customerInfo, 64 } = dependencies; 65 66 return { 67 authExists: new AuthExistsUseCase(authRepo), 68 authRegister: new AuthRegisterUseCase(authRepo), 69 authEmailChallenge: new AuthEmailChallengeUseCase( 70 authRepo, 71 authEmailChallengeMailer, 72 ), 73 authVerifyEmail: new AuthVerifyEmailUseCase(authRepo), 74 authLogin: new AuthLoginUseCase(authRepo), 75 authSession: new AuthSessionUseCase(authRepo), 76 authLogout: new AuthLogoutUseCase(authRepo), 77 78 phoneRegister: new PhoneRegisterUseCase( 79 phoneRepo, 80 phoneSmsChallengeSender, 81 ), 82 83 phoneVerifySms: new PhoneVerifySmsUseCase(phoneRepo), 84 85 idDocumentCapture: new IDDocumentCaptureUseCase( 86 idDocumentRepo, 87 idDocumentMRZScan, 88 ), 89 idDocumentApprove: new IDDocumentApproveUseCase(adminRepo, idDocumentRepo), 90 idDocumentDecline: new IDDocumentDeclineUseCase(adminRepo, idDocumentRepo), 91 isIdDocumentAdmin: new IsIDDocumentAdminUseCase(adminRepo), 92 93 oauth2Validate: new OAuth2FlowValidateUseCase(clientRepo), 94 oauth2Initiate: new OAuth2FlowInitiateUseCase( 95 clientRepo, 96 flowRepo, 97 rateLimitRepo, 98 ), 99 oauth2Authorize: new OAuth2FlowAuthorizeUseCase(clientRepo, flowRepo), 100 oauth2Token: new OAuth2FlowTokenUseCase(clientRepo, flowRepo), 101 oauth2UserInfo: new OAuth2FlowUserInfoUseCase(flowRepo, customerInfo), 102 }; 103 }