@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/errors.js ADDED
@@ -0,0 +1,532 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Central catalog of API error codes — see specs/001-b2b-platform-foundation/contracts/README.md.
4
+ *
5
+ * Every non-2xx response SHOULD use one of these codes. The list grows as modules are added;
6
+ * new codes MUST be screaming-snake-case and documented in the relevant contract file.
7
+ */
8
+ export const ERROR_CODES = {
9
+ // Generic
10
+ VALIDATION_FAILED: 'VALIDATION_FAILED',
11
+ INTERNAL: 'INTERNAL',
12
+ NOT_FOUND: 'NOT_FOUND',
13
+ UNAUTHORIZED: 'UNAUTHORIZED',
14
+ FORBIDDEN: 'FORBIDDEN',
15
+ RATE_LIMITED: 'RATE_LIMITED',
16
+ VERSION_CONFLICT: 'VERSION_CONFLICT',
17
+ // Catalog
18
+ FILTER_NOT_ALLOWED: 'FILTER_NOT_ALLOWED',
19
+ PRODUCT_NOT_FOUND: 'PRODUCT_NOT_FOUND',
20
+ // Catalog 086 — the viewer's own price as an ordering and as a filter.
21
+ //
22
+ // `FILTER_NOT_ALLOWED` is deliberately not reused for either: it means "this
23
+ // attribute is not filterable", and a price is not an attribute — the
24
+ // `'price'` occurrences in `catalog-query.service.ts` are an attribute
25
+ // *value type*, so the message would read as though an operator could switch
26
+ // price filtering on in the attribute editor.
27
+ PRICE_ORDERING_UNAVAILABLE: 'PRICE_ORDERING_UNAVAILABLE',
28
+ PRICE_RANGE_INVALID: 'PRICE_RANGE_INVALID',
29
+ PRODUCT_ARCHIVED: 'PRODUCT_ARCHIVED',
30
+ PRODUCT_DELETE_BLOCKED: 'PRODUCT_DELETE_BLOCKED',
31
+ SKU_ALREADY_EXISTS: 'SKU_ALREADY_EXISTS',
32
+ VARIANT_COMBINATION_EXISTS: 'VARIANT_COMBINATION_EXISTS',
33
+ VARIANT_AXIS_MISSING: 'VARIANT_AXIS_MISSING',
34
+ ATTRIBUTE_VALUE_REJECTED: 'ATTRIBUTE_VALUE_REJECTED',
35
+ FIELD_IMMUTABLE: 'FIELD_IMMUTABLE',
36
+ // Catalog 002 — Attribute Sets
37
+ ATTRIBUTE_SET_CODE_TAKEN: 'ATTRIBUTE_SET_CODE_TAKEN',
38
+ ATTRIBUTE_SET_IN_USE: 'ATTRIBUTE_SET_IN_USE',
39
+ SYSTEM_ATTRIBUTE_SET_IMMUTABLE: 'SYSTEM_ATTRIBUTE_SET_IMMUTABLE',
40
+ ATTRIBUTE_SET_NOT_FOUND: 'ATTRIBUTE_SET_NOT_FOUND',
41
+ ATTRIBUTE_NOT_FOUND: 'ATTRIBUTE_NOT_FOUND',
42
+ // Catalog 002 — Gallery + Attachments (US3)
43
+ GALLERY_LABEL_ALREADY_TAKEN: 'GALLERY_LABEL_ALREADY_TAKEN',
44
+ GALLERY_LABEL_LIMIT_EXCEEDED: 'GALLERY_LABEL_LIMIT_EXCEEDED',
45
+ ASSET_KIND_NOT_SUPPORTED: 'ASSET_KIND_NOT_SUPPORTED',
46
+ ATTACHMENT_TYPE_IN_USE: 'ATTACHMENT_TYPE_IN_USE',
47
+ ATTACHMENT_TYPE_CODE_TAKEN: 'ATTACHMENT_TYPE_CODE_TAKEN',
48
+ ATTACHMENT_TYPE_NOT_FOUND: 'ATTACHMENT_TYPE_NOT_FOUND',
49
+ ATTACHMENT_NOT_FOUND: 'ATTACHMENT_NOT_FOUND',
50
+ GALLERY_ITEM_NOT_FOUND: 'GALLERY_ITEM_NOT_FOUND',
51
+ // Catalog 043 — Packaging units
52
+ PACKAGING_UNIT_NOT_FOUND: 'PACKAGING_UNIT_NOT_FOUND',
53
+ PACKAGING_UNIT_NAME_CONFLICT: 'PACKAGING_UNIT_NAME_CONFLICT',
54
+ PACKAGING_UNIT_NOT_SUPPORTED_FOR_TYPE: 'PACKAGING_UNIT_NOT_SUPPORTED_FOR_TYPE',
55
+ // Catalog 002 — Product Links (US4)
56
+ SELF_LINK_NOT_ALLOWED: 'SELF_LINK_NOT_ALLOWED',
57
+ LINK_ALREADY_EXISTS: 'LINK_ALREADY_EXISTS',
58
+ TARGET_PRODUCT_NOT_FOUND: 'TARGET_PRODUCT_NOT_FOUND',
59
+ PRODUCT_LINK_NOT_FOUND: 'PRODUCT_LINK_NOT_FOUND',
60
+ // Catalog 002 — Grouped/Bundle/Virtual composite products (US5)
61
+ PRODUCT_TYPE_MISMATCH: 'PRODUCT_TYPE_MISMATCH',
62
+ NESTED_COMPOSITE_NOT_ALLOWED: 'NESTED_COMPOSITE_NOT_ALLOWED',
63
+ INVALID_QUANTITY_RANGE: 'INVALID_QUANTITY_RANGE',
64
+ OPTION_ALREADY_EXISTS: 'OPTION_ALREADY_EXISTS',
65
+ GROUPED_ITEM_NOT_FOUND: 'GROUPED_ITEM_NOT_FOUND',
66
+ BUNDLE_SLOT_NOT_FOUND: 'BUNDLE_SLOT_NOT_FOUND',
67
+ BUNDLE_SLOT_OPTION_NOT_FOUND: 'BUNDLE_SLOT_OPTION_NOT_FOUND',
68
+ MIN_NOT_MET: 'MIN_NOT_MET',
69
+ MAX_EXCEEDED: 'MAX_EXCEEDED',
70
+ UNKNOWN_OPTION: 'UNKNOWN_OPTION',
71
+ // Quote Requests (RFQ)
72
+ RFQ_NOT_DRAFT: 'RFQ_NOT_DRAFT',
73
+ RFQ_EMPTY: 'RFQ_EMPTY',
74
+ RFQ_NOT_QUOTED: 'RFQ_NOT_QUOTED',
75
+ RFQ_NOT_ACCEPTED: 'RFQ_NOT_ACCEPTED',
76
+ RFQ_NOT_NEW: 'RFQ_NOT_NEW',
77
+ RFQ_ALREADY_CLAIMED: 'RFQ_ALREADY_CLAIMED',
78
+ RFQ_EXPIRED: 'RFQ_EXPIRED',
79
+ QUOTE_INCOMPLETE: 'QUOTE_INCOMPLETE',
80
+ QUOTE_VALIDITY_ENDED: 'QUOTE_VALIDITY_ENDED',
81
+ // Shopping lists
82
+ SHOPPING_LIST_CANNOT_DELETE_DEFAULT: 'SHOPPING_LIST_CANNOT_DELETE_DEFAULT',
83
+ SHOPPING_LIST_CANNOT_DELETE_LAST: 'SHOPPING_LIST_CANNOT_DELETE_LAST',
84
+ // Organizations / customer accounts
85
+ ORGANIZATION_TAX_ID_EXISTS: 'ORGANIZATION_TAX_ID_EXISTS',
86
+ // Feature 056 — deletion of a parent with children is blocked (reassign /
87
+ // remove children first). Backed by the `parent_id ON DELETE RESTRICT` FK.
88
+ ORGANIZATION_HAS_CHILDREN: 'ORGANIZATION_HAS_CHILDREN',
89
+ // Feature 056 — a re-parent would create a cycle or exceed the depth bound.
90
+ ORGANIZATION_TREE_INVALID: 'ORGANIZATION_TREE_INVALID',
91
+ EMAIL_ALREADY_REGISTERED: 'EMAIL_ALREADY_REGISTERED',
92
+ EMAIL_ALREADY_IN_ORGANIZATION: 'EMAIL_ALREADY_IN_ORGANIZATION',
93
+ EMAIL_BELONGS_TO_ANOTHER_ORGANIZATION: 'EMAIL_BELONGS_TO_ANOTHER_ORGANIZATION',
94
+ TERMS_VERSION_STALE: 'TERMS_VERSION_STALE',
95
+ TOKEN_INVALID_OR_EXPIRED: 'TOKEN_INVALID_OR_EXPIRED',
96
+ // Wrong email/password on login. A code distinct from the generic
97
+ // UNAUTHORIZED ("authentication is required") guard so the storefront can
98
+ // surface an actionable "invalid email or password — try again" message
99
+ // instead of the opaque guard string (mirrors ACCOUNT_BLOCKED).
100
+ INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',
101
+ CURRENT_PASSWORD_INVALID: 'CURRENT_PASSWORD_INVALID',
102
+ TWO_FACTOR_REQUIRED: 'TWO_FACTOR_REQUIRED',
103
+ TWO_FACTOR_REQUIRED_BY_ROLE: 'TWO_FACTOR_REQUIRED_BY_ROLE',
104
+ CANNOT_REMOVE_LAST_ADMIN: 'CANNOT_REMOVE_LAST_ADMIN',
105
+ CANNOT_DEMOTE_LAST_ADMIN: 'CANNOT_DEMOTE_LAST_ADMIN',
106
+ CANNOT_REVOKE_LAST_ADMIN_INVITE: 'CANNOT_REVOKE_LAST_ADMIN_INVITE',
107
+ ADDRESS_IN_USE: 'ADDRESS_IN_USE',
108
+ ADDRESS_NOT_OWNED: 'ADDRESS_NOT_OWNED',
109
+ // Customers (040)
110
+ REGISTRATION_REQUIRES_ORGANIZATION: 'REGISTRATION_REQUIRES_ORGANIZATION',
111
+ ACCOUNT_BLOCKED: 'ACCOUNT_BLOCKED',
112
+ CUSTOMER_NOT_FOUND: 'CUSTOMER_NOT_FOUND',
113
+ CUSTOMER_ADDRESS_NOT_FOUND: 'CUSTOMER_ADDRESS_NOT_FOUND',
114
+ CUSTOMER_ALREADY_DELETED: 'CUSTOMER_ALREADY_DELETED',
115
+ CUSTOMER_NOT_DELETED: 'CUSTOMER_NOT_DELETED',
116
+ CUSTOMER_RESTORE_WINDOW_ELAPSED: 'CUSTOMER_RESTORE_WINDOW_ELAPSED',
117
+ ORG_OWNER_DEPLETION: 'ORG_OWNER_DEPLETION',
118
+ // Orders + Carts (feature 027)
119
+ CART_EMPTY: 'CART_EMPTY',
120
+ CART_LINE_CAP_EXCEEDED: 'CART_LINE_CAP_EXCEEDED',
121
+ CART_COUPON_REJECTED: 'CART_COUPON_REJECTED',
122
+ STOCK_UNAVAILABLE: 'STOCK_UNAVAILABLE',
123
+ PROMOTION_INVALID: 'PROMOTION_INVALID',
124
+ ORGANIZATION_SUSPENDED: 'ORGANIZATION_SUSPENDED',
125
+ ORDER_NOT_FOUND: 'ORDER_NOT_FOUND',
126
+ ORDER_NOT_CANCELLABLE: 'ORDER_NOT_CANCELLABLE',
127
+ INVOICE_NOT_READY: 'INVOICE_NOT_READY',
128
+ // Invoices — number uniqueness (feature 078, D-95). The numbering series is
129
+ // per (sales channel, kind, year) while `invoices.number` is unique across
130
+ // the whole platform, so two channels whose patterns can render one string
131
+ // are a duplicate waiting to happen. The first code refuses the
132
+ // configuration, the second refuses the document.
133
+ INVOICE_NUMBER_PATTERN_COLLIDES: 'INVOICE_NUMBER_PATTERN_COLLIDES',
134
+ INVOICE_NUMBER_ALREADY_ISSUED: 'INVOICE_NUMBER_ALREADY_ISSUED',
135
+ INVALID_TRANSITION: 'INVALID_TRANSITION',
136
+ // Credit Limit
137
+ CREDIT_LIMIT_NOT_GRANTED: 'CREDIT_LIMIT_NOT_GRANTED',
138
+ CREDIT_LIMIT_ALREADY_GRANTED: 'CREDIT_LIMIT_ALREADY_GRANTED',
139
+ LIMIT_INSUFFICIENT: 'LIMIT_INSUFFICIENT',
140
+ CURRENCY_MISMATCH: 'CURRENCY_MISMATCH',
141
+ ADJUSTMENT_BELOW_ACTIVE: 'ADJUSTMENT_BELOW_ACTIVE',
142
+ ACTIVE_RESERVATIONS_EXIST: 'ACTIVE_RESERVATIONS_EXIST',
143
+ ALREADY_SUBSCRIBED: 'ALREADY_SUBSCRIBED',
144
+ PRODUCT_IN_STOCK: 'PRODUCT_IN_STOCK',
145
+ // API keys / webhooks / integrations
146
+ API_KEY_OUT_OF_SCOPE: 'API_KEY_OUT_OF_SCOPE',
147
+ WEBHOOK_DELIVERY_NOT_REPLAYABLE: 'WEBHOOK_DELIVERY_NOT_REPLAYABLE',
148
+ // Distributor API (feature 062)
149
+ API_KEY_NOT_BOUND: 'API_KEY_NOT_BOUND',
150
+ API_KEY_CHANNEL_MISMATCH: 'API_KEY_CHANNEL_MISMATCH',
151
+ IDEMPOTENCY_KEY_REQUIRED: 'IDEMPOTENCY_KEY_REQUIRED',
152
+ IDEMPOTENCY_KEY_REUSED: 'IDEMPOTENCY_KEY_REUSED',
153
+ SKU_NOT_IN_ASSORTMENT: 'SKU_NOT_IN_ASSORTMENT',
154
+ PRICE_UNAVAILABLE: 'PRICE_UNAVAILABLE',
155
+ // Admin users / roles
156
+ ADMIN_ROLE_CODE_TAKEN: 'ADMIN_ROLE_CODE_TAKEN',
157
+ ADMIN_ROLE_IN_USE: 'ADMIN_ROLE_IN_USE',
158
+ // Settings (feature 004)
159
+ SETTING_NOT_REGISTERED: 'SETTING_NOT_REGISTERED',
160
+ SETTING_OUT_OF_SCOPE_FOR_CHANNEL: 'SETTING_OUT_OF_SCOPE_FOR_CHANNEL',
161
+ SETTING_VALUE_SHAPE_MISMATCH: 'SETTING_VALUE_SHAPE_MISMATCH',
162
+ SETTING_EMPTY_SUBSET: 'SETTING_EMPTY_SUBSET',
163
+ SETTING_GROUP_PROTECTED: 'SETTING_GROUP_PROTECTED',
164
+ SETTING_GROUP_NOT_FOUND: 'SETTING_GROUP_NOT_FOUND',
165
+ SETTING_CODE_CONFLICT: 'SETTING_CODE_CONFLICT',
166
+ SETTING_GROUP_CODE_CONFLICT: 'SETTING_GROUP_CODE_CONFLICT',
167
+ SETTING_BREAKING_CHANGE_REJECTED: 'SETTING_BREAKING_CHANGE_REJECTED',
168
+ // Settings 'secret' value type (feature 043)
169
+ SETTING_SECRET_KEY_MISSING: 'SETTING_SECRET_KEY_MISSING',
170
+ // Prompt actions (feature 043)
171
+ ASSISTANT_DISABLED: 'ASSISTANT_DISABLED',
172
+ ASSISTANT_NOT_CONFIGURED: 'ASSISTANT_NOT_CONFIGURED',
173
+ PROMPT_REQUEST_INVALID_STATE: 'PROMPT_REQUEST_INVALID_STATE',
174
+ PROMPT_PLAN_EXPIRED: 'PROMPT_PLAN_EXPIRED',
175
+ PROMPT_PERMISSION_REVOKED: 'PROMPT_PERMISSION_REVOKED',
176
+ PROMPT_REQUEST_IN_FLIGHT: 'PROMPT_REQUEST_IN_FLIGHT',
177
+ // Search (feature 006)
178
+ QUERY_TOO_SHORT: 'QUERY_TOO_SHORT',
179
+ QUERY_TOO_LONG: 'QUERY_TOO_LONG',
180
+ LIMIT_OUT_OF_RANGE: 'LIMIT_OUT_OF_RANGE',
181
+ SEARCH_BACKEND_UNAVAILABLE: 'SEARCH_BACKEND_UNAVAILABLE',
182
+ PHRASE_REQUIRED: 'PHRASE_REQUIRED',
183
+ PHRASE_TOO_LONG: 'PHRASE_TOO_LONG',
184
+ RESULT_COUNT_INVALID: 'RESULT_COUNT_INVALID',
185
+ LLM_CONFIG_INCOMPLETE: 'LLM_CONFIG_INCOMPLETE',
186
+ // Sales Channels (feature 005)
187
+ UNKNOWN_SALES_CHANNEL: 'UNKNOWN_SALES_CHANNEL',
188
+ INACTIVE_SALES_CHANNEL: 'INACTIVE_SALES_CHANNEL',
189
+ MISSING_SALES_CHANNEL_CONTEXT: 'MISSING_SALES_CHANNEL_CONTEXT',
190
+ DUPLICATE_SALES_CHANNEL_CODE: 'DUPLICATE_SALES_CHANNEL_CODE',
191
+ UNKNOWN_LANGUAGE_CODE: 'UNKNOWN_LANGUAGE_CODE',
192
+ UNKNOWN_CURRENCY_CODE: 'UNKNOWN_CURRENCY_CODE',
193
+ CANNOT_MODIFY_SYSTEM_DEFAULT: 'CANNOT_MODIFY_SYSTEM_DEFAULT',
194
+ SALES_CHANNEL_HAS_ATTRIBUTIONS: 'SALES_CHANNEL_HAS_ATTRIBUTIONS',
195
+ ENTITY_WOULD_HAVE_ZERO_CHANNELS: 'ENTITY_WOULD_HAVE_ZERO_CHANNELS',
196
+ STALE_SALES_CHANNEL_WRITE: 'STALE_SALES_CHANNEL_WRITE',
197
+ SALES_CHANNEL_ATTRIBUTION_IMMUTABLE: 'SALES_CHANNEL_ATTRIBUTION_IMMUTABLE',
198
+ SALES_CHANNEL_CODE_IMMUTABLE: 'SALES_CHANNEL_CODE_IMMUTABLE',
199
+ // Compare (feature 007)
200
+ COMPARISON_FULL: 'COMPARISON_FULL',
201
+ COMPARISON_NOT_FOUND: 'COMPARISON_NOT_FOUND',
202
+ COMPARISON_EMPTY: 'COMPARISON_EMPTY',
203
+ PRODUCT_NOT_IN_COMPARISON: 'PRODUCT_NOT_IN_COMPARISON',
204
+ PDF_GENERATION_FAILED: 'PDF_GENERATION_FAILED',
205
+ // Inventory (feature 010 — multi-warehouse)
206
+ WAREHOUSE_NOT_FOUND: 'WAREHOUSE_NOT_FOUND',
207
+ WAREHOUSE_CODE_TAKEN: 'WAREHOUSE_CODE_TAKEN',
208
+ WAREHOUSE_INVALID_CODE: 'WAREHOUSE_INVALID_CODE',
209
+ WAREHOUSE_CANNOT_DELETE_DEFAULT: 'WAREHOUSE_CANNOT_DELETE_DEFAULT',
210
+ WAREHOUSE_IS_DEFAULT_FOR_CHANNELS: 'WAREHOUSE_IS_DEFAULT_FOR_CHANNELS',
211
+ WAREHOUSE_HAS_STOCK: 'WAREHOUSE_HAS_STOCK',
212
+ CHANNEL_NO_WAREHOUSES: 'CHANNEL_NO_WAREHOUSES',
213
+ CHANNEL_WAREHOUSE_NOT_FOUND: 'CHANNEL_WAREHOUSE_NOT_FOUND',
214
+ STOCK_LEVEL_NOT_FOUND: 'STOCK_LEVEL_NOT_FOUND',
215
+ THRESHOLDS_INVALID: 'THRESHOLDS_INVALID',
216
+ PRODUCT_UNMANAGED_STOCK: 'PRODUCT_UNMANAGED_STOCK',
217
+ AVAILABILITY_NOTIFICATION_NOT_FOUND: 'AVAILABILITY_NOTIFICATION_NOT_FOUND',
218
+ STOCK_IMPORT_INVALID_FILE: 'STOCK_IMPORT_INVALID_FILE',
219
+ // Assets Library (feature 013)
220
+ ASSET_NOT_FOUND: 'ASSET_NOT_FOUND',
221
+ ASSET_REFERENCED: 'ASSET_REFERENCED',
222
+ ASSET_FOLDER_NOT_FOUND: 'ASSET_FOLDER_NOT_FOUND',
223
+ ASSET_FOLDER_NOT_EMPTY: 'ASSET_FOLDER_NOT_EMPTY',
224
+ ASSET_FOLDER_NAME_CONFLICT: 'ASSET_FOLDER_NAME_CONFLICT',
225
+ ASSET_FOLDER_CYCLE: 'ASSET_FOLDER_CYCLE',
226
+ ASSET_UPLOAD_NO_FILE: 'ASSET_UPLOAD_NO_FILE',
227
+ ASSET_UPLOAD_TYPE_NOT_ALLOWED: 'ASSET_UPLOAD_TYPE_NOT_ALLOWED',
228
+ ASSET_UPLOAD_TOO_LARGE: 'ASSET_UPLOAD_TOO_LARGE',
229
+ ASSET_STORAGE_UNAVAILABLE: 'ASSET_STORAGE_UNAVAILABLE',
230
+ ASSET_STORAGE_MISCONFIGURED: 'ASSET_STORAGE_MISCONFIGURED',
231
+ ASSET_LEGACY_LOCATOR_CANNOT_HARDEN: 'ASSET_LEGACY_LOCATOR_CANNOT_HARDEN',
232
+ ASSET_FILE_MISSING: 'ASSET_FILE_MISSING',
233
+ ASSET_GONE: 'ASSET_GONE',
234
+ ASSET_ACCESS_DENIED: 'ASSET_ACCESS_DENIED',
235
+ // CMS (feature 014)
236
+ CMS_PAGE_NOT_FOUND: 'CMS_PAGE_NOT_FOUND',
237
+ CMS_BLOCK_NOT_FOUND: 'CMS_BLOCK_NOT_FOUND',
238
+ CMS_TEMPLATE_NOT_FOUND: 'CMS_TEMPLATE_NOT_FOUND',
239
+ CMS_HOOK_NOT_FOUND: 'CMS_HOOK_NOT_FOUND',
240
+ CMS_SLUG_CONFLICT: 'CMS_SLUG_CONFLICT',
241
+ // Feature 105 — the slug's first segment is one this deployment reserves for
242
+ // its storefront's own routes, so the page would save and never be served.
243
+ CMS_SLUG_RESERVED: 'CMS_SLUG_RESERVED',
244
+ CMS_CODE_CONFLICT: 'CMS_CODE_CONFLICT',
245
+ CMS_REFERENCED: 'CMS_REFERENCED',
246
+ CMS_HOOK_SYSTEM_PROTECTED: 'CMS_HOOK_SYSTEM_PROTECTED',
247
+ CMS_LANGUAGE_NOT_IN_CHANNEL_SCOPE: 'CMS_LANGUAGE_NOT_IN_CHANNEL_SCOPE',
248
+ CMS_SCHEMA_UPGRADE_FAILED: 'CMS_SCHEMA_UPGRADE_FAILED',
249
+ // Megamenu (feature 015)
250
+ MEGAMENU_NOT_FOUND: 'MEGAMENU_NOT_FOUND',
251
+ MEGAMENU_HAS_ACTIVE_BINDINGS: 'MEGAMENU_HAS_ACTIVE_BINDINGS',
252
+ MEGAMENU_EMPTY_TREE: 'MEGAMENU_EMPTY_TREE',
253
+ MEGAMENU_BINDING_NOT_FOUND: 'MEGAMENU_BINDING_NOT_FOUND',
254
+ MEGAMENU_BINDING_ALREADY_EXISTS: 'MEGAMENU_BINDING_ALREADY_EXISTS',
255
+ MEGAMENU_LANGUAGE_NOT_IN_CHANNEL_SCOPE: 'MEGAMENU_LANGUAGE_NOT_IN_CHANNEL_SCOPE',
256
+ MEGAMENU_TARGET_OUT_OF_SCOPE: 'MEGAMENU_TARGET_OUT_OF_SCOPE',
257
+ MEGAMENU_ASSET_KIND_MISMATCH: 'MEGAMENU_ASSET_KIND_MISMATCH',
258
+ MEGAMENU_REFERENCED: 'MEGAMENU_REFERENCED',
259
+ MEGAMENU_DEPTH_EXCEEDED: 'MEGAMENU_DEPTH_EXCEEDED',
260
+ // Blog (feature 016)
261
+ BLOG_SLUG_INVALID: 'BLOG_SLUG_INVALID',
262
+ BLOG_SLUG_TAKEN: 'BLOG_SLUG_TAKEN',
263
+ BLOG_POST_NOT_FOUND: 'BLOG_POST_NOT_FOUND',
264
+ BLOG_POST_NO_CHANNEL: 'BLOG_POST_NO_CHANNEL',
265
+ BLOG_POST_NO_LANGUAGE: 'BLOG_POST_NO_LANGUAGE',
266
+ BLOG_CATEGORY_NOT_FOUND: 'BLOG_CATEGORY_NOT_FOUND',
267
+ BLOG_CATEGORY_NO_CHANNEL: 'BLOG_CATEGORY_NO_CHANNEL',
268
+ BLOG_CATEGORY_CYCLE: 'BLOG_CATEGORY_CYCLE',
269
+ BLOG_CATEGORY_PROTECTED: 'BLOG_CATEGORY_PROTECTED',
270
+ BLOG_CATEGORY_IN_USE: 'BLOG_CATEGORY_IN_USE',
271
+ BLOG_CATEGORY_HAS_CHILDREN: 'BLOG_CATEGORY_HAS_CHILDREN',
272
+ BLOG_TAG_NOT_FOUND: 'BLOG_TAG_NOT_FOUND',
273
+ BLOG_TAG_CODE_TAKEN: 'BLOG_TAG_CODE_TAKEN',
274
+ BLOG_TAG_IN_USE: 'BLOG_TAG_IN_USE',
275
+ BLOG_URL_PREFIX_INVALID: 'BLOG_URL_PREFIX_INVALID',
276
+ BLOG_URL_PREFIX_RESERVED: 'BLOG_URL_PREFIX_RESERVED',
277
+ BLOG_DISABLED: 'BLOG_DISABLED',
278
+ BLOG_ASSET_KIND_MISMATCH: 'BLOG_ASSET_KIND_MISMATCH',
279
+ BLOG_RELATED_POST_SELF_REFERENCE: 'BLOG_RELATED_POST_SELF_REFERENCE',
280
+ // Admin (feature 016 — extends 003)
281
+ ADMIN_ROLE_PROTECTED: 'ADMIN_ROLE_PROTECTED',
282
+ // Dictionary (feature 017)
283
+ DICTIONARY_ENTRY_NOT_FOUND: 'DICTIONARY_ENTRY_NOT_FOUND',
284
+ DICTIONARY_ENTRY_INACTIVE: 'DICTIONARY_ENTRY_INACTIVE',
285
+ DICTIONARY_ENTRY_HAS_DEPENDENTS: 'DICTIONARY_ENTRY_HAS_DEPENDENTS',
286
+ DICTIONARY_LAST_ACTIVE_ENTRY: 'DICTIONARY_LAST_ACTIVE_ENTRY',
287
+ DICTIONARY_DEFAULT_CANNOT_BE_DEACTIVATED: 'DICTIONARY_DEFAULT_CANNOT_BE_DEACTIVATED',
288
+ DICTIONARY_FALLBACK_CYCLE: 'DICTIONARY_FALLBACK_CYCLE',
289
+ DICTIONARY_CODE_IMMUTABLE: 'DICTIONARY_CODE_IMMUTABLE',
290
+ DICTIONARY_TRANSLATION_LANGUAGE_INACTIVE: 'DICTIONARY_TRANSLATION_LANGUAGE_INACTIVE',
291
+ // Module Lifecycle (feature 018)
292
+ MODULE_DISABLED: 'MODULE_DISABLED',
293
+ // Module Lifecycle (feature 073 — operator activation)
294
+ /** No manifest and no registry row answer to this module id. */
295
+ MODULE_NOT_FOUND: 'MODULE_NOT_FOUND',
296
+ /**
297
+ * The module declared itself non-deactivatable, or declares no activation
298
+ * control at all — either way there is nothing an operator may switch.
299
+ */
300
+ MODULE_NOT_DEACTIVATABLE: 'MODULE_NOT_DEACTIVATABLE',
301
+ /**
302
+ * An ordinary settings write targeted a module's activation control. The
303
+ * audited `module.activation.set` Command is the only door (FR-007, FR-009).
304
+ */
305
+ MODULE_ACTIVATION_PROTECTED: 'MODULE_ACTIVATION_PROTECTED',
306
+ /**
307
+ * Deactivating a module other effectively-present modules depend on
308
+ * (FR-008). Distinct from `MODULE_NOT_DEACTIVATABLE`, which says there is
309
+ * nothing to switch *ever*: this one is a "not in this order" with a remedy —
310
+ * `details.blockedBy` names the modules to switch off first.
311
+ */
312
+ MODULE_DEPENDENTS_PRESENT: 'MODULE_DEPENDENTS_PRESENT',
313
+ /**
314
+ * Activating a module whose own dependencies are not effectively present
315
+ * (FR-008, the symmetric direction). `details.missing` names them.
316
+ */
317
+ MODULE_DEPENDENCIES_ABSENT: 'MODULE_DEPENDENCIES_ABSENT',
318
+ /**
319
+ * A configuration write targeted a module that is not effectively present.
320
+ * Reads still show the stored value; writes are refused (FR-033).
321
+ */
322
+ MODULE_SETTING_READ_ONLY: 'MODULE_SETTING_READ_ONLY',
323
+ // Transactional Emails (issue #89 — per-email operator activation)
324
+ /**
325
+ * The owning module declared this individual email non-deactivatable —
326
+ * it is required to create an account or to get back into one. Deliberately
327
+ * the twin of `MODULE_NOT_DEACTIVATABLE`, one granularity down: same 409,
328
+ * same "there is nothing here to switch, ever", same carried reason.
329
+ */
330
+ TRANSACTIONAL_EMAIL_NOT_DEACTIVATABLE: 'TRANSACTIONAL_EMAIL_NOT_DEACTIVATABLE',
331
+ // Catalog (feature 022 — Products Bulk Edit)
332
+ BULK_TOO_LARGE: 'BULK_TOO_LARGE',
333
+ ATTRIBUTE_NOT_MASS_EDITABLE: 'ATTRIBUTE_NOT_MASS_EDITABLE',
334
+ // Catalog (feature 033 — Products collection selection)
335
+ SELECTION_TOO_LARGE: 'SELECTION_TOO_LARGE',
336
+ // MFA (feature 042)
337
+ MFA_INVALID_CODE: 'MFA_INVALID_CODE',
338
+ MFA_INVALID_CHALLENGE: 'MFA_INVALID_CHALLENGE',
339
+ MFA_TOO_MANY_ATTEMPTS: 'MFA_TOO_MANY_ATTEMPTS',
340
+ MFA_WRONG_SURFACE: 'MFA_WRONG_SURFACE',
341
+ MFA_ALREADY_ENROLLED: 'MFA_ALREADY_ENROLLED',
342
+ MFA_NO_PENDING_ENROLMENT: 'MFA_NO_PENDING_ENROLMENT',
343
+ MFA_NO_ACTIVE_ENROLMENT: 'MFA_NO_ACTIVE_ENROLMENT',
344
+ MFA_REAUTH_REQUIRED: 'MFA_REAUTH_REQUIRED',
345
+ MFA_NOT_ENABLED: 'MFA_NOT_ENABLED',
346
+ // Issue #194 — unlinking a federated identity that is the account's only
347
+ // credential is refused: an account created by a social sign-in holds a
348
+ // random password nobody knows, so the link is the way back in.
349
+ MFA_SOCIAL_LAST_CREDENTIAL: 'MFA_SOCIAL_LAST_CREDENTIAL',
350
+ // Feature 055 — Custom Fields Layer.
351
+ CUSTOM_FIELD_NOT_FOUND: 'CUSTOM_FIELD_NOT_FOUND',
352
+ CUSTOM_FIELD_KEY_CONFLICT: 'CUSTOM_FIELD_KEY_CONFLICT',
353
+ CUSTOM_FIELD_DEFINITION_INVALID: 'CUSTOM_FIELD_DEFINITION_INVALID',
354
+ CUSTOM_FIELD_VALUE_INVALID: 'CUSTOM_FIELD_VALUE_INVALID',
355
+ // Feature 061 — the entity type's registry entry declares `managedBy`, so
356
+ // definitions are mutated only through the owning host module's surface
357
+ // (generic admin mutations refuse with 409 "host_managed").
358
+ CUSTOM_FIELD_HOST_MANAGED: 'CUSTOM_FIELD_HOST_MANAGED',
359
+ // Feature 058 — Credentials (reusable credential configurations).
360
+ CREDENTIAL_NOT_FOUND: 'CREDENTIAL_NOT_FOUND',
361
+ CREDENTIAL_CODE_TAKEN: 'CREDENTIAL_CODE_TAKEN',
362
+ CREDENTIAL_TYPE_UNKNOWN: 'CREDENTIAL_TYPE_UNKNOWN',
363
+ CREDENTIAL_VALIDATION_FAILED: 'CREDENTIAL_VALIDATION_FAILED',
364
+ CREDENTIAL_IN_USE: 'CREDENTIAL_IN_USE',
365
+ CREDENTIAL_TYPE_IMMUTABLE: 'CREDENTIAL_TYPE_IMMUTABLE',
366
+ // Feature 059 — KSeF. Its seven `KSEF_*` codes left with the `ksef` module
367
+ // (feature 134, T069), which declares them itself as `ksefErrorCodes`.
368
+ // Product Feed module (feature 067). The module's own operator-facing reason
369
+ // strings live in `PRODUCT_FEED_ERROR_CODES` (product-feeds.ts) and travel in
370
+ // the envelope's `details.reason`; these are the transport-level codes.
371
+ PRODUCT_FEED_DISABLED: 'PRODUCT_FEED_DISABLED',
372
+ PRODUCT_FEED_TEMPLATE_UNBOUND: 'PRODUCT_FEED_TEMPLATE_UNBOUND',
373
+ /**
374
+ * A template write refused on a state the operator can see and act on: it is
375
+ * a system template, it is still used by a feed, or its name is taken.
376
+ * `details.reason` carries which one, from `PRODUCT_FEED_ERROR_CODES`.
377
+ */
378
+ PRODUCT_FEED_TEMPLATE_CONFLICT: 'PRODUCT_FEED_TEMPLATE_CONFLICT',
379
+ /**
380
+ * The write is understood, allowed and refused only until the operator has
381
+ * seen its consequence — removing a field the provider's shipped template
382
+ * marks required (FR-074). It is deliberately neither a validation failure
383
+ * (the request is valid) nor a hard block (re-sending with
384
+ * `?acknowledgeWarnings=true` performs it); `details.warnings` carries what
385
+ * the operator has to be told first.
386
+ */
387
+ PRODUCT_FEED_CONFIRMATION_REQUIRED: 'PRODUCT_FEED_CONFIRMATION_REQUIRED',
388
+ /**
389
+ * A taxonomy revision write refused on a state the operator can see and act
390
+ * on: the mechanism is switched off, a check for that provider is already
391
+ * running, the impact figure they acknowledged no longer matches, or the
392
+ * revision is already the one in force. `details.reason` carries which one,
393
+ * from `PRODUCT_FEED_ERROR_CODES` (feature 067, FR-087, FR-095, FR-096).
394
+ */
395
+ PRODUCT_FEED_TAXONOMY_CONFLICT: 'PRODUCT_FEED_TAXONOMY_CONFLICT',
396
+ /**
397
+ * A price binding named a price list that does not exist. Named after the
398
+ * resource rather than the module (admin-api.md § Price bindings): the caller
399
+ * supplied a `priceListId`, and a bare `NOT_FOUND` on a request carrying three
400
+ * identifiers says nothing about which one was wrong.
401
+ */
402
+ PRICE_LIST_NOT_FOUND: 'PRICE_LIST_NOT_FOUND',
403
+ // Shared PIM connector layer (feature 089).
404
+ /** Another PIM connector is operator-active; activation refused (FR-003). */
405
+ PIM_CONNECTOR_ALREADY_ACTIVE: 'PIM_CONNECTOR_ALREADY_ACTIVE',
406
+ // Invoice ledger + Infakt (feature 119).
407
+ /** Another invoice-ledger vendor is operator-active; activation refused. */
408
+ INVOICE_LEDGER_VENDOR_ALREADY_ACTIVE: 'INVOICE_LEDGER_VENDOR_ALREADY_ACTIVE',
409
+ /** Required Infakt (or vendor) credentials are missing for this delivery. */
410
+ INVOICE_LEDGER_CREDENTIALS_MISSING: 'INVOICE_LEDGER_CREDENTIALS_MISSING',
411
+ /** Delivery is succeeded or otherwise not eligible for operator retry. */
412
+ INVOICE_LEDGER_DELIVERY_NOT_RETRYABLE: 'INVOICE_LEDGER_DELIVERY_NOT_RETRYABLE',
413
+ // `INFAKT_CONNECTION_FAILED` and `INFAKT_WEBHOOK_UNAUTHORIZED` left with the
414
+ // `infakt` module (feature 134, T069), which declares them as `infaktErrorCodes`.
415
+ // Shared ERP connector layer (feature 119).
416
+ /** Another ERP connector is operator-active; activation refused (FR-006). */
417
+ ERP_CONNECTOR_ALREADY_ACTIVE: 'ERP_CONNECTOR_ALREADY_ACTIVE',
418
+ // Payments — the buyer's retry refusals (!1159). Three codes and not one,
419
+ // because the money term and the lifecycle term are orthogonal rather than
420
+ // alternative: an order can be unpaid and cancelled, or paid and open, so
421
+ // neither implies the other and a cancelled-but-unpaid buyer told "there is
422
+ // nothing to pay" is told something false.
423
+ /** The order owes nothing — already paid, deferred to credit, or refunded. */
424
+ PAYMENT_NOT_DUE: 'PAYMENT_NOT_DUE',
425
+ /** The order's lifecycle is over, so no payment can be started against it. */
426
+ PAYMENT_ORDER_CLOSED: 'PAYMENT_ORDER_CLOSED',
427
+ /**
428
+ * The money is still owed and the order is open; the shop cannot start a
429
+ * session because the method it was placed with is gone. Named for the
430
+ * adapter and not the method, because `PAYMENT_METHOD_*` is the family
431
+ * `payment_methods` would reach for and D-182 routes a contested code to
432
+ * neither claimant.
433
+ */
434
+ PAYMENT_ADAPTER_UNAVAILABLE: 'PAYMENT_ADAPTER_UNAVAILABLE',
435
+ };
436
+ /**
437
+ * The shape of every error code on the wire — the platform's own and a
438
+ * module's alike (`specs/090-module-owned-error-codes/`, `contracts/error-code-declaration.md` §1.1).
439
+ *
440
+ * SCREAMING_SNAKE_CASE, and it is the one grammar three separate things agree
441
+ * on: `ERROR_CODES`' own members, a module's `errorCodes` manifest declaration,
442
+ * and the `errors.<CODE>` key the sentence is written under.
443
+ */
444
+ export const errorCodeRe = /^[A-Z][A-Z0-9_]*$/;
445
+ /**
446
+ * The authoring shape for a module's own error codes.
447
+ *
448
+ * ```ts
449
+ * export const acmeErrorCodes = defineModuleErrorCodes([
450
+ * 'ACME_SYNC_NOT_CONFIGURED',
451
+ * 'ACME_SYNC_REJECTED',
452
+ * ]);
453
+ *
454
+ * throw new HttpError(409, acmeErrorCodes.ACME_SYNC_REJECTED, 'Sync rejected.');
455
+ * ```
456
+ *
457
+ * The returned object's keys are the codes, so a typo at a raise site is a
458
+ * property that does not exist; its values carry the brand, so a bare string
459
+ * literal cannot stand in for one. Declaring the code in the manifest
460
+ * (`errorCodes: [{ code: 'ACME_SYNC_REJECTED' }]`) is a separate act and remains
461
+ * what routes the sentence — this helper decides nothing about routing.
462
+ *
463
+ * Two refusals, both at import time on the author's own machine, neither needing
464
+ * an instance: a code that is not SCREAMING_SNAKE_CASE, and the same code twice.
465
+ * The second matters because the return value is an object, where a duplicate
466
+ * collapses silently into one key.
467
+ */
468
+ export function defineModuleErrorCodes(codes) {
469
+ const seen = new Set();
470
+ const declared = {};
471
+ for (const code of codes) {
472
+ if (!errorCodeRe.test(code)) {
473
+ throw new Error(`[contracts/errors] "${code}" is not a valid error code — it must match ` +
474
+ `${String(errorCodeRe)} (SCREAMING_SNAKE_CASE).`);
475
+ }
476
+ if (seen.has(code)) {
477
+ throw new Error(`[contracts/errors] error code "${code}" is declared twice — the codes ` +
478
+ 'become object keys, so the duplicate would collapse into one silently.');
479
+ }
480
+ seen.add(code);
481
+ declared[code] = code;
482
+ }
483
+ return declared;
484
+ }
485
+ export const errorDetailSchema = z.object({
486
+ path: z.string().describe('dot-path to the offending field inside the request body or query'),
487
+ issue: z.string().describe('human-readable explanation of what failed'),
488
+ });
489
+ export const errorEnvelopeSchema = z.object({
490
+ error: z.object({
491
+ // Relaxed from `z.enum(Object.values(ERROR_CODES))` by feature 090
492
+ // (`contracts/error-code-declaration.md` §5): a module declares its own
493
+ // codes, so the wire's vocabulary is no longer the platform's enumeration.
494
+ // Every envelope valid before is valid after — this widens and never
495
+ // narrows — and the change is inert at runtime: the schema's only consumers
496
+ // in the tree are the `z.infer` below and one documentation reference, so no
497
+ // request or response validation moves.
498
+ //
499
+ // The `refine` carries no runtime decision (the regex above is the whole
500
+ // check); it is there to state the **output type**, which is the union and
501
+ // not a bare `string`. Losing that would relax `ErrorEnvelope` further than
502
+ // the feature asks for, and it is the type both applications read.
503
+ code: z
504
+ .string()
505
+ .regex(errorCodeRe)
506
+ .refine((value) => errorCodeRe.test(value)),
507
+ message: z.string(),
508
+ // Two shapes: (a) the legacy Zod-style array of {path, issue}, used by
509
+ // request-validation failures, and (b) a free-form object used by
510
+ // domain errors that carry structured metadata (e.g. feature 022's
511
+ // `BULK_TOO_LARGE` envelope carries `{ maxBatchSize, recommendedSplitInto }`).
512
+ details: z.union([z.array(errorDetailSchema), z.record(z.string(), z.unknown())]).optional(),
513
+ requestId: z.string().optional(),
514
+ }),
515
+ });
516
+ /**
517
+ * `MODULE_DISABLED` names the module it refused for (issue #161).
518
+ *
519
+ * The refusal is raised in one place — the kernel's `ModuleDisabledError` — and
520
+ * carried the module id on the error object only. The envelope replaces an
521
+ * operator-visible message with the registered sentence for its **code**, and
522
+ * `MODULE_DISABLED` is one code for every gated port in the platform, so the
523
+ * wire carried "Module Disabled." and the one fact the operator needs to act —
524
+ * which module to look at — never left the process. It is published here rather
525
+ * than left implicit because it is a wire shape: a client may read it, and the
526
+ * sentence interpolates `{module}` out of it.
527
+ */
528
+ export const moduleDisabledDetailsSchema = z.object({
529
+ /** Manifest id of the module whose effective state refused the call. */
530
+ module: z.string().min(1),
531
+ });
532
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}