@endora-commerce/contracts 0.100.0

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.
Files changed (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -0
  3. package/dist/actor.d.ts +79 -0
  4. package/dist/actor.d.ts.map +1 -0
  5. package/dist/actor.js +41 -0
  6. package/dist/actor.js.map +1 -0
  7. package/dist/addresses.d.ts +134 -0
  8. package/dist/addresses.d.ts.map +1 -0
  9. package/dist/addresses.js +16 -0
  10. package/dist/addresses.js.map +1 -0
  11. package/dist/admin-actions.d.ts +367 -0
  12. package/dist/admin-actions.d.ts.map +1 -0
  13. package/dist/admin-actions.js +287 -0
  14. package/dist/admin-actions.js.map +1 -0
  15. package/dist/admin-contributions.d.ts +518 -0
  16. package/dist/admin-contributions.d.ts.map +1 -0
  17. package/dist/admin-contributions.js +495 -0
  18. package/dist/admin-contributions.js.map +1 -0
  19. package/dist/admin-i18n.d.ts +135 -0
  20. package/dist/admin-i18n.d.ts.map +1 -0
  21. package/dist/admin-i18n.js +72 -0
  22. package/dist/admin-i18n.js.map +1 -0
  23. package/dist/admin-notifications.d.ts +55 -0
  24. package/dist/admin-notifications.d.ts.map +1 -0
  25. package/dist/admin-notifications.js +16 -0
  26. package/dist/admin-notifications.js.map +1 -0
  27. package/dist/admin-roles.d.ts +125 -0
  28. package/dist/admin-roles.d.ts.map +1 -0
  29. package/dist/admin-roles.js +2 -0
  30. package/dist/admin-roles.js.map +1 -0
  31. package/dist/admin-users.d.ts +178 -0
  32. package/dist/admin-users.d.ts.map +1 -0
  33. package/dist/admin-users.js +14 -0
  34. package/dist/admin-users.js.map +1 -0
  35. package/dist/admin.d.ts +243 -0
  36. package/dist/admin.d.ts.map +1 -0
  37. package/dist/admin.js +246 -0
  38. package/dist/admin.js.map +1 -0
  39. package/dist/analytics.d.ts +123 -0
  40. package/dist/analytics.d.ts.map +1 -0
  41. package/dist/analytics.js +68 -0
  42. package/dist/analytics.js.map +1 -0
  43. package/dist/api-keys.d.ts +97 -0
  44. package/dist/api-keys.d.ts.map +1 -0
  45. package/dist/api-keys.js +64 -0
  46. package/dist/api-keys.js.map +1 -0
  47. package/dist/assets-library.d.ts +684 -0
  48. package/dist/assets-library.d.ts.map +1 -0
  49. package/dist/assets-library.js +181 -0
  50. package/dist/assets-library.js.map +1 -0
  51. package/dist/audit-logs.d.ts +141 -0
  52. package/dist/audit-logs.d.ts.map +1 -0
  53. package/dist/audit-logs.js +31 -0
  54. package/dist/audit-logs.js.map +1 -0
  55. package/dist/auth.d.ts +174 -0
  56. package/dist/auth.d.ts.map +1 -0
  57. package/dist/auth.js +27 -0
  58. package/dist/auth.js.map +1 -0
  59. package/dist/blog.d.ts +669 -0
  60. package/dist/blog.d.ts.map +1 -0
  61. package/dist/blog.js +360 -0
  62. package/dist/blog.js.map +1 -0
  63. package/dist/capabilities.d.ts +40 -0
  64. package/dist/capabilities.d.ts.map +1 -0
  65. package/dist/capabilities.js +38 -0
  66. package/dist/capabilities.js.map +1 -0
  67. package/dist/carts.d.ts +1367 -0
  68. package/dist/carts.d.ts.map +1 -0
  69. package/dist/carts.js +405 -0
  70. package/dist/carts.js.map +1 -0
  71. package/dist/catalog.d.ts +2855 -0
  72. package/dist/catalog.d.ts.map +1 -0
  73. package/dist/catalog.js +1543 -0
  74. package/dist/catalog.js.map +1 -0
  75. package/dist/cms.d.ts +872 -0
  76. package/dist/cms.d.ts.map +1 -0
  77. package/dist/cms.js +468 -0
  78. package/dist/cms.js.map +1 -0
  79. package/dist/common.d.ts +82 -0
  80. package/dist/common.d.ts.map +1 -0
  81. package/dist/common.js +72 -0
  82. package/dist/common.js.map +1 -0
  83. package/dist/comparisons.d.ts +487 -0
  84. package/dist/comparisons.d.ts.map +1 -0
  85. package/dist/comparisons.js +221 -0
  86. package/dist/comparisons.js.map +1 -0
  87. package/dist/credentials.d.ts +292 -0
  88. package/dist/credentials.d.ts.map +1 -0
  89. package/dist/credentials.js +142 -0
  90. package/dist/credentials.js.map +1 -0
  91. package/dist/credit-limits.d.ts +111 -0
  92. package/dist/credit-limits.d.ts.map +1 -0
  93. package/dist/credit-limits.js +35 -0
  94. package/dist/credit-limits.js.map +1 -0
  95. package/dist/currencies.d.ts +127 -0
  96. package/dist/currencies.d.ts.map +1 -0
  97. package/dist/currencies.js +20 -0
  98. package/dist/currencies.js.map +1 -0
  99. package/dist/custom-fields.d.ts +345 -0
  100. package/dist/custom-fields.d.ts.map +1 -0
  101. package/dist/custom-fields.js +185 -0
  102. package/dist/custom-fields.js.map +1 -0
  103. package/dist/customer-accounts.d.ts +690 -0
  104. package/dist/customer-accounts.d.ts.map +1 -0
  105. package/dist/customer-accounts.js +41 -0
  106. package/dist/customer-accounts.js.map +1 -0
  107. package/dist/customers.d.ts +305 -0
  108. package/dist/customers.d.ts.map +1 -0
  109. package/dist/customers.js +158 -0
  110. package/dist/customers.js.map +1 -0
  111. package/dist/dictionary.d.ts +580 -0
  112. package/dist/dictionary.d.ts.map +1 -0
  113. package/dist/dictionary.js +297 -0
  114. package/dist/dictionary.js.map +1 -0
  115. package/dist/email-address.d.ts +62 -0
  116. package/dist/email-address.d.ts.map +1 -0
  117. package/dist/email-address.js +64 -0
  118. package/dist/email-address.js.map +1 -0
  119. package/dist/email.d.ts +175 -0
  120. package/dist/email.d.ts.map +1 -0
  121. package/dist/email.js +45 -0
  122. package/dist/email.js.map +1 -0
  123. package/dist/envelopes.d.ts +15 -0
  124. package/dist/envelopes.d.ts.map +1 -0
  125. package/dist/envelopes.js +16 -0
  126. package/dist/envelopes.js.map +1 -0
  127. package/dist/environment-inputs.d.ts +306 -0
  128. package/dist/environment-inputs.d.ts.map +1 -0
  129. package/dist/environment-inputs.js +277 -0
  130. package/dist/environment-inputs.js.map +1 -0
  131. package/dist/erp-connector.d.ts +52 -0
  132. package/dist/erp-connector.d.ts.map +1 -0
  133. package/dist/erp-connector.js +34 -0
  134. package/dist/erp-connector.js.map +1 -0
  135. package/dist/errors.d.ts +455 -0
  136. package/dist/errors.d.ts.map +1 -0
  137. package/dist/errors.js +532 -0
  138. package/dist/errors.js.map +1 -0
  139. package/dist/google-analytics.d.ts +181 -0
  140. package/dist/google-analytics.d.ts.map +1 -0
  141. package/dist/google-analytics.js +176 -0
  142. package/dist/google-analytics.js.map +1 -0
  143. package/dist/google-tag-manager.d.ts +111 -0
  144. package/dist/google-tag-manager.d.ts.map +1 -0
  145. package/dist/google-tag-manager.js +129 -0
  146. package/dist/google-tag-manager.js.map +1 -0
  147. package/dist/i18n.d.ts +69 -0
  148. package/dist/i18n.d.ts.map +1 -0
  149. package/dist/i18n.js +59 -0
  150. package/dist/i18n.js.map +1 -0
  151. package/dist/import-export.d.ts +63 -0
  152. package/dist/import-export.d.ts.map +1 -0
  153. package/dist/import-export.js +37 -0
  154. package/dist/import-export.js.map +1 -0
  155. package/dist/index.d.ts +82 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +126 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/inventory.d.ts +673 -0
  160. package/dist/inventory.d.ts.map +1 -0
  161. package/dist/inventory.js +412 -0
  162. package/dist/inventory.js.map +1 -0
  163. package/dist/invoice-ledger.d.ts +366 -0
  164. package/dist/invoice-ledger.d.ts.map +1 -0
  165. package/dist/invoice-ledger.js +114 -0
  166. package/dist/invoice-ledger.js.map +1 -0
  167. package/dist/invoices.d.ts +845 -0
  168. package/dist/invoices.d.ts.map +1 -0
  169. package/dist/invoices.js +314 -0
  170. package/dist/invoices.js.map +1 -0
  171. package/dist/kernel.d.ts +49 -0
  172. package/dist/kernel.d.ts.map +1 -0
  173. package/dist/kernel.js +19 -0
  174. package/dist/kernel.js.map +1 -0
  175. package/dist/languages.d.ts +122 -0
  176. package/dist/languages.d.ts.map +1 -0
  177. package/dist/languages.js +24 -0
  178. package/dist/languages.js.map +1 -0
  179. package/dist/linkedin-ads.d.ts +167 -0
  180. package/dist/linkedin-ads.d.ts.map +1 -0
  181. package/dist/linkedin-ads.js +156 -0
  182. package/dist/linkedin-ads.js.map +1 -0
  183. package/dist/megamenu.d.ts +556 -0
  184. package/dist/megamenu.d.ts.map +1 -0
  185. package/dist/megamenu.js +186 -0
  186. package/dist/megamenu.js.map +1 -0
  187. package/dist/meta-ads.d.ts +126 -0
  188. package/dist/meta-ads.d.ts.map +1 -0
  189. package/dist/meta-ads.js +112 -0
  190. package/dist/meta-ads.js.map +1 -0
  191. package/dist/mfa.d.ts +274 -0
  192. package/dist/mfa.d.ts.map +1 -0
  193. package/dist/mfa.js +187 -0
  194. package/dist/mfa.js.map +1 -0
  195. package/dist/modules.d.ts +1706 -0
  196. package/dist/modules.d.ts.map +1 -0
  197. package/dist/modules.js +1390 -0
  198. package/dist/modules.js.map +1 -0
  199. package/dist/newsletter.d.ts +611 -0
  200. package/dist/newsletter.d.ts.map +1 -0
  201. package/dist/newsletter.js +345 -0
  202. package/dist/newsletter.js.map +1 -0
  203. package/dist/orders.d.ts +1175 -0
  204. package/dist/orders.d.ts.map +1 -0
  205. package/dist/orders.js +630 -0
  206. package/dist/orders.js.map +1 -0
  207. package/dist/organizations.d.ts +938 -0
  208. package/dist/organizations.d.ts.map +1 -0
  209. package/dist/organizations.js +418 -0
  210. package/dist/organizations.js.map +1 -0
  211. package/dist/pagination.d.ts +21 -0
  212. package/dist/pagination.d.ts.map +1 -0
  213. package/dist/pagination.js +22 -0
  214. package/dist/pagination.js.map +1 -0
  215. package/dist/payment-methods.d.ts +472 -0
  216. package/dist/payment-methods.d.ts.map +1 -0
  217. package/dist/payment-methods.js +175 -0
  218. package/dist/payment-methods.js.map +1 -0
  219. package/dist/payment-return-url.d.ts +53 -0
  220. package/dist/payment-return-url.d.ts.map +1 -0
  221. package/dist/payment-return-url.js +35 -0
  222. package/dist/payment-return-url.js.map +1 -0
  223. package/dist/payments.d.ts +386 -0
  224. package/dist/payments.d.ts.map +1 -0
  225. package/dist/payments.js +84 -0
  226. package/dist/payments.js.map +1 -0
  227. package/dist/pim-connector.d.ts +60 -0
  228. package/dist/pim-connector.d.ts.map +1 -0
  229. package/dist/pim-connector.js +43 -0
  230. package/dist/pim-connector.js.map +1 -0
  231. package/dist/pim-field-path.d.ts +6 -0
  232. package/dist/pim-field-path.d.ts.map +1 -0
  233. package/dist/pim-field-path.js +101 -0
  234. package/dist/pim-field-path.js.map +1 -0
  235. package/dist/platform-language.d.ts +20 -0
  236. package/dist/platform-language.d.ts.map +1 -0
  237. package/dist/platform-language.js +22 -0
  238. package/dist/platform-language.js.map +1 -0
  239. package/dist/price-lists.d.ts +685 -0
  240. package/dist/price-lists.d.ts.map +1 -0
  241. package/dist/price-lists.js +330 -0
  242. package/dist/price-lists.js.map +1 -0
  243. package/dist/product-feeds.d.ts +2837 -0
  244. package/dist/product-feeds.d.ts.map +1 -0
  245. package/dist/product-feeds.js +1504 -0
  246. package/dist/product-feeds.js.map +1 -0
  247. package/dist/product-scope-overrides.d.ts +134 -0
  248. package/dist/product-scope-overrides.d.ts.map +1 -0
  249. package/dist/product-scope-overrides.js +82 -0
  250. package/dist/product-scope-overrides.js.map +1 -0
  251. package/dist/product-value-resolver.d.ts +88 -0
  252. package/dist/product-value-resolver.d.ts.map +1 -0
  253. package/dist/product-value-resolver.js +128 -0
  254. package/dist/product-value-resolver.js.map +1 -0
  255. package/dist/promotions.d.ts +678 -0
  256. package/dist/promotions.d.ts.map +1 -0
  257. package/dist/promotions.js +479 -0
  258. package/dist/promotions.js.map +1 -0
  259. package/dist/prompt-actions.d.ts +582 -0
  260. package/dist/prompt-actions.d.ts.map +1 -0
  261. package/dist/prompt-actions.js +221 -0
  262. package/dist/prompt-actions.js.map +1 -0
  263. package/dist/pwa.d.ts +293 -0
  264. package/dist/pwa.d.ts.map +1 -0
  265. package/dist/pwa.js +204 -0
  266. package/dist/pwa.js.map +1 -0
  267. package/dist/quick-order.d.ts +340 -0
  268. package/dist/quick-order.d.ts.map +1 -0
  269. package/dist/quick-order.js +177 -0
  270. package/dist/quick-order.js.map +1 -0
  271. package/dist/quote-requests.d.ts +538 -0
  272. package/dist/quote-requests.d.ts.map +1 -0
  273. package/dist/quote-requests.js +308 -0
  274. package/dist/quote-requests.js.map +1 -0
  275. package/dist/returns.d.ts +774 -0
  276. package/dist/returns.d.ts.map +1 -0
  277. package/dist/returns.js +389 -0
  278. package/dist/returns.js.map +1 -0
  279. package/dist/sales-channels.d.ts +392 -0
  280. package/dist/sales-channels.d.ts.map +1 -0
  281. package/dist/sales-channels.js +285 -0
  282. package/dist/sales-channels.js.map +1 -0
  283. package/dist/scope-notice.d.ts +60 -0
  284. package/dist/scope-notice.d.ts.map +1 -0
  285. package/dist/scope-notice.js +56 -0
  286. package/dist/scope-notice.js.map +1 -0
  287. package/dist/search.d.ts +321 -0
  288. package/dist/search.d.ts.map +1 -0
  289. package/dist/search.js +160 -0
  290. package/dist/search.js.map +1 -0
  291. package/dist/seo.d.ts +113 -0
  292. package/dist/seo.d.ts.map +1 -0
  293. package/dist/seo.js +63 -0
  294. package/dist/seo.js.map +1 -0
  295. package/dist/settings.d.ts +453 -0
  296. package/dist/settings.d.ts.map +1 -0
  297. package/dist/settings.js +337 -0
  298. package/dist/settings.js.map +1 -0
  299. package/dist/shipments.d.ts +140 -0
  300. package/dist/shipments.d.ts.map +1 -0
  301. package/dist/shipments.js +14 -0
  302. package/dist/shipments.js.map +1 -0
  303. package/dist/shipping-methods.d.ts +350 -0
  304. package/dist/shipping-methods.d.ts.map +1 -0
  305. package/dist/shipping-methods.js +99 -0
  306. package/dist/shipping-methods.js.map +1 -0
  307. package/dist/shopping-lists.d.ts +122 -0
  308. package/dist/shopping-lists.d.ts.map +1 -0
  309. package/dist/shopping-lists.js +92 -0
  310. package/dist/shopping-lists.js.map +1 -0
  311. package/dist/taxes.d.ts +106 -0
  312. package/dist/taxes.d.ts.map +1 -0
  313. package/dist/taxes.js +80 -0
  314. package/dist/taxes.js.map +1 -0
  315. package/dist/text-normalization.d.ts +199 -0
  316. package/dist/text-normalization.d.ts.map +1 -0
  317. package/dist/text-normalization.js +205 -0
  318. package/dist/text-normalization.js.map +1 -0
  319. package/dist/transactional-emails.d.ts +459 -0
  320. package/dist/transactional-emails.d.ts.map +1 -0
  321. package/dist/transactional-emails.js +212 -0
  322. package/dist/transactional-emails.js.map +1 -0
  323. package/dist/webhooks.d.ts +69 -0
  324. package/dist/webhooks.d.ts.map +1 -0
  325. package/dist/webhooks.js +53 -0
  326. package/dist/webhooks.js.map +1 -0
  327. package/package.json +46 -0
@@ -0,0 +1,678 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Promotion contracts (T129, T132 / FR-052).
4
+ *
5
+ * Three kinds shipped in this slice:
6
+ * - `percentage_off` — `value` is 0..100
7
+ * - `amount_off` — `value` is money in `currency`
8
+ * - `free_delivery` — `value` is ignored; the cart's delivery cost is zeroed
9
+ *
10
+ * Eligibility rules:
11
+ * - `code` (optional) — when present, only carts that present the code apply;
12
+ * when null, the promotion applies automatically to
13
+ * every eligible cart.
14
+ * - `minCartSubtotal` — cart subtotal threshold (in promotion currency).
15
+ * - `validFrom` / `validUntil` — clock-bound validity window.
16
+ * - `organizationId` / `customerGroupId` — restrict to a single Customer / group.
17
+ * - `categoryId` / `productId` — restrict effect to lines in the chosen scope.
18
+ * - `criteria[]` (feature 012 / US8) — line-level discriminated criteria.
19
+ * Today only the `attribute` variant is meaningful; the union is shaped
20
+ * so the existing flat `categoryId`/`productId`/etc. fields can migrate
21
+ * into it incrementally without breaking the wire format.
22
+ */
23
+ /**
24
+ * Attribute-key syntax: lowercase, must start with a letter, then letters,
25
+ * digits, or underscore. Mirrors the attribute-key regex on the catalog
26
+ * create-attribute schema so the picker and the schema reject the same
27
+ * invalid keys.
28
+ */
29
+ export declare const attributeKeyRegex: RegExp;
30
+ declare const attributeCriterionSchema: z.ZodObject<{
31
+ type: z.ZodLiteral<"attribute">;
32
+ attributeKey: z.ZodString;
33
+ op: z.ZodEnum<{
34
+ in: "in";
35
+ equals: "equals";
36
+ range: "range";
37
+ }>;
38
+ values: z.ZodArray<z.ZodUnknown>;
39
+ }, z.core.$strip>;
40
+ export declare const promotionCriterionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
41
+ type: z.ZodLiteral<"attribute">;
42
+ attributeKey: z.ZodString;
43
+ op: z.ZodEnum<{
44
+ in: "in";
45
+ equals: "equals";
46
+ range: "range";
47
+ }>;
48
+ values: z.ZodArray<z.ZodUnknown>;
49
+ }, z.core.$strip>, z.ZodObject<{
50
+ type: z.ZodLiteral<"category">;
51
+ categoryIds: z.ZodArray<z.ZodString>;
52
+ }, z.core.$strip>, z.ZodObject<{
53
+ type: z.ZodLiteral<"product">;
54
+ productIds: z.ZodArray<z.ZodString>;
55
+ }, z.core.$strip>, z.ZodObject<{
56
+ type: z.ZodLiteral<"customerGroup">;
57
+ customerGroupIds: z.ZodArray<z.ZodString>;
58
+ }, z.core.$strip>, z.ZodObject<{
59
+ type: z.ZodLiteral<"organization">;
60
+ organizationIds: z.ZodArray<z.ZodString>;
61
+ }, z.core.$strip>], "type">;
62
+ export type PromotionCriterion = z.infer<typeof promotionCriterionSchema>;
63
+ export type AttributePromotionCriterion = z.infer<typeof attributeCriterionSchema>;
64
+ /**
65
+ * Operator vocabulary for a promotion rule condition. The admissible set
66
+ * per field/value-type is enforced by the evaluator + write-time validation;
67
+ * the schema accepts the full vocabulary structurally.
68
+ */
69
+ export declare const promotionRuleOpSchema: z.ZodEnum<{
70
+ in: "in";
71
+ startsWith: "startsWith";
72
+ eq: "eq";
73
+ gt: "gt";
74
+ gte: "gte";
75
+ lt: "lt";
76
+ lte: "lte";
77
+ contains: "contains";
78
+ neq: "neq";
79
+ between: "between";
80
+ notIn: "notIn";
81
+ }>;
82
+ export type PromotionRuleOp = z.infer<typeof promotionRuleOpSchema>;
83
+ /** Built-in cart-context / relationship fields available to the Rule Builder. */
84
+ export declare const promotionRuleBuiltinFieldSchema: z.ZodEnum<{
85
+ paymentMethod: "paymentMethod";
86
+ category: "category";
87
+ organization: "organization";
88
+ deliveryMethod: "deliveryMethod";
89
+ customerGroup: "customerGroup";
90
+ cartTotal: "cartTotal";
91
+ deliveryCountry: "deliveryCountry";
92
+ deliveryPostalCode: "deliveryPostalCode";
93
+ }>;
94
+ export type PromotionRuleBuiltinField = z.infer<typeof promotionRuleBuiltinFieldSchema>;
95
+ /** A rule field is either a built-in key or a promo-eligible product attribute. */
96
+ export declare const promotionRuleFieldSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
97
+ kind: z.ZodLiteral<"builtin">;
98
+ key: z.ZodEnum<{
99
+ paymentMethod: "paymentMethod";
100
+ category: "category";
101
+ organization: "organization";
102
+ deliveryMethod: "deliveryMethod";
103
+ customerGroup: "customerGroup";
104
+ cartTotal: "cartTotal";
105
+ deliveryCountry: "deliveryCountry";
106
+ deliveryPostalCode: "deliveryPostalCode";
107
+ }>;
108
+ }, z.core.$strip>, z.ZodObject<{
109
+ kind: z.ZodLiteral<"attribute">;
110
+ attributeKey: z.ZodString;
111
+ }, z.core.$strip>], "kind">;
112
+ export type PromotionRuleField = z.infer<typeof promotionRuleFieldSchema>;
113
+ export declare const promotionRuleValueSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
114
+ export type PromotionRuleValue = z.infer<typeof promotionRuleValueSchema>;
115
+ export type PromotionRuleAll = {
116
+ kind: 'all';
117
+ };
118
+ export type PromotionRuleCondition = {
119
+ kind: 'condition';
120
+ field: PromotionRuleField;
121
+ op: PromotionRuleOp;
122
+ values: PromotionRuleValue[];
123
+ };
124
+ export type PromotionRuleGroup = {
125
+ kind: 'group';
126
+ op: 'AND' | 'OR';
127
+ children: PromotionRule[];
128
+ };
129
+ export type PromotionRule = PromotionRuleAll | PromotionRuleCondition | PromotionRuleGroup;
130
+ /** Maximum nesting depth of a rule tree (mirrors the price-list guard). */
131
+ export declare function promotionRuleDepth(node: PromotionRule): number;
132
+ export declare const promotionRuleSchema: z.ZodType<PromotionRule, unknown, z.core.$ZodTypeInternals<PromotionRule, unknown>>;
133
+ export declare const promotionGiftTargetSchema: z.ZodEnum<{
134
+ cheapest: "cheapest";
135
+ most_expensive: "most_expensive";
136
+ }>;
137
+ export type PromotionGiftTarget = z.infer<typeof promotionGiftTargetSchema>;
138
+ export declare const promotionActionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
139
+ type: z.ZodLiteral<"free_delivery">;
140
+ }, z.core.$strip>, z.ZodObject<{
141
+ type: z.ZodLiteral<"percentage_off_cart">;
142
+ percent: z.ZodNumber;
143
+ }, z.core.$strip>, z.ZodObject<{
144
+ type: z.ZodLiteral<"amount_off_cart">;
145
+ amount: z.ZodNumber;
146
+ currency: z.ZodString;
147
+ }, z.core.$strip>, z.ZodObject<{
148
+ type: z.ZodLiteral<"buy_x_get_y_free">;
149
+ buyQuantity: z.ZodNumber;
150
+ freeQuantity: z.ZodNumber;
151
+ target: z.ZodEnum<{
152
+ cheapest: "cheapest";
153
+ most_expensive: "most_expensive";
154
+ }>;
155
+ }, z.core.$strip>, z.ZodObject<{
156
+ type: z.ZodLiteral<"spend_x_percent_off">;
157
+ spendStep: z.ZodNumber;
158
+ percent: z.ZodNumber;
159
+ currency: z.ZodString;
160
+ }, z.core.$strip>, z.ZodObject<{
161
+ type: z.ZodLiteral<"spend_x_amount_off">;
162
+ spendStep: z.ZodNumber;
163
+ amount: z.ZodNumber;
164
+ currency: z.ZodString;
165
+ }, z.core.$strip>, z.ZodObject<{
166
+ type: z.ZodLiteral<"every_nth_product_percent_off">;
167
+ nth: z.ZodNumber;
168
+ percent: z.ZodNumber;
169
+ }, z.core.$strip>, z.ZodObject<{
170
+ type: z.ZodLiteral<"buy_x_units_y_free">;
171
+ productId: z.ZodString;
172
+ buyUnits: z.ZodNumber;
173
+ freeUnits: z.ZodNumber;
174
+ }, z.core.$strip>, z.ZodObject<{
175
+ type: z.ZodLiteral<"buy_x_units_percent_off">;
176
+ productId: z.ZodString;
177
+ buyUnits: z.ZodNumber;
178
+ percent: z.ZodNumber;
179
+ }, z.core.$strip>, z.ZodObject<{
180
+ type: z.ZodLiteral<"buy_x_units_amount_off">;
181
+ productId: z.ZodString;
182
+ buyUnits: z.ZodNumber;
183
+ amount: z.ZodNumber;
184
+ currency: z.ZodString;
185
+ }, z.core.$strip>], "type">;
186
+ export type PromotionAction = z.infer<typeof promotionActionSchema>;
187
+ export declare const promotionActionTypeSchema: z.ZodEnum<{
188
+ free_delivery: "free_delivery";
189
+ percentage_off_cart: "percentage_off_cart";
190
+ amount_off_cart: "amount_off_cart";
191
+ buy_x_get_y_free: "buy_x_get_y_free";
192
+ spend_x_percent_off: "spend_x_percent_off";
193
+ spend_x_amount_off: "spend_x_amount_off";
194
+ every_nth_product_percent_off: "every_nth_product_percent_off";
195
+ buy_x_units_y_free: "buy_x_units_y_free";
196
+ buy_x_units_percent_off: "buy_x_units_percent_off";
197
+ buy_x_units_amount_off: "buy_x_units_amount_off";
198
+ }>;
199
+ export type PromotionActionType = z.infer<typeof promotionActionTypeSchema>;
200
+ export declare const promotionKindSchema: z.ZodEnum<{
201
+ free_delivery: "free_delivery";
202
+ percentage_off: "percentage_off";
203
+ amount_off: "amount_off";
204
+ }>;
205
+ export type PromotionKind = z.infer<typeof promotionKindSchema>;
206
+ export declare const promotionSchema: z.ZodObject<{
207
+ id: z.ZodString;
208
+ code: z.ZodNullable<z.ZodString>;
209
+ name: z.ZodString;
210
+ kind: z.ZodNullable<z.ZodEnum<{
211
+ free_delivery: "free_delivery";
212
+ percentage_off: "percentage_off";
213
+ amount_off: "amount_off";
214
+ }>>;
215
+ value: z.ZodNullable<z.ZodNumber>;
216
+ currency: z.ZodNullable<z.ZodString>;
217
+ minCartSubtotal: z.ZodNullable<z.ZodNumber>;
218
+ validFrom: z.ZodNullable<z.ZodString>;
219
+ validUntil: z.ZodNullable<z.ZodString>;
220
+ organizationId: z.ZodNullable<z.ZodString>;
221
+ customerGroupId: z.ZodNullable<z.ZodString>;
222
+ categoryId: z.ZodNullable<z.ZodString>;
223
+ productId: z.ZodNullable<z.ZodString>;
224
+ criteria: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
225
+ type: z.ZodLiteral<"attribute">;
226
+ attributeKey: z.ZodString;
227
+ op: z.ZodEnum<{
228
+ in: "in";
229
+ equals: "equals";
230
+ range: "range";
231
+ }>;
232
+ values: z.ZodArray<z.ZodUnknown>;
233
+ }, z.core.$strip>, z.ZodObject<{
234
+ type: z.ZodLiteral<"category">;
235
+ categoryIds: z.ZodArray<z.ZodString>;
236
+ }, z.core.$strip>, z.ZodObject<{
237
+ type: z.ZodLiteral<"product">;
238
+ productIds: z.ZodArray<z.ZodString>;
239
+ }, z.core.$strip>, z.ZodObject<{
240
+ type: z.ZodLiteral<"customerGroup">;
241
+ customerGroupIds: z.ZodArray<z.ZodString>;
242
+ }, z.core.$strip>, z.ZodObject<{
243
+ type: z.ZodLiteral<"organization">;
244
+ organizationIds: z.ZodArray<z.ZodString>;
245
+ }, z.core.$strip>], "type">>>;
246
+ isActive: z.ZodBoolean;
247
+ description: z.ZodDefault<z.ZodNullable<z.ZodString>>;
248
+ priority: z.ZodDefault<z.ZodNumber>;
249
+ stopFurther: z.ZodDefault<z.ZodBoolean>;
250
+ action: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
251
+ type: z.ZodLiteral<"free_delivery">;
252
+ }, z.core.$strip>, z.ZodObject<{
253
+ type: z.ZodLiteral<"percentage_off_cart">;
254
+ percent: z.ZodNumber;
255
+ }, z.core.$strip>, z.ZodObject<{
256
+ type: z.ZodLiteral<"amount_off_cart">;
257
+ amount: z.ZodNumber;
258
+ currency: z.ZodString;
259
+ }, z.core.$strip>, z.ZodObject<{
260
+ type: z.ZodLiteral<"buy_x_get_y_free">;
261
+ buyQuantity: z.ZodNumber;
262
+ freeQuantity: z.ZodNumber;
263
+ target: z.ZodEnum<{
264
+ cheapest: "cheapest";
265
+ most_expensive: "most_expensive";
266
+ }>;
267
+ }, z.core.$strip>, z.ZodObject<{
268
+ type: z.ZodLiteral<"spend_x_percent_off">;
269
+ spendStep: z.ZodNumber;
270
+ percent: z.ZodNumber;
271
+ currency: z.ZodString;
272
+ }, z.core.$strip>, z.ZodObject<{
273
+ type: z.ZodLiteral<"spend_x_amount_off">;
274
+ spendStep: z.ZodNumber;
275
+ amount: z.ZodNumber;
276
+ currency: z.ZodString;
277
+ }, z.core.$strip>, z.ZodObject<{
278
+ type: z.ZodLiteral<"every_nth_product_percent_off">;
279
+ nth: z.ZodNumber;
280
+ percent: z.ZodNumber;
281
+ }, z.core.$strip>, z.ZodObject<{
282
+ type: z.ZodLiteral<"buy_x_units_y_free">;
283
+ productId: z.ZodString;
284
+ buyUnits: z.ZodNumber;
285
+ freeUnits: z.ZodNumber;
286
+ }, z.core.$strip>, z.ZodObject<{
287
+ type: z.ZodLiteral<"buy_x_units_percent_off">;
288
+ productId: z.ZodString;
289
+ buyUnits: z.ZodNumber;
290
+ percent: z.ZodNumber;
291
+ }, z.core.$strip>, z.ZodObject<{
292
+ type: z.ZodLiteral<"buy_x_units_amount_off">;
293
+ productId: z.ZodString;
294
+ buyUnits: z.ZodNumber;
295
+ amount: z.ZodNumber;
296
+ currency: z.ZodString;
297
+ }, z.core.$strip>], "type">>>;
298
+ ruleId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
299
+ rule: z.ZodDefault<z.ZodNullable<z.ZodType<PromotionRule, unknown, z.core.$ZodTypeInternals<PromotionRule, unknown>>>>;
300
+ usageLimitGlobal: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
301
+ usageLimitPerOrganization: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
302
+ usageLimitPerCustomer: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
303
+ createdAt: z.ZodString;
304
+ updatedAt: z.ZodString;
305
+ }, z.core.$strip>;
306
+ export type Promotion = z.infer<typeof promotionSchema>;
307
+ export declare const upsertPromotionRequestSchema: z.ZodObject<{
308
+ code: z.ZodOptional<z.ZodNullable<z.ZodString>>;
309
+ name: z.ZodString;
310
+ kind: z.ZodOptional<z.ZodEnum<{
311
+ free_delivery: "free_delivery";
312
+ percentage_off: "percentage_off";
313
+ amount_off: "amount_off";
314
+ }>>;
315
+ value: z.ZodOptional<z.ZodNumber>;
316
+ currency: z.ZodOptional<z.ZodNullable<z.ZodString>>;
317
+ minCartSubtotal: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
318
+ validFrom: z.ZodOptional<z.ZodNullable<z.ZodString>>;
319
+ validUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
320
+ organizationId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
321
+ customerGroupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
322
+ categoryId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
323
+ productId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
324
+ criteria: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
325
+ type: z.ZodLiteral<"attribute">;
326
+ attributeKey: z.ZodString;
327
+ op: z.ZodEnum<{
328
+ in: "in";
329
+ equals: "equals";
330
+ range: "range";
331
+ }>;
332
+ values: z.ZodArray<z.ZodUnknown>;
333
+ }, z.core.$strip>, z.ZodObject<{
334
+ type: z.ZodLiteral<"category">;
335
+ categoryIds: z.ZodArray<z.ZodString>;
336
+ }, z.core.$strip>, z.ZodObject<{
337
+ type: z.ZodLiteral<"product">;
338
+ productIds: z.ZodArray<z.ZodString>;
339
+ }, z.core.$strip>, z.ZodObject<{
340
+ type: z.ZodLiteral<"customerGroup">;
341
+ customerGroupIds: z.ZodArray<z.ZodString>;
342
+ }, z.core.$strip>, z.ZodObject<{
343
+ type: z.ZodLiteral<"organization">;
344
+ organizationIds: z.ZodArray<z.ZodString>;
345
+ }, z.core.$strip>], "type">>>;
346
+ isActive: z.ZodOptional<z.ZodBoolean>;
347
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
348
+ priority: z.ZodOptional<z.ZodNumber>;
349
+ stopFurther: z.ZodOptional<z.ZodBoolean>;
350
+ action: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
351
+ type: z.ZodLiteral<"free_delivery">;
352
+ }, z.core.$strip>, z.ZodObject<{
353
+ type: z.ZodLiteral<"percentage_off_cart">;
354
+ percent: z.ZodNumber;
355
+ }, z.core.$strip>, z.ZodObject<{
356
+ type: z.ZodLiteral<"amount_off_cart">;
357
+ amount: z.ZodNumber;
358
+ currency: z.ZodString;
359
+ }, z.core.$strip>, z.ZodObject<{
360
+ type: z.ZodLiteral<"buy_x_get_y_free">;
361
+ buyQuantity: z.ZodNumber;
362
+ freeQuantity: z.ZodNumber;
363
+ target: z.ZodEnum<{
364
+ cheapest: "cheapest";
365
+ most_expensive: "most_expensive";
366
+ }>;
367
+ }, z.core.$strip>, z.ZodObject<{
368
+ type: z.ZodLiteral<"spend_x_percent_off">;
369
+ spendStep: z.ZodNumber;
370
+ percent: z.ZodNumber;
371
+ currency: z.ZodString;
372
+ }, z.core.$strip>, z.ZodObject<{
373
+ type: z.ZodLiteral<"spend_x_amount_off">;
374
+ spendStep: z.ZodNumber;
375
+ amount: z.ZodNumber;
376
+ currency: z.ZodString;
377
+ }, z.core.$strip>, z.ZodObject<{
378
+ type: z.ZodLiteral<"every_nth_product_percent_off">;
379
+ nth: z.ZodNumber;
380
+ percent: z.ZodNumber;
381
+ }, z.core.$strip>, z.ZodObject<{
382
+ type: z.ZodLiteral<"buy_x_units_y_free">;
383
+ productId: z.ZodString;
384
+ buyUnits: z.ZodNumber;
385
+ freeUnits: z.ZodNumber;
386
+ }, z.core.$strip>, z.ZodObject<{
387
+ type: z.ZodLiteral<"buy_x_units_percent_off">;
388
+ productId: z.ZodString;
389
+ buyUnits: z.ZodNumber;
390
+ percent: z.ZodNumber;
391
+ }, z.core.$strip>, z.ZodObject<{
392
+ type: z.ZodLiteral<"buy_x_units_amount_off">;
393
+ productId: z.ZodString;
394
+ buyUnits: z.ZodNumber;
395
+ amount: z.ZodNumber;
396
+ currency: z.ZodString;
397
+ }, z.core.$strip>], "type">>;
398
+ ruleId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
399
+ rule: z.ZodOptional<z.ZodNullable<z.ZodType<PromotionRule, unknown, z.core.$ZodTypeInternals<PromotionRule, unknown>>>>;
400
+ usageLimitGlobal: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
401
+ usageLimitPerOrganization: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
402
+ usageLimitPerCustomer: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
403
+ salesChannelIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
404
+ }, z.core.$strip>;
405
+ export declare const promotionStatsGroupBySchema: z.ZodEnum<{
406
+ customer: "customer";
407
+ organization: "organization";
408
+ salesChannel: "salesChannel";
409
+ customerGroup: "customerGroup";
410
+ }>;
411
+ export type PromotionStatsGroupBy = z.infer<typeof promotionStatsGroupBySchema>;
412
+ export declare const promotionUsageStatsSchema: z.ZodObject<{
413
+ totalUses: z.ZodNumber;
414
+ totalDiscount: z.ZodNumber;
415
+ currency: z.ZodNullable<z.ZodString>;
416
+ groupBy: z.ZodNullable<z.ZodEnum<{
417
+ customer: "customer";
418
+ organization: "organization";
419
+ salesChannel: "salesChannel";
420
+ customerGroup: "customerGroup";
421
+ }>>;
422
+ breakdown: z.ZodArray<z.ZodObject<{
423
+ key: z.ZodNullable<z.ZodString>;
424
+ uses: z.ZodNumber;
425
+ discount: z.ZodNumber;
426
+ }, z.core.$strip>>;
427
+ }, z.core.$strip>;
428
+ export type PromotionUsageStats = z.infer<typeof promotionUsageStatsSchema>;
429
+ export declare const promotionRuleRecordSchema: z.ZodObject<{
430
+ id: z.ZodString;
431
+ name: z.ZodString;
432
+ description: z.ZodNullable<z.ZodString>;
433
+ definition: z.ZodType<PromotionRule, unknown, z.core.$ZodTypeInternals<PromotionRule, unknown>>;
434
+ createdAt: z.ZodString;
435
+ updatedAt: z.ZodString;
436
+ }, z.core.$strip>;
437
+ export type PromotionRuleRecord = z.infer<typeof promotionRuleRecordSchema>;
438
+ export declare const upsertPromotionRuleRequestSchema: z.ZodObject<{
439
+ name: z.ZodString;
440
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
441
+ definition: z.ZodType<PromotionRule, unknown, z.core.$ZodTypeInternals<PromotionRule, unknown>>;
442
+ }, z.core.$strip>;
443
+ export type UpsertPromotionRuleRequest = z.infer<typeof upsertPromotionRuleRequestSchema>;
444
+ export declare const couponFormatSchema: z.ZodEnum<{
445
+ alnum: "alnum";
446
+ digits: "digits";
447
+ letters: "letters";
448
+ }>;
449
+ export type CouponFormat = z.infer<typeof couponFormatSchema>;
450
+ export declare const couponLimitScopeSchema: z.ZodEnum<{
451
+ per_coupon: "per_coupon";
452
+ shared_batch: "shared_batch";
453
+ }>;
454
+ export type CouponLimitScope = z.infer<typeof couponLimitScopeSchema>;
455
+ export declare const promotionCouponSchema: z.ZodObject<{
456
+ id: z.ZodString;
457
+ promotionId: z.ZodString;
458
+ batchId: z.ZodNullable<z.ZodString>;
459
+ code: z.ZodString;
460
+ limitScope: z.ZodEnum<{
461
+ per_coupon: "per_coupon";
462
+ shared_batch: "shared_batch";
463
+ }>;
464
+ isActive: z.ZodBoolean;
465
+ createdAt: z.ZodString;
466
+ }, z.core.$strip>;
467
+ export type PromotionCouponDto = z.infer<typeof promotionCouponSchema>;
468
+ export declare const generateCouponsRequestSchema: z.ZodObject<{
469
+ count: z.ZodNumber;
470
+ length: z.ZodNumber;
471
+ format: z.ZodEnum<{
472
+ alnum: "alnum";
473
+ digits: "digits";
474
+ letters: "letters";
475
+ }>;
476
+ prefix: z.ZodOptional<z.ZodNullable<z.ZodString>>;
477
+ suffix: z.ZodOptional<z.ZodNullable<z.ZodString>>;
478
+ dashEvery: z.ZodOptional<z.ZodNumber>;
479
+ limitScope: z.ZodDefault<z.ZodEnum<{
480
+ per_coupon: "per_coupon";
481
+ shared_batch: "shared_batch";
482
+ }>>;
483
+ }, z.core.$strip>;
484
+ export type GenerateCouponsRequest = z.infer<typeof generateCouponsRequestSchema>;
485
+ /** Bulk activate/deactivate coupons of a promotion by id. */
486
+ export declare const bulkCouponActiveRequestSchema: z.ZodObject<{
487
+ couponIds: z.ZodArray<z.ZodString>;
488
+ isActive: z.ZodBoolean;
489
+ }, z.core.$strip>;
490
+ export type BulkCouponActiveRequest = z.infer<typeof bulkCouponActiveRequestSchema>;
491
+ export declare const cartLineSchema: z.ZodObject<{
492
+ productId: z.ZodString;
493
+ variantId: z.ZodNullable<z.ZodString>;
494
+ categoryIds: z.ZodArray<z.ZodString>;
495
+ quantity: z.ZodNumber;
496
+ unitPrice: z.ZodObject<{
497
+ amount: z.ZodNumber;
498
+ currency: z.ZodString;
499
+ }, z.core.$strip>;
500
+ attributeValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
501
+ }, z.core.$strip>;
502
+ export type CartLine = z.infer<typeof cartLineSchema>;
503
+ export declare const cartSnapshotSchema: z.ZodObject<{
504
+ organizationId: z.ZodNullable<z.ZodString>;
505
+ customerGroupId: z.ZodNullable<z.ZodString>;
506
+ currency: z.ZodString;
507
+ lines: z.ZodArray<z.ZodObject<{
508
+ productId: z.ZodString;
509
+ variantId: z.ZodNullable<z.ZodString>;
510
+ categoryIds: z.ZodArray<z.ZodString>;
511
+ quantity: z.ZodNumber;
512
+ unitPrice: z.ZodObject<{
513
+ amount: z.ZodNumber;
514
+ currency: z.ZodString;
515
+ }, z.core.$strip>;
516
+ attributeValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
517
+ }, z.core.$strip>>;
518
+ deliveryTotal: z.ZodNumber;
519
+ promotionCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
520
+ salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
521
+ customerAccountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
522
+ paymentMethodCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
523
+ deliveryMethodCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
524
+ deliveryCountry: z.ZodOptional<z.ZodNullable<z.ZodString>>;
525
+ deliveryPostalCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
526
+ }, z.core.$strip>;
527
+ export type CartSnapshot = z.infer<typeof cartSnapshotSchema>;
528
+ export declare const promotionApplicationSchema: z.ZodObject<{
529
+ subtotal: z.ZodNumber;
530
+ discountTotal: z.ZodNumber;
531
+ deliveryTotal: z.ZodNumber;
532
+ total: z.ZodNumber;
533
+ appliedPromotions: z.ZodArray<z.ZodObject<{
534
+ promotionId: z.ZodString;
535
+ kind: z.ZodNullable<z.ZodEnum<{
536
+ free_delivery: "free_delivery";
537
+ percentage_off: "percentage_off";
538
+ amount_off: "amount_off";
539
+ }>>;
540
+ actionType: z.ZodDefault<z.ZodNullable<z.ZodEnum<{
541
+ free_delivery: "free_delivery";
542
+ percentage_off_cart: "percentage_off_cart";
543
+ amount_off_cart: "amount_off_cart";
544
+ buy_x_get_y_free: "buy_x_get_y_free";
545
+ spend_x_percent_off: "spend_x_percent_off";
546
+ spend_x_amount_off: "spend_x_amount_off";
547
+ every_nth_product_percent_off: "every_nth_product_percent_off";
548
+ buy_x_units_y_free: "buy_x_units_y_free";
549
+ buy_x_units_percent_off: "buy_x_units_percent_off";
550
+ buy_x_units_amount_off: "buy_x_units_amount_off";
551
+ }>>>;
552
+ couponId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
553
+ amount: z.ZodNumber;
554
+ }, z.core.$strip>>;
555
+ }, z.core.$strip>;
556
+ export type PromotionApplication = z.infer<typeof promotionApplicationSchema>;
557
+ /**
558
+ * Picker payload returned by `GET /api/v1/admin/promotions/rule-targets/attributes`.
559
+ * Lists every attribute carrying `isPromoRule = true`, with the option list
560
+ * inline for select-style types so the editor can render the value picker
561
+ * without an additional round-trip.
562
+ */
563
+ export declare const promotionRuleAttributeOptionSchema: z.ZodObject<{
564
+ value: z.ZodString;
565
+ label: z.ZodRecord<z.ZodString, z.ZodString>;
566
+ labelDefault: z.ZodString;
567
+ }, z.core.$strip>;
568
+ export type PromotionRuleAttributeOption = z.infer<typeof promotionRuleAttributeOptionSchema>;
569
+ export declare const promotionRuleAttributeSchema: z.ZodObject<{
570
+ id: z.ZodString;
571
+ key: z.ZodString;
572
+ label: z.ZodRecord<z.ZodString, z.ZodString>;
573
+ labelDefault: z.ZodString;
574
+ valueType: z.ZodEnum<{
575
+ string: "string";
576
+ number: "number";
577
+ boolean: "boolean";
578
+ date: "date";
579
+ enum: "enum";
580
+ select: "select";
581
+ price: "price";
582
+ multiselect: "multiselect";
583
+ }>;
584
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
585
+ value: z.ZodString;
586
+ label: z.ZodRecord<z.ZodString, z.ZodString>;
587
+ labelDefault: z.ZodString;
588
+ }, z.core.$strip>>>;
589
+ }, z.core.$strip>;
590
+ export type PromotionRuleAttribute = z.infer<typeof promotionRuleAttributeSchema>;
591
+ export declare const promotionRuleAttributesResponseSchema: z.ZodObject<{
592
+ data: z.ZodObject<{
593
+ items: z.ZodArray<z.ZodObject<{
594
+ id: z.ZodString;
595
+ key: z.ZodString;
596
+ label: z.ZodRecord<z.ZodString, z.ZodString>;
597
+ labelDefault: z.ZodString;
598
+ valueType: z.ZodEnum<{
599
+ string: "string";
600
+ number: "number";
601
+ boolean: "boolean";
602
+ date: "date";
603
+ enum: "enum";
604
+ select: "select";
605
+ price: "price";
606
+ multiselect: "multiselect";
607
+ }>;
608
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
609
+ value: z.ZodString;
610
+ label: z.ZodRecord<z.ZodString, z.ZodString>;
611
+ labelDefault: z.ZodString;
612
+ }, z.core.$strip>>>;
613
+ }, z.core.$strip>>;
614
+ }, z.core.$strip>;
615
+ }, z.core.$strip>;
616
+ export type PromotionRuleAttributesResponse = z.infer<typeof promotionRuleAttributesResponseSchema>;
617
+ /**
618
+ * What a presented coupon code resolved to.
619
+ *
620
+ * Deliberately **not** the `Promotion` row. `carts` reaches both entities for
621
+ * one question in two parts — "is this code live, and if the buyer cannot use
622
+ * it, *why* not?" — across a three-step lookup: the legacy `promotions.code`
623
+ * column first, then the `promotion_coupons` table, then the promotion behind
624
+ * the coupon, each filtered on `isActive`. Publishing the row would publish
625
+ * thirty columns to answer a question about eight.
626
+ *
627
+ * The four eligibility fields were missing when this shape was first published
628
+ * and were added in `carts`' cut. Its coupon service does not merely accept or
629
+ * reject a code: it answers `expired`, `wrong_organization` or
630
+ * `below_min_spend`, and the storefront renders that sentence. Without them the
631
+ * cut would have collapsed three explanations into `invalid_code`, which is a
632
+ * product change wearing a refactor.
633
+ */
634
+ export interface ResolvedPromotionCode {
635
+ promotionId: string;
636
+ /** The coupon row the code came from, or `null` for a legacy inline code. */
637
+ couponId: string | null;
638
+ name: string;
639
+ isActive: boolean;
640
+ /** Window bounds; `null` means unbounded on that side. */
641
+ validFrom: Date | null;
642
+ validUntil: Date | null;
643
+ /** When set, only carts of that organisation may use the code. */
644
+ organizationId: string | null;
645
+ /** Decimal string, or `null` for no minimum. Compared against the subtotal. */
646
+ minCartSubtotal: string | null;
647
+ }
648
+ /**
649
+ * Container name: `promotionCodePort`. Owner: `promotions`.
650
+ *
651
+ * When `promotions` is off the lookup fails closed, and that is right: a cart
652
+ * that cannot resolve a coupon must refuse it rather than silently accept the
653
+ * code and price the order without the discount, which is the failure a buyer
654
+ * only notices on the invoice.
655
+ */
656
+ export interface PromotionCodePort {
657
+ /** `null` when no live promotion answers to the code. */
658
+ resolveByCode(code: string): Promise<ResolvedPromotionCode | null>;
659
+ }
660
+ /**
661
+ * Container name: `promotionService`. Owner: `promotions`.
662
+ *
663
+ * The evaluation seam: a cart snapshot in, the applicable discounts out.
664
+ * `carts` and `orders` both call it, and both already pass and receive
665
+ * contract-typed shapes — so this port names what they were importing the
666
+ * class to get.
667
+ *
668
+ * **Owner off:** the seam fails closed — resolving this port throws
669
+ * `ModuleDisabledError` and the call answers 503 `MODULE_DISABLED`, so nothing
670
+ * half-executes. Whether `promotions` has an off state at all is its manifest's
671
+ * `activation` to say, not this line's: a module declaring
672
+ * `nonDeactivatable` never enters one.
673
+ */
674
+ export interface PromotionApplyPort {
675
+ applyToCart(snapshot: CartSnapshot): Promise<PromotionApplication>;
676
+ }
677
+ export {};
678
+ //# sourceMappingURL=promotions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promotions.d.ts","sourceRoot":"","sources":["../src/promotions.ts"],"names":[],"mappings":"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"}