import { ININVerificationService, NINVerificationRequest, NINWithFaceVerificationRequest, NINSlipVerificationRequest, VirtualNINVerificationRequest, NINVerificationData, VerificationResponse, } from 'porkate-valid8'; import { BaseIdentityPassService } from './base.service'; /** * IdentityPass NIN Verification Service */ export class IdentityPassNINService extends BaseIdentityPassService implements ININVerificationService { /** * Verify NIN (National Identification Number) - Basic * @see https://docs.prembly.com/reference/nin-and-virtual-nin */ async verifyNIN( data: NINVerificationRequest, ): Promise> { return this.makeRequest( '/verification/vnin', { number_nin: data?.nin, }, this.mapNINData, ); } /** * Verify NIN with face matching * @see https://docs.prembly.com/docs/nin-with-face-copy */ async verifyNINWithFace( data: NINWithFaceVerificationRequest, ): Promise> { return this.makeRequest( '/verification/nin_w_face', { number: data?.nin, image: data?.image, }, this.mapNINData, ); } /** * Verify NIN Slip * @see https://docs.prembly.com/reference/nin-and-virtual-nin */ async verifyNINSlip( data: NINSlipVerificationRequest, ): Promise> { return this.makeRequest( '/verification/nin_slip', { number: data?.nin, slip_number: data?.slipNumber, }, this.mapNINData, ); } /** * Verify Virtual NIN - Basic * @see https://docs.prembly.com/docs/national-id-basic-1 */ async verifyVirtualNIN( data: VirtualNINVerificationRequest, ): Promise> { return this.makeRequest( '/verification/vnin-basic', { number: data?.virtualNin, }, this.mapNINData, ); } /** * Map NIN API response to NINVerificationData * Handles various response field formats from Prembly API */ private mapNINData( verificationData: Record, payload: Record, ): NINVerificationData { return { nin: (verificationData?.nin as string) || (verificationData?.number as string) || (payload?.number_nin as string) || (payload?.number as string), firstName: (verificationData?.firstname as string) || (verificationData?.firstName as string) || (verificationData?.pfirstname as string) || '', lastName: (verificationData?.surname as string) || (verificationData?.lastname as string) || (verificationData?.lastName as string) || (verificationData?.psurname as string) || '', middleName: (verificationData?.middlename as string) || (verificationData?.middleName as string) || (verificationData?.pmiddlename as string), dateOfBirth: (verificationData?.birthdate as string) || (verificationData?.dob as string) || (verificationData?.dateOfBirth as string) || '', gender: (verificationData?.gender as string) || '', phoneNumber: (verificationData?.telephoneno as string) || (verificationData?.phoneNumber as string), address: (verificationData?.residence_address as string) || (verificationData?.residentialAddress as string) || (verificationData?.address as string), photo: verificationData?.photo as string, maritalStatus: (verificationData?.maritalstatus as string) || (verificationData?.maritalStatus as string), nationality: verificationData?.nationality as string, stateOfOrigin: (verificationData?.birthstate as string) || (verificationData?.self_origin_state as string) || (verificationData?.stateOfOrigin as string), lga: (verificationData?.birthlga as string) || (verificationData?.self_origin_lga as string) || (verificationData?.lga as string), title: verificationData?.title as string, birthCountry: verificationData?.birthcountry as string, email: verificationData?.email as string, employmentStatus: verificationData?.employmentstatus as string, height: verificationData?.heigth as number, educationalLevel: verificationData?.educationallevel as string, profession: verificationData?.profession as string, religion: verificationData?.religion as string, residenceStatus: verificationData?.residencestatus as string, residenceState: verificationData?.residence_state as string, residenceLga: verificationData?.residence_lga as string, residenceTown: verificationData?.residence_town as string, selfOriginPlace: verificationData?.self_origin_place as string, spokenLanguage: (verificationData?.spoken_language as string) || (verificationData?.ospokenlang as string), signature: verificationData?.signature as string, trackingId: verificationData?.trackingId as string, ...verificationData, }; } }