@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
@@ -15,8 +15,56 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
17
  */ import * as CommerceModel from "../model/index.js";
18
+ import { announcePluginShipment } from "@aglyn/aglyn/plugin-manager/plugin-shipment-records";
18
19
  import { createResourceUid } from "@aglyn/aglyn/server";
19
20
  import { firebaseAdmin } from "@aglyn/tenant-data-admin";
21
+ import { notifyOrderBuyer } from "./order-notifications.js";
22
+ import { ORDER_DELIVERED_EVENT, ORDER_FULFILLED_EVENT } from "../model/order-events.js";
23
+ import { fulfillmentEventView, stageOrderEvent } from "./order-events.js";
24
+ import { createHash } from "crypto";
25
+ /** How long a carrier name and a tracking number may be, on every door. */ export const CARRIER_MAX = 40;
26
+ export const TRACKING_NUMBER_MAX = 60;
27
+ const URL_MAX = 2048;
28
+ /** Trims a carrier and a tracking number to what every door stores. */ export function boundTracking(input) {
29
+ var _input_carrier, _input_trackingNumber;
30
+ return {
31
+ carrier: String((_input_carrier = input.carrier) != null ? _input_carrier : '').trim().slice(0, CARRIER_MAX),
32
+ trackingNumber: String((_input_trackingNumber = input.trackingNumber) != null ? _input_trackingNumber : '').trim().slice(0, TRACKING_NUMBER_MAX)
33
+ };
34
+ }
35
+ /** An https link or nothing: a stored link is rendered to buyers as an anchor. */ export function safeHttpsUrl(value) {
36
+ const text = String(value != null ? value : '').trim();
37
+ if (!text || text.length > URL_MAX) return undefined;
38
+ try {
39
+ const url = new URL(text);
40
+ return url.protocol === 'https:' ? url.toString() : undefined;
41
+ } catch (unused) {
42
+ return undefined;
43
+ }
44
+ }
45
+ /** The fulfillment id a keyed attempt writes, so a retry finds it. */ export function fulfillmentIdForKey(orderId, key) {
46
+ return `f-${createHash('sha256').update(`${orderId}:${key}`).digest('hex').slice(0, 20)}`;
47
+ }
48
+ /** The tracking keys a fulfillment stores: the number, the carrier and the link. */ function trackingFields(carrier, trackingNumber, explicitUrl) {
49
+ var _CommerceModel_trackingUrlFor;
50
+ const trackingUrl = explicitUrl != null ? explicitUrl : trackingNumber ? (_CommerceModel_trackingUrlFor = CommerceModel.trackingUrlFor(carrier, trackingNumber)) != null ? _CommerceModel_trackingUrlFor : undefined : undefined;
51
+ return _extends({}, carrier ? {
52
+ carrier
53
+ } : {}, trackingNumber ? {
54
+ trackingNumber
55
+ } : {}, trackingUrl ? {
56
+ trackingUrl
57
+ } : {});
58
+ }
59
+ /** The timeline's words for a shipment. */ function shipmentDetail(order, lines, partial, carrier, trackingNumber) {
60
+ const tracking = trackingNumber ? `${carrier || 'Shipped'} ${trackingNumber}` : '';
61
+ if (!partial) return tracking || 'Fulfilled';
62
+ const what = CommerceModel.describeFulfillmentLines(order, lines);
63
+ return tracking ? `${what} — ${tracking}` : `${what} shipped`;
64
+ }
65
+ function orderRefFor(hostId, orderId) {
66
+ return firebaseAdmin.app().firestore().collection('hosts').doc(hostId).collection('orders').doc(orderId);
67
+ }
20
68
  /**
21
69
  * Record a shipment — the transaction, with NO authorization of any kind
22
70
  * (AGL-2461).
@@ -37,58 +85,322 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
37
85
  * trust in ways that have nothing in common (a Firebase uid in `memberRoles`
38
86
  * for the console; an org credential that owns the host for `/v1`).
39
87
  *
88
+ * QUANTITIES (AGL-3611). A shipment names units, not just lines, and the
89
+ * remaining count is computed from the transaction's own read, so two admins
90
+ * shipping the last 3 mugs at once cannot ship 6: the second meets
91
+ * `invalid_lines` with `over_fulfilled`. The resulting status is computed
92
+ * from the fulfillments (`statusFromFulfillments`) — `partially_fulfilled`
93
+ * until every shippable unit is covered — and the transition rule is re-asked
94
+ * only when the status actually moves, since a second partial shipment on a
95
+ * `partially_fulfilled` order changes nothing the table speaks to.
96
+ *
40
97
  * Every guarantee AGL-1819 built is inside the transaction and therefore
41
98
  * inherited by both callers: `canTransitionOrder` is re-asked under the write
42
99
  * so a stale caller cannot skip a state, the already-in-target case returns
43
- * without writing so a retry cannot append a duplicate shipment, and
44
- * `lineItemIds` and the timeline are computed from the transaction's OWN read
45
- * so a note landed from another tab survives.
46
- */ export async function recordOrderShipment({ hostId, orderId, to, carrier, trackingNumber }) {
100
+ * without writing so a retry cannot append a duplicate shipment, and the
101
+ * lines and the timeline are computed from the transaction's OWN read so a
102
+ * note landed from another tab survives.
103
+ */ export async function recordOrderShipment(request) {
104
+ var _result_fulfillment, _result_fulfillment1;
105
+ const { hostId, orderId, to } = request;
106
+ const { carrier, trackingNumber } = boundTracking(request);
107
+ const explicitUrl = safeHttpsUrl(request.trackingUrl);
108
+ const labelUrl = safeHttpsUrl(request.labelUrl);
47
109
  const firestore = firebaseAdmin.app().firestore();
48
- const orderRef = firestore.collection('hosts').doc(hostId).collection('orders').doc(orderId);
49
- return firestore.runTransaction(async (transaction)=>{
50
- var _snapshot_data, _order_fulfillments, _order_lineItems;
110
+ const orderRef = orderRefFor(hostId, orderId);
111
+ const keyedId = request.idempotencyKey ? fulfillmentIdForKey(orderId, String(request.idempotencyKey).slice(0, 200)) : null;
112
+ const result = await firestore.runTransaction(async (transaction)=>{
113
+ var _snapshot_data, _request_lineItems, _order_fulfillments;
51
114
  const snapshot = await transaction.get(orderRef);
52
115
  if (!snapshot.exists) return {
53
116
  outcome: 'no_such_order'
54
117
  };
55
118
  const order = CommerceModel.liftLegacyOrder((_snapshot_data = snapshot.data()) != null ? _snapshot_data : {});
56
- // A redelivered click, or the second of two admins. Success because it
57
- // IS the state the caller asked for — but nothing is written, so a
58
- // retry cannot append a second copy of the same fulfillment.
59
- if (order.status === to) return {
119
+ const atMs = Date.now();
120
+ if (to === 'delivered') {
121
+ if (order.status === 'delivered') return {
122
+ outcome: 'already'
123
+ };
124
+ if (!CommerceModel.canTransitionOrder(order.status, 'delivered')) {
125
+ return {
126
+ outcome: 'blocked',
127
+ from: order.status
128
+ };
129
+ }
130
+ const delivered = {
131
+ status: 'delivered',
132
+ updatedAtMs: atMs,
133
+ timeline: CommerceModel.appendOrderEvent(order, 'delivered', undefined, atMs)
134
+ };
135
+ transaction.update(orderRef, delivered);
136
+ stageOrderEvent(transaction, ORDER_DELIVERED_EVENT, {
137
+ hostId,
138
+ orderId,
139
+ key: 'delivered',
140
+ order: _extends({}, snapshot.data(), delivered)
141
+ });
142
+ return {
143
+ outcome: 'recorded',
144
+ status: 'delivered'
145
+ };
146
+ }
147
+ // A redelivered keyed attempt: the fulfillment it wrote is there.
148
+ if (keyedId) {
149
+ var _order_fulfillments1;
150
+ const existing = ((_order_fulfillments1 = order.fulfillments) != null ? _order_fulfillments1 : []).find((entry)=>entry.id === keyedId);
151
+ if (existing) return {
152
+ outcome: 'already',
153
+ fulfillment: existing
154
+ };
155
+ }
156
+ if (request.onceByTracking && trackingNumber) {
157
+ const same = CommerceModel.fulfillmentWithTracking(order, trackingNumber);
158
+ if (same) return {
159
+ outcome: 'already',
160
+ fulfillment: same
161
+ };
162
+ }
163
+ const named = ((_request_lineItems = request.lineItems) != null ? _request_lineItems : []).length > 0;
164
+ // A redelivered click, or the second of two admins, on a "fulfil
165
+ // everything". Success because it IS the state the caller asked for —
166
+ // but nothing is written, so a retry cannot append a second copy.
167
+ if (!named && order.status === 'fulfilled') return {
60
168
  outcome: 'already'
61
169
  };
62
- if (!CommerceModel.canTransitionOrder(order.status, to)) {
170
+ if (order.status !== 'partially_fulfilled' && order.status !== 'fulfilled' && !CommerceModel.canTransitionOrder(order.status, 'partially_fulfilled') && !CommerceModel.canTransitionOrder(order.status, 'fulfilled')) {
171
+ return {
172
+ outcome: 'blocked',
173
+ from: order.status
174
+ };
175
+ }
176
+ let lines;
177
+ if (named) {
178
+ var _request_lineItems1;
179
+ const resolved = CommerceModel.resolveFulfillmentLines(order, (_request_lineItems1 = request.lineItems) != null ? _request_lineItems1 : []);
180
+ if (!('lines' in resolved)) {
181
+ return {
182
+ outcome: 'invalid_lines',
183
+ problem: resolved,
184
+ message: CommerceModel.describeFulfillmentLinesProblem(resolved)
185
+ };
186
+ }
187
+ lines = resolved.lines;
188
+ } else {
189
+ lines = CommerceModel.remainingFulfillmentLines(order);
190
+ // Nothing physical left: a fulfil closes the digital and service
191
+ // lines instead, which is what it did before quantities existed.
192
+ if (lines.length === 0) {
193
+ lines = CommerceModel.orderLineFulfillmentStates(order).filter((state)=>state.remainingQuantity > 0).map((state)=>({
194
+ lineItemId: state.lineItemId,
195
+ quantity: state.remainingQuantity
196
+ }));
197
+ }
198
+ }
199
+ const fulfillment = _extends({
200
+ id: keyedId != null ? keyedId : createResourceUid(),
201
+ lineItemIds: lines.map((entry)=>entry.lineItemId),
202
+ lines
203
+ }, trackingFields(carrier, trackingNumber, explicitUrl), labelUrl ? {
204
+ labelUrl
205
+ } : {}, request.labelRef ? {
206
+ labelRef: String(request.labelRef).slice(0, 80)
207
+ } : {}, {
208
+ status: 'active',
209
+ notify: request.notify !== false,
210
+ atMs
211
+ });
212
+ const fulfillments = [
213
+ ...(_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : [],
214
+ fulfillment
215
+ ];
216
+ let status = CommerceModel.statusFromFulfillments({
217
+ lineItems: order.lineItems,
218
+ fulfillments
219
+ });
220
+ // A fulfil with nothing left to cover still closes the order.
221
+ if (status === 'paid') status = 'fulfilled';
222
+ if (status !== order.status && !CommerceModel.canTransitionOrder(order.status, status)) {
63
223
  return {
64
224
  outcome: 'blocked',
65
225
  from: order.status
66
226
  };
67
227
  }
228
+ const shipped = {
229
+ status,
230
+ fulfillments,
231
+ // What a shipping tool's feed asks (AGL-3613): which orders changed.
232
+ updatedAtMs: atMs,
233
+ timeline: CommerceModel.appendOrderEvent(order, status, shipmentDetail(order, lines, status === 'partially_fulfilled', carrier, trackingNumber), atMs)
234
+ };
235
+ transaction.update(orderRef, shipped);
236
+ // Once per shipment (AGL-3611), in the same write, so the event exists
237
+ // exactly when the shipment does.
238
+ stageOrderEvent(transaction, ORDER_FULFILLED_EVENT, {
239
+ hostId,
240
+ orderId,
241
+ key: fulfillment.id,
242
+ order: _extends({}, snapshot.data(), shipped),
243
+ extra: {
244
+ fulfillment: fulfillmentEventView(order, fulfillment)
245
+ }
246
+ });
247
+ return {
248
+ outcome: 'recorded',
249
+ status,
250
+ fulfillment
251
+ };
252
+ });
253
+ // The BUYER hears about it (AGL-3610): shipped with the tracking link, or
254
+ // delivered. Once per shipment, after the write, and never fails the
255
+ // shipment — see `order-notifications.ts`. A retry returns `already` above
256
+ // and never reaches here. A merchant who unticked "Notify customer"
257
+ // (AGL-3611) recorded the shipment with `notify: false`, and nobody is told.
258
+ // Every shipment recorded, by any door, is announced (AGL-3612), so a
259
+ // plugin that follows parcels can follow one typed in by hand too.
260
+ if (result.outcome === 'recorded' && ((_result_fulfillment = result.fulfillment) == null ? void 0 : _result_fulfillment.trackingNumber)) {
261
+ await announcePluginShipment(_extends({
262
+ hostId,
263
+ recordId: orderId,
264
+ shipmentId: result.fulfillment.id
265
+ }, result.fulfillment.carrier ? {
266
+ carrier: result.fulfillment.carrier
267
+ } : {}, {
268
+ trackingNumber: result.fulfillment.trackingNumber
269
+ }, request.labelRef ? {
270
+ labelRef: request.labelRef
271
+ } : {}));
272
+ }
273
+ if (result.outcome === 'recorded' && ((_result_fulfillment1 = result.fulfillment) == null ? void 0 : _result_fulfillment1.notify) !== false) {
274
+ await notifyOrderBuyer({
275
+ hostId,
276
+ orderId
277
+ }, to === 'fulfilled' ? 'shipped' : 'delivered', result.fulfillment ? {
278
+ fulfillmentId: result.fulfillment.id
279
+ } : {});
280
+ }
281
+ return result;
282
+ }
283
+ /**
284
+ * Corrects the tracking on one fulfillment (AGL-3611): a mistyped number, a
285
+ * carrier swapped, a label bought after the parcel was recorded. Moves no
286
+ * status and no stock. A cancelled fulfillment is history and is refused.
287
+ */ export async function updateFulfillmentTracking(request) {
288
+ const { carrier, trackingNumber } = boundTracking(request);
289
+ const explicitUrl = safeHttpsUrl(request.trackingUrl);
290
+ const orderRef = orderRefFor(request.hostId, request.orderId);
291
+ return firebaseAdmin.app().firestore().runTransaction(async (transaction)=>{
292
+ var _snapshot_data, _order_fulfillments, _order_fulfillments1, _current_carrier, _next_carrier, _current_trackingNumber, _next_trackingNumber, _current_trackingUrl, _next_trackingUrl, _order_fulfillments2;
293
+ const snapshot = await transaction.get(orderRef);
294
+ if (!snapshot.exists) return {
295
+ outcome: 'no_such_order'
296
+ };
297
+ const order = CommerceModel.liftLegacyOrder((_snapshot_data = snapshot.data()) != null ? _snapshot_data : {});
298
+ const index = ((_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : []).findIndex((entry)=>entry.id === request.fulfillmentId);
299
+ if (index < 0) return {
300
+ outcome: 'no_such_fulfillment'
301
+ };
302
+ const current = ((_order_fulfillments1 = order.fulfillments) != null ? _order_fulfillments1 : [])[index];
303
+ if (!CommerceModel.fulfillmentIsActive(current) || ![
304
+ 'paid',
305
+ 'partially_fulfilled',
306
+ 'fulfilled',
307
+ 'delivered'
308
+ ].includes(order.status)) {
309
+ return {
310
+ outcome: 'locked',
311
+ from: CommerceModel.fulfillmentIsActive(current) ? order.status : 'cancelled'
312
+ };
313
+ }
68
314
  const atMs = Date.now();
69
- const patch = to === 'fulfilled' ? {
70
- status: 'fulfilled',
71
- fulfillments: [
72
- ...(_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : [],
73
- _extends({
74
- id: createResourceUid(),
75
- lineItemIds: ((_order_lineItems = order.lineItems) != null ? _order_lineItems : []).map((_line, index)=>index)
76
- }, carrier ? {
77
- carrier
78
- } : {}, trackingNumber ? {
79
- trackingNumber
80
- } : {}, {
81
- atMs
82
- })
83
- ],
84
- timeline: CommerceModel.appendOrderEvent(order, 'fulfilled', trackingNumber ? `${carrier || 'Shipped'} ${trackingNumber}` : 'Fulfilled', atMs)
85
- } : {
86
- status: 'delivered',
87
- timeline: CommerceModel.appendOrderEvent(order, 'delivered', undefined, atMs)
315
+ const next = _extends({}, current, {
316
+ updatedAtMs: atMs
317
+ });
318
+ delete next.carrier;
319
+ delete next.trackingNumber;
320
+ delete next.trackingUrl;
321
+ Object.assign(next, trackingFields(carrier, trackingNumber, explicitUrl));
322
+ if (((_current_carrier = current.carrier) != null ? _current_carrier : '') === ((_next_carrier = next.carrier) != null ? _next_carrier : '') && ((_current_trackingNumber = current.trackingNumber) != null ? _current_trackingNumber : '') === ((_next_trackingNumber = next.trackingNumber) != null ? _next_trackingNumber : '') && ((_current_trackingUrl = current.trackingUrl) != null ? _current_trackingUrl : '') === ((_next_trackingUrl = next.trackingUrl) != null ? _next_trackingUrl : '')) {
323
+ return {
324
+ outcome: 'already',
325
+ fulfillment: current
326
+ };
327
+ }
328
+ const fulfillments = [
329
+ ...(_order_fulfillments2 = order.fulfillments) != null ? _order_fulfillments2 : []
330
+ ];
331
+ fulfillments[index] = next;
332
+ transaction.update(orderRef, {
333
+ fulfillments,
334
+ updatedAtMs: atMs,
335
+ timeline: CommerceModel.appendOrderEvent(order, 'tracking-updated', trackingNumber ? `${carrier || 'Tracking'} ${trackingNumber}` : 'Tracking removed', atMs)
336
+ });
337
+ return {
338
+ outcome: 'updated',
339
+ status: order.status,
340
+ fulfillment: next
88
341
  };
89
- transaction.update(orderRef, patch);
342
+ });
343
+ }
344
+ /**
345
+ * Cancels one fulfillment (AGL-3611): the parcel was never handed over, or was
346
+ * recorded against the wrong items. Its units go back to unfulfilled and the
347
+ * order's status is recomputed from what remains — `fulfilled` can step back
348
+ * to `partially_fulfilled` or `paid`.
349
+ *
350
+ * That step back is NOT an `ORDER_TRANSITIONS` edge, on purpose: the table
351
+ * says what may happen to an order going forward, and admitting
352
+ * `fulfilled → paid` there would open it to every other caller. This is the one writer
353
+ * that may take it, and only from a status whose fulfillments are still open
354
+ * (`orderFulfillmentsEditable`): a delivered, refunded or cancelled order's
355
+ * shipments are what happened and stay that way.
356
+ */ export async function cancelOrderFulfillment(request) {
357
+ const orderRef = orderRefFor(request.hostId, request.orderId);
358
+ return firebaseAdmin.app().firestore().runTransaction(async (transaction)=>{
359
+ var _snapshot_data, _order_fulfillments, _order_fulfillments1, _order_fulfillments2;
360
+ const snapshot = await transaction.get(orderRef);
361
+ if (!snapshot.exists) return {
362
+ outcome: 'no_such_order'
363
+ };
364
+ const order = CommerceModel.liftLegacyOrder((_snapshot_data = snapshot.data()) != null ? _snapshot_data : {});
365
+ const index = ((_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : []).findIndex((entry)=>entry.id === request.fulfillmentId);
366
+ if (index < 0) return {
367
+ outcome: 'no_such_fulfillment'
368
+ };
369
+ const current = ((_order_fulfillments1 = order.fulfillments) != null ? _order_fulfillments1 : [])[index];
370
+ if (!CommerceModel.fulfillmentIsActive(current)) return {
371
+ outcome: 'already',
372
+ fulfillment: current
373
+ };
374
+ if (!CommerceModel.orderFulfillmentsEditable(order)) {
375
+ return {
376
+ outcome: 'locked',
377
+ from: order.status
378
+ };
379
+ }
380
+ const atMs = Date.now();
381
+ const next = _extends({}, current, {
382
+ status: 'cancelled',
383
+ cancelledAtMs: atMs,
384
+ updatedAtMs: atMs
385
+ });
386
+ const fulfillments = [
387
+ ...(_order_fulfillments2 = order.fulfillments) != null ? _order_fulfillments2 : []
388
+ ];
389
+ fulfillments[index] = next;
390
+ const status = CommerceModel.statusFromFulfillments({
391
+ lineItems: order.lineItems,
392
+ fulfillments
393
+ });
394
+ transaction.update(orderRef, {
395
+ status,
396
+ fulfillments,
397
+ updatedAtMs: atMs,
398
+ timeline: CommerceModel.appendOrderEvent(order, 'fulfillment-cancelled', CommerceModel.describeFulfillmentLines(order, CommerceModel.fulfillmentLineQuantities(order, current)) + ' back to unfulfilled', atMs)
399
+ });
90
400
  return {
91
- outcome: 'recorded'
401
+ outcome: 'updated',
402
+ status,
403
+ fulfillment: next
92
404
  };
93
405
  });
94
406
  }
@@ -120,10 +432,11 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
120
432
  * is an `update()` naming only status, fulfillments and timeline, and the
121
433
  * question is still the merchant's to answer.
122
434
  *
123
- * NO NOTIFICATION EITHER, matching the client write this replaces: the
435
+ * NO MANAGER NOTIFICATION, matching the client write this replaces: the
124
436
  * merchant fulfilled the order themselves, and `notifyHostManagers` would
125
437
  * tell them what they just did. (`supplier-update.ts` notifies because there
126
- * the SUPPLIER acted and the merchant is the one who needs to hear it.)
438
+ * the SUPPLIER acted and the merchant is the one who needs to hear it.) The
439
+ * BUYER is told, through `recordOrderShipment` (AGL-3610).
127
440
  *
128
441
  * ONCE. A retried request — a lost response, a second click — finds the order
129
442
  * already in the target status and returns success WITHOUT writing: appending
@@ -140,7 +453,7 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
140
453
  * Role gate: `admin` and `editor`, the role the client write already had
141
454
  * under the rules' host catch-all — same reasoning as `cancel-order.ts`.
142
455
  */ export const fulfillOrderHandler = async (req, res)=>{
143
- var _req_headers_authorization, _req_body, _body_hostId, _body_orderId, _body_to, _body_carrier, _body_trackingNumber;
456
+ var _req_headers_authorization, _req_body, _body_hostId, _body_orderId, _body_action, _body_fulfillmentId, _body_to, _ref, _req_headers_idempotencykey;
144
457
  if (req.method !== 'POST') {
145
458
  return res.status(405).json({
146
459
  error: 'Method not allowed'
@@ -166,15 +479,33 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
166
479
  error: 'Missing hostId or orderId'
167
480
  });
168
481
  }
482
+ // Two more acts on one fulfillment (AGL-3611): correct its tracking, or
483
+ // cancel it. Same route, same role gate; neither moves stock or money.
484
+ const action = String((_body_action = body.action) != null ? _body_action : '');
485
+ const fulfillmentId = String((_body_fulfillmentId = body.fulfillmentId) != null ? _body_fulfillmentId : '').slice(0, 100);
486
+ if ((action === 'update-tracking' || action === 'cancel-fulfillment') && !fulfillmentId) {
487
+ return res.status(400).json({
488
+ error: 'Missing fulfillmentId'
489
+ });
490
+ }
169
491
  const to = String((_body_to = body.to) != null ? _body_to : '');
170
- if (to !== 'fulfilled' && to !== 'delivered') {
492
+ if (!action && to !== 'fulfilled' && to !== 'delivered') {
171
493
  // Deliberately NOT a generic transition endpoint — see the header.
172
494
  return res.status(400).json({
173
495
  error: 'to must be fulfilled or delivered'
174
496
  });
175
497
  }
176
- const carrier = String((_body_carrier = body.carrier) != null ? _body_carrier : '').slice(0, 40);
177
- const trackingNumber = String((_body_trackingNumber = body.trackingNumber) != null ? _body_trackingNumber : '').slice(0, 60);
498
+ if (action && action !== 'update-tracking' && action !== 'cancel-fulfillment') {
499
+ return res.status(400).json({
500
+ error: 'Unknown action'
501
+ });
502
+ }
503
+ const { carrier, trackingNumber } = boundTracking(body);
504
+ const lineItems = Array.isArray(body.lineItems) ? body.lineItems.slice(0, 500).map((entry)=>({
505
+ lineItemId: Number(entry == null ? void 0 : entry.lineItemId),
506
+ quantity: Number(entry == null ? void 0 : entry.quantity)
507
+ })) : undefined;
508
+ const idempotencyKey = String((_ref = (_req_headers_idempotencykey = req.headers['idempotency-key']) != null ? _req_headers_idempotencykey : body.idempotencyKey) != null ? _ref : '').slice(0, 200);
178
509
  try {
179
510
  var _hostSnapshot_get;
180
511
  const decoded = await firebaseAdmin.app().auth().verifyIdToken(idToken);
@@ -192,33 +523,104 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
192
523
  error: 'Not permitted'
193
524
  });
194
525
  }
526
+ if (action) {
527
+ const change = action === 'update-tracking' ? await updateFulfillmentTracking({
528
+ hostId,
529
+ orderId,
530
+ fulfillmentId,
531
+ carrier,
532
+ trackingNumber,
533
+ trackingUrl: body.trackingUrl
534
+ }) : await cancelOrderFulfillment({
535
+ hostId,
536
+ orderId,
537
+ fulfillmentId
538
+ });
539
+ // A corrected tracking number is a parcel to follow (AGL-3612).
540
+ if (change.outcome === 'updated' && action === 'update-tracking' && change.fulfillment.trackingNumber) {
541
+ await announcePluginShipment(_extends({
542
+ hostId,
543
+ recordId: orderId,
544
+ shipmentId: change.fulfillment.id
545
+ }, change.fulfillment.carrier ? {
546
+ carrier: change.fulfillment.carrier
547
+ } : {}, {
548
+ trackingNumber: change.fulfillment.trackingNumber
549
+ }));
550
+ }
551
+ if (change.outcome === 'no_such_order') return res.status(404).json({
552
+ error: 'Unknown order'
553
+ });
554
+ if (change.outcome === 'no_such_fulfillment') {
555
+ return res.status(404).json({
556
+ error: 'That shipment is no longer on this order'
557
+ });
558
+ }
559
+ if (change.outcome === 'locked') {
560
+ return res.status(409).json({
561
+ error: change.from === 'cancelled' ? 'That shipment was canceled and can no longer be edited' : `Shipments on an order in "${change.from}" can no longer be changed`
562
+ });
563
+ }
564
+ return res.status(200).json(_extends({
565
+ ok: true
566
+ }, change.outcome === 'already' ? {
567
+ already: true
568
+ } : {
569
+ status: change.status
570
+ }, {
571
+ fulfillment: change.fulfillment
572
+ }));
573
+ }
195
574
  // Authorized above; the shipment itself is the shared transaction. The
196
- // wire shape below is unchanged — the console dialog branches on `ok`,
197
- // `already` and the 409's `error` string, and this route's contract is
198
- // with that dialog, not with the registry's vocabulary.
199
- const outcome = await recordOrderShipment({
575
+ // console dialog branches on `ok`, `already` and the 409's `error`
576
+ // string, and this route's contract is with that dialog, not with the
577
+ // registry's vocabulary.
578
+ const outcome = await recordOrderShipment(_extends({
200
579
  hostId,
201
580
  orderId,
202
581
  to,
203
582
  carrier,
204
583
  trackingNumber
205
- });
584
+ }, lineItems ? {
585
+ lineItems
586
+ } : {}, body.trackingUrl ? {
587
+ trackingUrl: String(body.trackingUrl)
588
+ } : {}, body.labelUrl ? {
589
+ labelUrl: String(body.labelUrl)
590
+ } : {}, body.notify === false ? {
591
+ notify: false
592
+ } : {}, idempotencyKey ? {
593
+ idempotencyKey
594
+ } : {}));
206
595
  if (outcome.outcome === 'no_such_order') {
207
596
  return res.status(404).json({
208
597
  error: 'Unknown order'
209
598
  });
210
599
  }
600
+ if (outcome.outcome === 'invalid_lines') {
601
+ return res.status(outcome.problem.problem === 'over_fulfilled' ? 409 : 400).json({
602
+ error: outcome.message
603
+ });
604
+ }
211
605
  if (outcome.outcome === 'blocked') {
212
606
  return res.status(409).json({
213
607
  error: to === 'delivered' ? `Orders in "${outcome.from}" cannot be marked delivered` : `Orders in "${outcome.from}" cannot be fulfilled`
214
608
  });
215
609
  }
216
- return res.status(200).json(outcome.outcome === 'already' ? {
610
+ if (outcome.outcome === 'already') {
611
+ return res.status(200).json(_extends({
612
+ ok: true,
613
+ already: true
614
+ }, outcome.fulfillment ? {
615
+ fulfillment: outcome.fulfillment
616
+ } : {}));
617
+ }
618
+ return res.status(200).json(_extends({
217
619
  ok: true,
218
- already: true
219
- } : {
220
- ok: true
221
- });
620
+ status: outcome.status
621
+ }, outcome.fulfillment ? {
622
+ fulfillment: outcome.fulfillment
623
+ } : {}));
222
624
  } catch (error) {
223
625
  // Nothing landed — the transaction is all-or-nothing — so the order is
224
626
  // still where it was and the merchant can try again.