157 lines
6.4 KiB
JavaScript
Raw Normal View History

"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