@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,186 @@
1
+ // Megamenu — feature 015 contract surface.
2
+ // Pages, Bindings, Items (with a discriminated-union target shape), the
3
+ // resolved storefront payload. Per Principle V these schemas are the
4
+ // source of truth for every HTTP boundary in the new `megamenu` module.
5
+ import { z } from 'zod';
6
+ import { isoDateTimeSchema, multilingualStringSchema, uuidSchema } from './common.js';
7
+ // ────────────────────────────────────────────────────────────────────
8
+ // Domain primitives
9
+ // ────────────────────────────────────────────────────────────────────
10
+ export const megamenuItemKindSchema = z.enum([
11
+ 'category-link',
12
+ 'cms-page-link',
13
+ 'external-link',
14
+ 'button',
15
+ 'asset',
16
+ 'cms-block-embed',
17
+ ]);
18
+ export const megamenuButtonVariantSchema = z.enum(['primary', 'secondary', 'ghost']);
19
+ export const megamenuIconPositionSchema = z.enum(['left', 'right']);
20
+ export const megamenuEmbedSideSchema = z.enum(['left', 'right']);
21
+ export const megamenuAssetKindSchema = z.enum(['image', 'video']);
22
+ const externalUrlRegex = /^(?:https?:\/\/|tel:|mailto:)/i;
23
+ const externalUrlSchema = z
24
+ .string()
25
+ .min(1)
26
+ .max(2048)
27
+ .refine((value) => externalUrlRegex.test(value), {
28
+ message: 'External link must use http://, https://, tel:, or mailto: scheme.',
29
+ });
30
+ const buttonUrlSchema = z.string().min(1).max(2048);
31
+ const optionalIconShape = {
32
+ iconAssetId: uuidSchema.nullable().optional(),
33
+ iconPosition: megamenuIconPositionSchema.nullable().optional(),
34
+ };
35
+ // ────────────────────────────────────────────────────────────────────
36
+ // Item-level discriminated union — the wire shape carries `kind` at
37
+ // the item level and the kind-specific fields collapsed into `target`.
38
+ // ────────────────────────────────────────────────────────────────────
39
+ export const megamenuItemBaseFields = {
40
+ id: uuidSchema.optional(),
41
+ parentId: uuidSchema.nullable().optional(),
42
+ position: z.number().int().nonnegative(),
43
+ labels: multilingualStringSchema,
44
+ descriptions: multilingualStringSchema.nullable().optional(),
45
+ };
46
+ export const categoryLinkTargetSchema = z.object({
47
+ categoryId: uuidSchema,
48
+ ...optionalIconShape,
49
+ });
50
+ export const cmsPageLinkTargetSchema = z.object({
51
+ pageId: uuidSchema,
52
+ ...optionalIconShape,
53
+ });
54
+ export const externalLinkTargetSchema = z.object({
55
+ url: externalUrlSchema,
56
+ ...optionalIconShape,
57
+ });
58
+ export const buttonTargetSchema = z.object({
59
+ url: buttonUrlSchema,
60
+ variant: megamenuButtonVariantSchema,
61
+ });
62
+ export const assetTargetSchema = z.union([
63
+ z.object({
64
+ assetId: uuidSchema,
65
+ kind: megamenuAssetKindSchema,
66
+ }),
67
+ z.object({
68
+ /** Free URL — replaced with assetId at save time via Assets Library import. */
69
+ url: z.string().url(),
70
+ kind: megamenuAssetKindSchema,
71
+ }),
72
+ ]);
73
+ export const cmsBlockEmbedTargetSchema = z.object({
74
+ blockId: uuidSchema,
75
+ embedSide: megamenuEmbedSideSchema,
76
+ });
77
+ export const megamenuItemSchema = z.discriminatedUnion('kind', [
78
+ z.object({ ...megamenuItemBaseFields, kind: z.literal('category-link'), target: categoryLinkTargetSchema }),
79
+ z.object({ ...megamenuItemBaseFields, kind: z.literal('cms-page-link'), target: cmsPageLinkTargetSchema }),
80
+ z.object({ ...megamenuItemBaseFields, kind: z.literal('external-link'), target: externalLinkTargetSchema }),
81
+ z.object({ ...megamenuItemBaseFields, kind: z.literal('button'), target: buttonTargetSchema }),
82
+ z.object({ ...megamenuItemBaseFields, kind: z.literal('asset'), target: assetTargetSchema }),
83
+ z.object({ ...megamenuItemBaseFields, kind: z.literal('cms-block-embed'), target: cmsBlockEmbedTargetSchema }),
84
+ ]);
85
+ // ────────────────────────────────────────────────────────────────────
86
+ // Megamenu (configuration row)
87
+ // ────────────────────────────────────────────────────────────────────
88
+ export const megamenuBindingSchema = z.object({
89
+ salesChannelId: uuidSchema,
90
+ language: z.string().min(2).max(8),
91
+ active: z.boolean(),
92
+ version: z.number().int(),
93
+ createdAt: isoDateTimeSchema,
94
+ updatedAt: isoDateTimeSchema,
95
+ });
96
+ export const megamenuSummarySchema = z.object({
97
+ id: uuidSchema,
98
+ name: z.string(),
99
+ description: z.string().nullable(),
100
+ version: z.number().int(),
101
+ bindings: z.array(megamenuBindingSchema),
102
+ activeIn: z.number().int().nonnegative(),
103
+ createdAt: isoDateTimeSchema,
104
+ updatedAt: isoDateTimeSchema,
105
+ });
106
+ export const megamenuDetailSchema = megamenuSummarySchema.extend({
107
+ items: z.array(megamenuItemSchema),
108
+ });
109
+ export const createMegamenuRequestSchema = z.object({
110
+ name: z.string().min(1).max(200),
111
+ description: z.string().max(2000).nullable().optional(),
112
+ });
113
+ export const patchMegamenuRequestSchema = z
114
+ .object({
115
+ name: z.string().min(1).max(200).optional(),
116
+ description: z.string().max(2000).nullable().optional(),
117
+ version: z.number().int().optional(),
118
+ })
119
+ .refine((x) => Object.keys(x).length > 0, { message: 'At least one field required.' });
120
+ export const putItemsRequestSchema = z.object({
121
+ items: z.array(megamenuItemSchema),
122
+ version: z.number().int(),
123
+ });
124
+ export const addBindingRequestSchema = z.object({
125
+ salesChannelId: uuidSchema,
126
+ language: z.string().min(2).max(8),
127
+ });
128
+ export const activateBindingRequestSchema = addBindingRequestSchema;
129
+ // ────────────────────────────────────────────────────────────────────
130
+ // Storefront resolved payload (recursive)
131
+ // ────────────────────────────────────────────────────────────────────
132
+ export const megamenuResolvedIconSchema = z.object({
133
+ assetId: uuidSchema,
134
+ url: z.string(),
135
+ position: megamenuIconPositionSchema,
136
+ });
137
+ export const megamenuResolvedAssetSchema = z.object({
138
+ id: uuidSchema,
139
+ kind: megamenuAssetKindSchema,
140
+ url: z.string(),
141
+ label: z.string().nullable(),
142
+ });
143
+ export const megamenuResolvedBlockSchema = z.object({
144
+ id: uuidSchema,
145
+ code: z.string(),
146
+ language: z.string(),
147
+ content: z.object({ schemaVersion: z.number().int(), data: z.unknown() }),
148
+ });
149
+ const resolvedMenuItemBase = z.object({
150
+ id: uuidSchema,
151
+ parentId: uuidSchema.nullable(),
152
+ kind: megamenuItemKindSchema,
153
+ label: z.string(),
154
+ description: z.string().nullable().optional(),
155
+ url: z.string().optional(),
156
+ icon: megamenuResolvedIconSchema.nullable().optional(),
157
+ variant: megamenuButtonVariantSchema.optional(),
158
+ asset: megamenuResolvedAssetSchema.optional(),
159
+ block: megamenuResolvedBlockSchema.optional(),
160
+ embedSide: megamenuEmbedSideSchema.optional(),
161
+ });
162
+ export const resolvedMenuItemSchema = z.lazy(() => resolvedMenuItemBase.extend({ children: z.array(resolvedMenuItemSchema) }));
163
+ export const resolvedMegamenuSchema = z.object({
164
+ megamenuId: uuidSchema,
165
+ name: z.string(),
166
+ language: z.string(),
167
+ items: z.array(resolvedMenuItemSchema),
168
+ });
169
+ // ────────────────────────────────────────────────────────────────────
170
+ // Activate response — surfaces the previously-active menu so the admin
171
+ // can render a "switched from <name>" confirmation.
172
+ // ────────────────────────────────────────────────────────────────────
173
+ export const activateBindingResponseSchema = z.object({
174
+ activated: z.object({
175
+ megamenuId: uuidSchema,
176
+ salesChannelId: uuidSchema,
177
+ language: z.string(),
178
+ }),
179
+ previouslyActive: z
180
+ .object({
181
+ megamenuId: uuidSchema,
182
+ name: z.string(),
183
+ })
184
+ .nullable(),
185
+ });
186
+ //# sourceMappingURL=megamenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"megamenu.js","sourceRoot":"","sources":["../src/megamenu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Storefront actions a Meta event can be bound to — one entry per emitter in
4
+ * `storefront/lib/analytics/ecommerce.ts`. Same closed set as the LinkedIn
5
+ * module: an operator cannot map an action the storefront never emits.
6
+ */
7
+ export declare const metaTriggerActionSchema: z.ZodEnum<{
8
+ contact_form_submitted: "contact_form_submitted";
9
+ place_order_clicked: "place_order_clicked";
10
+ add_to_cart: "add_to_cart";
11
+ add_to_quote_request: "add_to_quote_request";
12
+ add_to_shopping_list: "add_to_shopping_list";
13
+ begin_checkout: "begin_checkout";
14
+ purchase: "purchase";
15
+ product_viewed: "product_viewed";
16
+ }>;
17
+ export type MetaTriggerAction = z.infer<typeof metaTriggerActionSchema>;
18
+ export declare const META_TRIGGER_ACTIONS: readonly MetaTriggerAction[];
19
+ /**
20
+ * Meta's documented standard event for each action, or `null` where Meta has no
21
+ * matching standard name.
22
+ *
23
+ * Fixed in code, not operator-editable: Meta's optimisation, catalogue
24
+ * matching, and ROAS reporting key off these exact names, so letting an
25
+ * operator rename them would quietly downgrade their reporting. Actions with
26
+ * `null` still accept a custom mapping — that is what custom mappings are for.
27
+ */
28
+ export declare const META_STANDARD_EVENTS: Record<MetaTriggerAction, string | null>;
29
+ /** Meta Pixel ID as shown in Events Manager. */
30
+ export declare const metaPixelIdSchema: z.ZodString;
31
+ /** Custom event name: letters, digits, underscore; Meta's practical shape. */
32
+ export declare const metaEventNameSchema: z.ZodString;
33
+ export declare const metaCustomEventMappingSchema: z.ZodObject<{
34
+ id: z.ZodString;
35
+ salesChannelId: z.ZodNullable<z.ZodString>;
36
+ triggerAction: z.ZodEnum<{
37
+ contact_form_submitted: "contact_form_submitted";
38
+ place_order_clicked: "place_order_clicked";
39
+ add_to_cart: "add_to_cart";
40
+ add_to_quote_request: "add_to_quote_request";
41
+ add_to_shopping_list: "add_to_shopping_list";
42
+ begin_checkout: "begin_checkout";
43
+ purchase: "purchase";
44
+ product_viewed: "product_viewed";
45
+ }>;
46
+ eventName: z.ZodString;
47
+ enabled: z.ZodBoolean;
48
+ version: z.ZodNumber;
49
+ createdAt: z.ZodString;
50
+ updatedAt: z.ZodString;
51
+ }, z.core.$strip>;
52
+ export type MetaCustomEventMapping = z.infer<typeof metaCustomEventMappingSchema>;
53
+ export declare const createMetaCustomEventMappingSchema: z.ZodObject<{
54
+ salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ triggerAction: z.ZodEnum<{
56
+ contact_form_submitted: "contact_form_submitted";
57
+ place_order_clicked: "place_order_clicked";
58
+ add_to_cart: "add_to_cart";
59
+ add_to_quote_request: "add_to_quote_request";
60
+ add_to_shopping_list: "add_to_shopping_list";
61
+ begin_checkout: "begin_checkout";
62
+ purchase: "purchase";
63
+ product_viewed: "product_viewed";
64
+ }>;
65
+ eventName: z.ZodString;
66
+ enabled: z.ZodOptional<z.ZodBoolean>;
67
+ }, z.core.$strip>;
68
+ export type CreateMetaCustomEventMapping = z.infer<typeof createMetaCustomEventMappingSchema>;
69
+ export declare const updateMetaCustomEventMappingSchema: z.ZodObject<{
70
+ salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
71
+ triggerAction: z.ZodOptional<z.ZodEnum<{
72
+ contact_form_submitted: "contact_form_submitted";
73
+ place_order_clicked: "place_order_clicked";
74
+ add_to_cart: "add_to_cart";
75
+ add_to_quote_request: "add_to_quote_request";
76
+ add_to_shopping_list: "add_to_shopping_list";
77
+ begin_checkout: "begin_checkout";
78
+ purchase: "purchase";
79
+ product_viewed: "product_viewed";
80
+ }>>;
81
+ eventName: z.ZodOptional<z.ZodString>;
82
+ enabled: z.ZodOptional<z.ZodBoolean>;
83
+ version: z.ZodNumber;
84
+ }, z.core.$strip>;
85
+ export type UpdateMetaCustomEventMapping = z.infer<typeof updateMetaCustomEventMappingSchema>;
86
+ export declare const metaStorefrontMappingSchema: z.ZodObject<{
87
+ triggerAction: z.ZodEnum<{
88
+ contact_form_submitted: "contact_form_submitted";
89
+ place_order_clicked: "place_order_clicked";
90
+ add_to_cart: "add_to_cart";
91
+ add_to_quote_request: "add_to_quote_request";
92
+ add_to_shopping_list: "add_to_shopping_list";
93
+ begin_checkout: "begin_checkout";
94
+ purchase: "purchase";
95
+ product_viewed: "product_viewed";
96
+ }>;
97
+ eventName: z.ZodString;
98
+ }, z.core.$strip>;
99
+ export type MetaStorefrontMapping = z.infer<typeof metaStorefrontMappingSchema>;
100
+ export declare const metaStorefrontConfigSchema: z.ZodObject<{
101
+ enabled: z.ZodBoolean;
102
+ pixelId: z.ZodNullable<z.ZodString>;
103
+ requireConsent: z.ZodBoolean;
104
+ customEvents: z.ZodArray<z.ZodObject<{
105
+ triggerAction: z.ZodEnum<{
106
+ contact_form_submitted: "contact_form_submitted";
107
+ place_order_clicked: "place_order_clicked";
108
+ add_to_cart: "add_to_cart";
109
+ add_to_quote_request: "add_to_quote_request";
110
+ add_to_shopping_list: "add_to_shopping_list";
111
+ begin_checkout: "begin_checkout";
112
+ purchase: "purchase";
113
+ product_viewed: "product_viewed";
114
+ }>;
115
+ eventName: z.ZodString;
116
+ }, z.core.$strip>>;
117
+ }, z.core.$strip>;
118
+ export type MetaStorefrontConfig = z.infer<typeof metaStorefrontConfigSchema>;
119
+ /** Fully-off config — the shape every failure path degrades to. */
120
+ export declare const META_DISABLED_CONFIG: MetaStorefrontConfig;
121
+ export declare const META_ADS_SETTING_CODES: {
122
+ readonly ENABLED: "meta_ads.enabled";
123
+ readonly PIXEL_ID: "meta_ads.pixel_id";
124
+ readonly REQUIRE_CONSENT: "meta_ads.require_consent";
125
+ };
126
+ //# sourceMappingURL=meta-ads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-ads.d.ts","sourceRoot":"","sources":["../src/meta-ads.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;EASlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,oBAAoB,EAAE,SAAS,iBAAiB,EAC5B,CAAC;AAElC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CASzE,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,aAE2B,CAAC;AAE1D,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,aAEmC,CAAC;AAMpE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;iBAUvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;iBAK7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;iBAO7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAM9F,eAAO,MAAM,2BAA2B;;;;;;;;;;;;iBAGtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;iBAOrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,oBAKlC,CAAC;AAMF,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC"}
@@ -0,0 +1,112 @@
1
+ // Meta Ads module — feature 064 contract surface.
2
+ //
3
+ // Holds the admin custom-event-mapping DTOs, the storefront per-channel config
4
+ // read, the storefront-action enum, the fixed action → Meta standard event map,
5
+ // and `META_ADS_SETTING_CODES`.
6
+ import { z } from 'zod';
7
+ import { isoDateTimeSchema, uuidSchema } from './common.js';
8
+ // ---------------------------------------------------------------------------
9
+ // (1) Enumerations
10
+ // ---------------------------------------------------------------------------
11
+ /**
12
+ * Storefront actions a Meta event can be bound to — one entry per emitter in
13
+ * `storefront/lib/analytics/ecommerce.ts`. Same closed set as the LinkedIn
14
+ * module: an operator cannot map an action the storefront never emits.
15
+ */
16
+ export const metaTriggerActionSchema = z.enum([
17
+ 'product_viewed',
18
+ 'add_to_cart',
19
+ 'add_to_quote_request',
20
+ 'add_to_shopping_list',
21
+ 'begin_checkout',
22
+ 'place_order_clicked',
23
+ 'purchase',
24
+ 'contact_form_submitted',
25
+ ]);
26
+ export const META_TRIGGER_ACTIONS = metaTriggerActionSchema.options;
27
+ /**
28
+ * Meta's documented standard event for each action, or `null` where Meta has no
29
+ * matching standard name.
30
+ *
31
+ * Fixed in code, not operator-editable: Meta's optimisation, catalogue
32
+ * matching, and ROAS reporting key off these exact names, so letting an
33
+ * operator rename them would quietly downgrade their reporting. Actions with
34
+ * `null` still accept a custom mapping — that is what custom mappings are for.
35
+ */
36
+ export const META_STANDARD_EVENTS = {
37
+ product_viewed: 'ViewContent',
38
+ add_to_cart: 'AddToCart',
39
+ add_to_quote_request: 'Lead',
40
+ add_to_shopping_list: null,
41
+ begin_checkout: 'InitiateCheckout',
42
+ place_order_clicked: null,
43
+ purchase: 'Purchase',
44
+ contact_form_submitted: 'Lead',
45
+ };
46
+ /** Meta Pixel ID as shown in Events Manager. */
47
+ export const metaPixelIdSchema = z
48
+ .string()
49
+ .regex(/^[0-9]{1,32}$/, 'Pixel ID must be 1-32 digits');
50
+ /** Custom event name: letters, digits, underscore; Meta's practical shape. */
51
+ export const metaEventNameSchema = z
52
+ .string()
53
+ .regex(/^[A-Za-z][A-Za-z0-9_]{0,63}$/, 'Invalid Meta event name');
54
+ // ---------------------------------------------------------------------------
55
+ // (2) Admin DTOs — custom event mappings
56
+ // ---------------------------------------------------------------------------
57
+ export const metaCustomEventMappingSchema = z.object({
58
+ id: uuidSchema,
59
+ /** `null` = applies to every sales channel. */
60
+ salesChannelId: uuidSchema.nullable(),
61
+ triggerAction: metaTriggerActionSchema,
62
+ eventName: metaEventNameSchema,
63
+ enabled: z.boolean(),
64
+ version: z.number().int().positive(),
65
+ createdAt: isoDateTimeSchema,
66
+ updatedAt: isoDateTimeSchema,
67
+ });
68
+ export const createMetaCustomEventMappingSchema = z.object({
69
+ salesChannelId: uuidSchema.nullable().optional(),
70
+ triggerAction: metaTriggerActionSchema,
71
+ eventName: metaEventNameSchema,
72
+ enabled: z.boolean().optional(),
73
+ });
74
+ export const updateMetaCustomEventMappingSchema = z.object({
75
+ salesChannelId: uuidSchema.nullable().optional(),
76
+ triggerAction: metaTriggerActionSchema.optional(),
77
+ eventName: metaEventNameSchema.optional(),
78
+ enabled: z.boolean().optional(),
79
+ /** Current version held by the client — a mismatch is a 409. */
80
+ version: z.number().int().positive(),
81
+ });
82
+ // ---------------------------------------------------------------------------
83
+ // (3) Storefront config
84
+ // ---------------------------------------------------------------------------
85
+ export const metaStorefrontMappingSchema = z.object({
86
+ triggerAction: metaTriggerActionSchema,
87
+ eventName: metaEventNameSchema,
88
+ });
89
+ export const metaStorefrontConfigSchema = z.object({
90
+ enabled: z.boolean(),
91
+ /** `null` when unset — a blank Pixel ID means "not configured" (FR-004). */
92
+ pixelId: z.string().nullable(),
93
+ requireConsent: z.boolean(),
94
+ /** Custom events reported *in addition to* the standard event for an action. */
95
+ customEvents: z.array(metaStorefrontMappingSchema),
96
+ });
97
+ /** Fully-off config — the shape every failure path degrades to. */
98
+ export const META_DISABLED_CONFIG = {
99
+ enabled: false,
100
+ pixelId: null,
101
+ requireConsent: true,
102
+ customEvents: [],
103
+ };
104
+ // ---------------------------------------------------------------------------
105
+ // (4) Setting codes
106
+ // ---------------------------------------------------------------------------
107
+ export const META_ADS_SETTING_CODES = {
108
+ ENABLED: 'meta_ads.enabled',
109
+ PIXEL_ID: 'meta_ads.pixel_id',
110
+ REQUIRE_CONSENT: 'meta_ads.require_consent',
111
+ };
112
+ //# sourceMappingURL=meta-ads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-ads.js","sourceRoot":"","sources":["../src/meta-ads.ts"],"names":[],"mappings":"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"}