@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
package/dist/pwa.js ADDED
@@ -0,0 +1,204 @@
1
+ // PWA module — feature 046 contract surface.
2
+ //
3
+ // Source-of-truth Zod schemas for the PWA module's API boundaries and internal
4
+ // ports, per Principle V. Four sections:
5
+ // (1) Public storefront config (manifest identity + toggles + VAPID public key).
6
+ // (2) Push subscription + message DTOs (storefront subscribe / admin send).
7
+ // (3) Admin config + icon DTOs.
8
+ // (4) Internal ports: PushProvider abstraction (FR-019).
9
+ import { z } from 'zod';
10
+ // ---------------------------------------------------------------------------
11
+ // Shared
12
+ // ---------------------------------------------------------------------------
13
+ /** Setting codes owned by the PWA module (Settings group `pwa`). */
14
+ export const PWA_SETTING_CODES = {
15
+ APP_NAME: 'pwa.app_name',
16
+ SHORT_NAME: 'pwa.short_name',
17
+ THEME_COLOR: 'pwa.theme_color',
18
+ BACKGROUND_COLOR: 'pwa.background_color',
19
+ DISPLAY_MODE: 'pwa.display_mode',
20
+ ICON_ASSET_ID: 'pwa.icon_asset_id',
21
+ CACHING_ENABLED: 'pwa.caching_enabled',
22
+ PUSH_ENABLED: 'pwa.push_enabled',
23
+ VAPID_PUBLIC_KEY: 'pwa.vapid_public_key',
24
+ VAPID_PRIVATE_KEY: 'pwa.vapid_private_key',
25
+ FCM_SERVICE_ACCOUNT: 'pwa.fcm_service_account',
26
+ };
27
+ export const PWA_PERMISSIONS = {
28
+ READ: 'pwa:read',
29
+ WRITE: 'pwa:write',
30
+ SEND_PUSH: 'pwa:send_push',
31
+ };
32
+ export const PwaDisplayModeSchema = z.enum(['standalone', 'fullscreen', 'minimal-ui']);
33
+ export const PwaIconPurposeSchema = z.enum(['any', 'maskable']);
34
+ /** Required derived icon sizes (px, square). 180 = apple-touch. */
35
+ export const PWA_ICON_SIZES = [180, 192, 512];
36
+ /** A hex colour like `#1d4ed8`. */
37
+ const HexColorSchema = z
38
+ .string()
39
+ .regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/, 'Must be a hex colour, e.g. #1d4ed8');
40
+ // ---------------------------------------------------------------------------
41
+ // (1) Public storefront config
42
+ // ---------------------------------------------------------------------------
43
+ export const PwaIconDescriptorSchema = z.object({
44
+ src: z.string().min(1),
45
+ sizes: z.string().min(1), // e.g. "512x512"
46
+ type: z.string().min(1), // e.g. "image/png"
47
+ purpose: PwaIconPurposeSchema.optional(),
48
+ });
49
+ export const PwaPublicConfigSchema = z.object({
50
+ appName: z.string().min(1),
51
+ shortName: z.string().min(1),
52
+ themeColor: HexColorSchema,
53
+ backgroundColor: HexColorSchema,
54
+ displayMode: PwaDisplayModeSchema,
55
+ icons: z.array(PwaIconDescriptorSchema),
56
+ cachingEnabled: z.boolean(),
57
+ pushEnabled: z.boolean(),
58
+ /** Empty string when push is disabled or VAPID is unconfigured. */
59
+ vapidPublicKey: z.string(),
60
+ });
61
+ // ---------------------------------------------------------------------------
62
+ // (2) Push subscription + message DTOs
63
+ // ---------------------------------------------------------------------------
64
+ export const PushSubscriptionInputSchema = z.object({
65
+ endpoint: z.string().url().startsWith('https://', 'Endpoint must be an https URL'),
66
+ keys: z.object({
67
+ p256dh: z.string().min(1),
68
+ auth: z.string().min(1),
69
+ }),
70
+ userAgent: z.string().max(512).optional(),
71
+ });
72
+ export const PushSubscriptionDeleteSchema = z.object({
73
+ endpoint: z.string().url(),
74
+ });
75
+ export const PushSubscriptionStatusSchema = z.enum(['active', 'invalid']);
76
+ export const SubscribeResponseSchema = z.object({
77
+ id: z.string().uuid(),
78
+ status: PushSubscriptionStatusSchema,
79
+ });
80
+ // --- Audience rule AST (Rule Builder targeting) ----------------------------
81
+ //
82
+ // Mirrors the price-list Application Rule AST so the admin can reuse the same
83
+ // Rule Builder UX. A push send is already scoped to one sales channel; the rule
84
+ // narrows that channel's active subscribers by their resolved customer context
85
+ // (organization, customer group) or by an explicit customer list. Anonymous
86
+ // subscribers (no linked customer account) only match `salesChannel` criteria
87
+ // and `{ kind: 'all' }`.
88
+ export const pushAudienceCriterionTypeSchema = z.enum([
89
+ 'salesChannel',
90
+ 'customerGroup',
91
+ 'organization',
92
+ 'customer',
93
+ ]);
94
+ const pushAudienceCriterionNodeSchema = z.object({
95
+ kind: z.literal('criterion'),
96
+ type: pushAudienceCriterionTypeSchema,
97
+ values: z.array(z.string()).max(2000),
98
+ });
99
+ const pushAudienceAllNodeSchema = z.object({ kind: z.literal('all') });
100
+ const pushAudienceRuleNodeSchema = z.lazy(() => z.discriminatedUnion('kind', [
101
+ pushAudienceAllNodeSchema,
102
+ pushAudienceCriterionNodeSchema,
103
+ z.object({
104
+ kind: z.literal('group'),
105
+ op: z.enum(['AND', 'OR']),
106
+ children: z.array(pushAudienceRuleNodeSchema).min(1).max(20),
107
+ }),
108
+ ]));
109
+ function pushAudienceRuleDepth(node) {
110
+ if (node.kind !== 'group')
111
+ return 0;
112
+ return 1 + Math.max(...node.children.map(pushAudienceRuleDepth));
113
+ }
114
+ export const pushAudienceRuleSchema = pushAudienceRuleNodeSchema.refine((node) => pushAudienceRuleDepth(node) <= 5, { message: 'rule_depth_exceeds_5' });
115
+ export const PushAudienceSchema = z.discriminatedUnion('kind', [
116
+ z.object({ kind: z.literal('all') }),
117
+ z.object({
118
+ kind: z.literal('customers'),
119
+ customerAccountIds: z.array(z.string().uuid()).min(1),
120
+ }),
121
+ z.object({
122
+ kind: z.literal('rule'),
123
+ rule: pushAudienceRuleSchema,
124
+ }),
125
+ ]);
126
+ export const PushTriggerSchema = z.enum(['admin', 'order_status', 'quote_request']);
127
+ export const PushMessageStatusSchema = z.enum(['queued', 'sending', 'sent', 'failed']);
128
+ export const CreatePushMessageRequestSchema = z.object({
129
+ salesChannelId: z.string().uuid(),
130
+ title: z.string().min(1).max(120),
131
+ body: z.string().min(1).max(500),
132
+ url: z.string().max(2048).optional(),
133
+ iconUrl: z.string().max(2048).optional(),
134
+ audience: PushAudienceSchema,
135
+ });
136
+ export const CreatePushMessageResponseSchema = z.object({
137
+ messageId: z.string().uuid(),
138
+ queuedDeliveries: z.number().int().nonnegative(),
139
+ });
140
+ export const PushMessageSummarySchema = z.object({
141
+ id: z.string().uuid(),
142
+ salesChannelId: z.string().uuid(),
143
+ title: z.string(),
144
+ body: z.string(),
145
+ url: z.string().nullable(),
146
+ trigger: PushTriggerSchema,
147
+ status: PushMessageStatusSchema,
148
+ sentCount: z.number().int().nonnegative(),
149
+ failedCount: z.number().int().nonnegative(),
150
+ createdAt: z.string(),
151
+ sentAt: z.string().nullable(),
152
+ });
153
+ export const PushSubscriptionStatsSchema = z.object({
154
+ active: z.number().int().nonnegative(),
155
+ invalid: z.number().int().nonnegative(),
156
+ });
157
+ // ---------------------------------------------------------------------------
158
+ // (3) Admin config + icon DTOs
159
+ // ---------------------------------------------------------------------------
160
+ /** Admin-readable PWA config. Secrets are reported as `*IsSet` flags only. */
161
+ export const PwaAdminConfigSchema = z.object({
162
+ salesChannelId: z.string().uuid().nullable(), // null = global scope
163
+ appName: z.string(),
164
+ shortName: z.string(),
165
+ themeColor: z.string(),
166
+ backgroundColor: z.string(),
167
+ displayMode: PwaDisplayModeSchema,
168
+ iconAssetId: z.string(),
169
+ cachingEnabled: z.boolean(),
170
+ pushEnabled: z.boolean(),
171
+ vapidPublicKey: z.string(),
172
+ vapidPrivateKeyIsSet: z.boolean(),
173
+ fcmServiceAccountIsSet: z.boolean(),
174
+ });
175
+ /** Partial update; only provided keys are written. */
176
+ export const UpdatePwaConfigRequestSchema = z
177
+ .object({
178
+ salesChannelId: z.string().uuid().nullable().optional(),
179
+ appName: z.string().min(1).max(120).optional(),
180
+ shortName: z.string().min(1).max(64).optional(),
181
+ themeColor: HexColorSchema.optional(),
182
+ backgroundColor: HexColorSchema.optional(),
183
+ displayMode: PwaDisplayModeSchema.optional(),
184
+ cachingEnabled: z.boolean().optional(),
185
+ pushEnabled: z.boolean().optional(),
186
+ vapidPublicKey: z.string().optional(),
187
+ vapidPrivateKey: z.string().optional(),
188
+ fcmServiceAccount: z.string().optional(),
189
+ })
190
+ .strict();
191
+ export const VapidKeyPairResponseSchema = z.object({
192
+ publicKey: z.string().min(1),
193
+ });
194
+ export const PwaIconRenditionSchema = z.object({
195
+ size: z.number().int().positive(),
196
+ purpose: PwaIconPurposeSchema,
197
+ assetId: z.string().uuid(),
198
+ contentHash: z.string().min(1),
199
+ });
200
+ export const PwaIconUploadResponseSchema = z.object({
201
+ sourceAssetId: z.string().uuid(),
202
+ renditions: z.array(PwaIconRenditionSchema),
203
+ });
204
+ //# sourceMappingURL=pwa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pwa.js","sourceRoot":"","sources":["../src/pwa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,340 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Quick-order contracts (feature 039). The quick-order page lets buyers
4
+ * build a Cart or a Quote Request from a CSV / Excel file (`sku,quantity`
5
+ * plus optional variant-attribute columns), search the catalog by SKU /
6
+ * name / `quick_searchable` attribute, reorder a past order, manage their
7
+ * default ordering preferences, and place a one-click order.
8
+ *
9
+ * The importer is lenient on whitespace + quoting; the import response is a
10
+ * partition of the rows into recognised + rejected, with line numbers
11
+ * preserved so the UI can highlight problem rows.
12
+ */
13
+ /**
14
+ * Admin / sales-rep "act on behalf of" context. When present, the resulting
15
+ * Cart / Quote Request is owned by this customer + organization and priced
16
+ * under that organization's price list (FR-008).
17
+ */
18
+ export declare const quickOrderOnBehalfSchema: z.ZodObject<{
19
+ customerAccountId: z.ZodString;
20
+ organizationId: z.ZodString;
21
+ }, z.core.$strip>;
22
+ export type QuickOrderOnBehalf = z.infer<typeof quickOrderOnBehalfSchema>;
23
+ /** An uploaded file (CSV or .xlsx), sent as base64 so the API owns parsing. */
24
+ export declare const quickOrderUploadFileSchema: z.ZodObject<{
25
+ filename: z.ZodString;
26
+ contentBase64: z.ZodString;
27
+ }, z.core.$strip>;
28
+ export type QuickOrderUploadFile = z.infer<typeof quickOrderUploadFileSchema>;
29
+ export declare const quickOrderRejectionReasonSchema: z.ZodEnum<{
30
+ product_not_found: "product_not_found";
31
+ malformed_row: "malformed_row";
32
+ product_archived: "product_archived";
33
+ sku_missing: "sku_missing";
34
+ quantity_invalid: "quantity_invalid";
35
+ variant_not_resolved: "variant_not_resolved";
36
+ variant_ambiguous: "variant_ambiguous";
37
+ row_limit_exceeded: "row_limit_exceeded";
38
+ }>;
39
+ export type QuickOrderRejectionReason = z.infer<typeof quickOrderRejectionReasonSchema>;
40
+ /**
41
+ * Either `csv` (legacy back-compat path) or `file` (CSV or .xlsx upload).
42
+ * `onBehalfOf` is honoured only on the admin endpoint.
43
+ */
44
+ export declare const quickOrderImportRequestSchema: z.ZodObject<{
45
+ csv: z.ZodOptional<z.ZodString>;
46
+ file: z.ZodOptional<z.ZodObject<{
47
+ filename: z.ZodString;
48
+ contentBase64: z.ZodString;
49
+ }, z.core.$strip>>;
50
+ onBehalfOf: z.ZodOptional<z.ZodObject<{
51
+ customerAccountId: z.ZodString;
52
+ organizationId: z.ZodString;
53
+ }, z.core.$strip>>;
54
+ }, z.core.$strip>;
55
+ export type QuickOrderImportRequest = z.infer<typeof quickOrderImportRequestSchema>;
56
+ export declare const recognizedQuickOrderItemSchema: z.ZodObject<{
57
+ line: z.ZodNumber;
58
+ sku: z.ZodString;
59
+ productId: z.ZodString;
60
+ variantId: z.ZodNullable<z.ZodString>;
61
+ resolvedVariantSku: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ quantity: z.ZodNumber;
63
+ mergedFromLines: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
64
+ }, z.core.$strip>;
65
+ export type RecognizedQuickOrderItem = z.infer<typeof recognizedQuickOrderItemSchema>;
66
+ export declare const rejectedQuickOrderItemSchema: z.ZodObject<{
67
+ line: z.ZodNumber;
68
+ raw: z.ZodString;
69
+ reason: z.ZodEnum<{
70
+ product_not_found: "product_not_found";
71
+ malformed_row: "malformed_row";
72
+ product_archived: "product_archived";
73
+ sku_missing: "sku_missing";
74
+ quantity_invalid: "quantity_invalid";
75
+ variant_not_resolved: "variant_not_resolved";
76
+ variant_ambiguous: "variant_ambiguous";
77
+ row_limit_exceeded: "row_limit_exceeded";
78
+ }>;
79
+ }, z.core.$strip>;
80
+ export type RejectedQuickOrderItem = z.infer<typeof rejectedQuickOrderItemSchema>;
81
+ export declare const quickOrderImportSummarySchema: z.ZodObject<{
82
+ recognizedCount: z.ZodNumber;
83
+ rejectedCount: z.ZodNumber;
84
+ mergedCount: z.ZodNumber;
85
+ truncated: z.ZodBoolean;
86
+ }, z.core.$strip>;
87
+ export type QuickOrderImportSummary = z.infer<typeof quickOrderImportSummarySchema>;
88
+ export declare const quickOrderImportResponseSchema: z.ZodObject<{
89
+ recognized: z.ZodArray<z.ZodObject<{
90
+ line: z.ZodNumber;
91
+ sku: z.ZodString;
92
+ productId: z.ZodString;
93
+ variantId: z.ZodNullable<z.ZodString>;
94
+ resolvedVariantSku: z.ZodOptional<z.ZodNullable<z.ZodString>>;
95
+ quantity: z.ZodNumber;
96
+ mergedFromLines: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
97
+ }, z.core.$strip>>;
98
+ rejected: z.ZodArray<z.ZodObject<{
99
+ line: z.ZodNumber;
100
+ raw: z.ZodString;
101
+ reason: z.ZodEnum<{
102
+ product_not_found: "product_not_found";
103
+ malformed_row: "malformed_row";
104
+ product_archived: "product_archived";
105
+ sku_missing: "sku_missing";
106
+ quantity_invalid: "quantity_invalid";
107
+ variant_not_resolved: "variant_not_resolved";
108
+ variant_ambiguous: "variant_ambiguous";
109
+ row_limit_exceeded: "row_limit_exceeded";
110
+ }>;
111
+ }, z.core.$strip>>;
112
+ summary: z.ZodObject<{
113
+ recognizedCount: z.ZodNumber;
114
+ rejectedCount: z.ZodNumber;
115
+ mergedCount: z.ZodNumber;
116
+ truncated: z.ZodBoolean;
117
+ }, z.core.$strip>;
118
+ }, z.core.$strip>;
119
+ export type QuickOrderImportResponse = z.infer<typeof quickOrderImportResponseSchema>;
120
+ export declare const quickOrderTargetSchema: z.ZodEnum<{
121
+ quote_request: "quote_request";
122
+ cart: "cart";
123
+ }>;
124
+ export type QuickOrderTarget = z.infer<typeof quickOrderTargetSchema>;
125
+ export declare const quickOrderBuildLineSchema: z.ZodObject<{
126
+ productId: z.ZodString;
127
+ variantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
128
+ quantity: z.ZodNumber;
129
+ }, z.core.$strip>;
130
+ export type QuickOrderBuildLine = z.infer<typeof quickOrderBuildLineSchema>;
131
+ export declare const quickOrderBuildRequestSchema: z.ZodObject<{
132
+ target: z.ZodEnum<{
133
+ quote_request: "quote_request";
134
+ cart: "cart";
135
+ }>;
136
+ items: z.ZodArray<z.ZodObject<{
137
+ productId: z.ZodString;
138
+ variantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
139
+ quantity: z.ZodNumber;
140
+ }, z.core.$strip>>;
141
+ onBehalfOf: z.ZodOptional<z.ZodObject<{
142
+ customerAccountId: z.ZodString;
143
+ organizationId: z.ZodString;
144
+ }, z.core.$strip>>;
145
+ }, z.core.$strip>;
146
+ export type QuickOrderBuildRequest = z.infer<typeof quickOrderBuildRequestSchema>;
147
+ export declare const quickOrderBuildResponseSchema: z.ZodObject<{
148
+ target: z.ZodEnum<{
149
+ quote_request: "quote_request";
150
+ cart: "cart";
151
+ }>;
152
+ cartId: z.ZodOptional<z.ZodString>;
153
+ checkoutUrl: z.ZodOptional<z.ZodString>;
154
+ quoteRequestId: z.ZodOptional<z.ZodString>;
155
+ quoteRequestBusinessId: z.ZodOptional<z.ZodString>;
156
+ }, z.core.$strip>;
157
+ export type QuickOrderBuildResponse = z.infer<typeof quickOrderBuildResponseSchema>;
158
+ /** Type-ahead search for SKU / name / quick_searchable attributes. */
159
+ export declare const quickOrderSearchQuerySchema: z.ZodObject<{
160
+ q: z.ZodString;
161
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
162
+ }, z.core.$strip>;
163
+ export type QuickOrderSearchQuery = z.infer<typeof quickOrderSearchQuerySchema>;
164
+ export declare const quickOrderSearchMatchSchema: z.ZodEnum<{
165
+ name: "name";
166
+ sku: "sku";
167
+ attribute: "attribute";
168
+ }>;
169
+ export type QuickOrderSearchMatch = z.infer<typeof quickOrderSearchMatchSchema>;
170
+ export declare const quickOrderSearchResultSchema: z.ZodObject<{
171
+ productId: z.ZodString;
172
+ sku: z.ZodString;
173
+ name: z.ZodString;
174
+ slug: z.ZodString;
175
+ status: z.ZodEnum<{
176
+ active: "active";
177
+ inactive: "inactive";
178
+ draft: "draft";
179
+ }>;
180
+ matchedOn: z.ZodOptional<z.ZodArray<z.ZodEnum<{
181
+ name: "name";
182
+ sku: "sku";
183
+ attribute: "attribute";
184
+ }>>>;
185
+ }, z.core.$strip>;
186
+ export type QuickOrderSearchResult = z.infer<typeof quickOrderSearchResultSchema>;
187
+ export declare const quickOrderPreferenceScopeSchema: z.ZodEnum<{
188
+ customer: "customer";
189
+ organization: "organization";
190
+ }>;
191
+ export type QuickOrderPreferenceScope = z.infer<typeof quickOrderPreferenceScopeSchema>;
192
+ /**
193
+ * Upsert a scope's defaults. Each field: omitted = leave unchanged;
194
+ * explicit `null` = clear. Authorization is enforced per FR-018.
195
+ */
196
+ export declare const quickOrderPreferenceUpsertSchema: z.ZodObject<{
197
+ scope: z.ZodEnum<{
198
+ customer: "customer";
199
+ organization: "organization";
200
+ }>;
201
+ scopeId: z.ZodString;
202
+ defaultPaymentMethodId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
203
+ defaultDeliveryMethodId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
204
+ defaultBillingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
205
+ defaultShippingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
206
+ }, z.core.$strip>;
207
+ export type QuickOrderPreferenceUpsert = z.infer<typeof quickOrderPreferenceUpsertSchema>;
208
+ /** Raw stored row for a scope (null fields = unset). */
209
+ export declare const quickOrderPreferenceSchema: z.ZodObject<{
210
+ scope: z.ZodEnum<{
211
+ customer: "customer";
212
+ organization: "organization";
213
+ }>;
214
+ scopeId: z.ZodString;
215
+ defaultPaymentMethodId: z.ZodNullable<z.ZodString>;
216
+ defaultDeliveryMethodId: z.ZodNullable<z.ZodString>;
217
+ defaultBillingAddressId: z.ZodNullable<z.ZodString>;
218
+ defaultShippingAddressId: z.ZodNullable<z.ZodString>;
219
+ }, z.core.$strip>;
220
+ export type QuickOrderPreference = z.infer<typeof quickOrderPreferenceSchema>;
221
+ /** Effective defaults for a customer after inheritance + eligibility check. */
222
+ export declare const quickOrderResolvedDefaultsSchema: z.ZodObject<{
223
+ paymentMethodId: z.ZodNullable<z.ZodString>;
224
+ deliveryMethodId: z.ZodNullable<z.ZodString>;
225
+ billingAddressId: z.ZodNullable<z.ZodString>;
226
+ shippingAddressId: z.ZodNullable<z.ZodString>;
227
+ source: z.ZodObject<{
228
+ payment: z.ZodNullable<z.ZodEnum<{
229
+ customer: "customer";
230
+ organization: "organization";
231
+ }>>;
232
+ delivery: z.ZodNullable<z.ZodEnum<{
233
+ customer: "customer";
234
+ organization: "organization";
235
+ }>>;
236
+ billing: z.ZodNullable<z.ZodEnum<{
237
+ customer: "customer";
238
+ organization: "organization";
239
+ }>>;
240
+ shipping: z.ZodNullable<z.ZodEnum<{
241
+ customer: "customer";
242
+ organization: "organization";
243
+ }>>;
244
+ }, z.core.$strip>;
245
+ }, z.core.$strip>;
246
+ export type QuickOrderResolvedDefaults = z.infer<typeof quickOrderResolvedDefaultsSchema>;
247
+ export declare const quickOrderOneClickEligibilitySchema: z.ZodObject<{
248
+ enabled: z.ZodBoolean;
249
+ reason: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
250
+ setting_disabled: "setting_disabled";
251
+ missing_defaults: "missing_defaults";
252
+ ineligible_default: "ineligible_default";
253
+ }>>>;
254
+ }, z.core.$strip>;
255
+ export type QuickOrderOneClickEligibility = z.infer<typeof quickOrderOneClickEligibilitySchema>;
256
+ export declare const quickOrderOneClickRequestSchema: z.ZodObject<{
257
+ productId: z.ZodString;
258
+ variantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
259
+ quantity: z.ZodOptional<z.ZodNumber>;
260
+ idempotencyKey: z.ZodOptional<z.ZodString>;
261
+ }, z.core.$strip>;
262
+ export type QuickOrderOneClickRequest = z.infer<typeof quickOrderOneClickRequestSchema>;
263
+ export declare const quickOrderOneClickResponseSchema: z.ZodObject<{
264
+ order: z.ZodObject<{
265
+ id: z.ZodString;
266
+ businessId: z.ZodString;
267
+ status: z.ZodString;
268
+ total: z.ZodNumber;
269
+ currency: z.ZodString;
270
+ }, z.core.$strip>;
271
+ nextAction: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
272
+ kind: z.ZodLiteral<"redirect_to_gateway">;
273
+ url: z.ZodString;
274
+ expiresAt: z.ZodString;
275
+ }, z.core.$strip>, z.ZodObject<{
276
+ kind: z.ZodLiteral<"awaiting_transfer">;
277
+ accountDetails: z.ZodObject<{
278
+ accountNumber: z.ZodString;
279
+ accountHolder: z.ZodString;
280
+ bankName: z.ZodString;
281
+ amount: z.ZodNumber;
282
+ currency: z.ZodString;
283
+ reference: z.ZodString;
284
+ }, z.core.$strip>;
285
+ }, z.core.$strip>, z.ZodObject<{
286
+ kind: z.ZodLiteral<"none">;
287
+ }, z.core.$strip>], "kind">>;
288
+ }, z.core.$strip>;
289
+ export type QuickOrderOneClickResponse = z.infer<typeof quickOrderOneClickResponseSchema>;
290
+ /** Who is writing a preference, for the audit entry. */
291
+ export interface PreferenceAuditContext {
292
+ actorAdminUserId?: string | null;
293
+ customerAccountId?: string | null;
294
+ ipAddress?: string | null;
295
+ userAgent?: string | null;
296
+ requestId?: string | null;
297
+ }
298
+ /**
299
+ * Who is writing the preference.
300
+ *
301
+ * A discriminated union, not a bag of optional ids, and that is the point: a
302
+ * buyer editing their own defaults, an org admin editing a member's, a
303
+ * salesperson editing an assigned organisation's and a platform admin editing
304
+ * anybody's are four different authorisations, and each carries exactly the
305
+ * one identifier its rule needs. A shape with four optional fields has twelve
306
+ * states the rules cannot answer for.
307
+ *
308
+ * The authorisation itself stays on this module's side of the port.
309
+ */
310
+ export type PreferenceActor = {
311
+ kind: 'customer';
312
+ customerAccountId: string;
313
+ } | {
314
+ kind: 'org_admin';
315
+ organizationId: string;
316
+ } | {
317
+ kind: 'salesperson';
318
+ assignedOrganizationIds: string[];
319
+ } | {
320
+ kind: 'platform_admin';
321
+ };
322
+ /**
323
+ * Container name: `defaultPreferencePort`. Owner: `quick_order`.
324
+ *
325
+ * `resolveForCustomer` answers with the defaults **already resolved** —
326
+ * falling back through the buyer's saved addresses and the platform's methods
327
+ * — rather than the stored row, because the fallback chain is this module's
328
+ * and a caller reproducing it would reproduce it differently.
329
+ *
330
+ * **Owner off:** the seam fails closed — resolving this port throws
331
+ * `ModuleDisabledError` and the call answers 503 `MODULE_DISABLED`, so nothing
332
+ * half-executes. Whether `quick_order` has an off state at all is its manifest's
333
+ * `activation` to say, not this line's: a module declaring
334
+ * `nonDeactivatable` never enters one.
335
+ */
336
+ export interface DefaultPreferencePort {
337
+ resolveForCustomer(customerAccountId: string): Promise<QuickOrderResolvedDefaults>;
338
+ upsert(actor: PreferenceActor, input: QuickOrderPreferenceUpsert, audit: PreferenceAuditContext): Promise<QuickOrderPreference>;
339
+ }
340
+ //# sourceMappingURL=quick-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-order.d.ts","sourceRoot":"","sources":["../src/quick-order.ts"],"names":[],"mappings":"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"}