@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.union([z.string(), z.null(), z.undefined()]).transform(normalizeBlankString).pipe(z.string().trim().min(1, { message: "checkout.validation.common.required" }).optional().nullable());
29
- const optionalUrlSchema = z.union([z.string(), z.null(), z.undefined()]).transform(normalizeBlankString).pipe(z.string().url("checkout.validation.common.invalidUrl").optional().nullable());
30
- const optionalFieldsetCodeSchema = z.union([z.string(), z.null(), z.undefined()]).transform(normalizeBlankString).pipe(z.string().regex(fieldsetCodeRegex, {
31
- message: "checkout.validation.common.invalidFieldsetCode"
32
- }).optional().nullable());
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,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,CAAC,EACxE,UAAU,oBAAoB,EAC9B,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS,sCAAsC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC;AAC1G,MAAM,oBAAoB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,CAAC,EACpE,UAAU,oBAAoB,EAC9B,KAAK,EAAE,OAAO,EAAE,IAAI,uCAAuC,EAAE,SAAS,EAAE,SAAS,CAAC;AACrF,MAAM,6BAA6B,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,CAAC,EAC7E,UAAU,oBAAoB,EAC9B,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB;AAAA,EACxC,SAAS;AACX,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC;AAC1B,MAAM,sBAAsB,EAAE,OAAO,OAAO,EAAE,OAAO,0CAA0C,EAAE,YAAY,8CAA8C;AAC3J,MAAM,mBAAmB,EAAE,KAAK,sBAAsB;AAE/C,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,OAAO,sBAAsB,qCAAqC;AAAA,EAClE,OAAO,sBAAsB,qCAAqC;AACpE,CAAC;AAEM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB;AAAA,IAC3C,SAAS;AAAA,EACX,CAAC;AAAA,EACD,OAAO,sBAAsB,qCAAqC;AAAA,EAClE,MAAM,EAAE,KAAK,CAAC,QAAQ,aAAa,WAAW,UAAU,OAAO,CAAC;AAAA,EAChE,UAAU,EAAE,QAAQ;AAAA,EACpB,OAAO,EAAE,QAAQ;AAAA,EACjB,aAAa;AAAA,EACb,SAAS,EAAE,MAAM,yBAAyB,EAAE,SAAS;AAAA,EACrD,WAAW,EAAE,OAAO,OAAO,EAAE,IAAI,oCAAoC,EAAE,IAAI,GAAG;AAAA,IAC5E,SAAS;AAAA,EACX,CAAC;AACH,CAAC;AAEM,MAAM,sBAAsB,EAAE;AAAA,EACnC;AAAA,EACA,EAAE,OAAO;AAAA,IACP,OAAO,sBAAsB,qCAAqC;AAAA,IAClE,UAAU,sBAAsB,qCAAqC;AAAA,IACrE,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACrC,CAAC,EAAE,SAAS;AACd;AAEO,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,OAAO,oBAAoB,SAAS;AAAA,EACpC,eAAe,oBAAoB,SAAS;AAC9C,CAAC,EAAE,SAAS;AAEL,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,IAAI,sBAAsB,qCAAqC;AAAA,EAC/D,aAAa,sBAAsB,qCAAqC;AAAA,EACxE,QAAQ;AAAA,EACR,cAAc;AAChB,CAAC;AAEM,MAAM,wBAAwB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AAEhF,MAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,MAAM,sBAAsB,mCAAmC;AAAA,EAC/D,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,kBAAkB,EAAE,OAAO,EAAE,KAAK,wCAAwC,EAAE,SAAS,EAAE,SAAS;AAAA,EAChG,SAAS;AAAA,EACT,cAAc,eAAe,SAAS,EAAE,SAAS;AAAA,EACjD,gBAAgB,eAAe,SAAS,EAAE,SAAS;AAAA,EACnD,iBAAiB,eAAe,SAAS,EAAE,SAAS;AAAA,EACpD,WAAW,EAAE,KAAK,CAAC,SAAS,QAAQ,MAAM,CAAC,EAAE,QAAQ,MAAM;AAAA,EAC3D,aAAa,EAAE,KAAK,CAAC,SAAS,iBAAiB,YAAY,CAAC;AAAA,EAC5D,kBAAkB,oBAAoB,SAAS,EAAE,SAAS;AAAA,EAC1D,wBAAwB,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC/D,uBAAuB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAC/C,0BAA0B,oBAAoB,SAAS,EAAE,SAAS;AAAA,EAClE,iBAAiB,oBAAoB,SAAS,EAAE,SAAS;AAAA,EACzD,iBAAiB,oBAAoB,SAAS,EAAE,SAAS;AAAA,EACzD,0BAA0B,mBAAmB,SAAS,EAAE,SAAS;AAAA,EACjE,gBAAgB,EAAE,MAAM,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAAA,EACjE,oBAAoB,sBAAsB,iDAAiD;AAAA,EAC3F,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAChD,sBAAsB,EAAE,MAAM,6BAA6B,EAAE,QAAQ,CAAC,GAAG,gCAAgC,CAAC;AAAA,EAC1G,gBAAgB;AAAA,EAChB,2BAA2B,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpD,cAAc;AAAA,EACd,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,aAAa;AAAA,EACb,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,YAAY;AAAA,EACZ,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,qBAAqB;AAAA,EACrB,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAC1C,mBAAmB;AAAA,EACnB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACxC,mBAAmB;AAAA,EACnB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACxC,UAAU;AAAA,EACV,gBAAgB,EAAE,OAAO,OAAO,EAAE,IAAI,oCAAoC,EAAE,SAAS,4CAA4C,EAAE,SAAS,EAAE,SAAS;AAAA,EACvJ,QAAQ,iBAAiB,QAAQ,OAAO;AAAA,EACxC,cAAc,EAAE,KAAK,CAAC,YAAY,iBAAiB,CAAC,EAAE,QAAQ,UAAU;AAC1E,CAAC;AAED,SAAS,2BAA4E,OAAU,KAAsB;AACnH,MAAI,MAAM,gBAAgB,SAAS;AACjC,QAAI,MAAM,oBAAoB,MAAM;AAClC,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,iDAAiD,MAAM,CAAC,kBAAkB,EAAE,CAAC;AAAA,IACpI;AACA,QAAI,CAAC,MAAM,wBAAwB;AACjC,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,uDAAuD,MAAM,CAAC,wBAAwB,EAAE,CAAC;AAAA,IAChJ;AAAA,EACF;AAEA,MAAI,MAAM,gBAAgB,iBAAiB;AACzC,QAAI,MAAM,mBAAmB,MAAM;AACjC,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,gDAAgD,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAAA,IAClI;AACA,QAAI,MAAM,mBAAmB,MAAM;AACjC,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,gDAAgD,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAAA,IAClI;AACA,QAAI,CAAC,MAAM,0BAA0B;AACnC,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,yDAAyD,MAAM,CAAC,0BAA0B,EAAE,CAAC;AAAA,IACpJ;AACA,QAAI,MAAM,mBAAmB,QAAQ,MAAM,mBAAmB,QAAQ,MAAM,kBAAkB,MAAM,iBAAiB;AACnH,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,0CAA0C,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAAA,IAC5H;AAAA,EACF;AAEA,MAAI,MAAM,gBAAgB,cAAc;AACtC,QAAI,CAAC,MAAM,QAAQ,MAAM,cAAc,KAAK,MAAM,eAAe,WAAW,GAAG;AAC7E,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,+CAA+C,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAC9H;AAAA,IACF;AACA,UAAM,aAAa,IAAI,IAAI,MAAM,eAAe,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;AAChF,QAAI,WAAW,OAAO,GAAG;AACvB,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,SAAS,qDAAqD,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAAA,IACtI;AAAA,EACF;AACF;AAEO,MAAM,uBAAuB,sBAAsB,YAAY,0BAA0B;AAEhG,SAAS,+BAA+B,OAAgC,KAAsB;AAC5F,MAAI,CAAC,MAAM,YAAa;AACxB,6BAA2B;AAAA,IACzB,GAAG,sBAAsB,MAAM;AAAA,MAC7B,GAAG;AAAA,MACH,MAAM,MAAM,QAAQ;AAAA,MACpB,aAAa,MAAM;AAAA,MACnB,sBAAsB,MAAM,wBAAwB,CAAC,GAAG,gCAAgC;AAAA,IAC1F,CAAC;AAAA,IACD,GAAG;AAAA,EACL,GAAG,GAAG;AACR;AAEO,MAAM,uBAAuB,sBAAsB,QAAQ,EAAE,OAAO;AAAA,EACzE,IAAI,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAAA,EAC5D,UAAU;AAAA,EACV,sBAAsB,EAAE,MAAM,6BAA6B,EAAE,SAAS;AACxE,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ;AAC7B,iCAA+B,OAAO,GAAG;AAC3C,CAAC;AAEM,MAAM,mBAAmB,qBAAqB,WAAW;AAAA,EAC9D,YAAY,EAAE,OAAO,EAAE,KAAK,wCAAwC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1F,MAAM;AACR,CAAC;AAEM,MAAM,mBAAmB,sBAAsB,QAAQ,EAAE,WAAW;AAAA,EACzE,IAAI,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAAA,EAC5D,YAAY,EAAE,OAAO,EAAE,KAAK,wCAAwC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1F,MAAM;AAAA,EACN,UAAU;AAAA,EACV,sBAAsB,EAAE,MAAM,6BAA6B,EAAE,SAAS;AACxE,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ;AAC7B,iCAA+B,OAAO,GAAG;AAC3C,CAAC;AAEM,MAAM,0BAA0B,EAAE,KAAK,CAAC,WAAW,cAAc,aAAa,UAAU,aAAa,SAAS,CAAC;AAE/G,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAAA,EAChE,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,gBAAgB,sBAAsB,qCAAqC;AAAA,EAC3E,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC1D,WAAW;AAAA,EACX,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,sBAAsB,EAAE,OAAO,EAAE,KAAK,wCAAwC,EAAE,SAAS,EAAE,SAAS;AAAA,EACpG,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,uBAAuB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7E,WAAW;AAAA,EACX,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,UAAU,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAAA,EAClE,gBAAgB,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAC1E,CAAC;AAEM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,IAAI,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAAA,EAC5D,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,sBAAsB,EAAE,OAAO,EAAE,KAAK,wCAAwC,EAAE,SAAS,EAAE,SAAS;AAAA,EACpG,UAAU,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAAA,EAClE,gBAAgB,EAAE,OAAO,EAAE,KAAK,wCAAwC;AAC1E,CAAC;AAEM,MAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,sCAAsC,CAAC;AAChF,CAAC;AAEM,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EAC9C,uBAAuB,EAAE,OAAO;AAAA,IAC9B,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC5B,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACb,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS;AAAA,EAC1D,qBAAqB;AACvB,CAAC;",
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.2-develop.3467.1.2a1818709d",
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.2-develop.3467.1.2a1818709d",
65
- "@open-mercato/ui": "0.6.2-develop.3467.1.2a1818709d",
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.2-develop.3467.1.2a1818709d",
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.2-develop.3467.1.2a1818709d",
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.1"
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.union([z.string(), z.null(), z.undefined()])
33
- .transform(normalizeBlankString)
34
- .pipe(z.string().trim().min(1, { message: 'checkout.validation.common.required' }).optional().nullable())
35
- const optionalUrlSchema = z.union([z.string(), z.null(), z.undefined()])
36
- .transform(normalizeBlankString)
37
- .pipe(z.string().url('checkout.validation.common.invalidUrl').optional().nullable())
38
- const optionalFieldsetCodeSchema = z.union([z.string(), z.null(), z.undefined()])
39
- .transform(normalizeBlankString)
40
- .pipe(z.string().regex(fieldsetCodeRegex, {
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