import { ResetInterval } from "@models/productModels/intervals/resetInterval.js"; import { z } from "zod/v4"; import { ApiFeatureV1Schema } from "../../features/apiFeatureV1.js"; export const ApiBalanceResetSchema = z.object({ interval: z.enum(ResetInterval).or(z.literal("multiple")), interval_count: z.number().optional(), resets_at: z.number().nullable(), }); export const ApiBalanceRolloverSchema = z.object({ balance: z.number(), expires_at: z.number(), }); export const ApiBalanceBreakdownSchema = z.object({ id: z.string().default(""), plan_id: z.string().nullable(), granted_balance: z.number(), purchased_balance: z.number(), current_balance: z.number(), usage: z.number(), overage_allowed: z.boolean(), max_purchase: z.number().nullable(), reset: ApiBalanceResetSchema.nullable(), // Extra fields prepaid_quantity: z.number().default(0), expires_at: z.number().nullable(), // For loose entitlements with expiry }); export const ApiBalanceSchema = z.object({ feature_id: z.string(), feature: ApiFeatureV1Schema.optional(), unlimited: z.boolean(), granted_balance: z.number(), purchased_balance: z.number(), current_balance: z.number(), usage: z.number(), overage_allowed: z.boolean(), max_purchase: z.number().nullable(), reset: ApiBalanceResetSchema.nullable(), plan_id: z.string().nullable(), breakdown: z.array(ApiBalanceBreakdownSchema).optional(), rollovers: z.array(ApiBalanceRolloverSchema).optional(), }); export type ApiBalanceReset = z.infer; export type ApiBalanceRollover = z.infer; export type ApiBalanceBreakdown = z.infer; export type ApiBalance = z.infer;