ekyc

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

customer_info.ts (1746B)


      1 import {
      2   CustomerInfoRequest,
      3   CustomerInfoResponse,
      4   CustomerInfoUseCase,
      5 } from "#core/application/customer_info.ts";
      6 import { AuthDto } from "#infrastructure/memory/mapper/auth.ts";
      7 import { IDDocumentDto } from "#infrastructure/memory/mapper/id_document.ts";
      8 import { PhoneEKYCDto } from "#infrastructure/memory/mapper/phone.ts";
      9 
     10 export class MemoryCustomerInfoAdapter implements CustomerInfoUseCase {
     11   constructor(
     12     private readonly authEntities: Map<string, AuthDto>,
     13     private readonly phoneEntities: Map<string, PhoneEKYCDto>,
     14     private readonly idDocumentEntities: Map<string, IDDocumentDto>,
     15   ) {
     16   }
     17 
     18   execute(request: CustomerInfoRequest): CustomerInfoResponse {
     19     const auth = Array.from(this.authEntities.values())
     20       .find((i) => i.uuid === request.uuid);
     21     const phone = Array.from(this.phoneEntities.values())
     22       .find((i) => i.uuid === request.uuid);
     23     const idDocument = Array.from(this.idDocumentEntities.values())
     24       .find((i) => i.uuid === request.uuid);
     25 
     26     return {
     27       exists: Boolean(auth || phone || idDocument),
     28       uuid: auth?.uuid ?? phone?.uuid ?? idDocument?.uuid ?? null,
     29       email: auth?.email ?? null,
     30       emailVerified: auth?.emailVerified ?? false,
     31       phoneNumber: phone?.phoneNumber ?? null,
     32       phoneNumberVerified: phone?.phoneNumberVerified ?? false,
     33       firstName: idDocument?.firstName ?? null,
     34       lastName: idDocument?.lastName ?? null,
     35       birthDate: idDocument?.birthDate ?? null,
     36       sex: idDocument?.sex ?? null,
     37       nationality: idDocument?.nationality ?? null,
     38       country: idDocument?.country ?? null,
     39       idDocumentVerified: idDocument?.state === "approved",
     40       idDocumentRegistered: idDocument?.state !== "capturing",
     41     };
     42   }
     43 }