@openlup/platform 0.26.0 → 0.27.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 (520) hide show
  1. package/CHANGELOG.md +138 -218
  2. package/README.md +229 -16
  3. package/dist/commerce/adapters/managed/commerceOmsControlPlane.d.ts +3 -0
  4. package/dist/commerce/adapters/managed/commerceOmsControlPlane.js +71 -0
  5. package/dist/commerce/adapters/managed/commerceOmsMutations.d.ts +10 -0
  6. package/dist/commerce/adapters/managed/commerceOmsMutations.js +119 -0
  7. package/dist/commerce/adapters/managed/commerceOmsPort.d.ts +28 -0
  8. package/dist/commerce/adapters/managed/commerceOmsPort.js +101 -0
  9. package/dist/commerce/adapters/managed/oms/accounting.d.ts +3 -0
  10. package/dist/commerce/adapters/managed/oms/accounting.js +13 -0
  11. package/dist/commerce/adapters/managed/oms/fulfillmentReads.d.ts +17 -0
  12. package/dist/commerce/adapters/managed/oms/fulfillmentReads.js +81 -0
  13. package/dist/commerce/adapters/managed/oms/inboundEvents.d.ts +9 -0
  14. package/dist/commerce/adapters/managed/oms/inboundEvents.js +40 -0
  15. package/dist/commerce/adapters/managed/oms/outboxEvents.d.ts +2 -0
  16. package/dist/commerce/adapters/managed/oms/outboxEvents.js +23 -0
  17. package/dist/commerce/adapters/managed/oms/paymentAttempts.d.ts +3 -0
  18. package/dist/commerce/adapters/managed/oms/paymentAttempts.js +15 -0
  19. package/dist/commerce/adapters/managed/oms/queueSelection.d.ts +12 -0
  20. package/dist/commerce/adapters/managed/oms/queueSelection.js +109 -0
  21. package/dist/commerce/adapters/managed/oms/readProjections.d.ts +18 -0
  22. package/dist/commerce/adapters/managed/oms/readProjections.js +13 -0
  23. package/dist/commerce/adapters/managed/oms/readQueries.d.ts +16 -0
  24. package/dist/commerce/adapters/managed/oms/readQueries.js +276 -0
  25. package/dist/commerce/adapters/managed/oms/types.d.ts +2 -0
  26. package/dist/commerce/adapters/managed/oms/types.js +7 -0
  27. package/dist/commerce/checkoutCommandSchemas.d.ts +89 -0
  28. package/dist/commerce/checkoutCommandSchemas.js +70 -0
  29. package/dist/commerce/checkoutHelpers.d.ts +21 -0
  30. package/dist/commerce/checkoutHelpers.js +29 -0
  31. package/dist/commerce/checkoutResumeSchemas.d.ts +158 -0
  32. package/dist/commerce/checkoutResumeSchemas.js +145 -0
  33. package/dist/commerce/checkoutSchemas.d.ts +158 -0
  34. package/dist/commerce/checkoutSchemas.js +161 -0
  35. package/dist/commerce/commerceReturnsPort.d.ts +97 -0
  36. package/dist/commerce/commerceReturnsPort.js +39 -0
  37. package/dist/commerce/configuratorIntentPersistenceSchemas.d.ts +20 -0
  38. package/dist/commerce/configuratorIntentPersistenceSchemas.js +21 -0
  39. package/dist/commerce/configuratorIntentSchemas.d.ts +63 -0
  40. package/dist/commerce/configuratorIntentSchemas.js +43 -0
  41. package/dist/commerce/contractPrimitives.d.ts +50 -0
  42. package/dist/commerce/contractPrimitives.js +25 -0
  43. package/dist/commerce/contracts/availability.d.ts +23 -0
  44. package/dist/commerce/contracts/availability.js +1 -0
  45. package/dist/commerce/contracts/fulfillmentRecovery.d.ts +25 -0
  46. package/dist/commerce/contracts/fulfillmentRecovery.js +1 -0
  47. package/dist/commerce/contracts/index.d.ts +13 -0
  48. package/dist/commerce/contracts/index.js +1 -0
  49. package/dist/commerce/contracts/intent.d.ts +86 -0
  50. package/dist/commerce/contracts/intent.js +1 -0
  51. package/dist/commerce/contracts/omsTypes.d.ts +1216 -0
  52. package/dist/commerce/contracts/omsTypes.js +1 -0
  53. package/dist/commerce/contracts/order.d.ts +39 -0
  54. package/dist/commerce/contracts/order.js +1 -0
  55. package/dist/commerce/contracts/orderMoney.d.ts +52 -0
  56. package/dist/commerce/contracts/orderMoney.js +1 -0
  57. package/dist/commerce/contracts/ports.d.ts +113 -0
  58. package/dist/commerce/contracts/ports.js +1 -0
  59. package/dist/commerce/contracts/recovery.d.ts +11 -0
  60. package/dist/commerce/contracts/recovery.js +1 -0
  61. package/dist/commerce/contracts/runtimePorts.d.ts +196 -0
  62. package/dist/commerce/contracts/runtimePorts.js +1 -0
  63. package/dist/commerce/contracts/state.d.ts +26 -0
  64. package/dist/commerce/contracts/state.js +43 -0
  65. package/dist/commerce/customerDefaultsSnapshotSchemas.d.ts +51 -0
  66. package/dist/commerce/customerDefaultsSnapshotSchemas.js +106 -0
  67. package/dist/commerce/errors.d.ts +18 -0
  68. package/dist/commerce/errors.js +36 -0
  69. package/dist/commerce/fulfillmentEligibility.d.ts +6 -0
  70. package/dist/commerce/fulfillmentEligibility.js +31 -0
  71. package/dist/commerce/index.d.ts +72 -0
  72. package/dist/commerce/index.js +67 -0
  73. package/dist/commerce/model/customerFulfillmentRecovery.d.ts +40 -0
  74. package/dist/commerce/model/customerFulfillmentRecovery.js +144 -0
  75. package/dist/commerce/model/fulfillmentCancellationEligibility.d.ts +7 -0
  76. package/dist/commerce/model/fulfillmentCancellationEligibility.js +9 -0
  77. package/dist/commerce/model/omsAccountingVisibility.d.ts +12 -0
  78. package/dist/commerce/model/omsAccountingVisibility.js +118 -0
  79. package/dist/commerce/model/omsBillingInvoiceBuyer.d.ts +2 -0
  80. package/dist/commerce/model/omsBillingInvoiceBuyer.js +15 -0
  81. package/dist/commerce/model/omsCurrency.d.ts +4 -0
  82. package/dist/commerce/model/omsCurrency.js +5 -0
  83. package/dist/commerce/model/omsFulfillmentDebug.d.ts +20 -0
  84. package/dist/commerce/model/omsFulfillmentDebug.js +122 -0
  85. package/dist/commerce/model/omsFulfillmentSummary.d.ts +16 -0
  86. package/dist/commerce/model/omsFulfillmentSummary.js +189 -0
  87. package/dist/commerce/model/omsListTotals.d.ts +13 -0
  88. package/dist/commerce/model/omsListTotals.js +32 -0
  89. package/dist/commerce/model/omsOperationalLadder.d.ts +51 -0
  90. package/dist/commerce/model/omsOperationalLadder.js +158 -0
  91. package/dist/commerce/model/omsOrderLineMoney.d.ts +4 -0
  92. package/dist/commerce/model/omsOrderLineMoney.js +25 -0
  93. package/dist/commerce/model/omsPaymentMethodSummary.d.ts +5 -0
  94. package/dist/commerce/model/omsPaymentMethodSummary.js +11 -0
  95. package/dist/commerce/model/omsReadModel.d.ts +43 -0
  96. package/dist/commerce/model/omsReadModel.js +211 -0
  97. package/dist/commerce/model/omsReadModelCommunication.d.ts +3 -0
  98. package/dist/commerce/model/omsReadModelCommunication.js +29 -0
  99. package/dist/commerce/model/omsReadModelHelpers.d.ts +125 -0
  100. package/dist/commerce/model/omsReadModelHelpers.js +212 -0
  101. package/dist/commerce/model/omsReadModelList.d.ts +33 -0
  102. package/dist/commerce/model/omsReadModelList.js +50 -0
  103. package/dist/commerce/model/omsReadModelListSummary.d.ts +3 -0
  104. package/dist/commerce/model/omsReadModelListSummary.js +13 -0
  105. package/dist/commerce/model/omsReadModelPricing.d.ts +5 -0
  106. package/dist/commerce/model/omsReadModelPricing.js +36 -0
  107. package/dist/commerce/model/omsReadModelProjections.d.ts +1 -0
  108. package/dist/commerce/model/omsReadModelProjections.js +1 -0
  109. package/dist/commerce/model/omsReadModelRowCore.d.ts +79 -0
  110. package/dist/commerce/model/omsReadModelRowCore.js +149 -0
  111. package/dist/commerce/model/omsReadModelRows.d.ts +1 -0
  112. package/dist/commerce/model/omsReadModelRows.js +6 -0
  113. package/dist/commerce/offerAvailability.d.ts +18 -0
  114. package/dist/commerce/offerAvailability.js +53 -0
  115. package/dist/commerce/offerAvailabilitySchemas.d.ts +43 -0
  116. package/dist/commerce/offerAvailabilitySchemas.js +42 -0
  117. package/dist/commerce/offerEvidenceSchemas.d.ts +7 -0
  118. package/dist/commerce/offerEvidenceSchemas.js +13 -0
  119. package/dist/commerce/oms/omsContractBase.d.ts +130 -0
  120. package/dist/commerce/oms/omsContractBase.js +86 -0
  121. package/dist/commerce/oms/omsContractReadAuxSchemas.d.ts +222 -0
  122. package/dist/commerce/oms/omsContractReadAuxSchemas.js +123 -0
  123. package/dist/commerce/oms/omsContractReadSchemas.d.ts +2266 -0
  124. package/dist/commerce/oms/omsContractReadSchemas.js +277 -0
  125. package/dist/commerce/oms/omsContractRequests.d.ts +196 -0
  126. package/dist/commerce/oms/omsContractRequests.js +118 -0
  127. package/dist/commerce/oms/omsContracts.d.ts +5 -0
  128. package/dist/commerce/oms/omsContracts.js +4 -0
  129. package/dist/commerce/oms/omsControlPlane.d.ts +275 -0
  130. package/dist/commerce/oms/omsControlPlane.js +72 -0
  131. package/dist/commerce/oms/omsFulfillmentContractSchemas.d.ts +203 -0
  132. package/dist/commerce/oms/omsFulfillmentContractSchemas.js +94 -0
  133. package/dist/commerce/oms/omsFulfillmentDebugSchemas.d.ts +69 -0
  134. package/dist/commerce/oms/omsFulfillmentDebugSchemas.js +33 -0
  135. package/dist/commerce/oms/omsFulfillmentHealthSchemas.d.ts +67 -0
  136. package/dist/commerce/oms/omsFulfillmentHealthSchemas.js +44 -0
  137. package/dist/commerce/oms/omsPorts.d.ts +84 -0
  138. package/dist/commerce/oms/omsPorts.js +148 -0
  139. package/dist/commerce/oms/omsPrimitives.d.ts +5 -0
  140. package/dist/commerce/oms/omsPrimitives.js +3 -0
  141. package/dist/commerce/oms/omsProviderEvidenceSchemas.d.ts +15 -0
  142. package/dist/commerce/oms/omsProviderEvidenceSchemas.js +12 -0
  143. package/dist/commerce/orderDraftErrors.d.ts +13 -0
  144. package/dist/commerce/orderDraftErrors.js +20 -0
  145. package/dist/commerce/orderEmailEligibility.d.ts +54 -0
  146. package/dist/commerce/orderEmailEligibility.js +123 -0
  147. package/dist/commerce/orderEmailLines.d.ts +12 -0
  148. package/dist/commerce/orderEmailLines.js +8 -0
  149. package/dist/commerce/orderFeedbackContracts.d.ts +41 -0
  150. package/dist/commerce/orderFeedbackContracts.js +33 -0
  151. package/dist/commerce/orderMoney.d.ts +6 -0
  152. package/dist/commerce/orderMoney.js +168 -0
  153. package/dist/commerce/orderReviewContracts.d.ts +475 -0
  154. package/dist/commerce/orderReviewContracts.js +94 -0
  155. package/dist/commerce/orderReviewPorts.d.ts +140 -0
  156. package/dist/commerce/orderReviewPorts.js +1 -0
  157. package/dist/commerce/outboxDispatchContracts.d.ts +30 -0
  158. package/dist/commerce/outboxDispatchContracts.js +1 -0
  159. package/dist/commerce/outboxEventSchemas.d.ts +162 -0
  160. package/dist/commerce/outboxEventSchemas.js +164 -0
  161. package/dist/commerce/outboxOrderDraftEmailPorts.d.ts +207 -0
  162. package/dist/commerce/outboxOrderDraftEmailPorts.js +12 -0
  163. package/dist/commerce/paymentContinuation.d.ts +4 -0
  164. package/dist/commerce/paymentContinuation.js +4 -0
  165. package/dist/commerce/ports.d.ts +8 -0
  166. package/dist/commerce/ports.js +1 -0
  167. package/dist/commerce/recoveryDestination.d.ts +3 -0
  168. package/dist/commerce/recoveryDestination.js +17 -0
  169. package/dist/commerce/runtimeErrors.d.ts +8 -0
  170. package/dist/commerce/runtimeErrors.js +16 -0
  171. package/dist/commerce/salesChannelEnvelope.d.ts +20 -0
  172. package/dist/commerce/salesChannelEnvelope.js +7 -0
  173. package/dist/commerce/schemas.d.ts +174 -0
  174. package/dist/commerce/schemas.js +84 -0
  175. package/dist/commerce/server/checkoutCompensation.d.ts +21 -0
  176. package/dist/commerce/server/checkoutCompensation.js +32 -0
  177. package/dist/commerce/server/checkoutConflictClassifiers.d.ts +17 -0
  178. package/dist/commerce/server/checkoutConflictClassifiers.js +38 -0
  179. package/dist/commerce/server/checkoutExpiredRecoveryPolicy.d.ts +38 -0
  180. package/dist/commerce/server/checkoutExpiredRecoveryPolicy.js +85 -0
  181. package/dist/commerce/server/checkoutInvoiceBuyerSnapshot.d.ts +22 -0
  182. package/dist/commerce/server/checkoutInvoiceBuyerSnapshot.js +30 -0
  183. package/dist/commerce/server/checkoutOfferPolicyPort.d.ts +33 -0
  184. package/dist/commerce/server/checkoutOfferPolicyPort.js +49 -0
  185. package/dist/commerce/server/checkoutPaymentContinuationCredential.d.ts +58 -0
  186. package/dist/commerce/server/checkoutPaymentContinuationCredential.js +154 -0
  187. package/dist/commerce/server/checkoutQuoteTypes.d.ts +19 -0
  188. package/dist/commerce/server/checkoutQuoteTypes.js +1 -0
  189. package/dist/commerce/server/checkoutRecoveryOrderPort.d.ts +42 -0
  190. package/dist/commerce/server/checkoutRecoveryOrderPort.js +1 -0
  191. package/dist/commerce/server/checkoutRecoveryToken.d.ts +40 -0
  192. package/dist/commerce/server/checkoutRecoveryToken.js +26 -0
  193. package/dist/commerce/server/checkoutRefusalContinuation.d.ts +24 -0
  194. package/dist/commerce/server/checkoutRefusalContinuation.js +18 -0
  195. package/dist/commerce/server/checkoutRuntimeTypes.d.ts +81 -0
  196. package/dist/commerce/server/checkoutRuntimeTypes.js +1 -0
  197. package/dist/commerce/server/commerceCheckoutCommandExecution.d.ts +60 -0
  198. package/dist/commerce/server/commerceCheckoutCommandExecution.js +136 -0
  199. package/dist/commerce/server/commerceCheckoutCompensation.d.ts +26 -0
  200. package/dist/commerce/server/commerceCheckoutCompensation.js +46 -0
  201. package/dist/commerce/server/commerceCheckoutContinuationTerms.d.ts +50 -0
  202. package/dist/commerce/server/commerceCheckoutContinuationTerms.js +66 -0
  203. package/dist/commerce/server/commerceCheckoutCustomerDefaults.d.ts +18 -0
  204. package/dist/commerce/server/commerceCheckoutCustomerDefaults.js +17 -0
  205. package/dist/commerce/server/commerceCheckoutFailureHandler.d.ts +51 -0
  206. package/dist/commerce/server/commerceCheckoutFailureHandler.js +90 -0
  207. package/dist/commerce/server/commerceCheckoutHandler.d.ts +213 -0
  208. package/dist/commerce/server/commerceCheckoutHandler.js +196 -0
  209. package/dist/commerce/server/commerceCheckoutHandlerAdmission.d.ts +58 -0
  210. package/dist/commerce/server/commerceCheckoutHandlerAdmission.js +94 -0
  211. package/dist/commerce/server/commerceCheckoutHandlerHelpers.d.ts +67 -0
  212. package/dist/commerce/server/commerceCheckoutHandlerHelpers.js +155 -0
  213. package/dist/commerce/server/commerceCheckoutOrchestrationError.d.ts +9 -0
  214. package/dist/commerce/server/commerceCheckoutOrchestrationError.js +14 -0
  215. package/dist/commerce/server/commerceCheckoutPromotionPriceChange.d.ts +47 -0
  216. package/dist/commerce/server/commerceCheckoutPromotionPriceChange.js +43 -0
  217. package/dist/commerce/server/commerceCheckoutProviderPayment.d.ts +34 -0
  218. package/dist/commerce/server/commerceCheckoutProviderPayment.js +37 -0
  219. package/dist/commerce/server/commerceCheckoutQuoteGuard.d.ts +62 -0
  220. package/dist/commerce/server/commerceCheckoutQuoteGuard.js +106 -0
  221. package/dist/commerce/server/commerceCheckoutResume.d.ts +29 -0
  222. package/dist/commerce/server/commerceCheckoutResume.js +81 -0
  223. package/dist/commerce/server/commerceCheckoutResumeGuard.d.ts +54 -0
  224. package/dist/commerce/server/commerceCheckoutResumeGuard.js +138 -0
  225. package/dist/commerce/server/commerceCheckoutSavedPaymentMethod.d.ts +39 -0
  226. package/dist/commerce/server/commerceCheckoutSavedPaymentMethod.js +44 -0
  227. package/dist/commerce/server/commerceCheckoutStartRuntimeFailure.d.ts +7 -0
  228. package/dist/commerce/server/commerceCheckoutStartRuntimeFailure.js +39 -0
  229. package/dist/commerce/server/commerceCheckoutTiming.d.ts +8 -0
  230. package/dist/commerce/server/commerceCheckoutTiming.js +31 -0
  231. package/dist/commerce/server/commerceDiagnostics.d.ts +6 -0
  232. package/dist/commerce/server/commerceDiagnostics.js +31 -0
  233. package/dist/commerce/server/commerceOmsCancelOrderHandler.d.ts +7 -0
  234. package/dist/commerce/server/commerceOmsCancelOrderHandler.js +22 -0
  235. package/dist/commerce/server/commerceOmsControlPlaneHandlers.d.ts +18 -0
  236. package/dist/commerce/server/commerceOmsControlPlaneHandlers.js +60 -0
  237. package/dist/commerce/server/commerceOmsHandlers.d.ts +47 -0
  238. package/dist/commerce/server/commerceOmsHandlers.js +176 -0
  239. package/dist/commerce/server/commerceOmsMarkRefundedHandler.d.ts +7 -0
  240. package/dist/commerce/server/commerceOmsMarkRefundedHandler.js +19 -0
  241. package/dist/commerce/server/commerceOrderDraft.d.ts +24 -0
  242. package/dist/commerce/server/commerceOrderDraft.js +92 -0
  243. package/dist/commerce/server/commercePaidOrderOrchestration.d.ts +131 -0
  244. package/dist/commerce/server/commercePaidOrderOrchestration.js +140 -0
  245. package/dist/commerce/server/commerceProviderAttemptFailure.d.ts +133 -0
  246. package/dist/commerce/server/commerceProviderAttemptFailure.js +175 -0
  247. package/dist/commerce/server/commerceReturnsHandlers.d.ts +41 -0
  248. package/dist/commerce/server/commerceReturnsHandlers.js +100 -0
  249. package/dist/commerce/server/commerceRuntimePort.d.ts +16 -0
  250. package/dist/commerce/server/commerceRuntimePort.js +57 -0
  251. package/dist/commerce/server/commerceRuntimeService.d.ts +98 -0
  252. package/dist/commerce/server/commerceRuntimeService.js +186 -0
  253. package/dist/commerce/server/commerceRuntimeStartResponse.d.ts +37 -0
  254. package/dist/commerce/server/commerceRuntimeStartResponse.js +56 -0
  255. package/dist/commerce/server/commerceStarterOfferGuard.d.ts +55 -0
  256. package/dist/commerce/server/commerceStarterOfferGuard.js +128 -0
  257. package/dist/commerce/server/configuratorIntentPersistence.d.ts +47 -0
  258. package/dist/commerce/server/configuratorIntentPersistence.js +85 -0
  259. package/dist/commerce/server/configuratorIntentPersistenceHandler.d.ts +14 -0
  260. package/dist/commerce/server/configuratorIntentPersistenceHandler.js +42 -0
  261. package/dist/commerce/server/emailRuntime.d.ts +47 -0
  262. package/dist/commerce/server/emailRuntime.js +1 -0
  263. package/dist/commerce/server/handlerSupport.d.ts +68 -0
  264. package/dist/commerce/server/handlerSupport.js +1 -0
  265. package/dist/commerce/server/index.d.ts +178 -0
  266. package/dist/commerce/server/index.js +127 -0
  267. package/dist/commerce/server/offerAvailability.d.ts +21 -0
  268. package/dist/commerce/server/offerAvailability.js +163 -0
  269. package/dist/commerce/server/orderDraftRpcPayload.d.ts +20 -0
  270. package/dist/commerce/server/orderDraftRpcPayload.js +21 -0
  271. package/dist/commerce/server/orderFeedbackSubmit.d.ts +20 -0
  272. package/dist/commerce/server/orderFeedbackSubmit.js +16 -0
  273. package/dist/commerce/server/orderFeedbackTokenCheck.d.ts +17 -0
  274. package/dist/commerce/server/orderFeedbackTokenCheck.js +14 -0
  275. package/dist/commerce/server/orderReviewAdminHandlers.d.ts +47 -0
  276. package/dist/commerce/server/orderReviewAdminHandlers.js +41 -0
  277. package/dist/commerce/server/orderReviewHandlers.d.ts +114 -0
  278. package/dist/commerce/server/orderReviewHandlers.js +42 -0
  279. package/dist/commerce/server/orderReviewLifecycle.d.ts +10 -0
  280. package/dist/commerce/server/orderReviewLifecycle.js +121 -0
  281. package/dist/commerce/server/orderReviewMedia.d.ts +11 -0
  282. package/dist/commerce/server/orderReviewMedia.js +172 -0
  283. package/dist/commerce/server/orderReviewRawUploadHandler.d.ts +40 -0
  284. package/dist/commerce/server/orderReviewRawUploadHandler.js +316 -0
  285. package/dist/commerce/server/outboxCheckoutExpiredEmailHandler.d.ts +14 -0
  286. package/dist/commerce/server/outboxCheckoutExpiredEmailHandler.js +57 -0
  287. package/dist/commerce/server/outboxCheckoutRecoveryEmailHandler.d.ts +13 -0
  288. package/dist/commerce/server/outboxCheckoutRecoveryEmailHandler.js +150 -0
  289. package/dist/commerce/server/outboxDispatchRegistry.d.ts +46 -0
  290. package/dist/commerce/server/outboxDispatchRegistry.js +184 -0
  291. package/dist/commerce/server/outboxDispatchRegistryComposition.d.ts +6 -0
  292. package/dist/commerce/server/outboxDispatchRegistryComposition.js +23 -0
  293. package/dist/commerce/server/outboxOrderDraftEmailHandler.d.ts +14 -0
  294. package/dist/commerce/server/outboxOrderDraftEmailHandler.js +130 -0
  295. package/dist/commerce/server/outboxOrderPaidEmailHandler.d.ts +21 -0
  296. package/dist/commerce/server/outboxOrderPaidEmailHandler.js +93 -0
  297. package/dist/commerce/server/outboxOrderPaidFulfillmentHandler.d.ts +3 -0
  298. package/dist/commerce/server/outboxOrderPaidFulfillmentHandler.js +1 -0
  299. package/dist/commerce/server/outboxOrderPaidFulfillmentPorts.d.ts +3 -0
  300. package/dist/commerce/server/outboxOrderPaidFulfillmentPorts.js +1 -0
  301. package/dist/commerce/server/outboxOrderRefundedEmailHandler.d.ts +13 -0
  302. package/dist/commerce/server/outboxOrderRefundedEmailHandler.js +42 -0
  303. package/dist/commerce/server/outboxPaymentFailedEmailHandler.d.ts +14 -0
  304. package/dist/commerce/server/outboxPaymentFailedEmailHandler.js +65 -0
  305. package/dist/commerce/server/outboxReturnEmailHandlers.d.ts +26 -0
  306. package/dist/commerce/server/outboxReturnEmailHandlers.js +53 -0
  307. package/dist/commerce/server/outboxShipmentDeliveredEmailHandler.d.ts +17 -0
  308. package/dist/commerce/server/outboxShipmentDeliveredEmailHandler.js +52 -0
  309. package/dist/commerce/server/outboxShipmentDispatchedEmailHandler.d.ts +13 -0
  310. package/dist/commerce/server/outboxShipmentDispatchedEmailHandler.js +87 -0
  311. package/dist/commerce/server/outboxShipmentExceptionEmailHandler.d.ts +13 -0
  312. package/dist/commerce/server/outboxShipmentExceptionEmailHandler.js +46 -0
  313. package/dist/commerce/server/referenceCheckoutHandler.d.ts +48 -0
  314. package/dist/commerce/server/referenceCheckoutHandler.js +68 -0
  315. package/dist/commerce/server/reservationSweepPort.d.ts +31 -0
  316. package/dist/commerce/server/reservationSweepPort.js +45 -0
  317. package/dist/commerce/server/starterTermsPort.d.ts +22 -0
  318. package/dist/commerce/server/starterTermsPort.js +1 -0
  319. package/dist/commerce/server/supabaseCommerceReturnsPort.d.ts +13 -0
  320. package/dist/commerce/server/supabaseCommerceReturnsPort.js +56 -0
  321. package/dist/communications/consentPurposeRegistry.d.ts +1 -1
  322. package/dist/communications/newsletterIntegrationContracts.d.ts +5 -5
  323. package/dist/composition/commerceContribution.d.ts +21 -0
  324. package/dist/composition/commerceContribution.js +27 -0
  325. package/dist/composition/index.d.ts +1 -0
  326. package/dist/composition/index.js +1 -0
  327. package/dist/fulfillment/handlerSchemas.d.ts +41 -41
  328. package/dist/fulfillment/index.d.ts +1 -1
  329. package/dist/fulfillment/index.js +1 -1
  330. package/dist/fulfillment/paidHandoff.d.ts +12 -1
  331. package/dist/fulfillment/paidHandoff.js +2 -2
  332. package/dist/fulfillment/providerDispatchWorker.d.ts +4 -4
  333. package/dist/identity/customerContracts.d.ts +2 -2
  334. package/dist/inventory/bindings.d.ts +3 -0
  335. package/dist/inventory/bindings.js +10 -4
  336. package/dist/inventory/index.d.ts +1 -0
  337. package/dist/inventory/index.js +1 -0
  338. package/dist/inventory/managedStockAvailability.d.ts +15 -0
  339. package/dist/inventory/managedStockAvailability.js +16 -0
  340. package/dist/inventory/postgresStockAvailability.js +2 -25
  341. package/dist/inventory/schemas.d.ts +1 -1
  342. package/dist/inventory/stockReadResponse.d.ts +4 -0
  343. package/dist/inventory/stockReadResponse.js +27 -0
  344. package/dist/pricing/browser/index.d.ts +6 -0
  345. package/dist/pricing/browser/index.js +6 -0
  346. package/dist/promotions/adminPromotionsContracts.d.ts +2 -2
  347. package/dist/subscriptions/index.d.ts +3 -2
  348. package/dist/subscriptions/index.js +3 -2
  349. package/package.json +22 -2
  350. package/release-gates.json +63 -8
  351. package/src/commerce/adapters/managed/commerceOmsControlPlane.ts +80 -0
  352. package/src/commerce/adapters/managed/commerceOmsMutations.ts +145 -0
  353. package/src/commerce/adapters/managed/commerceOmsPort.ts +158 -0
  354. package/src/commerce/adapters/managed/oms/accounting.ts +18 -0
  355. package/src/commerce/adapters/managed/oms/fulfillmentReads.ts +82 -0
  356. package/src/commerce/adapters/managed/oms/inboundEvents.ts +45 -0
  357. package/src/commerce/adapters/managed/oms/outboxEvents.ts +30 -0
  358. package/src/commerce/adapters/managed/oms/paymentAttempts.ts +19 -0
  359. package/src/commerce/adapters/managed/oms/queueSelection.ts +132 -0
  360. package/src/commerce/adapters/managed/oms/readProjections.ts +22 -0
  361. package/src/commerce/adapters/managed/oms/readQueries.ts +292 -0
  362. package/src/commerce/adapters/managed/oms/types.ts +9 -0
  363. package/src/commerce/checkoutCommandSchemas.ts +93 -0
  364. package/src/commerce/checkoutHelpers.ts +47 -0
  365. package/src/commerce/checkoutResumeSchemas.ts +164 -0
  366. package/src/commerce/checkoutSchemas.ts +182 -0
  367. package/src/commerce/commerceReturnsPort.ts +67 -0
  368. package/src/commerce/configuratorIntentPersistenceSchemas.ts +26 -0
  369. package/src/commerce/configuratorIntentSchemas.ts +47 -0
  370. package/src/commerce/contractPrimitives.ts +30 -0
  371. package/src/commerce/contracts/availability.ts +21 -0
  372. package/src/commerce/contracts/fulfillmentRecovery.ts +26 -0
  373. package/src/commerce/contracts/index.ts +17 -0
  374. package/src/commerce/contracts/intent.ts +58 -0
  375. package/src/commerce/contracts/omsTypes.ts +1217 -0
  376. package/src/commerce/contracts/order.ts +44 -0
  377. package/src/commerce/contracts/orderMoney.ts +75 -0
  378. package/src/commerce/contracts/ports.ts +124 -0
  379. package/src/commerce/contracts/recovery.ts +24 -0
  380. package/src/commerce/contracts/runtimePorts.ts +201 -0
  381. package/src/commerce/contracts/state.ts +64 -0
  382. package/src/commerce/customerDefaultsSnapshotSchemas.ts +117 -0
  383. package/src/commerce/errors.ts +53 -0
  384. package/src/commerce/fulfillmentEligibility.ts +32 -0
  385. package/src/commerce/index.ts +82 -0
  386. package/src/commerce/model/customerFulfillmentRecovery.ts +185 -0
  387. package/src/commerce/model/fulfillmentCancellationEligibility.ts +18 -0
  388. package/src/commerce/model/omsAccountingVisibility.ts +135 -0
  389. package/src/commerce/model/omsBillingInvoiceBuyer.ts +20 -0
  390. package/src/commerce/model/omsCurrency.ts +8 -0
  391. package/src/commerce/model/omsFulfillmentDebug.ts +157 -0
  392. package/src/commerce/model/omsFulfillmentSummary.ts +225 -0
  393. package/src/commerce/model/omsListTotals.ts +38 -0
  394. package/src/commerce/model/omsOperationalLadder.ts +181 -0
  395. package/src/commerce/model/omsOrderLineMoney.ts +34 -0
  396. package/src/commerce/model/omsPaymentMethodSummary.ts +19 -0
  397. package/src/commerce/model/omsReadModel.ts +302 -0
  398. package/src/commerce/model/omsReadModelCommunication.ts +32 -0
  399. package/src/commerce/model/omsReadModelHelpers.ts +279 -0
  400. package/src/commerce/model/omsReadModelList.ts +90 -0
  401. package/src/commerce/model/omsReadModelListSummary.ts +19 -0
  402. package/src/commerce/model/omsReadModelPricing.ts +57 -0
  403. package/src/commerce/model/omsReadModelProjections.ts +1 -0
  404. package/src/commerce/model/omsReadModelRowCore.ts +193 -0
  405. package/src/commerce/model/omsReadModelRows.ts +7 -0
  406. package/src/commerce/offerAvailability.ts +75 -0
  407. package/src/commerce/offerAvailabilitySchemas.ts +56 -0
  408. package/src/commerce/offerEvidenceSchemas.ts +17 -0
  409. package/src/commerce/oms/omsContractBase.ts +92 -0
  410. package/src/commerce/oms/omsContractReadAuxSchemas.ts +130 -0
  411. package/src/commerce/oms/omsContractReadSchemas.ts +303 -0
  412. package/src/commerce/oms/omsContractRequests.ts +143 -0
  413. package/src/commerce/oms/omsContracts.ts +6 -0
  414. package/src/commerce/oms/omsControlPlane.ts +85 -0
  415. package/src/commerce/oms/omsFulfillmentContractSchemas.ts +113 -0
  416. package/src/commerce/oms/omsFulfillmentDebugSchemas.ts +38 -0
  417. package/src/commerce/oms/omsFulfillmentHealthSchemas.ts +46 -0
  418. package/src/commerce/oms/omsPorts.ts +165 -0
  419. package/src/commerce/oms/omsPrimitives.ts +3 -0
  420. package/src/commerce/oms/omsProviderEvidenceSchemas.ts +13 -0
  421. package/src/commerce/orderDraftErrors.ts +28 -0
  422. package/src/commerce/orderEmailEligibility.ts +131 -0
  423. package/src/commerce/orderEmailLines.ts +22 -0
  424. package/src/commerce/orderFeedbackContracts.ts +47 -0
  425. package/src/commerce/orderMoney.ts +207 -0
  426. package/src/commerce/orderReviewContracts.ts +124 -0
  427. package/src/commerce/orderReviewPorts.ts +94 -0
  428. package/src/commerce/outboxDispatchContracts.ts +30 -0
  429. package/src/commerce/outboxEventSchemas.ts +230 -0
  430. package/src/commerce/outboxOrderDraftEmailPorts.ts +241 -0
  431. package/src/commerce/paymentContinuation.ts +5 -0
  432. package/src/commerce/ports.ts +7 -0
  433. package/src/commerce/recoveryDestination.ts +23 -0
  434. package/src/commerce/runtimeErrors.ts +19 -0
  435. package/src/commerce/salesChannelEnvelope.ts +28 -0
  436. package/src/commerce/schemas.ts +104 -0
  437. package/src/commerce/server/checkoutCompensation.ts +49 -0
  438. package/src/commerce/server/checkoutConflictClassifiers.ts +53 -0
  439. package/src/commerce/server/checkoutExpiredRecoveryPolicy.ts +107 -0
  440. package/src/commerce/server/checkoutInvoiceBuyerSnapshot.ts +36 -0
  441. package/src/commerce/server/checkoutOfferPolicyPort.ts +60 -0
  442. package/src/commerce/server/checkoutPaymentContinuationCredential.ts +222 -0
  443. package/src/commerce/server/checkoutQuoteTypes.ts +9 -0
  444. package/src/commerce/server/checkoutRecoveryOrderPort.ts +40 -0
  445. package/src/commerce/server/checkoutRecoveryToken.ts +63 -0
  446. package/src/commerce/server/checkoutRefusalContinuation.ts +29 -0
  447. package/src/commerce/server/checkoutRuntimeTypes.ts +26 -0
  448. package/src/commerce/server/commerceCheckoutCommandExecution.ts +188 -0
  449. package/src/commerce/server/commerceCheckoutCompensation.ts +66 -0
  450. package/src/commerce/server/commerceCheckoutContinuationTerms.ts +87 -0
  451. package/src/commerce/server/commerceCheckoutCustomerDefaults.ts +24 -0
  452. package/src/commerce/server/commerceCheckoutFailureHandler.ts +144 -0
  453. package/src/commerce/server/commerceCheckoutHandler.ts +269 -0
  454. package/src/commerce/server/commerceCheckoutHandlerAdmission.ts +157 -0
  455. package/src/commerce/server/commerceCheckoutHandlerHelpers.ts +223 -0
  456. package/src/commerce/server/commerceCheckoutOrchestrationError.ts +15 -0
  457. package/src/commerce/server/commerceCheckoutPromotionPriceChange.ts +83 -0
  458. package/src/commerce/server/commerceCheckoutProviderPayment.ts +45 -0
  459. package/src/commerce/server/commerceCheckoutQuoteGuard.ts +172 -0
  460. package/src/commerce/server/commerceCheckoutResume.ts +132 -0
  461. package/src/commerce/server/commerceCheckoutResumeGuard.ts +195 -0
  462. package/src/commerce/server/commerceCheckoutSavedPaymentMethod.ts +85 -0
  463. package/src/commerce/server/commerceCheckoutStartRuntimeFailure.ts +59 -0
  464. package/src/commerce/server/commerceCheckoutTiming.ts +53 -0
  465. package/src/commerce/server/commerceDiagnostics.ts +37 -0
  466. package/src/commerce/server/commerceOmsCancelOrderHandler.ts +43 -0
  467. package/src/commerce/server/commerceOmsControlPlaneHandlers.ts +71 -0
  468. package/src/commerce/server/commerceOmsHandlers.ts +275 -0
  469. package/src/commerce/server/commerceOmsMarkRefundedHandler.ts +39 -0
  470. package/src/commerce/server/commerceOrderDraft.ts +131 -0
  471. package/src/commerce/server/commercePaidOrderOrchestration.ts +275 -0
  472. package/src/commerce/server/commerceProviderAttemptFailure.ts +257 -0
  473. package/src/commerce/server/commerceReturnsHandlers.ts +143 -0
  474. package/src/commerce/server/commerceRuntimePort.ts +75 -0
  475. package/src/commerce/server/commerceRuntimeService.ts +229 -0
  476. package/src/commerce/server/commerceRuntimeStartResponse.ts +76 -0
  477. package/src/commerce/server/commerceStarterOfferGuard.ts +200 -0
  478. package/src/commerce/server/configuratorIntentPersistence.ts +161 -0
  479. package/src/commerce/server/configuratorIntentPersistenceHandler.ts +54 -0
  480. package/src/commerce/server/emailRuntime.ts +30 -0
  481. package/src/commerce/server/handlerSupport.ts +22 -0
  482. package/src/commerce/server/index.ts +181 -0
  483. package/src/commerce/server/offerAvailability.ts +275 -0
  484. package/src/commerce/server/orderDraftRpcPayload.ts +39 -0
  485. package/src/commerce/server/orderFeedbackSubmit.ts +40 -0
  486. package/src/commerce/server/orderFeedbackTokenCheck.ts +28 -0
  487. package/src/commerce/server/orderReviewAdminHandlers.ts +43 -0
  488. package/src/commerce/server/orderReviewHandlers.ts +57 -0
  489. package/src/commerce/server/orderReviewLifecycle.ts +129 -0
  490. package/src/commerce/server/orderReviewMedia.ts +170 -0
  491. package/src/commerce/server/orderReviewRawUploadHandler.ts +300 -0
  492. package/src/commerce/server/outboxCheckoutExpiredEmailHandler.ts +86 -0
  493. package/src/commerce/server/outboxCheckoutRecoveryEmailHandler.ts +188 -0
  494. package/src/commerce/server/outboxDispatchRegistry.ts +269 -0
  495. package/src/commerce/server/outboxDispatchRegistryComposition.ts +31 -0
  496. package/src/commerce/server/outboxOrderDraftEmailHandler.ts +162 -0
  497. package/src/commerce/server/outboxOrderPaidEmailHandler.ts +147 -0
  498. package/src/commerce/server/outboxOrderPaidFulfillmentHandler.ts +4 -0
  499. package/src/commerce/server/outboxOrderPaidFulfillmentPorts.ts +3 -0
  500. package/src/commerce/server/outboxOrderRefundedEmailHandler.ts +58 -0
  501. package/src/commerce/server/outboxPaymentFailedEmailHandler.ts +99 -0
  502. package/src/commerce/server/outboxReturnEmailHandlers.ts +92 -0
  503. package/src/commerce/server/outboxShipmentDeliveredEmailHandler.ts +94 -0
  504. package/src/commerce/server/outboxShipmentDispatchedEmailHandler.ts +112 -0
  505. package/src/commerce/server/outboxShipmentExceptionEmailHandler.ts +73 -0
  506. package/src/commerce/server/referenceCheckoutHandler.ts +87 -0
  507. package/src/commerce/server/reservationSweepPort.ts +67 -0
  508. package/src/commerce/server/starterTermsPort.ts +22 -0
  509. package/src/commerce/server/supabaseCommerceReturnsPort.ts +81 -0
  510. package/src/composition/commerceContribution.ts +35 -0
  511. package/src/composition/index.ts +1 -0
  512. package/src/fulfillment/index.ts +1 -1
  513. package/src/fulfillment/paidHandoff.ts +2 -2
  514. package/src/inventory/bindings.ts +12 -4
  515. package/src/inventory/index.ts +1 -0
  516. package/src/inventory/managedStockAvailability.ts +23 -0
  517. package/src/inventory/postgresStockAvailability.ts +2 -21
  518. package/src/inventory/stockReadResponse.ts +25 -0
  519. package/src/pricing/browser/index.ts +6 -0
  520. package/src/subscriptions/index.ts +3 -2
@@ -0,0 +1,241 @@
1
+
2
+ export const OUTBOX_ORDER_CONFIRMATION_TEMPLATE_SLUG = "commerce-order-confirmation";
3
+
4
+ export interface OrderRecipient {
5
+ email: string;
6
+ firstName: string | null;
7
+ country?: string | null;
8
+ contextName?: string | null;
9
+ }
10
+
11
+ export interface OrderRecipientPort {
12
+ resolve(orderUuid: string, signal: AbortSignal): Promise<OrderRecipient | null>;
13
+ }
14
+
15
+ export interface OrderPaymentLifecycleState {
16
+ orderStatus: string | null;
17
+ paymentStatus: string | null;
18
+ paymentUpdatedAt?: string | null;
19
+ hasPayment: boolean;
20
+ /** The activation sweep abandoned this order's provisional subscription: it writes
21
+ * `cancelled`, not `expired`, so the expired-checkout gate needs this to tell a swept
22
+ * first subscription from any other cancellation. Absent for every one-time order. */
23
+ subscriptionActivationAbandoned?: boolean;
24
+ }
25
+
26
+ export interface OrderPaymentLifecyclePort {
27
+ read(orderUuid: string, signal: AbortSignal): Promise<OrderPaymentLifecycleState | null>;
28
+ }
29
+
30
+ export interface OrderEmailLineItem {
31
+ name: string;
32
+ quantity: number;
33
+ lineTotalLabel: string;
34
+ }
35
+
36
+ export interface OrderEmailTotals {
37
+ subtotalLabel: string | null;
38
+ discountLabel: string | null;
39
+ totalLabel: string;
40
+ firstSubscription?: {
41
+ discountPercent?: number;
42
+ catalogLabel: string;
43
+ productPayableLabel: string;
44
+ shippingLabel: string | null;
45
+ shippingFree: boolean;
46
+ };
47
+ }
48
+
49
+ export interface OrderConfirmationEmailInput<Locale extends string = string> {
50
+ to: string;
51
+ firstName: string | null;
52
+ contextName?: string | null;
53
+ orderId: string;
54
+ outboxEventId: string;
55
+ items: OrderEmailLineItem[];
56
+ totals: OrderEmailTotals | null;
57
+ locale?: Locale;
58
+ signal: AbortSignal;
59
+ }
60
+
61
+ export interface TransactionalEmailSendOutcome {
62
+ ok: boolean;
63
+ messageId: string | null;
64
+ httpStatus: number;
65
+ providerError: string | null;
66
+ aborted: boolean;
67
+ providerErrorCode?: string | null;
68
+ /** Terminal intentional non-send; callers must not count it as sent. */
69
+ skipReason?: "admin_disabled" | "egress_suppressed" | null;
70
+ }
71
+
72
+ export const OUTBOX_ORDER_PAID_TEMPLATE_SLUG = "commerce-order-paid";
73
+
74
+ export const OUTBOX_CHECKOUT_RECOVERY_TEMPLATE_SLUG = "commerce-checkout-recovery";
75
+
76
+ export interface CheckoutRecoveryEmailInput<Locale extends string = string> {
77
+ to: string;
78
+ firstName: string | null;
79
+ contextName?: string | null;
80
+ orderId: string;
81
+ recoveryToken: string;
82
+ mode: string;
83
+ reminderHours: number;
84
+ linkSource?: "buyer_hatch";
85
+ outboxEventId: string;
86
+ locale?: Locale;
87
+ signal: AbortSignal;
88
+ }
89
+
90
+ export interface OrderPaidRawLine {
91
+ /** Frozen historical display label, or null for sparse legacy snapshots. */
92
+ label: string | null;
93
+ quantity: number;
94
+ lineTotalMinor: number;
95
+ }
96
+
97
+ export interface OrderPaidRawData {
98
+ currency: string;
99
+ subtotalMinor: number;
100
+ discountMinor: number;
101
+ totalMinor: number;
102
+ presentation?: unknown;
103
+ lines: OrderPaidRawLine[];
104
+ }
105
+
106
+ export interface OrderPaidLinesPort {
107
+ read(orderUuid: string, signal: AbortSignal): Promise<OrderPaidRawData | null>;
108
+ }
109
+
110
+ export interface OrderPaidConfirmationEmailInput<Locale extends string = string> {
111
+ to: string;
112
+ firstName: string | null;
113
+ contextName?: string | null;
114
+ orderId: string;
115
+ mode: string;
116
+ outboxEventId: string;
117
+ items: OrderEmailLineItem[];
118
+ totals: OrderEmailTotals | null;
119
+ parcelNote?: string | null;
120
+ locale?: Locale;
121
+ signal: AbortSignal;
122
+ }
123
+
124
+ export const OUTBOX_PAYMENT_FAILED_TEMPLATE_SLUG = "commerce-payment-failed";
125
+
126
+ export interface PaymentFailedEmailInput<Locale extends string = string> {
127
+ to: string;
128
+ firstName: string | null;
129
+ orderId: string;
130
+ amountLabel: string | null;
131
+ recoveryToken: string;
132
+ mode: string;
133
+ outboxEventId: string;
134
+ locale?: Locale;
135
+ signal: AbortSignal;
136
+ }
137
+
138
+ export const OUTBOX_CHECKOUT_EXPIRED_TEMPLATE_SLUG = "commerce-checkout-expired";
139
+
140
+ export interface CheckoutExpiredEmailInput<Locale extends string = string> {
141
+ to: string;
142
+ firstName: string | null;
143
+ orderId: string;
144
+ amountLabel: string | null;
145
+ /** Raw checkout-recovery token, emitted only in the outbox payload: the database
146
+ * stores only its hash, and the host renderer builds the recovery link. */
147
+ recoveryToken?: string | null;
148
+ outboxEventId: string;
149
+ locale?: Locale;
150
+ signal: AbortSignal;
151
+ }
152
+
153
+ export const OUTBOX_ORDER_CANCELED_TEMPLATE_SLUG = "commerce-order-canceled";
154
+
155
+ export interface OrderCanceledEmailInput<Locale extends string = string> {
156
+ to: string;
157
+ firstName: string | null;
158
+ orderId: string;
159
+ amountLabel: string | null;
160
+ outboxEventId: string;
161
+ locale?: Locale;
162
+ signal: AbortSignal;
163
+ }
164
+
165
+ export const OUTBOX_ORDER_REFUNDED_TEMPLATE_SLUG = "commerce-order-refunded";
166
+
167
+ export interface OrderRefundedEmailInput<Locale extends string = string> {
168
+ to: string;
169
+ firstName: string | null;
170
+ orderId: string;
171
+ amountLabel: string | null;
172
+ outboxEventId: string;
173
+ locale?: Locale;
174
+ signal: AbortSignal;
175
+ }
176
+
177
+ export const OUTBOX_SHIPMENT_DISPATCHED_TEMPLATE_SLUG = "commerce-shipment-dispatched";
178
+
179
+ export interface ShipmentDispatchedEmailInput<Locale extends string = string> {
180
+ to: string;
181
+ firstName: string | null;
182
+ contextName?: string | null;
183
+ orderId: string;
184
+ trackingNumber: string | null;
185
+ trackingUrl: string | null;
186
+ outboxEventId: string;
187
+ locale?: Locale;
188
+ signal: AbortSignal;
189
+ }
190
+
191
+ export const OUTBOX_SHIPMENT_DELIVERED_TEMPLATE_SLUG = "commerce-shipment-delivered";
192
+
193
+ export interface ShipmentDeliveredEmailInput<Locale extends string = string> {
194
+ to: string;
195
+ firstName: string | null;
196
+ contextName?: string | null;
197
+ orderId: string;
198
+ outboxEventId: string;
199
+ locale?: Locale;
200
+ signal: AbortSignal;
201
+ }
202
+
203
+ export const OUTBOX_SHIPMENT_EXCEPTION_TEMPLATE_SLUG = "commerce-shipment-exception";
204
+
205
+ export interface ShipmentExceptionEmailInput<Locale extends string = string> {
206
+ to: string;
207
+ firstName: string | null;
208
+ orderId: string;
209
+ outboxEventId: string;
210
+ locale?: Locale;
211
+ signal: AbortSignal;
212
+ }
213
+
214
+ export const OUTBOX_RETURN_APPROVED_TEMPLATE_SLUG = "commerce-return-approved";
215
+
216
+ export const OUTBOX_RETURN_REJECTED_TEMPLATE_SLUG = "commerce-return-rejected";
217
+
218
+ export interface ReturnDecisionEmailInput<Locale extends string = string> {
219
+ to: string;
220
+ firstName: string | null;
221
+ orderId: string;
222
+ outboxEventId: string;
223
+ locale?: Locale;
224
+ signal: AbortSignal;
225
+ }
226
+
227
+ export interface TransactionalEmailPort<Locale extends string = string> {
228
+ findExistingSend(templateSlug: string, outboxEventId: string): Promise<boolean>;
229
+ sendReturnApprovedNotice(input: ReturnDecisionEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
230
+ sendReturnRejectedNotice(input: ReturnDecisionEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
231
+ sendOrderConfirmation(input: OrderConfirmationEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
232
+ sendCheckoutRecovery(input: CheckoutRecoveryEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
233
+ sendOrderPaidConfirmation(input: OrderPaidConfirmationEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
234
+ sendPaymentFailedNotice(input: PaymentFailedEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
235
+ sendCheckoutExpiredNotice(input: CheckoutExpiredEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
236
+ sendOrderCanceledNotice(input: OrderCanceledEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
237
+ sendOrderRefundedNotice(input: OrderRefundedEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
238
+ sendShipmentDispatchedNotice(input: ShipmentDispatchedEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
239
+ sendShipmentDeliveredNotice(input: ShipmentDeliveredEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
240
+ sendShipmentExceptionNotice(input: ShipmentExceptionEmailInput<Locale>): Promise<TransactionalEmailSendOutcome>;
241
+ }
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+
3
+ export const checkoutContinuationJourneyIdSchema = z.string().regex(/^checkout:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
4
+ /** Shared client/server lifetime; terminal payment status still invalidates continuation. */
5
+ export const CHECKOUT_PAYMENT_CONTINUATION_TTL_SECONDS = 45 * 60;
@@ -0,0 +1,7 @@
1
+ /** Host-owned quote options are extended only with a server-bound offer. */
2
+ export type CreateQuoteOptions<Options extends object> = Options & { offerVersion?: string };
3
+
4
+ export interface CommerceQuotePort<Request, Response, Options extends object> {
5
+ createQuote(request: Request, options?: CreateQuoteOptions<Options>): Promise<Response>;
6
+ createServerAuthoritativeQuote?(request: Request, options?: CreateQuoteOptions<Options>): Promise<Response>;
7
+ }
@@ -0,0 +1,23 @@
1
+ import type { RecoveryDestinationPolicyInput, RecoveryDestinationIntent } from "./contracts/index.js";
2
+
3
+ export function resolveRecoveryDestination(
4
+ input: RecoveryDestinationPolicyInput,
5
+ ): RecoveryDestinationIntent {
6
+ if (input.source === "subscription_dunning") return "account_payment_recovery";
7
+ if (input.state === "recoverable") return "checkout_recovery";
8
+ if (hasSubscriptionRecoveryContext(input)) return "account_payment_recovery";
9
+ if (input.state === "terminal_expired") return "fresh_checkout";
10
+ return "fresh_checkout";
11
+ }
12
+
13
+ export function hasSubscriptionRecoveryContext(
14
+ input: Pick<
15
+ RecoveryDestinationPolicyInput,
16
+ "orderMode" | "hasOrderSubscription" | "requestedSubscriptionContext" | "clientHasLiveOrPendingSubscription"
17
+ >,
18
+ ): boolean {
19
+ return input.orderMode === "subscription_cycle" ||
20
+ input.hasOrderSubscription === true ||
21
+ input.requestedSubscriptionContext === true ||
22
+ input.clientHasLiveOrPendingSubscription === true;
23
+ }
@@ -0,0 +1,19 @@
1
+ export class CommerceRuntimeConflictError extends Error {
2
+ readonly details: Record<string, unknown>;
3
+
4
+ constructor(message = "Commerce runtime conflict", details: Record<string, unknown> = {}) {
5
+ super(message);
6
+ this.name = "CommerceRuntimeConflictError";
7
+ this.details = details;
8
+ }
9
+ }
10
+
11
+ export class CommerceRuntimePersistenceError extends Error {
12
+ readonly details: Record<string, unknown>;
13
+
14
+ constructor(message = "Commerce runtime persistence failed", details: Record<string, unknown> = {}) {
15
+ super(message);
16
+ this.name = "CommerceRuntimePersistenceError";
17
+ this.details = details;
18
+ }
19
+ }
@@ -0,0 +1,28 @@
1
+ export interface CommerceSalesChannelEnvelope {
2
+ sourceKind: string | null;
3
+ sourceChannelSlug: string | null;
4
+ sourceOrderRef: string | null;
5
+ }
6
+
7
+ export interface CommerceSalesChannelRow {
8
+ source_kind?: string | null;
9
+ source_order_ref?: string | null;
10
+ sales_channels?: { slug: string | null } | null;
11
+ }
12
+
13
+ export function projectCommerceSalesChannelEnvelope(row: CommerceSalesChannelRow): CommerceSalesChannelEnvelope {
14
+ return { sourceKind: row.source_kind ?? null, sourceChannelSlug: row.sales_channels?.slug ?? null,
15
+ sourceOrderRef: row.source_order_ref ?? null };
16
+ }
17
+
18
+ /** Host-bound read only; the inventory owner supplies exposure semantics. */
19
+ export type CommerceChannelExposureReadPort = (skuId: string, signal: AbortSignal) => Promise<number>;
20
+
21
+ export interface OrderBuyerCommsPolicy {
22
+ sourceKind: string;
23
+ buyerCommsOwner: string;
24
+ }
25
+
26
+ export function platformOwnsBuyerEmail(policy: OrderBuyerCommsPolicy | null): boolean {
27
+ return policy === null || policy.buyerCommsOwner !== "channel";
28
+ }
@@ -0,0 +1,104 @@
1
+ import { z } from "zod";
2
+ import { cartStatusSchema, checkoutStatusSchema, commerceIdempotencyKeySchema, orderDraftStatusSchema, orderStatusSchema, paymentStatusSchema } from "./contractPrimitives.js";
3
+
4
+ /** Preserve pricing validation and let the host extend cart locale policy. */
5
+ export function createCommerceSchemas<Line extends z.ZodType, Currency extends z.ZodType<string>, Money extends z.ZodType, Quote extends z.ZodType, Version extends string>(input: {
6
+ cartLineInputSchema: Line; commerceCurrencySchema: Currency; commerceMoneySchema: Money;
7
+ createQuoteResponseSchema: Quote; contractVersion: Version;
8
+ }) {
9
+ const { cartLineInputSchema, commerceCurrencySchema, commerceMoneySchema, createQuoteResponseSchema } = input;
10
+ const createCartRequestSchema = z.object({
11
+ lines: z.array(cartLineInputSchema).min(1).max(50),
12
+ clientId: z.string().trim().min(1).optional(),
13
+ });
14
+
15
+ const cartDraftSchema = z.object({
16
+ id: z.string().regex(/^cart_[a-z0-9-]+$/),
17
+ status: cartStatusSchema,
18
+ lines: z.array(cartLineInputSchema).min(1),
19
+ currency: commerceCurrencySchema,
20
+ });
21
+
22
+ const createCartResponseSchema = z.object({
23
+ contractVersion: z.literal(input.contractVersion),
24
+ cart: cartDraftSchema,
25
+ });
26
+
27
+ const createCheckoutRequestSchema = z.object({
28
+ cartId: z.string().regex(/^cart_[a-z0-9-]+$/),
29
+ successUrl: z.string().url(),
30
+ cancelUrl: z.string().url(),
31
+ idempotencyKey: z.string().trim().min(8).max(120).optional(),
32
+ });
33
+
34
+ const createCheckoutResponseSchema = z
35
+ .object({
36
+ contractVersion: z.literal(input.contractVersion),
37
+ checkout: z.object({
38
+ id: z.string().regex(/^checkout_[a-z0-9-]+$/),
39
+ cartId: z.string().regex(/^cart_[a-z0-9-]+$/),
40
+ status: checkoutStatusSchema,
41
+ redirectUrl: z.string().url().nullable(),
42
+ paymentProviderSessionId: z.string().trim().min(1).nullable(),
43
+ }),
44
+ })
45
+ .refine(
46
+ ({ checkout }) =>
47
+ checkout.status === "not_configured"
48
+ ? checkout.redirectUrl === null && checkout.paymentProviderSessionId === null
49
+ : checkout.redirectUrl !== null,
50
+ {
51
+ message: "checkout status must match redirect/provider fields",
52
+ path: ["checkout"],
53
+ },
54
+ );
55
+
56
+ const orderDraftSummarySchema = z.object({
57
+ orderId: z.string().regex(/^order_[a-z0-9-]+$/),
58
+ status: orderDraftStatusSchema,
59
+ paymentStatus: z.literal("not_started"),
60
+ idempotencyKey: commerceIdempotencyKeySchema,
61
+ quoteSnapshot: createQuoteResponseSchema,
62
+ replayed: z.boolean(),
63
+ });
64
+
65
+ const createOrderDraftRequestSchema = z.object({
66
+ idempotencyKey: commerceIdempotencyKeySchema,
67
+ quoteSnapshot: createQuoteResponseSchema,
68
+ });
69
+ // Customer identity is supplied out of band by trusted composition, never
70
+ // accepted from the public order-draft request body.
71
+
72
+ const createOrderDraftResponseSchema = z.object({
73
+ contractVersion: z.literal(input.contractVersion),
74
+ orderDraft: orderDraftSummarySchema,
75
+ });
76
+
77
+ const orderSummarySchema = z.object({
78
+ id: z.string().regex(/^order_[a-z0-9-]+$/),
79
+ status: orderStatusSchema,
80
+ paymentStatus: paymentStatusSchema,
81
+ total: commerceMoneySchema.nullable(),
82
+ lines: z.array(cartLineInputSchema).min(1),
83
+ });
84
+
85
+ const orderReadResponseSchema = z.object({
86
+ contractVersion: z.literal(input.contractVersion),
87
+ order: orderSummarySchema,
88
+ });
89
+
90
+ const paymentSummarySchema = z.object({
91
+ id: z.string().regex(/^payment_[a-z0-9-]+$/),
92
+ orderId: z.string().regex(/^order_[a-z0-9-]+$/),
93
+ status: paymentStatusSchema,
94
+ amount: commerceMoneySchema.nullable(),
95
+ providerReference: z.string().trim().min(1).nullable(),
96
+ });
97
+
98
+ const paymentStatusReadResponseSchema = z.object({
99
+ contractVersion: z.literal(input.contractVersion),
100
+ payment: paymentSummarySchema,
101
+ });
102
+
103
+ return { createCartRequestSchema, cartDraftSchema, createCartResponseSchema, createCheckoutRequestSchema, createCheckoutResponseSchema, orderDraftSummarySchema, createOrderDraftRequestSchema, createOrderDraftResponseSchema, orderSummarySchema, orderReadResponseSchema, paymentSummarySchema, paymentStatusReadResponseSchema };
104
+ }
@@ -0,0 +1,49 @@
1
+ import { CommerceRuntimePersistenceError } from "../runtimeErrors.js";
2
+ import type { CheckoutCompensationPort } from "./commerceCheckoutCompensation.js";
3
+
4
+ export interface CompensationRpcClient {
5
+ rpc(functionName: string, args: Record<string, unknown>): PromiseLike<{
6
+ data: unknown;
7
+ error: { code?: string } | null;
8
+ }>;
9
+ }
10
+
11
+ /**
12
+ * Binds both cancellations to one service-role client. Compositions inject the
13
+ * result into the inventory reservation port, so the staying domain module
14
+ * never imports this adapter.
15
+ */
16
+ export function createCheckoutCompensationRpcAdapter(
17
+ client: CompensationRpcClient,
18
+ ): Pick<CheckoutCompensationPort, "cancelAbandonedOrder" | "cancelUnstartedPromotionOrder"> {
19
+ return {
20
+ cancelAbandonedOrder: (input) => cancelAbandonedCheckout(client, input),
21
+ cancelUnstartedPromotionOrder: (input) => cancelUnstartedPromotionCheckout(client, input),
22
+ };
23
+ }
24
+
25
+ export async function cancelAbandonedCheckout(
26
+ client: CompensationRpcClient,
27
+ input: Parameters<CheckoutCompensationPort["cancelAbandonedOrder"]>[0],
28
+ ): Promise<{ cancelled: boolean }> {
29
+ const { data, error } = await client.rpc("commerce_cancel_abandoned_checkout", {
30
+ p_idempotency_key: `${input.idempotencyKey}:abandon`,
31
+ p_order_id: input.orderId,
32
+ p_reason: input.reason,
33
+ });
34
+ if (error) throw new CommerceRuntimePersistenceError("Checkout cancellation RPC failed", { code: error.code });
35
+ return { cancelled: (data as Record<string, unknown> | null)?.cancelled === true };
36
+ }
37
+
38
+ export async function cancelUnstartedPromotionCheckout(
39
+ client: CompensationRpcClient,
40
+ input: Parameters<CheckoutCompensationPort["cancelUnstartedPromotionOrder"]>[0],
41
+ ): Promise<{ cancelled: boolean }> {
42
+ const { data, error } = await client.rpc("commerce_cancel_unstarted_promotion_order", {
43
+ p_idempotency_key: input.idempotencyKey,
44
+ p_order_id: input.orderId,
45
+ p_reason: input.reason,
46
+ });
47
+ if (error) throw new CommerceRuntimePersistenceError("Promotion cancellation RPC failed", { code: error.code });
48
+ return { cancelled: data === true };
49
+ }
@@ -0,0 +1,53 @@
1
+ import { CheckoutOrchestrationError } from "./commerceCheckoutOrchestrationError.js";
2
+
3
+ // Classifiers for the conflict outcomes the checkout orchestration can throw at the
4
+ // `start_runtime` stage. Extracted from the handler so the money-path handler stays
5
+ // within the source-size budget; behaviour is unchanged (pure predicates).
6
+
7
+ export function isStockUnavailableCheckoutConflict(error: unknown): boolean {
8
+ return (
9
+ error instanceof CheckoutOrchestrationError &&
10
+ error.message === "start_runtime: Inventory reservation conflict"
11
+ );
12
+ }
13
+
14
+ export function isProviderAttemptInFlightCheckoutConflict(error: unknown): boolean {
15
+ return (
16
+ error instanceof CheckoutOrchestrationError &&
17
+ error.reason === "provider_attempt_in_flight"
18
+ );
19
+ }
20
+
21
+ export function isJourneyConsumedCheckoutConflict(error: unknown): boolean {
22
+ return (
23
+ error instanceof CheckoutOrchestrationError &&
24
+ error.reason === "journey_consumed"
25
+ );
26
+ }
27
+
28
+ /**
29
+ * `start_runtime` conflicts that map to an identical `CONFLICT + reason` response with
30
+ * no compensation side effect — the FE resumes/handles each by its `reason`. Order is
31
+ * significant and preserved from the original inline branches. Stock-unavailable is
32
+ * intentionally NOT here: it additionally cancels the abandoned order, so the handler
33
+ * keeps that branch inline.
34
+ */
35
+ export const START_RUNTIME_SIMPLE_CONFLICTS: ReadonlyArray<{
36
+ match: (error: unknown) => boolean;
37
+ message: string;
38
+ reason: string;
39
+ }> = [
40
+ {
41
+ match: isProviderAttemptInFlightCheckoutConflict,
42
+ message: "Checkout payment already in flight",
43
+ reason: "provider_attempt_in_flight",
44
+ },
45
+ ];
46
+
47
+ /** Scoped semantic details only; raw SQLSTATE does not authorize this classification. */
48
+ export function isInventoryAdmissionBusy(error: unknown): boolean {
49
+ if (!error || typeof error !== "object" || !("details" in error)) return false;
50
+ const details = error.details;
51
+ return !!details && typeof details === "object" && "code" in details && details.code === "55P03"
52
+ && "reason" in details && ["inventory_admission_busy", "inventory_lock_unavailable"].includes(String(details.reason));
53
+ }
@@ -0,0 +1,107 @@
1
+ import type { CreateQuoteResponse } from "../../pricing/index.js";
2
+ import type { CheckoutRecoveryOrderSnapshot } from "./checkoutRecoveryOrderPort.js";
3
+ import type { CheckoutRecoveryTokenInspection } from "./checkoutRecoveryToken.js";
4
+ type RecoveryQuoteSnapshot = CreateQuoteResponse & { quote: { context?: { sizeConstraint?: unknown; shippingTerms?: {
5
+ version: unknown; currency: string; flatMinor: number; freeThresholdMinor: number | null;
6
+ } } } };
7
+
8
+ export const EXPIRED_CHECKOUT_RECOVERY_WINDOW_MS = 30 * 24 * 60 * 60 * 1000;
9
+
10
+ export type ExpiredRecoveryEligibility =
11
+ | { kind: "eligible" }
12
+ | { kind: "paid" }
13
+ | { kind: "cancelled" }
14
+ | { kind: "unavailable" };
15
+
16
+ export function createExpiredCheckoutRecoveryPolicy<Order extends CheckoutRecoveryOrderSnapshot<unknown, unknown>>(bindings: {
17
+ admitsSubscriptionSubject(order: Order): boolean;
18
+ }) {
19
+ function classifyExpiredRecovery(input: {
20
+ inspection: CheckoutRecoveryTokenInspection | null;
21
+ order: Order | null;
22
+ now: Date;
23
+ }): ExpiredRecoveryEligibility {
24
+ const { inspection, order, now } = input;
25
+ if (!inspection || !order || inspection.clientId !== order.clientId) return { kind: "unavailable" };
26
+ if (order.status === "paid") return { kind: "paid" };
27
+ if (inspection.tokenState === "revoked" || inspection.tokenState === "used") {
28
+ return { kind: "unavailable" };
29
+ }
30
+ return classifyOrderRecoveryEligibility(order, now);
31
+ }
32
+
33
+ /**
34
+ * The ORDER half of the same decision, without a token in hand.
35
+ *
36
+ * `classifyExpiredRecovery` answers "may this bearer redeem?"; two of its checks
37
+ * (the token exists, belongs to this order's client, and is neither revoked nor
38
+ * used) are about the bearer and the rest are about the order. Only the second
39
+ * half can be asked BEFORE a token exists, which is exactly the question the
40
+ * operator's mint asks, so it lives here as one function both callers share.
41
+ *
42
+ * ⛔ Do not fork it. Mint-side eligibility drifting from redeem-side eligibility
43
+ * is how support hands a customer a link that the redeem rail then refuses — a
44
+ * dead link is worse than no button at all.
45
+ */
46
+ function classifyOrderRecoveryEligibility(
47
+ order: Order | null,
48
+ now: Date,
49
+ ): ExpiredRecoveryEligibility {
50
+ if (!order) return { kind: "unavailable" };
51
+ if (order.status === "paid") return { kind: "paid" };
52
+ const createdAt = Date.parse(order.createdAt);
53
+ if (!Number.isFinite(createdAt) || now.getTime() - createdAt > EXPIRED_CHECKOUT_RECOVERY_WINDOW_MS) {
54
+ return { kind: "unavailable" };
55
+ }
56
+ if (order.status === "cancelled" && !order.technicallyExpired) return { kind: "cancelled" };
57
+ // Recreation is only safe after a canonical expiry transition has also
58
+ // released the source reservation. `pending_payment` plus expired-looking
59
+ // metadata is an inconsistent/legacy state: keep the technical-expiry fence
60
+ // that prevents retrying its stale intent, but never create a second hold.
61
+ if (order.status !== "expired" && order.status !== "cancelled") return { kind: "unavailable" };
62
+ if (!order.technicallyExpired) return { kind: "unavailable" };
63
+ if (!order.quoteSnapshot || !order.shippingAddressId) return { kind: "unavailable" };
64
+ if (order.mode === "subscription_cycle" && (!order.subscriptionId || !order.subscriptionCycleId || !bindings.admitsSubscriptionSubject(order))) {
65
+ return { kind: "unavailable" };
66
+ }
67
+ return { kind: "eligible" };
68
+ }
69
+
70
+ return { classifyExpiredRecovery, classifyOrderRecoveryEligibility };
71
+ }
72
+
73
+ export function quotesMatchForRecovery(
74
+ frozen: RecoveryQuoteSnapshot,
75
+ fresh: RecoveryQuoteSnapshot,
76
+ ): boolean {
77
+ return JSON.stringify(commercialFingerprint(frozen)) === JSON.stringify(commercialFingerprint(fresh));
78
+ }
79
+
80
+ function commercialFingerprint(snapshot: RecoveryQuoteSnapshot) {
81
+ const quote = snapshot.quote;
82
+ const terms = quote.context?.shippingTerms;
83
+ return {
84
+ currency: quote.currency,
85
+ lines: quote.lines.map((line) => ({
86
+ sku: line.sku,
87
+ productSlug: line.productSlug,
88
+ quantity: line.quantity,
89
+ unitPriceGross: line.unitPriceGross,
90
+ lineSubtotalGross: line.lineSubtotalGross,
91
+ tax: line.tax,
92
+ })),
93
+ discounts: quote.discounts,
94
+ subtotalGross: quote.subtotalGross,
95
+ discountTotalGross: quote.discountTotalGross,
96
+ shippingGross: quote.shippingGross ?? null,
97
+ shippingDiscountGross: quote.shippingDiscountGross ?? null,
98
+ shippingTerms: terms ? { version: terms.version, currency: terms.currency,
99
+ flatMinor: terms.flatMinor, freeThresholdMinor: terms.freeThresholdMinor } : null,
100
+ totalGross: quote.totalGross,
101
+ netTotal: quote.netTotal,
102
+ taxTotal: quote.taxTotal,
103
+ mode: quote.context?.mode ?? null,
104
+ cadenceDays: quote.context?.cadenceDays ?? null,
105
+ sizeConstraint: quote.context?.sizeConstraint ?? null,
106
+ };
107
+ }
@@ -0,0 +1,36 @@
1
+ import type { z } from "zod";
2
+ export function buildCheckoutInvoiceBuyerSnapshot<Buyer>(
3
+ intent: { contact: { firstName: string; lastName: string; email: string }; address: { street: string; city: string; postalCode: string; country: string } },
4
+ invoicePreference: { kind: "b2c_named" } | { kind: "b2b_vat"; companyName: string; email?: string; taxId?: string; address: object },
5
+ schema: z.ZodType<Buyer>,
6
+ ): Buyer {
7
+ if (invoicePreference.kind === "b2b_vat") {
8
+ return schema.parse({
9
+ name: invoicePreference.companyName,
10
+ email: invoicePreference.email ?? intent.contact.email,
11
+ taxId: invoicePreference.taxId,
12
+ companyName: invoicePreference.companyName,
13
+ source: "checkout_invoice_preference",
14
+ address: {
15
+ ...invoicePreference.address,
16
+ source: "checkout_invoice_billing_address",
17
+ },
18
+ });
19
+ }
20
+
21
+ return schema.parse({
22
+ name: `${intent.contact.firstName} ${intent.contact.lastName}`.trim(),
23
+ email: intent.contact.email,
24
+ taxId: null,
25
+ companyName: null,
26
+ source: "checkout_invoice_preference",
27
+ address: {
28
+ line1: intent.address.street,
29
+ line2: null,
30
+ city: intent.address.city,
31
+ postalCode: intent.address.postalCode,
32
+ country: intent.address.country,
33
+ source: "checkout_shipping_address",
34
+ },
35
+ });
36
+ }