import { z } from 'zod'; /** * Config Sync DTOs * * These schemas reuse the existing Create*Dto schemas by: * 1. Using .innerType() to unwrap ZodEffects (from .refine()) to get base object schemas * 2. Using .omit() to remove parent keys (productKey, planKey) that come from nesting * 3. Using .extend() to add config-specific fields (archived, nested structures) * 4. Re-applying refinements where needed */ /** * Billing Cycle Configuration * Maps to CreateBillingCycleDto / UpdateBillingCycleDto * Reuses CreateBillingCycleDtoSchema validation, omitting planKey (comes from nested structure) */ export declare const BillingCycleConfigSchema: any; export type BillingCycleConfig = z.infer; /** * Plan Configuration * Maps to CreatePlanDto / UpdatePlanDto * Reuses CreatePlanDtoSchema validation, omitting productKey (comes from nested structure) * Note: CreatePlanDtoSchema has no refinements, so we can use .omit() directly */ export declare const PlanConfigSchema: z.ZodObject; onExpireTransitionToBillingCycleKey: z.ZodOptional; metadata: z.ZodOptional>; }, "productKey"> & { archived: z.ZodOptional; featureValues: z.ZodOptional>; billingCycles: z.ZodOptional>; }, "strip", z.ZodTypeAny, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }>; export type PlanConfig = z.infer; /** * Feature Configuration * Maps to CreateFeatureDto / UpdateFeatureDto * Reuses CreateFeatureDtoSchema validation, adding archived field */ export declare const FeatureConfigSchema: any; export type FeatureConfig = z.infer; /** * Product Configuration * Maps to CreateProductDto / UpdateProductDto * Reuses CreateProductDtoSchema validation (no refinements, so we can extend directly) */ export declare const ProductConfigSchema: z.ZodObject<{ key: z.ZodString; displayName: z.ZodString; description: z.ZodOptional; metadata: z.ZodOptional>; } & { archived: z.ZodOptional; features: z.ZodOptional>; plans: z.ZodOptional; onExpireTransitionToBillingCycleKey: z.ZodOptional; metadata: z.ZodOptional>; }, "productKey"> & { archived: z.ZodOptional; featureValues: z.ZodOptional>; billingCycles: z.ZodOptional>; }, "strip", z.ZodTypeAny, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }>; export type ProductConfig = z.infer; /** * Root Configuration DTO * IMPORTANT: In JSON, features must appear before products. The TypeScript interface order does not enforce this - validation will check JSON property order. */ export interface ConfigSyncDto { version: string; features: FeatureConfig[]; products: ProductConfig[]; } /** * Sync Report returned after sync operations */ export interface ConfigSyncReport { created: { features: number; products: number; plans: number; billingCycles: number; }; updated: { features: number; products: number; plans: number; billingCycles: number; }; archived: { features: number; products: number; plans: number; billingCycles: number; }; unarchived: { features: number; products: number; plans: number; billingCycles: number; }; ignored: { features: number; products: number; plans: number; billingCycles: number; }; errors: Array<{ entityType: 'feature' | 'product' | 'plan' | 'billingCycle'; key: string; message: string; }>; warnings: Array<{ entityType: 'feature' | 'product' | 'plan' | 'billingCycle'; key: string; message: string; }>; } /** * Root Configuration Schema with cross-field validation */ export declare const ConfigSyncDtoSchema: z.ZodEffects; products: z.ZodArray; metadata: z.ZodOptional>; } & { archived: z.ZodOptional; features: z.ZodOptional>; plans: z.ZodOptional; onExpireTransitionToBillingCycleKey: z.ZodOptional; metadata: z.ZodOptional>; }, "productKey"> & { archived: z.ZodOptional; featureValues: z.ZodOptional>; billingCycles: z.ZodOptional>; }, "strip", z.ZodTypeAny, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }, { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { products: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }[]; features: any[]; version: string; }, { products: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }[]; features: any[]; version: string; }>, { products: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }[]; features: any[]; version: string; }, { products: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; features?: string[] | undefined; plans?: { key: string; displayName: string; description?: string | undefined; metadata?: Record | undefined; archived?: boolean | undefined; onExpireTransitionToBillingCycleKey?: string | undefined; featureValues?: Record | undefined; billingCycles?: any[] | undefined; }[] | undefined; archived?: boolean | undefined; }[]; features: any[]; version: string; }>; /** * Validates a JSON string for property order before parsing * This should be called before JSON.parse() when loading from file */ export declare function validateConfigJsonPropertyOrder(jsonString: string): void; //# sourceMappingURL=ConfigSyncDto.d.ts.map