/* * 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 { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; import { CustomerCancellationReason, CustomerCancellationReason$inboundSchema, CustomerCancellationReason$outboundSchema, } from "./customercancellationreason.js"; import { MetadataOutputType, MetadataOutputType$inboundSchema, MetadataOutputType$Outbound, MetadataOutputType$outboundSchema, } from "./metadataoutputtype.js"; import { SubscriptionRecurringInterval, SubscriptionRecurringInterval$inboundSchema, SubscriptionRecurringInterval$outboundSchema, } from "./subscriptionrecurringinterval.js"; import { SubscriptionStatus, SubscriptionStatus$inboundSchema, SubscriptionStatus$outboundSchema, } from "./subscriptionstatus.js"; export type OrderSubscription = { metadata: { [k: string]: MetadataOutputType }; /** * Creation timestamp of the object. */ createdAt: Date; /** * Last modification timestamp of the object. */ modifiedAt: Date | null; /** * The ID of the object. */ id: string; /** * The amount of the subscription. */ amount: number; /** * The currency of the subscription. */ currency: string; recurringInterval: SubscriptionRecurringInterval; /** * Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on. */ recurringIntervalCount: number; status: SubscriptionStatus; /** * The start timestamp of the current billing period. */ currentPeriodStart: Date; /** * The end timestamp of the current billing period. */ currentPeriodEnd: Date; /** * The start timestamp of the trial period, if any. */ trialStart: Date | null; /** * The end timestamp of the trial period, if any. */ trialEnd: Date | null; /** * Whether the subscription will be canceled at the end of the current period. */ cancelAtPeriodEnd: boolean; /** * The timestamp when the subscription was canceled. The subscription might still be active if `cancel_at_period_end` is `true`. */ canceledAt: Date | null; /** * The timestamp when the subscription started. */ startedAt: Date | null; /** * The timestamp when the subscription will end. */ endsAt: Date | null; /** * The timestamp when the subscription ended. */ endedAt: Date | null; /** * The ID of the subscribed customer. */ customerId: string; /** * The ID of the subscribed product. */ productId: string; /** * The ID of the applied discount, if any. */ discountId: string | null; checkoutId: string | null; /** * The number of seats for seat-based subscriptions. None for non-seat subscriptions. */ seats?: number | null | undefined; customerCancellationReason: CustomerCancellationReason | null; customerCancellationComment: string | null; }; /** @internal */ export const OrderSubscription$inboundSchema: z.ZodMiniType< OrderSubscription, unknown > = z.pipe( z.object({ metadata: z.record(z.string(), MetadataOutputType$inboundSchema), created_at: z.pipe( z.iso.datetime({ offset: true }), z.transform(v => new Date(v)), ), modified_at: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), id: z.string(), amount: z.int(), currency: z.string(), recurring_interval: SubscriptionRecurringInterval$inboundSchema, recurring_interval_count: z.int(), status: SubscriptionStatus$inboundSchema, current_period_start: z.pipe( z.iso.datetime({ offset: true }), z.transform(v => new Date(v)), ), current_period_end: z.pipe( z.iso.datetime({ offset: true }), z.transform(v => new Date(v)), ), trial_start: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), trial_end: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), cancel_at_period_end: z.boolean(), canceled_at: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), started_at: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), ends_at: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), ended_at: z.nullable( z.pipe(z.iso.datetime({ offset: true }), z.transform(v => new Date(v))), ), customer_id: z.string(), product_id: z.string(), discount_id: z.nullable(z.string()), checkout_id: z.nullable(z.string()), seats: z.optional(z.nullable(z.int())), customer_cancellation_reason: z.nullable( CustomerCancellationReason$inboundSchema, ), customer_cancellation_comment: z.nullable(z.string()), }), z.transform((v) => { return remap$(v, { "created_at": "createdAt", "modified_at": "modifiedAt", "recurring_interval": "recurringInterval", "recurring_interval_count": "recurringIntervalCount", "current_period_start": "currentPeriodStart", "current_period_end": "currentPeriodEnd", "trial_start": "trialStart", "trial_end": "trialEnd", "cancel_at_period_end": "cancelAtPeriodEnd", "canceled_at": "canceledAt", "started_at": "startedAt", "ends_at": "endsAt", "ended_at": "endedAt", "customer_id": "customerId", "product_id": "productId", "discount_id": "discountId", "checkout_id": "checkoutId", "customer_cancellation_reason": "customerCancellationReason", "customer_cancellation_comment": "customerCancellationComment", }); }), ); /** @internal */ export type OrderSubscription$Outbound = { metadata: { [k: string]: MetadataOutputType$Outbound }; created_at: string; modified_at: string | null; id: string; amount: number; currency: string; recurring_interval: string; recurring_interval_count: number; status: string; current_period_start: string; current_period_end: string; trial_start: string | null; trial_end: string | null; cancel_at_period_end: boolean; canceled_at: string | null; started_at: string | null; ends_at: string | null; ended_at: string | null; customer_id: string; product_id: string; discount_id: string | null; checkout_id: string | null; seats?: number | null | undefined; customer_cancellation_reason: string | null; customer_cancellation_comment: string | null; }; /** @internal */ export const OrderSubscription$outboundSchema: z.ZodMiniType< OrderSubscription$Outbound, OrderSubscription > = z.pipe( z.object({ metadata: z.record(z.string(), MetadataOutputType$outboundSchema), createdAt: z.pipe(z.date(), z.transform(v => v.toISOString())), modifiedAt: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), id: z.string(), amount: z.int(), currency: z.string(), recurringInterval: SubscriptionRecurringInterval$outboundSchema, recurringIntervalCount: z.int(), status: SubscriptionStatus$outboundSchema, currentPeriodStart: z.pipe(z.date(), z.transform(v => v.toISOString())), currentPeriodEnd: z.pipe(z.date(), z.transform(v => v.toISOString())), trialStart: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), trialEnd: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), cancelAtPeriodEnd: z.boolean(), canceledAt: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), startedAt: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), endsAt: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), endedAt: z.nullable(z.pipe(z.date(), z.transform(v => v.toISOString()))), customerId: z.string(), productId: z.string(), discountId: z.nullable(z.string()), checkoutId: z.nullable(z.string()), seats: z.optional(z.nullable(z.int())), customerCancellationReason: z.nullable( CustomerCancellationReason$outboundSchema, ), customerCancellationComment: z.nullable(z.string()), }), z.transform((v) => { return remap$(v, { createdAt: "created_at", modifiedAt: "modified_at", recurringInterval: "recurring_interval", recurringIntervalCount: "recurring_interval_count", currentPeriodStart: "current_period_start", currentPeriodEnd: "current_period_end", trialStart: "trial_start", trialEnd: "trial_end", cancelAtPeriodEnd: "cancel_at_period_end", canceledAt: "canceled_at", startedAt: "started_at", endsAt: "ends_at", endedAt: "ended_at", customerId: "customer_id", productId: "product_id", discountId: "discount_id", checkoutId: "checkout_id", customerCancellationReason: "customer_cancellation_reason", customerCancellationComment: "customer_cancellation_comment", }); }), ); export function orderSubscriptionToJSON( orderSubscription: OrderSubscription, ): string { return JSON.stringify( OrderSubscription$outboundSchema.parse(orderSubscription), ); } export function orderSubscriptionFromJSON( jsonString: string, ): SafeParseResult { return safeParse( jsonString, (x) => OrderSubscription$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OrderSubscription' from JSON`, ); }