import {z} from 'zod' export type GetApiCreditorAgentsIcaPaymentAcceptancesInstructionIdentificationArgs = {ica: string, instruction_identification: string}; export type GetApiCreditorAgentsIcaPaymentAcceptancesInstructionIdentificationOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const debtorPostalAddress = z.object({streetName: z.string().min(1).max(140).optional(), postalCode: z.string().min(1).max(16).optional(), townName: z.string().min(1).max(140).optional(), countrySubDivision: z.string().min(1).max(35).optional(), country: z.string().min(2).max(2).optional()}); export const debtorOrganisationSchemeName = z.object({code: z.enum(["PRID", "TXID", "BANK", "CBID", "COID", "DUNS"]).min(4).max(4).optional()}); export const debtorOrganisationIdentificationArr = z.object({identification: z.string().min(1).max(256).optional(), issuer: z.string().min(1).max(35).optional(), schemeName: debtorOrganisationSchemeName.optional()}); export const debtorOrganisationIdentification = z.object({anyBIC: z.string().optional(), lei: z.string().optional(), other: z.array(debtorOrganisationIdentificationArr).optional()}); export const debtorIdentification = z.object({organisationIdentification: debtorOrganisationIdentification.optional()}); export const debtor = z.object({name: z.string().min(1).max(140).optional(), postalAddress: debtorPostalAddress.optional(), identification: debtorIdentification.optional()}); export const debtorAccountSchemeName = z.object({code: z.string().min(1).max(4).optional()}); export const debtorAccountIdentificationArr = z.object({identification: z.string().min(1).max(34).optional(), schemeName: debtorAccountSchemeName.optional(), issuer: z.string().min(1).max(35).optional()}); export const debtorAccountIdentification = z.object({other: z.array(debtorAccountIdentificationArr).optional()}); export const debtorAccountType = z.object({code: z.string().min(4).max(4)}); export const debtorAccount = z.object({identification: debtorAccountIdentification, type: debtorAccountType.optional(), currency: z.string().min(3).max(3).optional(), name: z.string().min(1).max(70).optional()}); export const paymentIdentification = z.object({instructionIdentification: z.string().optional(), endToEndIdentification: z.string().min(1).max(35), uetr: z.string().min(1).max(36).optional()}); export const instructedAmount = z.object({currency: z.string().min(3).max(3).optional(), amount: z.number().optional()}); export const amount = z.object({instructedAmount: instructedAmount.optional()}); export const exchangeRateInformation = z.object({unitCurrency: z.string().min(3).max(3).optional(), exchangeRate: z.number().optional(), rateType: z.string().min(4).max(4).optional(), contractIdentification: z.string().min(1).max(35).optional()}); export const creditorPostalAddress = z.object({streetName: z.string().min(1).max(140).optional(), postalCode: z.string().min(1).max(16).optional(), townName: z.string().min(1).max(140).optional(), countrySubDivision: z.string().min(1).max(35).optional(), country: z.string().min(2).max(2).optional()}); export const creditorOrganisationSchemeName = z.object({code: z.enum(["PRID", "EMAL"]).min(4).max(4).optional()}); export const creditorOrganisationIdentificationArr = z.object({identification: z.string().min(1).max(256).optional(), issuer: z.string().min(1).max(35).optional(), schemeName: creditorOrganisationSchemeName.optional()}); export const creditorOrganisationIdentification = z.object({anyBIC: z.string().optional(), lei: z.string().optional(), other: z.array(creditorOrganisationIdentificationArr).optional()}); export const creditorIdentification = z.object({organisationIdentification: creditorOrganisationIdentification.optional()}); export const creditor = z.object({name: z.string().min(1).max(140).optional(), postalAddress: creditorPostalAddress.optional(), identification: creditorIdentification.optional()}); export const totalTaxAmount = z.object({currency: z.string().min(3).max(3).optional(), amount: z.number().optional()}); export const tax = z.object({totalTaxAmount: totalTaxAmount.optional()}); export const relatedRemittancePostalAddress = z.object({streetName: z.string().min(1).max(140).optional(), postalCode: z.string().min(1).max(16).optional(), townName: z.string().min(1).max(140).optional(), countrySubDivision: z.string().min(1).max(35).optional(), country: z.string().min(2).max(2).optional()}); export const remittanceLocationDetails = z.object({method: z.enum(["FAXI", "EDIC", "URID", "EMAL", "POST", "SMSM"]).min(4).max(4), electronicAddress: z.string().min(1).max(2048).optional(), name: z.string().min(1).max(140), postalAddress: relatedRemittancePostalAddress}); export const relatedRemittanceInformation = z.object({remittanceIdentification: z.string().min(1).max(35).optional(), remittanceLocationDetails: z.array(remittanceLocationDetails).optional()}); export const referredDocumentType = z.object({code: z.enum(["CINV", "PUOR", "CREN", "BREF", "CLAM"]).min(4).max(4)}); export const relatedDateType = z.object({code: z.enum(["INDA", "PADD"]).min(4).max(4)}); export const relatedDate = z.object({date: z.string().min(1).max(30).optional(), type: relatedDateType.optional()}); export const lineDetailsIdentificationType = z.object({code: z.enum(["ADPI", "AISB", "ASNB", "CTNB", "DBSP", "EANN", "EINB", "GSNB", "HIBC", "ISBN", "LTNB", "MDNB", "PRNB", "PTCD", "SKNB", "STNB", "TONB", "UPCC", "UPNB"]).min(4).max(4), issuer: z.string().min(1).max(35).optional()}); export const lineDetailsIdentification = z.object({number: z.string().min(1).max(35).optional(), type: lineDetailsIdentificationType.optional(), relatedDate: z.string().min(1).max(30).optional()}); export const lineDetailsAmountType = z.object({code: z.enum(["APDS", "STDS", "TMDS", "CREN", "CITY", "CNTY", "LOCL", "PROV", "STAT", "STAX", "PRTL", "WTHL", "DUPA", "REMI"]).min(4).max(4)}); export const lineDetailsAmountandType = z.object({type: lineDetailsAmountType.optional(), currency: z.string().min(3).max(3).optional(), amount: z.number().optional()}); export const lineDetailsAdjustmentAmountAndReason = z.object({currency: z.string().min(3).max(3), amount: z.number(), creditDebitIndicator: z.string().min(4).max(4).optional(), reason: z.enum(["INCORRECT_AMOUNT", "DISC_EARLY_PAY", "DISC_TAX_EXEMPT", "DISC_SALES", "DAMAGED_GOODS", "LATE_GOODS", "LATE_SERVICE", "FEES", "PREV_PAY_AMT", "PARTIAL_PAY"]).min(1).max(20).optional(), additionalInformation: z.string().min(1).max(140).optional()}); export const lineDetailsAmount = z.object({remittanceAmountandType: z.array(lineDetailsAmountandType).optional(), adjustmentAmountAndReason: z.array(lineDetailsAdjustmentAmountAndReason).optional()}); export const lineDetails = z.object({identification: z.array(lineDetailsIdentification), description: z.string().min(1).max(2048).optional(), amount: lineDetailsAmount.optional()}); export const referredDocumentInformation = z.object({number: z.string().min(1).max(35).optional(), type: referredDocumentType.optional(), relatedDate: z.array(relatedDate).optional(), lineDetails: z.array(lineDetails).optional()}); export const referredDocumentRemittanceType = z.object({code: z.enum(["APDS", "STDS", "TMDS", "CREN", "CITY", "CNTY", "LOCL", "PROV", "STAT", "DUPA", "REMI"]).min(4).max(4)}); export const remittanceAmountandType = z.object({type: referredDocumentRemittanceType.optional(), currency: z.string().min(3).max(3).optional(), amount: z.number().optional()}); export const adjustmentAmountAndReason = z.object({currency: z.string().min(3).max(3), amount: z.number(), creditDebitIndicator: z.string().min(4).max(4).optional(), reason: z.enum(["INCORRECT_AMOUNT", "DISC_EARLY_PAY", "DISC_TAX_EXEMPT", "DISC_SALES", "DAMAGED_GOODS", "LATE_GOODS", "LATE_SERVICE", "FEES", "PREV_PAY_AMT", "PARTIAL_PAY"]).min(1).max(20).optional(), additionalInformation: z.string().min(1).max(140).optional()}); export const referredDocumentAmount = z.object({remittanceAmountandType: z.array(remittanceAmountandType).optional(), adjustmentAmountAndReason: z.array(adjustmentAmountAndReason).optional()}); export const creditorReferenceInformationType = z.object({code: z.enum(["DISP", "FXDR", "PUOR", "RPIN", "RADM", "SCOR"]).min(4).max(4).optional(), issuer: z.string().min(1).max(35).optional()}); export const creditorReferenceInformation = z.object({reference: z.string().min(1).max(35).optional(), type: creditorReferenceInformationType.optional()}); export const invoicerPostalAddress = z.object({streetName: z.string().min(1).max(140).optional(), postalCode: z.string().min(1).max(16).optional(), townName: z.string().min(1).max(140).optional(), countrySubDivision: z.string().min(1).max(35).optional(), country: z.string().min(2).max(2).optional()}); export const invoicerSchemeName = z.object({code: z.enum(["CUST", "TXID", "BANK", "CBID", "COID", "DUNS"]).min(4).max(4).optional()}); export const invoicerOrganisationIdentificationArr = z.object({identification: z.string().min(1).max(256).optional(), issuer: z.string().min(1).max(35).optional(), schemeName: invoicerSchemeName.optional()}); export const invoicerOrganisationIdentification = z.object({anyBIC: z.string().optional(), lei: z.string().optional(), other: z.array(invoicerOrganisationIdentificationArr).optional()}); export const invoicerIdentification = z.object({organisationIdentification: invoicerOrganisationIdentification.optional()}); export const invoicer = z.object({name: z.string().min(1).max(140).optional(), postalAddress: invoicerPostalAddress.optional(), identification: invoicerIdentification.optional()}); export const invoiceePostalAddress = z.object({streetName: z.string().min(1).max(140).optional(), postalCode: z.string().min(1).max(16).optional(), townName: z.string().min(1).max(140).optional(), countrySubDivision: z.string().min(1).max(35).optional(), country: z.string().min(2).max(2).optional()}); export const invoiceeSchemeName = z.object({code: z.enum(["CUST", "TXID", "BANK", "CBID", "COID", "DUNS"]).min(4).max(4).optional()}); export const invoiceeOrganisationIdentificationArr = z.object({identification: z.string().min(1).max(256).optional(), issuer: z.string().min(1).max(35).optional(), schemeName: invoiceeSchemeName.optional()}); export const invoiceeOrganisationIdentification = z.object({anyBIC: z.string().optional(), lei: z.string().optional(), other: z.array(invoiceeOrganisationIdentificationArr).optional()}); export const invoiceeIdentification = z.object({organisationIdentification: invoiceeOrganisationIdentification.optional()}); export const invoicee = z.object({name: z.string().min(1).max(140).optional(), postalAddress: invoiceePostalAddress.optional(), identification: invoiceeIdentification.optional()}); export const structured = z.object({referredDocumentInformation: z.array(referredDocumentInformation).optional(), referredDocumentAmount: referredDocumentAmount.optional(), creditorReferenceInformation: creditorReferenceInformation.optional(), invoicer: invoicer.optional(), invoicee: invoicee.optional(), additionalRemittanceInformation: z.array(z.string().min(1).max(140)).optional()}); export const remittanceInformation = z.object({unstructured: z.array(z.string().min(1).max(140)).optional(), structured: z.array(structured).optional()}); export const cardHolderAddress = z.object({streetName: z.string().min(1).max(140).optional(), postalCode: z.string().min(1).max(16).optional(), townName: z.string().min(1).max(140).optional(), countrySubDivision: z.string().min(1).max(35).optional(), country: z.string().min(2).max(2).optional()}); export const additionalCardDetails = z.object({validFrom: z.string().optional(), validTo: z.string().optional()}); export const cardDetails = z.object({pan: z.string().min(1).max(28).optional(), expiryDate: z.string().optional(), cvv: z.string().min(3).max(4).optional(), cardholderName: z.string().min(1).max(140).optional(), currency: z.string().min(3).max(3).optional(), cardholderAddress: cardHolderAddress.optional(), additionalCardDetails: additionalCardDetails.optional()}); export const chargesType = z.object({code: z.string().min(1).max(10)}); export const chargesInformation = z.object({currency: z.string().min(3).max(3).optional(), type: chargesType.optional(), amount: z.number().optional()}); export const envelope = z.object({cardDetails: cardDetails, chargesInformation: z.array(chargesInformation).optional()}); export const supplementaryData = z.object({envelope: envelope}); export const creditTransferTransactionInformation = z.object({paymentIdentification: paymentIdentification.optional(), amount: amount, exchangeRateInformation: exchangeRateInformation.optional(), chargeBearer: z.string().min(4).max(4).optional(), creditor: creditor, tax: tax.optional(), relatedRemittanceInformation: z.array(relatedRemittanceInformation).optional(), remittanceInformation: remittanceInformation.optional(), supplementaryData: supplementaryData}); export const paymentInformation = z.object({paymentInformationIdentification: z.string().min(1).max(35), paymentMethod: z.literal("CARD").min(1).max(4), requestedExecutionDate: z.string().min(1).max(30), debtor: debtor, debtorAccount: debtorAccount, creditTransferTransactionInformation: creditTransferTransactionInformation}); export const statusReasonInformation = z.object({description: z.string().min(1).max(255).optional(), reasonCode: z.string().min(1).max(100).optional()}); export const pICustomerCreditTransferInitiationPaymentStatus = z.object({status: z.enum(["RECEIVED", "ACCEPTED", "PENDING", "SUBMITTED", "APPROVED", "DECLINED", "REJECTED", "CANCELLATION_REQUESTED", "CANCELLATION_ACCEPTED", "CANCELLATION_REJECTED", "CANCELLED", "SETTLED"]).min(1).max(30).optional(), statusReasonInformation: z.array(statusReasonInformation).optional()}); export const settlementTimeIndication = z.object({creditDateTime: z.string().min(1).max(30).optional(), debitDateTime: z.string().min(1).max(30).optional()}); export const transactionIdentification = z.object({approvalCode: z.string().min(1).max(255).optional(), retrievalReferenceNumber: z.string().min(1).max(12).optional(), transactionReference: z.string().min(1).max(35).optional(), transactionDateTime: z.string().min(1).max(30).optional()}); export const pICustomerCreditTransferInitiation = z.object({paymentInformation: paymentInformation.optional(), paymentStatus: pICustomerCreditTransferInitiationPaymentStatus.optional(), settlementTimeIndication: settlementTimeIndication.optional(), transactionIdentification: transactionIdentification.optional(), createdDate: z.string().min(1).max(30).optional(), updatedDate: z.string().min(1).max(30).optional()}); 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 }; /** * Get Payment Instruction for a Creditor Agent * * GET /creditor-agents/{ica}/payment-acceptances/{instruction_identification} */ export const getApiCreditorAgentsIcaPaymentAcceptancesInstructionIdentification = async (args: GetApiCreditorAgentsIcaPaymentAcceptancesInstructionIdentificationArgs, options?: GetApiCreditorAgentsIcaPaymentAcceptancesInstructionIdentificationOptions) => { const {baseUrl = "https://api.mastercard.com/commercial/payments", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/creditor-agents/${encodeURIComponent(String(args.ica))}/payment-acceptances/${encodeURIComponent(String(args.instruction_identification))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(pICustomerCreditTransferInitiation, await res.json()) };