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

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 (581) 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/customer-notifications-card.component.d.ts +19 -0
  39. package/src/lib/components/console/customer-notifications-card.component.js +149 -0
  40. package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
  41. package/src/lib/components/console/host-orders-card.component.js +84 -5
  42. package/src/lib/components/console/host-orders-card.component.js.map +1 -1
  43. package/src/lib/components/console/locations-card.component.js +164 -57
  44. package/src/lib/components/console/locations-card.component.js.map +1 -1
  45. package/src/lib/components/console/order-detail-dialog.component.js +209 -61
  46. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  47. package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
  48. package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
  49. package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
  50. package/src/lib/components/console/order-invoice.component.d.ts +33 -0
  51. package/src/lib/components/console/order-invoice.component.js +81 -0
  52. package/src/lib/components/console/order-invoice.component.js.map +1 -0
  53. package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
  54. package/src/lib/components/console/order-receipt-resend.component.js +203 -0
  55. package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
  56. package/src/lib/components/console/order-returns.component.d.ts +36 -0
  57. package/src/lib/components/console/order-returns.component.js +142 -0
  58. package/src/lib/components/console/order-returns.component.js.map +1 -0
  59. package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
  60. package/src/lib/components/console/order-shipping-actions.component.js +149 -0
  61. package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
  62. package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
  63. package/src/lib/components/console/order-webhooks-card.component.js +623 -0
  64. package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
  65. package/src/lib/components/console/order-zones.d.ts +155 -0
  66. package/src/lib/components/console/order-zones.js +40 -0
  67. package/src/lib/components/console/order-zones.js.map +1 -0
  68. package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
  69. package/src/lib/components/console/payment-methods-card.component.js +395 -0
  70. package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
  71. package/src/lib/components/console/pos/pos-api.d.ts +124 -0
  72. package/src/lib/components/console/pos/pos-api.js +101 -0
  73. package/src/lib/components/console/pos/pos-api.js.map +1 -0
  74. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
  75. package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
  76. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
  77. package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
  78. package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
  79. package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
  80. package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
  81. package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
  82. package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
  83. package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
  84. package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
  85. package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
  86. package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
  87. package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
  88. package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
  89. package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
  90. package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
  91. package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
  92. package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
  93. package/src/lib/components/console/pos/use-pos-display.js +161 -0
  94. package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
  95. package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
  96. package/src/lib/components/console/pos-devices-card.component.js +546 -0
  97. package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
  98. package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
  99. package/src/lib/components/console/pos-display/brand-screen.js +85 -0
  100. package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
  101. package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
  102. package/src/lib/components/console/pos-display/cart-screen.js +166 -0
  103. package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
  104. package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
  105. package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
  106. package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
  107. package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
  108. package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
  109. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
  110. package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
  111. package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
  112. package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
  113. package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
  114. package/src/lib/components/console/pos-display/tip-screen.js +211 -0
  115. package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
  116. package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
  117. package/src/lib/components/console/pos-display-page.component.js +407 -0
  118. package/src/lib/components/console/pos-display-page.component.js.map +1 -0
  119. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
  120. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
  121. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
  122. package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
  123. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
  124. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
  125. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
  126. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
  127. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
  128. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
  129. package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
  130. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
  131. package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
  132. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
  133. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
  134. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
  135. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
  136. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
  137. package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
  138. package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
  139. package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
  140. package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
  141. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
  142. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
  143. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
  144. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
  145. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
  146. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
  147. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
  148. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
  149. package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
  150. package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
  151. package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
  152. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
  153. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
  154. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
  155. package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
  156. package/src/lib/components/console/pos-ops/register-ops.js +28 -0
  157. package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
  158. package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
  159. package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
  160. package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
  161. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
  162. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
  163. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
  164. package/src/lib/components/console/pos-page.component.d.ts +13 -5
  165. package/src/lib/components/console/pos-page.component.js +729 -657
  166. package/src/lib/components/console/pos-page.component.js.map +1 -1
  167. package/src/lib/components/console/product-editor-dialog.component.js +51 -7
  168. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  169. package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
  170. package/src/lib/components/console/product-labels-dialog.component.js +197 -0
  171. package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
  172. package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
  173. package/src/lib/components/console/product-register-fields.component.js +241 -0
  174. package/src/lib/components/console/product-register-fields.component.js.map +1 -0
  175. package/src/lib/components/console/product-zones.d.ts +44 -0
  176. package/src/lib/components/console/product-zones.js.map +1 -1
  177. package/src/lib/components/console/products-hub-card.component.js +12 -0
  178. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  179. package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
  180. package/src/lib/components/console/register-hardware-card.component.js +826 -0
  181. package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
  182. package/src/lib/components/console/registers-card.component.js +24 -5
  183. package/src/lib/components/console/registers-card.component.js.map +1 -1
  184. package/src/lib/components/console/return-actions.d.ts +38 -0
  185. package/src/lib/components/console/return-actions.js +76 -0
  186. package/src/lib/components/console/return-actions.js.map +1 -0
  187. package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
  188. package/src/lib/components/console/return-detail-dialog.component.js +718 -0
  189. package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
  190. package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
  191. package/src/lib/components/console/return-settings-card.component.js +195 -0
  192. package/src/lib/components/console/return-settings-card.component.js.map +1 -0
  193. package/src/lib/components/console/return-zones.d.ts +87 -0
  194. package/src/lib/components/console/return-zones.js +31 -0
  195. package/src/lib/components/console/return-zones.js.map +1 -0
  196. package/src/lib/components/console/returns-card.component.d.ts +45 -0
  197. package/src/lib/components/console/returns-card.component.js +159 -0
  198. package/src/lib/components/console/returns-card.component.js.map +1 -0
  199. package/src/lib/components/console/shipping-settings-card.component.js +161 -5
  200. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
  201. package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
  202. package/src/lib/components/console/shippingeasy-card.component.js +378 -0
  203. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
  204. package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
  205. package/src/lib/components/console/shipstation-card.component.js +345 -0
  206. package/src/lib/components/console/shipstation-card.component.js.map +1 -0
  207. package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
  208. package/src/lib/components/console/start-return-dialog.component.js +243 -0
  209. package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
  210. package/src/lib/components/console/stock-movements-card.component.js +2 -1
  211. package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
  212. package/src/lib/components/console/store-settings-card.component.js +2 -66
  213. package/src/lib/components/console/store-settings-card.component.js.map +1 -1
  214. package/src/lib/components/console/store-zones.d.ts +42 -0
  215. package/src/lib/components/console/store-zones.js +39 -0
  216. package/src/lib/components/console/store-zones.js.map +1 -0
  217. package/src/lib/components/order-status.d.ts +36 -0
  218. package/src/lib/components/order-status.js +502 -0
  219. package/src/lib/components/order-status.js.map +1 -0
  220. package/src/lib/components/product-detail.js +41 -2
  221. package/src/lib/components/product-detail.js.map +1 -1
  222. package/src/lib/components/return-request.d.ts +32 -0
  223. package/src/lib/components/return-request.js +576 -0
  224. package/src/lib/components/return-request.js.map +1 -0
  225. package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
  226. package/src/lib/components/storefront-payment-appearance.js +114 -0
  227. package/src/lib/components/storefront-payment-appearance.js.map +1 -0
  228. package/src/lib/components/storefront-payment-element.d.ts +57 -1
  229. package/src/lib/components/storefront-payment-element.js +332 -33
  230. package/src/lib/components/storefront-payment-element.js.map +1 -1
  231. package/src/lib/constants/order-status.d.ts +22 -0
  232. package/src/lib/constants/order-status.js +22 -0
  233. package/src/lib/constants/order-status.js.map +1 -0
  234. package/src/lib/constants/return-request.d.ts +27 -0
  235. package/src/lib/constants/return-request.js +32 -0
  236. package/src/lib/constants/return-request.js.map +1 -0
  237. package/src/lib/constants/stock-movement-query.js +2 -1
  238. package/src/lib/constants/stock-movement-query.js.map +1 -1
  239. package/src/lib/declarations.console-server.js +9 -0
  240. package/src/lib/declarations.console-server.js.map +1 -1
  241. package/src/lib/declarations.server.d.ts +2 -1
  242. package/src/lib/declarations.server.js +47 -1
  243. package/src/lib/declarations.server.js.map +1 -1
  244. package/src/lib/model/buyer-notifications.d.ts +59 -0
  245. package/src/lib/model/buyer-notifications.js +97 -0
  246. package/src/lib/model/buyer-notifications.js.map +1 -0
  247. package/src/lib/model/commerce-orders.d.ts +127 -1
  248. package/src/lib/model/commerce-orders.js +24 -15
  249. package/src/lib/model/commerce-orders.js.map +1 -1
  250. package/src/lib/model/commerce-payment-methods.d.ts +146 -0
  251. package/src/lib/model/commerce-payment-methods.js +247 -0
  252. package/src/lib/model/commerce-payment-methods.js.map +1 -0
  253. package/src/lib/model/commerce-pos-ops.d.ts +437 -0
  254. package/src/lib/model/commerce-pos-ops.js +721 -0
  255. package/src/lib/model/commerce-pos-ops.js.map +1 -0
  256. package/src/lib/model/commerce-pos.d.ts +263 -0
  257. package/src/lib/model/commerce-pos.js +375 -0
  258. package/src/lib/model/commerce-pos.js.map +1 -0
  259. package/src/lib/model/commerce-printers.d.ts +211 -0
  260. package/src/lib/model/commerce-printers.js +181 -0
  261. package/src/lib/model/commerce-printers.js.map +1 -0
  262. package/src/lib/model/commerce-receipt.d.ts +97 -0
  263. package/src/lib/model/commerce-receipt.js +180 -0
  264. package/src/lib/model/commerce-receipt.js.map +1 -0
  265. package/src/lib/model/commerce-returns.d.ts +207 -0
  266. package/src/lib/model/commerce-returns.js +300 -0
  267. package/src/lib/model/commerce-returns.js.map +1 -0
  268. package/src/lib/model/commerce-shipping.d.ts +44 -1
  269. package/src/lib/model/commerce-shipping.js +53 -9
  270. package/src/lib/model/commerce-shipping.js.map +1 -1
  271. package/src/lib/model/commerce-tax-engine.d.ts +90 -0
  272. package/src/lib/model/commerce-tax-engine.js +129 -0
  273. package/src/lib/model/commerce-tax-engine.js.map +1 -0
  274. package/src/lib/model/commerce.d.ts +88 -2
  275. package/src/lib/model/commerce.js +89 -1
  276. package/src/lib/model/commerce.js.map +1 -1
  277. package/src/lib/model/index.d.ts +15 -0
  278. package/src/lib/model/index.js +15 -0
  279. package/src/lib/model/index.js.map +1 -1
  280. package/src/lib/model/order-events.d.ts +154 -0
  281. package/src/lib/model/order-events.js +153 -0
  282. package/src/lib/model/order-events.js.map +1 -0
  283. package/src/lib/model/order-fulfillment.d.ts +117 -0
  284. package/src/lib/model/order-fulfillment.js +217 -0
  285. package/src/lib/model/order-fulfillment.js.map +1 -0
  286. package/src/lib/model/order-history.d.ts +58 -0
  287. package/src/lib/model/order-history.js +22 -0
  288. package/src/lib/model/order-history.js.map +1 -0
  289. package/src/lib/model/order-list-fields.d.ts +9 -1
  290. package/src/lib/model/order-list-fields.js +7 -1
  291. package/src/lib/model/order-list-fields.js.map +1 -1
  292. package/src/lib/model/order-shipping-export.d.ts +91 -0
  293. package/src/lib/model/order-shipping-export.js +192 -0
  294. package/src/lib/model/order-shipping-export.js.map +1 -0
  295. package/src/lib/model/order-status-view.d.ts +103 -0
  296. package/src/lib/model/order-status-view.js +156 -0
  297. package/src/lib/model/order-status-view.js.map +1 -0
  298. package/src/lib/model/order-webhooks.d.ts +142 -0
  299. package/src/lib/model/order-webhooks.js +91 -0
  300. package/src/lib/model/order-webhooks.js.map +1 -0
  301. package/src/lib/model/product-channel.d.ts +56 -0
  302. package/src/lib/model/product-channel.js +86 -0
  303. package/src/lib/model/product-channel.js.map +1 -0
  304. package/src/lib/model/product-modifiers.d.ts +80 -0
  305. package/src/lib/model/product-modifiers.js +140 -0
  306. package/src/lib/model/product-modifiers.js.map +1 -0
  307. package/src/lib/model/shippingeasy.d.ts +94 -0
  308. package/src/lib/model/shippingeasy.js +267 -0
  309. package/src/lib/model/shippingeasy.js.map +1 -0
  310. package/src/lib/model/shipstation.d.ts +125 -0
  311. package/src/lib/model/shipstation.js +399 -0
  312. package/src/lib/model/shipstation.js.map +1 -0
  313. package/src/lib/model/smart-collection-reads.d.ts +32 -0
  314. package/src/lib/model/smart-collection-reads.js +63 -0
  315. package/src/lib/model/smart-collection-reads.js.map +1 -0
  316. package/src/lib/model/tracking-url.d.ts +74 -0
  317. package/src/lib/model/tracking-url.js +159 -0
  318. package/src/lib/model/tracking-url.js.map +1 -0
  319. package/src/lib/plugin-config.d.ts +13 -0
  320. package/src/lib/plugin-config.js +77 -5
  321. package/src/lib/plugin-config.js.map +1 -1
  322. package/src/lib/plugin.js +23 -0
  323. package/src/lib/plugin.js.map +1 -1
  324. package/src/lib/pos-ops-config.d.ts +39 -0
  325. package/src/lib/pos-ops-config.js +88 -0
  326. package/src/lib/pos-ops-config.js.map +1 -0
  327. package/src/lib/printing/print-document.d.ts +106 -0
  328. package/src/lib/printing/print-document.js +464 -0
  329. package/src/lib/printing/print-document.js.map +1 -0
  330. package/src/lib/printing/product-labels.d.ts +58 -0
  331. package/src/lib/printing/product-labels.js +116 -0
  332. package/src/lib/printing/product-labels.js.map +1 -0
  333. package/src/lib/printing/render-epson.d.ts +57 -0
  334. package/src/lib/printing/render-epson.js +135 -0
  335. package/src/lib/printing/render-epson.js.map +1 -0
  336. package/src/lib/printing/render-star.d.ts +45 -0
  337. package/src/lib/printing/render-star.js +100 -0
  338. package/src/lib/printing/render-star.js.map +1 -0
  339. package/src/lib/printing/render-text.d.ts +25 -0
  340. package/src/lib/printing/render-text.js +53 -0
  341. package/src/lib/printing/render-text.js.map +1 -0
  342. package/src/lib/server/api-v1/openapi.js +27 -4
  343. package/src/lib/server/api-v1/openapi.js.map +1 -1
  344. package/src/lib/server/api-v1/order-view.d.ts +67 -0
  345. package/src/lib/server/api-v1/order-view.js +120 -0
  346. package/src/lib/server/api-v1/order-view.js.map +1 -0
  347. package/src/lib/server/api-v1/orders-and-products.js +58 -65
  348. package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
  349. package/src/lib/server/billing-webhook.js +135 -28
  350. package/src/lib/server/billing-webhook.js.map +1 -1
  351. package/src/lib/server/cancel-order.js +29 -0
  352. package/src/lib/server/cancel-order.js.map +1 -1
  353. package/src/lib/server/carrier-rates-availability.d.ts +26 -0
  354. package/src/lib/server/carrier-rates-availability.js +76 -0
  355. package/src/lib/server/carrier-rates-availability.js.map +1 -0
  356. package/src/lib/server/carrier-shipping.d.ts +84 -0
  357. package/src/lib/server/carrier-shipping.js +135 -0
  358. package/src/lib/server/carrier-shipping.js.map +1 -0
  359. package/src/lib/server/cart-checkout.d.ts +2 -0
  360. package/src/lib/server/cart-checkout.js +226 -22
  361. package/src/lib/server/cart-checkout.js.map +1 -1
  362. package/src/lib/server/checkout-extras.d.ts +64 -0
  363. package/src/lib/server/checkout-extras.js +157 -0
  364. package/src/lib/server/checkout-extras.js.map +1 -0
  365. package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
  366. package/src/lib/server/checkout-status.js +111 -0
  367. package/src/lib/server/checkout-status.js.map +1 -0
  368. package/src/lib/server/checkout.js +86 -9
  369. package/src/lib/server/checkout.js.map +1 -1
  370. package/src/lib/server/draft-order.js +34 -5
  371. package/src/lib/server/draft-order.js.map +1 -1
  372. package/src/lib/server/fulfill-order.d.ts +127 -10
  373. package/src/lib/server/fulfill-order.js +451 -49
  374. package/src/lib/server/fulfill-order.js.map +1 -1
  375. package/src/lib/server/legacy-feed.d.ts +28 -0
  376. package/src/lib/server/legacy-feed.js +52 -0
  377. package/src/lib/server/legacy-feed.js.map +1 -0
  378. package/src/lib/server/native-checkout.d.ts +34 -15
  379. package/src/lib/server/native-checkout.js +32 -17
  380. package/src/lib/server/native-checkout.js.map +1 -1
  381. package/src/lib/server/order-event-host-emit.d.ts +23 -0
  382. package/src/lib/server/order-event-host-emit.js +30 -0
  383. package/src/lib/server/order-event-host-emit.js.map +1 -0
  384. package/src/lib/server/order-event-triggers.d.ts +37 -0
  385. package/src/lib/server/order-event-triggers.js +119 -0
  386. package/src/lib/server/order-event-triggers.js.map +1 -0
  387. package/src/lib/server/order-events.d.ts +62 -0
  388. package/src/lib/server/order-events.js +109 -0
  389. package/src/lib/server/order-events.js.map +1 -0
  390. package/src/lib/server/order-history.d.ts +23 -0
  391. package/src/lib/server/order-history.js +65 -0
  392. package/src/lib/server/order-history.js.map +1 -0
  393. package/src/lib/server/order-notifications.d.ts +185 -0
  394. package/src/lib/server/order-notifications.js +567 -0
  395. package/src/lib/server/order-notifications.js.map +1 -0
  396. package/src/lib/server/order-receipt-send.d.ts +39 -0
  397. package/src/lib/server/order-receipt-send.js +151 -0
  398. package/src/lib/server/order-receipt-send.js.map +1 -0
  399. package/src/lib/server/order-status-token.d.ts +31 -0
  400. package/src/lib/server/order-status-token.js +75 -0
  401. package/src/lib/server/order-status-token.js.map +1 -0
  402. package/src/lib/server/order-status.d.ts +58 -0
  403. package/src/lib/server/order-status.js +141 -0
  404. package/src/lib/server/order-status.js.map +1 -0
  405. package/src/lib/server/order-webhooks.d.ts +108 -0
  406. package/src/lib/server/order-webhooks.js +622 -0
  407. package/src/lib/server/order-webhooks.js.map +1 -0
  408. package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
  409. package/src/lib/server/orders-shipping-prepare.js +121 -0
  410. package/src/lib/server/orders-shipping-prepare.js.map +1 -0
  411. package/src/lib/server/payment-method-domains.d.ts +209 -0
  412. package/src/lib/server/payment-method-domains.js +444 -0
  413. package/src/lib/server/payment-method-domains.js.map +1 -0
  414. package/src/lib/server/payment-methods.d.ts +77 -0
  415. package/src/lib/server/payment-methods.js +284 -0
  416. package/src/lib/server/payment-methods.js.map +1 -0
  417. package/src/lib/server/pos-auth.d.ts +50 -0
  418. package/src/lib/server/pos-auth.js +121 -0
  419. package/src/lib/server/pos-auth.js.map +1 -0
  420. package/src/lib/server/pos-customer.d.ts +49 -0
  421. package/src/lib/server/pos-customer.js +257 -0
  422. package/src/lib/server/pos-customer.js.map +1 -0
  423. package/src/lib/server/pos-display.d.ts +57 -0
  424. package/src/lib/server/pos-display.js +419 -0
  425. package/src/lib/server/pos-display.js.map +1 -0
  426. package/src/lib/server/pos-fee-month.d.ts +34 -0
  427. package/src/lib/server/pos-fee-month.js +36 -0
  428. package/src/lib/server/pos-fee-month.js.map +1 -0
  429. package/src/lib/server/pos-ops-gate.d.ts +161 -0
  430. package/src/lib/server/pos-ops-gate.js +295 -0
  431. package/src/lib/server/pos-ops-gate.js.map +1 -0
  432. package/src/lib/server/pos-ops-routes.d.ts +22 -0
  433. package/src/lib/server/pos-ops-routes.js +36 -0
  434. package/src/lib/server/pos-ops-routes.js.map +1 -0
  435. package/src/lib/server/pos-order.d.ts +1 -18
  436. package/src/lib/server/pos-order.js +222 -42
  437. package/src/lib/server/pos-order.js.map +1 -1
  438. package/src/lib/server/pos-payment.d.ts +39 -0
  439. package/src/lib/server/pos-payment.js +922 -0
  440. package/src/lib/server/pos-payment.js.map +1 -0
  441. package/src/lib/server/pos-print.d.ts +82 -0
  442. package/src/lib/server/pos-print.js +193 -0
  443. package/src/lib/server/pos-print.js.map +1 -0
  444. package/src/lib/server/pos-readers.d.ts +27 -0
  445. package/src/lib/server/pos-readers.js +276 -0
  446. package/src/lib/server/pos-readers.js.map +1 -0
  447. package/src/lib/server/pos-refund-authority.d.ts +60 -0
  448. package/src/lib/server/pos-refund-authority.js +72 -0
  449. package/src/lib/server/pos-refund-authority.js.map +1 -0
  450. package/src/lib/server/pos-return.d.ts +58 -0
  451. package/src/lib/server/pos-return.js +891 -0
  452. package/src/lib/server/pos-return.js.map +1 -0
  453. package/src/lib/server/pos-sale-stamp.d.ts +66 -0
  454. package/src/lib/server/pos-sale-stamp.js +84 -0
  455. package/src/lib/server/pos-sale-stamp.js.map +1 -0
  456. package/src/lib/server/pos-sale.d.ts +170 -0
  457. package/src/lib/server/pos-sale.js +461 -0
  458. package/src/lib/server/pos-sale.js.map +1 -0
  459. package/src/lib/server/pos-shift.d.ts +45 -0
  460. package/src/lib/server/pos-shift.js +484 -0
  461. package/src/lib/server/pos-shift.js.map +1 -0
  462. package/src/lib/server/pos-staff-pin.d.ts +26 -0
  463. package/src/lib/server/pos-staff-pin.js +339 -0
  464. package/src/lib/server/pos-staff-pin.js.map +1 -0
  465. package/src/lib/server/pos-stripe.d.ts +91 -0
  466. package/src/lib/server/pos-stripe.js +129 -0
  467. package/src/lib/server/pos-stripe.js.map +1 -0
  468. package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
  469. package/src/lib/server/pos-terminal-connection-token.js +166 -0
  470. package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
  471. package/src/lib/server/pos-terminal.d.ts +218 -0
  472. package/src/lib/server/pos-terminal.js +1014 -0
  473. package/src/lib/server/pos-terminal.js.map +1 -0
  474. package/src/lib/server/print-queue.d.ts +124 -0
  475. package/src/lib/server/print-queue.js +301 -0
  476. package/src/lib/server/print-queue.js.map +1 -0
  477. package/src/lib/server/printer-poll.d.ts +75 -0
  478. package/src/lib/server/printer-poll.js +325 -0
  479. package/src/lib/server/printer-poll.js.map +1 -0
  480. package/src/lib/server/printer-secret.d.ts +39 -0
  481. package/src/lib/server/printer-secret.js +56 -0
  482. package/src/lib/server/printer-secret.js.map +1 -0
  483. package/src/lib/server/printers.d.ts +114 -0
  484. package/src/lib/server/printers.js +546 -0
  485. package/src/lib/server/printers.js.map +1 -0
  486. package/src/lib/server/product-catalog.d.ts +42 -0
  487. package/src/lib/server/product-catalog.js +305 -0
  488. package/src/lib/server/product-catalog.js.map +1 -0
  489. package/src/lib/server/refund.js +110 -45
  490. package/src/lib/server/refund.js.map +1 -1
  491. package/src/lib/server/reserve.js +2 -0
  492. package/src/lib/server/reserve.js.map +1 -1
  493. package/src/lib/server/return-status-action.d.ts +37 -0
  494. package/src/lib/server/return-status-action.js +57 -0
  495. package/src/lib/server/return-status-action.js.map +1 -0
  496. package/src/lib/server/returns.d.ts +119 -0
  497. package/src/lib/server/returns.js +938 -0
  498. package/src/lib/server/returns.js.map +1 -0
  499. package/src/lib/server/shipment-records.d.ts +36 -0
  500. package/src/lib/server/shipment-records.js +289 -0
  501. package/src/lib/server/shipment-records.js.map +1 -0
  502. package/src/lib/server/shipping-connector-gates.d.ts +40 -0
  503. package/src/lib/server/shipping-connector-gates.js +97 -0
  504. package/src/lib/server/shipping-connector-gates.js.map +1 -0
  505. package/src/lib/server/shipping-connectors.d.ts +29 -0
  506. package/src/lib/server/shipping-connectors.js +236 -0
  507. package/src/lib/server/shipping-connectors.js.map +1 -0
  508. package/src/lib/server/shippingeasy.d.ts +238 -0
  509. package/src/lib/server/shippingeasy.js +787 -0
  510. package/src/lib/server/shippingeasy.js.map +1 -0
  511. package/src/lib/server/shipstation.d.ts +129 -0
  512. package/src/lib/server/shipstation.js +483 -0
  513. package/src/lib/server/shipstation.js.map +1 -0
  514. package/src/lib/server/site-page-resolver.d.ts +5 -0
  515. package/src/lib/server/site-page-resolver.js +156 -1
  516. package/src/lib/server/site-page-resolver.js.map +1 -1
  517. package/src/lib/server/stock-levels.d.ts +21 -0
  518. package/src/lib/server/stock-levels.js +263 -0
  519. package/src/lib/server/stock-levels.js.map +1 -0
  520. package/src/lib/server/stripe-refund.d.ts +47 -0
  521. package/src/lib/server/stripe-refund.js +87 -0
  522. package/src/lib/server/stripe-refund.js.map +1 -0
  523. package/src/lib/server/supplier-update.js +46 -5
  524. package/src/lib/server/supplier-update.js.map +1 -1
  525. package/src/lib/server/tax-engine-quote.d.ts +47 -0
  526. package/src/lib/server/tax-engine-quote.js +105 -0
  527. package/src/lib/server/tax-engine-quote.js.map +1 -0
  528. package/src/lib/server.js +138 -2
  529. package/src/lib/server.js.map +1 -1
  530. package/src/lib/site.js +12 -0
  531. package/src/lib/site.js.map +1 -1
  532. package/src/lib/subprocessors.d.ts +26 -0
  533. package/src/lib/subprocessors.js +50 -0
  534. package/src/lib/subprocessors.js.map +1 -0
  535. package/src/lib/tenant-emails.js +461 -3
  536. package/src/lib/tenant-emails.js.map +1 -1
  537. package/src/lib/testing/fake-firestore.d.ts +45 -0
  538. package/src/lib/testing/fake-firestore.js +189 -0
  539. package/src/lib/testing/fake-firestore.js.map +1 -0
  540. package/src/lib/testing/memory-firestore.d.ts +123 -0
  541. package/src/lib/testing/memory-firestore.js +274 -0
  542. package/src/lib/testing/memory-firestore.js.map +1 -0
  543. package/src/lib/testing/pos-ops-harness.d.ts +50 -0
  544. package/src/lib/testing/pos-ops-harness.js +184 -0
  545. package/src/lib/testing/pos-ops-harness.js.map +1 -0
  546. package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
  547. package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
  548. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
  549. package/src/lib/transfer/records-transfer.d.ts +11 -1
  550. package/src/lib/transfer/records-transfer.js +127 -5
  551. package/src/lib/transfer/records-transfer.js.map +1 -1
  552. package/src/lib/transfer/records.server.d.ts +9 -2
  553. package/src/lib/transfer/records.server.js +58 -7
  554. package/src/lib/transfer/records.server.js.map +1 -1
  555. package/src/lib/transfer/register-transfer-resources.js +40 -1
  556. package/src/lib/transfer/register-transfer-resources.js.map +1 -1
  557. package/src/lib/transfer/register-transfer-ui.js +4 -1
  558. package/src/lib/transfer/register-transfer-ui.js.map +1 -1
  559. package/src/lib/transfer/shipping-presets.d.ts +23 -0
  560. package/src/lib/transfer/shipping-presets.js +156 -0
  561. package/src/lib/transfer/shipping-presets.js.map +1 -0
  562. package/src/lib/transfer/tracking-transfer.d.ts +101 -0
  563. package/src/lib/transfer/tracking-transfer.js +546 -0
  564. package/src/lib/transfer/tracking-transfer.js.map +1 -0
  565. package/src/lib/transfer/tracking.server.d.ts +37 -0
  566. package/src/lib/transfer/tracking.server.js +393 -0
  567. package/src/lib/transfer/tracking.server.js.map +1 -0
  568. package/src/lib/transfer/transfer-keys.d.ts +2 -1
  569. package/src/lib/transfer/transfer-keys.js +6 -2
  570. package/src/lib/transfer/transfer-keys.js.map +1 -1
  571. package/src/lib/utils/code128.d.ts +37 -0
  572. package/src/lib/utils/code128.js +199 -0
  573. package/src/lib/utils/code128.js.map +1 -0
  574. package/src/lib/utils/order-invoice.d.ts +55 -0
  575. package/src/lib/utils/order-invoice.js +127 -0
  576. package/src/lib/utils/order-invoice.js.map +1 -0
  577. package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
  578. package/src/lib/utils/use-checkout-return-notice.js +78 -0
  579. package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
  580. package/src/lib/server/feed.js +0 -69
  581. package/src/lib/server/feed.js.map +0 -1
@@ -0,0 +1,622 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
18
+ import { PLATFORM_BRAND_NAME } from "@aglyn/aglyn/app-utils/platform-brand";
19
+ import { describeConfiguredUrlRefusal, configuredUrlRefusal, fetchConfiguredPublicUrl, firebaseAdmin, notifyHostManagers } from "@aglyn/tenant-data-admin";
20
+ import { PLUGIN_EVENT_MAX_ATTEMPTS } from "@aglyn/tenant-data-admin/server/plugin-event-outbox";
21
+ import { resolveOrgPermissions } from "@aglyn/tenant-runtime/org-permissions";
22
+ import { createSecretBoxKey, openSecret, parseSecretBoxKeyring, sealSecret, SECRET_BOX_KEY_BYTES } from "@aglyn/shared-util-tools/secret-box";
23
+ import { createHmac, hkdfSync, randomBytes } from "node:crypto";
24
+ import { COMMERCE_EVENT_DECLARATIONS } from "../model/order-events.js";
25
+ import * as Webhooks from "../model/order-webhooks.js";
26
+ /**
27
+ * Merchant order webhooks (AGL-3611): the console's door and the delivery
28
+ * behind it. The model (`model/order-webhooks.ts`) says what is stored where.
29
+ *
30
+ * DELIVERY RIDES THE PLUGIN EVENT OUTBOX. Commerce subscribes to its own
31
+ * order and return events under the name `webhooks`; the subscriber posts the
32
+ * event to every endpoint that takes it and records each attempt in the
33
+ * delivery log. An endpoint that already took an event is not posted it
34
+ * again, so when one of three endpoints fails, the subscriber throws, the
35
+ * outbox retries it with its backoff (30s, 2m, 10m, 30m, 1h, 6h, 12h), and
36
+ * only the failing endpoint is called again. On the last attempt the delivery
37
+ * is marked failed and the site's managers are told.
38
+ *
39
+ * EVERY CALL GOES THROUGH `fetchConfiguredPublicUrl`: https on the default
40
+ * port, a public address pinned at connect time, no redirect followed. A
41
+ * merchant's endpoint is a stranger's server to us.
42
+ *
43
+ * THE SECRET IS SEALED with the shared secret box, under the keyring
44
+ * `readCommerceSecretKeyring` answers, bound to its endpoint by the seal's
45
+ * context. The plaintext leaves the server once, in the answer to the request
46
+ * that made or rolled it.
47
+ */ export const COMMERCE_SECRET_KEY_ENV = 'COMMERCE_SECRET_KEY';
48
+ const SECRETS = 'orderWebhookSecrets';
49
+ /** Delivery rows live this long, then Firestore's TTL removes them. */ export const ORDER_WEBHOOK_LOG_RETENTION_MS = 30 * 86400000;
50
+ /** The id of the key derived from `TOKEN_SIGNING_SECRET`. */ export const DERIVED_COMMERCE_KEY_ID = 'tss1';
51
+ /**
52
+ * A secret-box key derived from `TOKEN_SIGNING_SECRET` with HKDF, under its
53
+ * own label, so the commerce tokens and the sealed secrets never share key
54
+ * material. `null` when that secret is unset.
55
+ */ function derivedCommerceKey() {
56
+ var _process_env_TOKEN_SIGNING_SECRET;
57
+ const base = String((_process_env_TOKEN_SIGNING_SECRET = process.env['TOKEN_SIGNING_SECRET']) != null ? _process_env_TOKEN_SIGNING_SECRET : '');
58
+ if (!base) return null;
59
+ const material = new Uint8Array(hkdfSync('sha256', base, 'aglyn-commerce', 'secret-box:v1', SECRET_BOX_KEY_BYTES));
60
+ return createSecretBoxKey(material, DERIVED_COMMERCE_KEY_ID);
61
+ }
62
+ /**
63
+ * The keyring commerce seals its stored secrets with. `COMMERCE_SECRET_KEY`
64
+ * (a secret-box keyring) when it is set, its first key sealing; otherwise the
65
+ * key derived from `TOKEN_SIGNING_SECRET`, which every deployment that sells
66
+ * already has. The derived key stays in the ring after a dedicated key is
67
+ * configured, so what it sealed still opens. `null` when neither is usable.
68
+ * Never throws.
69
+ */ export function readCommerceSecretKeyring() {
70
+ var _process_env_COMMERCE_SECRET_KEY_ENV;
71
+ let derived = null;
72
+ try {
73
+ derived = derivedCommerceKey();
74
+ } catch (unused) {
75
+ derived = null;
76
+ }
77
+ const raw = String((_process_env_COMMERCE_SECRET_KEY_ENV = process.env[COMMERCE_SECRET_KEY_ENV]) != null ? _process_env_COMMERCE_SECRET_KEY_ENV : '').trim();
78
+ if (raw) {
79
+ try {
80
+ const ring = parseSecretBoxKeyring(raw);
81
+ const keys = derived && !ring.keys.some((key)=>key.id === derived.id) ? [
82
+ ...ring.keys,
83
+ derived
84
+ ] : ring.keys;
85
+ return {
86
+ current: ring.current,
87
+ keys
88
+ };
89
+ } catch (unused) {
90
+ // An unusable dedicated key falls back to the derived one rather than
91
+ // sealing nothing.
92
+ }
93
+ }
94
+ return derived ? {
95
+ current: derived,
96
+ keys: [
97
+ derived
98
+ ]
99
+ } : null;
100
+ }
101
+ /** Whether this deployment can sign webhooks at all. */ export function orderWebhooksConfigured() {
102
+ return readCommerceSecretKeyring() !== null;
103
+ }
104
+ const sealContext = (hostId, endpointId)=>`hosts/${hostId}/${SECRETS}/${endpointId}#secret`;
105
+ /** A fresh signing secret: `whsec_` and 32 random bytes. */ export function mintOrderWebhookSecret() {
106
+ return `whsec_${randomBytes(32).toString('base64url')}`;
107
+ }
108
+ /** The HMAC-SHA256 of `{t}.{body}` under the secret, as hex. */ export function signOrderWebhook(secret, timestampSeconds, body) {
109
+ return createHmac('sha256', secret).update(Webhooks.orderWebhookSignedPayload(timestampSeconds, body)).digest('hex');
110
+ }
111
+ const hostRefFor = (firestore, hostId)=>firestore.collection('hosts').doc(hostId);
112
+ async function readSecret(firestore, hostId, endpointId, keyring) {
113
+ var _snapshot_get;
114
+ const hostRef = hostRefFor(firestore, hostId);
115
+ const snapshot = await hostRef.collection('orderWebhookSecrets').doc(endpointId).get();
116
+ const sealed = String((_snapshot_get = snapshot.get('sealedSecret')) != null ? _snapshot_get : '');
117
+ if (!sealed) throw new Error('This endpoint has no signing secret');
118
+ return openSecret(sealed, keyring, {
119
+ context: sealContext(hostId, endpointId)
120
+ }).plaintext;
121
+ }
122
+ function sealedSecretRecord(hostId, endpointId, secret, keyring, now) {
123
+ return {
124
+ sealedSecret: sealSecret(secret, keyring.current, {
125
+ context: sealContext(hostId, endpointId)
126
+ }),
127
+ secretKeyId: keyring.current.id,
128
+ updatedAtMs: now
129
+ };
130
+ }
131
+ /**
132
+ * Posts one body to one endpoint, signed. Never throws: a refusal, a timeout
133
+ * or a reset is an attempt that failed, with the reason in words.
134
+ */ export async function postOrderWebhook(input) {
135
+ var _input_now;
136
+ const clock = (_input_now = input.now) != null ? _input_now : Date.now;
137
+ const startedAt = clock();
138
+ const timestamp = Math.floor(startedAt / 1000);
139
+ const signature = Webhooks.formatOrderWebhookSignature(timestamp, signOrderWebhook(input.secret, timestamp, input.body));
140
+ let httpStatus = null;
141
+ let error;
142
+ try {
143
+ var _input_fetchImpl;
144
+ const result = await ((_input_fetchImpl = input.fetchImpl) != null ? _input_fetchImpl : fetchConfiguredPublicUrl)(input.url, {
145
+ method: 'POST',
146
+ headers: {
147
+ 'content-type': 'application/json',
148
+ 'user-agent': 'Aglyn-Webhooks/1.0',
149
+ [Webhooks.ORDER_WEBHOOK_SIGNATURE_HEADER]: signature,
150
+ [Webhooks.ORDER_WEBHOOK_EVENT_HEADER]: input.event,
151
+ [Webhooks.ORDER_WEBHOOK_EVENT_ID_HEADER]: input.eventId
152
+ },
153
+ body: input.body,
154
+ signal: AbortSignal.timeout(Webhooks.ORDER_WEBHOOK_TIMEOUT_MS)
155
+ });
156
+ if ('refusal' in result) {
157
+ error = `Not sent: ${describeConfiguredUrlRefusal(result.refusal)}`;
158
+ } else {
159
+ httpStatus = result.status;
160
+ if (!Webhooks.orderWebhookAccepted(httpStatus)) {
161
+ error = httpStatus >= 300 && httpStatus < 400 ? `The endpoint answered ${httpStatus}, a redirect; redirects are not followed` : `The endpoint answered ${httpStatus}`;
162
+ }
163
+ }
164
+ } catch (caught) {
165
+ var _ref;
166
+ const name = caught == null ? void 0 : caught.name;
167
+ error = name === 'TimeoutError' || name === 'AbortError' ? `No answer within ${Webhooks.ORDER_WEBHOOK_TIMEOUT_MS / 1000} seconds` : `The connection failed: ${String((_ref = caught == null ? void 0 : caught.message) != null ? _ref : caught).slice(0, 200)}`;
168
+ }
169
+ const attempt = _extends({
170
+ atMs: startedAt,
171
+ httpStatus
172
+ }, error ? {
173
+ error
174
+ } : {}, {
175
+ durationMs: Math.max(0, clock() - startedAt)
176
+ });
177
+ return {
178
+ attempt,
179
+ delivered: !error
180
+ };
181
+ }
182
+ function expiresAt(now) {
183
+ return firebaseAdmin.firestore.Timestamp.fromMillis(now + ORDER_WEBHOOK_LOG_RETENTION_MS);
184
+ }
185
+ /** Records an attempt on the delivery row and on the endpoint's summary. */ async function recordAttempt(firestore, hostId, endpointId, delivery, result, status, now) {
186
+ var _ref;
187
+ var _delivery_prior, _delivery_prior1;
188
+ const hostRef = hostRefFor(firestore, hostId);
189
+ const row = _extends({
190
+ endpointId,
191
+ eventId: delivery.eventId,
192
+ event: delivery.event,
193
+ orderId: delivery.orderId,
194
+ status,
195
+ attempts: Webhooks.appendOrderWebhookAttempt((_delivery_prior = delivery.prior) == null ? void 0 : _delivery_prior.attempts, result.attempt),
196
+ body: delivery.body.slice(0, Webhooks.ORDER_WEBHOOK_BODY_MAX)
197
+ }, delivery.test ? {
198
+ test: true
199
+ } : {}, {
200
+ createdAtMs: (_ref = (_delivery_prior1 = delivery.prior) == null ? void 0 : _delivery_prior1.createdAtMs) != null ? _ref : now,
201
+ updatedAtMs: now,
202
+ expiresAt: expiresAt(now)
203
+ });
204
+ await hostRef.collection('orderWebhookDeliveries').doc(delivery.id).set(row);
205
+ await hostRef.collection('orderWebhooks').doc(endpointId).update({
206
+ lastDeliveryAtMs: now,
207
+ lastDeliveryStatus: status,
208
+ consecutiveFailures: result.delivered ? 0 : firebaseAdmin.firestore.FieldValue.increment(1)
209
+ }).catch(()=>undefined);
210
+ }
211
+ /**
212
+ * The subscriber: posts one event to every endpoint of the site that takes
213
+ * it and has not taken it already. Throws when any endpoint still owes it, so
214
+ * the outbox retries; on the outbox's last attempt it records the failure and
215
+ * tells the site's managers instead.
216
+ */ export async function deliverOrderEventToWebhooks(envelope, deps = {}) {
217
+ var _deps_now, _ref, _envelope_payload;
218
+ var _order;
219
+ const firestore = firebaseAdmin.app().firestore();
220
+ const hostRef = hostRefFor(firestore, envelope.hostId);
221
+ const endpoints = await hostRef.collection('orderWebhooks').where('enabled', '==', true).get();
222
+ const taking = endpoints.docs.filter((doc)=>Webhooks.orderWebhookTakes(doc.data(), envelope.event, envelope.occurredAtMs));
223
+ if (taking.length === 0) return {
224
+ delivered: 0,
225
+ failed: 0
226
+ };
227
+ const keyring = readCommerceSecretKeyring();
228
+ const clock = (_deps_now = deps.now) != null ? _deps_now : Date.now;
229
+ const final = envelope.attempt >= PLUGIN_EVENT_MAX_ATTEMPTS;
230
+ const body = Webhooks.orderWebhookBody({
231
+ eventId: envelope.id,
232
+ event: envelope.event,
233
+ occurredAtMs: envelope.occurredAtMs,
234
+ hostId: envelope.hostId,
235
+ payload: envelope.payload
236
+ });
237
+ const orderId = String((_ref = (_order = ((_envelope_payload = envelope.payload) != null ? _envelope_payload : {}).order) == null ? void 0 : _order.id) != null ? _ref : '') || null;
238
+ const outcomes = await Promise.all(taking.map(async (doc)=>{
239
+ const endpoint = doc.data();
240
+ const deliveryId = Webhooks.orderWebhookDeliveryId(envelope.id, doc.id);
241
+ const priorSnapshot = await hostRef.collection('orderWebhookDeliveries').doc(deliveryId).get();
242
+ const prior = priorSnapshot.exists ? priorSnapshot.data() : null;
243
+ // Taken already, on an earlier pass or by a resend from the console.
244
+ if ((prior == null ? void 0 : prior.status) === 'delivered') return 'delivered';
245
+ const settled = await attemptEndpoint({
246
+ firestore,
247
+ hostId: envelope.hostId,
248
+ endpointId: doc.id,
249
+ url: endpoint.url,
250
+ keyring,
251
+ event: envelope.event,
252
+ eventId: envelope.id,
253
+ body,
254
+ clock,
255
+ fetchImpl: deps.fetchImpl
256
+ });
257
+ const status = settled.delivered ? 'delivered' : final ? 'failed' : 'retrying';
258
+ await recordAttempt(firestore, envelope.hostId, doc.id, {
259
+ id: deliveryId,
260
+ eventId: envelope.id,
261
+ event: envelope.event,
262
+ orderId,
263
+ body,
264
+ prior
265
+ }, settled, status, clock());
266
+ if (status === 'failed') {
267
+ var _settled_attempt_error;
268
+ await notifyHostManagers(envelope.hostId, {
269
+ type: 'content.order',
270
+ title: 'An order webhook could not be delivered',
271
+ body: `${envelope.event} never reached ${safeHost(endpoint.url)} on {site} after ` + `${envelope.attempt} attempts (${(_settled_attempt_error = settled.attempt.error) != null ? _settled_attempt_error : 'no answer'}). ` + 'Resend it from the delivery log once the endpoint is fixed.',
272
+ link: `/${envelope.hostId}/products/settings`
273
+ }).catch(()=>undefined);
274
+ }
275
+ return status;
276
+ }));
277
+ const delivered = outcomes.filter((status)=>status === 'delivered').length;
278
+ const failed = outcomes.length - delivered;
279
+ if (failed > 0 && !final) {
280
+ throw new Error(`${failed} of ${outcomes.length} order webhook endpoints did not take ${envelope.event}`);
281
+ }
282
+ return {
283
+ delivered,
284
+ failed
285
+ };
286
+ }
287
+ /** One signed attempt at one endpoint; a missing key or secret is a failed attempt. */ async function attemptEndpoint(input) {
288
+ const failed = (error)=>({
289
+ delivered: false,
290
+ attempt: {
291
+ atMs: input.clock(),
292
+ httpStatus: null,
293
+ error,
294
+ durationMs: 0
295
+ }
296
+ });
297
+ if (!input.keyring) return failed('Webhook signing is not configured');
298
+ let secret;
299
+ try {
300
+ secret = await readSecret(input.firestore, input.hostId, input.endpointId, input.keyring);
301
+ } catch (error) {
302
+ var _ref;
303
+ return failed(`The signing secret could not be read: ${String((_ref = error == null ? void 0 : error.message) != null ? _ref : error).slice(0, 120)}`);
304
+ }
305
+ return postOrderWebhook({
306
+ url: input.url,
307
+ secret,
308
+ event: input.event,
309
+ eventId: input.eventId,
310
+ body: input.body,
311
+ fetchImpl: input.fetchImpl,
312
+ now: input.clock
313
+ });
314
+ }
315
+ function safeHost(url) {
316
+ try {
317
+ return new URL(url).hostname;
318
+ } catch (unused) {
319
+ return 'the endpoint';
320
+ }
321
+ }
322
+ // ---------------------------------------------------------------------------
323
+ // The console's door
324
+ // ---------------------------------------------------------------------------
325
+ const ACTIONS = [
326
+ 'status',
327
+ 'create',
328
+ 'update',
329
+ 'roll-secret',
330
+ 'delete',
331
+ 'test',
332
+ 'resend'
333
+ ];
334
+ const isId = (value)=>Boolean(value) && value.length <= 1500 && !/^__.*__$/.test(value) && !value.includes('/');
335
+ function cleanUrl(raw) {
336
+ const url = String(raw != null ? raw : '').trim();
337
+ if (!url) return {
338
+ error: 'Enter the endpoint’s address'
339
+ };
340
+ if (url.length > 2048) return {
341
+ error: 'That address is too long'
342
+ };
343
+ const refusal = configuredUrlRefusal(url);
344
+ if (refusal) return {
345
+ error: `This endpoint cannot be used: ${describeConfiguredUrlRefusal(refusal)}`
346
+ };
347
+ return {
348
+ url
349
+ };
350
+ }
351
+ const cleanDescription = (raw)=>String(raw != null ? raw : '').trim().slice(0, 120);
352
+ /**
353
+ * `POST /api/commerce/order-webhooks` with `{ hostId, action, … }`. Endpoints
354
+ * post the order book to an outside server, so only an admin of the whole
355
+ * workspace manages them — the bar a refund sets.
356
+ *
357
+ * - `status` → `{ configured, events: [{ event, label, description }] }`
358
+ * - `create` `{ url, events, description? }` → `{ id, secret }` (shown once)
359
+ * - `update` `{ endpointId, url?, events?, enabled?, description? }`
360
+ * - `roll-secret` `{ endpointId }` → `{ secret }`
361
+ * - `delete` `{ endpointId }`; the delivery log stays until it expires
362
+ * - `test` `{ endpointId }` → posts a `webhook.test` event now
363
+ * - `resend` `{ deliveryId }` → posts a logged delivery again now
364
+ */ export const orderWebhooksHandler = async (req, res)=>{
365
+ var _req_headers_authorization, _body_hostId, _body_action;
366
+ if (req.method !== 'POST') return res.status(405).json({
367
+ error: 'Method not allowed'
368
+ });
369
+ const authorization = String((_req_headers_authorization = req.headers.authorization) != null ? _req_headers_authorization : '');
370
+ const idToken = authorization.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : undefined;
371
+ if (!idToken) return res.status(401).json({
372
+ error: 'Unauthenticated'
373
+ });
374
+ let body;
375
+ try {
376
+ var _ref;
377
+ body = (_ref = typeof req.body === 'string' ? JSON.parse(req.body) : req.body) != null ? _ref : {};
378
+ } catch (unused) {
379
+ return res.status(400).json({
380
+ error: 'Invalid JSON'
381
+ });
382
+ }
383
+ const hostId = String((_body_hostId = body.hostId) != null ? _body_hostId : '');
384
+ const action = String((_body_action = body.action) != null ? _body_action : '');
385
+ if (!isId(hostId)) return res.status(400).json({
386
+ error: 'Missing hostId'
387
+ });
388
+ if (!ACTIONS.includes(action)) return res.status(400).json({
389
+ error: 'Unknown action'
390
+ });
391
+ try {
392
+ var _hostSnapshot_get, _body_endpointId;
393
+ const decoded = await firebaseAdmin.app().auth().verifyIdToken(idToken);
394
+ const firestore = firebaseAdmin.app().firestore();
395
+ const hostRef = hostRefFor(firestore, hostId);
396
+ const hostSnapshot = await hostRef.get();
397
+ if (!hostSnapshot.exists) return res.status(404).json({
398
+ error: 'Unknown site'
399
+ });
400
+ if (((_hostSnapshot_get = hostSnapshot.get('memberRoles')) != null ? _hostSnapshot_get : {})[decoded.uid] !== 'admin') {
401
+ return res.status(403).json({
402
+ error: 'Webhooks are managed by a site admin'
403
+ });
404
+ }
405
+ const membership = await resolveOrgPermissions(decoded.uid, {
406
+ hostId
407
+ });
408
+ if (!membership.orgWide || membership.hostRole !== 'admin') {
409
+ return res.status(403).json({
410
+ error: 'Webhooks are managed by an admin of the whole workspace'
411
+ });
412
+ }
413
+ const keyring = readCommerceSecretKeyring();
414
+ if (action === 'status') {
415
+ return res.status(200).json({
416
+ configured: Boolean(keyring),
417
+ maxEndpoints: Webhooks.ORDER_WEBHOOK_MAX_ENDPOINTS,
418
+ events: COMMERCE_EVENT_DECLARATIONS.map((entry)=>({
419
+ event: entry.event.id,
420
+ label: entry.label,
421
+ description: entry.description
422
+ }))
423
+ });
424
+ }
425
+ if (!keyring) {
426
+ return res.status(503).json({
427
+ error: 'Order webhooks are not configured on this deployment'
428
+ });
429
+ }
430
+ const now = Date.now();
431
+ const endpoints = hostRef.collection('orderWebhooks');
432
+ if (action === 'create') {
433
+ const url = cleanUrl(body.url);
434
+ if ('error' in url) return res.status(400).json({
435
+ error: url.error
436
+ });
437
+ const events = Webhooks.normalizeOrderWebhookEvents(body.events);
438
+ if (events.length === 0) return res.status(400).json({
439
+ error: 'Choose at least one event'
440
+ });
441
+ const secret = mintOrderWebhookSecret();
442
+ const ref = endpoints.doc(createResourceUid());
443
+ const created = await firestore.runTransaction(async (transaction)=>{
444
+ const existing = await transaction.get(endpoints.limit(Webhooks.ORDER_WEBHOOK_MAX_ENDPOINTS));
445
+ if (existing.size >= Webhooks.ORDER_WEBHOOK_MAX_ENDPOINTS) return false;
446
+ const endpoint = _extends({
447
+ url: url.url,
448
+ events,
449
+ enabled: true
450
+ }, cleanDescription(body.description) ? {
451
+ description: cleanDescription(body.description)
452
+ } : {}, {
453
+ secretHint: secret.slice(-4),
454
+ consecutiveFailures: 0,
455
+ createdAtMs: now,
456
+ updatedAtMs: now,
457
+ createdBy: decoded.uid
458
+ });
459
+ transaction.create(ref, endpoint);
460
+ transaction.create(hostRef.collection('orderWebhookSecrets').doc(ref.id), sealedSecretRecord(hostId, ref.id, secret, keyring, now));
461
+ return true;
462
+ });
463
+ if (!created) {
464
+ return res.status(409).json({
465
+ error: `A store can keep ${Webhooks.ORDER_WEBHOOK_MAX_ENDPOINTS} webhook endpoints`
466
+ });
467
+ }
468
+ return res.status(200).json({
469
+ ok: true,
470
+ id: ref.id,
471
+ secret
472
+ });
473
+ }
474
+ if (action === 'resend') {
475
+ var _body_deliveryId;
476
+ const deliveryId = String((_body_deliveryId = body.deliveryId) != null ? _body_deliveryId : '');
477
+ if (!isId(deliveryId)) return res.status(400).json({
478
+ error: 'Missing deliveryId'
479
+ });
480
+ const deliveryRef = hostRef.collection('orderWebhookDeliveries').doc(deliveryId);
481
+ const deliverySnapshot = await deliveryRef.get();
482
+ if (!deliverySnapshot.exists) return res.status(404).json({
483
+ error: 'Unknown delivery'
484
+ });
485
+ const delivery = deliverySnapshot.data();
486
+ const endpointSnapshot = await endpoints.doc(delivery.endpointId).get();
487
+ if (!endpointSnapshot.exists) return res.status(404).json({
488
+ error: 'That endpoint was deleted'
489
+ });
490
+ if (delivery.body.length >= Webhooks.ORDER_WEBHOOK_BODY_MAX) {
491
+ return res.status(409).json({
492
+ error: 'This delivery was too large to keep, so it cannot be resent'
493
+ });
494
+ }
495
+ const endpoint = endpointSnapshot.data();
496
+ const secret = await readSecret(firestore, hostId, delivery.endpointId, keyring);
497
+ const result = await postOrderWebhook({
498
+ url: endpoint.url,
499
+ secret,
500
+ event: delivery.event,
501
+ eventId: delivery.eventId,
502
+ body: delivery.body
503
+ });
504
+ const status = result.delivered ? 'delivered' : delivery.status === 'delivered' ? 'delivered' : delivery.status;
505
+ await recordAttempt(firestore, hostId, delivery.endpointId, {
506
+ id: deliveryId,
507
+ eventId: delivery.eventId,
508
+ event: delivery.event,
509
+ orderId: delivery.orderId,
510
+ body: delivery.body,
511
+ test: delivery.test,
512
+ prior: delivery
513
+ }, result, status, Date.now());
514
+ return res.status(200).json({
515
+ ok: true,
516
+ delivered: result.delivered,
517
+ attempt: result.attempt
518
+ });
519
+ }
520
+ const endpointId = String((_body_endpointId = body.endpointId) != null ? _body_endpointId : '');
521
+ if (!isId(endpointId)) return res.status(400).json({
522
+ error: 'Missing endpointId'
523
+ });
524
+ const endpointRef = endpoints.doc(endpointId);
525
+ const endpointSnapshot = await endpointRef.get();
526
+ if (!endpointSnapshot.exists) return res.status(404).json({
527
+ error: 'Unknown endpoint'
528
+ });
529
+ const endpoint = endpointSnapshot.data();
530
+ if (action === 'update') {
531
+ const patch = {
532
+ updatedAtMs: now
533
+ };
534
+ if (body.url !== undefined) {
535
+ const url = cleanUrl(body.url);
536
+ if ('error' in url) return res.status(400).json({
537
+ error: url.error
538
+ });
539
+ patch.url = url.url;
540
+ }
541
+ if (body.events !== undefined) {
542
+ const events = Webhooks.normalizeOrderWebhookEvents(body.events);
543
+ if (events.length === 0) return res.status(400).json({
544
+ error: 'Choose at least one event'
545
+ });
546
+ patch.events = events;
547
+ }
548
+ if (body.enabled !== undefined) {
549
+ patch.enabled = Boolean(body.enabled);
550
+ if (patch.enabled) patch.consecutiveFailures = 0;
551
+ }
552
+ if (body.description !== undefined) patch.description = cleanDescription(body.description);
553
+ await endpointRef.update(patch);
554
+ return res.status(200).json({
555
+ ok: true
556
+ });
557
+ }
558
+ if (action === 'roll-secret') {
559
+ const secret = mintOrderWebhookSecret();
560
+ const batch = firestore.batch();
561
+ batch.set(hostRef.collection('orderWebhookSecrets').doc(endpointId), sealedSecretRecord(hostId, endpointId, secret, keyring, now));
562
+ batch.update(endpointRef, {
563
+ secretHint: secret.slice(-4),
564
+ updatedAtMs: now
565
+ });
566
+ await batch.commit();
567
+ return res.status(200).json({
568
+ ok: true,
569
+ secret
570
+ });
571
+ }
572
+ if (action === 'delete') {
573
+ const batch = firestore.batch();
574
+ batch.delete(endpointRef);
575
+ batch.delete(hostRef.collection('orderWebhookSecrets').doc(endpointId));
576
+ await batch.commit();
577
+ return res.status(200).json({
578
+ ok: true
579
+ });
580
+ }
581
+ // test
582
+ const eventId = `test_${randomBytes(9).toString('base64url')}`;
583
+ const testBody = Webhooks.orderWebhookBody({
584
+ eventId,
585
+ event: Webhooks.ORDER_WEBHOOK_TEST_EVENT,
586
+ occurredAtMs: now,
587
+ hostId,
588
+ payload: {
589
+ message: `A test event from ${PLATFORM_BRAND_NAME}. Answer with any 2xx status.`
590
+ }
591
+ });
592
+ const secret = await readSecret(firestore, hostId, endpointId, keyring);
593
+ const result = await postOrderWebhook({
594
+ url: endpoint.url,
595
+ secret,
596
+ event: Webhooks.ORDER_WEBHOOK_TEST_EVENT,
597
+ eventId,
598
+ body: testBody
599
+ });
600
+ await recordAttempt(firestore, hostId, endpointId, {
601
+ id: Webhooks.orderWebhookDeliveryId(eventId, endpointId),
602
+ eventId,
603
+ event: Webhooks.ORDER_WEBHOOK_TEST_EVENT,
604
+ orderId: null,
605
+ body: testBody,
606
+ test: true,
607
+ prior: null
608
+ }, result, result.delivered ? 'delivered' : 'failed', Date.now());
609
+ return res.status(200).json({
610
+ ok: true,
611
+ delivered: result.delivered,
612
+ attempt: result.attempt
613
+ });
614
+ } catch (error) {
615
+ console.error('order webhooks action failed', action, error);
616
+ return res.status(500).json({
617
+ error: 'The webhook could not be updated. Please try again.'
618
+ });
619
+ }
620
+ };
621
+
622
+ //# sourceMappingURL=order-webhooks.js.map