@aglyn/plugins-commerce 1.0.0-beta.284 → 1.0.0-beta.287

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 (420) hide show
  1. package/README.md +1 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/cart.js +25 -12
  4. package/src/lib/components/cart.js.map +1 -1
  5. package/src/lib/components/commerce-console-page.js +70 -13
  6. package/src/lib/components/commerce-console-page.js.map +1 -1
  7. package/src/lib/components/console/order-detail-dialog.component.js +2 -1
  8. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  9. package/src/lib/components/console/payment-methods-card.component.js +1 -1
  10. package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
  11. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
  12. package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
  13. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
  14. package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
  15. package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
  16. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
  17. package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
  18. package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
  19. package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
  20. package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
  21. package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
  22. package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
  23. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
  24. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
  25. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
  26. package/src/lib/components/console/pos/use-pos-display.js +50 -0
  27. package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
  28. package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
  29. package/src/lib/components/console/pos-cellular-control.component.js +211 -0
  30. package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
  31. package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
  32. package/src/lib/components/console/pos-devices-card.component.js +47 -15
  33. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  34. package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
  35. package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
  36. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
  37. package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
  38. package/src/lib/components/console/pos-display-page.component.js +44 -2
  39. package/src/lib/components/console/pos-display-page.component.js.map +1 -1
  40. package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
  41. package/src/lib/components/console/pos-hardware-card.component.js +157 -36
  42. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
  43. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
  44. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
  45. package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
  46. package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
  47. package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
  49. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
  50. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
  51. package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
  52. package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
  53. package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
  54. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
  55. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
  57. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
  58. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
  59. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
  60. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
  61. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  62. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
  63. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
  64. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
  65. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
  66. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
  67. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
  68. package/src/lib/components/console/pos-page.component.d.ts +1 -1
  69. package/src/lib/components/console/pos-page.component.js +63 -12
  70. package/src/lib/components/console/pos-page.component.js.map +1 -1
  71. package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
  72. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
  73. package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
  74. package/src/lib/components/console/product-check-in-fields.component.js +60 -14
  75. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
  76. package/src/lib/components/console/product-editor-dialog.component.js +44 -1
  77. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  78. package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
  79. package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
  80. package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
  81. package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
  82. package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
  83. package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
  84. package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
  85. package/src/lib/components/console/product-register-fields.component.js +31 -2
  86. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  87. package/src/lib/components/console/products-hub-card.component.js +11 -2
  88. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  89. package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
  90. package/src/lib/components/console/register-hardware-card.component.js +56 -27
  91. package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
  92. package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
  93. package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
  94. package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
  95. package/src/lib/components/console/reservations-card.component.d.ts +9 -0
  96. package/src/lib/components/console/reservations-card.component.js +158 -23
  97. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  98. package/src/lib/components/console/shippingeasy-card.component.js +1 -1
  99. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
  100. package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
  101. package/src/lib/components/console/shipstation-card.component.js +3 -3
  102. package/src/lib/components/console/shipstation-card.component.js.map +1 -1
  103. package/src/lib/components/product-detail.d.ts +4 -0
  104. package/src/lib/components/product-detail.js +40 -5
  105. package/src/lib/components/product-detail.js.map +1 -1
  106. package/src/lib/components/product-reviews.js +28 -11
  107. package/src/lib/components/product-reviews.js.map +1 -1
  108. package/src/lib/components/reservation-widget.js +28 -5
  109. package/src/lib/components/reservation-widget.js.map +1 -1
  110. package/src/lib/components/use-day-picker.d.ts +25 -0
  111. package/src/lib/components/use-day-picker.js +57 -0
  112. package/src/lib/components/use-day-picker.js.map +1 -0
  113. package/src/lib/constants/operator-alerts.d.ts +55 -0
  114. package/src/lib/constants/operator-alerts.js +156 -1
  115. package/src/lib/constants/operator-alerts.js.map +1 -1
  116. package/src/lib/declarations.console-server.js +54 -1
  117. package/src/lib/declarations.console-server.js.map +1 -1
  118. package/src/lib/declarations.d.ts +4 -2
  119. package/src/lib/declarations.js +11 -4
  120. package/src/lib/declarations.js.map +1 -1
  121. package/src/lib/declarations.server.js +9 -0
  122. package/src/lib/declarations.server.js.map +1 -1
  123. package/src/lib/model/commerce-cart.d.ts +9 -1
  124. package/src/lib/model/commerce-cart.js +4 -3
  125. package/src/lib/model/commerce-cart.js.map +1 -1
  126. package/src/lib/model/commerce-check-in-product.d.ts +26 -0
  127. package/src/lib/model/commerce-check-in-product.js +64 -2
  128. package/src/lib/model/commerce-check-in-product.js.map +1 -1
  129. package/src/lib/model/commerce-check-in-record.d.ts +127 -0
  130. package/src/lib/model/commerce-check-in-record.js +36 -0
  131. package/src/lib/model/commerce-check-in-record.js.map +1 -0
  132. package/src/lib/model/commerce-check-in.d.ts +91 -87
  133. package/src/lib/model/commerce-check-in.js +186 -62
  134. package/src/lib/model/commerce-check-in.js.map +1 -1
  135. package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
  136. package/src/lib/model/commerce-kiosk-offer.js +35 -0
  137. package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
  138. package/src/lib/model/commerce-orders.d.ts +76 -0
  139. package/src/lib/model/commerce-orders.js +6 -0
  140. package/src/lib/model/commerce-orders.js.map +1 -1
  141. package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
  142. package/src/lib/model/commerce-pos-day-report.js +39 -2
  143. package/src/lib/model/commerce-pos-day-report.js.map +1 -1
  144. package/src/lib/model/commerce-pos-offline.d.ts +1 -1
  145. package/src/lib/model/commerce-pos-offline.js +6 -1
  146. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  147. package/src/lib/model/commerce-pos-ops.js +3 -2
  148. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  149. package/src/lib/model/commerce-pos.d.ts +36 -3
  150. package/src/lib/model/commerce-pos.js +14 -6
  151. package/src/lib/model/commerce-pos.js.map +1 -1
  152. package/src/lib/model/commerce-receipt.js +3 -2
  153. package/src/lib/model/commerce-receipt.js.map +1 -1
  154. package/src/lib/model/commerce-reservations.d.ts +69 -4
  155. package/src/lib/model/commerce-reservations.js +57 -5
  156. package/src/lib/model/commerce-reservations.js.map +1 -1
  157. package/src/lib/model/commerce.d.ts +66 -0
  158. package/src/lib/model/commerce.js +15 -0
  159. package/src/lib/model/commerce.js.map +1 -1
  160. package/src/lib/model/order-list-fields.d.ts +11 -0
  161. package/src/lib/model/order-list-fields.js +17 -1
  162. package/src/lib/model/order-list-fields.js.map +1 -1
  163. package/src/lib/model/own-store-tax-summary.d.ts +152 -0
  164. package/src/lib/model/own-store-tax-summary.js +288 -0
  165. package/src/lib/model/own-store-tax-summary.js.map +1 -0
  166. package/src/lib/model/plugin-permissions.d.ts +67 -0
  167. package/src/lib/model/plugin-permissions.js +224 -7
  168. package/src/lib/model/plugin-permissions.js.map +1 -1
  169. package/src/lib/model/pos-cellular.d.ts +223 -0
  170. package/src/lib/model/pos-cellular.js +293 -0
  171. package/src/lib/model/pos-cellular.js.map +1 -0
  172. package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
  173. package/src/lib/model/pos-hardware-in-person.js +224 -0
  174. package/src/lib/model/pos-hardware-in-person.js.map +1 -0
  175. package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
  176. package/src/lib/model/pos-hardware-tax-summary.js +225 -0
  177. package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
  178. package/src/lib/model/pos-hardware-terms.d.ts +74 -0
  179. package/src/lib/model/pos-hardware-terms.js +115 -0
  180. package/src/lib/model/pos-hardware-terms.js.map +1 -0
  181. package/src/lib/model/pos-hardware.d.ts +349 -7
  182. package/src/lib/model/pos-hardware.js +291 -20
  183. package/src/lib/model/pos-hardware.js.map +1 -1
  184. package/src/lib/model/product-write.d.ts +10 -0
  185. package/src/lib/model/product-write.js +4 -2
  186. package/src/lib/model/product-write.js.map +1 -1
  187. package/src/lib/plugin.js +16 -0
  188. package/src/lib/plugin.js.map +1 -1
  189. package/src/lib/server/billing-webhook.js +25 -1
  190. package/src/lib/server/billing-webhook.js.map +1 -1
  191. package/src/lib/server/cancel-order.js +7 -5
  192. package/src/lib/server/cancel-order.js.map +1 -1
  193. package/src/lib/server/cart-checkout.js +20 -8
  194. package/src/lib/server/cart-checkout.js.map +1 -1
  195. package/src/lib/server/cart.js +29 -0
  196. package/src/lib/server/cart.js.map +1 -1
  197. package/src/lib/server/checkout.js +42 -13
  198. package/src/lib/server/checkout.js.map +1 -1
  199. package/src/lib/server/collection-membership.d.ts +4 -0
  200. package/src/lib/server/collection-membership.js +5 -10
  201. package/src/lib/server/collection-membership.js.map +1 -1
  202. package/src/lib/server/commerce-site-keys.d.ts +29 -0
  203. package/src/lib/server/commerce-site-keys.js +40 -0
  204. package/src/lib/server/commerce-site-keys.js.map +1 -0
  205. package/src/lib/server/draft-order.js +8 -5
  206. package/src/lib/server/draft-order.js.map +1 -1
  207. package/src/lib/server/fulfill-order.js +7 -5
  208. package/src/lib/server/fulfill-order.js.map +1 -1
  209. package/src/lib/server/gift-cards.js +8 -5
  210. package/src/lib/server/gift-cards.js.map +1 -1
  211. package/src/lib/server/local-fulfillment-status.js +9 -6
  212. package/src/lib/server/local-fulfillment-status.js.map +1 -1
  213. package/src/lib/server/member-post.js +6 -5
  214. package/src/lib/server/member-post.js.map +1 -1
  215. package/src/lib/server/membership-admin-password.d.ts +4 -2
  216. package/src/lib/server/membership-admin-password.js +10 -8
  217. package/src/lib/server/membership-admin-password.js.map +1 -1
  218. package/src/lib/server/membership-admin-remove.d.ts +7 -5
  219. package/src/lib/server/membership-admin-remove.js +9 -9
  220. package/src/lib/server/membership-admin-remove.js.map +1 -1
  221. package/src/lib/server/order-notifications.js +5 -2
  222. package/src/lib/server/order-notifications.js.map +1 -1
  223. package/src/lib/server/order-print.js +7 -5
  224. package/src/lib/server/order-print.js.map +1 -1
  225. package/src/lib/server/order-receipt-send.js +8 -5
  226. package/src/lib/server/order-receipt-send.js.map +1 -1
  227. package/src/lib/server/orders-shipping-prepare.js +9 -6
  228. package/src/lib/server/orders-shipping-prepare.js.map +1 -1
  229. package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
  230. package/src/lib/server/own-store-tax-return-source.js +312 -0
  231. package/src/lib/server/own-store-tax-return-source.js.map +1 -0
  232. package/src/lib/server/payment-methods.js +13 -9
  233. package/src/lib/server/payment-methods.js.map +1 -1
  234. package/src/lib/server/pos-auth.d.ts +37 -6
  235. package/src/lib/server/pos-auth.js +40 -15
  236. package/src/lib/server/pos-auth.js.map +1 -1
  237. package/src/lib/server/pos-cellular-billing.d.ts +81 -0
  238. package/src/lib/server/pos-cellular-billing.js +711 -0
  239. package/src/lib/server/pos-cellular-billing.js.map +1 -0
  240. package/src/lib/server/pos-cellular-notify.d.ts +47 -0
  241. package/src/lib/server/pos-cellular-notify.js +150 -0
  242. package/src/lib/server/pos-cellular-notify.js.map +1 -0
  243. package/src/lib/server/pos-cellular.d.ts +88 -0
  244. package/src/lib/server/pos-cellular.js +339 -0
  245. package/src/lib/server/pos-cellular.js.map +1 -0
  246. package/src/lib/server/pos-check-in.d.ts +5 -1
  247. package/src/lib/server/pos-check-in.js +296 -28
  248. package/src/lib/server/pos-check-in.js.map +1 -1
  249. package/src/lib/server/pos-day-report.js +29 -3
  250. package/src/lib/server/pos-day-report.js.map +1 -1
  251. package/src/lib/server/pos-display.d.ts +16 -0
  252. package/src/lib/server/pos-display.js +129 -2
  253. package/src/lib/server/pos-display.js.map +1 -1
  254. package/src/lib/server/pos-hardware-admin.d.ts +10 -1
  255. package/src/lib/server/pos-hardware-admin.js +250 -84
  256. package/src/lib/server/pos-hardware-admin.js.map +1 -1
  257. package/src/lib/server/pos-hardware-attach.d.ts +105 -0
  258. package/src/lib/server/pos-hardware-attach.js +443 -0
  259. package/src/lib/server/pos-hardware-attach.js.map +1 -0
  260. package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
  261. package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
  262. package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
  263. package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
  264. package/src/lib/server/pos-hardware-buyer-record.js +86 -0
  265. package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
  266. package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
  267. package/src/lib/server/pos-hardware-cancel.js +147 -0
  268. package/src/lib/server/pos-hardware-cancel.js.map +1 -0
  269. package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
  270. package/src/lib/server/pos-hardware-closure-notices.js +85 -0
  271. package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
  272. package/src/lib/server/pos-hardware-closure.d.ts +60 -0
  273. package/src/lib/server/pos-hardware-closure.js +153 -0
  274. package/src/lib/server/pos-hardware-closure.js.map +1 -0
  275. package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
  276. package/src/lib/server/pos-hardware-in-person.js +236 -0
  277. package/src/lib/server/pos-hardware-in-person.js.map +1 -0
  278. package/src/lib/server/pos-hardware-notify.d.ts +40 -2
  279. package/src/lib/server/pos-hardware-notify.js +195 -14
  280. package/src/lib/server/pos-hardware-notify.js.map +1 -1
  281. package/src/lib/server/pos-hardware-readers.d.ts +115 -0
  282. package/src/lib/server/pos-hardware-readers.js +430 -0
  283. package/src/lib/server/pos-hardware-readers.js.map +1 -0
  284. package/src/lib/server/pos-hardware-returns.d.ts +116 -0
  285. package/src/lib/server/pos-hardware-returns.js +502 -0
  286. package/src/lib/server/pos-hardware-returns.js.map +1 -0
  287. package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
  288. package/src/lib/server/pos-hardware-sale-fields.js +44 -0
  289. package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
  290. package/src/lib/server/pos-hardware-sale.d.ts +54 -0
  291. package/src/lib/server/pos-hardware-sale.js +369 -0
  292. package/src/lib/server/pos-hardware-sale.js.map +1 -0
  293. package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
  294. package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
  295. package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
  296. package/src/lib/server/pos-hardware-terms.d.ts +64 -0
  297. package/src/lib/server/pos-hardware-terms.js +154 -0
  298. package/src/lib/server/pos-hardware-terms.js.map +1 -0
  299. package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
  300. package/src/lib/server/pos-hardware-user-eraser.js +31 -7
  301. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
  302. package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
  303. package/src/lib/server/pos-hardware-webhook.js +51 -6
  304. package/src/lib/server/pos-hardware-webhook.js.map +1 -1
  305. package/src/lib/server/pos-hardware.d.ts +74 -1
  306. package/src/lib/server/pos-hardware.js +175 -10
  307. package/src/lib/server/pos-hardware.js.map +1 -1
  308. package/src/lib/server/pos-kiosk.d.ts +2 -0
  309. package/src/lib/server/pos-kiosk.js +17 -12
  310. package/src/lib/server/pos-kiosk.js.map +1 -1
  311. package/src/lib/server/pos-offline-card-order.d.ts +64 -0
  312. package/src/lib/server/pos-offline-card-order.js +102 -0
  313. package/src/lib/server/pos-offline-card-order.js.map +1 -0
  314. package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
  315. package/src/lib/server/pos-offline-card-reconcile.js +215 -18
  316. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
  317. package/src/lib/server/pos-offline-sync.d.ts +39 -0
  318. package/src/lib/server/pos-offline-sync.js +190 -55
  319. package/src/lib/server/pos-offline-sync.js.map +1 -1
  320. package/src/lib/server/pos-ops-gate.d.ts +15 -4
  321. package/src/lib/server/pos-ops-gate.js +42 -9
  322. package/src/lib/server/pos-ops-gate.js.map +1 -1
  323. package/src/lib/server/pos-ops-routes.js +24 -0
  324. package/src/lib/server/pos-ops-routes.js.map +1 -1
  325. package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
  326. package/src/lib/server/pos-order-refund-ids.js +31 -0
  327. package/src/lib/server/pos-order-refund-ids.js.map +1 -0
  328. package/src/lib/server/pos-order.js +52 -49
  329. package/src/lib/server/pos-order.js.map +1 -1
  330. package/src/lib/server/pos-payment.js +1 -1
  331. package/src/lib/server/pos-payment.js.map +1 -1
  332. package/src/lib/server/pos-reader-splash-admin.js +30 -32
  333. package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
  334. package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
  335. package/src/lib/server/pos-reader-splash-images-route.js +113 -0
  336. package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
  337. package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
  338. package/src/lib/server/pos-reader-splash-images.js +123 -0
  339. package/src/lib/server/pos-reader-splash-images.js.map +1 -0
  340. package/src/lib/server/pos-reader-splash.d.ts +68 -1
  341. package/src/lib/server/pos-reader-splash.js +182 -11
  342. package/src/lib/server/pos-reader-splash.js.map +1 -1
  343. package/src/lib/server/pos-readers.d.ts +29 -0
  344. package/src/lib/server/pos-readers.js +134 -35
  345. package/src/lib/server/pos-readers.js.map +1 -1
  346. package/src/lib/server/pos-return.d.ts +10 -0
  347. package/src/lib/server/pos-return.js +26 -1
  348. package/src/lib/server/pos-return.js.map +1 -1
  349. package/src/lib/server/pos-sale.js +6 -1
  350. package/src/lib/server/pos-sale.js.map +1 -1
  351. package/src/lib/server/pos-shift.js +11 -0
  352. package/src/lib/server/pos-shift.js.map +1 -1
  353. package/src/lib/server/pos-staff-pin.js +25 -20
  354. package/src/lib/server/pos-staff-pin.js.map +1 -1
  355. package/src/lib/server/pos-terminal.d.ts +14 -4
  356. package/src/lib/server/pos-terminal.js +34 -38
  357. package/src/lib/server/pos-terminal.js.map +1 -1
  358. package/src/lib/server/printers.d.ts +7 -3
  359. package/src/lib/server/printers.js +18 -12
  360. package/src/lib/server/printers.js.map +1 -1
  361. package/src/lib/server/product-drafts.d.ts +11 -1
  362. package/src/lib/server/product-drafts.js +12 -8
  363. package/src/lib/server/product-drafts.js.map +1 -1
  364. package/src/lib/server/product.d.ts +15 -1
  365. package/src/lib/server/product.js +16 -3
  366. package/src/lib/server/product.js.map +1 -1
  367. package/src/lib/server/products-write.d.ts +26 -2
  368. package/src/lib/server/products-write.js +19 -7
  369. package/src/lib/server/products-write.js.map +1 -1
  370. package/src/lib/server/refund.js +34 -11
  371. package/src/lib/server/refund.js.map +1 -1
  372. package/src/lib/server/reservation-availability-query.d.ts +8 -0
  373. package/src/lib/server/reservation-availability-query.js +11 -1
  374. package/src/lib/server/reservation-availability-query.js.map +1 -1
  375. package/src/lib/server/reservation-availability.d.ts +1 -1
  376. package/src/lib/server/reservation-availability.js +7 -2
  377. package/src/lib/server/reservation-availability.js.map +1 -1
  378. package/src/lib/server/reservation-guests.d.ts +32 -0
  379. package/src/lib/server/reservation-guests.js +285 -0
  380. package/src/lib/server/reservation-guests.js.map +1 -0
  381. package/src/lib/server/reservation-walk-in.d.ts +11 -1
  382. package/src/lib/server/reservation-walk-in.js +56 -12
  383. package/src/lib/server/reservation-walk-in.js.map +1 -1
  384. package/src/lib/server/reserve.js +18 -5
  385. package/src/lib/server/reserve.js.map +1 -1
  386. package/src/lib/server/returns.js +9 -6
  387. package/src/lib/server/returns.js.map +1 -1
  388. package/src/lib/server/reviews.d.ts +22 -2
  389. package/src/lib/server/reviews.js +88 -20
  390. package/src/lib/server/reviews.js.map +1 -1
  391. package/src/lib/server/shipping-connectors.js +10 -11
  392. package/src/lib/server/shipping-connectors.js.map +1 -1
  393. package/src/lib/server/site-page-resolver.js +20 -3
  394. package/src/lib/server/site-page-resolver.js.map +1 -1
  395. package/src/lib/server/store-day.d.ts +33 -0
  396. package/src/lib/server/store-day.js +46 -0
  397. package/src/lib/server/store-day.js.map +1 -0
  398. package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
  399. package/src/lib/server/store-setup-ai-writer.js +5 -6
  400. package/src/lib/server/store-setup-ai-writer.js.map +1 -1
  401. package/src/lib/server/storefront-tax.d.ts +13 -0
  402. package/src/lib/server/storefront-tax.js +8 -1
  403. package/src/lib/server/storefront-tax.js.map +1 -1
  404. package/src/lib/server/tax-return-source.d.ts +32 -3
  405. package/src/lib/server/tax-return-source.js +99 -20
  406. package/src/lib/server/tax-return-source.js.map +1 -1
  407. package/src/lib/server.js +100 -2
  408. package/src/lib/server.js.map +1 -1
  409. package/src/lib/testing/fake-firestore.js +58 -16
  410. package/src/lib/testing/fake-firestore.js.map +1 -1
  411. package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
  412. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
  413. package/src/lib/testing/site-register-permissions.d.ts +29 -0
  414. package/src/lib/testing/site-register-permissions.js +38 -0
  415. package/src/lib/testing/site-register-permissions.js.map +1 -0
  416. package/src/lib/transfer/tracking.server.js +8 -5
  417. package/src/lib/transfer/tracking.server.js.map +1 -1
  418. package/src/lib/utils/add-to-cart.d.ts +2 -0
  419. package/src/lib/utils/add-to-cart.js +6 -3
  420. package/src/lib/utils/add-to-cart.js.map +1 -1
@@ -20,12 +20,16 @@ import { FieldValue } from "firebase-admin/firestore";
20
20
  import * as CommerceModel from "../model/index.js";
21
21
  import { posOfflineFlagLabels, posOfflineSaleTotals, posOfflineSoldAt, posOfflineTotalsAddUp, POS_OFFLINE_CARD_INTENT_KIND, POS_OFFLINE_LATE_SYNC_MS, POS_OFFLINE_SYNC_BATCH_MAX, sanitizePosOfflineSale } from "../model/commerce-pos-offline.js";
22
22
  import { ORDER_PAID_EVENT } from "../model/order-events.js";
23
+ import { holdsPosPermission } from "../model/plugin-permissions.js";
23
24
  import { posMaxDiscountPct, posOfflineCardSettings } from "../plugin-config.js";
24
25
  import { alertLowStockCrossing } from "./low-stock.js";
25
26
  import { notifyOrderBuyer } from "./order-notifications.js";
26
27
  import { raiseOrderEvent } from "./order-events.js";
27
28
  import { offlineFeeMonthKey } from "./pos-fee-month.js";
28
29
  import { authorizePosOps, defaultPosOpsDeps, posOpsBody, posOpsCleanId, resolvePosStaffAssertion } from "./pos-ops-gate.js";
30
+ import { posOfflineCardChargeRef, reportPosOfflineCardWrongAccount } from "./pos-offline-card-reconcile.js";
31
+ import { posHardwareSaleFields } from "./pos-hardware-sale-fields.js";
32
+ import { posOfflineCardOrderMoney } from "./pos-offline-card-order.js";
29
33
  import { notifyPosSaleCompleted } from "./pos-sale.js";
30
34
  import { POS_CURRENCY, posCardApplicationFeeCents, posTerminalAvailable } from "./pos-stripe.js";
31
35
  import { capturePosOfflineCardIntent, ensurePosOfflineCardConfiguration, posMerchantAccount, posTerminalLocationId, retrievePosOfflineCardIntent } from "./pos-terminal.js";
@@ -39,7 +43,8 @@ export function defaultPosOfflineCardDeps() {
39
43
  merchantAccount: posMerchantAccount,
40
44
  enableOffline: ensurePosOfflineCardConfiguration,
41
45
  retrieve: retrievePosOfflineCardIntent,
42
- capture: capturePosOfflineCardIntent
46
+ capture: capturePosOfflineCardIntent,
47
+ wrongAccount: reportPosOfflineCardWrongAccount
43
48
  };
44
49
  }
45
50
  export function defaultPosOfflineSyncDeps() {
@@ -261,12 +266,44 @@ async function readStoreTax(staff) {
261
266
  available: true
262
267
  });
263
268
  }
269
+ /** Statuses in which an intent holds the customer's money or has taken it. */ const INTENT_HOLDS_MONEY = new Set([
270
+ 'requires_capture',
271
+ 'processing',
272
+ 'succeeded'
273
+ ]);
274
+ /**
275
+ * How long after a capture that Stripe answered with a 5xx the sync waits
276
+ * before reading "still waiting for capture" as the definite answer.
277
+ */ export const POS_OFFLINE_CAPTURE_SETTLE_MS = 60000;
278
+ /**
279
+ * The capture's idempotency key (AGL-4039). Attempt 0 is the key every
280
+ * capture used before attempts existed, so a retry of one already in flight
281
+ * still finds it.
282
+ *
283
+ * WHY AN ATTEMPT. Stripe keeps the answer to an idempotent request for a day,
284
+ * failures included, so a capture that failed once on a per-sale key would
285
+ * fail the same way on every sync for a day, deep into the two days the
286
+ * authorization lasts. The attempt moves on only when the previous one
287
+ * DEFINITELY did not capture: Stripe refused it with a 4xx (not 409, a
288
+ * request with the same key still running, and not 429, rate limited), or it
289
+ * answered 5xx and the intent still waits for capture a minute later. A
290
+ * request that got no answer at all throws before anything is recorded, so it
291
+ * retries on the same key. Every sync reads the intent before it captures,
292
+ * and Stripe captures an intent once, so a new key can never capture twice.
293
+ */ export function posOfflineCaptureKey(hostId, saleKey, attempt) {
294
+ const base = `pos-offline-capture:${hostId}:${saleKey}`;
295
+ return attempt > 0 ? `${base}:${attempt}` : base;
296
+ }
297
+ /** A capture Stripe refused for good: retrying the same key would replay the refusal. */ export function posOfflineCaptureRefused(status) {
298
+ return typeof status === 'number' && status >= 400 && status < 500 && status !== 409 && status !== 429;
299
+ }
264
300
  /**
265
301
  * Reads the card of a sale rung offline and settles it: captured with the
266
302
  * platform fee (the card tender's share of the take, by the one tender rule,
267
303
  * plus Stripe's processing cost, exactly as an online reader payment), or
268
- * unpaid when the bank declined it or Stripe never took it. Anything Stripe
269
- * has not finished yet waits on the register for the next sync.
304
+ * unpaid when the bank declined it, Stripe never took it, or it was made out
305
+ * to a Stripe account that is not the store's. Anything Stripe has not
306
+ * finished yet waits on the register for the next sync.
270
307
  */ async function settleOfflineCard(context, sale, takeFee) {
271
308
  const { deps, staff } = context;
272
309
  const { saleKey } = sale;
@@ -292,7 +329,10 @@ async function readStoreTax(staff) {
292
329
  const read = await deps.card.retrieve(card.paymentIntentId);
293
330
  if ('error' in read) return wait(`The card payment could not be checked yet: ${read.error}`);
294
331
  let intent = read.intent;
295
- if (intent.metadata['kind'] !== POS_OFFLINE_CARD_INTENT_KIND || intent.metadata['saleKey'] !== saleKey || intent.metadata['hostId'] !== staff.hostId || intent.amount !== sale.totals.totalCents || intent.currency !== POS_CURRENCY) {
332
+ // The amount is NOT checked here: what Stripe took is what the customer
333
+ // paid, and a difference from the server's total is flagged on the order
334
+ // (`posOfflineCardOrderMoney`), never a reason to leave the sale unrecorded.
335
+ if (intent.metadata['kind'] !== POS_OFFLINE_CARD_INTENT_KIND || intent.metadata['saleKey'] !== saleKey || intent.metadata['hostId'] !== staff.hostId || intent.currency !== POS_CURRENCY) {
296
336
  return {
297
337
  kind: 'wait',
298
338
  outcome: refused(saleKey, 'invalid', 'The card payment does not belong to this sale.', false)
@@ -303,21 +343,87 @@ async function readStoreTax(staff) {
303
343
  } : {}, intent.last4 ? {
304
344
  last4: intent.last4
305
345
  } : {});
346
+ // THE DESTINATION. The device made this intent out to the account its
347
+ // offline kit named, and a kit can be stale (the store reconnected Stripe)
348
+ // or a register tampered with. Money that holds or has moved is only ever
349
+ // captured into, or recorded as paid to, the store's account as it is now.
350
+ if (INTENT_HOLDS_MONEY.has(intent.status)) {
351
+ const expected = await deps.card.merchantAccount(staff.hostId, staff.org);
352
+ if (!expected) {
353
+ return wait('This store’s Stripe account cannot take card payments right now. The card syncs once it can.');
354
+ }
355
+ if (intent.destination !== expected) {
356
+ return _extends({
357
+ kind: 'unpaid',
358
+ flag: 'card-not-charged',
359
+ intentId: intent.id,
360
+ message: 'The card was made out to a Stripe account that is not this store’s, so it was not charged here.'
361
+ }, found, {
362
+ wrongAccount: {
363
+ destination: intent.destination,
364
+ expected,
365
+ status: intent.status,
366
+ amountCents: intent.amount
367
+ }
368
+ });
369
+ }
370
+ }
306
371
  const takeShareCents = CommerceModel.posTenderTakeCents('card_present', takeFee);
372
+ const expectedFeeCents = posCardApplicationFeeCents({
373
+ takeShareCents,
374
+ chargeCents: intent.amount
375
+ });
307
376
  if (intent.status === 'requires_capture') {
308
- const feeCents = posCardApplicationFeeCents({
309
- takeShareCents,
310
- chargeCents: intent.amount
311
- });
312
- const captured = await deps.card.capture(intent.id, feeCents, `pos-offline-capture:${staff.hostId}:${saleKey}`);
313
- if ('error' in captured) return wait(`The card payment could not be captured yet: ${captured.error}`);
377
+ var _data, _charge_captureAttempt, _charge_captureUncertainAtMs;
378
+ const chargeRef = posOfflineCardChargeRef(staff.hostRef, saleKey);
379
+ const charge = (_data = (await chargeRef.get()).data()) != null ? _data : {};
380
+ let attempt = Math.max(0, Math.round(Number((_charge_captureAttempt = charge['captureAttempt']) != null ? _charge_captureAttempt : 0)) || 0);
381
+ if (charge['captureUncertainAttempt'] === attempt && deps.now() - Number((_charge_captureUncertainAtMs = charge['captureUncertainAtMs']) != null ? _charge_captureUncertainAtMs : 0) >= POS_OFFLINE_CAPTURE_SETTLE_MS) {
382
+ // The 5xx left the outcome unknown; the intent still waiting for
383
+ // capture a minute later says it did not capture.
384
+ attempt += 1;
385
+ await chargeRef.set({
386
+ captureAttempt: attempt,
387
+ captureUncertainAttempt: FieldValue.delete(),
388
+ captureUncertainAtMs: FieldValue.delete()
389
+ }, {
390
+ merge: true
391
+ });
392
+ }
393
+ const captured = await deps.card.capture(intent.id, expectedFeeCents, posOfflineCaptureKey(staff.hostId, saleKey, attempt));
394
+ if ('error' in captured) {
395
+ const stamp = {
396
+ hostId: staff.hostId,
397
+ saleKey,
398
+ updatedAtMs: deps.now()
399
+ };
400
+ if (posOfflineCaptureRefused(captured.status)) {
401
+ await chargeRef.set(_extends({}, stamp, {
402
+ captureAttempt: attempt + 1,
403
+ lastCaptureStatus: captured.status,
404
+ lastCaptureError: captured.error.slice(0, 300)
405
+ }), {
406
+ merge: true
407
+ });
408
+ } else if (typeof captured.status === 'number' && captured.status >= 500) {
409
+ await chargeRef.set(_extends({}, stamp, {
410
+ captureUncertainAttempt: attempt,
411
+ captureUncertainAtMs: deps.now()
412
+ }), {
413
+ merge: true
414
+ });
415
+ }
416
+ return wait(`The card payment could not be captured yet: ${captured.error}`);
417
+ }
314
418
  intent = captured.intent;
315
419
  }
316
420
  if (intent.status === 'succeeded') {
317
421
  return _extends({
318
422
  kind: 'captured',
319
423
  intentId: intent.id,
424
+ amountCents: intent.amount,
320
425
  feeCents: intent.applicationFeeCents,
426
+ expectedFeeCents,
321
427
  takeShareCents,
322
428
  livemode: intent.livemode
323
429
  }, found);
@@ -484,7 +590,7 @@ const replayOf = (record)=>({
484
590
  return current;
485
591
  }
486
592
  async function syncOne(context, raw) {
487
- var _ref, _sale_customer;
593
+ var _ref, _staff_orgId, _ref1, _sale_customer;
488
594
  const { deps, staff } = context;
489
595
  const read = sanitizePosOfflineSale(raw);
490
596
  const rawKey = String((_ref = raw == null ? void 0 : raw['saleKey']) != null ? _ref : '').slice(0, 64);
@@ -618,6 +724,13 @@ async function syncOne(context, raw) {
618
724
  flags.add('tax-differs');
619
725
  }
620
726
  if (sale.discountPct > posMaxDiscountPct(context.config)) flags.add('discount-over-limit');
727
+ // The cashier's own discount needs `posDiscount` (AGL-4047), as the online
728
+ // register refuses it without. Offline the sale has already happened, so it
729
+ // is recorded and flagged rather than dropped. Read for the member who was
730
+ // signed in, whose membership the gate resolved, as the online check reads it.
731
+ if (sale.discountPct > 0 && !holdsPosPermission(staff.membership.permissions, 'posDiscount')) {
732
+ flags.add('discount-not-permitted');
733
+ }
621
734
  const byCard = sale.tender === 'card';
622
735
  if (!byCard && sale.cashTenderedCents < totals.totalCents) flags.add('cash-short');
623
736
  // Where it was rung.
@@ -648,21 +761,36 @@ async function syncOne(context, raw) {
648
761
  if (memberUid) cashierId = memberUid;
649
762
  else flags.add('cashier-unverified');
650
763
  }
651
- // The offline register takes cash only, and cash carries no platform fee
652
- // (AGL-4036): the plan's take is worked out and then settled by the one
653
- // predicate every tender answers to, so a sale synced from the queue is
654
- // charged exactly what the same sale rung online is.
764
+ // Cash carries no platform fee (AGL-4036): the plan's take is worked out
765
+ // and then settled by the one predicate every tender answers to, so a sale
766
+ // synced from the queue is charged exactly what the same sale rung online
767
+ // is.
655
768
  const planTake = takeFeeCents(deps, staff, lineItems, totals);
656
769
  // A card taken offline settles with Stripe BEFORE the order is written: a
657
770
  // capture that fails leaves the sale on the register for the next sync,
658
771
  // and a repeat after a lost answer finds the first capture (AGL-4039).
659
772
  const settled = byCard ? await settleOfflineCard(context, sale, planTake) : null;
660
773
  if ((settled == null ? void 0 : settled.kind) === 'wait') return settled.outcome;
661
- if ((settled == null ? void 0 : settled.kind) === 'unpaid') flags.add(settled.flag);
662
- const takeFee = byCard ? (settled == null ? void 0 : settled.kind) === 'captured' ? settled.takeShareCents : 0 : CommerceModel.posTenderTakeCents('cash', planTake);
663
- totals = _extends({}, totals, {
664
- feeCents: takeFee
774
+ // The card's money, decided once against the server's totals: the fee it
775
+ // settled, the shortfall to invoice, and the order-level intent the refund
776
+ // and the dispute lookup read.
777
+ const cardMoney = settled ? posOfflineCardOrderMoney({
778
+ settled,
779
+ totals,
780
+ planTakeCents: planTake,
781
+ soldAtMs: soldAt.atMs,
782
+ nowMs: now,
783
+ cashierId,
784
+ feeOrgId: (_staff_orgId = staff.orgId) != null ? _staff_orgId : ''
785
+ }) : null;
786
+ for (const flag of (_ref1 = cardMoney == null ? void 0 : cardMoney.flags) != null ? _ref1 : [])flags.add(flag);
787
+ const cashTake = CommerceModel.posTenderTakeCents('cash', planTake);
788
+ totals = cardMoney ? cardMoney.totals : _extends({}, totals, {
789
+ feeCents: cashTake
665
790
  });
791
+ // What accrues to the org's month with the order: the cash take (none
792
+ // since AGL-4036) or the part of a card's fee its payout did not carry.
793
+ const invoiceCents = cardMoney ? cardMoney.invoiceCents : cashTake;
666
794
  const changeCents = byCard ? 0 : Math.max(0, sale.cashTenderedCents - totals.totalCents);
667
795
  const flagList = [
668
796
  ...flags
@@ -701,7 +829,7 @@ async function syncOne(context, raw) {
701
829
  settled.brand ? settled.brand.toUpperCase() : 'Card',
702
830
  settled.last4 ? `•••• ${settled.last4}` : ''
703
831
  ].filter(Boolean).join(' ') : '';
704
- const paidDetail = !settled ? `Cash — received ${money(sale.cashTenderedCents)}, change ${money(changeCents)}. ` + 'Rung while the register was offline.' : settled.kind === 'captured' ? `${cardName} — ${money(totals.totalCents)}, taken while the register was offline and charged when it reconnected.` : `${cardName} — ${money(totals.totalCents)} taken while the register was offline was not paid: ${settled.message}`.slice(0, 500);
832
+ const paidDetail = !settled ? `Cash — received ${money(sale.cashTenderedCents)}, change ${money(changeCents)}. ` + 'Rung while the register was offline.' : settled.kind === 'captured' ? `${cardName} — ${money(settled.amountCents)}, taken while the register was offline and charged when it reconnected.` : `${cardName} — ${money(totals.totalCents)} taken while the register was offline was not paid: ${settled.message}`.slice(0, 500);
705
833
  const timeline = [
706
834
  {
707
835
  atMs: soldAt.atMs,
@@ -716,7 +844,7 @@ async function syncOne(context, raw) {
716
844
  ];
717
845
  transaction.create(orderRef, CommerceModel.withOrderListFields(orderRef.id, _extends({
718
846
  number,
719
- status: (settled == null ? void 0 : settled.kind) === 'unpaid' ? 'pending' : 'paid',
847
+ status: cardMoney ? cardMoney.status : 'paid',
720
848
  channel: 'pos',
721
849
  registerId: sale.registerId,
722
850
  cashierId
@@ -734,38 +862,20 @@ async function syncOne(context, raw) {
734
862
  discountBy: cashierId
735
863
  } : {}, sale.locationId ? {
736
864
  locationId: sale.locationId
737
- } : {}, {
865
+ } : {}, posHardwareSaleFields({
866
+ hostId: staff.hostId,
867
+ orgId: staff.orgId,
868
+ lineItems,
869
+ products
870
+ }), {
738
871
  lineItems,
739
872
  totals,
740
873
  taxMode: 'decision' in context.tax ? CommerceModel.storefrontTaxModeForDecision(context.tax.decision, totals.taxCents) : totals.taxCents > 0 ? 'manual' : 'none'
741
- }, takeFee > 0 ? {
742
- feeCollection: settled ? 'payout' : 'invoice'
874
+ }, cardMoney ? cardMoney.fields : cashTake > 0 ? {
875
+ feeCollection: 'invoice'
743
876
  } : {}, {
744
- payments: settled ? [
745
- _extends({
746
- id: 'pay_card_offline',
747
- method: 'card_present',
748
- amountCents: totals.totalCents,
749
- status: settled.kind === 'captured' ? 'succeeded' : 'failed',
750
- atMs: soldAt.atMs
751
- }, settled.kind === 'captured' ? {
752
- settledAtMs: now,
753
- takeFeeCents: settled.takeShareCents,
754
- feeCents: settled.feeCents,
755
- livemode: settled.livemode
756
- } : {
757
- takeFeeCents: 0,
758
- feeCents: 0,
759
- failureMessage: settled.message.slice(0, 300)
760
- }, settled.intentId ? {
761
- paymentIntentId: settled.intentId
762
- } : {}, settled.brand ? {
763
- cardBrand: settled.brand
764
- } : {}, settled.last4 ? {
765
- last4: settled.last4
766
- } : {}, {
767
- cashierId
768
- })
877
+ payments: cardMoney ? [
878
+ cardMoney.payment
769
879
  ] : [
770
880
  {
771
881
  id: 'pay_cash',
@@ -774,7 +884,7 @@ async function syncOne(context, raw) {
774
884
  status: 'succeeded',
775
885
  atMs: soldAt.atMs,
776
886
  settledAtMs: soldAt.atMs,
777
- takeFeeCents: takeFee,
887
+ takeFeeCents: cashTake,
778
888
  feeCents: 0,
779
889
  cashierId,
780
890
  cashTenderedCents: sale.cashTenderedCents,
@@ -805,12 +915,30 @@ async function syncOne(context, raw) {
805
915
  unpaid: true
806
916
  } : {});
807
917
  transaction.create(recordRef, record);
808
- // The take accrues with the order, in the same transaction (AGL-2111).
809
- // A card's share was netted from its payout by the capture instead.
810
- if (takeFee > 0 && feeRef && !settled) {
918
+ // The intent's record says its sale synced, in the same commit, so the
919
+ // webhook and the unsynced-card sweep never report a sale that landed.
920
+ if (settled == null ? void 0 : settled.intentId) {
921
+ transaction.set(posOfflineCardChargeRef(hostRef, sale.saleKey), {
922
+ hostId: staff.hostId,
923
+ saleKey: sale.saleKey,
924
+ paymentIntentId: settled.intentId,
925
+ registerId: sale.registerId,
926
+ synced: true,
927
+ orderId: orderRef.id,
928
+ syncedAtMs: now,
929
+ updatedAtMs: now,
930
+ alertDueAtMs: FieldValue.delete()
931
+ }, {
932
+ merge: true
933
+ });
934
+ }
935
+ // The fee no payout carried accrues with the order, in the same
936
+ // transaction (AGL-2111): a card's share was netted from its payout by
937
+ // the capture, and only a shortfall in that lands here.
938
+ if (invoiceCents > 0 && feeRef) {
811
939
  transaction.set(feeRef, {
812
940
  month: feeMonth,
813
- feeCents: FieldValue.increment(takeFee),
941
+ feeCents: FieldValue.increment(invoiceCents),
814
942
  orders: FieldValue.increment(1)
815
943
  }, {
816
944
  merge: true
@@ -830,6 +958,13 @@ async function syncOne(context, raw) {
830
958
  }
831
959
  return replayOf(record);
832
960
  }
961
+ if ((settled == null ? void 0 : settled.kind) === 'unpaid' && settled.wrongAccount && settled.intentId) {
962
+ await deps.card.wrongAccount(_extends({
963
+ hostId: staff.hostId,
964
+ orderId: orderRef.id,
965
+ paymentIntentId: settled.intentId
966
+ }, settled.wrongAccount));
967
+ }
833
968
  const finished = await finishSale(context, recordRef, orderRef, committed.record);
834
969
  return {
835
970
  saleKey: sale.saleKey,
@@ -854,7 +989,7 @@ export async function handlePosOfflineSync(deps, req) {
854
989
  key,
855
990
  Array.isArray(value) ? value[0] : value
856
991
  ])) : posOpsBody(req);
857
- const gate = await authorizePosOps(deps, req, body['hostId']);
992
+ const gate = await authorizePosOps(deps, req, body['hostId'], 'posSell');
858
993
  if ('error' in gate) return {
859
994
  status: gate.status,
860
995
  body: {