import {z} from 'zod' export type CreateApiJourneyTaskUpdateArgs = {body: {instanceId: string, taskId: string, intent: 'Save' | 'Complete' | 'Validate', context?: ({subject: {identity?: ({title?: string | undefined, firstName?: string | undefined, middleNames?: Array | undefined, lastNames?: Array | undefined, lastNamesAtBirth?: Array | undefined, aliases?: (Array<{title?: string | undefined, firstName?: string | undefined, middleNames?: Array | undefined, lastNames?: Array | undefined, lastNamesAtBirth?: Array | undefined}>) | undefined, relatedPersons?: (Array<{title?: string | undefined, firstName?: string | undefined, middleNames?: Array | undefined, lastNames?: Array | undefined, lastNamesAtBirth?: Array | undefined, relationship: 'mother' | 'father' | 'maternalGrandFather' | 'maternalGrandMother' | 'paternalGrandFather' | 'paternalGrandMother'}>) | undefined, dateOfBirth?: string | undefined, gender?: string | undefined, currentAddress?: ({lines?: Array | undefined, addressString?: string | undefined, premise?: string | undefined, building?: string | undefined, subBuilding?: string | undefined, thoroughfare?: string | undefined, dependentThoroughfare?: string | undefined, locality?: string | undefined, dependentLocality?: string | undefined, doubleDependentLocality?: string | undefined, postalCode?: string | undefined, postBox?: string | undefined, country?: string | undefined, superAdministrativeArea?: string | undefined, administrativeArea?: string | undefined, subAdministrativeArea?: string | undefined, organization?: string | undefined, location?: ({latitude?: string | undefined, longitude?: string | undefined, geoAccuracy?: string | undefined, what3words?: string | undefined}) | undefined}) | undefined, previousAddresses?: (Array<{lines?: Array | undefined, addressString?: string | undefined, premise?: string | undefined, building?: string | undefined, subBuilding?: string | undefined, thoroughfare?: string | undefined, dependentThoroughfare?: string | undefined, locality?: string | undefined, dependentLocality?: string | undefined, doubleDependentLocality?: string | undefined, postalCode?: string | undefined, postBox?: string | undefined, country?: string | undefined, superAdministrativeArea?: string | undefined, administrativeArea?: string | undefined, subAdministrativeArea?: string | undefined, organization?: string | undefined, location?: ({latitude?: string | undefined, longitude?: string | undefined, geoAccuracy?: string | undefined, what3words?: string | undefined}) | undefined, fromDate: string, toDate: string}>) | undefined, placeOfBirth?: ({lines?: Array | undefined, addressString?: string | undefined, premise?: string | undefined, building?: string | undefined, subBuilding?: string | undefined, thoroughfare?: string | undefined, dependentThoroughfare?: string | undefined, locality?: string | undefined, dependentLocality?: string | undefined, doubleDependentLocality?: string | undefined, postalCode?: string | undefined, postBox?: string | undefined, country?: string | undefined, superAdministrativeArea?: string | undefined, administrativeArea?: string | undefined, subAdministrativeArea?: string | undefined, organization?: string | undefined, location?: ({latitude?: string | undefined, longitude?: string | undefined, geoAccuracy?: string | undefined, what3words?: string | undefined}) | undefined}) | undefined, idNumbers?: (Array<{type: string, idNumber: string, country?: string | undefined}>) | undefined, phones?: Array<{type: string, number: string}> | undefined, emails?: Array<{type: string, email: string}> | undefined, socials?: Array<{type: string, identity: string}> | undefined, mothersMaidenName?: string | undefined}) | undefined, documents?: (Array<{oneDBarcode?: string | undefined, address?: ({addressString?: string | undefined, extractedAddressString?: string | undefined, addressLine1?: string | undefined, addressLine2?: string | undefined, locality?: string | undefined, administrativeArea?: string | undefined, postalCode?: string | undefined}) | undefined, applicationDate?: string | undefined, applicationNumber?: string | undefined, dateOfBirth?: string | undefined, placeOfBirth?: string | undefined, placeOfBirthNative?: string | undefined, bloodType?: string | undefined, controlNumber?: string | undefined, countryCode?: string | undefined, countryName?: string | undefined, documentClassCode?: string | undefined, documentClassName?: string | undefined, documentNumber?: string | undefined, documentSignerCertificate?: string | undefined, employer?: string | undefined, employerAddress?: string | undefined, entries?: string | undefined, expirationDate?: string | undefined, eyeColor?: string | undefined, fathersName?: string | undefined, fathersNameNative?: string | undefined, fathersSurname?: string | undefined, firstName?: string | undefined, fullName?: string | undefined, fullNameNative?: string | undefined, givenName?: string | undefined, givenNameNative?: string | undefined, hairColor?: string | undefined, height?: string | undefined, issueDate?: string | undefined, issuingAuthority?: string | undefined, issuingAuthorityNative?: string | undefined, issuingStateCode?: string | undefined, issuingStateName?: string | undefined, licenseClass?: string | undefined, licenseEndorsements?: string | undefined, licenseRestrictions?: string | undefined, mrz?: string | undefined, mrz1?: string | undefined, mrz2?: string | undefined, mrz3?: string | undefined, middleName?: string | undefined, mothersName?: string | undefined, mothersNameNative?: string | undefined, mothersSurname?: string | undefined, nameSuffix?: string | undefined, nationalityCode?: string | undefined, nationalityName?: string | undefined, nationalityNameNative?: string | undefined, occupation?: string | undefined, organDonor?: boolean | undefined, passportNumber?: string | undefined, permitNumber?: string | undefined, personalNumber?: string | undefined, photo?: string | undefined, photoCompressed?: string | undefined, photoEncoding?: string | undefined, sex?: string | undefined, sexNative?: string | undefined, signature?: string | undefined, signatureCompressed?: string | undefined, signatureEncoding?: string | undefined, socialSecurityNumber?: string | undefined, startDate?: string | undefined, surname?: string | undefined, surnameNative?: string | undefined, visaClass?: string | undefined, visaNumber?: string | undefined, weight?: string | undefined, cardNumber?: string | undefined, issuerCountryCode?: string | undefined, id?: string | undefined, type?: string | undefined, category?: string | undefined, subtype?: string | undefined, format?: string | undefined, device?: ({type?: string | undefined, model?: string | undefined, hasContactlessReader?: boolean | undefined, hasMagneticStripeReader?: boolean | undefined, hasCamera?: boolean | undefined, serialNumber?: string | undefined, manufacturer?: string | undefined}) | undefined, side1Image?: string | undefined, side2Image?: string | undefined, chip?: ({lds: Array<{name: 'COM' | 'SOD' | 'DG1' | 'DG2' | 'DG3' | 'DG4' | 'DG5' | 'DG6' | 'DG7' | 'DG8' | 'DG9' | 'DG10' | 'DG11' | 'DG12' | 'DG13' | 'DG14' | 'DG15', data: string} | {[key: string]: unknown}>, auth: Array<{type: 'ActiveAuthentication' | 'BasicAccessControl' | 'ChipAuthentication' | 'PassiveAuthentication' | 'SupplementalAccessControl' | 'ExtendedAccessControl' | 'TerminalAuthentication', result: 'Success' | 'Failure' | 'Skipped'} | {[key: string]: unknown}>} | {[key: string]: unknown}) | undefined, classification?: ({ids?: Array | undefined, category?: string | undefined, type?: string | undefined, subtype?: string | undefined, isDoubleSided?: boolean | undefined, hasNFC?: boolean | undefined, year?: string | undefined, countryCode?: string | undefined, countryName?: string | undefined, stateCode?: string | undefined, stateName?: string | undefined, sides?: Array<{side: string, id: string, documentQuality: string, documentQualityScore: number}> | undefined}) | undefined, extraction?: ({aggregatedFields?: (Array<{label: string, value: string, source: string, isNonLatin: boolean, regionOfInterest?: ({boundingBox?: {x: number, y: number, width: number, height: number} | undefined, side: string, spectrum?: string | undefined, imageId?: string | undefined}) | undefined}>) | undefined, extractedFields?: (Array<{label: string, details: Array<{label: string, value: string, source: string, isNonLatin: boolean, regionOfInterest?: ({boundingBox?: {x: number, y: number, width: number, height: number} | undefined, side: string, spectrum?: string | undefined, imageId?: string | undefined}) | undefined}>}>) | undefined, extractedImages?: Array<{label: string, side: string, imageID: string}> | undefined}) | undefined, validation?: ({validationChecks?: (Array<{name: string, title: string, info: string, validationResult: string, resultInfo: string, weight: string, regionOfInterests?: (Array<{boundingBox?: {x: number, y: number, width: number, height: number} | undefined, side: string, spectrum?: string | undefined, imageId?: string | undefined}>) | undefined, type: string}>) | undefined, aggregatedValidationChecks?: (Array<{name: string, title: string, info: string, validationResult: string, resultInfo: string, weight: string, regionOfInterests?: (Array<{boundingBox?: {x: number, y: number, width: number, height: number} | undefined, side: string, spectrum?: string | undefined, imageId?: string | undefined}>) | undefined, type: string}>) | undefined}) | undefined, subType?: string | undefined, number?: string | undefined, expiryDate?: string | undefined, subject?: ({title?: string | undefined, firstName?: string | undefined, middleNames?: Array | undefined, lastNames?: Array | undefined, lastNamesAtBirth?: Array | undefined, aliases?: (Array<{title?: string | undefined, firstName?: string | undefined, middleNames?: Array | undefined, lastNames?: Array | undefined, lastNamesAtBirth?: Array | undefined}>) | undefined, relatedPersons?: (Array<{title?: string | undefined, firstName?: string | undefined, middleNames?: Array | undefined, lastNames?: Array | undefined, lastNamesAtBirth?: Array | undefined, relationship: 'mother' | 'father' | 'maternalGrandFather' | 'maternalGrandMother' | 'paternalGrandFather' | 'paternalGrandMother'}>) | undefined, dateOfBirth?: string | undefined, gender?: string | undefined, currentAddress?: ({lines?: Array | undefined, addressString?: string | undefined, premise?: string | undefined, building?: string | undefined, subBuilding?: string | undefined, thoroughfare?: string | undefined, dependentThoroughfare?: string | undefined, locality?: string | undefined, dependentLocality?: string | undefined, doubleDependentLocality?: string | undefined, postalCode?: string | undefined, postBox?: string | undefined, country?: string | undefined, superAdministrativeArea?: string | undefined, administrativeArea?: string | undefined, subAdministrativeArea?: string | undefined, organization?: string | undefined, location?: ({latitude?: string | undefined, longitude?: string | undefined, geoAccuracy?: string | undefined, what3words?: string | undefined}) | undefined}) | undefined, previousAddresses?: (Array<{lines?: Array | undefined, addressString?: string | undefined, premise?: string | undefined, building?: string | undefined, subBuilding?: string | undefined, thoroughfare?: string | undefined, dependentThoroughfare?: string | undefined, locality?: string | undefined, dependentLocality?: string | undefined, doubleDependentLocality?: string | undefined, postalCode?: string | undefined, postBox?: string | undefined, country?: string | undefined, superAdministrativeArea?: string | undefined, administrativeArea?: string | undefined, subAdministrativeArea?: string | undefined, organization?: string | undefined, location?: ({latitude?: string | undefined, longitude?: string | undefined, geoAccuracy?: string | undefined, what3words?: string | undefined}) | undefined, fromDate: string, toDate: string}>) | undefined, placeOfBirth?: ({lines?: Array | undefined, addressString?: string | undefined, premise?: string | undefined, building?: string | undefined, subBuilding?: string | undefined, thoroughfare?: string | undefined, dependentThoroughfare?: string | undefined, locality?: string | undefined, dependentLocality?: string | undefined, doubleDependentLocality?: string | undefined, postalCode?: string | undefined, postBox?: string | undefined, country?: string | undefined, superAdministrativeArea?: string | undefined, administrativeArea?: string | undefined, subAdministrativeArea?: string | undefined, organization?: string | undefined, location?: ({latitude?: string | undefined, longitude?: string | undefined, geoAccuracy?: string | undefined, what3words?: string | undefined}) | undefined}) | undefined, idNumbers?: (Array<{type: string, idNumber: string, country?: string | undefined}>) | undefined, phones?: Array<{type: string, number: string}> | undefined, emails?: Array<{type: string, email: string}> | undefined, socials?: Array<{type: string, identity: string}> | undefined, mothersMaidenName?: string | undefined}) | undefined, country?: string | undefined}>) | undefined, biometrics?: (Array<{id?: string | undefined, type?: string | undefined, face1Image: string, face2Image: string} | {id?: string | undefined, type?: string | undefined, selfieImage: string, anchorImage: string} | {id?: string | undefined, type?: string | undefined, faceImage: string} | {id?: string | undefined, type?: string | undefined, selfieImage: string, selfieImageEncryption?: boolean | undefined}>) | undefined, sessions?: (Array<{user?: {id: string, email: string, domain: string} | undefined, client?: {id: string, ip: string, address: string} | undefined, device?: {id: string, manufacturer: string, model: {identifier: string, name: string}} | undefined, trace?: {id: string} | undefined, span?: {id: string} | undefined, transaction?: {id: string} | undefined, auth?: (Array<{id: string, scope?: string | undefined, codeVerifier?: string | undefined, code?: string | undefined, state?: string | undefined, redirectUri?: string | undefined, responseType?: string | undefined, clientId?: string | undefined, clientSecret?: string | undefined}>) | undefined}>) | undefined, consent?: (Array<{type?: ('rollup' | 'explicit' | 'implicit') | undefined, id?: string | undefined, version?: string | undefined, url: string, effectiveDate?: string | undefined, expiryDate?: string | undefined, terms?: string | undefined, purpose?: string | undefined, legalBasis?: string | undefined, jurisdiction?: string | undefined, subject?: string | undefined, signatory?: string | undefined}>) | undefined, accounts?: (Array<{type: string, accountNumber: string, sortCode?: string | undefined, routingNumber?: string | undefined, iban?: string | undefined, bic?: string | undefined, accountHolderName?: string | undefined, bankName?: string | undefined, country?: string | undefined, accountType?: string | undefined}>) | undefined, uid?: string | undefined}}) | undefined, data?: {[key: string]: unknown} | undefined}}; export type CreateApiJourneyTaskUpdateOptions = {baseUrl?: string | undefined, PingID?: string | undefined, fetch?: typeof fetch | undefined}; export const createApiJourneyTaskUpdateResponse = z.object({instanceId: z.string().min(16).max(64), taskId: z.string().min(16).max(64)}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Put End User Data * * POST /journey/task/update */ export const createApiJourneyTaskUpdate = async (args: CreateApiJourneyTaskUpdateArgs, options?: CreateApiJourneyTaskUpdateOptions) => { const {baseUrl = "https://eu.platform.go.gbgplc.com/v2/captain", fetch: fetchFn = fetch, PingID} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (PingID !== undefined) headers.set('authorization', `Bearer ${PingID}`) const url = `${baseUrl.replace(/\/+$/, '')}/journey/task/update${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiJourneyTaskUpdateResponse, await res.json()) };