@open-mercato/checkout 0.6.2-develop.3467.1.2a1818709d → 0.6.3-develop.3484.1.1427e58147
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -25,11 +25,20 @@ const hexColorSchema = z.string().regex(/^#([0-9a-fA-F]{6})$/, {
|
|
|
25
25
|
const currencyCodeSchema = z.string().trim().toUpperCase().regex(/^[A-Z]{3}$/, {
|
|
26
26
|
message: "checkout.validation.common.invalidCurrencyCode"
|
|
27
27
|
});
|
|
28
|
-
const optionalTrimmedString = z.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
const optionalTrimmedString = z.preprocess(
|
|
29
|
+
normalizeBlankString,
|
|
30
|
+
z.string().trim().min(1, { message: "checkout.validation.common.required" }).optional().nullable()
|
|
31
|
+
);
|
|
32
|
+
const optionalUrlSchema = z.preprocess(
|
|
33
|
+
normalizeBlankString,
|
|
34
|
+
z.string().url("checkout.validation.common.invalidUrl").optional().nullable()
|
|
35
|
+
);
|
|
36
|
+
const optionalFieldsetCodeSchema = z.preprocess(
|
|
37
|
+
normalizeBlankString,
|
|
38
|
+
z.string().regex(fieldsetCodeRegex, {
|
|
39
|
+
message: "checkout.validation.common.invalidFieldsetCode"
|
|
40
|
+
}).optional().nullable()
|
|
41
|
+
);
|
|
33
42
|
const positiveMoneySchema = z.coerce.number().finite("checkout.validation.common.invalidNumber").nonnegative("checkout.validation.common.nonNegativeNumber");
|
|
34
43
|
const linkStatusSchema = z.enum(CHECKOUT_LINK_STATUSES);
|
|
35
44
|
const customerFieldOptionSchema = z.object({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/checkout/data/validators.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\nimport { fieldsetCodeRegex } from '@open-mercato/shared/modules/entities/validators'\nimport { DEFAULT_CHECKOUT_CUSTOMER_FIELDS } from '../lib/defaults'\nimport { CHECKOUT_LINK_STATUSES } from '../lib/constants'\n\nfunction normalizeBlankString(value: unknown): unknown {\n if (typeof value !== 'string') return value\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : null\n}\n\nfunction normalizeOptionalDocument(value: unknown): unknown {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n const source = value as Record<string, unknown>\n const title = typeof source.title === 'string' ? source.title.trim() : ''\n const markdown = typeof source.markdown === 'string' ? source.markdown.trim() : ''\n const required = source.required === true\n if (!title && !markdown && !required) return undefined\n return value\n}\n\nfunction requiredTrimmedString(message: string) {\n return z.string().trim().min(1, { message })\n}\n\nconst hexColorSchema = z.string().regex(/^#([0-9a-fA-F]{6})$/, {\n message: 'checkout.validation.common.invalidColor',\n})\nconst currencyCodeSchema = z.string().trim().toUpperCase().regex(/^[A-Z]{3}$/, {\n message: 'checkout.validation.common.invalidCurrencyCode',\n})\nconst optionalTrimmedString = z.union([z.string(), z.null(), z.undefined()])\n .transform(normalizeBlankString)\n .pipe(z.string().trim().min(1, { message: 'checkout.validation.common.required' }).optional().nullable())\nconst optionalUrlSchema = z.union([z.string(), z.null(), z.undefined()])\n .transform(normalizeBlankString)\n .pipe(z.string().url('checkout.validation.common.invalidUrl').optional().nullable())\nconst optionalFieldsetCodeSchema = z.union([z.string(), z.null(), z.undefined()])\n .transform(normalizeBlankString)\n .pipe(z.string().regex(fieldsetCodeRegex, {\n message: 'checkout.validation.common.invalidFieldsetCode',\n }).optional().nullable())\nconst positiveMoneySchema = z.coerce.number().finite('checkout.validation.common.invalidNumber').nonnegative('checkout.validation.common.nonNegativeNumber')\nconst linkStatusSchema = z.enum(CHECKOUT_LINK_STATUSES)\n\nexport const customerFieldOptionSchema = z.object({\n value: requiredTrimmedString('checkout.validation.common.required'),\n label: requiredTrimmedString('checkout.validation.common.required'),\n})\n\nexport const customerFieldDefinitionSchema = z.object({\n key: z.string().regex(/^[a-z][A-Za-z0-9]*$/, {\n message: 'checkout.validation.customerFields.key.invalid',\n }),\n label: requiredTrimmedString('checkout.validation.common.required'),\n kind: z.enum(['text', 'multiline', 'boolean', 'select', 'radio']),\n required: z.boolean(),\n fixed: z.boolean(),\n placeholder: optionalTrimmedString,\n options: z.array(customerFieldOptionSchema).optional(),\n sortOrder: z.coerce.number().int('checkout.validation.common.integer').min(0, {\n message: 'checkout.validation.common.nonNegativeInteger',\n }),\n})\n\nexport const legalDocumentSchema = z.preprocess(\n normalizeOptionalDocument,\n z.object({\n title: requiredTrimmedString('checkout.validation.common.required'),\n markdown: requiredTrimmedString('checkout.validation.common.required'),\n required: z.boolean().default(false),\n }).optional(),\n)\n\nexport const legalDocumentsSchema = z.object({\n terms: legalDocumentSchema.optional(),\n privacyPolicy: legalDocumentSchema.optional(),\n}).optional()\n\nexport const priceListItemSchema = z.object({\n id: requiredTrimmedString('checkout.validation.common.required'),\n description: requiredTrimmedString('checkout.validation.common.required'),\n amount: positiveMoneySchema,\n currencyCode: currencyCodeSchema,\n})\n\nexport const gatewaySettingsSchema = z.record(z.string(), z.unknown()).optional()\n\nconst checkoutContentSchema = z.object({\n name: requiredTrimmedString('checkout.validation.name.required'),\n title: optionalTrimmedString,\n subtitle: optionalTrimmedString,\n description: z.string().optional().nullable(),\n logoAttachmentId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n logoUrl: optionalUrlSchema,\n primaryColor: hexColorSchema.optional().nullable(),\n secondaryColor: hexColorSchema.optional().nullable(),\n backgroundColor: hexColorSchema.optional().nullable(),\n themeMode: z.enum(['light', 'dark', 'auto']).default('auto'),\n pricingMode: z.enum(['fixed', 'custom_amount', 'price_list']),\n fixedPriceAmount: positiveMoneySchema.optional().nullable(),\n fixedPriceCurrencyCode: currencyCodeSchema.optional().nullable(),\n fixedPriceIncludesTax: z.boolean().default(true),\n fixedPriceOriginalAmount: positiveMoneySchema.optional().nullable(),\n customAmountMin: positiveMoneySchema.optional().nullable(),\n customAmountMax: positiveMoneySchema.optional().nullable(),\n customAmountCurrencyCode: currencyCodeSchema.optional().nullable(),\n priceListItems: z.array(priceListItemSchema).optional().nullable(),\n gatewayProviderKey: requiredTrimmedString('checkout.validation.gatewayProviderKey.required'),\n gatewaySettings: gatewaySettingsSchema,\n customFieldsetCode: optionalFieldsetCodeSchema,\n collectCustomerDetails: z.boolean().default(true),\n customerFieldsSchema: z.array(customerFieldDefinitionSchema).default([...DEFAULT_CHECKOUT_CUSTOMER_FIELDS]),\n legalDocuments: legalDocumentsSchema,\n displayCustomFieldsOnPage: z.boolean().default(false),\n successTitle: optionalTrimmedString,\n successMessage: z.string().optional().nullable(),\n cancelTitle: optionalTrimmedString,\n cancelMessage: z.string().optional().nullable(),\n errorTitle: optionalTrimmedString,\n errorMessage: z.string().optional().nullable(),\n successEmailSubject: optionalTrimmedString,\n successEmailBody: z.string().optional().nullable(),\n sendSuccessEmail: z.boolean().default(true),\n errorEmailSubject: optionalTrimmedString,\n errorEmailBody: z.string().optional().nullable(),\n sendErrorEmail: z.boolean().default(true),\n startEmailSubject: optionalTrimmedString,\n startEmailBody: z.string().optional().nullable(),\n sendStartEmail: z.boolean().default(true),\n password: optionalTrimmedString,\n maxCompletions: z.coerce.number().int('checkout.validation.common.integer').positive('checkout.validation.common.positiveInteger').optional().nullable(),\n status: linkStatusSchema.default('draft'),\n checkoutType: z.enum(['pay_link', 'simple_checkout']).default('pay_link'),\n})\n\nfunction validatePricingConsistency<T extends z.infer<typeof checkoutContentSchema>>(value: T, ctx: z.RefinementCtx) {\n if (value.pricingMode === 'fixed') {\n if (value.fixedPriceAmount == null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.fixedPriceAmount.required', path: ['fixedPriceAmount'] })\n }\n if (!value.fixedPriceCurrencyCode) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.fixedPriceCurrencyCode.required', path: ['fixedPriceCurrencyCode'] })\n }\n }\n\n if (value.pricingMode === 'custom_amount') {\n if (value.customAmountMin == null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmountMin.required', path: ['customAmountMin'] })\n }\n if (value.customAmountMax == null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmountMax.required', path: ['customAmountMax'] })\n }\n if (!value.customAmountCurrencyCode) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmountCurrencyCode.required', path: ['customAmountCurrencyCode'] })\n }\n if (value.customAmountMin != null && value.customAmountMax != null && value.customAmountMin > value.customAmountMax) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmount.range', path: ['customAmountMax'] })\n }\n }\n\n if (value.pricingMode === 'price_list') {\n if (!Array.isArray(value.priceListItems) || value.priceListItems.length === 0) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.priceListItems.required', path: ['priceListItems'] })\n return\n }\n const currencies = new Set(value.priceListItems.map((item) => item.currencyCode))\n if (currencies.size > 1) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.priceListItems.singleCurrency', path: ['priceListItems'] })\n }\n }\n}\n\nexport const createTemplateSchema = checkoutContentSchema.superRefine(validatePricingConsistency)\n\nfunction applyPartialPricingConsistency(value: Record<string, unknown>, ctx: z.RefinementCtx) {\n if (!value.pricingMode) return\n validatePricingConsistency({\n ...checkoutContentSchema.parse({\n ...value,\n name: value.name ?? 'placeholder',\n pricingMode: value.pricingMode,\n customerFieldsSchema: value.customerFieldsSchema ?? [...DEFAULT_CHECKOUT_CUSTOMER_FIELDS],\n }),\n ...value,\n }, ctx)\n}\n\nexport const updateTemplateSchema = checkoutContentSchema.partial().extend({\n id: z.string().uuid('checkout.validation.common.invalidUuid'),\n password: optionalTrimmedString,\n customerFieldsSchema: z.array(customerFieldDefinitionSchema).optional(),\n}).superRefine((value, ctx) => {\n applyPartialPricingConsistency(value, ctx)\n})\n\nexport const createLinkSchema = createTemplateSchema.safeExtend({\n templateId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n slug: optionalTrimmedString,\n})\n\nexport const updateLinkSchema = checkoutContentSchema.partial().safeExtend({\n id: z.string().uuid('checkout.validation.common.invalidUuid'),\n templateId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n slug: optionalTrimmedString,\n password: optionalTrimmedString,\n customerFieldsSchema: z.array(customerFieldDefinitionSchema).optional(),\n}).superRefine((value, ctx) => {\n applyPartialPricingConsistency(value, ctx)\n})\n\nexport const transactionStatusSchema = z.enum(['pending', 'processing', 'completed', 'failed', 'cancelled', 'expired'])\n\nexport const transactionCreateSchema = z.object({\n linkId: z.string().uuid('checkout.validation.common.invalidUuid'),\n amount: positiveMoneySchema,\n currencyCode: currencyCodeSchema,\n idempotencyKey: requiredTrimmedString('checkout.validation.common.required'),\n customerData: z.record(z.string(), z.unknown()).default({}),\n firstName: optionalTrimmedString,\n lastName: optionalTrimmedString,\n email: optionalTrimmedString,\n phone: optionalTrimmedString,\n gatewayTransactionId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n paymentStatus: optionalTrimmedString,\n selectedPriceItemId: optionalTrimmedString,\n acceptedLegalConsents: z.record(z.string(), z.unknown()).optional().nullable(),\n ipAddress: optionalTrimmedString,\n userAgent: z.string().optional().nullable(),\n tenantId: z.string().uuid('checkout.validation.common.invalidUuid'),\n organizationId: z.string().uuid('checkout.validation.common.invalidUuid'),\n})\n\nexport const transactionUpdateStatusSchema = z.object({\n id: z.string().uuid('checkout.validation.common.invalidUuid'),\n status: transactionStatusSchema,\n paymentStatus: optionalTrimmedString,\n gatewayTransactionId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n tenantId: z.string().uuid('checkout.validation.common.invalidUuid'),\n organizationId: z.string().uuid('checkout.validation.common.invalidUuid'),\n})\n\nexport const publicPasswordVerifySchema = z.object({\n password: z.string().min(1, { message: 'checkout.validation.common.required' }),\n})\n\nexport const publicSubmitSchema = z.object({\n customerData: z.record(z.string(), z.unknown()),\n acceptedLegalConsents: z.object({\n terms: z.boolean().optional(),\n privacyPolicy: z.boolean().optional(),\n }).default({}),\n amount: z.coerce.number().finite().nonnegative().optional(),\n selectedPriceItemId: optionalTrimmedString,\n})\n\nexport type CustomerFieldDefinitionInput = z.infer<typeof customerFieldDefinitionSchema>\nexport type PriceListItemInput = z.infer<typeof priceListItemSchema>\nexport type CreateTemplateInput = z.infer<typeof createTemplateSchema>\nexport type UpdateTemplateInput = z.infer<typeof updateTemplateSchema>\nexport type CreateLinkInput = z.infer<typeof createLinkSchema>\nexport type UpdateLinkInput = z.infer<typeof updateLinkSchema>\nexport type CreateTransactionInput = z.infer<typeof transactionCreateSchema>\nexport type UpdateTransactionStatusInput = z.infer<typeof transactionUpdateStatusSchema>\nexport type PublicSubmitInput = z.infer<typeof publicSubmitSchema>\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAClB,SAAS,yBAAyB;AAClC,SAAS,wCAAwC;AACjD,SAAS,8BAA8B;AAEvC,SAAS,qBAAqB,OAAyB;AACrD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;AAEA,SAAS,0BAA0B,OAAyB;AAC1D,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,SAAS;AACf,QAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,MAAM,KAAK,IAAI;AACvE,QAAM,WAAW,OAAO,OAAO,aAAa,WAAW,OAAO,SAAS,KAAK,IAAI;AAChF,QAAM,WAAW,OAAO,aAAa;AACrC,MAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAU,QAAO;AAC7C,SAAO;AACT;AAEA,SAAS,sBAAsB,SAAiB;AAC9C,SAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,QAAQ,CAAC;AAC7C;AAEA,MAAM,iBAAiB,EAAE,OAAO,EAAE,MAAM,uBAAuB;AAAA,EAC7D,SAAS;AACX,CAAC;AACD,MAAM,qBAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc;AAAA,EAC7E,SAAS;AACX,CAAC;AACD,MAAM,wBAAwB,EAAE,
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport { fieldsetCodeRegex } from '@open-mercato/shared/modules/entities/validators'\nimport { DEFAULT_CHECKOUT_CUSTOMER_FIELDS } from '../lib/defaults'\nimport { CHECKOUT_LINK_STATUSES } from '../lib/constants'\n\nfunction normalizeBlankString(value: unknown): unknown {\n if (typeof value !== 'string') return value\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : null\n}\n\nfunction normalizeOptionalDocument(value: unknown): unknown {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return value\n const source = value as Record<string, unknown>\n const title = typeof source.title === 'string' ? source.title.trim() : ''\n const markdown = typeof source.markdown === 'string' ? source.markdown.trim() : ''\n const required = source.required === true\n if (!title && !markdown && !required) return undefined\n return value\n}\n\nfunction requiredTrimmedString(message: string) {\n return z.string().trim().min(1, { message })\n}\n\nconst hexColorSchema = z.string().regex(/^#([0-9a-fA-F]{6})$/, {\n message: 'checkout.validation.common.invalidColor',\n})\nconst currencyCodeSchema = z.string().trim().toUpperCase().regex(/^[A-Z]{3}$/, {\n message: 'checkout.validation.common.invalidCurrencyCode',\n})\nconst optionalTrimmedString = z.preprocess(\n normalizeBlankString,\n z.string().trim().min(1, { message: 'checkout.validation.common.required' }).optional().nullable(),\n)\nconst optionalUrlSchema = z.preprocess(\n normalizeBlankString,\n z.string().url('checkout.validation.common.invalidUrl').optional().nullable(),\n)\nconst optionalFieldsetCodeSchema = z.preprocess(\n normalizeBlankString,\n z.string().regex(fieldsetCodeRegex, {\n message: 'checkout.validation.common.invalidFieldsetCode',\n }).optional().nullable(),\n)\nconst positiveMoneySchema = z.coerce.number().finite('checkout.validation.common.invalidNumber').nonnegative('checkout.validation.common.nonNegativeNumber')\nconst linkStatusSchema = z.enum(CHECKOUT_LINK_STATUSES)\n\nexport const customerFieldOptionSchema = z.object({\n value: requiredTrimmedString('checkout.validation.common.required'),\n label: requiredTrimmedString('checkout.validation.common.required'),\n})\n\nexport const customerFieldDefinitionSchema = z.object({\n key: z.string().regex(/^[a-z][A-Za-z0-9]*$/, {\n message: 'checkout.validation.customerFields.key.invalid',\n }),\n label: requiredTrimmedString('checkout.validation.common.required'),\n kind: z.enum(['text', 'multiline', 'boolean', 'select', 'radio']),\n required: z.boolean(),\n fixed: z.boolean(),\n placeholder: optionalTrimmedString,\n options: z.array(customerFieldOptionSchema).optional(),\n sortOrder: z.coerce.number().int('checkout.validation.common.integer').min(0, {\n message: 'checkout.validation.common.nonNegativeInteger',\n }),\n})\n\nexport const legalDocumentSchema = z.preprocess(\n normalizeOptionalDocument,\n z.object({\n title: requiredTrimmedString('checkout.validation.common.required'),\n markdown: requiredTrimmedString('checkout.validation.common.required'),\n required: z.boolean().default(false),\n }).optional(),\n)\n\nexport const legalDocumentsSchema = z.object({\n terms: legalDocumentSchema.optional(),\n privacyPolicy: legalDocumentSchema.optional(),\n}).optional()\n\nexport const priceListItemSchema = z.object({\n id: requiredTrimmedString('checkout.validation.common.required'),\n description: requiredTrimmedString('checkout.validation.common.required'),\n amount: positiveMoneySchema,\n currencyCode: currencyCodeSchema,\n})\n\nexport const gatewaySettingsSchema = z.record(z.string(), z.unknown()).optional()\n\nconst checkoutContentSchema = z.object({\n name: requiredTrimmedString('checkout.validation.name.required'),\n title: optionalTrimmedString,\n subtitle: optionalTrimmedString,\n description: z.string().optional().nullable(),\n logoAttachmentId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n logoUrl: optionalUrlSchema,\n primaryColor: hexColorSchema.optional().nullable(),\n secondaryColor: hexColorSchema.optional().nullable(),\n backgroundColor: hexColorSchema.optional().nullable(),\n themeMode: z.enum(['light', 'dark', 'auto']).default('auto'),\n pricingMode: z.enum(['fixed', 'custom_amount', 'price_list']),\n fixedPriceAmount: positiveMoneySchema.optional().nullable(),\n fixedPriceCurrencyCode: currencyCodeSchema.optional().nullable(),\n fixedPriceIncludesTax: z.boolean().default(true),\n fixedPriceOriginalAmount: positiveMoneySchema.optional().nullable(),\n customAmountMin: positiveMoneySchema.optional().nullable(),\n customAmountMax: positiveMoneySchema.optional().nullable(),\n customAmountCurrencyCode: currencyCodeSchema.optional().nullable(),\n priceListItems: z.array(priceListItemSchema).optional().nullable(),\n gatewayProviderKey: requiredTrimmedString('checkout.validation.gatewayProviderKey.required'),\n gatewaySettings: gatewaySettingsSchema,\n customFieldsetCode: optionalFieldsetCodeSchema,\n collectCustomerDetails: z.boolean().default(true),\n customerFieldsSchema: z.array(customerFieldDefinitionSchema).default([...DEFAULT_CHECKOUT_CUSTOMER_FIELDS]),\n legalDocuments: legalDocumentsSchema,\n displayCustomFieldsOnPage: z.boolean().default(false),\n successTitle: optionalTrimmedString,\n successMessage: z.string().optional().nullable(),\n cancelTitle: optionalTrimmedString,\n cancelMessage: z.string().optional().nullable(),\n errorTitle: optionalTrimmedString,\n errorMessage: z.string().optional().nullable(),\n successEmailSubject: optionalTrimmedString,\n successEmailBody: z.string().optional().nullable(),\n sendSuccessEmail: z.boolean().default(true),\n errorEmailSubject: optionalTrimmedString,\n errorEmailBody: z.string().optional().nullable(),\n sendErrorEmail: z.boolean().default(true),\n startEmailSubject: optionalTrimmedString,\n startEmailBody: z.string().optional().nullable(),\n sendStartEmail: z.boolean().default(true),\n password: optionalTrimmedString,\n maxCompletions: z.coerce.number().int('checkout.validation.common.integer').positive('checkout.validation.common.positiveInteger').optional().nullable(),\n status: linkStatusSchema.default('draft'),\n checkoutType: z.enum(['pay_link', 'simple_checkout']).default('pay_link'),\n})\n\nfunction validatePricingConsistency<T extends z.infer<typeof checkoutContentSchema>>(value: T, ctx: z.RefinementCtx) {\n if (value.pricingMode === 'fixed') {\n if (value.fixedPriceAmount == null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.fixedPriceAmount.required', path: ['fixedPriceAmount'] })\n }\n if (!value.fixedPriceCurrencyCode) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.fixedPriceCurrencyCode.required', path: ['fixedPriceCurrencyCode'] })\n }\n }\n\n if (value.pricingMode === 'custom_amount') {\n if (value.customAmountMin == null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmountMin.required', path: ['customAmountMin'] })\n }\n if (value.customAmountMax == null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmountMax.required', path: ['customAmountMax'] })\n }\n if (!value.customAmountCurrencyCode) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmountCurrencyCode.required', path: ['customAmountCurrencyCode'] })\n }\n if (value.customAmountMin != null && value.customAmountMax != null && value.customAmountMin > value.customAmountMax) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.customAmount.range', path: ['customAmountMax'] })\n }\n }\n\n if (value.pricingMode === 'price_list') {\n if (!Array.isArray(value.priceListItems) || value.priceListItems.length === 0) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.priceListItems.required', path: ['priceListItems'] })\n return\n }\n const currencies = new Set(value.priceListItems.map((item) => item.currencyCode))\n if (currencies.size > 1) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'checkout.validation.priceListItems.singleCurrency', path: ['priceListItems'] })\n }\n }\n}\n\nexport const createTemplateSchema = checkoutContentSchema.superRefine(validatePricingConsistency)\n\nfunction applyPartialPricingConsistency(value: Record<string, unknown>, ctx: z.RefinementCtx) {\n if (!value.pricingMode) return\n validatePricingConsistency({\n ...checkoutContentSchema.parse({\n ...value,\n name: value.name ?? 'placeholder',\n pricingMode: value.pricingMode,\n customerFieldsSchema: value.customerFieldsSchema ?? [...DEFAULT_CHECKOUT_CUSTOMER_FIELDS],\n }),\n ...value,\n }, ctx)\n}\n\nexport const updateTemplateSchema = checkoutContentSchema.partial().extend({\n id: z.string().uuid('checkout.validation.common.invalidUuid'),\n password: optionalTrimmedString,\n customerFieldsSchema: z.array(customerFieldDefinitionSchema).optional(),\n}).superRefine((value, ctx) => {\n applyPartialPricingConsistency(value, ctx)\n})\n\nexport const createLinkSchema = createTemplateSchema.safeExtend({\n templateId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n slug: optionalTrimmedString,\n})\n\nexport const updateLinkSchema = checkoutContentSchema.partial().safeExtend({\n id: z.string().uuid('checkout.validation.common.invalidUuid'),\n templateId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n slug: optionalTrimmedString,\n password: optionalTrimmedString,\n customerFieldsSchema: z.array(customerFieldDefinitionSchema).optional(),\n}).superRefine((value, ctx) => {\n applyPartialPricingConsistency(value, ctx)\n})\n\nexport const transactionStatusSchema = z.enum(['pending', 'processing', 'completed', 'failed', 'cancelled', 'expired'])\n\nexport const transactionCreateSchema = z.object({\n linkId: z.string().uuid('checkout.validation.common.invalidUuid'),\n amount: positiveMoneySchema,\n currencyCode: currencyCodeSchema,\n idempotencyKey: requiredTrimmedString('checkout.validation.common.required'),\n customerData: z.record(z.string(), z.unknown()).default({}),\n firstName: optionalTrimmedString,\n lastName: optionalTrimmedString,\n email: optionalTrimmedString,\n phone: optionalTrimmedString,\n gatewayTransactionId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n paymentStatus: optionalTrimmedString,\n selectedPriceItemId: optionalTrimmedString,\n acceptedLegalConsents: z.record(z.string(), z.unknown()).optional().nullable(),\n ipAddress: optionalTrimmedString,\n userAgent: z.string().optional().nullable(),\n tenantId: z.string().uuid('checkout.validation.common.invalidUuid'),\n organizationId: z.string().uuid('checkout.validation.common.invalidUuid'),\n})\n\nexport const transactionUpdateStatusSchema = z.object({\n id: z.string().uuid('checkout.validation.common.invalidUuid'),\n status: transactionStatusSchema,\n paymentStatus: optionalTrimmedString,\n gatewayTransactionId: z.string().uuid('checkout.validation.common.invalidUuid').optional().nullable(),\n tenantId: z.string().uuid('checkout.validation.common.invalidUuid'),\n organizationId: z.string().uuid('checkout.validation.common.invalidUuid'),\n})\n\nexport const publicPasswordVerifySchema = z.object({\n password: z.string().min(1, { message: 'checkout.validation.common.required' }),\n})\n\nexport const publicSubmitSchema = z.object({\n customerData: z.record(z.string(), z.unknown()),\n acceptedLegalConsents: z.object({\n terms: z.boolean().optional(),\n privacyPolicy: z.boolean().optional(),\n }).default({}),\n amount: z.coerce.number().finite().nonnegative().optional(),\n selectedPriceItemId: optionalTrimmedString,\n})\n\nexport type CustomerFieldDefinitionInput = z.infer<typeof customerFieldDefinitionSchema>\nexport type PriceListItemInput = z.infer<typeof priceListItemSchema>\nexport type CreateTemplateInput = z.infer<typeof createTemplateSchema>\nexport type UpdateTemplateInput = z.infer<typeof updateTemplateSchema>\nexport type CreateLinkInput = z.infer<typeof createLinkSchema>\nexport type UpdateLinkInput = z.infer<typeof updateLinkSchema>\nexport type CreateTransactionInput = z.infer<typeof transactionCreateSchema>\nexport type UpdateTransactionStatusInput = z.infer<typeof transactionUpdateStatusSchema>\nexport type PublicSubmitInput = z.infer<typeof publicSubmitSchema>\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/jest.config.cjs
CHANGED
|
@@ -17,12 +17,14 @@ module.exports = {
|
|
|
17
17
|
{
|
|
18
18
|
tsconfig: {
|
|
19
19
|
jsx: 'react-jsx',
|
|
20
|
+
rootDir: '.',
|
|
21
|
+
ignoreDeprecations: '6.0',
|
|
20
22
|
},
|
|
21
23
|
},
|
|
22
24
|
],
|
|
23
25
|
},
|
|
24
26
|
transformIgnorePatterns: [
|
|
25
|
-
'node_modules/(?!(@mikro-orm)/)',
|
|
27
|
+
'node_modules/(?!(@mikro-orm|kysely)/)',
|
|
26
28
|
],
|
|
27
29
|
testMatch: ['<rootDir>/src/**/__tests__/**/*.test.(ts|tsx)'],
|
|
28
30
|
passWithNoTests: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/checkout",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3-develop.3484.1.1427e58147",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -61,18 +61,18 @@
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@open-mercato/core": "0.6.
|
|
65
|
-
"@open-mercato/ui": "0.6.
|
|
64
|
+
"@open-mercato/core": "0.6.3-develop.3484.1.1427e58147",
|
|
65
|
+
"@open-mercato/ui": "0.6.3-develop.3484.1.1427e58147",
|
|
66
66
|
"bcryptjs": "^3.0.3"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@mikro-orm/postgresql": "^7.0.14",
|
|
70
|
-
"@open-mercato/shared": "0.6.
|
|
70
|
+
"@open-mercato/shared": "0.6.3-develop.3484.1.1427e58147",
|
|
71
71
|
"react": "^19.0.0",
|
|
72
72
|
"react-dom": "^19.0.0"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@open-mercato/shared": "0.6.
|
|
75
|
+
"@open-mercato/shared": "0.6.3-develop.3484.1.1427e58147",
|
|
76
76
|
"@types/jest": "^30.0.0",
|
|
77
77
|
"@types/react": "^19.2.14",
|
|
78
78
|
"@types/react-dom": "^19.2.3",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"url": "https://github.com/open-mercato/open-mercato",
|
|
92
92
|
"directory": "packages/checkout"
|
|
93
93
|
},
|
|
94
|
-
"stableVersion": "0.6.
|
|
94
|
+
"stableVersion": "0.6.2"
|
|
95
95
|
}
|
|
@@ -29,4 +29,19 @@ describe('checkout validators', () => {
|
|
|
29
29
|
expect(result.slug).toBeUndefined()
|
|
30
30
|
expect(result.password).toBeUndefined()
|
|
31
31
|
})
|
|
32
|
+
|
|
33
|
+
test('createLinkSchema normalizes blank optional strings after zod preprocessing', () => {
|
|
34
|
+
const result = createLinkSchema.parse({
|
|
35
|
+
name: 'QA link',
|
|
36
|
+
pricingMode: 'fixed',
|
|
37
|
+
fixedPriceAmount: 49.99,
|
|
38
|
+
fixedPriceCurrencyCode: 'USD',
|
|
39
|
+
gatewayProviderKey: 'mock',
|
|
40
|
+
slug: ' ',
|
|
41
|
+
password: '',
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
expect(result.slug).toBeNull()
|
|
45
|
+
expect(result.password).toBeNull()
|
|
46
|
+
})
|
|
32
47
|
})
|
|
@@ -29,17 +29,20 @@ const hexColorSchema = z.string().regex(/^#([0-9a-fA-F]{6})$/, {
|
|
|
29
29
|
const currencyCodeSchema = z.string().trim().toUpperCase().regex(/^[A-Z]{3}$/, {
|
|
30
30
|
message: 'checkout.validation.common.invalidCurrencyCode',
|
|
31
31
|
})
|
|
32
|
-
const optionalTrimmedString = z.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
const optionalTrimmedString = z.preprocess(
|
|
33
|
+
normalizeBlankString,
|
|
34
|
+
z.string().trim().min(1, { message: 'checkout.validation.common.required' }).optional().nullable(),
|
|
35
|
+
)
|
|
36
|
+
const optionalUrlSchema = z.preprocess(
|
|
37
|
+
normalizeBlankString,
|
|
38
|
+
z.string().url('checkout.validation.common.invalidUrl').optional().nullable(),
|
|
39
|
+
)
|
|
40
|
+
const optionalFieldsetCodeSchema = z.preprocess(
|
|
41
|
+
normalizeBlankString,
|
|
42
|
+
z.string().regex(fieldsetCodeRegex, {
|
|
41
43
|
message: 'checkout.validation.common.invalidFieldsetCode',
|
|
42
|
-
}).optional().nullable()
|
|
44
|
+
}).optional().nullable(),
|
|
45
|
+
)
|
|
43
46
|
const positiveMoneySchema = z.coerce.number().finite('checkout.validation.common.invalidNumber').nonnegative('checkout.validation.common.nonNegativeNumber')
|
|
44
47
|
const linkStatusSchema = z.enum(CHECKOUT_LINK_STATUSES)
|
|
45
48
|
|