@aglyn/plugins-commerce 1.0.0-beta.230 → 1.0.0-beta.232

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 (609) hide show
  1. package/package.json +13 -13
  2. package/src/index.d.ts +0 -1
  3. package/src/index.js +0 -1
  4. package/src/index.js.map +1 -1
  5. package/src/lib/barcode/barcode-decode.d.ts +71 -0
  6. package/src/lib/barcode/barcode-decode.js +498 -0
  7. package/src/lib/barcode/barcode-decode.js.map +1 -0
  8. package/src/lib/barcode/barcode-encode.d.ts +44 -0
  9. package/src/lib/barcode/barcode-encode.js +138 -0
  10. package/src/lib/barcode/barcode-encode.js.map +1 -0
  11. package/src/lib/barcode/barcode-scanner.component.d.ts +23 -0
  12. package/src/lib/barcode/barcode-scanner.component.js +260 -0
  13. package/src/lib/barcode/barcode-scanner.component.js.map +1 -0
  14. package/src/lib/barcode/scan-button.component.d.ts +10 -0
  15. package/src/lib/barcode/scan-button.component.js +62 -0
  16. package/src/lib/barcode/scan-button.component.js.map +1 -0
  17. package/src/lib/barcode/scanner-wedge.d.ts +35 -0
  18. package/src/lib/barcode/scanner-wedge.js +108 -0
  19. package/src/lib/barcode/scanner-wedge.js.map +1 -0
  20. package/src/lib/components/account.js +10 -1
  21. package/src/lib/components/account.js.map +1 -1
  22. package/src/lib/components/cart-extras.d.ts +45 -0
  23. package/src/lib/components/cart-extras.js +127 -0
  24. package/src/lib/components/cart-extras.js.map +1 -0
  25. package/src/lib/components/cart.js +82 -15
  26. package/src/lib/components/cart.js.map +1 -1
  27. package/src/lib/components/checkout-return-notice.d.ts +26 -0
  28. package/src/lib/components/checkout-return-notice.js +48 -0
  29. package/src/lib/components/checkout-return-notice.js.map +1 -0
  30. package/src/lib/components/commerce-console-page.js +124 -0
  31. package/src/lib/components/commerce-console-page.js.map +1 -1
  32. package/src/lib/components/commerce-console-sections.d.ts +1 -1
  33. package/src/lib/components/commerce-console-sections.js +4 -0
  34. package/src/lib/components/commerce-console-sections.js.map +1 -1
  35. package/src/lib/components/console/bulk-fulfill.d.ts +44 -0
  36. package/src/lib/components/console/bulk-fulfill.js +84 -0
  37. package/src/lib/components/console/bulk-fulfill.js.map +1 -0
  38. package/src/lib/components/console/catalog-organization-card.component.js +1 -0
  39. package/src/lib/components/console/catalog-organization-card.component.js.map +1 -1
  40. package/src/lib/components/console/customer-notifications-card.component.d.ts +19 -0
  41. package/src/lib/components/console/customer-notifications-card.component.js +149 -0
  42. package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
  43. package/src/lib/components/console/host-orders-card.component.js +88 -6
  44. package/src/lib/components/console/host-orders-card.component.js.map +1 -1
  45. package/src/lib/components/console/locations-card.component.js +164 -57
  46. package/src/lib/components/console/locations-card.component.js.map +1 -1
  47. package/src/lib/components/console/order-detail-dialog.component.js +209 -61
  48. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  49. package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
  50. package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
  51. package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
  52. package/src/lib/components/console/order-invoice.component.d.ts +33 -0
  53. package/src/lib/components/console/order-invoice.component.js +81 -0
  54. package/src/lib/components/console/order-invoice.component.js.map +1 -0
  55. package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
  56. package/src/lib/components/console/order-receipt-resend.component.js +203 -0
  57. package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
  58. package/src/lib/components/console/order-returns.component.d.ts +36 -0
  59. package/src/lib/components/console/order-returns.component.js +142 -0
  60. package/src/lib/components/console/order-returns.component.js.map +1 -0
  61. package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
  62. package/src/lib/components/console/order-shipping-actions.component.js +149 -0
  63. package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
  64. package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
  65. package/src/lib/components/console/order-webhooks-card.component.js +623 -0
  66. package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
  67. package/src/lib/components/console/order-zones.d.ts +155 -0
  68. package/src/lib/components/console/order-zones.js +40 -0
  69. package/src/lib/components/console/order-zones.js.map +1 -0
  70. package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
  71. package/src/lib/components/console/payment-methods-card.component.js +395 -0
  72. package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
  73. package/src/lib/components/console/pos/pos-api.d.ts +124 -0
  74. package/src/lib/components/console/pos/pos-api.js +101 -0
  75. package/src/lib/components/console/pos/pos-api.js.map +1 -0
  76. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
  77. package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
  78. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
  79. package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
  80. package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
  81. package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
  82. package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
  83. package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
  84. package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
  85. package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
  86. package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
  87. package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
  88. package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
  89. package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
  90. package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
  91. package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
  92. package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
  93. package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
  94. package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
  95. package/src/lib/components/console/pos/use-pos-display.js +161 -0
  96. package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
  97. package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
  98. package/src/lib/components/console/pos-devices-card.component.js +546 -0
  99. package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
  100. package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
  101. package/src/lib/components/console/pos-display/brand-screen.js +85 -0
  102. package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
  103. package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
  104. package/src/lib/components/console/pos-display/cart-screen.js +166 -0
  105. package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
  106. package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
  107. package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
  108. package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
  109. package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
  110. package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
  111. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
  112. package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
  113. package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
  114. package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
  115. package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
  116. package/src/lib/components/console/pos-display/tip-screen.js +211 -0
  117. package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
  118. package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
  119. package/src/lib/components/console/pos-display-page.component.js +407 -0
  120. package/src/lib/components/console/pos-display-page.component.js.map +1 -0
  121. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
  122. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
  123. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
  124. package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
  125. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
  126. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
  127. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
  128. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
  129. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
  130. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
  131. package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
  132. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
  133. package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
  134. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
  135. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
  136. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
  137. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
  138. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
  139. package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
  140. package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
  141. package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
  142. package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
  143. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
  144. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
  145. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
  146. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
  147. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
  148. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
  149. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
  150. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
  151. package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
  152. package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
  153. package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
  154. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
  155. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
  156. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
  157. package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
  158. package/src/lib/components/console/pos-ops/register-ops.js +28 -0
  159. package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
  160. package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
  161. package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
  162. package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
  163. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
  164. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
  165. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
  166. package/src/lib/components/console/pos-page.component.d.ts +13 -5
  167. package/src/lib/components/console/pos-page.component.js +756 -654
  168. package/src/lib/components/console/pos-page.component.js.map +1 -1
  169. package/src/lib/components/console/pos-zones.d.ts +23 -0
  170. package/src/lib/components/console/pos-zones.js +31 -0
  171. package/src/lib/components/console/pos-zones.js.map +1 -0
  172. package/src/lib/components/console/product-editor-dialog.component.js +61 -71
  173. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  174. package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
  175. package/src/lib/components/console/product-labels-dialog.component.js +197 -0
  176. package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
  177. package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
  178. package/src/lib/components/console/product-register-fields.component.js +241 -0
  179. package/src/lib/components/console/product-register-fields.component.js.map +1 -0
  180. package/src/lib/components/console/product-zones.d.ts +44 -0
  181. package/src/lib/components/console/product-zones.js.map +1 -1
  182. package/src/lib/components/console/products-hub-card.component.js +23 -20
  183. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  184. package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
  185. package/src/lib/components/console/register-hardware-card.component.js +826 -0
  186. package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
  187. package/src/lib/components/console/registers-card.component.js +24 -5
  188. package/src/lib/components/console/registers-card.component.js.map +1 -1
  189. package/src/lib/components/console/return-actions.d.ts +38 -0
  190. package/src/lib/components/console/return-actions.js +76 -0
  191. package/src/lib/components/console/return-actions.js.map +1 -0
  192. package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
  193. package/src/lib/components/console/return-detail-dialog.component.js +718 -0
  194. package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
  195. package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
  196. package/src/lib/components/console/return-settings-card.component.js +195 -0
  197. package/src/lib/components/console/return-settings-card.component.js.map +1 -0
  198. package/src/lib/components/console/return-zones.d.ts +87 -0
  199. package/src/lib/components/console/return-zones.js +31 -0
  200. package/src/lib/components/console/return-zones.js.map +1 -0
  201. package/src/lib/components/console/returns-card.component.d.ts +45 -0
  202. package/src/lib/components/console/returns-card.component.js +159 -0
  203. package/src/lib/components/console/returns-card.component.js.map +1 -0
  204. package/src/lib/components/console/shipping-settings-card.component.js +161 -5
  205. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
  206. package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
  207. package/src/lib/components/console/shippingeasy-card.component.js +378 -0
  208. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
  209. package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
  210. package/src/lib/components/console/shipstation-card.component.js +345 -0
  211. package/src/lib/components/console/shipstation-card.component.js.map +1 -0
  212. package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
  213. package/src/lib/components/console/start-return-dialog.component.js +243 -0
  214. package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
  215. package/src/lib/components/console/stock-movements-card.component.js +2 -1
  216. package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
  217. package/src/lib/components/console/store-settings-card.component.js +2 -66
  218. package/src/lib/components/console/store-settings-card.component.js.map +1 -1
  219. package/src/lib/components/console/store-zones.d.ts +42 -0
  220. package/src/lib/components/console/store-zones.js +39 -0
  221. package/src/lib/components/console/store-zones.js.map +1 -0
  222. package/src/lib/components/console/storefront-tax-summary-card.component.js +1 -0
  223. package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -1
  224. package/src/lib/components/order-status.d.ts +36 -0
  225. package/src/lib/components/order-status.js +502 -0
  226. package/src/lib/components/order-status.js.map +1 -0
  227. package/src/lib/components/product-detail.js +41 -2
  228. package/src/lib/components/product-detail.js.map +1 -1
  229. package/src/lib/components/return-request.d.ts +32 -0
  230. package/src/lib/components/return-request.js +576 -0
  231. package/src/lib/components/return-request.js.map +1 -0
  232. package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
  233. package/src/lib/components/storefront-payment-appearance.js +114 -0
  234. package/src/lib/components/storefront-payment-appearance.js.map +1 -0
  235. package/src/lib/components/storefront-payment-element.d.ts +57 -1
  236. package/src/lib/components/storefront-payment-element.js +332 -33
  237. package/src/lib/components/storefront-payment-element.js.map +1 -1
  238. package/src/lib/constants/order-status.d.ts +22 -0
  239. package/src/lib/constants/order-status.js +22 -0
  240. package/src/lib/constants/order-status.js.map +1 -0
  241. package/src/lib/constants/return-request.d.ts +27 -0
  242. package/src/lib/constants/return-request.js +32 -0
  243. package/src/lib/constants/return-request.js.map +1 -0
  244. package/src/lib/constants/stock-movement-query.js +2 -1
  245. package/src/lib/constants/stock-movement-query.js.map +1 -1
  246. package/src/lib/declarations.console-server.js +9 -0
  247. package/src/lib/declarations.console-server.js.map +1 -1
  248. package/src/lib/declarations.server.d.ts +2 -1
  249. package/src/lib/declarations.server.js +68 -1
  250. package/src/lib/declarations.server.js.map +1 -1
  251. package/src/lib/model/buyer-notifications.d.ts +59 -0
  252. package/src/lib/model/buyer-notifications.js +97 -0
  253. package/src/lib/model/buyer-notifications.js.map +1 -0
  254. package/src/lib/model/commerce-orders.d.ts +171 -2
  255. package/src/lib/model/commerce-orders.js +26 -16
  256. package/src/lib/model/commerce-orders.js.map +1 -1
  257. package/src/lib/model/commerce-payment-methods.d.ts +146 -0
  258. package/src/lib/model/commerce-payment-methods.js +247 -0
  259. package/src/lib/model/commerce-payment-methods.js.map +1 -0
  260. package/src/lib/model/commerce-pos-ops.d.ts +437 -0
  261. package/src/lib/model/commerce-pos-ops.js +721 -0
  262. package/src/lib/model/commerce-pos-ops.js.map +1 -0
  263. package/src/lib/model/commerce-pos.d.ts +263 -0
  264. package/src/lib/model/commerce-pos.js +375 -0
  265. package/src/lib/model/commerce-pos.js.map +1 -0
  266. package/src/lib/model/commerce-printers.d.ts +211 -0
  267. package/src/lib/model/commerce-printers.js +181 -0
  268. package/src/lib/model/commerce-printers.js.map +1 -0
  269. package/src/lib/model/commerce-receipt.d.ts +97 -0
  270. package/src/lib/model/commerce-receipt.js +180 -0
  271. package/src/lib/model/commerce-receipt.js.map +1 -0
  272. package/src/lib/model/commerce-returns.d.ts +207 -0
  273. package/src/lib/model/commerce-returns.js +300 -0
  274. package/src/lib/model/commerce-returns.js.map +1 -0
  275. package/src/lib/model/commerce-shipping.d.ts +44 -1
  276. package/src/lib/model/commerce-shipping.js +53 -9
  277. package/src/lib/model/commerce-shipping.js.map +1 -1
  278. package/src/lib/model/commerce-tax-engine.d.ts +90 -0
  279. package/src/lib/model/commerce-tax-engine.js +129 -0
  280. package/src/lib/model/commerce-tax-engine.js.map +1 -0
  281. package/src/lib/model/commerce.d.ts +91 -2
  282. package/src/lib/model/commerce.js +89 -1
  283. package/src/lib/model/commerce.js.map +1 -1
  284. package/src/lib/model/index.d.ts +16 -0
  285. package/src/lib/model/index.js +16 -0
  286. package/src/lib/model/index.js.map +1 -1
  287. package/src/lib/model/order-events.d.ts +154 -0
  288. package/src/lib/model/order-events.js +153 -0
  289. package/src/lib/model/order-events.js.map +1 -0
  290. package/src/lib/model/order-fulfillment.d.ts +117 -0
  291. package/src/lib/model/order-fulfillment.js +217 -0
  292. package/src/lib/model/order-fulfillment.js.map +1 -0
  293. package/src/lib/model/order-history.d.ts +58 -0
  294. package/src/lib/model/order-history.js +22 -0
  295. package/src/lib/model/order-history.js.map +1 -0
  296. package/src/lib/model/order-list-fields.d.ts +9 -1
  297. package/src/lib/model/order-list-fields.js +7 -1
  298. package/src/lib/model/order-list-fields.js.map +1 -1
  299. package/src/lib/model/order-shipping-export.d.ts +91 -0
  300. package/src/lib/model/order-shipping-export.js +192 -0
  301. package/src/lib/model/order-shipping-export.js.map +1 -0
  302. package/src/lib/model/order-status-view.d.ts +103 -0
  303. package/src/lib/model/order-status-view.js +156 -0
  304. package/src/lib/model/order-status-view.js.map +1 -0
  305. package/src/lib/model/order-webhooks.d.ts +142 -0
  306. package/src/lib/model/order-webhooks.js +91 -0
  307. package/src/lib/model/order-webhooks.js.map +1 -0
  308. package/src/lib/model/product-channel.d.ts +56 -0
  309. package/src/lib/model/product-channel.js +86 -0
  310. package/src/lib/model/product-channel.js.map +1 -0
  311. package/src/lib/model/product-modifiers.d.ts +80 -0
  312. package/src/lib/model/product-modifiers.js +140 -0
  313. package/src/lib/model/product-modifiers.js.map +1 -0
  314. package/src/lib/model/product-write.d.ts +186 -0
  315. package/src/lib/model/product-write.js +116 -0
  316. package/src/lib/model/product-write.js.map +1 -0
  317. package/src/lib/model/shippingeasy.d.ts +94 -0
  318. package/src/lib/model/shippingeasy.js +267 -0
  319. package/src/lib/model/shippingeasy.js.map +1 -0
  320. package/src/lib/model/shipstation.d.ts +125 -0
  321. package/src/lib/model/shipstation.js +399 -0
  322. package/src/lib/model/shipstation.js.map +1 -0
  323. package/src/lib/model/smart-collection-reads.d.ts +32 -0
  324. package/src/lib/model/smart-collection-reads.js +63 -0
  325. package/src/lib/model/smart-collection-reads.js.map +1 -0
  326. package/src/lib/model/tracking-url.d.ts +74 -0
  327. package/src/lib/model/tracking-url.js +159 -0
  328. package/src/lib/model/tracking-url.js.map +1 -0
  329. package/src/lib/plugin-config.d.ts +13 -0
  330. package/src/lib/plugin-config.js +77 -5
  331. package/src/lib/plugin-config.js.map +1 -1
  332. package/src/lib/plugin.js +26 -0
  333. package/src/lib/plugin.js.map +1 -1
  334. package/src/lib/pos-ops-config.d.ts +39 -0
  335. package/src/lib/pos-ops-config.js +88 -0
  336. package/src/lib/pos-ops-config.js.map +1 -0
  337. package/src/lib/printing/print-document.d.ts +106 -0
  338. package/src/lib/printing/print-document.js +464 -0
  339. package/src/lib/printing/print-document.js.map +1 -0
  340. package/src/lib/printing/product-labels.d.ts +58 -0
  341. package/src/lib/printing/product-labels.js +116 -0
  342. package/src/lib/printing/product-labels.js.map +1 -0
  343. package/src/lib/printing/render-epson.d.ts +57 -0
  344. package/src/lib/printing/render-epson.js +135 -0
  345. package/src/lib/printing/render-epson.js.map +1 -0
  346. package/src/lib/printing/render-star.d.ts +45 -0
  347. package/src/lib/printing/render-star.js +100 -0
  348. package/src/lib/printing/render-star.js.map +1 -0
  349. package/src/lib/printing/render-text.d.ts +25 -0
  350. package/src/lib/printing/render-text.js +53 -0
  351. package/src/lib/printing/render-text.js.map +1 -0
  352. package/src/lib/server/api-v1/openapi.js +27 -4
  353. package/src/lib/server/api-v1/openapi.js.map +1 -1
  354. package/src/lib/server/api-v1/order-view.d.ts +67 -0
  355. package/src/lib/server/api-v1/order-view.js +120 -0
  356. package/src/lib/server/api-v1/order-view.js.map +1 -0
  357. package/src/lib/server/api-v1/orders-and-products.js +58 -65
  358. package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
  359. package/src/lib/server/billing-webhook.js +135 -28
  360. package/src/lib/server/billing-webhook.js.map +1 -1
  361. package/src/lib/server/cancel-order.js +29 -0
  362. package/src/lib/server/cancel-order.js.map +1 -1
  363. package/src/lib/server/carrier-rates-availability.d.ts +26 -0
  364. package/src/lib/server/carrier-rates-availability.js +76 -0
  365. package/src/lib/server/carrier-rates-availability.js.map +1 -0
  366. package/src/lib/server/carrier-shipping.d.ts +84 -0
  367. package/src/lib/server/carrier-shipping.js +135 -0
  368. package/src/lib/server/carrier-shipping.js.map +1 -0
  369. package/src/lib/server/cart-checkout.d.ts +2 -0
  370. package/src/lib/server/cart-checkout.js +226 -22
  371. package/src/lib/server/cart-checkout.js.map +1 -1
  372. package/src/lib/server/channel-order-updates.d.ts +50 -0
  373. package/src/lib/server/channel-order-updates.js +290 -0
  374. package/src/lib/server/channel-order-updates.js.map +1 -0
  375. package/src/lib/server/channel-orders.d.ts +85 -0
  376. package/src/lib/server/channel-orders.js +543 -0
  377. package/src/lib/server/channel-orders.js.map +1 -0
  378. package/src/lib/server/checkout-extras.d.ts +64 -0
  379. package/src/lib/server/checkout-extras.js +157 -0
  380. package/src/lib/server/checkout-extras.js.map +1 -0
  381. package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
  382. package/src/lib/server/checkout-status.js +111 -0
  383. package/src/lib/server/checkout-status.js.map +1 -0
  384. package/src/lib/server/checkout.js +86 -9
  385. package/src/lib/server/checkout.js.map +1 -1
  386. package/src/lib/server/draft-order.js +34 -5
  387. package/src/lib/server/draft-order.js.map +1 -1
  388. package/src/lib/server/fulfill-order.d.ts +127 -10
  389. package/src/lib/server/fulfill-order.js +451 -49
  390. package/src/lib/server/fulfill-order.js.map +1 -1
  391. package/src/lib/server/legacy-feed.d.ts +28 -0
  392. package/src/lib/server/legacy-feed.js +52 -0
  393. package/src/lib/server/legacy-feed.js.map +1 -0
  394. package/src/lib/server/native-checkout.d.ts +34 -15
  395. package/src/lib/server/native-checkout.js +32 -17
  396. package/src/lib/server/native-checkout.js.map +1 -1
  397. package/src/lib/server/order-event-host-emit.d.ts +23 -0
  398. package/src/lib/server/order-event-host-emit.js +30 -0
  399. package/src/lib/server/order-event-host-emit.js.map +1 -0
  400. package/src/lib/server/order-event-triggers.d.ts +37 -0
  401. package/src/lib/server/order-event-triggers.js +119 -0
  402. package/src/lib/server/order-event-triggers.js.map +1 -0
  403. package/src/lib/server/order-events.d.ts +62 -0
  404. package/src/lib/server/order-events.js +109 -0
  405. package/src/lib/server/order-events.js.map +1 -0
  406. package/src/lib/server/order-history.d.ts +23 -0
  407. package/src/lib/server/order-history.js +65 -0
  408. package/src/lib/server/order-history.js.map +1 -0
  409. package/src/lib/server/order-notifications.d.ts +185 -0
  410. package/src/lib/server/order-notifications.js +567 -0
  411. package/src/lib/server/order-notifications.js.map +1 -0
  412. package/src/lib/server/order-receipt-send.d.ts +39 -0
  413. package/src/lib/server/order-receipt-send.js +151 -0
  414. package/src/lib/server/order-receipt-send.js.map +1 -0
  415. package/src/lib/server/order-status-token.d.ts +31 -0
  416. package/src/lib/server/order-status-token.js +75 -0
  417. package/src/lib/server/order-status-token.js.map +1 -0
  418. package/src/lib/server/order-status.d.ts +58 -0
  419. package/src/lib/server/order-status.js +141 -0
  420. package/src/lib/server/order-status.js.map +1 -0
  421. package/src/lib/server/order-webhooks.d.ts +108 -0
  422. package/src/lib/server/order-webhooks.js +622 -0
  423. package/src/lib/server/order-webhooks.js.map +1 -0
  424. package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
  425. package/src/lib/server/orders-shipping-prepare.js +121 -0
  426. package/src/lib/server/orders-shipping-prepare.js.map +1 -0
  427. package/src/lib/server/payment-method-domains.d.ts +209 -0
  428. package/src/lib/server/payment-method-domains.js +444 -0
  429. package/src/lib/server/payment-method-domains.js.map +1 -0
  430. package/src/lib/server/payment-methods.d.ts +77 -0
  431. package/src/lib/server/payment-methods.js +284 -0
  432. package/src/lib/server/payment-methods.js.map +1 -0
  433. package/src/lib/server/pos-auth.d.ts +50 -0
  434. package/src/lib/server/pos-auth.js +121 -0
  435. package/src/lib/server/pos-auth.js.map +1 -0
  436. package/src/lib/server/pos-customer.d.ts +49 -0
  437. package/src/lib/server/pos-customer.js +257 -0
  438. package/src/lib/server/pos-customer.js.map +1 -0
  439. package/src/lib/server/pos-display.d.ts +57 -0
  440. package/src/lib/server/pos-display.js +419 -0
  441. package/src/lib/server/pos-display.js.map +1 -0
  442. package/src/lib/server/pos-fee-month.d.ts +34 -0
  443. package/src/lib/server/pos-fee-month.js +36 -0
  444. package/src/lib/server/pos-fee-month.js.map +1 -0
  445. package/src/lib/server/pos-ops-gate.d.ts +161 -0
  446. package/src/lib/server/pos-ops-gate.js +295 -0
  447. package/src/lib/server/pos-ops-gate.js.map +1 -0
  448. package/src/lib/server/pos-ops-routes.d.ts +22 -0
  449. package/src/lib/server/pos-ops-routes.js +36 -0
  450. package/src/lib/server/pos-ops-routes.js.map +1 -0
  451. package/src/lib/server/pos-order.d.ts +1 -18
  452. package/src/lib/server/pos-order.js +222 -42
  453. package/src/lib/server/pos-order.js.map +1 -1
  454. package/src/lib/server/pos-payment.d.ts +39 -0
  455. package/src/lib/server/pos-payment.js +922 -0
  456. package/src/lib/server/pos-payment.js.map +1 -0
  457. package/src/lib/server/pos-print.d.ts +82 -0
  458. package/src/lib/server/pos-print.js +193 -0
  459. package/src/lib/server/pos-print.js.map +1 -0
  460. package/src/lib/server/pos-readers.d.ts +27 -0
  461. package/src/lib/server/pos-readers.js +276 -0
  462. package/src/lib/server/pos-readers.js.map +1 -0
  463. package/src/lib/server/pos-refund-authority.d.ts +60 -0
  464. package/src/lib/server/pos-refund-authority.js +72 -0
  465. package/src/lib/server/pos-refund-authority.js.map +1 -0
  466. package/src/lib/server/pos-return.d.ts +58 -0
  467. package/src/lib/server/pos-return.js +891 -0
  468. package/src/lib/server/pos-return.js.map +1 -0
  469. package/src/lib/server/pos-sale-stamp.d.ts +66 -0
  470. package/src/lib/server/pos-sale-stamp.js +84 -0
  471. package/src/lib/server/pos-sale-stamp.js.map +1 -0
  472. package/src/lib/server/pos-sale.d.ts +170 -0
  473. package/src/lib/server/pos-sale.js +461 -0
  474. package/src/lib/server/pos-sale.js.map +1 -0
  475. package/src/lib/server/pos-shift.d.ts +45 -0
  476. package/src/lib/server/pos-shift.js +484 -0
  477. package/src/lib/server/pos-shift.js.map +1 -0
  478. package/src/lib/server/pos-staff-pin.d.ts +26 -0
  479. package/src/lib/server/pos-staff-pin.js +339 -0
  480. package/src/lib/server/pos-staff-pin.js.map +1 -0
  481. package/src/lib/server/pos-stripe.d.ts +91 -0
  482. package/src/lib/server/pos-stripe.js +129 -0
  483. package/src/lib/server/pos-stripe.js.map +1 -0
  484. package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
  485. package/src/lib/server/pos-terminal-connection-token.js +166 -0
  486. package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
  487. package/src/lib/server/pos-terminal.d.ts +218 -0
  488. package/src/lib/server/pos-terminal.js +1014 -0
  489. package/src/lib/server/pos-terminal.js.map +1 -0
  490. package/src/lib/server/print-queue.d.ts +124 -0
  491. package/src/lib/server/print-queue.js +301 -0
  492. package/src/lib/server/print-queue.js.map +1 -0
  493. package/src/lib/server/printer-poll.d.ts +75 -0
  494. package/src/lib/server/printer-poll.js +325 -0
  495. package/src/lib/server/printer-poll.js.map +1 -0
  496. package/src/lib/server/printer-secret.d.ts +39 -0
  497. package/src/lib/server/printer-secret.js +56 -0
  498. package/src/lib/server/printer-secret.js.map +1 -0
  499. package/src/lib/server/printers.d.ts +114 -0
  500. package/src/lib/server/printers.js +546 -0
  501. package/src/lib/server/printers.js.map +1 -0
  502. package/src/lib/server/product-catalog.d.ts +42 -0
  503. package/src/lib/server/product-catalog.js +309 -0
  504. package/src/lib/server/product-catalog.js.map +1 -0
  505. package/src/lib/server/product-drafts.d.ts +5 -1
  506. package/src/lib/server/product-drafts.js +3 -3
  507. package/src/lib/server/product-drafts.js.map +1 -1
  508. package/src/lib/server/product-writer.d.ts +19 -0
  509. package/src/lib/server/product-writer.js +261 -0
  510. package/src/lib/server/product-writer.js.map +1 -0
  511. package/src/lib/server/products-write.d.ts +61 -0
  512. package/src/lib/server/products-write.js +375 -0
  513. package/src/lib/server/products-write.js.map +1 -0
  514. package/src/lib/server/refund.js +110 -45
  515. package/src/lib/server/refund.js.map +1 -1
  516. package/src/lib/server/reserve.js +2 -0
  517. package/src/lib/server/reserve.js.map +1 -1
  518. package/src/lib/server/return-status-action.d.ts +37 -0
  519. package/src/lib/server/return-status-action.js +57 -0
  520. package/src/lib/server/return-status-action.js.map +1 -0
  521. package/src/lib/server/returns.d.ts +119 -0
  522. package/src/lib/server/returns.js +938 -0
  523. package/src/lib/server/returns.js.map +1 -0
  524. package/src/lib/server/shipment-records.d.ts +36 -0
  525. package/src/lib/server/shipment-records.js +289 -0
  526. package/src/lib/server/shipment-records.js.map +1 -0
  527. package/src/lib/server/shipping-connector-gates.d.ts +40 -0
  528. package/src/lib/server/shipping-connector-gates.js +97 -0
  529. package/src/lib/server/shipping-connector-gates.js.map +1 -0
  530. package/src/lib/server/shipping-connectors.d.ts +29 -0
  531. package/src/lib/server/shipping-connectors.js +236 -0
  532. package/src/lib/server/shipping-connectors.js.map +1 -0
  533. package/src/lib/server/shippingeasy.d.ts +238 -0
  534. package/src/lib/server/shippingeasy.js +787 -0
  535. package/src/lib/server/shippingeasy.js.map +1 -0
  536. package/src/lib/server/shipstation.d.ts +129 -0
  537. package/src/lib/server/shipstation.js +483 -0
  538. package/src/lib/server/shipstation.js.map +1 -0
  539. package/src/lib/server/site-page-resolver.d.ts +5 -0
  540. package/src/lib/server/site-page-resolver.js +156 -1
  541. package/src/lib/server/site-page-resolver.js.map +1 -1
  542. package/src/lib/server/stock-levels.d.ts +21 -0
  543. package/src/lib/server/stock-levels.js +263 -0
  544. package/src/lib/server/stock-levels.js.map +1 -0
  545. package/src/lib/server/stripe-refund.d.ts +47 -0
  546. package/src/lib/server/stripe-refund.js +87 -0
  547. package/src/lib/server/stripe-refund.js.map +1 -0
  548. package/src/lib/server/supplier-update.js +46 -5
  549. package/src/lib/server/supplier-update.js.map +1 -1
  550. package/src/lib/server/tax-engine-quote.d.ts +47 -0
  551. package/src/lib/server/tax-engine-quote.js +105 -0
  552. package/src/lib/server/tax-engine-quote.js.map +1 -0
  553. package/src/lib/server.js +143 -2
  554. package/src/lib/server.js.map +1 -1
  555. package/src/lib/site.js +12 -0
  556. package/src/lib/site.js.map +1 -1
  557. package/src/lib/subprocessors.d.ts +26 -0
  558. package/src/lib/subprocessors.js +50 -0
  559. package/src/lib/subprocessors.js.map +1 -0
  560. package/src/lib/tenant-emails.js +461 -3
  561. package/src/lib/tenant-emails.js.map +1 -1
  562. package/src/lib/testing/fake-firestore.d.ts +45 -0
  563. package/src/lib/testing/fake-firestore.js +189 -0
  564. package/src/lib/testing/fake-firestore.js.map +1 -0
  565. package/src/lib/testing/memory-firestore.d.ts +136 -0
  566. package/src/lib/testing/memory-firestore.js +282 -0
  567. package/src/lib/testing/memory-firestore.js.map +1 -0
  568. package/src/lib/testing/pos-ops-harness.d.ts +50 -0
  569. package/src/lib/testing/pos-ops-harness.js +184 -0
  570. package/src/lib/testing/pos-ops-harness.js.map +1 -0
  571. package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
  572. package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
  573. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
  574. package/src/lib/transfer/products.server.d.ts +5 -0
  575. package/src/lib/transfer/products.server.js +2 -2
  576. package/src/lib/transfer/products.server.js.map +1 -1
  577. package/src/lib/transfer/records-transfer.d.ts +11 -1
  578. package/src/lib/transfer/records-transfer.js +127 -5
  579. package/src/lib/transfer/records-transfer.js.map +1 -1
  580. package/src/lib/transfer/records.server.d.ts +9 -2
  581. package/src/lib/transfer/records.server.js +58 -7
  582. package/src/lib/transfer/records.server.js.map +1 -1
  583. package/src/lib/transfer/register-transfer-resources.js +40 -1
  584. package/src/lib/transfer/register-transfer-resources.js.map +1 -1
  585. package/src/lib/transfer/register-transfer-ui.js +4 -1
  586. package/src/lib/transfer/register-transfer-ui.js.map +1 -1
  587. package/src/lib/transfer/shipping-presets.d.ts +23 -0
  588. package/src/lib/transfer/shipping-presets.js +156 -0
  589. package/src/lib/transfer/shipping-presets.js.map +1 -0
  590. package/src/lib/transfer/tracking-transfer.d.ts +101 -0
  591. package/src/lib/transfer/tracking-transfer.js +546 -0
  592. package/src/lib/transfer/tracking-transfer.js.map +1 -0
  593. package/src/lib/transfer/tracking.server.d.ts +37 -0
  594. package/src/lib/transfer/tracking.server.js +393 -0
  595. package/src/lib/transfer/tracking.server.js.map +1 -0
  596. package/src/lib/transfer/transfer-keys.d.ts +2 -1
  597. package/src/lib/transfer/transfer-keys.js +6 -2
  598. package/src/lib/transfer/transfer-keys.js.map +1 -1
  599. package/src/lib/utils/code128.d.ts +37 -0
  600. package/src/lib/utils/code128.js +199 -0
  601. package/src/lib/utils/code128.js.map +1 -0
  602. package/src/lib/utils/order-invoice.d.ts +55 -0
  603. package/src/lib/utils/order-invoice.js +127 -0
  604. package/src/lib/utils/order-invoice.js.map +1 -0
  605. package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
  606. package/src/lib/utils/use-checkout-return-notice.js +78 -0
  607. package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
  608. package/src/lib/server/feed.js +0 -69
  609. package/src/lib/server/feed.js.map +0 -1
@@ -0,0 +1,119 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { declarePluginDomainEvents, subscribePluginDomainEvent } from "@aglyn/aglyn/plugin-manager/plugin-domain-events";
17
+ import { BUNDLE_ID } from "../constants/bundle-common.js";
18
+ import { CHECKOUT_STARTED_EVENT_DECLARATION, COMMERCE_EVENT_DECLARATIONS, ORDER_CANCELLED_EVENT, ORDER_PAID_EVENT, ORDER_REFUNDED_EVENT } from "../model/order-events.js";
19
+ /**
20
+ * Commerce's events as workflow triggers (AGL-3611).
21
+ *
22
+ * The workflows plugin listens to host events, flat key/value payloads it
23
+ * puts in an automation's scope. Commerce subscribes to its own order and
24
+ * return events and raises each as the host event its declaration names
25
+ * (`orderPaid`, `orderFulfilled`, …), declared in `plugins.config.json` so
26
+ * every trigger picker lists them. The automation engine is never imported:
27
+ * the host event bus is the seam.
28
+ */ /** The flat scope an automation reads: the order's facts, then the event's own. */ export function hostEventPayloadFor(envelope) {
29
+ var _envelope_payload, _payload_order;
30
+ var _order_totals;
31
+ const payload = (_envelope_payload = envelope.payload) != null ? _envelope_payload : {};
32
+ const order = (_payload_order = payload.order) != null ? _payload_order : {};
33
+ const flat = {};
34
+ const put = (key, value)=>{
35
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
36
+ flat[key] = value;
37
+ }
38
+ };
39
+ put('orderId', order.id);
40
+ put('orderNumber', typeof order.number === 'number' ? `#${order.number}` : order.id);
41
+ put('status', order.status);
42
+ put('channel', order.channel);
43
+ put('email', order.customerEmail);
44
+ put('name', order.customerName);
45
+ put('totalCents', (_order_totals = order.totals) == null ? void 0 : _order_totals.totalCents);
46
+ put('currency', order.currency);
47
+ const fulfillment = payload.fulfillment;
48
+ if (fulfillment) {
49
+ put('fulfillmentId', fulfillment.id);
50
+ put('carrier', fulfillment.carrier);
51
+ put('trackingNumber', fulfillment.trackingNumber);
52
+ put('trackingUrl', fulfillment.trackingUrl);
53
+ }
54
+ const refund = payload.refund;
55
+ if (refund) {
56
+ put('refundCents', refund.amountCents);
57
+ put('fullRefund', refund.full);
58
+ }
59
+ const returned = payload.return;
60
+ if (returned) {
61
+ put('returnId', returned.id);
62
+ put('returnStatus', returned.status);
63
+ put('returnRefundCents', returned.refundCents);
64
+ }
65
+ return flat;
66
+ }
67
+ /**
68
+ * Declares commerce's events and subscribes the trigger bridge, from the
69
+ * server declarations. `emitHostEvent` arrives with the first event, not
70
+ * with the boot.
71
+ */ export function registerCommerceEventTriggers() {
72
+ declarePluginDomainEvents([
73
+ ...COMMERCE_EVENT_DECLARATIONS,
74
+ CHECKOUT_STARTED_EVENT_DECLARATION
75
+ ], {
76
+ pluginId: BUNDLE_ID
77
+ });
78
+ for (const declaration of COMMERCE_EVENT_DECLARATIONS){
79
+ subscribePluginDomainEvent(declaration.event, async (envelope)=>{
80
+ const { emitCommerceHostEvent } = await import("./order-event-host-emit.js");
81
+ await emitCommerceHostEvent(envelope.hostId, declaration.hostEvent, hostEventPayloadFor(envelope));
82
+ }, // Named, so the outbox records it apart from the webhook subscriber
83
+ // this plugin also registers.
84
+ {
85
+ pluginId: BUNDLE_ID,
86
+ name: 'workflow-triggers'
87
+ });
88
+ // The merchant's own webhooks (AGL-3611). Its own subscriber name, so a
89
+ // failing endpoint is retried without raising the workflow trigger again.
90
+ subscribePluginDomainEvent(declaration.event, async (envelope)=>{
91
+ const { deliverOrderEventToWebhooks } = await import("./order-webhooks.js");
92
+ await deliverOrderEventToWebhooks(envelope);
93
+ }, {
94
+ pluginId: BUNDLE_ID,
95
+ name: 'webhooks'
96
+ });
97
+ }
98
+ // ShippingEasy (AGL-3633): a paid order is sent to the merchant's
99
+ // ShippingEasy account, and a canceled or refunded one is canceled there.
100
+ // Its own subscriber name, so a ShippingEasy outage is retried without
101
+ // re-posting the merchant's webhooks. A site with no connection costs one
102
+ // document read.
103
+ for (const event of SHIPPINGEASY_EVENTS){
104
+ subscribePluginDomainEvent(event, async (envelope)=>{
105
+ const { deliverOrderEventToShippingEasy } = await import("./shippingeasy.js");
106
+ await deliverOrderEventToShippingEasy(envelope);
107
+ }, {
108
+ pluginId: BUNDLE_ID,
109
+ name: 'shippingeasy'
110
+ });
111
+ }
112
+ }
113
+ /** The order events that change what ShippingEasy should hold. */ export const SHIPPINGEASY_EVENTS = [
114
+ ORDER_PAID_EVENT,
115
+ ORDER_CANCELLED_EVENT,
116
+ ORDER_REFUNDED_EVENT
117
+ ];
118
+
119
+ //# sourceMappingURL=order-event-triggers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/order-event-triggers.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n declarePluginDomainEvents,\n subscribePluginDomainEvent,\n type PluginDomainEventEnvelope,\n} from '@aglyn/aglyn/plugin-manager/plugin-domain-events'\nimport { BUNDLE_ID } from '../constants/bundle-common'\nimport {\n CHECKOUT_STARTED_EVENT_DECLARATION,\n COMMERCE_EVENT_DECLARATIONS,\n ORDER_CANCELLED_EVENT,\n ORDER_PAID_EVENT,\n ORDER_REFUNDED_EVENT,\n} from '../model/order-events'\n\n/**\n * Commerce's events as workflow triggers (AGL-3611).\n *\n * The workflows plugin listens to host events, flat key/value payloads it\n * puts in an automation's scope. Commerce subscribes to its own order and\n * return events and raises each as the host event its declaration names\n * (`orderPaid`, `orderFulfilled`, …), declared in `plugins.config.json` so\n * every trigger picker lists them. The automation engine is never imported:\n * the host event bus is the seam.\n */\n\n/** The flat scope an automation reads: the order's facts, then the event's own. */\nexport function hostEventPayloadFor(\n envelope: Pick<PluginDomainEventEnvelope, 'event' | 'payload'>,\n): Record<string, string | number | boolean> {\n const payload = (envelope.payload ?? {}) as Record<string, any>\n const order = (payload.order ?? {}) as Record<string, any>\n const flat: Record<string, string | number | boolean> = {}\n const put = (key: string, value: unknown) => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n flat[key] = value\n }\n }\n put('orderId', order.id)\n put('orderNumber', typeof order.number === 'number' ? `#${order.number}` : order.id)\n put('status', order.status)\n put('channel', order.channel)\n put('email', order.customerEmail)\n put('name', order.customerName)\n put('totalCents', order.totals?.totalCents)\n put('currency', order.currency)\n const fulfillment = payload.fulfillment as Record<string, any> | undefined\n if (fulfillment) {\n put('fulfillmentId', fulfillment.id)\n put('carrier', fulfillment.carrier)\n put('trackingNumber', fulfillment.trackingNumber)\n put('trackingUrl', fulfillment.trackingUrl)\n }\n const refund = payload.refund as Record<string, any> | undefined\n if (refund) {\n put('refundCents', refund.amountCents)\n put('fullRefund', refund.full)\n }\n const returned = payload.return as Record<string, any> | undefined\n if (returned) {\n put('returnId', returned.id)\n put('returnStatus', returned.status)\n put('returnRefundCents', returned.refundCents)\n }\n return flat\n}\n\n/**\n * Declares commerce's events and subscribes the trigger bridge, from the\n * server declarations. `emitHostEvent` arrives with the first event, not\n * with the boot.\n */\nexport function registerCommerceEventTriggers(): void {\n declarePluginDomainEvents([...COMMERCE_EVENT_DECLARATIONS, CHECKOUT_STARTED_EVENT_DECLARATION], { pluginId: BUNDLE_ID })\n for (const declaration of COMMERCE_EVENT_DECLARATIONS) {\n subscribePluginDomainEvent(\n declaration.event,\n async (envelope) => {\n const { emitCommerceHostEvent } = await import('./order-event-host-emit')\n await emitCommerceHostEvent(envelope.hostId, declaration.hostEvent, hostEventPayloadFor(envelope))\n },\n // Named, so the outbox records it apart from the webhook subscriber\n // this plugin also registers.\n { pluginId: BUNDLE_ID, name: 'workflow-triggers' },\n )\n // The merchant's own webhooks (AGL-3611). Its own subscriber name, so a\n // failing endpoint is retried without raising the workflow trigger again.\n subscribePluginDomainEvent(\n declaration.event,\n async (envelope) => {\n const { deliverOrderEventToWebhooks } = await import('./order-webhooks')\n await deliverOrderEventToWebhooks(envelope)\n },\n { pluginId: BUNDLE_ID, name: 'webhooks' },\n )\n }\n // ShippingEasy (AGL-3633): a paid order is sent to the merchant's\n // ShippingEasy account, and a canceled or refunded one is canceled there.\n // Its own subscriber name, so a ShippingEasy outage is retried without\n // re-posting the merchant's webhooks. A site with no connection costs one\n // document read.\n for (const event of SHIPPINGEASY_EVENTS) {\n subscribePluginDomainEvent(\n event,\n async (envelope) => {\n const { deliverOrderEventToShippingEasy } = await import('./shippingeasy')\n await deliverOrderEventToShippingEasy(envelope)\n },\n { pluginId: BUNDLE_ID, name: 'shippingeasy' },\n )\n }\n}\n\n/** The order events that change what ShippingEasy should hold. */\nexport const SHIPPINGEASY_EVENTS = [ORDER_PAID_EVENT, ORDER_CANCELLED_EVENT, ORDER_REFUNDED_EVENT] as const\n"],"names":["declarePluginDomainEvents","subscribePluginDomainEvent","BUNDLE_ID","CHECKOUT_STARTED_EVENT_DECLARATION","COMMERCE_EVENT_DECLARATIONS","ORDER_CANCELLED_EVENT","ORDER_PAID_EVENT","ORDER_REFUNDED_EVENT","hostEventPayloadFor","envelope","payload","order","flat","put","key","value","id","number","status","channel","customerEmail","customerName","totals","totalCents","currency","fulfillment","carrier","trackingNumber","trackingUrl","refund","amountCents","full","returned","return","refundCents","registerCommerceEventTriggers","pluginId","declaration","event","emitCommerceHostEvent","hostId","hostEvent","name","deliverOrderEventToWebhooks","SHIPPINGEASY_EVENTS","deliverOrderEventToShippingEasy"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { PluginDomainEvent } from '@aglyn/aglyn/plugin-manager/plugin-domain-events';
18
+ import { type PluginEventWriter } from '@aglyn/tenant-data-admin/server/plugin-event-outbox';
19
+ import type { OrderFulfillment } from '../model/commerce-orders';
20
+ import { type CheckoutStartedEventPayload } from '../model/order-events';
21
+ import type { OrderEventFulfillment, OrderEventPayload } from '../model/order-events';
22
+ /**
23
+ * Raising commerce's order events (AGL-3611). Two doors, one per kind of
24
+ * caller, so every status-change site raises its event in one line:
25
+ *
26
+ * - `stageOrderEvent` rides the caller's transaction, so the event exists
27
+ * exactly when the status does. For a write that already holds the order
28
+ * it is about to store.
29
+ * - `raiseOrderEvent` reads the order once the write has landed and queues
30
+ * the event, keyed so a redelivered webhook or a retried request raises it
31
+ * once. For a write with no transaction to ride.
32
+ *
33
+ * Neither ever throws into the write it reports: a fact that happened is not
34
+ * undone because its announcement could not be queued.
35
+ */
36
+ /** A shipment in the event's words. */
37
+ export declare function fulfillmentEventView(order: {
38
+ lineItems?: unknown;
39
+ }, fulfillment: OrderFulfillment): OrderEventFulfillment;
40
+ export interface OrderEventRequest<Payload extends OrderEventPayload> {
41
+ hostId: string;
42
+ orderId: string;
43
+ /** The occurrence: the same key raises the event once. */
44
+ key: string;
45
+ /** Everything the payload carries beside `order`. */
46
+ extra?: Omit<Payload, 'order'>;
47
+ }
48
+ /**
49
+ * Stages an event inside the caller's transaction, from the order data the
50
+ * transaction is about to store (the read merged with its patch).
51
+ */
52
+ export declare function stageOrderEvent<Payload extends OrderEventPayload>(writer: PluginEventWriter, event: PluginDomainEvent<Payload>, request: OrderEventRequest<Payload> & {
53
+ order: Record<string, unknown>;
54
+ }): void;
55
+ /** Queues an event after the write, reading the order as it now stands. */
56
+ export declare function raiseOrderEvent<Payload extends OrderEventPayload>(event: PluginDomainEvent<Payload>, request: OrderEventRequest<Payload>): Promise<void>;
57
+ /**
58
+ * Raises `checkout.started` (AGL-3639) for a checkout a shopper reached with
59
+ * an address, keyed by the session so a retried request raises it once.
60
+ * Never throws into the checkout it reports.
61
+ */
62
+ export declare function raiseCheckoutStarted(hostId: string, checkout: CheckoutStartedEventPayload['checkout']): Promise<void>;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
18
+ import { raisePluginEvent, stagePluginEvent } from "@aglyn/tenant-data-admin/server/plugin-event-outbox";
19
+ import { BUNDLE_ID } from "../constants/bundle-common.js";
20
+ import { CHECKOUT_STARTED_EVENT } from "../model/order-events.js";
21
+ import { fulfillmentLineQuantities } from "../model/order-fulfillment.js";
22
+ import { fulfillmentTrackingUrl } from "../model/tracking-url.js";
23
+ import { orderViewFromData } from "./api-v1/order-view.js";
24
+ /**
25
+ * Raising commerce's order events (AGL-3611). Two doors, one per kind of
26
+ * caller, so every status-change site raises its event in one line:
27
+ *
28
+ * - `stageOrderEvent` rides the caller's transaction, so the event exists
29
+ * exactly when the status does. For a write that already holds the order
30
+ * it is about to store.
31
+ * - `raiseOrderEvent` reads the order once the write has landed and queues
32
+ * the event, keyed so a redelivered webhook or a retried request raises it
33
+ * once. For a write with no transaction to ride.
34
+ *
35
+ * Neither ever throws into the write it reports: a fact that happened is not
36
+ * undone because its announcement could not be queued.
37
+ */ /** A shipment in the event's words. */ export function fulfillmentEventView(order, fulfillment) {
38
+ var _fulfillment_carrier, _fulfillment_trackingNumber, _fulfillment_labelUrl;
39
+ return {
40
+ id: fulfillment.id,
41
+ lines: fulfillmentLineQuantities(order, fulfillment),
42
+ carrier: (_fulfillment_carrier = fulfillment.carrier) != null ? _fulfillment_carrier : null,
43
+ trackingNumber: (_fulfillment_trackingNumber = fulfillment.trackingNumber) != null ? _fulfillment_trackingNumber : null,
44
+ trackingUrl: fulfillmentTrackingUrl(fulfillment),
45
+ labelUrl: (_fulfillment_labelUrl = fulfillment.labelUrl) != null ? _fulfillment_labelUrl : null,
46
+ at: new Date(fulfillment.atMs).toISOString()
47
+ };
48
+ }
49
+ /**
50
+ * Stages an event inside the caller's transaction, from the order data the
51
+ * transaction is about to store (the read merged with its patch).
52
+ */ export function stageOrderEvent(writer, event, request) {
53
+ try {
54
+ var _request_extra;
55
+ const firestore = firebaseAdmin.app().firestore();
56
+ stagePluginEvent(writer, firestore, {
57
+ event,
58
+ pluginId: BUNDLE_ID,
59
+ hostId: request.hostId,
60
+ key: `${request.orderId}:${request.key}`,
61
+ payload: _extends({
62
+ order: orderViewFromData(request.orderId, request.order)
63
+ }, (_request_extra = request.extra) != null ? _request_extra : {})
64
+ });
65
+ } catch (error) {
66
+ console.error(`[commerce] ${event.id} not staged for ${request.orderId}`, error);
67
+ }
68
+ }
69
+ /** Queues an event after the write, reading the order as it now stands. */ export async function raiseOrderEvent(event, request) {
70
+ try {
71
+ var _snapshot_data, _request_extra;
72
+ const firestore = firebaseAdmin.app().firestore();
73
+ const snapshot = await firestore.collection('hosts').doc(request.hostId).collection('orders').doc(request.orderId).get();
74
+ if (!snapshot.exists) return;
75
+ await raisePluginEvent(firestore, {
76
+ event,
77
+ pluginId: BUNDLE_ID,
78
+ hostId: request.hostId,
79
+ key: `${request.orderId}:${request.key}`,
80
+ payload: _extends({
81
+ order: orderViewFromData(request.orderId, (_snapshot_data = snapshot.data()) != null ? _snapshot_data : {})
82
+ }, (_request_extra = request.extra) != null ? _request_extra : {})
83
+ });
84
+ } catch (error) {
85
+ console.error(`[commerce] ${event.id} not raised for ${request.orderId}`, error);
86
+ }
87
+ }
88
+ /**
89
+ * Raises `checkout.started` (AGL-3639) for a checkout a shopper reached with
90
+ * an address, keyed by the session so a retried request raises it once.
91
+ * Never throws into the checkout it reports.
92
+ */ export async function raiseCheckoutStarted(hostId, checkout) {
93
+ if (!checkout.email) return;
94
+ try {
95
+ await raisePluginEvent(firebaseAdmin.app().firestore(), {
96
+ event: CHECKOUT_STARTED_EVENT,
97
+ pluginId: BUNDLE_ID,
98
+ hostId,
99
+ key: `checkout:${checkout.id}`,
100
+ payload: {
101
+ checkout
102
+ }
103
+ });
104
+ } catch (error) {
105
+ console.error(`[commerce] checkout.started not raised for ${checkout.id}`, error);
106
+ }
107
+ }
108
+
109
+ //# sourceMappingURL=order-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/order-events.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PluginDomainEvent } from '@aglyn/aglyn/plugin-manager/plugin-domain-events'\nimport { firebaseAdmin } from '@aglyn/tenant-data-admin'\nimport {\n type PluginEventWriter,\n raisePluginEvent,\n stagePluginEvent,\n} from '@aglyn/tenant-data-admin/server/plugin-event-outbox'\nimport { BUNDLE_ID } from '../constants/bundle-common'\nimport type { OrderFulfillment } from '../model/commerce-orders'\nimport {\n CHECKOUT_STARTED_EVENT,\n type CheckoutStartedEventPayload,\n} from '../model/order-events'\nimport type {\n OrderEventFulfillment,\n OrderEventOrder,\n OrderEventPayload,\n} from '../model/order-events'\nimport { fulfillmentLineQuantities } from '../model/order-fulfillment'\nimport { fulfillmentTrackingUrl } from '../model/tracking-url'\nimport { orderViewFromData } from './api-v1/order-view'\n\n/**\n * Raising commerce's order events (AGL-3611). Two doors, one per kind of\n * caller, so every status-change site raises its event in one line:\n *\n * - `stageOrderEvent` rides the caller's transaction, so the event exists\n * exactly when the status does. For a write that already holds the order\n * it is about to store.\n * - `raiseOrderEvent` reads the order once the write has landed and queues\n * the event, keyed so a redelivered webhook or a retried request raises it\n * once. For a write with no transaction to ride.\n *\n * Neither ever throws into the write it reports: a fact that happened is not\n * undone because its announcement could not be queued.\n */\n\n/** A shipment in the event's words. */\nexport function fulfillmentEventView(\n order: { lineItems?: unknown },\n fulfillment: OrderFulfillment,\n): OrderEventFulfillment {\n return {\n id: fulfillment.id,\n lines: fulfillmentLineQuantities(order as never, fulfillment),\n carrier: fulfillment.carrier ?? null,\n trackingNumber: fulfillment.trackingNumber ?? null,\n trackingUrl: fulfillmentTrackingUrl(fulfillment),\n labelUrl: fulfillment.labelUrl ?? null,\n at: new Date(fulfillment.atMs).toISOString(),\n }\n}\n\nexport interface OrderEventRequest<Payload extends OrderEventPayload> {\n hostId: string\n orderId: string\n /** The occurrence: the same key raises the event once. */\n key: string\n /** Everything the payload carries beside `order`. */\n extra?: Omit<Payload, 'order'>\n}\n\n/**\n * Stages an event inside the caller's transaction, from the order data the\n * transaction is about to store (the read merged with its patch).\n */\nexport function stageOrderEvent<Payload extends OrderEventPayload>(\n writer: PluginEventWriter,\n event: PluginDomainEvent<Payload>,\n request: OrderEventRequest<Payload> & { order: Record<string, unknown> },\n): void {\n try {\n const firestore = firebaseAdmin.app().firestore()\n stagePluginEvent(writer, firestore, {\n event,\n pluginId: BUNDLE_ID,\n hostId: request.hostId,\n key: `${request.orderId}:${request.key}`,\n payload: {\n order: orderViewFromData(request.orderId, request.order) as OrderEventOrder,\n ...(request.extra ?? {}),\n },\n })\n } catch (error) {\n console.error(`[commerce] ${event.id} not staged for ${request.orderId}`, error)\n }\n}\n\n/** Queues an event after the write, reading the order as it now stands. */\nexport async function raiseOrderEvent<Payload extends OrderEventPayload>(\n event: PluginDomainEvent<Payload>,\n request: OrderEventRequest<Payload>,\n): Promise<void> {\n try {\n const firestore = firebaseAdmin.app().firestore()\n const snapshot = await firestore\n .collection('hosts')\n .doc(request.hostId)\n .collection('orders')\n .doc(request.orderId)\n .get()\n if (!snapshot.exists) return\n await raisePluginEvent(firestore, {\n event,\n pluginId: BUNDLE_ID,\n hostId: request.hostId,\n key: `${request.orderId}:${request.key}`,\n payload: {\n order: orderViewFromData(request.orderId, snapshot.data() ?? {}) as OrderEventOrder,\n ...(request.extra ?? {}),\n },\n })\n } catch (error) {\n console.error(`[commerce] ${event.id} not raised for ${request.orderId}`, error)\n }\n}\n\n/**\n * Raises `checkout.started` (AGL-3639) for a checkout a shopper reached with\n * an address, keyed by the session so a retried request raises it once.\n * Never throws into the checkout it reports.\n */\nexport async function raiseCheckoutStarted(\n hostId: string,\n checkout: CheckoutStartedEventPayload['checkout'],\n): Promise<void> {\n if (!checkout.email) return\n try {\n await raisePluginEvent(firebaseAdmin.app().firestore(), {\n event: CHECKOUT_STARTED_EVENT,\n pluginId: BUNDLE_ID,\n hostId,\n key: `checkout:${checkout.id}`,\n payload: { checkout },\n })\n } catch (error) {\n console.error(`[commerce] checkout.started not raised for ${checkout.id}`, error)\n }\n}\n"],"names":["firebaseAdmin","raisePluginEvent","stagePluginEvent","BUNDLE_ID","CHECKOUT_STARTED_EVENT","fulfillmentLineQuantities","fulfillmentTrackingUrl","orderViewFromData","fulfillmentEventView","order","fulfillment","id","lines","carrier","trackingNumber","trackingUrl","labelUrl","at","Date","atMs","toISOString","stageOrderEvent","writer","event","request","firestore","app","pluginId","hostId","key","orderId","payload","extra","error","console","raiseOrderEvent","snapshot","collection","doc","get","exists","data","raiseCheckoutStarted","checkout","email"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { OrderHistoryEntry, OrderHistoryPageRequest } from '../model/order-history';
18
+ /** The most one page hands out. */
19
+ export declare const ORDER_HISTORY_MAX_PAGE = 200;
20
+ /** One stored order → its history entry. */
21
+ export declare function orderHistoryEntry(id: string, data: Record<string, unknown>): OrderHistoryEntry;
22
+ /** A page of a site's orders created in [fromMs, untilMs), oldest first. */
23
+ export declare function listOrderHistory(request: OrderHistoryPageRequest, firestore?: FirebaseFirestore.Firestore): Promise<OrderHistoryEntry[]>;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * The order history another plugin reads (AGL-3614): a page of a site's
18
+ * orders by when they were created, in the public API's shape. See
19
+ * `model/order-history.ts` for the contract.
20
+ */ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
21
+ import { orderViewFromData } from "./api-v1/order-view.js";
22
+ /** The statuses of an order that was paid. */ const PAID_STATUSES = new Set([
23
+ 'paid',
24
+ 'partially_fulfilled',
25
+ 'fulfilled',
26
+ 'delivered',
27
+ 'refunded'
28
+ ]);
29
+ /** The most one page hands out. */ export const ORDER_HISTORY_MAX_PAGE = 200;
30
+ const finiteMs = (value)=>{
31
+ const ms = Number(value);
32
+ return Number.isFinite(ms) && ms > 0 ? ms : null;
33
+ };
34
+ /** One stored order → its history entry. */ export function orderHistoryEntry(id, data) {
35
+ var _finiteMs, _data_status, _data_refundedCents, _finiteMs1;
36
+ const timeline = Array.isArray(data['timeline']) ? data['timeline'] : [];
37
+ const refunds = timeline.filter((event)=>{
38
+ var _event_event;
39
+ return /refund/i.test(String((_event_event = event['event']) != null ? _event_event : ''));
40
+ }).map((event)=>finiteMs(event['atMs'])).filter((at)=>at !== null);
41
+ const createdAtMs = (_finiteMs = finiteMs(data['createdAtMs'])) != null ? _finiteMs : 0;
42
+ const status = String((_data_status = data['status']) != null ? _data_status : '');
43
+ // An order is paid as it is created; a cancelled one was paid only if
44
+ // money came back from it.
45
+ const paid = PAID_STATUSES.has(status) || status === 'cancelled' && Number((_data_refundedCents = data['refundedCents']) != null ? _data_refundedCents : 0) > 0;
46
+ return {
47
+ id,
48
+ createdAtMs,
49
+ paidAtMs: paid ? (_finiteMs1 = finiteMs(data['paidAtMs'])) != null ? _finiteMs1 : createdAtMs : null,
50
+ lastRefundAtMs: refunds.length ? Math.max(...refunds) : null,
51
+ taxInclusive: data['taxInclusive'] === true,
52
+ taxRateId: typeof data['taxRateId'] === 'string' && data['taxRateId'] ? data['taxRateId'] : null,
53
+ order: orderViewFromData(id, data)
54
+ };
55
+ }
56
+ /** A page of a site's orders created in [fromMs, untilMs), oldest first. */ export async function listOrderHistory(request, firestore = firebaseAdmin.app().firestore()) {
57
+ var _request_hostId;
58
+ const hostId = String((_request_hostId = request.hostId) != null ? _request_hostId : '').trim();
59
+ if (!hostId || !(request.untilMs > request.fromMs)) return [];
60
+ const limit = Math.max(1, Math.min(ORDER_HISTORY_MAX_PAGE, Math.floor(request.limit) || 1));
61
+ const page = await firestore.collection('hosts').doc(hostId).collection('orders').where('createdAtMs', '>=', request.fromMs).where('createdAtMs', '<', request.untilMs).orderBy('createdAtMs', 'asc').limit(limit).get();
62
+ return page.docs.map((doc)=>orderHistoryEntry(doc.id, doc.data()));
63
+ }
64
+
65
+ //# sourceMappingURL=order-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/order-history.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The order history another plugin reads (AGL-3614): a page of a site's\n * orders by when they were created, in the public API's shape. See\n * `model/order-history.ts` for the contract.\n */\n\nimport { firebaseAdmin } from '@aglyn/tenant-data-admin'\nimport type { OrderHistoryEntry, OrderHistoryPageRequest } from '../model/order-history'\nimport type { OrderStatus } from '../model/commerce-orders'\nimport type { OrderEventOrder } from '../model/order-events'\nimport { orderViewFromData } from './api-v1/order-view'\n\n/** The statuses of an order that was paid. */\nconst PAID_STATUSES: ReadonlySet<string> = new Set<OrderStatus>(['paid', 'partially_fulfilled', 'fulfilled', 'delivered', 'refunded'])\n\n/** The most one page hands out. */\nexport const ORDER_HISTORY_MAX_PAGE = 200\n\nconst finiteMs = (value: unknown): number | null => {\n const ms = Number(value)\n return Number.isFinite(ms) && ms > 0 ? ms : null\n}\n\n/** One stored order → its history entry. */\nexport function orderHistoryEntry(id: string, data: Record<string, unknown>): OrderHistoryEntry {\n const timeline = Array.isArray(data['timeline']) ? (data['timeline'] as Array<Record<string, unknown>>) : []\n const refunds = timeline\n .filter((event) => /refund/i.test(String(event['event'] ?? '')))\n .map((event) => finiteMs(event['atMs']))\n .filter((at): at is number => at !== null)\n const createdAtMs = finiteMs(data['createdAtMs']) ?? 0\n const status = String(data['status'] ?? '')\n // An order is paid as it is created; a cancelled one was paid only if\n // money came back from it.\n const paid = PAID_STATUSES.has(status) || (status === 'cancelled' && Number(data['refundedCents'] ?? 0) > 0)\n return {\n id,\n createdAtMs,\n paidAtMs: paid ? (finiteMs(data['paidAtMs']) ?? createdAtMs) : null,\n lastRefundAtMs: refunds.length ? Math.max(...refunds) : null,\n taxInclusive: data['taxInclusive'] === true,\n taxRateId: typeof data['taxRateId'] === 'string' && data['taxRateId'] ? data['taxRateId'] : null,\n order: orderViewFromData(id, data) as unknown as OrderEventOrder,\n }\n}\n\n/** A page of a site's orders created in [fromMs, untilMs), oldest first. */\nexport async function listOrderHistory(\n request: OrderHistoryPageRequest,\n firestore: FirebaseFirestore.Firestore = firebaseAdmin.app().firestore(),\n): Promise<OrderHistoryEntry[]> {\n const hostId = String(request.hostId ?? '').trim()\n if (!hostId || !(request.untilMs > request.fromMs)) return []\n const limit = Math.max(1, Math.min(ORDER_HISTORY_MAX_PAGE, Math.floor(request.limit) || 1))\n const page = await firestore\n .collection('hosts')\n .doc(hostId)\n .collection('orders')\n .where('createdAtMs', '>=', request.fromMs)\n .where('createdAtMs', '<', request.untilMs)\n .orderBy('createdAtMs', 'asc')\n .limit(limit)\n .get()\n return page.docs.map((doc) => orderHistoryEntry(doc.id, doc.data()))\n}\n"],"names":["firebaseAdmin","orderViewFromData","PAID_STATUSES","Set","ORDER_HISTORY_MAX_PAGE","finiteMs","value","ms","Number","isFinite","orderHistoryEntry","id","data","timeline","Array","isArray","refunds","filter","event","test","String","map","at","createdAtMs","status","paid","has","paidAtMs","lastRefundAtMs","length","Math","max","taxInclusive","taxRateId","order","listOrderHistory","request","firestore","app","hostId","trim","untilMs","fromMs","limit","min","floor","page","collection","doc","where","orderBy","get","docs"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;CAIC,GAED,SAASA,aAAa,QAAQ,2BAA0B;AAIxD,SAASC,iBAAiB,QAAQ,yBAAqB;AAEvD,4CAA4C,GAC5C,MAAMC,gBAAqC,IAAIC,IAAiB;IAAC;IAAQ;IAAuB;IAAa;IAAa;CAAW;AAErI,iCAAiC,GACjC,OAAO,MAAMC,yBAAyB,IAAG;AAEzC,MAAMC,WAAW,CAACC;IAChB,MAAMC,KAAKC,OAAOF;IAClB,OAAOE,OAAOC,QAAQ,CAACF,OAAOA,KAAK,IAAIA,KAAK;AAC9C;AAEA,0CAA0C,GAC1C,OAAO,SAASG,kBAAkBC,EAAU,EAAEC,IAA6B;QAMrDP,WACEO,cAGsDA,qBAIxDP;IAbpB,MAAMQ,WAAWC,MAAMC,OAAO,CAACH,IAAI,CAAC,WAAW,IAAKA,IAAI,CAAC,WAAW,GAAsC,EAAE;IAC5G,MAAMI,UAAUH,SACbI,MAAM,CAAC,CAACC;YAAgCA;eAAtB,UAAUC,IAAI,CAACC,QAAOF,eAAAA,KAAK,CAAC,QAAQ,YAAdA,eAAkB;OAC1DG,GAAG,CAAC,CAACH,QAAUb,SAASa,KAAK,CAAC,OAAO,GACrCD,MAAM,CAAC,CAACK,KAAqBA,OAAO;IACvC,MAAMC,eAAclB,YAAAA,SAASO,IAAI,CAAC,cAAc,aAA5BP,YAAiC;IACrD,MAAMmB,SAASJ,QAAOR,eAAAA,IAAI,CAAC,SAAS,YAAdA,eAAkB;IACxC,sEAAsE;IACtE,2BAA2B;IAC3B,MAAMa,OAAOvB,cAAcwB,GAAG,CAACF,WAAYA,WAAW,eAAehB,QAAOI,sBAAAA,IAAI,CAAC,gBAAgB,YAArBA,sBAAyB,KAAK;IAC1G,OAAO;QACLD;QACAY;QACAI,UAAUF,QAAQpB,aAAAA,SAASO,IAAI,CAAC,WAAW,aAAzBP,aAA8BkB,cAAe;QAC/DK,gBAAgBZ,QAAQa,MAAM,GAAGC,KAAKC,GAAG,IAAIf,WAAW;QACxDgB,cAAcpB,IAAI,CAAC,eAAe,KAAK;QACvCqB,WAAW,OAAOrB,IAAI,CAAC,YAAY,KAAK,YAAYA,IAAI,CAAC,YAAY,GAAGA,IAAI,CAAC,YAAY,GAAG;QAC5FsB,OAAOjC,kBAAkBU,IAAIC;IAC/B;AACF;AAEA,0EAA0E,GAC1E,OAAO,eAAeuB,iBACpBC,OAAgC,EAChCC,YAAyCrC,cAAcsC,GAAG,GAAGD,SAAS,EAAE;QAElDD;IAAtB,MAAMG,SAASnB,QAAOgB,kBAAAA,QAAQG,MAAM,YAAdH,kBAAkB,IAAII,IAAI;IAChD,IAAI,CAACD,UAAU,CAAEH,CAAAA,QAAQK,OAAO,GAAGL,QAAQM,MAAM,AAAD,GAAI,OAAO,EAAE;IAC7D,MAAMC,QAAQb,KAAKC,GAAG,CAAC,GAAGD,KAAKc,GAAG,CAACxC,wBAAwB0B,KAAKe,KAAK,CAACT,QAAQO,KAAK,KAAK;IACxF,MAAMG,OAAO,MAAMT,UAChBU,UAAU,CAAC,SACXC,GAAG,CAACT,QACJQ,UAAU,CAAC,UACXE,KAAK,CAAC,eAAe,MAAMb,QAAQM,MAAM,EACzCO,KAAK,CAAC,eAAe,KAAKb,QAAQK,OAAO,EACzCS,OAAO,CAAC,eAAe,OACvBP,KAAK,CAACA,OACNQ,GAAG;IACN,OAAOL,KAAKM,IAAI,CAAC/B,GAAG,CAAC,CAAC2B,MAAQtC,kBAAkBsC,IAAIrC,EAAE,EAAEqC,IAAIpC,IAAI;AAClE"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import * as CommerceModel from '../model';
18
+ /**
19
+ * Every message a buyer gets about their order, through ONE door (AGL-3610).
20
+ *
21
+ * Before this, the buyer heard about their order once — the online receipt —
22
+ * and never again: a register sale sent nothing, a paid payment link sent
23
+ * nothing, and shipping, delivery, refunds and cancellations were silent
24
+ * (`fulfill-order.ts` said so on purpose). Every path that moves an order now
25
+ * makes one call here, and this decides what that moment owes the buyer:
26
+ *
27
+ * - whether the store turned the moment off (`buyerNotifications` on the
28
+ * store settings; ON unless explicitly off — see the model),
29
+ * - which channels can carry it (email when mail is configured and the
30
+ * order has an address; a text when the platform's SMS provider is
31
+ * configured and the order carries the buyer's phone),
32
+ * - and whether it was already sent.
33
+ *
34
+ * ## ONCE PER MOMENT, PER OCCURRENCE, PER CHANNEL
35
+ *
36
+ * Stripe redelivers webhooks, admins click twice, a lost response is retried.
37
+ * Each message is CLAIMED before it is sent: a transaction reads the order's
38
+ * `buyerNotifications` map and writes a `sending` marker for
39
+ * `event__occurrence__channel` only if none is there. Exactly one of two
40
+ * racing callers wins the claim; the other returns `already`. The occurrence
41
+ * is the shipment id for `shipped` and the refund id for `refunded`, so a
42
+ * second parcel or a second partial refund is a new message, while a
43
+ * redelivered one is not.
44
+ *
45
+ * A send that fails RELEASES its claim so the next attempt can try again. A
46
+ * process that dies between claim and send leaves the marker in `sending` and
47
+ * the message unsent — at most once, never twice, which is the right side to
48
+ * fail on for mail a buyer reads as "did they charge me again?".
49
+ *
50
+ * ## NEVER THROWS
51
+ *
52
+ * Every caller is past its point of no return — money moved, an order
53
+ * shipped — so a mail outage must not turn into a 500 that invites the
54
+ * merchant to do it again. Failures are logged and returned as outcomes.
55
+ *
56
+ * Shared with the order-processing and POS lanes (AGL-3611, AGL-3607): call
57
+ * {@link notifyOrderBuyer} from any new path that moves an order, and
58
+ * {@link sendOrderReceipt} for an explicit, merchant-asked send.
59
+ */
60
+ export type OrderBuyerEvent = CommerceModel.BuyerNotificationEvent;
61
+ export interface OrderRef {
62
+ hostId: string;
63
+ orderId: string;
64
+ }
65
+ export interface NotifyOrderBuyerOptions {
66
+ /** `shipped`: which shipment. Absent means the order's latest one. */
67
+ fulfillmentId?: string;
68
+ /** `refunded`: the refund's own id (Stripe's), the occurrence key. */
69
+ refundId?: string;
70
+ /** `refunded`: what THIS refund moved, in cents. */
71
+ refundCents?: number;
72
+ /** `refunded`: the line indexes refunded by name, when any were. */
73
+ refundLineIndexes?: readonly number[];
74
+ /** `refunded`: whether this refund closed the order. */
75
+ fullyRefunded?: boolean;
76
+ /**
77
+ * The buyer's address when the order document does not carry it — a POS
78
+ * folio sale attributed to the reservation's guest, a payment link whose
79
+ * payer Stripe named. The order's own `customerEmail` wins when present.
80
+ */
81
+ email?: string | null;
82
+ /** Injected in specs. */
83
+ firestore?: FirebaseFirestore.Firestore;
84
+ }
85
+ export type OrderBuyerChannelOutcome = {
86
+ channel: CommerceModel.BuyerNotificationChannel;
87
+ outcome: 'sent';
88
+ } | {
89
+ channel: CommerceModel.BuyerNotificationChannel;
90
+ outcome: 'already';
91
+ } | {
92
+ channel: CommerceModel.BuyerNotificationChannel;
93
+ outcome: 'failed';
94
+ error: string;
95
+ };
96
+ export type NotifyOrderBuyerOutcome = {
97
+ outcome: 'disabled';
98
+ } | {
99
+ outcome: 'no_such_order';
100
+ }
101
+ /** The moment does not apply to this order (a counter sale "shipping"). */
102
+ | {
103
+ outcome: 'not_applicable';
104
+ }
105
+ /** No channel could carry it: no address, no mail or text configured. */
106
+ | {
107
+ outcome: 'no_recipient';
108
+ } | {
109
+ outcome: 'handled';
110
+ channels: OrderBuyerChannelOutcome[];
111
+ };
112
+ interface ComposedMessage {
113
+ emailKey: string;
114
+ /** Tokens for the designed email. */
115
+ tokens: Record<string, string>;
116
+ /** Subject when the template renders none. */
117
+ subject: string;
118
+ /** Plain-text body when the template renders none. */
119
+ text: string;
120
+ /** The text message, kept short: one or two segments. */
121
+ sms: string;
122
+ /** The order timeline line recording the send, channel appended. */
123
+ timelineDetail: string;
124
+ }
125
+ /** What the moment says. `null` when it does not apply to this order. */
126
+ export declare function composeOrderBuyerMessage(input: {
127
+ event: OrderBuyerEvent;
128
+ order: CommerceModel.HostOrder;
129
+ orderId: string;
130
+ businessName: string;
131
+ currency: string;
132
+ statusUrl: string;
133
+ receiptFooter?: string;
134
+ /** Absolute digital-delivery links for a receipt, by product id. */
135
+ downloadLinks?: Record<string, string>;
136
+ options?: NotifyOrderBuyerOptions;
137
+ }): (ComposedMessage & {
138
+ occurrence: string;
139
+ }) | null;
140
+ /**
141
+ * Tells the buyer about one moment in their order's life, once. See the
142
+ * module header. Never throws.
143
+ */
144
+ export declare function notifyOrderBuyer(ref: OrderRef, event: OrderBuyerEvent, options?: NotifyOrderBuyerOptions): Promise<NotifyOrderBuyerOutcome>;
145
+ export type SendOrderReceiptOutcome = {
146
+ outcome: 'sent';
147
+ channel: CommerceModel.BuyerNotificationChannel;
148
+ } | {
149
+ outcome: 'no_such_order';
150
+ } | {
151
+ outcome: 'not_configured';
152
+ } | {
153
+ outcome: 'invalid_recipient';
154
+ } | {
155
+ outcome: 'failed';
156
+ error: string;
157
+ };
158
+ /**
159
+ * Sends the receipt again, on the merchant's say-so, to the address or number
160
+ * they gave (AGL-3610) — the order dialog's "Resend receipt".
161
+ *
162
+ * NOT idempotent, on purpose: a resend IS the second send. The route in front
163
+ * of it is rate-limited instead, and the send is recorded on the timeline so
164
+ * the merchant can see it went. It does not consult the store's moment
165
+ * switches either — a merchant who turned automatic receipts off can still
166
+ * hand one to a customer who asks.
167
+ */
168
+ export declare function sendOrderReceipt(ref: OrderRef, input: {
169
+ channel: CommerceModel.BuyerNotificationChannel;
170
+ to: string;
171
+ firestore?: FirebaseFirestore.Firestore;
172
+ }): Promise<SendOrderReceiptOutcome>;
173
+ /**
174
+ * What the online receipt sends needs from this module (AGL-3610): whether
175
+ * the store left receipts on, and the `order.number` / `order.statusUrl`
176
+ * tokens. The cart and buy-now receipts compose their own summary (license
177
+ * keys and download links built from the Stripe session) inside the
178
+ * webhook's redelivery guard, so they ask here rather than route through
179
+ * {@link notifyOrderBuyer}.
180
+ */
181
+ export declare function onlineReceiptExtras(hostId: string, orderId: string, firestore?: FirebaseFirestore.Firestore): Promise<{
182
+ enabled: boolean;
183
+ tokens: Record<string, string>;
184
+ }>;
185
+ export {};