import { z } from "zod"; const MonetizationTrial = z.literal("trial"); const MonetizationFree = z.literal("free"); const MonetizationSinglePayment = z.literal("single_payment"); const MonetizationSubscription = z.literal("subscription"); const MonetizationType = z.union([ MonetizationTrial, MonetizationFree, MonetizationSinglePayment, MonetizationSubscription, z.literal("base"), // outdated ]); export const Limit = z.object({ type: z.union([z.literal("unique_launches"), z.literal("volume_limit")]), used: z.number(), toSpend: z.number(), available: z.number().nullable(), // null if unlimited }); const DryRunResult = z.object( { productKey: z.string(), productName: z.string().default("Unknown product"), customerEmail: z.string().optional(), canRun: z.boolean(), status: z.string(), // 'select-tariff', 'active', 'payment_required', 'limits_exceeded', 'inactive', 'unknown', mnz: z.object({ type: MonetizationType.optional(), endOfBillingPeriod: z.string().nullable().optional(), limits: z.array(Limit).optional(), }), }, { message: "Invalid DryRunResult" }, ); type DryRunResult = z.infer; const Response = z .object({ httpError: z.string().optional(), response: z .object({ result: DryRunResult.optional(), error: z.unknown().optional(), }) .optional(), }) .optional(); type Response = z.infer; export { MonetizationType, DryRunResult, Response };