@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,891 @@
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 { claimAttempt } from "@aglyn/aglyn/server";
18
+ import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
19
+ import { nameSearchKey } from "@aglyn/aglyn/app-utils/name-search";
20
+ import { recordPluginPersonRefund } from "@aglyn/aglyn/plugin-manager/plugin-person-records";
21
+ import { reverseOrderConversion } from "@aglyn/aglyn/plugin-manager/plugin-conversion-credit";
22
+ import * as CommerceModel from "../model/index.js";
23
+ import { planPosReturn, posMoney, posRefundableByTender, posReturnedQuantities, posReturnLineValues, posTenderLabel, POS_STRIPE_TENDERS, splitPosRefund } from "../model/commerce-pos-ops.js";
24
+ import { ORDER_REFUNDED_EVENT, RETURN_REFUNDED_EVENT } from "../model/order-events.js";
25
+ import { raiseOrderEvent } from "./order-events.js";
26
+ import { applyGiftCardRiskToOrder } from "./gift-card-risk.js";
27
+ import { notifyOrderBuyer } from "./order-notifications.js";
28
+ import { decidePosRefundAuthority } from "./pos-refund-authority.js";
29
+ import { authorizePosOps, defaultPosOpsDeps, posOpsBody, posOpsCleanId, posOpsIdempotencyKey, readPosRegister, isPosManager, resolvePosCashier } from "./pos-ops-gate.js";
30
+ import { createStripeRefund } from "./stripe-refund.js";
31
+ export function defaultPosReturnDeps() {
32
+ const base = defaultPosOpsDeps();
33
+ return _extends({}, base, {
34
+ afterRefund: async (input)=>{
35
+ const settle = async (label, work)=>{
36
+ try {
37
+ await work();
38
+ } catch (error) {
39
+ console.error(`[pos-return] ${label} failed`, input.orderId, error);
40
+ }
41
+ };
42
+ const hostRef = base.firestore().collection('hosts').doc(input.hostId);
43
+ if (input.returnedProductIds.length) {
44
+ await settle('gift card void', ()=>applyGiftCardRiskToOrder({
45
+ firestore: base.firestore(),
46
+ hostRef,
47
+ orderId: input.orderId,
48
+ action: _extends({
49
+ kind: 'void',
50
+ reason: 'refund'
51
+ }, input.fullyRefunded ? {} : {
52
+ productIds: input.returnedProductIds
53
+ })
54
+ }));
55
+ }
56
+ await settle('person refund', ()=>recordPluginPersonRefund({
57
+ hostId: input.hostId,
58
+ refId: input.orderId,
59
+ email: input.email,
60
+ amountCents: input.refundCents,
61
+ closedTheSale: input.closedTheOrder
62
+ }));
63
+ await settle('conversion reversal', ()=>reverseOrderConversion({
64
+ hostId: input.hostId,
65
+ orderId: input.orderId,
66
+ amountCents: input.refundCents,
67
+ closedTheOrder: input.closedTheOrder
68
+ }));
69
+ // The same events a refund from the order dialog and a refunded online
70
+ // return raise, so accounting and the merchant's webhooks hear a
71
+ // register return too (AGL-3611's events).
72
+ await settle('refund event', ()=>{
73
+ var _input_refundIds_;
74
+ return raiseOrderEvent(ORDER_REFUNDED_EVENT, {
75
+ hostId: input.hostId,
76
+ orderId: input.orderId,
77
+ key: `pos-return:${input.returnId}`,
78
+ extra: {
79
+ refund: {
80
+ id: (_input_refundIds_ = input.refundIds[0]) != null ? _input_refundIds_ : null,
81
+ amountCents: input.refundCents,
82
+ lineItemIds: input.fullLineIndexes,
83
+ full: input.fullyRefunded
84
+ }
85
+ }
86
+ });
87
+ });
88
+ await settle('return event', ()=>{
89
+ var _input_storeReturn_refundCents;
90
+ return raiseOrderEvent(RETURN_REFUNDED_EVENT, {
91
+ hostId: input.hostId,
92
+ orderId: input.orderId,
93
+ key: `return-refunded:${input.returnId}`,
94
+ extra: {
95
+ return: {
96
+ id: input.returnId,
97
+ status: input.storeReturn.status,
98
+ lines: input.storeReturn.lines.map((line)=>_extends({}, line)),
99
+ refundCents: (_input_storeReturn_refundCents = input.storeReturn.refundCents) != null ? _input_storeReturn_refundCents : null
100
+ }
101
+ }
102
+ });
103
+ });
104
+ await settle('buyer notice', ()=>notifyOrderBuyer({
105
+ hostId: input.hostId,
106
+ orderId: input.orderId
107
+ }, 'refunded', {
108
+ refundId: '',
109
+ refundCents: input.refundCents,
110
+ refundLineIndexes: input.lineIndexes,
111
+ fullyRefunded: input.fullyRefunded
112
+ }));
113
+ }
114
+ });
115
+ }
116
+ /** The statuses a return may be taken against. */ const RETURNABLE = new Set([
117
+ 'paid',
118
+ 'partially_fulfilled',
119
+ 'fulfilled',
120
+ 'delivered'
121
+ ]);
122
+ /** One order as the return dialog lists it. */ function returnSummary(id, raw, held = []) {
123
+ var _order_number, _order_channel, _order_createdAtMs, _order_customerEmail, _order_customerName, _ref, _ref1, _order_refundedCents, _order_lineItems;
124
+ var _order_totals;
125
+ const order = CommerceModel.liftLegacyOrder(raw);
126
+ const values = posReturnLineValues(order);
127
+ const returned = posReturnedQuantities(order);
128
+ return {
129
+ id,
130
+ number: (_order_number = order['number']) != null ? _order_number : null,
131
+ label: CommerceModel.formatOrderNumber(order, id),
132
+ status: order['status'],
133
+ channel: (_order_channel = order['channel']) != null ? _order_channel : 'online',
134
+ createdAtMs: Number((_order_createdAtMs = order['createdAtMs']) != null ? _order_createdAtMs : 0),
135
+ customerEmail: (_order_customerEmail = order['customerEmail']) != null ? _order_customerEmail : null,
136
+ customerName: (_order_customerName = order['customerName']) != null ? _order_customerName : null,
137
+ totalCents: Number((_ref = (_ref1 = (_order_totals = order.totals) == null ? void 0 : _order_totals.totalCents) != null ? _ref1 : order.amountCents) != null ? _ref : 0),
138
+ refundedCents: Number((_order_refundedCents = order.refundedCents) != null ? _order_refundedCents : 0),
139
+ returnable: RETURNABLE.has(String(order['status'])),
140
+ lines: ((_order_lineItems = order.lineItems) != null ? _order_lineItems : []).map((line, index)=>{
141
+ var _ref, _ref1, _ref2, _returned_index, _held_index, _values_index;
142
+ return {
143
+ index,
144
+ name: String((_ref = line == null ? void 0 : line.name) != null ? _ref : ''),
145
+ variantLabel: (_ref1 = line == null ? void 0 : line.variantLabel) != null ? _ref1 : null,
146
+ quantity: Math.max(1, Math.round(Number((_ref2 = line == null ? void 0 : line.quantity) != null ? _ref2 : 1))),
147
+ returned: (_returned_index = returned[index]) != null ? _returned_index : 0,
148
+ // Units an online return holds or already took (AGL-3611).
149
+ held: (_held_index = held[index]) != null ? _held_index : 0,
150
+ valueCents: (_values_index = values[index]) != null ? _values_index : 0
151
+ };
152
+ }),
153
+ tenders: posRefundableByTender(order).map((tender)=>({
154
+ id: tender.id,
155
+ method: tender.method,
156
+ label: posTenderLabel(tender),
157
+ amountCents: tender.amountCents,
158
+ refundableCents: tender.refundableCents
159
+ }))
160
+ };
161
+ }
162
+ async function findOrders(hostRef, rawText) {
163
+ var _snapshot_data;
164
+ const text = String(rawText != null ? rawText : '').trim().slice(0, 200);
165
+ if (!text) return [];
166
+ const orders = hostRef.collection('orders');
167
+ const digits = text.replace(/^#/, '');
168
+ if (/^\d{1,12}$/.test(digits)) {
169
+ const snapshot = await orders.where('number', '==', Number(digits)).limit(5).get();
170
+ return snapshot.docs.map((doc)=>{
171
+ var _doc_data;
172
+ return {
173
+ id: doc.id,
174
+ data: (_doc_data = doc.data()) != null ? _doc_data : {}
175
+ };
176
+ });
177
+ }
178
+ if (text.includes('@')) {
179
+ const snapshot = await orders.where('customerEmailLower', '==', nameSearchKey(text)).orderBy('createdAtMs', 'desc').limit(10).get();
180
+ return snapshot.docs.map((doc)=>{
181
+ var _doc_data;
182
+ return {
183
+ id: doc.id,
184
+ data: (_doc_data = doc.data()) != null ? _doc_data : {}
185
+ };
186
+ });
187
+ }
188
+ const id = posOpsCleanId(text);
189
+ if (!id) return [];
190
+ const snapshot = await orders.doc(id).get();
191
+ return snapshot.exists ? [
192
+ {
193
+ id,
194
+ data: (_snapshot_data = snapshot.data()) != null ? _snapshot_data : {}
195
+ }
196
+ ] : [];
197
+ }
198
+ function parsePicks(raw) {
199
+ if (!Array.isArray(raw)) return [];
200
+ return raw.slice(0, 200).map((entry)=>({
201
+ index: Number(entry == null ? void 0 : entry.index),
202
+ quantity: Number(entry == null ? void 0 : entry.quantity)
203
+ }));
204
+ }
205
+ function parseSplit(raw) {
206
+ if (!Array.isArray(raw) || !raw.length) return null;
207
+ return raw.slice(0, 20).map((entry)=>{
208
+ var _ref;
209
+ return {
210
+ paymentId: String((_ref = entry == null ? void 0 : entry.paymentId) != null ? _ref : ''),
211
+ amountCents: Number(entry == null ? void 0 : entry.amountCents)
212
+ };
213
+ });
214
+ }
215
+ export async function handlePosReturn(deps, req) {
216
+ var _body_action, _body_reason, _register_data_openShiftId;
217
+ if (req.method !== 'POST') return {
218
+ status: 405,
219
+ body: {
220
+ error: 'Method not allowed'
221
+ }
222
+ };
223
+ const body = posOpsBody(req);
224
+ const gate = await authorizePosOps(deps, req, body['hostId']);
225
+ if ('error' in gate) return {
226
+ status: gate.status,
227
+ body: {
228
+ error: gate.error
229
+ }
230
+ };
231
+ const staff = gate.staff;
232
+ const action = String((_body_action = body['action']) != null ? _body_action : '');
233
+ if (action === 'find') {
234
+ const found = await findOrders(staff.hostRef, body['text']);
235
+ const held = await Promise.all(found.map(async (entry)=>unitsHeldByOnlineReturns((await staff.hostRef.collection('returns').where('orderId', '==', entry.id).get()).docs)));
236
+ return {
237
+ status: 200,
238
+ body: {
239
+ orders: found.map((entry, at)=>returnSummary(entry.id, entry.data, held[at]))
240
+ }
241
+ };
242
+ }
243
+ if (action !== 'refund') return {
244
+ status: 400,
245
+ body: {
246
+ error: 'Unknown action'
247
+ }
248
+ };
249
+ const register = await readPosRegister(staff, body['registerId']);
250
+ if ('error' in register) return {
251
+ status: register.status,
252
+ body: {
253
+ error: register.error
254
+ }
255
+ };
256
+ const registerId = register.ref.id;
257
+ const orderId = posOpsCleanId(body['orderId']);
258
+ if (!orderId) return {
259
+ status: 400,
260
+ body: {
261
+ error: 'Missing orderId'
262
+ }
263
+ };
264
+ const idempotencyKey = posOpsIdempotencyKey(req);
265
+ if (!idempotencyKey) {
266
+ return {
267
+ status: 400,
268
+ body: {
269
+ error: 'A refund needs an Idempotency-Key header.'
270
+ }
271
+ };
272
+ }
273
+ const picks = parsePicks(body['lines']);
274
+ const requestedSplit = parseSplit(body['tenders']);
275
+ const restock = body['restock'] !== false;
276
+ const reason = String((_body_reason = body['reason']) != null ? _body_reason : '').trim().slice(0, 200);
277
+ const reasonCode = CommerceModel.RETURN_REASONS.includes(body['reasonCode']) ? body['reasonCode'] : 'other';
278
+ const firestore = deps.firestore();
279
+ const orderRef = staff.hostRef.collection('orders').doc(orderId);
280
+ const storeReturns = staff.hostRef.collection('returns').where('orderId', '==', orderId);
281
+ // 1. Every refusal that needs no money to move.
282
+ const snapshot = await orderRef.get();
283
+ if (!snapshot.exists) return {
284
+ status: 404,
285
+ body: {
286
+ error: 'Unknown order'
287
+ }
288
+ };
289
+ const order = CommerceModel.liftLegacyOrder(snapshot.data());
290
+ if (!RETURNABLE.has(String(order['status']))) {
291
+ return {
292
+ status: 409,
293
+ body: {
294
+ error: `Orders in "${order['status']}" cannot be returned.`
295
+ }
296
+ };
297
+ }
298
+ if (CommerceModel.orderDisputeBlocksRefund(order)) {
299
+ return {
300
+ status: 409,
301
+ body: {
302
+ error: 'A chargeback is open on this order, so it was not refunded. Respond to the ' + 'dispute or accept it in the Stripe dashboard first.'
303
+ }
304
+ };
305
+ }
306
+ const plan = planPosReturn(order, picks, unitsHeldByOnlineReturns((await storeReturns.get()).docs));
307
+ if ('error' in plan) return {
308
+ status: 400,
309
+ body: {
310
+ error: plan.error
311
+ }
312
+ };
313
+ const split = splitPosRefund(order, plan.refundCents, requestedSplit);
314
+ if ('error' in split) return {
315
+ status: 400,
316
+ body: {
317
+ error: split.error
318
+ }
319
+ };
320
+ const cashier = await resolvePosCashier(deps, staff, registerId, body['cashierAssertion']);
321
+ // The limit is the person at the till's: a PIN-switched cashier is held
322
+ // to it even on a device a workspace admin signed in on.
323
+ const cashierIsManager = cashier.cashierId === staff.uid ? staff.isManager : await memberIsPosManager(deps, staff.hostRef, staff.hostId, cashier.cashierId);
324
+ const authority = await decidePosRefundAuthority(deps, {
325
+ hostId: staff.hostId,
326
+ hostRef: staff.hostRef,
327
+ registerId,
328
+ refundCents: plan.refundCents,
329
+ limitCents: staff.settings.refundLimitCents,
330
+ isManager: cashierIsManager,
331
+ managerAssertion: body['managerAssertion']
332
+ });
333
+ if ('body' in authority) return {
334
+ status: 403,
335
+ body: authority.body
336
+ };
337
+ const needsCash = split.allocations.some((slice)=>slice.method === 'cash');
338
+ const needsStripe = split.allocations.some((slice)=>POS_STRIPE_TENDERS.has(slice.method));
339
+ const openShiftId = String((_register_data_openShiftId = register.data['openShiftId']) != null ? _register_data_openShiftId : '') || null;
340
+ if (needsCash && !openShiftId && staff.settings.requireOpenShift) {
341
+ return {
342
+ status: 409,
343
+ body: {
344
+ error: 'Open a shift before paying cash out of the drawer.'
345
+ }
346
+ };
347
+ }
348
+ if (needsStripe && !process.env.STRIPE_SECRET_KEY) {
349
+ return {
350
+ status: 501,
351
+ body: {
352
+ error: 'Payments are not configured.'
353
+ }
354
+ };
355
+ }
356
+ // 2. The attempt claim.
357
+ const claimed = await claimAttempt(firestore, {
358
+ kind: 'pos-return',
359
+ scopeId: staff.hostId,
360
+ orgId: staff.orgId,
361
+ key: `${orderId}:${idempotencyKey}`,
362
+ busyMessage: 'This return is already being refunded'
363
+ });
364
+ if ('replay' in claimed) return {
365
+ status: claimed.replay.status,
366
+ body: claimed.replay.body
367
+ };
368
+ const claim = claimed.claim;
369
+ let reserved;
370
+ try {
371
+ reserved = await firestore.runTransaction(async (transaction)=>{
372
+ var _data, _fresh_refundedCents, _fresh_returnedQuantities, _fresh_posPaymentRefunds;
373
+ const fresh = CommerceModel.liftLegacyOrder((_data = (await transaction.get(orderRef)).data()) != null ? _data : {});
374
+ if (!RETURNABLE.has(String(fresh['status']))) {
375
+ throw new ReturnRefusal(409, `Orders in "${fresh['status']}" cannot be returned.`);
376
+ }
377
+ const freshPlan = planPosReturn(fresh, picks, unitsHeldByOnlineReturns((await transaction.get(storeReturns)).docs));
378
+ if ('error' in freshPlan) throw new ReturnRefusal(409, freshPlan.error);
379
+ const freshSplit = splitPosRefund(fresh, freshPlan.refundCents, requestedSplit);
380
+ if ('error' in freshSplit) throw new ReturnRefusal(409, freshSplit.error);
381
+ const prior = {
382
+ refundedCents: Number((_fresh_refundedCents = fresh.refundedCents) != null ? _fresh_refundedCents : 0),
383
+ returnedQuantities: _extends({}, (_fresh_returnedQuantities = fresh.returnedQuantities) != null ? _fresh_returnedQuantities : {}),
384
+ posPaymentRefunds: _extends({}, (_fresh_posPaymentRefunds = fresh.posPaymentRefunds) != null ? _fresh_posPaymentRefunds : {})
385
+ };
386
+ const posPaymentRefunds = _extends({}, prior.posPaymentRefunds);
387
+ for (const slice of freshSplit.allocations){
388
+ var _posPaymentRefunds_slice_paymentId;
389
+ posPaymentRefunds[slice.paymentId] = ((_posPaymentRefunds_slice_paymentId = posPaymentRefunds[slice.paymentId]) != null ? _posPaymentRefunds_slice_paymentId : 0) + slice.amountCents;
390
+ }
391
+ transaction.update(orderRef, {
392
+ refundedCents: prior.refundedCents + freshPlan.refundCents,
393
+ returnedQuantities: freshPlan.returnedQuantities,
394
+ posPaymentRefunds
395
+ });
396
+ return {
397
+ refundCents: freshPlan.refundCents,
398
+ lineCents: freshPlan.lineCents,
399
+ completedLines: freshPlan.completedLines,
400
+ allocations: freshSplit.allocations,
401
+ prior
402
+ };
403
+ });
404
+ } catch (error) {
405
+ await claim.release();
406
+ if (error instanceof ReturnRefusal) return {
407
+ status: error.status,
408
+ body: {
409
+ error: error.message
410
+ }
411
+ };
412
+ throw error;
413
+ }
414
+ // 4–5. The money, Stripe first.
415
+ const tenders = posRefundableByTender(order);
416
+ const tenderOf = (paymentId)=>tenders.find((tender)=>tender.id === paymentId);
417
+ const ordered = [
418
+ ...reserved.allocations
419
+ ].sort((a, b)=>Number(POS_STRIPE_TENDERS.has(b.method)) - Number(POS_STRIPE_TENDERS.has(a.method)));
420
+ const results = [];
421
+ for (const allocation of ordered){
422
+ const tender = tenderOf(allocation.paymentId);
423
+ const anyMoved = results.some((result)=>result.status === 'refunded');
424
+ try {
425
+ if (POS_STRIPE_TENDERS.has(allocation.method)) {
426
+ var _ref, _order_paymentIntentId;
427
+ const paymentIntentId = (_ref = tender == null ? void 0 : tender.paymentIntentId) != null ? _ref : String((_order_paymentIntentId = order['paymentIntentId']) != null ? _order_paymentIntentId : '');
428
+ if (!paymentIntentId) throw new ReturnRefusal(409, 'That card payment has nothing Stripe can refund.');
429
+ const refund = await createStripeRefund({
430
+ paymentIntentId,
431
+ amountCents: allocation.amountCents,
432
+ idempotencyKey: claim.stripeKey ? `${claim.stripeKey}:${allocation.paymentId}` : null,
433
+ metadata: {
434
+ hostId: staff.hostId,
435
+ orderId,
436
+ registerId,
437
+ kind: 'pos-return'
438
+ },
439
+ fetch: deps.fetch
440
+ });
441
+ if ('error' in refund) throw new ReturnRefusal(refund.status, refund.error);
442
+ results.push({
443
+ allocation,
444
+ status: 'refunded',
445
+ refundId: refund.refundId
446
+ });
447
+ } else if (allocation.method === 'gift_card') {
448
+ var _ref1;
449
+ await creditGiftCard(firestore, staff.hostRef, (_ref1 = tender == null ? void 0 : tender.giftCardId) != null ? _ref1 : '', allocation.amountCents, orderId, deps.now());
450
+ results.push({
451
+ allocation,
452
+ status: 'refunded'
453
+ });
454
+ } else if (allocation.method === 'folio') {
455
+ var _ref2, _order_reservationId;
456
+ await reverseFolio(staff.hostRef, (_ref2 = tender == null ? void 0 : tender.reservationId) != null ? _ref2 : String((_order_reservationId = order['reservationId']) != null ? _order_reservationId : ''), allocation.amountCents, orderId, deps.now());
457
+ results.push({
458
+ allocation,
459
+ status: 'refunded'
460
+ });
461
+ } else {
462
+ // Cash: recorded on the drawer with the return itself, below.
463
+ results.push({
464
+ allocation,
465
+ status: 'refunded'
466
+ });
467
+ }
468
+ } catch (error) {
469
+ const message = error instanceof ReturnRefusal ? error.message : 'Refund failed';
470
+ if (!(error instanceof ReturnRefusal)) console.error('[pos-return] tender failed', allocation, error);
471
+ if (!anyMoved) {
472
+ // Nothing has moved: hand the whole reservation back and let the
473
+ // same attempt be tried again.
474
+ await firestore.runTransaction(async (transaction)=>{
475
+ await transaction.get(orderRef);
476
+ transaction.update(orderRef, reserved.prior);
477
+ }).catch((rollback)=>console.error('[pos-return] rollback failed', orderId, rollback));
478
+ await claim.release();
479
+ return {
480
+ status: error instanceof ReturnRefusal ? error.status : 502,
481
+ body: {
482
+ error: message
483
+ }
484
+ };
485
+ }
486
+ results.push({
487
+ allocation,
488
+ status: 'failed',
489
+ error: message
490
+ });
491
+ }
492
+ }
493
+ const failed = results.filter((result)=>result.status === 'failed');
494
+ const refundedCents = results.filter((result)=>result.status === 'refunded').reduce((sum, result)=>sum + result.allocation.amountCents, 0);
495
+ const cashCents = results.filter((result)=>result.status === 'refunded' && result.allocation.method === 'cash').reduce((sum, result)=>sum + result.allocation.amountCents, 0);
496
+ const now = deps.now();
497
+ // One id names the return under the register (its tenders and shift) and
498
+ // in the store's returns list beside the online ones (AGL-3611).
499
+ const returnId = createResourceUid();
500
+ const returnRef = register.ref.collection('returns').doc(returnId);
501
+ const storeReturnRef = staff.hostRef.collection('returns').doc(returnId);
502
+ const orderLabel = CommerceModel.formatOrderNumber(order, orderId);
503
+ const lines = picks.map((pick, at)=>{
504
+ var _ref, _reserved_lineCents_at;
505
+ var _order_lineItems_pick_index, _order_lineItems;
506
+ return {
507
+ index: pick.index,
508
+ quantity: pick.quantity,
509
+ name: String((_ref = (_order_lineItems = order.lineItems) == null ? void 0 : (_order_lineItems_pick_index = _order_lineItems[pick.index]) == null ? void 0 : _order_lineItems_pick_index.name) != null ? _ref : ''),
510
+ refundCents: (_reserved_lineCents_at = reserved.lineCents[at]) != null ? _reserved_lineCents_at : 0
511
+ };
512
+ });
513
+ // The record, the drawer, the order: one transaction.
514
+ let closedTheOrder = false;
515
+ let fullyRefunded = false;
516
+ let shiftIdForReturn = null;
517
+ let storeReturn = null;
518
+ await firestore.runTransaction(async (transaction)=>{
519
+ var _freshRegister_get, _data, _fresh_posPaymentRefunds, _fresh_refundedCents, _ref, _ref1, _fresh_returnedQuantities, _fresh_refundedLineItemIds, _order_customerEmail, _order_customerName;
520
+ var _fresh_totals;
521
+ const freshRegister = await transaction.get(register.ref);
522
+ const shiftId = String((_freshRegister_get = freshRegister.get('openShiftId')) != null ? _freshRegister_get : '') || null;
523
+ const shiftRef = shiftId ? register.ref.collection('shifts').doc(shiftId) : null;
524
+ const shiftSnapshot = shiftRef ? await transaction.get(shiftRef) : null;
525
+ const fresh = CommerceModel.liftLegacyOrder((_data = (await transaction.get(orderRef)).data()) != null ? _data : {});
526
+ const shiftOpen = Boolean((shiftSnapshot == null ? void 0 : shiftSnapshot.exists) && shiftSnapshot.get('status') === 'open');
527
+ shiftIdForReturn = shiftOpen ? shiftId : null;
528
+ // Hand back what a failed card did not refund.
529
+ const failedCents = failed.reduce((sum, result)=>sum + result.allocation.amountCents, 0);
530
+ const posPaymentRefunds = _extends({}, (_fresh_posPaymentRefunds = fresh.posPaymentRefunds) != null ? _fresh_posPaymentRefunds : {});
531
+ for (const result of failed){
532
+ var _posPaymentRefunds_result_allocation_paymentId;
533
+ posPaymentRefunds[result.allocation.paymentId] = Math.max(0, ((_posPaymentRefunds_result_allocation_paymentId = posPaymentRefunds[result.allocation.paymentId]) != null ? _posPaymentRefunds_result_allocation_paymentId : 0) - result.allocation.amountCents);
534
+ }
535
+ const orderRefunded = Math.max(0, Number((_fresh_refundedCents = fresh.refundedCents) != null ? _fresh_refundedCents : 0) - failedCents);
536
+ const totalCents = Number((_ref = (_ref1 = (_fresh_totals = fresh.totals) == null ? void 0 : _fresh_totals.totalCents) != null ? _ref1 : fresh.amountCents) != null ? _ref : 0);
537
+ fullyRefunded = orderRefunded >= totalCents && totalCents > 0;
538
+ closedTheOrder = fullyRefunded && fresh['status'] !== 'refunded' && CommerceModel.canTransitionOrder(fresh['status'], 'refunded');
539
+ const completedLines = Object.entries((_fresh_returnedQuantities = fresh.returnedQuantities) != null ? _fresh_returnedQuantities : {}).filter(([index, count])=>{
540
+ var _ref;
541
+ var _fresh_lineItems_Number, _fresh_lineItems;
542
+ return count >= Math.max(1, Number((_ref = (_fresh_lineItems = fresh.lineItems) == null ? void 0 : (_fresh_lineItems_Number = _fresh_lineItems[Number(index)]) == null ? void 0 : _fresh_lineItems_Number.quantity) != null ? _ref : 1));
543
+ }).map(([index])=>Number(index));
544
+ const tenderWords = results.map((result)=>{
545
+ var _tenderOf;
546
+ return `${posMoney(result.allocation.amountCents)} to ${posTenderLabel((_tenderOf = tenderOf(result.allocation.paymentId)) != null ? _tenderOf : {
547
+ method: result.allocation.method
548
+ })}${result.status === 'failed' ? ' (FAILED)' : ''}`;
549
+ }).join(', ');
550
+ const units = picks.reduce((sum, pick)=>sum + pick.quantity, 0);
551
+ transaction.update(orderRef, _extends({
552
+ refundedCents: orderRefunded,
553
+ posPaymentRefunds
554
+ }, closedTheOrder ? {
555
+ status: 'refunded'
556
+ } : {}, completedLines.length ? {
557
+ refundedLineItemIds: [
558
+ ...new Set([
559
+ ...(_fresh_refundedLineItemIds = fresh.refundedLineItemIds) != null ? _fresh_refundedLineItemIds : [],
560
+ ...completedLines
561
+ ])
562
+ ].sort((a, b)=>a - b)
563
+ } : {}, {
564
+ timeline: CommerceModel.appendOrderEvent(fresh, 'refund', `Returned at the register: ${units} ${units === 1 ? 'item' : 'items'}, ${tenderWords}` + (restock ? '; restocked' : '') + (authority.approvedBy ? '; approved by a manager' : ''), now)
565
+ }));
566
+ const record = _extends({
567
+ hostId: staff.hostId,
568
+ registerId,
569
+ orderId
570
+ }, typeof order['number'] === 'number' ? {
571
+ orderNumber: order['number']
572
+ } : {}, shiftOpen && shiftId ? {
573
+ shiftId
574
+ } : {}, {
575
+ lines,
576
+ refundedCents,
577
+ tenders: results.map((result)=>_extends({}, result.allocation, {
578
+ status: result.status
579
+ }, result.refundId ? {
580
+ refundId: result.refundId
581
+ } : {}, result.error ? {
582
+ error: result.error
583
+ } : {})),
584
+ restocked: restock
585
+ }, register.data['locationId'] ? {
586
+ locationId: String(register.data['locationId'])
587
+ } : {}, {
588
+ cashierId: cashier.cashierId
589
+ }, authority.approvedBy ? {
590
+ approvedBy: authority.approvedBy
591
+ } : {}, reason ? {
592
+ reason
593
+ } : {}, {
594
+ status: failed.length ? 'partial' : 'refunded',
595
+ atMs: now
596
+ });
597
+ transaction.create(returnRef, record);
598
+ const restockedLines = picks.map((pick)=>({
599
+ lineItemId: pick.index,
600
+ quantity: pick.quantity
601
+ }));
602
+ const registerLocationId = register.data['locationId'] ? String(register.data['locationId']) : undefined;
603
+ storeReturn = _extends({
604
+ orderId,
605
+ orderNumber: orderLabel,
606
+ customerEmail: (_order_customerEmail = order['customerEmail']) != null ? _order_customerEmail : null,
607
+ customerName: (_order_customerName = order['customerName']) != null ? _order_customerName : null,
608
+ lines: picks.map((pick)=>({
609
+ lineItemId: pick.index,
610
+ quantity: pick.quantity,
611
+ reason: reasonCode
612
+ })),
613
+ status: 'refunded',
614
+ requestedBy: 'merchant',
615
+ source: 'register',
616
+ registerId
617
+ }, reason ? {
618
+ merchantNote: reason
619
+ } : {}, restock ? {
620
+ restock: _extends({
621
+ lines: restockedLines
622
+ }, registerLocationId ? {
623
+ locationId: registerLocationId
624
+ } : {}, {
625
+ atMs: now
626
+ })
627
+ } : {}, {
628
+ refundedAtMs: now,
629
+ refundCents: refundedCents,
630
+ timeline: [
631
+ {
632
+ atMs: now,
633
+ event: 'refunded',
634
+ detail: `At the register${failed.length ? `; ${posMoney(failed.reduce((sum, result)=>sum + result.allocation.amountCents, 0))} still owed` : ''}`
635
+ }
636
+ ],
637
+ createdAtMs: now,
638
+ updatedAtMs: now
639
+ });
640
+ transaction.create(storeReturnRef, storeReturn);
641
+ if (shiftOpen && shiftRef && cashCents > 0) {
642
+ const event = {
643
+ id: returnRef.id,
644
+ type: 'refund',
645
+ amountCents: cashCents,
646
+ reason: `Return ${orderLabel}`,
647
+ by: cashier.cashierId,
648
+ atMs: now,
649
+ orderId
650
+ };
651
+ const cashEvents = Array.isArray(shiftSnapshot == null ? void 0 : shiftSnapshot.get('cashEvents')) ? shiftSnapshot.get('cashEvents') : [];
652
+ transaction.update(shiftRef, {
653
+ cashEvents: [
654
+ ...cashEvents,
655
+ event
656
+ ]
657
+ });
658
+ }
659
+ });
660
+ // Restock what came back to the register's location.
661
+ let restockedUnits = 0;
662
+ if (restock) {
663
+ var _ref3, _register_data_locationId;
664
+ restockedUnits = await restockReturn(firestore, staff.hostRef, order, picks, String((_ref3 = (_register_data_locationId = register.data['locationId']) != null ? _register_data_locationId : order['locationId']) != null ? _ref3 : '') || undefined, orderId, now).catch((error)=>{
665
+ console.error('[pos-return] restock failed', orderId, error);
666
+ return 0;
667
+ });
668
+ }
669
+ // The drawer opens for the cash being handed back.
670
+ if (cashCents > 0) {
671
+ await deps.printer.kickDrawer({
672
+ hostId: staff.hostId,
673
+ registerId,
674
+ reason: 'cash_refund',
675
+ causeId: returnRef.id,
676
+ createdBy: cashier.cashierId
677
+ });
678
+ }
679
+ const payload = {
680
+ returnId: returnRef.id,
681
+ refundedCents,
682
+ outstandingCents: failed.reduce((sum, result)=>sum + result.allocation.amountCents, 0),
683
+ partial: failed.length > 0,
684
+ tenders: results.map((result)=>{
685
+ var _tenderOf;
686
+ return _extends({
687
+ method: result.allocation.method,
688
+ label: posTenderLabel((_tenderOf = tenderOf(result.allocation.paymentId)) != null ? _tenderOf : {
689
+ method: result.allocation.method
690
+ }),
691
+ amountCents: result.allocation.amountCents,
692
+ status: result.status
693
+ }, result.error ? {
694
+ error: result.error
695
+ } : {});
696
+ }),
697
+ cashOutCents: cashCents,
698
+ restockedUnits,
699
+ shiftId: shiftIdForReturn,
700
+ fullyRefunded
701
+ };
702
+ await claim.record(200, payload);
703
+ if (refundedCents > 0) {
704
+ var _order_customerEmail;
705
+ await deps.afterRefund({
706
+ hostId: staff.hostId,
707
+ orderId,
708
+ email: (_order_customerEmail = order['customerEmail']) != null ? _order_customerEmail : null,
709
+ refundCents: refundedCents,
710
+ closedTheOrder,
711
+ fullyRefunded,
712
+ returnedProductIds: [
713
+ ...new Set(picks.map((pick)=>{
714
+ var _ref;
715
+ var _order_lineItems_pick_index, _order_lineItems;
716
+ return String((_ref = (_order_lineItems = order.lineItems) == null ? void 0 : (_order_lineItems_pick_index = _order_lineItems[pick.index]) == null ? void 0 : _order_lineItems_pick_index.productId) != null ? _ref : '');
717
+ }).filter(Boolean))
718
+ ],
719
+ lineIndexes: picks.map((pick)=>pick.index),
720
+ fullLineIndexes: reserved.completedLines,
721
+ returnId,
722
+ storeReturn: storeReturn,
723
+ refundIds: results.flatMap((result)=>result.refundId ? [
724
+ result.refundId
725
+ ] : [])
726
+ });
727
+ }
728
+ return {
729
+ status: 200,
730
+ body: payload
731
+ };
732
+ }
733
+ /**
734
+ * Units per order line that the store's OTHER returns — the online returns
735
+ * flow (AGL-3611) — hold or already took back. The register's own returns are
736
+ * left out: `returnedQuantities` on the order already counts them.
737
+ */ export function unitsHeldByOnlineReturns(docs) {
738
+ const held = [];
739
+ for (const doc of docs){
740
+ var _doc_data, _entry_lines;
741
+ const entry = (_doc_data = doc.data()) != null ? _doc_data : {};
742
+ if (entry.source === 'register' || !CommerceModel.returnHoldsUnits(entry)) continue;
743
+ for (const line of (_entry_lines = entry.lines) != null ? _entry_lines : []){
744
+ var _held_index;
745
+ const index = Number(line == null ? void 0 : line.lineItemId);
746
+ if (!Number.isInteger(index) || index < 0) continue;
747
+ held[index] = ((_held_index = held[index]) != null ? _held_index : 0) + Math.max(0, Math.floor(Number(line == null ? void 0 : line.quantity) || 0));
748
+ }
749
+ }
750
+ return held;
751
+ }
752
+ /** Whether a member is a workspace admin and this site's admin, asked now. */ async function memberIsPosManager(deps, hostRef, hostId, uid) {
753
+ var _host_get;
754
+ const host = await hostRef.get();
755
+ const role = ((_host_get = host.get('memberRoles')) != null ? _host_get : {})[uid];
756
+ return isPosManager(role, await deps.membership(uid, hostId));
757
+ }
758
+ let ReturnRefusal = class ReturnRefusal extends Error {
759
+ constructor(status, message){
760
+ super(message), this.status = status;
761
+ }
762
+ };
763
+ /**
764
+ * Store credit back on the card it came off. A voided or frozen card takes
765
+ * nothing: a void is a fraud or refund decision, and re-crediting it would
766
+ * undo that decision by the back door.
767
+ */ async function creditGiftCard(firestore, hostRef, code, amountCents, orderId, now) {
768
+ const id = String(code != null ? code : '').trim();
769
+ if (!id || id.includes('/') || id.length > 64) throw new ReturnRefusal(409, 'That gift card payment does not name its card.');
770
+ const ref = hostRef.collection('giftCards').doc(id);
771
+ await firestore.runTransaction(async (transaction)=>{
772
+ var _card_get;
773
+ const card = await transaction.get(ref);
774
+ if (!card.exists) throw new ReturnRefusal(409, 'That gift card no longer exists.');
775
+ if (card.get('voidedAtMs') != null || card.get('frozenAtMs') != null) {
776
+ throw new ReturnRefusal(409, 'That gift card is voided or frozen, so it cannot take a refund.');
777
+ }
778
+ transaction.update(ref, {
779
+ balanceCents: Math.max(0, Math.round(Number((_card_get = card.get('balanceCents')) != null ? _card_get : 0))) + amountCents,
780
+ lastCreditAtMs: now,
781
+ lastCreditOrderId: orderId
782
+ });
783
+ });
784
+ }
785
+ /** A room charge taken back: a negative line on the same stay's folio. */ async function reverseFolio(hostRef, reservationId, amountCents, orderId, now) {
786
+ const id = posOpsCleanId(reservationId);
787
+ if (!id) throw new ReturnRefusal(409, 'That room charge does not name its stay.');
788
+ const ref = hostRef.collection('reservations').doc(id);
789
+ const firestore = hostRef.firestore;
790
+ await firestore.runTransaction(async (transaction)=>{
791
+ const stay = await transaction.get(ref);
792
+ if (!stay.exists) throw new ReturnRefusal(409, 'That stay no longer exists.');
793
+ const folio = Array.isArray(stay.get('folio')) ? stay.get('folio') : [];
794
+ transaction.update(ref, {
795
+ folio: [
796
+ ...folio,
797
+ {
798
+ orderId,
799
+ amountCents: -amountCents,
800
+ note: 'Return at the register',
801
+ atMs: now
802
+ }
803
+ ]
804
+ });
805
+ });
806
+ }
807
+ /**
808
+ * The returned units back on the shelf, at the register's location, with an
809
+ * adjustment row each so the stock history says why the count went up.
810
+ * Only variants that track stock move.
811
+ */ async function restockReturn(firestore, hostRef, order, picks, locationId, orderId, now) {
812
+ const byProduct = new Map();
813
+ for (const pick of picks){
814
+ var _order_lineItems, _ref, _byProduct_get;
815
+ const line = ((_order_lineItems = order.lineItems) != null ? _order_lineItems : [])[pick.index];
816
+ const productId = String((_ref = line == null ? void 0 : line['productId']) != null ? _ref : '');
817
+ if (!productId) continue;
818
+ byProduct.set(productId, [
819
+ ...(_byProduct_get = byProduct.get(productId)) != null ? _byProduct_get : [],
820
+ _extends({}, (line == null ? void 0 : line['variantId']) ? {
821
+ variantId: String(line['variantId'])
822
+ } : {}, {
823
+ quantity: pick.quantity
824
+ })
825
+ ]);
826
+ }
827
+ let units = 0;
828
+ for (const [productId, lines] of byProduct){
829
+ const ref = hostRef.collection('products').doc(productId);
830
+ units += await firestore.runTransaction(async (transaction)=>{
831
+ const snapshot = await transaction.get(ref);
832
+ if (!snapshot.exists) return 0;
833
+ const product = CommerceModel.liftLegacyProduct(snapshot.data());
834
+ let variants = product.variants;
835
+ const rows = [];
836
+ for (const line of lines){
837
+ var _line_variantId;
838
+ var _product_variants_;
839
+ const variantId = (_line_variantId = line.variantId) != null ? _line_variantId : (_product_variants_ = product.variants[0]) == null ? void 0 : _product_variants_.id;
840
+ const variant = variants.find((candidate)=>candidate.id === variantId);
841
+ if (!variantId || !variant || variant.inventory == null) continue;
842
+ variants = CommerceModel.adjustVariantInventory({
843
+ variants
844
+ }, variantId, line.quantity, locationId);
845
+ rows.push({
846
+ variantId,
847
+ quantity: line.quantity
848
+ });
849
+ }
850
+ if (!rows.length) return 0;
851
+ transaction.update(ref, _extends({
852
+ variants
853
+ }, CommerceModel.productStockFields(_extends({}, product, {
854
+ variants
855
+ })), {
856
+ updatedAtMs: now
857
+ }));
858
+ for (const row of rows){
859
+ transaction.create(hostRef.collection('inventoryAdjustments').doc(createResourceUid()), _extends({
860
+ productId,
861
+ variantId: row.variantId,
862
+ delta: row.quantity,
863
+ reason: 'refund',
864
+ orderId
865
+ }, locationId ? {
866
+ locationId
867
+ } : {}, {
868
+ atMs: now
869
+ }));
870
+ }
871
+ return rows.reduce((sum, row)=>sum + row.quantity, 0);
872
+ });
873
+ }
874
+ return units;
875
+ }
876
+ export function createPosReturnHandler(deps = defaultPosReturnDeps) {
877
+ return async (req, res)=>{
878
+ try {
879
+ const outcome = await handlePosReturn(deps(), req);
880
+ return res.status(outcome.status).json(outcome.body);
881
+ } catch (error) {
882
+ console.error('[pos-return] failed', error);
883
+ return res.status(500).json({
884
+ error: 'The return could not be refunded'
885
+ });
886
+ }
887
+ };
888
+ }
889
+ export const posReturnHandler = createPosReturnHandler();
890
+
891
+ //# sourceMappingURL=pos-return.js.map