import { IPassportVerificationService, PassportVerificationRequest, PassportWithFaceVerificationRequest, PassportImageVerificationRequest, PassportVerificationData, VerificationResponse, } from 'porkate-valid8'; import { BaseIdentityPassService } from './base.service'; /** * IdentityPass International Passport Verification Service */ export class IdentityPassPassportService extends BaseIdentityPassService implements IPassportVerificationService { /** * Verify International Passport * @see https://docs.prembly.com/docs/international-passport-copy */ async verifyPassport( data: PassportVerificationRequest, ): Promise> { return this.makeRequest( '/verification/national_passport', { number: data?.passportNumber, last_name: data?.lastName, }, this.mapPassportData, ); } /** * Verify International Passport V2 * @see https://docs.prembly.com/docs/passport-version-2-1 */ async verifyPassportV2( data: PassportVerificationRequest, ): Promise> { return this.makeRequest( '/verification/national_passport_v2', { number: data?.passportNumber, last_name: data?.lastName, dob: data?.dateOfBirth, }, this.mapPassportData, ); } /** * Verify International Passport with Face Validation * @see https://docs.prembly.com/docs/international-passport-face-validation-copy */ async verifyPassportWithFace( data: PassportWithFaceVerificationRequest, ): Promise> { return this.makeRequest( '/verification/national_passport_with_face', { number: data?.passportNumber, last_name: data?.lastName, image: data?.image, }, this.mapPassportData, ); } /** * Verify International Passport Image (Extract and Verify) * @see https://docs.prembly.com/docs/international-passport-image-copy */ async verifyPassportImage( data: PassportImageVerificationRequest, ): Promise> { return this.makeRequest( '/verification/national_passport_image', { image: data?.image, }, this.mapPassportData, ); } /** * Map Passport API response to PassportVerificationData * Handles various response field formats from Prembly API */ private mapPassportData( verificationData: Record, payload: Record, ): PassportVerificationData { return { passportNumber: (verificationData?.passport_number as string) || (verificationData?.passportNumber as string) || (verificationData?.number as string) || (verificationData?.currentPassportNumber as string) || (payload?.number as string) || '', firstName: (verificationData?.first_name as string) || (verificationData?.firstname as string) || (verificationData?.firstName as string) || (verificationData?.currentFirstName as string) || '', lastName: (verificationData?.last_name as string) || (verificationData?.lastname as string) || (verificationData?.lastName as string) || (verificationData?.currentLastName as string) || (payload?.last_name as string) || '', middleName: (verificationData?.middle_name as string) || (verificationData?.middlename as string) || (verificationData?.middleName as string) || (verificationData?.currentMiddleName as string), dateOfBirth: (verificationData?.date_of_birth as string) || (verificationData?.dob as string) || (verificationData?.dateOfBirth as string) || (verificationData?.currentDateOfBirthLabel as string) || '', gender: (verificationData?.gender as string) || (verificationData?.currentGender as string), nationality: verificationData?.nationality as string, expiryDate: (verificationData?.expiry_date as string) || (verificationData?.expiryDate as string), issueDate: (verificationData?.issue_date as string) || (verificationData?.issueDate as string) || (verificationData?.issued_date as string), photo: (verificationData?.photo as string) || (verificationData?.image as string), placeOfIssue: (verificationData?.place_of_issue as string) || (verificationData?.placeOfIssue as string) || (verificationData?.issued_at as string), mobile: verificationData?.mobile as string, signature: verificationData?.signature as string, referenceId: (verificationData?.reference_id as string) || (verificationData?.referenceId as string), passportType: (verificationData?.currentPassportType as string) || (verificationData?.passport_type as string), title: (verificationData?.currentTitle as string) || (verificationData?.title as string), placeOfBirth: (verificationData?.currentPlaceOfBirth as string) || (verificationData?.place_of_birth as string), successful: verificationData?.successful as boolean, ...verificationData, }; } }