/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as z from "zod/v4-mini"; import { remap as remap$ } from "../../lib/primitives.js"; import { CancelImmediatelyInvoicePolicy, CancelImmediatelyInvoicePolicy$outboundSchema, } from "./cancel-immediately-invoice-policy.js"; import { CancellationType, CancellationType$outboundSchema, } from "./cancellation-type.js"; import { ProrationBehavior, ProrationBehavior$outboundSchema, } from "./proration-behavior.js"; export type CancelSubscriptionRequest = { /** * CancelAt is the exact date/time when the subscription should be cancelled. * * @remarks * Required for cancellation_type "scheduled_date"; optional for "immediate" (past dates only — backdated cancellation). * For "scheduled_date", accepts both future dates (deferred cancellation) and past dates (backdated cancellation). * For "immediate", accepts past/current dates only; use "scheduled_date" for future dates. */ cancelAt?: Date | undefined; cancelImmediatelyInovicePolicy?: CancelImmediatelyInvoicePolicy | undefined; cancellationType: CancellationType; prorationBehavior?: ProrationBehavior | undefined; /** * Reason for cancellation (for audit and business intelligence) */ reason?: string | undefined; }; /** @internal */ export type CancelSubscriptionRequest$Outbound = { cancel_at?: string | undefined; cancel_immediately_inovice_policy?: string | undefined; cancellation_type: string; proration_behavior?: string | undefined; reason?: string | undefined; }; /** @internal */ export const CancelSubscriptionRequest$outboundSchema: z.ZodMiniType< CancelSubscriptionRequest$Outbound, CancelSubscriptionRequest > = z.pipe( z.object({ cancelAt: z.optional(z.pipe(z.date(), z.transform(v => v.toISOString()))), cancelImmediatelyInovicePolicy: z.optional( CancelImmediatelyInvoicePolicy$outboundSchema, ), cancellationType: CancellationType$outboundSchema, prorationBehavior: z.optional(ProrationBehavior$outboundSchema), reason: z.optional(z.string()), }), z.transform((v) => { return remap$(v, { cancelAt: "cancel_at", cancelImmediatelyInovicePolicy: "cancel_immediately_inovice_policy", cancellationType: "cancellation_type", prorationBehavior: "proration_behavior", }); }), ); export function cancelSubscriptionRequestToJSON( cancelSubscriptionRequest: CancelSubscriptionRequest, ): string { return JSON.stringify( CancelSubscriptionRequest$outboundSchema.parse(cancelSubscriptionRequest), ); }