import { IPhoneVerificationService, PhoneVerificationRequest, PhoneAdvanceVerificationRequest, PhoneVerificationData, VerificationResponse, } from 'porkate-valid8'; import { BaseIdentityPassService } from './base.service'; /** * IdentityPass Phone Number Verification Service */ export class IdentityPassPhoneService extends BaseIdentityPassService implements IPhoneVerificationService { /** * Verify Phone Number (Basic) * Returns basic information linked to phone number * @see https://docs.prembly.com/docs/basic-phone-number-copy */ async verifyPhoneNumber( data: PhoneVerificationRequest, ): Promise> { return this.makeRequest( '/verification/phone_number', { number: data?.phoneNumber, }, this.mapPhoneData, ); } /** * Verify Phone Number (Advance) * Returns full NIN data linked to phone number * @see https://docs.prembly.com/docs/advance-phone-number-copy */ async verifyPhoneNumberAdvance( data: PhoneAdvanceVerificationRequest, ): Promise> { return this.makeRequest( '/verification/phone_number/advance', { number: data?.phoneNumber, }, this.mapPhoneData, ); } /** * Map Phone API response to PhoneVerificationData * Handles various response field formats from Prembly API */ private mapPhoneData( verificationData: Record, payload: Record, ): PhoneVerificationData { return { phoneNumber: (verificationData?.phone_number as string) || (verificationData?.phoneNumber as string) || (verificationData?.telephoneno as string) || (payload?.number as string) || '', carrier: verificationData?.carrier as string, lineType: (verificationData?.line_type as string) || (verificationData?.lineType as string), status: verificationData?.status as string, ownerName: (verificationData?.owner_name as string) || (verificationData?.ownerName as string), network: verificationData?.network as string, // NIN-related fields from advance endpoint nin: verificationData?.nin 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?.psurname as string), middleName: (verificationData?.middlename as string) || (verificationData?.middleName as string) || (verificationData?.pmiddlename as string), dateOfBirth: (verificationData?.dateOfBirth as string) || (verificationData?.birthdate as string), gender: verificationData?.gender as string, email: verificationData?.email as string, title: verificationData?.title as string, maritalStatus: (verificationData?.maritalstatus as string) || (verificationData?.maritalStatus as string), employmentStatus: (verificationData?.employmentstatus as string) || (verificationData?.employmentStatus as string), educationalLevel: (verificationData?.educationallevel as string) || (verificationData?.educationalLevel as string), profession: verificationData?.profession as string, religion: verificationData?.religion as string, height: verificationData?.heigth as number, // Note: API has typo "heigth" photo: verificationData?.photo as string, signature: verificationData?.signature as string, // Birth location birthCountry: (verificationData?.birthcountry as string) || (verificationData?.birthCountry as string), birthState: (verificationData?.birthstate as string) || (verificationData?.birthState as string), birthLga: (verificationData?.birthlga as string) || (verificationData?.birthLga as string), // Residence information residenceAddress: (verificationData?.residence_address as string) || (verificationData?.residenceAddress as string), residenceTown: (verificationData?.residence_town as string) || (verificationData?.residenceTown as string), residenceLga: (verificationData?.residence_lga as string) || (verificationData?.residenceLga as string), residenceState: (verificationData?.residence_state as string) || (verificationData?.residenceState as string), residenceStatus: (verificationData?.residencestatus as string) || (verificationData?.residenceStatus as string), // Self origin selfOriginLga: (verificationData?.self_origin_lga as string) || (verificationData?.selfOriginLga as string), selfOriginPlace: (verificationData?.self_origin_place as string) || (verificationData?.selfOriginPlace as string), selfOriginState: (verificationData?.self_origin_state as string) || (verificationData?.selfOriginState as string), // Next of Kin (NOK) nokFirstName: (verificationData?.nok_firstname as string) || (verificationData?.nokFirstName as string), nokMiddleName: (verificationData?.nok_middlename as string) || (verificationData?.nokMiddleName as string), nokSurname: (verificationData?.nok_surname as string) || (verificationData?.nokSurname as string), nokAddress1: (verificationData?.nok_address1 as string) || (verificationData?.nokAddress1 as string), nokAddress2: (verificationData?.nok_address2 as string) || (verificationData?.nokAddress2 as string), nokTown: (verificationData?.nok_town as string) || (verificationData?.nokTown as string), nokLga: (verificationData?.nok_lga as string) || (verificationData?.nokLga as string), nokState: (verificationData?.nok_state as string) || (verificationData?.nokState as string), nokPostalCode: (verificationData?.nok_postalcode as string) || (verificationData?.nokPostalCode as string), // Additional fields spokenLanguage: (verificationData?.spoken_language as string) || (verificationData?.spokenLanguage as string) || (verificationData?.ospokenlang as string), trackingId: (verificationData?.trackingId as string) || (verificationData?.tracking_id as string), ...verificationData, }; } }