@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,167 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Storefront actions a LinkedIn conversion can be bound to.
4
+ *
5
+ * Deliberately a closed set: one entry per emitter that already exists in
6
+ * `storefront/lib/analytics/ecommerce.ts`, no more. An operator cannot map an
7
+ * action the storefront never emits — a mapping that could never fire would be
8
+ * indistinguishable from a broken one, and it is that guarantee which makes
9
+ * "no mapping" a normal state rather than a silent misconfiguration (FR-012).
10
+ */
11
+ export declare const linkedInTriggerActionSchema: z.ZodEnum<{
12
+ contact_form_submitted: "contact_form_submitted";
13
+ place_order_clicked: "place_order_clicked";
14
+ add_to_cart: "add_to_cart";
15
+ add_to_quote_request: "add_to_quote_request";
16
+ add_to_shopping_list: "add_to_shopping_list";
17
+ begin_checkout: "begin_checkout";
18
+ purchase: "purchase";
19
+ product_viewed: "product_viewed";
20
+ }>;
21
+ export type LinkedInTriggerAction = z.infer<typeof linkedInTriggerActionSchema>;
22
+ export declare const LINKEDIN_TRIGGER_ACTIONS: readonly LinkedInTriggerAction[];
23
+ /**
24
+ * Campaign Manager shows a conversion as a numeric id. Stored as text because
25
+ * it is an identifier — it is never used in arithmetic and leading zeros, if
26
+ * LinkedIn ever emits them, must survive a round trip.
27
+ */
28
+ export declare const linkedInConversionIdSchema: z.ZodString;
29
+ /**
30
+ * The Conversions API addresses a conversion rule by URN rather than by the
31
+ * bare numeric id shown in the UI. Derived from the id when the operator does
32
+ * not override it (see `conversionRuleUrnFor`).
33
+ */
34
+ export declare const linkedInConversionRuleUrnSchema: z.ZodString;
35
+ /** Insight Tag Partner ID as shown in Campaign Manager. */
36
+ export declare const linkedInPartnerIdSchema: z.ZodString;
37
+ /** Build the Conversions API URN for a numeric conversion id. */
38
+ export declare function conversionRuleUrnFor(conversionId: string): string;
39
+ export declare const linkedInConversionMappingSchema: z.ZodObject<{
40
+ id: z.ZodString;
41
+ salesChannelId: z.ZodNullable<z.ZodString>;
42
+ triggerAction: z.ZodEnum<{
43
+ contact_form_submitted: "contact_form_submitted";
44
+ place_order_clicked: "place_order_clicked";
45
+ add_to_cart: "add_to_cart";
46
+ add_to_quote_request: "add_to_quote_request";
47
+ add_to_shopping_list: "add_to_shopping_list";
48
+ begin_checkout: "begin_checkout";
49
+ purchase: "purchase";
50
+ product_viewed: "product_viewed";
51
+ }>;
52
+ conversionId: z.ZodString;
53
+ conversionRuleUrn: z.ZodNullable<z.ZodString>;
54
+ enabled: z.ZodBoolean;
55
+ version: z.ZodNumber;
56
+ createdAt: z.ZodString;
57
+ updatedAt: z.ZodString;
58
+ }, z.core.$strip>;
59
+ export type LinkedInConversionMapping = z.infer<typeof linkedInConversionMappingSchema>;
60
+ export declare const createLinkedInConversionMappingSchema: z.ZodObject<{
61
+ salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ triggerAction: z.ZodEnum<{
63
+ contact_form_submitted: "contact_form_submitted";
64
+ place_order_clicked: "place_order_clicked";
65
+ add_to_cart: "add_to_cart";
66
+ add_to_quote_request: "add_to_quote_request";
67
+ add_to_shopping_list: "add_to_shopping_list";
68
+ begin_checkout: "begin_checkout";
69
+ purchase: "purchase";
70
+ product_viewed: "product_viewed";
71
+ }>;
72
+ conversionId: z.ZodString;
73
+ conversionRuleUrn: z.ZodOptional<z.ZodNullable<z.ZodString>>;
74
+ enabled: z.ZodOptional<z.ZodBoolean>;
75
+ }, z.core.$strip>;
76
+ export type CreateLinkedInConversionMapping = z.infer<typeof createLinkedInConversionMappingSchema>;
77
+ export declare const updateLinkedInConversionMappingSchema: z.ZodObject<{
78
+ salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
79
+ triggerAction: z.ZodOptional<z.ZodEnum<{
80
+ contact_form_submitted: "contact_form_submitted";
81
+ place_order_clicked: "place_order_clicked";
82
+ add_to_cart: "add_to_cart";
83
+ add_to_quote_request: "add_to_quote_request";
84
+ add_to_shopping_list: "add_to_shopping_list";
85
+ begin_checkout: "begin_checkout";
86
+ purchase: "purchase";
87
+ product_viewed: "product_viewed";
88
+ }>>;
89
+ conversionId: z.ZodOptional<z.ZodString>;
90
+ conversionRuleUrn: z.ZodOptional<z.ZodNullable<z.ZodString>>;
91
+ enabled: z.ZodOptional<z.ZodBoolean>;
92
+ version: z.ZodNumber;
93
+ }, z.core.$strip>;
94
+ export type UpdateLinkedInConversionMapping = z.infer<typeof updateLinkedInConversionMappingSchema>;
95
+ /** One mapping as the storefront needs it — no ids, no audit columns. */
96
+ export declare const linkedInStorefrontMappingSchema: z.ZodObject<{
97
+ triggerAction: z.ZodEnum<{
98
+ contact_form_submitted: "contact_form_submitted";
99
+ place_order_clicked: "place_order_clicked";
100
+ add_to_cart: "add_to_cart";
101
+ add_to_quote_request: "add_to_quote_request";
102
+ add_to_shopping_list: "add_to_shopping_list";
103
+ begin_checkout: "begin_checkout";
104
+ purchase: "purchase";
105
+ product_viewed: "product_viewed";
106
+ }>;
107
+ conversionId: z.ZodString;
108
+ }, z.core.$strip>;
109
+ export type LinkedInStorefrontMapping = z.infer<typeof linkedInStorefrontMappingSchema>;
110
+ export declare const linkedInStorefrontConfigSchema: z.ZodObject<{
111
+ enabled: z.ZodBoolean;
112
+ partnerId: z.ZodNullable<z.ZodString>;
113
+ requireConsent: z.ZodBoolean;
114
+ serverSide: z.ZodBoolean;
115
+ conversionMappings: z.ZodArray<z.ZodObject<{
116
+ triggerAction: z.ZodEnum<{
117
+ contact_form_submitted: "contact_form_submitted";
118
+ place_order_clicked: "place_order_clicked";
119
+ add_to_cart: "add_to_cart";
120
+ add_to_quote_request: "add_to_quote_request";
121
+ add_to_shopping_list: "add_to_shopping_list";
122
+ begin_checkout: "begin_checkout";
123
+ purchase: "purchase";
124
+ product_viewed: "product_viewed";
125
+ }>;
126
+ conversionId: z.ZodString;
127
+ }, z.core.$strip>>;
128
+ }, z.core.$strip>;
129
+ export type LinkedInStorefrontConfig = z.infer<typeof linkedInStorefrontConfigSchema>;
130
+ /** Fully-off config — the shape every failure path degrades to. */
131
+ export declare const LINKEDIN_DISABLED_CONFIG: LinkedInStorefrontConfig;
132
+ export declare const linkedInConversionAmountSchema: z.ZodObject<{
133
+ currencyCode: z.ZodString;
134
+ amount: z.ZodString;
135
+ }, z.core.$strip>;
136
+ export declare const linkedInConversionIngestSchema: z.ZodObject<{
137
+ triggerAction: z.ZodEnum<{
138
+ contact_form_submitted: "contact_form_submitted";
139
+ place_order_clicked: "place_order_clicked";
140
+ add_to_cart: "add_to_cart";
141
+ add_to_quote_request: "add_to_quote_request";
142
+ add_to_shopping_list: "add_to_shopping_list";
143
+ begin_checkout: "begin_checkout";
144
+ purchase: "purchase";
145
+ product_viewed: "product_viewed";
146
+ }>;
147
+ liFatId: z.ZodOptional<z.ZodString>;
148
+ email: z.ZodOptional<z.ZodString>;
149
+ amount: z.ZodOptional<z.ZodObject<{
150
+ currencyCode: z.ZodString;
151
+ amount: z.ZodString;
152
+ }, z.core.$strip>>;
153
+ eventId: z.ZodString;
154
+ conversionHappenedAt: z.ZodOptional<z.ZodNumber>;
155
+ }, z.core.$strip>;
156
+ export type LinkedInConversionIngest = z.infer<typeof linkedInConversionIngestSchema>;
157
+ export declare const linkedInConversionIngestResponseSchema: z.ZodObject<{
158
+ accepted: z.ZodNumber;
159
+ }, z.core.$strip>;
160
+ export declare const LINKEDIN_ADS_SETTING_CODES: {
161
+ readonly ENABLED: "linkedin_ads.enabled";
162
+ readonly PARTNER_ID: "linkedin_ads.partner_id";
163
+ readonly REQUIRE_CONSENT: "linkedin_ads.require_consent";
164
+ readonly SERVER_SIDE_ENABLED: "linkedin_ads.server_side_enabled";
165
+ readonly ACCESS_TOKEN: "linkedin_ads.access_token";
166
+ };
167
+ //# sourceMappingURL=linkedin-ads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkedin-ads.d.ts","sourceRoot":"","sources":["../src/linkedin-ads.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;EAStC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,wBAAwB,EAAE,SAAS,qBAAqB,EAChC,CAAC;AAMtC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,aAEuB,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,aAKzC,CAAC;AAEJ,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,aAEuB,CAAC;AAE5D,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEjE;AAMD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;iBAY1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;iBAMhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,qCAAqC,CAC7C,CAAC;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;iBAQhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,qCAAqC,CAC7C,CAAC;AAMF,yEAAyE;AACzE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;iBAG1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;iBAYzC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,wBAMtC,CAAC;AAMF,eAAO,MAAM,8BAA8B;;;iBAGzC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;iBAczC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,sCAAsC;;iBAEjD,CAAC;AAMH,eAAO,MAAM,0BAA0B;;;;;;CAM7B,CAAC"}
@@ -0,0 +1,156 @@
1
+ // LinkedIn Ads module — feature 063 contract surface.
2
+ //
3
+ // Holds the Zod request/response schemas for the admin conversion-mapping CRUD,
4
+ // the storefront per-channel config read, the server-side conversion ingest, the
5
+ // trigger-action enum shared by the admin picker and the storefront dispatcher,
6
+ // and the `LINKEDIN_ADS_SETTING_CODES` const shared between the settings
7
+ // manifest and the module's services.
8
+ import { z } from 'zod';
9
+ import { isoDateTimeSchema, uuidSchema } from './common.js';
10
+ // ---------------------------------------------------------------------------
11
+ // (1) Enumerations
12
+ // ---------------------------------------------------------------------------
13
+ /**
14
+ * Storefront actions a LinkedIn conversion can be bound to.
15
+ *
16
+ * Deliberately a closed set: one entry per emitter that already exists in
17
+ * `storefront/lib/analytics/ecommerce.ts`, no more. An operator cannot map an
18
+ * action the storefront never emits — a mapping that could never fire would be
19
+ * indistinguishable from a broken one, and it is that guarantee which makes
20
+ * "no mapping" a normal state rather than a silent misconfiguration (FR-012).
21
+ */
22
+ export const linkedInTriggerActionSchema = z.enum([
23
+ 'product_viewed',
24
+ 'add_to_cart',
25
+ 'add_to_quote_request',
26
+ 'add_to_shopping_list',
27
+ 'begin_checkout',
28
+ 'place_order_clicked',
29
+ 'purchase',
30
+ 'contact_form_submitted',
31
+ ]);
32
+ export const LINKEDIN_TRIGGER_ACTIONS = linkedInTriggerActionSchema.options;
33
+ // ---------------------------------------------------------------------------
34
+ // (2) Field-level patterns
35
+ // ---------------------------------------------------------------------------
36
+ /**
37
+ * Campaign Manager shows a conversion as a numeric id. Stored as text because
38
+ * it is an identifier — it is never used in arithmetic and leading zeros, if
39
+ * LinkedIn ever emits them, must survive a round trip.
40
+ */
41
+ export const linkedInConversionIdSchema = z
42
+ .string()
43
+ .regex(/^[0-9]{1,32}$/, 'Conversion ID must be 1-32 digits');
44
+ /**
45
+ * The Conversions API addresses a conversion rule by URN rather than by the
46
+ * bare numeric id shown in the UI. Derived from the id when the operator does
47
+ * not override it (see `conversionRuleUrnFor`).
48
+ */
49
+ export const linkedInConversionRuleUrnSchema = z
50
+ .string()
51
+ .regex(/^urn:lla:llaPartnerConversion:[0-9]{1,32}$/, 'Conversion rule URN must look like urn:lla:llaPartnerConversion:<digits>');
52
+ /** Insight Tag Partner ID as shown in Campaign Manager. */
53
+ export const linkedInPartnerIdSchema = z
54
+ .string()
55
+ .regex(/^[0-9]{1,20}$/, 'Partner ID must be 1-20 digits');
56
+ /** Build the Conversions API URN for a numeric conversion id. */
57
+ export function conversionRuleUrnFor(conversionId) {
58
+ return `urn:lla:llaPartnerConversion:${conversionId}`;
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // (3) Admin DTOs — conversion mappings
62
+ // ---------------------------------------------------------------------------
63
+ export const linkedInConversionMappingSchema = z.object({
64
+ id: uuidSchema,
65
+ /** `null` = the mapping applies to every sales channel. */
66
+ salesChannelId: uuidSchema.nullable(),
67
+ triggerAction: linkedInTriggerActionSchema,
68
+ conversionId: linkedInConversionIdSchema,
69
+ /** `null` = derive from `conversionId` at delivery time. */
70
+ conversionRuleUrn: linkedInConversionRuleUrnSchema.nullable(),
71
+ enabled: z.boolean(),
72
+ version: z.number().int().positive(),
73
+ createdAt: isoDateTimeSchema,
74
+ updatedAt: isoDateTimeSchema,
75
+ });
76
+ export const createLinkedInConversionMappingSchema = z.object({
77
+ salesChannelId: uuidSchema.nullable().optional(),
78
+ triggerAction: linkedInTriggerActionSchema,
79
+ conversionId: linkedInConversionIdSchema,
80
+ conversionRuleUrn: linkedInConversionRuleUrnSchema.nullable().optional(),
81
+ enabled: z.boolean().optional(),
82
+ });
83
+ export const updateLinkedInConversionMappingSchema = z.object({
84
+ salesChannelId: uuidSchema.nullable().optional(),
85
+ triggerAction: linkedInTriggerActionSchema.optional(),
86
+ conversionId: linkedInConversionIdSchema.optional(),
87
+ conversionRuleUrn: linkedInConversionRuleUrnSchema.nullable().optional(),
88
+ enabled: z.boolean().optional(),
89
+ /** Current version held by the client — a mismatch is a 409. */
90
+ version: z.number().int().positive(),
91
+ });
92
+ // ---------------------------------------------------------------------------
93
+ // (4) Storefront config
94
+ // ---------------------------------------------------------------------------
95
+ /** One mapping as the storefront needs it — no ids, no audit columns. */
96
+ export const linkedInStorefrontMappingSchema = z.object({
97
+ triggerAction: linkedInTriggerActionSchema,
98
+ conversionId: linkedInConversionIdSchema,
99
+ });
100
+ export const linkedInStorefrontConfigSchema = z.object({
101
+ enabled: z.boolean(),
102
+ /** `null` when unset — a blank Partner ID means "not configured" (FR-004). */
103
+ partnerId: z.string().nullable(),
104
+ requireConsent: z.boolean(),
105
+ /**
106
+ * When true the browser still loads the Insight Tag (audiences, page-level
107
+ * rules) but must NOT fire mapped conversions — the backend reports them, so
108
+ * each conversion has exactly one transport.
109
+ */
110
+ serverSide: z.boolean(),
111
+ conversionMappings: z.array(linkedInStorefrontMappingSchema),
112
+ });
113
+ /** Fully-off config — the shape every failure path degrades to. */
114
+ export const LINKEDIN_DISABLED_CONFIG = {
115
+ enabled: false,
116
+ partnerId: null,
117
+ requireConsent: true,
118
+ serverSide: false,
119
+ conversionMappings: [],
120
+ };
121
+ // ---------------------------------------------------------------------------
122
+ // (5) Server-side conversion ingest
123
+ // ---------------------------------------------------------------------------
124
+ export const linkedInConversionAmountSchema = z.object({
125
+ currencyCode: z.string().length(3),
126
+ amount: z.string().regex(/^[0-9]+(\.[0-9]+)?$/, 'Amount must be a decimal string'),
127
+ });
128
+ export const linkedInConversionIngestSchema = z.object({
129
+ triggerAction: linkedInTriggerActionSchema,
130
+ /** LinkedIn click identifier captured from the landing URL. */
131
+ liFatId: z.string().max(256).optional(),
132
+ /**
133
+ * Hashed server-side and immediately discarded — the raw address is never
134
+ * persisted and never placed on the queue (FR-017).
135
+ */
136
+ email: z.string().email().optional(),
137
+ amount: linkedInConversionAmountSchema.optional(),
138
+ /** Idempotency handle so a retry cannot double-report. */
139
+ eventId: z.string().min(1).max(128),
140
+ /** Epoch milliseconds; defaults to receipt time when absent. */
141
+ conversionHappenedAt: z.number().int().positive().optional(),
142
+ });
143
+ export const linkedInConversionIngestResponseSchema = z.object({
144
+ accepted: z.number().int().nonnegative(),
145
+ });
146
+ // ---------------------------------------------------------------------------
147
+ // (6) Setting codes
148
+ // ---------------------------------------------------------------------------
149
+ export const LINKEDIN_ADS_SETTING_CODES = {
150
+ ENABLED: 'linkedin_ads.enabled',
151
+ PARTNER_ID: 'linkedin_ads.partner_id',
152
+ REQUIRE_CONSENT: 'linkedin_ads.require_consent',
153
+ SERVER_SIDE_ENABLED: 'linkedin_ads.server_side_enabled',
154
+ ACCESS_TOKEN: 'linkedin_ads.access_token',
155
+ };
156
+ //# sourceMappingURL=linkedin-ads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkedin-ads.js","sourceRoot":"","sources":["../src/linkedin-ads.ts"],"names":[],"mappings":"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"}