"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sfOrderIdParamSchema = exports.orderBusinessValidationSchema = exports.createOrderRequestSchema = exports.orderConfigurationsSchema = exports.orderQueryParamsSchema = exports.orderDetailsSchema = exports.orderSummarySchema = exports.orderItemDetailsSchema = exports.orderItemSummarySchema = void 0; const zod_1 = require("zod"); exports.orderItemSummarySchema = zod_1.z.object({ productName: zod_1.z.string().optional(), name: zod_1.z.string().optional(), sku: zod_1.z.string().optional(), status: zod_1.z.string().optional(), billingCycle: zod_1.z.string().optional(), itemClass: zod_1.z.string().optional(), quantity: zod_1.z.number().int().min(0).optional(), unitPrice: zod_1.z.number().optional(), totalPrice: zod_1.z.number().optional(), }); exports.orderItemDetailsSchema = zod_1.z.object({ id: zod_1.z.string(), orderId: zod_1.z.string(), quantity: zod_1.z.number().int().min(1), unitPrice: zod_1.z.number().optional(), totalPrice: zod_1.z.number().optional(), billingCycle: zod_1.z.string().optional(), product: zod_1.z.object({ id: zod_1.z.string().optional(), name: zod_1.z.string().optional(), sku: zod_1.z.string().optional(), itemClass: zod_1.z.string().optional(), whmcsProductId: zod_1.z.string().optional(), internetOfferingType: zod_1.z.string().optional(), internetPlanTier: zod_1.z.string().optional(), vpnRegion: zod_1.z.string().optional(), }).optional(), }); exports.orderSummarySchema = zod_1.z.object({ id: zod_1.z.string(), orderNumber: zod_1.z.string(), status: zod_1.z.string(), orderType: zod_1.z.string().optional(), effectiveDate: zod_1.z.string(), totalAmount: zod_1.z.number().optional(), createdDate: zod_1.z.string(), lastModifiedDate: zod_1.z.string(), whmcsOrderId: zod_1.z.string().optional(), activationStatus: zod_1.z.string().optional(), itemsSummary: zod_1.z.array(exports.orderItemSummarySchema), }); exports.orderDetailsSchema = exports.orderSummarySchema.extend({ accountId: zod_1.z.string().optional(), accountName: zod_1.z.string().optional(), pricebook2Id: zod_1.z.string().optional(), activationType: zod_1.z.string().optional(), activationStatus: zod_1.z.string().optional(), activationScheduledAt: zod_1.z.string().optional(), activationErrorCode: zod_1.z.string().optional(), activationErrorMessage: zod_1.z.string().optional(), activatedDate: zod_1.z.string().optional(), items: zod_1.z.array(exports.orderItemDetailsSchema), }); exports.orderQueryParamsSchema = zod_1.z.object({ page: zod_1.z.coerce.number().int().positive().optional(), limit: zod_1.z.coerce.number().int().positive().max(100).optional(), status: zod_1.z.string().optional(), orderType: zod_1.z.string().optional(), }); const orderConfigurationsAddressSchema = zod_1.z.object({ street: zod_1.z.string().nullable().optional(), streetLine2: zod_1.z.string().nullable().optional(), city: zod_1.z.string().nullable().optional(), state: zod_1.z.string().nullable().optional(), postalCode: zod_1.z.string().nullable().optional(), country: zod_1.z.string().nullable().optional(), }); exports.orderConfigurationsSchema = zod_1.z.object({ activationType: zod_1.z.enum(["Immediate", "Scheduled"]).optional(), scheduledAt: zod_1.z.string().optional(), accessMode: zod_1.z.enum(["IPoE-BYOR", "IPoE-HGW", "PPPoE"]).optional(), simType: zod_1.z.enum(["eSIM", "Physical SIM"]).optional(), eid: zod_1.z.string().optional(), isMnp: zod_1.z.string().optional(), mnpNumber: zod_1.z.string().optional(), mnpExpiry: zod_1.z.string().optional(), mnpPhone: zod_1.z.string().optional(), mvnoAccountNumber: zod_1.z.string().optional(), portingLastName: zod_1.z.string().optional(), portingFirstName: zod_1.z.string().optional(), portingLastNameKatakana: zod_1.z.string().optional(), portingFirstNameKatakana: zod_1.z.string().optional(), portingGender: zod_1.z.enum(["Male", "Female", "Corporate/Other"]).optional(), portingDateOfBirth: zod_1.z.string().optional(), address: orderConfigurationsAddressSchema.optional(), }); const baseCreateOrderSchema = zod_1.z.object({ orderType: zod_1.z.enum(["Internet", "SIM", "VPN", "Other"]), skus: zod_1.z.array(zod_1.z.string()), configurations: exports.orderConfigurationsSchema.optional(), }); exports.createOrderRequestSchema = baseCreateOrderSchema; exports.orderBusinessValidationSchema = baseCreateOrderSchema .extend({ userId: zod_1.z.string().uuid(), opportunityId: zod_1.z.string().optional(), }) .refine((data) => { if (data.orderType === "Internet") { const mainServiceSkus = data.skus.filter(sku => { const upperSku = sku.toUpperCase(); return (!upperSku.includes("INSTALL") && !upperSku.includes("ADDON") && !upperSku.includes("ACTIVATION") && !upperSku.includes("FEE")); }); return mainServiceSkus.length >= 1; } return true; }, { message: "Internet orders must have at least one main service SKU (non-installation, non-addon)", path: ["skus"], }) .refine((data) => { if (data.orderType === "SIM" && data.configurations) { return data.configurations.simType !== undefined; } return true; }, { message: "SIM orders must specify SIM type", path: ["configurations", "simType"], }) .refine((data) => { if (data.configurations?.simType === "eSIM") { return data.configurations.eid !== undefined && data.configurations.eid.length > 0; } return true; }, { message: "eSIM orders must provide EID", path: ["configurations", "eid"], }) .refine((data) => { if (data.configurations?.isMnp === "true") { const required = [ "mnpNumber", "portingLastName", "portingFirstName", ]; return required.every(field => data.configurations?.[field] !== undefined); } return true; }, { message: "MNP orders must provide porting information", path: ["configurations"], }); exports.sfOrderIdParamSchema = zod_1.z.object({ sfOrderId: zod_1.z .string() .length(18, "Salesforce order ID must be 18 characters") .regex(/^[A-Za-z0-9]+$/, "Salesforce order ID must be alphanumeric"), }); //# sourceMappingURL=schema.js.map