/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as z from "zod/v3"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; import { Amount, Amount$inboundSchema, Amount$Outbound, Amount$outboundSchema, } from "./amount.js"; import { CreatePaymentLinkLineItems, CreatePaymentLinkLineItems$inboundSchema, CreatePaymentLinkLineItems$Outbound, CreatePaymentLinkLineItems$outboundSchema, } from "./createpaymentlinklineitems.js"; import { PaymentLinkCustomerOptions, PaymentLinkCustomerOptions$inboundSchema, PaymentLinkCustomerOptions$Outbound, PaymentLinkCustomerOptions$outboundSchema, } from "./paymentlinkcustomeroptions.js"; import { PaymentLinkDisplayOptions, PaymentLinkDisplayOptions$inboundSchema, PaymentLinkDisplayOptions$Outbound, PaymentLinkDisplayOptions$outboundSchema, } from "./paymentlinkdisplayoptions.js"; import { PaymentLinkPaymentDetails, PaymentLinkPaymentDetails$inboundSchema, PaymentLinkPaymentDetails$Outbound, PaymentLinkPaymentDetails$outboundSchema, } from "./paymentlinkpaymentdetails.js"; import { PaymentLinkPayoutDetails, PaymentLinkPayoutDetails$inboundSchema, PaymentLinkPayoutDetails$Outbound, PaymentLinkPayoutDetails$outboundSchema, } from "./paymentlinkpayoutdetails.js"; /** * Request to create a new payment link. * * @remarks * * A payment link must include either `payment` or `payout` details, but not both. For payout payment links, * `maxUses` will automatically be set to 1, as these are intended for a one-time disbursement * to a specific recipient. */ export type CreatePaymentLink = { /** * The partner's Moov account ID. */ partnerAccountID: string; /** * The merchant's preferred payment method ID. Must be a wallet payment method. */ merchantPaymentMethodID: string; amount: Amount; salesTaxAmount?: Amount | undefined; /** * An optional limit on the number of times this payment link can be used. * * @remarks * * **For payouts, `maxUses` is always 1.** */ maxUses?: number | undefined; /** * An optional expiration date for this payment link. */ expiresOn?: Date | undefined; /** * Customizable display options for a payment link. */ display: PaymentLinkDisplayOptions; customer?: PaymentLinkCustomerOptions | undefined; /** * Options for payment links used to collect payment. */ payment?: PaymentLinkPaymentDetails | undefined; payout?: PaymentLinkPayoutDetails | undefined; /** * An optional collection of line items for a payment link. * * @remarks * When line items are provided, their total plus sales tax must equal the payment link amount. */ lineItems?: CreatePaymentLinkLineItems | undefined; }; /** @internal */ export const CreatePaymentLink$inboundSchema: z.ZodType< CreatePaymentLink, z.ZodTypeDef, unknown > = z.object({ partnerAccountID: z.string(), merchantPaymentMethodID: z.string(), amount: Amount$inboundSchema, salesTaxAmount: Amount$inboundSchema.optional(), maxUses: z.number().int().optional(), expiresOn: z.string().datetime({ offset: true }).transform(v => new Date(v)) .optional(), display: PaymentLinkDisplayOptions$inboundSchema, customer: PaymentLinkCustomerOptions$inboundSchema.optional(), payment: PaymentLinkPaymentDetails$inboundSchema.optional(), payout: PaymentLinkPayoutDetails$inboundSchema.optional(), lineItems: CreatePaymentLinkLineItems$inboundSchema.optional(), }); /** @internal */ export type CreatePaymentLink$Outbound = { partnerAccountID: string; merchantPaymentMethodID: string; amount: Amount$Outbound; salesTaxAmount?: Amount$Outbound | undefined; maxUses?: number | undefined; expiresOn?: string | undefined; display: PaymentLinkDisplayOptions$Outbound; customer?: PaymentLinkCustomerOptions$Outbound | undefined; payment?: PaymentLinkPaymentDetails$Outbound | undefined; payout?: PaymentLinkPayoutDetails$Outbound | undefined; lineItems?: CreatePaymentLinkLineItems$Outbound | undefined; }; /** @internal */ export const CreatePaymentLink$outboundSchema: z.ZodType< CreatePaymentLink$Outbound, z.ZodTypeDef, CreatePaymentLink > = z.object({ partnerAccountID: z.string(), merchantPaymentMethodID: z.string(), amount: Amount$outboundSchema, salesTaxAmount: Amount$outboundSchema.optional(), maxUses: z.number().int().optional(), expiresOn: z.date().transform(v => v.toISOString()).optional(), display: PaymentLinkDisplayOptions$outboundSchema, customer: PaymentLinkCustomerOptions$outboundSchema.optional(), payment: PaymentLinkPaymentDetails$outboundSchema.optional(), payout: PaymentLinkPayoutDetails$outboundSchema.optional(), lineItems: CreatePaymentLinkLineItems$outboundSchema.optional(), }); export function createPaymentLinkToJSON( createPaymentLink: CreatePaymentLink, ): string { return JSON.stringify( CreatePaymentLink$outboundSchema.parse(createPaymentLink), ); } export function createPaymentLinkFromJSON( jsonString: string, ): SafeParseResult { return safeParse( jsonString, (x) => CreatePaymentLink$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreatePaymentLink' from JSON`, ); }