@openlup/platform 0.16.0 → 0.18.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 (773) hide show
  1. package/CHANGELOG.md +180 -0
  2. package/README.md +564 -6
  3. package/dist/catalog/activeSkuSelection.d.ts +2 -0
  4. package/dist/catalog/activeSkuSelection.js +20 -0
  5. package/dist/catalog/adminBindings.d.ts +72 -0
  6. package/dist/catalog/adminBindings.js +1 -0
  7. package/dist/catalog/adminBundleHandler.d.ts +26 -0
  8. package/dist/catalog/adminBundleHandler.js +111 -0
  9. package/dist/catalog/adminBundleReadHandler.d.ts +20 -0
  10. package/dist/catalog/adminBundleReadHandler.js +185 -0
  11. package/dist/catalog/adminBundleWritePort.d.ts +85 -0
  12. package/dist/catalog/adminBundleWritePort.js +1 -0
  13. package/dist/catalog/bundleAvailability.d.ts +63 -0
  14. package/dist/catalog/bundleAvailability.js +78 -0
  15. package/dist/catalog/bundleAvailabilityService.d.ts +65 -0
  16. package/dist/catalog/bundleAvailabilityService.js +89 -0
  17. package/dist/catalog/bundleBindings.d.ts +33 -0
  18. package/dist/catalog/bundleBindings.js +1 -0
  19. package/dist/catalog/bundleCatalogQueries.d.ts +28 -0
  20. package/dist/catalog/bundleCatalogQueries.js +84 -0
  21. package/dist/catalog/bundleCatalogReadPort.d.ts +166 -0
  22. package/dist/catalog/bundleCatalogReadPort.js +36 -0
  23. package/dist/catalog/bundleCatalogStore.d.ts +3 -0
  24. package/dist/catalog/bundleCatalogStore.js +152 -0
  25. package/dist/catalog/bundleRuleCodes.d.ts +41 -0
  26. package/dist/catalog/bundleRuleCodes.js +110 -0
  27. package/dist/catalog/bundleRules.d.ts +69 -0
  28. package/dist/catalog/bundleRules.js +102 -0
  29. package/dist/catalog/catalogDraftStore.d.ts +4 -0
  30. package/dist/catalog/catalogDraftStore.js +63 -0
  31. package/dist/catalog/catalogSkuEnvelope.d.ts +7 -0
  32. package/dist/catalog/catalogSkuEnvelope.js +142 -0
  33. package/dist/catalog/catalogSkuEnvelopeMapper.d.ts +38 -0
  34. package/dist/catalog/catalogSkuEnvelopeMapper.js +88 -0
  35. package/dist/catalog/contracts/bundleAdmin.d.ts +143 -0
  36. package/dist/catalog/contracts/bundleAdmin.js +1 -0
  37. package/dist/catalog/contracts/bundleAvailability.d.ts +61 -0
  38. package/dist/catalog/contracts/bundleAvailability.js +1 -0
  39. package/dist/catalog/contracts/bundleRead.d.ts +223 -0
  40. package/dist/catalog/contracts/bundleRead.js +1 -0
  41. package/dist/catalog/contracts/draft.d.ts +79 -0
  42. package/dist/catalog/contracts/draft.js +47 -0
  43. package/dist/catalog/contracts/foundation.d.ts +78 -0
  44. package/dist/catalog/contracts/foundation.js +53 -0
  45. package/dist/catalog/contracts/index.d.ts +14 -0
  46. package/dist/catalog/contracts/index.js +6 -0
  47. package/dist/catalog/contracts/lifecycle.d.ts +77 -0
  48. package/dist/catalog/contracts/lifecycle.js +1 -0
  49. package/dist/catalog/contracts/productMediaContracts.d.ts +77 -0
  50. package/dist/catalog/contracts/productMediaContracts.js +149 -0
  51. package/dist/catalog/contracts/productTypes.d.ts +54 -0
  52. package/dist/catalog/contracts/productTypes.js +16 -0
  53. package/dist/catalog/contracts/resolveProductMedia.d.ts +3 -0
  54. package/dist/catalog/contracts/resolveProductMedia.js +78 -0
  55. package/dist/catalog/contracts/sellable.d.ts +23 -0
  56. package/dist/catalog/contracts/sellable.js +1 -0
  57. package/dist/catalog/draftHandler.d.ts +25 -0
  58. package/dist/catalog/draftHandler.js +118 -0
  59. package/dist/catalog/draftPorts.d.ts +18 -0
  60. package/dist/catalog/draftPorts.js +8 -0
  61. package/dist/catalog/draftSchemas.d.ts +423 -0
  62. package/dist/catalog/draftSchemas.js +89 -0
  63. package/dist/catalog/draftValidation.d.ts +21 -0
  64. package/dist/catalog/draftValidation.js +125 -0
  65. package/dist/catalog/foundationSchemas.d.ts +98 -0
  66. package/dist/catalog/foundationSchemas.js +110 -0
  67. package/dist/catalog/index.d.ts +43 -0
  68. package/dist/catalog/index.js +25 -0
  69. package/dist/catalog/mediaSourcePack.d.ts +51 -0
  70. package/dist/catalog/mediaSourcePack.js +247 -0
  71. package/dist/catalog/productTypeSchemas.d.ts +46 -0
  72. package/dist/catalog/productTypeSchemas.js +72 -0
  73. package/dist/catalog/publicationPorts.d.ts +42 -0
  74. package/dist/catalog/publicationPorts.js +1 -0
  75. package/dist/catalog/readPorts.d.ts +51 -0
  76. package/dist/catalog/readPorts.js +1 -0
  77. package/dist/catalog/referenceCatalogHandler.d.ts +7 -0
  78. package/dist/catalog/referenceCatalogHandler.js +27 -0
  79. package/dist/catalog/resolvedSkuProjection.d.ts +88 -0
  80. package/dist/catalog/resolvedSkuProjection.js +60 -0
  81. package/dist/catalog/sellableBundleHandler.d.ts +46 -0
  82. package/dist/catalog/sellableBundleHandler.js +84 -0
  83. package/dist/catalog/sellableSchemas.d.ts +46 -0
  84. package/dist/catalog/sellableSchemas.js +27 -0
  85. package/dist/catalog/sql.d.ts +46 -0
  86. package/dist/catalog/sql.js +13 -0
  87. package/dist/catalog/validation.d.ts +2 -0
  88. package/dist/catalog/validation.js +3 -0
  89. package/dist/communications/accountingDocumentDelivery.d.ts +35 -0
  90. package/dist/communications/accountingDocumentDelivery.js +33 -0
  91. package/dist/communications/authEmailError.d.ts +5 -0
  92. package/dist/communications/authEmailError.js +8 -0
  93. package/dist/communications/authEmailPorts.d.ts +2 -0
  94. package/dist/communications/authEmailPorts.js +1 -0
  95. package/dist/communications/authSendEmailHook.d.ts +35 -0
  96. package/dist/communications/authSendEmailHook.js +250 -0
  97. package/dist/communications/capturedTransactionalDelivery.d.ts +13 -0
  98. package/dist/communications/capturedTransactionalDelivery.js +14 -0
  99. package/dist/communications/communicationSync.d.ts +11 -0
  100. package/dist/communications/communicationSync.js +79 -0
  101. package/dist/communications/communicationSyncWorker.d.ts +68 -0
  102. package/dist/communications/communicationSyncWorker.js +218 -0
  103. package/dist/communications/consentPolicy.d.ts +19 -0
  104. package/dist/communications/consentPolicy.js +43 -0
  105. package/dist/communications/consentPurposeRegistry.d.ts +4 -0
  106. package/dist/communications/consentPurposeRegistry.js +24 -0
  107. package/dist/communications/contracts/abandonedCart.d.ts +27 -0
  108. package/dist/communications/contracts/abandonedCart.js +25 -0
  109. package/dist/communications/contracts/authEmail.d.ts +62 -0
  110. package/dist/communications/contracts/authEmail.js +1 -0
  111. package/dist/communications/contracts/backInStock.d.ts +28 -0
  112. package/dist/communications/contracts/backInStock.js +28 -0
  113. package/dist/communications/contracts/blocks.d.ts +24 -0
  114. package/dist/communications/contracts/blocks.js +23 -0
  115. package/dist/communications/contracts/checkoutExpired.d.ts +22 -0
  116. package/dist/communications/contracts/checkoutExpired.js +25 -0
  117. package/dist/communications/contracts/checkoutRecovery.d.ts +26 -0
  118. package/dist/communications/contracts/checkoutRecovery.js +37 -0
  119. package/dist/communications/contracts/commerceEmailContent.d.ts +176 -0
  120. package/dist/communications/contracts/commerceEmailContent.js +1 -0
  121. package/dist/communications/contracts/commerceEngagementEmailContent.d.ts +95 -0
  122. package/dist/communications/contracts/commerceEngagementEmailContent.js +1 -0
  123. package/dist/communications/contracts/consent.d.ts +12 -0
  124. package/dist/communications/contracts/consent.js +1 -0
  125. package/dist/communications/contracts/email.d.ts +182 -0
  126. package/dist/communications/contracts/email.js +1 -0
  127. package/dist/communications/contracts/guideCard.d.ts +3 -0
  128. package/dist/communications/contracts/guideCard.js +26 -0
  129. package/dist/communications/contracts/index.d.ts +52 -0
  130. package/dist/communications/contracts/index.js +42 -0
  131. package/dist/communications/contracts/inquiryContent.d.ts +32 -0
  132. package/dist/communications/contracts/inquiryContent.js +33 -0
  133. package/dist/communications/contracts/invoiceDocumentContent.d.ts +26 -0
  134. package/dist/communications/contracts/invoiceDocumentContent.js +36 -0
  135. package/dist/communications/contracts/marketingAutomation.d.ts +52 -0
  136. package/dist/communications/contracts/marketingAutomation.js +1 -0
  137. package/dist/communications/contracts/marketingSync.d.ts +194 -0
  138. package/dist/communications/contracts/marketingSync.js +1 -0
  139. package/dist/communications/contracts/newsletter.d.ts +63 -0
  140. package/dist/communications/contracts/newsletter.js +1 -0
  141. package/dist/communications/contracts/newsletterWebhook.d.ts +26 -0
  142. package/dist/communications/contracts/newsletterWebhook.js +1 -0
  143. package/dist/communications/contracts/optOutContent.d.ts +11 -0
  144. package/dist/communications/contracts/optOutContent.js +17 -0
  145. package/dist/communications/contracts/orderCanceled.d.ts +25 -0
  146. package/dist/communications/contracts/orderCanceled.js +27 -0
  147. package/dist/communications/contracts/orderDraft.d.ts +46 -0
  148. package/dist/communications/contracts/orderDraft.js +46 -0
  149. package/dist/communications/contracts/orderPaid.d.ts +53 -0
  150. package/dist/communications/contracts/orderPaid.js +71 -0
  151. package/dist/communications/contracts/orderRefunded.d.ts +24 -0
  152. package/dist/communications/contracts/orderRefunded.js +27 -0
  153. package/dist/communications/contracts/paymentFailed.d.ts +24 -0
  154. package/dist/communications/contracts/paymentFailed.js +24 -0
  155. package/dist/communications/contracts/publicIntake.d.ts +49 -0
  156. package/dist/communications/contracts/publicIntake.js +1 -0
  157. package/dist/communications/contracts/render.d.ts +2 -0
  158. package/dist/communications/contracts/render.js +229 -0
  159. package/dist/communications/contracts/reorderReminder.d.ts +24 -0
  160. package/dist/communications/contracts/reorderReminder.js +24 -0
  161. package/dist/communications/contracts/returnEmails.d.ts +25 -0
  162. package/dist/communications/contracts/returnEmails.js +62 -0
  163. package/dist/communications/contracts/reviewEffects.d.ts +26 -0
  164. package/dist/communications/contracts/reviewEffects.js +25 -0
  165. package/dist/communications/contracts/reviewRequest.d.ts +26 -0
  166. package/dist/communications/contracts/reviewRequest.js +24 -0
  167. package/dist/communications/contracts/roleNotificationContent.d.ts +25 -0
  168. package/dist/communications/contracts/roleNotificationContent.js +46 -0
  169. package/dist/communications/contracts/shipmentDelivered.d.ts +23 -0
  170. package/dist/communications/contracts/shipmentDelivered.js +24 -0
  171. package/dist/communications/contracts/shipmentDispatched.d.ts +27 -0
  172. package/dist/communications/contracts/shipmentDispatched.js +35 -0
  173. package/dist/communications/contracts/shipmentException.d.ts +21 -0
  174. package/dist/communications/contracts/shipmentException.js +26 -0
  175. package/dist/communications/contracts/subscriptionActivationActionRequired.d.ts +17 -0
  176. package/dist/communications/contracts/subscriptionActivationActionRequired.js +22 -0
  177. package/dist/communications/contracts/subscriptionAddressChanged.d.ts +19 -0
  178. package/dist/communications/contracts/subscriptionAddressChanged.js +25 -0
  179. package/dist/communications/contracts/subscriptionCancelled.d.ts +19 -0
  180. package/dist/communications/contracts/subscriptionCancelled.js +25 -0
  181. package/dist/communications/contracts/subscriptionCycleSkipped.d.ts +25 -0
  182. package/dist/communications/contracts/subscriptionCycleSkipped.js +40 -0
  183. package/dist/communications/contracts/subscriptionDeliveryRescheduled.d.ts +25 -0
  184. package/dist/communications/contracts/subscriptionDeliveryRescheduled.js +39 -0
  185. package/dist/communications/contracts/subscriptionEmailContent.d.ts +145 -0
  186. package/dist/communications/contracts/subscriptionEmailContent.js +1 -0
  187. package/dist/communications/contracts/subscriptionPackageChanged.d.ts +20 -0
  188. package/dist/communications/contracts/subscriptionPackageChanged.js +26 -0
  189. package/dist/communications/contracts/subscriptionPauseReminder.d.ts +23 -0
  190. package/dist/communications/contracts/subscriptionPauseReminder.js +29 -0
  191. package/dist/communications/contracts/subscriptionPaused.d.ts +21 -0
  192. package/dist/communications/contracts/subscriptionPaused.js +25 -0
  193. package/dist/communications/contracts/subscriptionPaymentExpired.d.ts +34 -0
  194. package/dist/communications/contracts/subscriptionPaymentExpired.js +37 -0
  195. package/dist/communications/contracts/subscriptionPaymentFailed.d.ts +49 -0
  196. package/dist/communications/contracts/subscriptionPaymentFailed.js +56 -0
  197. package/dist/communications/contracts/subscriptionPaymentRecovered.d.ts +19 -0
  198. package/dist/communications/contracts/subscriptionPaymentRecovered.js +22 -0
  199. package/dist/communications/contracts/subscriptionRenewalAtRisk.d.ts +36 -0
  200. package/dist/communications/contracts/subscriptionRenewalAtRisk.js +36 -0
  201. package/dist/communications/contracts/subscriptionRenewalUpcoming.d.ts +49 -0
  202. package/dist/communications/contracts/subscriptionRenewalUpcoming.js +43 -0
  203. package/dist/communications/contracts/subscriptionResumed.d.ts +23 -0
  204. package/dist/communications/contracts/subscriptionResumed.js +25 -0
  205. package/dist/communications/contracts/subscriptionWelcome.d.ts +44 -0
  206. package/dist/communications/contracts/subscriptionWelcome.js +45 -0
  207. package/dist/communications/contracts/subscriptionWinback.d.ts +21 -0
  208. package/dist/communications/contracts/subscriptionWinback.js +28 -0
  209. package/dist/communications/contracts/transactionalDelivery.d.ts +42 -0
  210. package/dist/communications/contracts/transactionalDelivery.js +1 -0
  211. package/dist/communications/contracts/types.d.ts +46 -0
  212. package/dist/communications/contracts/types.js +1 -0
  213. package/dist/communications/contribution.d.ts +10 -0
  214. package/dist/communications/contribution.js +24 -0
  215. package/dist/communications/deliveryReconciliation.d.ts +64 -0
  216. package/dist/communications/deliveryReconciliation.js +60 -0
  217. package/dist/communications/emailEgress.d.ts +38 -0
  218. package/dist/communications/emailEgress.js +100 -0
  219. package/dist/communications/emailHealthAssessment.d.ts +39 -0
  220. package/dist/communications/emailHealthAssessment.js +59 -0
  221. package/dist/communications/emailHealthMetricsPort.d.ts +17 -0
  222. package/dist/communications/emailHealthMetricsPort.js +1 -0
  223. package/dist/communications/emailNotificationControl.d.ts +27 -0
  224. package/dist/communications/emailNotificationControl.js +10 -0
  225. package/dist/communications/emailObservation.d.ts +28 -0
  226. package/dist/communications/emailObservation.js +23 -0
  227. package/dist/communications/emailTransport.d.ts +82 -0
  228. package/dist/communications/emailTransport.js +95 -0
  229. package/dist/communications/errors.d.ts +15 -0
  230. package/dist/communications/errors.js +30 -0
  231. package/dist/communications/index.d.ts +47 -0
  232. package/dist/communications/index.js +38 -0
  233. package/dist/communications/integrationEventSignature.d.ts +15 -0
  234. package/dist/communications/integrationEventSignature.js +37 -0
  235. package/dist/communications/klaviyo/consentPush.d.ts +51 -0
  236. package/dist/communications/klaviyo/consentPush.js +19 -0
  237. package/dist/communications/klaviyo/index.d.ts +110 -0
  238. package/dist/communications/klaviyo/index.js +860 -0
  239. package/dist/communications/managedTransactionalDeliveryStore.d.ts +12 -0
  240. package/dist/communications/managedTransactionalDeliveryStore.js +49 -0
  241. package/dist/communications/nativeOperations.d.ts +79 -0
  242. package/dist/communications/nativeOperations.js +3 -0
  243. package/dist/communications/newsletterIntegrationContracts.d.ts +130 -0
  244. package/dist/communications/newsletterIntegrationContracts.js +128 -0
  245. package/dist/communications/newsletterWebhookPort.d.ts +11 -0
  246. package/dist/communications/newsletterWebhookPort.js +84 -0
  247. package/dist/communications/newsletterWebhookProcessing.d.ts +17 -0
  248. package/dist/communications/newsletterWebhookProcessing.js +71 -0
  249. package/dist/communications/originPolicy.d.ts +40 -0
  250. package/dist/communications/originPolicy.js +100 -0
  251. package/dist/communications/postgresCommunicationSync.d.ts +79 -0
  252. package/dist/communications/postgresCommunicationSync.js +111 -0
  253. package/dist/communications/postgresConsentEvaluator.d.ts +19 -0
  254. package/dist/communications/postgresConsentEvaluator.js +43 -0
  255. package/dist/communications/postgresDeliveryReconciliation.d.ts +3 -0
  256. package/dist/communications/postgresDeliveryReconciliation.js +113 -0
  257. package/dist/communications/postgresNativeOperations.d.ts +13 -0
  258. package/dist/communications/postgresNativeOperations.js +63 -0
  259. package/dist/communications/postgresNotificationRecipients.d.ts +37 -0
  260. package/dist/communications/postgresNotificationRecipients.js +60 -0
  261. package/dist/communications/postgresTransactionalDeliveryStore.d.ts +7 -0
  262. package/dist/communications/postgresTransactionalDeliveryStore.js +55 -0
  263. package/dist/communications/preferencesToken.d.ts +10 -0
  264. package/dist/communications/preferencesToken.js +40 -0
  265. package/dist/communications/publicPreferenceToken.d.ts +24 -0
  266. package/dist/communications/publicPreferenceToken.js +53 -0
  267. package/dist/communications/resend/index.d.ts +40 -0
  268. package/dist/communications/resend/index.js +310 -0
  269. package/dist/communications/shipmentNotifications.d.ts +34 -0
  270. package/dist/communications/shipmentNotifications.js +61 -0
  271. package/dist/communications/sql.d.ts +26 -0
  272. package/dist/communications/sql.js +7 -0
  273. package/dist/communications/standardWebhooks.d.ts +14 -0
  274. package/dist/communications/standardWebhooks.js +73 -0
  275. package/dist/communications/status.d.ts +11 -0
  276. package/dist/communications/status.js +36 -0
  277. package/dist/communications/transactionalDelivery.d.ts +19 -0
  278. package/dist/communications/transactionalDelivery.js +96 -0
  279. package/dist/communications/transactionalDeliveryIdentifier.d.ts +3 -0
  280. package/dist/communications/transactionalDeliveryIdentifier.js +6 -0
  281. package/dist/communications/unsubscribeToken.d.ts +77 -0
  282. package/dist/communications/unsubscribeToken.js +150 -0
  283. package/dist/communications/validation.d.ts +2 -0
  284. package/dist/communications/validation.js +3 -0
  285. package/dist/composition/catalogContribution.d.ts +18 -0
  286. package/dist/composition/catalogContribution.js +21 -0
  287. package/dist/composition/index.d.ts +1 -0
  288. package/dist/composition/index.js +1 -0
  289. package/dist/http/index.d.ts +1 -0
  290. package/dist/http/index.js +1 -0
  291. package/dist/http/webhookSignature.d.ts +42 -0
  292. package/dist/http/webhookSignature.js +86 -0
  293. package/dist/identity/customerContracts.d.ts +2 -2
  294. package/dist/inventory/adminInventory.d.ts +13 -0
  295. package/dist/inventory/adminInventory.js +214 -0
  296. package/dist/inventory/contracts/forecast.d.ts +86 -0
  297. package/dist/inventory/contracts/forecast.js +1 -0
  298. package/dist/inventory/contracts/index.d.ts +4 -0
  299. package/dist/inventory/contracts/index.js +1 -0
  300. package/dist/inventory/contracts/inventory.d.ts +157 -0
  301. package/dist/inventory/contracts/inventory.js +1 -0
  302. package/dist/inventory/contracts/newPurchaseStock.d.ts +20 -0
  303. package/dist/inventory/contracts/newPurchaseStock.js +1 -0
  304. package/dist/inventory/contracts/reservation.d.ts +18 -0
  305. package/dist/inventory/contracts/reservation.js +1 -0
  306. package/dist/inventory/forecast.d.ts +24 -0
  307. package/dist/inventory/forecast.js +200 -0
  308. package/dist/inventory/index.d.ts +13 -0
  309. package/dist/inventory/index.js +10 -0
  310. package/dist/inventory/inventoryHandlers.d.ts +53 -0
  311. package/dist/inventory/inventoryHandlers.js +151 -0
  312. package/dist/inventory/newPurchaseStockAvailability.d.ts +47 -0
  313. package/dist/inventory/newPurchaseStockAvailability.js +75 -0
  314. package/dist/inventory/ports.d.ts +21 -0
  315. package/dist/inventory/ports.js +16 -0
  316. package/dist/inventory/renewalReservation.d.ts +27 -0
  317. package/dist/inventory/renewalReservation.js +61 -0
  318. package/dist/inventory/reservationPolicy.d.ts +6 -0
  319. package/dist/inventory/reservationPolicy.js +19 -0
  320. package/dist/inventory/schemas.d.ts +137 -0
  321. package/dist/inventory/schemas.js +112 -0
  322. package/dist/inventory/sql.d.ts +14 -0
  323. package/dist/inventory/sql.js +5 -0
  324. package/dist/inventory/subscriptionForecastCalculation.d.ts +4 -0
  325. package/dist/inventory/subscriptionForecastCalculation.js +133 -0
  326. package/dist/pricing/acquisitionFinancialPolicy.d.ts +26 -0
  327. package/dist/pricing/acquisitionFinancialPolicy.js +1 -0
  328. package/dist/pricing/acquisitionOfferPricing.d.ts +27 -0
  329. package/dist/pricing/acquisitionOfferPricing.js +25 -0
  330. package/dist/pricing/acquisitionOfferPricingHandler.d.ts +20 -0
  331. package/dist/pricing/acquisitionOfferPricingHandler.js +105 -0
  332. package/dist/pricing/acquisitionOfferPricingSchemas.d.ts +31 -0
  333. package/dist/pricing/acquisitionOfferPricingSchemas.js +33 -0
  334. package/dist/pricing/acquisitionQuoteBinding.d.ts +12 -0
  335. package/dist/pricing/acquisitionQuoteBinding.js +12 -0
  336. package/dist/pricing/acquisitionReadiness.d.ts +31 -0
  337. package/dist/pricing/acquisitionReadiness.js +117 -0
  338. package/dist/pricing/acquisitionTerms.d.ts +19 -0
  339. package/dist/pricing/acquisitionTerms.js +126 -0
  340. package/dist/pricing/acquisitionTermsSchemas.d.ts +59 -0
  341. package/dist/pricing/acquisitionTermsSchemas.js +42 -0
  342. package/dist/pricing/catalogFactsProvenance.d.ts +33 -0
  343. package/dist/pricing/catalogFactsProvenance.js +64 -0
  344. package/dist/pricing/catalogFactsSchemas.d.ts +45 -0
  345. package/dist/pricing/catalogFactsSchemas.js +58 -0
  346. package/dist/pricing/commerceOfferPricing.d.ts +25 -0
  347. package/dist/pricing/commerceOfferPricing.js +139 -0
  348. package/dist/pricing/commerceOfferPricingCache.d.ts +10 -0
  349. package/dist/pricing/commerceOfferPricingCache.js +44 -0
  350. package/dist/pricing/commerceOfferPricingHandler.d.ts +21 -0
  351. package/dist/pricing/commerceOfferPricingHandler.js +78 -0
  352. package/dist/pricing/commercePriceAuthority.d.ts +26 -0
  353. package/dist/pricing/commercePriceAuthority.js +79 -0
  354. package/dist/pricing/commercePricingPolicyErrors.d.ts +40 -0
  355. package/dist/pricing/commercePricingPolicyErrors.js +67 -0
  356. package/dist/pricing/commerceQuoteBatchHandler.d.ts +37 -0
  357. package/dist/pricing/commerceQuoteBatchHandler.js +83 -0
  358. package/dist/pricing/commerceQuoteCatalogReadPort.d.ts +27 -0
  359. package/dist/pricing/commerceQuoteCatalogReadPort.js +8 -0
  360. package/dist/pricing/commerceQuoteHandler.d.ts +31 -0
  361. package/dist/pricing/commerceQuoteHandler.js +110 -0
  362. package/dist/pricing/commerceQuoteSnapshotExpect.d.ts +9 -0
  363. package/dist/pricing/commerceQuoteSnapshotExpect.js +22 -0
  364. package/dist/pricing/contracts/acquisitionTerms.d.ts +32 -0
  365. package/dist/pricing/contracts/acquisitionTerms.js +2 -0
  366. package/dist/pricing/contracts/authority.d.ts +27 -0
  367. package/dist/pricing/contracts/authority.js +1 -0
  368. package/dist/pricing/contracts/evidence.d.ts +33 -0
  369. package/dist/pricing/contracts/evidence.js +1 -0
  370. package/dist/pricing/contracts/index.d.ts +17 -0
  371. package/dist/pricing/contracts/index.js +7 -0
  372. package/dist/pricing/contracts/money.d.ts +27 -0
  373. package/dist/pricing/contracts/money.js +1 -0
  374. package/dist/pricing/contracts/offer.d.ts +52 -0
  375. package/dist/pricing/contracts/offer.js +4 -0
  376. package/dist/pricing/contracts/offerPolicy.d.ts +16 -0
  377. package/dist/pricing/contracts/offerPolicy.js +5 -0
  378. package/dist/pricing/contracts/policy.d.ts +22 -0
  379. package/dist/pricing/contracts/policy.js +3 -0
  380. package/dist/pricing/contracts/provenance.d.ts +24 -0
  381. package/dist/pricing/contracts/provenance.js +2 -0
  382. package/dist/pricing/contracts/quote.d.ts +94 -0
  383. package/dist/pricing/contracts/quote.js +1 -0
  384. package/dist/pricing/dbBackedCommerceQuoteHelpers.d.ts +78 -0
  385. package/dist/pricing/dbBackedCommerceQuoteHelpers.js +146 -0
  386. package/dist/pricing/dbBackedCommerceQuotePort.d.ts +66 -0
  387. package/dist/pricing/dbBackedCommerceQuotePort.js +206 -0
  388. package/dist/pricing/dbBackedCommerceQuoteSnapshotVerifier.d.ts +4 -0
  389. package/dist/pricing/dbBackedCommerceQuoteSnapshotVerifier.js +25 -0
  390. package/dist/pricing/index.d.ts +51 -0
  391. package/dist/pricing/index.js +36 -0
  392. package/dist/pricing/offerPolicyReadiness.d.ts +21 -0
  393. package/dist/pricing/offerPolicyReadiness.js +79 -0
  394. package/dist/pricing/offerPolicySchemas.d.ts +25 -0
  395. package/dist/pricing/offerPolicySchemas.js +15 -0
  396. package/dist/pricing/offerPricingSchemas.d.ts +315 -0
  397. package/dist/pricing/offerPricingSchemas.js +65 -0
  398. package/dist/pricing/ports.d.ts +13 -0
  399. package/dist/pricing/ports.js +9 -0
  400. package/dist/pricing/pricingPolicyToken.d.ts +39 -0
  401. package/dist/pricing/pricingPolicyToken.js +84 -0
  402. package/dist/pricing/quoteAcquisitionTerms.d.ts +2 -0
  403. package/dist/pricing/quoteAcquisitionTerms.js +4 -0
  404. package/dist/pricing/quoteCodeRejectionDetails.d.ts +20 -0
  405. package/dist/pricing/quoteCodeRejectionDetails.js +22 -0
  406. package/dist/pricing/quotePorts.d.ts +30 -0
  407. package/dist/pricing/quotePorts.js +20 -0
  408. package/dist/pricing/quotePrimitives.d.ts +13 -0
  409. package/dist/pricing/quotePrimitives.js +18 -0
  410. package/dist/pricing/quotePromotionEvidence.d.ts +39 -0
  411. package/dist/pricing/quotePromotionEvidence.js +73 -0
  412. package/dist/pricing/quoteSchemas.d.ts +1176 -0
  413. package/dist/pricing/quoteSchemas.js +196 -0
  414. package/dist/pricing/subscriptionPricePolicy.d.ts +52 -0
  415. package/dist/pricing/subscriptionPricePolicy.js +96 -0
  416. package/dist/pricing/taxProfileGuard.d.ts +2 -0
  417. package/dist/pricing/taxProfileGuard.js +24 -0
  418. package/dist/pricing/validation.d.ts +2 -0
  419. package/dist/pricing/validation.js +3 -0
  420. package/dist/promotions/adminBindings.d.ts +72 -0
  421. package/dist/promotions/adminBindings.js +1 -0
  422. package/dist/promotions/adminPromotionCodesContracts.d.ts +498 -0
  423. package/dist/promotions/adminPromotionCodesContracts.js +211 -0
  424. package/dist/promotions/adminPromotionCodesDataPort.d.ts +47 -0
  425. package/dist/promotions/adminPromotionCodesDataPort.js +1 -0
  426. package/dist/promotions/adminPromotionCodesHandler.d.ts +14 -0
  427. package/dist/promotions/adminPromotionCodesHandler.js +194 -0
  428. package/dist/promotions/adminPromotionsContracts.d.ts +235 -0
  429. package/dist/promotions/adminPromotionsContracts.js +99 -0
  430. package/dist/promotions/adminPromotionsDataPort.d.ts +42 -0
  431. package/dist/promotions/adminPromotionsDataPort.js +1 -0
  432. package/dist/promotions/adminPromotionsHandler.d.ts +16 -0
  433. package/dist/promotions/adminPromotionsHandler.js +47 -0
  434. package/dist/promotions/contracts/index.d.ts +387 -0
  435. package/dist/promotions/contracts/index.js +1 -0
  436. package/dist/promotions/index.d.ts +22 -0
  437. package/dist/promotions/index.js +21 -0
  438. package/dist/promotions/promoDataPort.d.ts +47 -0
  439. package/dist/promotions/promoDataPort.js +14 -0
  440. package/dist/promotions/promotionAcceptanceTelemetry.d.ts +29 -0
  441. package/dist/promotions/promotionAcceptanceTelemetry.js +45 -0
  442. package/dist/promotions/promotionBenefitDefinition.d.ts +37 -0
  443. package/dist/promotions/promotionBenefitDefinition.js +33 -0
  444. package/dist/promotions/promotionClaimSweepPort.d.ts +14 -0
  445. package/dist/promotions/promotionClaimSweepPort.js +8 -0
  446. package/dist/promotions/promotionClaims.d.ts +5 -0
  447. package/dist/promotions/promotionClaims.js +57 -0
  448. package/dist/promotions/promotionCodePreview.d.ts +11 -0
  449. package/dist/promotions/promotionCodePreview.js +154 -0
  450. package/dist/promotions/promotionCodeQuotePort.d.ts +25 -0
  451. package/dist/promotions/promotionCodeQuotePort.js +1 -0
  452. package/dist/promotions/promotionQuoteAcceptance.d.ts +65 -0
  453. package/dist/promotions/promotionQuoteAcceptance.js +202 -0
  454. package/dist/promotions/promotionQuoteBinding.d.ts +71 -0
  455. package/dist/promotions/promotionQuoteBinding.js +85 -0
  456. package/dist/promotions/quoteAutomaticPromotions.d.ts +24 -0
  457. package/dist/promotions/quoteAutomaticPromotions.js +36 -0
  458. package/dist/promotions/quotePromoDiscounts.d.ts +32 -0
  459. package/dist/promotions/quotePromoDiscounts.js +140 -0
  460. package/dist/promotions/quotePromotionCodeAdjustments.d.ts +27 -0
  461. package/dist/promotions/quotePromotionCodeAdjustments.js +223 -0
  462. package/dist/promotions/quotePromotionV2.d.ts +29 -0
  463. package/dist/promotions/quotePromotionV2.js +174 -0
  464. package/dist/promotions/sql.d.ts +14 -0
  465. package/dist/promotions/sql.js +5 -0
  466. package/dist/promotions/validation.d.ts +2 -0
  467. package/dist/promotions/validation.js +3 -0
  468. package/dist/shipping/addressCanonLookupHandler.d.ts +7 -0
  469. package/dist/shipping/addressCanonLookupHandler.js +105 -0
  470. package/dist/shipping/addressCanonical.d.ts +2 -0
  471. package/dist/shipping/addressCanonical.js +26 -0
  472. package/dist/shipping/addressPorts.d.ts +39 -0
  473. package/dist/shipping/addressPorts.js +1 -0
  474. package/dist/shipping/addressSchemas.d.ts +30 -0
  475. package/dist/shipping/addressSchemas.js +1 -0
  476. package/dist/shipping/adminShippingRateHandler.d.ts +4 -0
  477. package/dist/shipping/adminShippingRateHandler.js +64 -0
  478. package/dist/shipping/contracts/address.d.ts +144 -0
  479. package/dist/shipping/contracts/address.js +1 -0
  480. package/dist/shipping/contracts/delivery.d.ts +110 -0
  481. package/dist/shipping/contracts/delivery.js +1 -0
  482. package/dist/shipping/contracts/index.d.ts +3 -0
  483. package/dist/shipping/contracts/index.js +1 -0
  484. package/dist/shipping/contracts/shippingRate.d.ts +11 -0
  485. package/dist/shipping/contracts/shippingRate.js +1 -0
  486. package/dist/shipping/customerAddressesHandler.d.ts +5 -0
  487. package/dist/shipping/customerAddressesHandler.js +80 -0
  488. package/dist/shipping/customerSelfServiceAddressModels.d.ts +27 -0
  489. package/dist/shipping/customerSelfServiceAddressModels.js +101 -0
  490. package/dist/shipping/deliverySelectionHandler.d.ts +10 -0
  491. package/dist/shipping/deliverySelectionHandler.js +77 -0
  492. package/dist/shipping/deliverySelectionPort.d.ts +8 -0
  493. package/dist/shipping/deliverySelectionPort.js +1 -0
  494. package/dist/shipping/deliverySelectionSummary.d.ts +2 -0
  495. package/dist/shipping/deliverySelectionSummary.js +53 -0
  496. package/dist/shipping/handlerSchemas.d.ts +21 -0
  497. package/dist/shipping/handlerSchemas.js +1 -0
  498. package/dist/shipping/index.d.ts +17 -0
  499. package/dist/shipping/index.js +8 -0
  500. package/dist/shipping/pickupPointSearchPort.d.ts +4 -0
  501. package/dist/shipping/pickupPointSearchPort.js +1 -0
  502. package/dist/shipping/readDeliverySelectionEvidence.d.ts +2 -0
  503. package/dist/shipping/readDeliverySelectionEvidence.js +44 -0
  504. package/dist/shipping/shippingRatePorts.d.ts +52 -0
  505. package/dist/shipping/shippingRatePorts.js +1 -0
  506. package/package.json +72 -2
  507. package/release-gates.json +249 -8
  508. package/sql/20260807140000_read_parity_catalog.sql +94 -0
  509. package/sql/20260807190000_comms_outbox_rail.sql +329 -0
  510. package/sql/20260810120000_storefront_catalog_attributes.sql +51 -0
  511. package/sql/20260810120001_transactional_delivery_receipts.sql +209 -0
  512. package/sql/20260812140000_sellable_bundle_catalog.sql +124 -0
  513. package/sql/20260812210000_bundle_operator_write_boundary.sql +567 -0
  514. package/sql/20260813120000_communications_control_plane.sql +568 -0
  515. package/sql/20260814000000_fulfillment_stock_evidence.sql +239 -0
  516. package/sql/20260815120000_automatic_subscription_renewal.sql +1083 -0
  517. package/sql/20260817180000_promotion_claim_lifecycle.sql +591 -0
  518. package/sql/20260817180100_promotion_claim_lifecycle_validation.sql +23 -0
  519. package/sql/20260827220000_catalog_document_revision_foundation.sql +226 -0
  520. package/sql/20260827220001_catalog_document_revision_foundation_validate.sql +10 -0
  521. package/sql/20260908100000_catalog_draft_foundation.sql +217 -0
  522. package/sql/20261019200000_communications_native_operations.sql +68 -0
  523. package/src/catalog/activeSkuSelection.ts +20 -0
  524. package/src/catalog/adminBindings.ts +59 -0
  525. package/src/catalog/adminBundleHandler.ts +165 -0
  526. package/src/catalog/adminBundleReadHandler.ts +261 -0
  527. package/src/catalog/adminBundleWritePort.ts +102 -0
  528. package/src/catalog/bundleAvailability.ts +129 -0
  529. package/src/catalog/bundleAvailabilityService.ts +171 -0
  530. package/src/catalog/bundleBindings.ts +29 -0
  531. package/src/catalog/bundleCatalogQueries.ts +98 -0
  532. package/src/catalog/bundleCatalogReadPort.ts +177 -0
  533. package/src/catalog/bundleCatalogStore.ts +269 -0
  534. package/src/catalog/bundleRuleCodes.ts +134 -0
  535. package/src/catalog/bundleRules.ts +153 -0
  536. package/src/catalog/catalogDraftStore.ts +71 -0
  537. package/src/catalog/catalogSkuEnvelope.ts +214 -0
  538. package/src/catalog/catalogSkuEnvelopeMapper.ts +160 -0
  539. package/src/catalog/contracts/bundleAdmin.ts +20 -0
  540. package/src/catalog/contracts/bundleAvailability.ts +5 -0
  541. package/src/catalog/contracts/bundleRead.ts +13 -0
  542. package/src/catalog/contracts/draft.ts +69 -0
  543. package/src/catalog/contracts/foundation.ts +104 -0
  544. package/src/catalog/contracts/index.ts +14 -0
  545. package/src/catalog/contracts/lifecycle.ts +74 -0
  546. package/src/catalog/contracts/productMediaContracts.ts +170 -0
  547. package/src/catalog/contracts/productTypes.ts +35 -0
  548. package/src/catalog/contracts/resolveProductMedia.ts +85 -0
  549. package/src/catalog/contracts/sellable.ts +12 -0
  550. package/src/catalog/draftHandler.ts +105 -0
  551. package/src/catalog/draftPorts.ts +18 -0
  552. package/src/catalog/draftSchemas.ts +88 -0
  553. package/src/catalog/draftValidation.ts +100 -0
  554. package/src/catalog/foundationSchemas.ts +123 -0
  555. package/src/catalog/index.ts +43 -0
  556. package/src/catalog/mediaSourcePack.ts +219 -0
  557. package/src/catalog/productTypeSchemas.ts +70 -0
  558. package/src/catalog/publicationPorts.ts +44 -0
  559. package/src/catalog/readPorts.ts +61 -0
  560. package/src/catalog/referenceCatalogHandler.ts +39 -0
  561. package/src/catalog/resolvedSkuProjection.ts +76 -0
  562. package/src/catalog/sellableBundleHandler.ts +133 -0
  563. package/src/catalog/sellableSchemas.ts +33 -0
  564. package/src/catalog/sql.ts +14 -0
  565. package/src/catalog/validation.ts +3 -0
  566. package/src/communications/accountingDocumentDelivery.ts +63 -0
  567. package/src/communications/authEmailError.ts +10 -0
  568. package/src/communications/authEmailPorts.ts +2 -0
  569. package/src/communications/authSendEmailHook.ts +310 -0
  570. package/src/communications/capturedTransactionalDelivery.ts +29 -0
  571. package/src/communications/communicationSync.ts +96 -0
  572. package/src/communications/communicationSyncWorker.ts +302 -0
  573. package/src/communications/consentPolicy.ts +82 -0
  574. package/src/communications/consentPurposeRegistry.ts +31 -0
  575. package/src/communications/contracts/abandonedCart.ts +64 -0
  576. package/src/communications/contracts/authEmail.ts +73 -0
  577. package/src/communications/contracts/backInStock.ts +69 -0
  578. package/src/communications/contracts/blocks.ts +47 -0
  579. package/src/communications/contracts/checkoutExpired.ts +62 -0
  580. package/src/communications/contracts/checkoutRecovery.ts +68 -0
  581. package/src/communications/contracts/commerceEmailContent.ts +189 -0
  582. package/src/communications/contracts/commerceEngagementEmailContent.ts +106 -0
  583. package/src/communications/contracts/consent.ts +13 -0
  584. package/src/communications/contracts/email.ts +210 -0
  585. package/src/communications/contracts/guideCard.ts +34 -0
  586. package/src/communications/contracts/index.ts +52 -0
  587. package/src/communications/contracts/inquiryContent.ts +53 -0
  588. package/src/communications/contracts/invoiceDocumentContent.ts +57 -0
  589. package/src/communications/contracts/marketingAutomation.ts +45 -0
  590. package/src/communications/contracts/marketingSync.ts +109 -0
  591. package/src/communications/contracts/newsletter.ts +78 -0
  592. package/src/communications/contracts/newsletterWebhook.ts +23 -0
  593. package/src/communications/contracts/optOutContent.ts +23 -0
  594. package/src/communications/contracts/orderCanceled.ts +64 -0
  595. package/src/communications/contracts/orderDraft.ts +112 -0
  596. package/src/communications/contracts/orderPaid.ts +147 -0
  597. package/src/communications/contracts/orderRefunded.ts +63 -0
  598. package/src/communications/contracts/paymentFailed.ts +59 -0
  599. package/src/communications/contracts/publicIntake.ts +53 -0
  600. package/src/communications/contracts/render.ts +271 -0
  601. package/src/communications/contracts/reorderReminder.ts +59 -0
  602. package/src/communications/contracts/returnEmails.ts +113 -0
  603. package/src/communications/contracts/reviewEffects.ts +60 -0
  604. package/src/communications/contracts/reviewRequest.ts +59 -0
  605. package/src/communications/contracts/roleNotificationContent.ts +65 -0
  606. package/src/communications/contracts/shipmentDelivered.ts +59 -0
  607. package/src/communications/contracts/shipmentDispatched.ts +77 -0
  608. package/src/communications/contracts/shipmentException.ts +62 -0
  609. package/src/communications/contracts/subscriptionActivationActionRequired.ts +37 -0
  610. package/src/communications/contracts/subscriptionAddressChanged.ts +56 -0
  611. package/src/communications/contracts/subscriptionCancelled.ts +57 -0
  612. package/src/communications/contracts/subscriptionCycleSkipped.ts +80 -0
  613. package/src/communications/contracts/subscriptionDeliveryRescheduled.ts +79 -0
  614. package/src/communications/contracts/subscriptionEmailContent.ts +163 -0
  615. package/src/communications/contracts/subscriptionPackageChanged.ts +59 -0
  616. package/src/communications/contracts/subscriptionPauseReminder.ts +63 -0
  617. package/src/communications/contracts/subscriptionPaused.ts +58 -0
  618. package/src/communications/contracts/subscriptionPaymentExpired.ts +83 -0
  619. package/src/communications/contracts/subscriptionPaymentFailed.ts +117 -0
  620. package/src/communications/contracts/subscriptionPaymentRecovered.ts +50 -0
  621. package/src/communications/contracts/subscriptionRenewalAtRisk.ts +85 -0
  622. package/src/communications/contracts/subscriptionRenewalUpcoming.ts +103 -0
  623. package/src/communications/contracts/subscriptionResumed.ts +60 -0
  624. package/src/communications/contracts/subscriptionWelcome.ts +102 -0
  625. package/src/communications/contracts/subscriptionWinback.ts +62 -0
  626. package/src/communications/contracts/transactionalDelivery.ts +43 -0
  627. package/src/communications/contracts/types.ts +58 -0
  628. package/src/communications/contribution.ts +33 -0
  629. package/src/communications/deliveryReconciliation.ts +108 -0
  630. package/src/communications/emailEgress.ts +111 -0
  631. package/src/communications/emailHealthAssessment.ts +106 -0
  632. package/src/communications/emailHealthMetricsPort.ts +17 -0
  633. package/src/communications/emailNotificationControl.ts +28 -0
  634. package/src/communications/emailObservation.ts +43 -0
  635. package/src/communications/emailTransport.ts +167 -0
  636. package/src/communications/errors.ts +34 -0
  637. package/src/communications/index.ts +47 -0
  638. package/src/communications/integrationEventSignature.ts +49 -0
  639. package/src/communications/klaviyo/consentPush.ts +19 -0
  640. package/src/communications/klaviyo/index.ts +649 -0
  641. package/src/communications/managedTransactionalDeliveryStore.ts +59 -0
  642. package/src/communications/nativeOperations.ts +40 -0
  643. package/src/communications/newsletterIntegrationContracts.ts +154 -0
  644. package/src/communications/newsletterWebhookPort.ts +104 -0
  645. package/src/communications/newsletterWebhookProcessing.ts +102 -0
  646. package/src/communications/originPolicy.ts +151 -0
  647. package/src/communications/postgresCommunicationSync.ts +127 -0
  648. package/src/communications/postgresConsentEvaluator.ts +49 -0
  649. package/src/communications/postgresDeliveryReconciliation.ts +101 -0
  650. package/src/communications/postgresNativeOperations.ts +55 -0
  651. package/src/communications/postgresNotificationRecipients.ts +57 -0
  652. package/src/communications/postgresTransactionalDeliveryStore.ts +79 -0
  653. package/src/communications/preferencesToken.ts +62 -0
  654. package/src/communications/publicPreferenceToken.ts +68 -0
  655. package/src/communications/resend/index.ts +350 -0
  656. package/src/communications/shipmentNotifications.ts +78 -0
  657. package/src/communications/sql.ts +7 -0
  658. package/src/communications/standardWebhooks.ts +84 -0
  659. package/src/communications/status.ts +51 -0
  660. package/src/communications/transactionalDelivery.ts +114 -0
  661. package/src/communications/transactionalDeliveryIdentifier.ts +9 -0
  662. package/src/communications/unsubscribeToken.ts +186 -0
  663. package/src/communications/validation.ts +3 -0
  664. package/src/composition/catalogContribution.ts +32 -0
  665. package/src/composition/index.ts +1 -0
  666. package/src/http/index.ts +1 -0
  667. package/src/http/webhookSignature.ts +96 -0
  668. package/src/inventory/adminInventory.ts +251 -0
  669. package/src/inventory/contracts/forecast.ts +96 -0
  670. package/src/inventory/contracts/index.ts +18 -0
  671. package/src/inventory/contracts/inventory.ts +14 -0
  672. package/src/inventory/contracts/newPurchaseStock.ts +23 -0
  673. package/src/inventory/contracts/reservation.ts +20 -0
  674. package/src/inventory/forecast.ts +239 -0
  675. package/src/inventory/index.ts +21 -0
  676. package/src/inventory/inventoryHandlers.ts +215 -0
  677. package/src/inventory/newPurchaseStockAvailability.ts +120 -0
  678. package/src/inventory/ports.ts +46 -0
  679. package/src/inventory/renewalReservation.ts +88 -0
  680. package/src/inventory/reservationPolicy.ts +27 -0
  681. package/src/inventory/schemas.ts +128 -0
  682. package/src/inventory/sql.ts +5 -0
  683. package/src/inventory/subscriptionForecastCalculation.ts +157 -0
  684. package/src/pricing/acquisitionFinancialPolicy.ts +26 -0
  685. package/src/pricing/acquisitionOfferPricing.ts +38 -0
  686. package/src/pricing/acquisitionOfferPricingHandler.ts +157 -0
  687. package/src/pricing/acquisitionOfferPricingSchemas.ts +35 -0
  688. package/src/pricing/acquisitionQuoteBinding.ts +12 -0
  689. package/src/pricing/acquisitionReadiness.ts +148 -0
  690. package/src/pricing/acquisitionTerms.ts +125 -0
  691. package/src/pricing/acquisitionTermsSchemas.ts +52 -0
  692. package/src/pricing/catalogFactsProvenance.ts +102 -0
  693. package/src/pricing/catalogFactsSchemas.ts +69 -0
  694. package/src/pricing/commerceOfferPricing.ts +224 -0
  695. package/src/pricing/commerceOfferPricingCache.ts +53 -0
  696. package/src/pricing/commerceOfferPricingHandler.ts +137 -0
  697. package/src/pricing/commercePriceAuthority.ts +104 -0
  698. package/src/pricing/commercePricingPolicyErrors.ts +88 -0
  699. package/src/pricing/commerceQuoteBatchHandler.ts +129 -0
  700. package/src/pricing/commerceQuoteCatalogReadPort.ts +42 -0
  701. package/src/pricing/commerceQuoteHandler.ts +184 -0
  702. package/src/pricing/commerceQuoteSnapshotExpect.ts +48 -0
  703. package/src/pricing/contracts/acquisitionTerms.ts +26 -0
  704. package/src/pricing/contracts/authority.ts +44 -0
  705. package/src/pricing/contracts/evidence.ts +25 -0
  706. package/src/pricing/contracts/index.ts +17 -0
  707. package/src/pricing/contracts/money.ts +32 -0
  708. package/src/pricing/contracts/offer.ts +42 -0
  709. package/src/pricing/contracts/offerPolicy.ts +17 -0
  710. package/src/pricing/contracts/policy.ts +26 -0
  711. package/src/pricing/contracts/provenance.ts +19 -0
  712. package/src/pricing/contracts/quote.ts +106 -0
  713. package/src/pricing/dbBackedCommerceQuoteHelpers.ts +256 -0
  714. package/src/pricing/dbBackedCommerceQuotePort.ts +260 -0
  715. package/src/pricing/dbBackedCommerceQuoteSnapshotVerifier.ts +49 -0
  716. package/src/pricing/index.ts +52 -0
  717. package/src/pricing/offerPolicyReadiness.ts +110 -0
  718. package/src/pricing/offerPolicySchemas.ts +23 -0
  719. package/src/pricing/offerPricingSchemas.ts +92 -0
  720. package/src/pricing/ports.ts +17 -0
  721. package/src/pricing/pricingPolicyToken.ts +119 -0
  722. package/src/pricing/quoteAcquisitionTerms.ts +10 -0
  723. package/src/pricing/quoteCodeRejectionDetails.ts +23 -0
  724. package/src/pricing/quotePorts.ts +58 -0
  725. package/src/pricing/quotePrimitives.ts +21 -0
  726. package/src/pricing/quotePromotionEvidence.ts +82 -0
  727. package/src/pricing/quoteSchemas.ts +230 -0
  728. package/src/pricing/subscriptionPricePolicy.ts +113 -0
  729. package/src/pricing/taxProfileGuard.ts +33 -0
  730. package/src/pricing/validation.ts +3 -0
  731. package/src/promotions/adminBindings.ts +53 -0
  732. package/src/promotions/adminPromotionCodesContracts.ts +244 -0
  733. package/src/promotions/adminPromotionCodesDataPort.ts +56 -0
  734. package/src/promotions/adminPromotionCodesHandler.ts +254 -0
  735. package/src/promotions/adminPromotionsContracts.ts +121 -0
  736. package/src/promotions/adminPromotionsDataPort.ts +48 -0
  737. package/src/promotions/adminPromotionsHandler.ts +72 -0
  738. package/src/promotions/contracts/index.ts +387 -0
  739. package/src/promotions/index.ts +22 -0
  740. package/src/promotions/promoDataPort.ts +65 -0
  741. package/src/promotions/promotionAcceptanceTelemetry.ts +73 -0
  742. package/src/promotions/promotionBenefitDefinition.ts +48 -0
  743. package/src/promotions/promotionClaimSweepPort.ts +23 -0
  744. package/src/promotions/promotionClaims.ts +70 -0
  745. package/src/promotions/promotionCodePreview.ts +183 -0
  746. package/src/promotions/promotionCodeQuotePort.ts +35 -0
  747. package/src/promotions/promotionQuoteAcceptance.ts +284 -0
  748. package/src/promotions/promotionQuoteBinding.ts +158 -0
  749. package/src/promotions/quoteAutomaticPromotions.ts +58 -0
  750. package/src/promotions/quotePromoDiscounts.ts +185 -0
  751. package/src/promotions/quotePromotionCodeAdjustments.ts +277 -0
  752. package/src/promotions/quotePromotionV2.ts +223 -0
  753. package/src/promotions/sql.ts +5 -0
  754. package/src/promotions/validation.ts +3 -0
  755. package/src/shipping/addressCanonLookupHandler.ts +114 -0
  756. package/src/shipping/addressCanonical.ts +31 -0
  757. package/src/shipping/addressPorts.ts +48 -0
  758. package/src/shipping/addressSchemas.ts +28 -0
  759. package/src/shipping/adminShippingRateHandler.ts +72 -0
  760. package/src/shipping/contracts/address.ts +71 -0
  761. package/src/shipping/contracts/delivery.ts +114 -0
  762. package/src/shipping/contracts/index.ts +18 -0
  763. package/src/shipping/contracts/shippingRate.ts +7 -0
  764. package/src/shipping/customerAddressesHandler.ts +100 -0
  765. package/src/shipping/customerSelfServiceAddressModels.ts +124 -0
  766. package/src/shipping/deliverySelectionHandler.ts +94 -0
  767. package/src/shipping/deliverySelectionPort.ts +10 -0
  768. package/src/shipping/deliverySelectionSummary.ts +56 -0
  769. package/src/shipping/handlerSchemas.ts +19 -0
  770. package/src/shipping/index.ts +23 -0
  771. package/src/shipping/pickupPointSearchPort.ts +8 -0
  772. package/src/shipping/readDeliverySelectionEvidence.ts +51 -0
  773. package/src/shipping/shippingRatePorts.ts +36 -0
@@ -0,0 +1,34 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { PaymentFailureCustomerCause } from "@openlup/core/payment";
3
+ import type { Locale } from "./email.js";
4
+ import { type EmailBlock } from "./blocks.js";
5
+ export interface SubscriptionPaymentExpiredEmailVars {
6
+ firstName: string | null;
7
+ /** Formatted gross amount of the unpaid cycle, e.g. "129,99 zł", or null. */
8
+ amountLabel: string | null;
9
+ /**
10
+ * Why the charges were refused, in the payer-facing vocabulary. This template
11
+ * needs it most: "after several attempts" without a reason is the one place
12
+ * the rail asks for trust and offers nothing to trust. Absent or `unknown`
13
+ * renders no cause sentence.
14
+ */
15
+ cause?: PaymentFailureCustomerCause | null;
16
+ /**
17
+ * Recovery-link URL for the case's `resume_subscription` token. When present
18
+ * the template renders the resume CTA; when absent it keeps the support-led
19
+ * wording, because a button with no destination is worse than no button.
20
+ */
21
+ recoveryUrl?: string | null;
22
+ }
23
+ export interface SubscriptionPaymentExpiredEmailContent {
24
+ subject: string;
25
+ preheader: string;
26
+ blocks: EmailBlock[];
27
+ }
28
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
29
+ export declare function createSubscriptionPaymentExpiredContentFactory(input: {
30
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "paymentExpired">;
31
+ subscriptionPaymentCauseSentence: (locale: Locale, cause: PaymentFailureCustomerCause) => string | null;
32
+ }): {
33
+ subscriptionPaymentExpiredEmailContent: (locale: Locale, vars: SubscriptionPaymentExpiredEmailVars, signoff: string) => SubscriptionPaymentExpiredEmailContent;
34
+ };
@@ -0,0 +1,37 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionPaymentExpiredContentFactory(input) {
4
+ const { subscriptionEmailContent, subscriptionPaymentCauseSentence } = input;
5
+ function subscriptionPaymentExpiredEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.paymentExpired[locale];
7
+ const recoveryUrl = vars.recoveryUrl?.trim() ? vars.recoveryUrl.trim() : null;
8
+ const causeSentence = subscriptionPaymentCauseSentence(locale, vars.cause ?? "unknown");
9
+ const detail = [
10
+ // Leads the box for the same reason as in the failed notice: it answers the
11
+ // question the paused subscription raises, before the figures.
12
+ ...(causeSentence ? [causeSentence] : []),
13
+ ...(recoveryUrl
14
+ ? [
15
+ vars.amountLabel ? copy.detail(vars.amountLabel)[0] : copy.detail(null)[0],
16
+ copy.ctaDetail,
17
+ ]
18
+ : copy.detail(vars.amountLabel)),
19
+ ];
20
+ const blocks = [
21
+ heading(copy.heading),
22
+ paragraph(copy.greeting(vars.firstName)),
23
+ paragraph(copy.intro),
24
+ accentBox(detail),
25
+ ];
26
+ if (recoveryUrl)
27
+ blocks.push(button(copy.cta, recoveryUrl));
28
+ blocks.push(paragraph(copy.outro));
29
+ blocks.push(paragraph(signoff));
30
+ return {
31
+ subject: copy.subject,
32
+ preheader: recoveryUrl ? copy.preheaderWithCta : copy.preheader,
33
+ blocks,
34
+ };
35
+ }
36
+ return { subscriptionPaymentExpiredEmailContent };
37
+ }
@@ -0,0 +1,49 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { PaymentFailureCustomerCause } from "@openlup/core/payment";
3
+ import type { Locale } from "./email.js";
4
+ import { type EmailBlock } from "./blocks.js";
5
+ export interface SubscriptionPaymentFailedEmailVars {
6
+ firstName: string | null;
7
+ /** Formatted gross amount that failed, e.g. "129,99 zł", or null when unknown. */
8
+ amountLabel: string | null;
9
+ /** Dunning retry attempt: 1 (gentle), 2 (reminder), 3+ (final retry announced). */
10
+ retryAttempt: number;
11
+ /** Absolute recovery URL (localized); null/absent → no button. */
12
+ recoveryUrl?: string | null;
13
+ /**
14
+ * Pre-formatted calendar day of the scheduled next charge, in the merchant's
15
+ * zone (e.g. "11.08.2026"). The dunning row that selects THIS template always
16
+ * carries a scheduled retry, so in production this is present; null keeps the
17
+ * pre-date sentence rather than printing a placeholder date.
18
+ */
19
+ nextRetryDateLabel?: string | null;
20
+ /** Card scheme as stored on the method's consent snapshot, e.g. "visa". */
21
+ methodScheme?: string | null;
22
+ /** Trailing digits of the stored method, e.g. "4242". */
23
+ methodLastDigits?: string | null;
24
+ /**
25
+ * Why the charge was refused, in the payer-facing vocabulary. Absent or
26
+ * `unknown` renders no cause sentence at all — see `subscriptionPaymentCauseCopy`.
27
+ */
28
+ cause?: PaymentFailureCustomerCause | null;
29
+ /**
30
+ * Whether the ladder scheduled a further charge for this cycle. Absent or
31
+ * `true` is today's rail and today's copy. `false` states that no further
32
+ * attempt is coming and leaves the CTA as the only remedy; any
33
+ * `nextRetryDateLabel` supplied alongside it is ignored rather than printed,
34
+ * because a date is only ever printed as part of a retry promise.
35
+ */
36
+ retryScheduled?: boolean;
37
+ }
38
+ export interface SubscriptionPaymentFailedEmailContent {
39
+ subject: string;
40
+ preheader: string;
41
+ blocks: EmailBlock[];
42
+ }
43
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
44
+ export declare function createSubscriptionPaymentFailedContentFactory(input: {
45
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "paymentFailed">;
46
+ subscriptionPaymentCauseSentence: (locale: Locale, cause: PaymentFailureCustomerCause) => string | null;
47
+ }): {
48
+ subscriptionPaymentFailedEmailContent: (locale: Locale, vars: SubscriptionPaymentFailedEmailVars, signoff: string) => SubscriptionPaymentFailedEmailContent;
49
+ };
@@ -0,0 +1,56 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionPaymentFailedContentFactory(input) {
4
+ const { subscriptionEmailContent, subscriptionPaymentCauseSentence } = input;
5
+ function subscriptionPaymentFailedEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.paymentFailed[locale];
7
+ // Method facts are additive and BOTH halves must be present: "karta Visa ••••"
8
+ // with no digits identifies nothing, and bare digits with no scheme is worse.
9
+ // Absent facts drop the sentence rather than render a placeholder.
10
+ const scheme = vars.methodScheme?.trim() || null;
11
+ const lastDigits = vars.methodLastDigits?.trim() || null;
12
+ // The cause leads the box: it is the answer to the question the subject line
13
+ // just raised, and the amount means little until the reader knows why. It is
14
+ // also why it is PREPENDED and never appended — the retry sentence must stay
15
+ // last (see below).
16
+ const causeSentence = subscriptionPaymentCauseSentence(locale, vars.cause ?? "unknown");
17
+ // Only an explicit `false` turns the promises off. Absent means "no producer
18
+ // told us", and the only rail that exists always schedules a retry, so absent
19
+ // must keep rendering today's copy rather than the safer-sounding new copy:
20
+ // telling a customer no attempt is coming when one is would push them to
21
+ // cancel a subscription that was about to recover on its own.
22
+ const retryScheduled = vars.retryScheduled !== false;
23
+ const detail = [
24
+ ...(causeSentence ? [causeSentence] : []),
25
+ vars.amountLabel
26
+ ? copy.amountLine(vars.amountLabel)
27
+ : retryScheduled
28
+ ? copy.noAmountLine
29
+ : copy.noAmountLineNoRetry,
30
+ ...(scheme && lastDigits ? [copy.methodLine(scheme, lastDigits)] : []),
31
+ // Kept LAST in the box on purpose: the retry sentence is the one the
32
+ // characterization pins read off the end of `accentBox.lines`. Its
33
+ // no-retry replacement takes the same position for the same reason.
34
+ retryScheduled
35
+ ? copy.reassurance(vars.retryAttempt, vars.nextRetryDateLabel?.trim() || null)
36
+ : copy.noRetryAction,
37
+ ];
38
+ const blocks = [
39
+ heading(copy.heading),
40
+ paragraph(copy.greeting(vars.firstName)),
41
+ paragraph(copy.intro),
42
+ accentBox(detail),
43
+ ];
44
+ if (vars.recoveryUrl) {
45
+ blocks.push(button(copy.cta, vars.recoveryUrl));
46
+ }
47
+ blocks.push(paragraph(copy.outro));
48
+ blocks.push(paragraph(signoff));
49
+ return {
50
+ subject: copy.subject,
51
+ preheader: copy.preheader,
52
+ blocks,
53
+ };
54
+ }
55
+ return { subscriptionPaymentFailedEmailContent };
56
+ }
@@ -0,0 +1,19 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { Locale } from "./email.js";
3
+ import { type EmailBlock } from "./blocks.js";
4
+ export interface SubscriptionPaymentRecoveredEmailVars {
5
+ firstName: string | null;
6
+ /** Formatted gross amount of the recovered cycle, e.g. "129,99 zł", or null. */
7
+ amountLabel: string | null;
8
+ }
9
+ export interface SubscriptionPaymentRecoveredEmailContent {
10
+ subject: string;
11
+ preheader: string;
12
+ blocks: EmailBlock[];
13
+ }
14
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
15
+ export declare function createSubscriptionPaymentRecoveredContentFactory(input: {
16
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "paymentRecovered">;
17
+ }): {
18
+ subscriptionPaymentRecoveredEmailContent: (locale: Locale, vars: SubscriptionPaymentRecoveredEmailVars, signoff: string) => SubscriptionPaymentRecoveredEmailContent;
19
+ };
@@ -0,0 +1,22 @@
1
+ import { accentBox, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionPaymentRecoveredContentFactory(input) {
4
+ const { subscriptionEmailContent } = input;
5
+ function subscriptionPaymentRecoveredEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.paymentRecovered[locale];
7
+ const blocks = [
8
+ heading(copy.heading),
9
+ paragraph(copy.greeting(vars.firstName)),
10
+ paragraph(copy.intro),
11
+ accentBox(copy.detail(vars.amountLabel)),
12
+ paragraph(copy.outro),
13
+ paragraph(signoff),
14
+ ];
15
+ return {
16
+ subject: copy.subject,
17
+ preheader: copy.preheader,
18
+ blocks,
19
+ };
20
+ }
21
+ return { subscriptionPaymentRecoveredEmailContent };
22
+ }
@@ -0,0 +1,36 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { PaymentFailureCustomerCause } from "@openlup/core/payment";
3
+ import type { Locale } from "./email.js";
4
+ import { type EmailBlock } from "./blocks.js";
5
+ /**
6
+ * Which of the two unchargeable states produced this notice.
7
+ *
8
+ * ⛔ THESE TWO TOKENS ARE LEDGER IDENTITY, NOT COPY KEYS. The producer's dedupe
9
+ * key AND its two-send cap are one string, `<subscriptionId>:<cause>:<day>`, and
10
+ * the cap is read back by matching this token as a LIKE prefix. Renaming either
11
+ * value — including "aligning" it with the shared cause vocabulary below —
12
+ * silently resets every cap ever recorded, because the new prefix matches
13
+ * nothing. The mapping to the shared vocabulary therefore happens at RENDER
14
+ * time, here, and never in the producer.
15
+ */
16
+ export type SubscriptionRenewalAtRiskCause = "mandate" | "missing";
17
+ export interface SubscriptionRenewalAtRiskEmailVars {
18
+ firstName: string | null;
19
+ /** Calendar day of the scheduled renewal in the merchant zone, or null. */
20
+ renewalDateLabel: string | null;
21
+ cause: SubscriptionRenewalAtRiskCause;
22
+ /** Account payments deep link; the same one the activation-gap email uses. */
23
+ ctaUrl: string;
24
+ }
25
+ export interface SubscriptionRenewalAtRiskEmailContent {
26
+ subject: string;
27
+ preheader: string;
28
+ blocks: EmailBlock[];
29
+ }
30
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
31
+ export declare function createSubscriptionRenewalAtRiskContentFactory(input: {
32
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "renewalAtRisk">;
33
+ subscriptionPaymentCauseSentence: (locale: Locale, cause: PaymentFailureCustomerCause) => string | null;
34
+ }): {
35
+ subscriptionRenewalAtRiskEmailContent: (locale: Locale, vars: SubscriptionRenewalAtRiskEmailVars, signoff: string) => SubscriptionRenewalAtRiskEmailContent;
36
+ };
@@ -0,0 +1,36 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionRenewalAtRiskContentFactory(input) {
4
+ const { subscriptionEmailContent, subscriptionPaymentCauseSentence } = input;
5
+ /** Render-time only. See the ⛔ above before touching either side of this map. */
6
+ const SHARED_CAUSE = {
7
+ mandate: "method_cannot_recur",
8
+ missing: "method_missing",
9
+ };
10
+ /**
11
+ * Both of this rail's causes state something about the stored method, so both
12
+ * have a shared sentence and neither can be `unknown`. The non-null assertion is
13
+ * carried by the `SHARED_CAUSE` map's exhaustive typing, not by an assumption.
14
+ */
15
+ function causeSentence(locale, cause) {
16
+ return subscriptionPaymentCauseSentence(locale, SHARED_CAUSE[cause]) ?? "";
17
+ }
18
+ function subscriptionRenewalAtRiskEmailContent(locale, vars, signoff) {
19
+ const copy = subscriptionEmailContent.renewalAtRisk[locale];
20
+ const blocks = [
21
+ heading(copy.heading),
22
+ paragraph(copy.greeting(vars.firstName)),
23
+ paragraph(copy.intro(vars.renewalDateLabel)),
24
+ accentBox([causeSentence(locale, vars.cause), copy.consequence]),
25
+ button(copy.cta, vars.ctaUrl),
26
+ paragraph(copy.outro),
27
+ paragraph(signoff),
28
+ ];
29
+ return {
30
+ subject: copy.subject,
31
+ preheader: copy.preheader,
32
+ blocks,
33
+ };
34
+ }
35
+ return { subscriptionRenewalAtRiskEmailContent };
36
+ }
@@ -0,0 +1,49 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { Locale } from "./email.js";
3
+ import { type EmailBlock } from "./blocks.js";
4
+ export interface SubscriptionRenewalUpcomingEmailVars {
5
+ firstName: string | null;
6
+ /** Pre-formatted renewal CHARGE date (locale-formatted by the worker). */
7
+ renewalDateLabel: string | null;
8
+ /** Pre-formatted estimated delivery window, or null when unavailable. */
9
+ deliveryWindowLabel?: string | null;
10
+ /** Localized holiday caveat; present ONLY when a holiday moved the window. */
11
+ holidayNote?: string | null;
12
+ /**
13
+ * Pre-formatted composition edit deadline. Null when unknown OR when the
14
+ * deadline has already passed at send time — see the module header.
15
+ */
16
+ editCutoffLabel?: string | null;
17
+ /** Formatted gross amount of the upcoming charge, e.g. "129,99 zł", or null. */
18
+ amountLabel: string | null;
19
+ /**
20
+ * Starter-pack acquisition stage of the delivery being announced, or null for
21
+ * an ordinary renewal. `"graduation"` means the NEXT delivery switches to the
22
+ * steady package — a size and rhythm change the customer agreed to at checkout
23
+ * but has not seen since, so it gets its own paragraph rather than a detail
24
+ * line. `"delivery2"` only marks the discounted repeat; its amount already
25
+ * rides on `amountLabel`.
26
+ */
27
+ starterStage?: "delivery2" | "graduation" | null;
28
+ /** Units per delivery from the graduation on; renders only with `"graduation"`. */
29
+ starterSteadyUnitCount?: number | null;
30
+ /** Days between deliveries from the graduation on; renders only with `"graduation"`. */
31
+ starterSteadyCadenceDays?: number | null;
32
+ /** Adopter-formatted steady package, already localized; renders only with `"graduation"`. */
33
+ starterSteadyDetail?: string | null;
34
+ /** Absolute "manage subscription" URL; null/absent → no button. */
35
+ ctaUrl?: string | null;
36
+ /** Optional consumer context label; absent/null uses the selected pack's fallback. */
37
+ contextName?: string | null;
38
+ }
39
+ export interface SubscriptionRenewalUpcomingEmailContent {
40
+ subject: string;
41
+ preheader: string;
42
+ blocks: EmailBlock[];
43
+ }
44
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
45
+ export declare function createSubscriptionRenewalUpcomingContentFactory(input: {
46
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "renewalUpcoming">;
47
+ }): {
48
+ subscriptionRenewalUpcomingEmailContent: (locale: Locale, vars: SubscriptionRenewalUpcomingEmailVars, signoff: string) => SubscriptionRenewalUpcomingEmailContent;
49
+ };
@@ -0,0 +1,43 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionRenewalUpcomingContentFactory(input) {
4
+ const { subscriptionEmailContent } = input;
5
+ function subscriptionRenewalUpcomingEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.renewalUpcoming[locale];
7
+ const details = [
8
+ vars.renewalDateLabel ? copy.dateLine(vars.renewalDateLabel) : copy.noDateLine,
9
+ ];
10
+ if (vars.deliveryWindowLabel)
11
+ details.push(copy.deliveryLine(vars.deliveryWindowLabel));
12
+ if (vars.holidayNote)
13
+ details.push(vars.holidayNote);
14
+ if (vars.amountLabel)
15
+ details.push(copy.amountLine(vars.amountLabel));
16
+ // Null when already past — the caller, not this renderer, owns that decision.
17
+ if (vars.editCutoffLabel)
18
+ details.push(copy.editCutoffLine(vars.editCutoffLabel));
19
+ const blocks = [
20
+ heading(copy.heading),
21
+ paragraph(copy.greeting(vars.firstName)),
22
+ paragraph(copy.intro(vars.contextName ?? null)),
23
+ accentBox(details, { label: copy.detailsLabel }),
24
+ ];
25
+ // The package-size change is the one thing in this email a customer could be
26
+ // surprised by, so it gets its own paragraph ABOVE the generic self-service
27
+ // line, and it names moving the delivery first.
28
+ if (vars.starterStage === "graduation" && vars.starterSteadyUnitCount && vars.starterSteadyCadenceDays) {
29
+ blocks.push(paragraph(copy.starterGraduationLine(vars.starterSteadyUnitCount, vars.starterSteadyCadenceDays, vars.starterSteadyDetail)));
30
+ }
31
+ blocks.push(paragraph(copy.manageLine));
32
+ if (vars.ctaUrl) {
33
+ blocks.push(button(copy.cta, vars.ctaUrl));
34
+ }
35
+ blocks.push(paragraph(signoff));
36
+ return {
37
+ subject: copy.subject,
38
+ preheader: copy.preheader,
39
+ blocks,
40
+ };
41
+ }
42
+ return { subscriptionRenewalUpcomingEmailContent };
43
+ }
@@ -0,0 +1,23 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { Locale } from "./email.js";
3
+ import { type EmailBlock } from "./blocks.js";
4
+ export interface SubscriptionResumedEmailVars {
5
+ firstName: string | null;
6
+ /** Consumer-facing brand label injected by the app/composition root. */
7
+ brandName: string;
8
+ /** Absolute CTA URL (manage subscription); null/absent → no button. */
9
+ ctaUrl?: string | null;
10
+ /** Optional consumer context label; absent/null uses the selected pack's fallback. */
11
+ contextName?: string | null;
12
+ }
13
+ export interface SubscriptionResumedEmailContent {
14
+ subject: string;
15
+ preheader: string;
16
+ blocks: EmailBlock[];
17
+ }
18
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
19
+ export declare function createSubscriptionResumedContentFactory(input: {
20
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "resumed">;
21
+ }): {
22
+ subscriptionResumedEmailContent: (locale: Locale, vars: SubscriptionResumedEmailVars, signoff: string) => SubscriptionResumedEmailContent;
23
+ };
@@ -0,0 +1,25 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionResumedContentFactory(input) {
4
+ const { subscriptionEmailContent } = input;
5
+ function subscriptionResumedEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.resumed[locale];
7
+ const blocks = [
8
+ heading(copy.heading),
9
+ paragraph(copy.greeting(vars.firstName)),
10
+ paragraph(copy.intro(vars.contextName ?? null)),
11
+ accentBox(copy.reassurance(vars.brandName)),
12
+ ];
13
+ if (vars.ctaUrl) {
14
+ blocks.push(button(copy.cta, vars.ctaUrl));
15
+ }
16
+ blocks.push(paragraph(copy.outro));
17
+ blocks.push(paragraph(signoff));
18
+ return {
19
+ subject: copy.subject,
20
+ preheader: copy.preheader,
21
+ blocks,
22
+ };
23
+ }
24
+ return { subscriptionResumedEmailContent };
25
+ }
@@ -0,0 +1,44 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { Locale } from "./email.js";
3
+ import { type EmailBlock } from "./blocks.js";
4
+ export interface SubscriptionWelcomeEmailVars {
5
+ firstName: string | null;
6
+ cadenceDays: number | null;
7
+ /** Pre-formatted renewal CHARGE date (locale-formatted by the handler), or null. */
8
+ chargeDateLabel: string | null;
9
+ /** Pre-formatted estimated delivery window, e.g. "04.08.2026 – 05.08.2026", or null. */
10
+ deliveryWindowLabel: string | null;
11
+ /** Pre-formatted composition edit deadline, or null when unknown/already passed. */
12
+ editCutoffLabel?: string | null;
13
+ /**
14
+ * Localized holiday caveat, supplied by the handler ONLY when a public holiday
15
+ * actually moved the estimated window. Null/absent is the normal case and must
16
+ * render nothing — a standing "we account for holidays" line is noise.
17
+ */
18
+ holidayNote?: string | null;
19
+ /** Absolute "manage subscription" URL; null/absent → no button. */
20
+ ctaUrl?: string | null;
21
+ /**
22
+ * Starter-pack acquisition facts, present only for a subscription that carries
23
+ * an acquisition marker. `starterAmountLabel` is the DELIVERY-2 amount — the
24
+ * discounted repeat that lands on the date already stated above — and the
25
+ * steady pair describes what delivery 3 onwards looks like. The whole block is
26
+ * dropped when any of it is unknown; a half-stated plan is worse than none.
27
+ */
28
+ starterAmountLabel?: string | null;
29
+ starterSteadyUnitCount?: number | null;
30
+ starterSteadyCadenceDays?: number | null;
31
+ /** Adopter-formatted steady package, already localized; the steady line's third argument. */
32
+ starterSteadyDetail?: string | null;
33
+ }
34
+ export interface SubscriptionWelcomeEmailContent {
35
+ subject: string;
36
+ preheader: string;
37
+ blocks: EmailBlock[];
38
+ }
39
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
40
+ export declare function createSubscriptionWelcomeContentFactory(input: {
41
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "welcome">;
42
+ }): {
43
+ subscriptionWelcomeEmailContent: (locale: Locale, vars: SubscriptionWelcomeEmailVars, signoff: string) => SubscriptionWelcomeEmailContent;
44
+ };
@@ -0,0 +1,45 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionWelcomeContentFactory(input) {
4
+ const { subscriptionEmailContent } = input;
5
+ function subscriptionWelcomeEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.welcome[locale];
7
+ const details = [];
8
+ if (vars.cadenceDays && vars.cadenceDays > 0)
9
+ details.push(copy.cadenceLine(vars.cadenceDays));
10
+ // Both labels are derived from the same `next_cycle_at`, so they are present or
11
+ // absent together; the fallback keeps the pre-existing "we'll confirm" promise.
12
+ details.push(vars.chargeDateLabel && vars.deliveryWindowLabel
13
+ ? copy.deliveryLine(vars.deliveryWindowLabel, vars.chargeDateLabel)
14
+ : copy.fallbackLine);
15
+ if (vars.holidayNote)
16
+ details.push(vars.holidayNote);
17
+ // Acquisition plan: the delivery-2 amount and the steady rhythm, stated once at
18
+ // the only moment the customer is actually reading about their plan.
19
+ if (vars.starterAmountLabel)
20
+ details.push(copy.starterDelivery2Line(vars.starterAmountLabel));
21
+ if (vars.starterSteadyUnitCount && vars.starterSteadyCadenceDays) {
22
+ details.push(copy.starterSteadyLine(vars.starterSteadyUnitCount, vars.starterSteadyCadenceDays, vars.starterSteadyDetail));
23
+ }
24
+ if (vars.editCutoffLabel)
25
+ details.push(copy.editCutoffLine(vars.editCutoffLabel));
26
+ const blocks = [
27
+ heading(copy.heading),
28
+ paragraph(copy.greeting(vars.firstName)),
29
+ paragraph(copy.intro),
30
+ accentBox(details, { label: copy.detailsLabel }),
31
+ ];
32
+ blocks.push(paragraph(copy.manageLine));
33
+ if (vars.ctaUrl) {
34
+ blocks.push(button(copy.cta, vars.ctaUrl));
35
+ }
36
+ blocks.push(paragraph(copy.outro));
37
+ blocks.push(paragraph(signoff));
38
+ return {
39
+ subject: copy.subject,
40
+ preheader: copy.preheader,
41
+ blocks,
42
+ };
43
+ }
44
+ return { subscriptionWelcomeEmailContent };
45
+ }
@@ -0,0 +1,21 @@
1
+ import type { SubscriptionEmailContent } from "./subscriptionEmailContent.js";
2
+ import type { Locale } from "./email.js";
3
+ import { type EmailBlock } from "./blocks.js";
4
+ export interface SubscriptionWinbackEmailVars {
5
+ firstName: string | null;
6
+ /** Consumer-facing brand label injected by the app/composition root. */
7
+ brandName: string;
8
+ /** Absolute CTA URL (the customer account / "Wznów" button); null/absent → no button. */
9
+ ctaUrl?: string | null;
10
+ }
11
+ export interface SubscriptionWinbackEmailContent {
12
+ subject: string;
13
+ preheader: string;
14
+ blocks: EmailBlock[];
15
+ }
16
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
17
+ export declare function createSubscriptionWinbackContentFactory(input: {
18
+ subscriptionEmailContent: Pick<SubscriptionEmailContent, "winback">;
19
+ }): {
20
+ subscriptionWinbackEmailContent: (locale: Locale, vars: SubscriptionWinbackEmailVars, signoff: string) => SubscriptionWinbackEmailContent;
21
+ };
@@ -0,0 +1,28 @@
1
+ import { accentBox, button, heading, paragraph, } from "./blocks.js";
2
+ /** Bind host-selected copy and pure helpers without provider or environment access. */
3
+ export function createSubscriptionWinbackContentFactory(input) {
4
+ const { subscriptionEmailContent } = input;
5
+ function subscriptionWinbackEmailContent(locale, vars, signoff) {
6
+ const copy = subscriptionEmailContent.winback[locale];
7
+ const blocks = [
8
+ heading(copy.heading),
9
+ paragraph(copy.greeting(vars.firstName)),
10
+ paragraph(copy.intro),
11
+ ];
12
+ if (copy.reasonsLabel) {
13
+ blocks.push(paragraph(copy.reasonsLabel(vars.brandName)));
14
+ }
15
+ blocks.push(accentBox(copy.reasons));
16
+ if (vars.ctaUrl) {
17
+ blocks.push(button(copy.cta, vars.ctaUrl));
18
+ }
19
+ blocks.push(paragraph(copy.outro));
20
+ blocks.push(paragraph(signoff));
21
+ return {
22
+ subject: copy.subject,
23
+ preheader: copy.preheader,
24
+ blocks,
25
+ };
26
+ }
27
+ return { subscriptionWinbackEmailContent };
28
+ }
@@ -0,0 +1,42 @@
1
+ export interface TransactionalDeliveryCommand {
2
+ readonly idempotencyKey: string;
3
+ /** Opaque recipient reference; never persisted outside the command fingerprint. */
4
+ readonly recipientReference: string;
5
+ /** Opaque template reference; never persisted outside the command fingerprint. */
6
+ readonly templateReference: string;
7
+ /** Optional bounded reference to an expiring/revocable access grant. */
8
+ readonly accessGrantReference?: string;
9
+ }
10
+ export type TransactionalDeliveryReceipt = {
11
+ readonly idempotencyKey: string;
12
+ readonly commandFingerprint: string;
13
+ readonly state: "accepted";
14
+ readonly deliveryReference: string;
15
+ readonly errorCode: null;
16
+ readonly attemptCount: number;
17
+ } | {
18
+ readonly idempotencyKey: string;
19
+ readonly commandFingerprint: string;
20
+ readonly state: "failed";
21
+ readonly deliveryReference: null;
22
+ readonly errorCode: string;
23
+ readonly attemptCount: number;
24
+ };
25
+ export interface TransactionalDeliveryReceiptStore {
26
+ readReceipt(idempotencyKey: string): Promise<TransactionalDeliveryReceipt | null>;
27
+ recordAccepted(input: {
28
+ idempotencyKey: string;
29
+ commandFingerprint: string;
30
+ deliveryReference: string;
31
+ }): Promise<TransactionalDeliveryReceipt>;
32
+ recordFailed(input: {
33
+ idempotencyKey: string;
34
+ commandFingerprint: string;
35
+ errorCode: string;
36
+ }): Promise<TransactionalDeliveryReceipt>;
37
+ }
38
+ export interface CapturedTransactionalDeliveryPort {
39
+ deliver(command: TransactionalDeliveryCommand): Promise<{
40
+ deliveryReference: string;
41
+ }>;
42
+ }