ekyc

Electronic KYC process with uploading ID document using OAuth 2.1 (experimental)
Log | Files | Refs | README | LICENSE

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 }