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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/package.json +13 -13
  2. package/src/index.d.ts +0 -1
  3. package/src/index.js +0 -1
  4. package/src/index.js.map +1 -1
  5. package/src/lib/barcode/barcode-decode.d.ts +71 -0
  6. package/src/lib/barcode/barcode-decode.js +498 -0
  7. package/src/lib/barcode/barcode-decode.js.map +1 -0
  8. package/src/lib/barcode/barcode-encode.d.ts +44 -0
  9. package/src/lib/barcode/barcode-encode.js +138 -0
  10. package/src/lib/barcode/barcode-encode.js.map +1 -0
  11. package/src/lib/barcode/barcode-scanner.component.d.ts +23 -0
  12. package/src/lib/barcode/barcode-scanner.component.js +260 -0
  13. package/src/lib/barcode/barcode-scanner.component.js.map +1 -0
  14. package/src/lib/barcode/scan-button.component.d.ts +10 -0
  15. package/src/lib/barcode/scan-button.component.js +62 -0
  16. package/src/lib/barcode/scan-button.component.js.map +1 -0
  17. package/src/lib/barcode/scanner-wedge.d.ts +35 -0
  18. package/src/lib/barcode/scanner-wedge.js +108 -0
  19. package/src/lib/barcode/scanner-wedge.js.map +1 -0
  20. package/src/lib/components/account.js +10 -1
  21. package/src/lib/components/account.js.map +1 -1
  22. package/src/lib/components/cart-extras.d.ts +45 -0
  23. package/src/lib/components/cart-extras.js +127 -0
  24. package/src/lib/components/cart-extras.js.map +1 -0
  25. package/src/lib/components/cart.js +82 -15
  26. package/src/lib/components/cart.js.map +1 -1
  27. package/src/lib/components/checkout-return-notice.d.ts +26 -0
  28. package/src/lib/components/checkout-return-notice.js +48 -0
  29. package/src/lib/components/checkout-return-notice.js.map +1 -0
  30. package/src/lib/components/commerce-console-page.js +124 -0
  31. package/src/lib/components/commerce-console-page.js.map +1 -1
  32. package/src/lib/components/commerce-console-sections.d.ts +1 -1
  33. package/src/lib/components/commerce-console-sections.js +4 -0
  34. package/src/lib/components/commerce-console-sections.js.map +1 -1
  35. package/src/lib/components/console/bulk-fulfill.d.ts +44 -0
  36. package/src/lib/components/console/bulk-fulfill.js +84 -0
  37. package/src/lib/components/console/bulk-fulfill.js.map +1 -0
  38. package/src/lib/components/console/catalog-organization-card.component.js +1 -0
  39. package/src/lib/components/console/catalog-organization-card.component.js.map +1 -1
  40. package/src/lib/components/console/customer-notifications-card.component.d.ts +19 -0
  41. package/src/lib/components/console/customer-notifications-card.component.js +149 -0
  42. package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
  43. package/src/lib/components/console/host-orders-card.component.js +88 -6
  44. package/src/lib/components/console/host-orders-card.component.js.map +1 -1
  45. package/src/lib/components/console/locations-card.component.js +164 -57
  46. package/src/lib/components/console/locations-card.component.js.map +1 -1
  47. package/src/lib/components/console/order-detail-dialog.component.js +209 -61
  48. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  49. package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
  50. package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
  51. package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
  52. package/src/lib/components/console/order-invoice.component.d.ts +33 -0
  53. package/src/lib/components/console/order-invoice.component.js +81 -0
  54. package/src/lib/components/console/order-invoice.component.js.map +1 -0
  55. package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
  56. package/src/lib/components/console/order-receipt-resend.component.js +203 -0
  57. package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
  58. package/src/lib/components/console/order-returns.component.d.ts +36 -0
  59. package/src/lib/components/console/order-returns.component.js +142 -0
  60. package/src/lib/components/console/order-returns.component.js.map +1 -0
  61. package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
  62. package/src/lib/components/console/order-shipping-actions.component.js +149 -0
  63. package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
  64. package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
  65. package/src/lib/components/console/order-webhooks-card.component.js +623 -0
  66. package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
  67. package/src/lib/components/console/order-zones.d.ts +155 -0
  68. package/src/lib/components/console/order-zones.js +40 -0
  69. package/src/lib/components/console/order-zones.js.map +1 -0
  70. package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
  71. package/src/lib/components/console/payment-methods-card.component.js +395 -0
  72. package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
  73. package/src/lib/components/console/pos/pos-api.d.ts +124 -0
  74. package/src/lib/components/console/pos/pos-api.js +101 -0
  75. package/src/lib/components/console/pos/pos-api.js.map +1 -0
  76. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
  77. package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
  78. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
  79. package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
  80. package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
  81. package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
  82. package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
  83. package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
  84. package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
  85. package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
  86. package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
  87. package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
  88. package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
  89. package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
  90. package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
  91. package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
  92. package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
  93. package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
  94. package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
  95. package/src/lib/components/console/pos/use-pos-display.js +161 -0
  96. package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
  97. package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
  98. package/src/lib/components/console/pos-devices-card.component.js +546 -0
  99. package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
  100. package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
  101. package/src/lib/components/console/pos-display/brand-screen.js +85 -0
  102. package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
  103. package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
  104. package/src/lib/components/console/pos-display/cart-screen.js +166 -0
  105. package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
  106. package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
  107. package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
  108. package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
  109. package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
  110. package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
  111. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
  112. package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
  113. package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
  114. package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
  115. package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
  116. package/src/lib/components/console/pos-display/tip-screen.js +211 -0
  117. package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
  118. package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
  119. package/src/lib/components/console/pos-display-page.component.js +407 -0
  120. package/src/lib/components/console/pos-display-page.component.js.map +1 -0
  121. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
  122. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
  123. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
  124. package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
  125. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
  126. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
  127. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
  128. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
  129. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
  130. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
  131. package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
  132. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
  133. package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
  134. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
  135. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
  136. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
  137. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
  138. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
  139. package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
  140. package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
  141. package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
  142. package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
  143. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
  144. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
  145. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
  146. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
  147. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
  148. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
  149. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
  150. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
  151. package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
  152. package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
  153. package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
  154. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
  155. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
  156. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
  157. package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
  158. package/src/lib/components/console/pos-ops/register-ops.js +28 -0
  159. package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
  160. package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
  161. package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
  162. package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
  163. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
  164. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
  165. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
  166. package/src/lib/components/console/pos-page.component.d.ts +13 -5
  167. package/src/lib/components/console/pos-page.component.js +756 -654
  168. package/src/lib/components/console/pos-page.component.js.map +1 -1
  169. package/src/lib/components/console/pos-zones.d.ts +23 -0
  170. package/src/lib/components/console/pos-zones.js +31 -0
  171. package/src/lib/components/console/pos-zones.js.map +1 -0
  172. package/src/lib/components/console/product-editor-dialog.component.js +61 -71
  173. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  174. package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
  175. package/src/lib/components/console/product-labels-dialog.component.js +197 -0
  176. package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
  177. package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
  178. package/src/lib/components/console/product-register-fields.component.js +241 -0
  179. package/src/lib/components/console/product-register-fields.component.js.map +1 -0
  180. package/src/lib/components/console/product-zones.d.ts +44 -0
  181. package/src/lib/components/console/product-zones.js.map +1 -1
  182. package/src/lib/components/console/products-hub-card.component.js +23 -20
  183. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  184. package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
  185. package/src/lib/components/console/register-hardware-card.component.js +826 -0
  186. package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
  187. package/src/lib/components/console/registers-card.component.js +24 -5
  188. package/src/lib/components/console/registers-card.component.js.map +1 -1
  189. package/src/lib/components/console/return-actions.d.ts +38 -0
  190. package/src/lib/components/console/return-actions.js +76 -0
  191. package/src/lib/components/console/return-actions.js.map +1 -0
  192. package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
  193. package/src/lib/components/console/return-detail-dialog.component.js +718 -0
  194. package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
  195. package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
  196. package/src/lib/components/console/return-settings-card.component.js +195 -0
  197. package/src/lib/components/console/return-settings-card.component.js.map +1 -0
  198. package/src/lib/components/console/return-zones.d.ts +87 -0
  199. package/src/lib/components/console/return-zones.js +31 -0
  200. package/src/lib/components/console/return-zones.js.map +1 -0
  201. package/src/lib/components/console/returns-card.component.d.ts +45 -0
  202. package/src/lib/components/console/returns-card.component.js +159 -0
  203. package/src/lib/components/console/returns-card.component.js.map +1 -0
  204. package/src/lib/components/console/shipping-settings-card.component.js +161 -5
  205. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
  206. package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
  207. package/src/lib/components/console/shippingeasy-card.component.js +378 -0
  208. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
  209. package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
  210. package/src/lib/components/console/shipstation-card.component.js +345 -0
  211. package/src/lib/components/console/shipstation-card.component.js.map +1 -0
  212. package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
  213. package/src/lib/components/console/start-return-dialog.component.js +243 -0
  214. package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
  215. package/src/lib/components/console/stock-movements-card.component.js +2 -1
  216. package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
  217. package/src/lib/components/console/store-settings-card.component.js +2 -66
  218. package/src/lib/components/console/store-settings-card.component.js.map +1 -1
  219. package/src/lib/components/console/store-zones.d.ts +42 -0
  220. package/src/lib/components/console/store-zones.js +39 -0
  221. package/src/lib/components/console/store-zones.js.map +1 -0
  222. package/src/lib/components/console/storefront-tax-summary-card.component.js +1 -0
  223. package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -1
  224. package/src/lib/components/order-status.d.ts +36 -0
  225. package/src/lib/components/order-status.js +502 -0
  226. package/src/lib/components/order-status.js.map +1 -0
  227. package/src/lib/components/product-detail.js +41 -2
  228. package/src/lib/components/product-detail.js.map +1 -1
  229. package/src/lib/components/return-request.d.ts +32 -0
  230. package/src/lib/components/return-request.js +576 -0
  231. package/src/lib/components/return-request.js.map +1 -0
  232. package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
  233. package/src/lib/components/storefront-payment-appearance.js +114 -0
  234. package/src/lib/components/storefront-payment-appearance.js.map +1 -0
  235. package/src/lib/components/storefront-payment-element.d.ts +57 -1
  236. package/src/lib/components/storefront-payment-element.js +332 -33
  237. package/src/lib/components/storefront-payment-element.js.map +1 -1
  238. package/src/lib/constants/order-status.d.ts +22 -0
  239. package/src/lib/constants/order-status.js +22 -0
  240. package/src/lib/constants/order-status.js.map +1 -0
  241. package/src/lib/constants/return-request.d.ts +27 -0
  242. package/src/lib/constants/return-request.js +32 -0
  243. package/src/lib/constants/return-request.js.map +1 -0
  244. package/src/lib/constants/stock-movement-query.js +2 -1
  245. package/src/lib/constants/stock-movement-query.js.map +1 -1
  246. package/src/lib/declarations.console-server.js +9 -0
  247. package/src/lib/declarations.console-server.js.map +1 -1
  248. package/src/lib/declarations.server.d.ts +2 -1
  249. package/src/lib/declarations.server.js +68 -1
  250. package/src/lib/declarations.server.js.map +1 -1
  251. package/src/lib/model/buyer-notifications.d.ts +59 -0
  252. package/src/lib/model/buyer-notifications.js +97 -0
  253. package/src/lib/model/buyer-notifications.js.map +1 -0
  254. package/src/lib/model/commerce-orders.d.ts +171 -2
  255. package/src/lib/model/commerce-orders.js +26 -16
  256. package/src/lib/model/commerce-orders.js.map +1 -1
  257. package/src/lib/model/commerce-payment-methods.d.ts +146 -0
  258. package/src/lib/model/commerce-payment-methods.js +247 -0
  259. package/src/lib/model/commerce-payment-methods.js.map +1 -0
  260. package/src/lib/model/commerce-pos-ops.d.ts +437 -0
  261. package/src/lib/model/commerce-pos-ops.js +721 -0
  262. package/src/lib/model/commerce-pos-ops.js.map +1 -0
  263. package/src/lib/model/commerce-pos.d.ts +263 -0
  264. package/src/lib/model/commerce-pos.js +375 -0
  265. package/src/lib/model/commerce-pos.js.map +1 -0
  266. package/src/lib/model/commerce-printers.d.ts +211 -0
  267. package/src/lib/model/commerce-printers.js +181 -0
  268. package/src/lib/model/commerce-printers.js.map +1 -0
  269. package/src/lib/model/commerce-receipt.d.ts +97 -0
  270. package/src/lib/model/commerce-receipt.js +180 -0
  271. package/src/lib/model/commerce-receipt.js.map +1 -0
  272. package/src/lib/model/commerce-returns.d.ts +207 -0
  273. package/src/lib/model/commerce-returns.js +300 -0
  274. package/src/lib/model/commerce-returns.js.map +1 -0
  275. package/src/lib/model/commerce-shipping.d.ts +44 -1
  276. package/src/lib/model/commerce-shipping.js +53 -9
  277. package/src/lib/model/commerce-shipping.js.map +1 -1
  278. package/src/lib/model/commerce-tax-engine.d.ts +90 -0
  279. package/src/lib/model/commerce-tax-engine.js +129 -0
  280. package/src/lib/model/commerce-tax-engine.js.map +1 -0
  281. package/src/lib/model/commerce.d.ts +91 -2
  282. package/src/lib/model/commerce.js +89 -1
  283. package/src/lib/model/commerce.js.map +1 -1
  284. package/src/lib/model/index.d.ts +16 -0
  285. package/src/lib/model/index.js +16 -0
  286. package/src/lib/model/index.js.map +1 -1
  287. package/src/lib/model/order-events.d.ts +154 -0
  288. package/src/lib/model/order-events.js +153 -0
  289. package/src/lib/model/order-events.js.map +1 -0
  290. package/src/lib/model/order-fulfillment.d.ts +117 -0
  291. package/src/lib/model/order-fulfillment.js +217 -0
  292. package/src/lib/model/order-fulfillment.js.map +1 -0
  293. package/src/lib/model/order-history.d.ts +58 -0
  294. package/src/lib/model/order-history.js +22 -0
  295. package/src/lib/model/order-history.js.map +1 -0
  296. package/src/lib/model/order-list-fields.d.ts +9 -1
  297. package/src/lib/model/order-list-fields.js +7 -1
  298. package/src/lib/model/order-list-fields.js.map +1 -1
  299. package/src/lib/model/order-shipping-export.d.ts +91 -0
  300. package/src/lib/model/order-shipping-export.js +192 -0
  301. package/src/lib/model/order-shipping-export.js.map +1 -0
  302. package/src/lib/model/order-status-view.d.ts +103 -0
  303. package/src/lib/model/order-status-view.js +156 -0
  304. package/src/lib/model/order-status-view.js.map +1 -0
  305. package/src/lib/model/order-webhooks.d.ts +142 -0
  306. package/src/lib/model/order-webhooks.js +91 -0
  307. package/src/lib/model/order-webhooks.js.map +1 -0
  308. package/src/lib/model/product-channel.d.ts +56 -0
  309. package/src/lib/model/product-channel.js +86 -0
  310. package/src/lib/model/product-channel.js.map +1 -0
  311. package/src/lib/model/product-modifiers.d.ts +80 -0
  312. package/src/lib/model/product-modifiers.js +140 -0
  313. package/src/lib/model/product-modifiers.js.map +1 -0
  314. package/src/lib/model/product-write.d.ts +186 -0
  315. package/src/lib/model/product-write.js +116 -0
  316. package/src/lib/model/product-write.js.map +1 -0
  317. package/src/lib/model/shippingeasy.d.ts +94 -0
  318. package/src/lib/model/shippingeasy.js +267 -0
  319. package/src/lib/model/shippingeasy.js.map +1 -0
  320. package/src/lib/model/shipstation.d.ts +125 -0
  321. package/src/lib/model/shipstation.js +399 -0
  322. package/src/lib/model/shipstation.js.map +1 -0
  323. package/src/lib/model/smart-collection-reads.d.ts +32 -0
  324. package/src/lib/model/smart-collection-reads.js +63 -0
  325. package/src/lib/model/smart-collection-reads.js.map +1 -0
  326. package/src/lib/model/tracking-url.d.ts +74 -0
  327. package/src/lib/model/tracking-url.js +159 -0
  328. package/src/lib/model/tracking-url.js.map +1 -0
  329. package/src/lib/plugin-config.d.ts +13 -0
  330. package/src/lib/plugin-config.js +77 -5
  331. package/src/lib/plugin-config.js.map +1 -1
  332. package/src/lib/plugin.js +26 -0
  333. package/src/lib/plugin.js.map +1 -1
  334. package/src/lib/pos-ops-config.d.ts +39 -0
  335. package/src/lib/pos-ops-config.js +88 -0
  336. package/src/lib/pos-ops-config.js.map +1 -0
  337. package/src/lib/printing/print-document.d.ts +106 -0
  338. package/src/lib/printing/print-document.js +464 -0
  339. package/src/lib/printing/print-document.js.map +1 -0
  340. package/src/lib/printing/product-labels.d.ts +58 -0
  341. package/src/lib/printing/product-labels.js +116 -0
  342. package/src/lib/printing/product-labels.js.map +1 -0
  343. package/src/lib/printing/render-epson.d.ts +57 -0
  344. package/src/lib/printing/render-epson.js +135 -0
  345. package/src/lib/printing/render-epson.js.map +1 -0
  346. package/src/lib/printing/render-star.d.ts +45 -0
  347. package/src/lib/printing/render-star.js +100 -0
  348. package/src/lib/printing/render-star.js.map +1 -0
  349. package/src/lib/printing/render-text.d.ts +25 -0
  350. package/src/lib/printing/render-text.js +53 -0
  351. package/src/lib/printing/render-text.js.map +1 -0
  352. package/src/lib/server/api-v1/openapi.js +27 -4
  353. package/src/lib/server/api-v1/openapi.js.map +1 -1
  354. package/src/lib/server/api-v1/order-view.d.ts +67 -0
  355. package/src/lib/server/api-v1/order-view.js +120 -0
  356. package/src/lib/server/api-v1/order-view.js.map +1 -0
  357. package/src/lib/server/api-v1/orders-and-products.js +58 -65
  358. package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
  359. package/src/lib/server/billing-webhook.js +135 -28
  360. package/src/lib/server/billing-webhook.js.map +1 -1
  361. package/src/lib/server/cancel-order.js +29 -0
  362. package/src/lib/server/cancel-order.js.map +1 -1
  363. package/src/lib/server/carrier-rates-availability.d.ts +26 -0
  364. package/src/lib/server/carrier-rates-availability.js +76 -0
  365. package/src/lib/server/carrier-rates-availability.js.map +1 -0
  366. package/src/lib/server/carrier-shipping.d.ts +84 -0
  367. package/src/lib/server/carrier-shipping.js +135 -0
  368. package/src/lib/server/carrier-shipping.js.map +1 -0
  369. package/src/lib/server/cart-checkout.d.ts +2 -0
  370. package/src/lib/server/cart-checkout.js +226 -22
  371. package/src/lib/server/cart-checkout.js.map +1 -1
  372. package/src/lib/server/channel-order-updates.d.ts +50 -0
  373. package/src/lib/server/channel-order-updates.js +290 -0
  374. package/src/lib/server/channel-order-updates.js.map +1 -0
  375. package/src/lib/server/channel-orders.d.ts +85 -0
  376. package/src/lib/server/channel-orders.js +543 -0
  377. package/src/lib/server/channel-orders.js.map +1 -0
  378. package/src/lib/server/checkout-extras.d.ts +64 -0
  379. package/src/lib/server/checkout-extras.js +157 -0
  380. package/src/lib/server/checkout-extras.js.map +1 -0
  381. package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
  382. package/src/lib/server/checkout-status.js +111 -0
  383. package/src/lib/server/checkout-status.js.map +1 -0
  384. package/src/lib/server/checkout.js +86 -9
  385. package/src/lib/server/checkout.js.map +1 -1
  386. package/src/lib/server/draft-order.js +34 -5
  387. package/src/lib/server/draft-order.js.map +1 -1
  388. package/src/lib/server/fulfill-order.d.ts +127 -10
  389. package/src/lib/server/fulfill-order.js +451 -49
  390. package/src/lib/server/fulfill-order.js.map +1 -1
  391. package/src/lib/server/legacy-feed.d.ts +28 -0
  392. package/src/lib/server/legacy-feed.js +52 -0
  393. package/src/lib/server/legacy-feed.js.map +1 -0
  394. package/src/lib/server/native-checkout.d.ts +34 -15
  395. package/src/lib/server/native-checkout.js +32 -17
  396. package/src/lib/server/native-checkout.js.map +1 -1
  397. package/src/lib/server/order-event-host-emit.d.ts +23 -0
  398. package/src/lib/server/order-event-host-emit.js +30 -0
  399. package/src/lib/server/order-event-host-emit.js.map +1 -0
  400. package/src/lib/server/order-event-triggers.d.ts +37 -0
  401. package/src/lib/server/order-event-triggers.js +119 -0
  402. package/src/lib/server/order-event-triggers.js.map +1 -0
  403. package/src/lib/server/order-events.d.ts +62 -0
  404. package/src/lib/server/order-events.js +109 -0
  405. package/src/lib/server/order-events.js.map +1 -0
  406. package/src/lib/server/order-history.d.ts +23 -0
  407. package/src/lib/server/order-history.js +65 -0
  408. package/src/lib/server/order-history.js.map +1 -0
  409. package/src/lib/server/order-notifications.d.ts +185 -0
  410. package/src/lib/server/order-notifications.js +567 -0
  411. package/src/lib/server/order-notifications.js.map +1 -0
  412. package/src/lib/server/order-receipt-send.d.ts +39 -0
  413. package/src/lib/server/order-receipt-send.js +151 -0
  414. package/src/lib/server/order-receipt-send.js.map +1 -0
  415. package/src/lib/server/order-status-token.d.ts +31 -0
  416. package/src/lib/server/order-status-token.js +75 -0
  417. package/src/lib/server/order-status-token.js.map +1 -0
  418. package/src/lib/server/order-status.d.ts +58 -0
  419. package/src/lib/server/order-status.js +141 -0
  420. package/src/lib/server/order-status.js.map +1 -0
  421. package/src/lib/server/order-webhooks.d.ts +108 -0
  422. package/src/lib/server/order-webhooks.js +622 -0
  423. package/src/lib/server/order-webhooks.js.map +1 -0
  424. package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
  425. package/src/lib/server/orders-shipping-prepare.js +121 -0
  426. package/src/lib/server/orders-shipping-prepare.js.map +1 -0
  427. package/src/lib/server/payment-method-domains.d.ts +209 -0
  428. package/src/lib/server/payment-method-domains.js +444 -0
  429. package/src/lib/server/payment-method-domains.js.map +1 -0
  430. package/src/lib/server/payment-methods.d.ts +77 -0
  431. package/src/lib/server/payment-methods.js +284 -0
  432. package/src/lib/server/payment-methods.js.map +1 -0
  433. package/src/lib/server/pos-auth.d.ts +50 -0
  434. package/src/lib/server/pos-auth.js +121 -0
  435. package/src/lib/server/pos-auth.js.map +1 -0
  436. package/src/lib/server/pos-customer.d.ts +49 -0
  437. package/src/lib/server/pos-customer.js +257 -0
  438. package/src/lib/server/pos-customer.js.map +1 -0
  439. package/src/lib/server/pos-display.d.ts +57 -0
  440. package/src/lib/server/pos-display.js +419 -0
  441. package/src/lib/server/pos-display.js.map +1 -0
  442. package/src/lib/server/pos-fee-month.d.ts +34 -0
  443. package/src/lib/server/pos-fee-month.js +36 -0
  444. package/src/lib/server/pos-fee-month.js.map +1 -0
  445. package/src/lib/server/pos-ops-gate.d.ts +161 -0
  446. package/src/lib/server/pos-ops-gate.js +295 -0
  447. package/src/lib/server/pos-ops-gate.js.map +1 -0
  448. package/src/lib/server/pos-ops-routes.d.ts +22 -0
  449. package/src/lib/server/pos-ops-routes.js +36 -0
  450. package/src/lib/server/pos-ops-routes.js.map +1 -0
  451. package/src/lib/server/pos-order.d.ts +1 -18
  452. package/src/lib/server/pos-order.js +222 -42
  453. package/src/lib/server/pos-order.js.map +1 -1
  454. package/src/lib/server/pos-payment.d.ts +39 -0
  455. package/src/lib/server/pos-payment.js +922 -0
  456. package/src/lib/server/pos-payment.js.map +1 -0
  457. package/src/lib/server/pos-print.d.ts +82 -0
  458. package/src/lib/server/pos-print.js +193 -0
  459. package/src/lib/server/pos-print.js.map +1 -0
  460. package/src/lib/server/pos-readers.d.ts +27 -0
  461. package/src/lib/server/pos-readers.js +276 -0
  462. package/src/lib/server/pos-readers.js.map +1 -0
  463. package/src/lib/server/pos-refund-authority.d.ts +60 -0
  464. package/src/lib/server/pos-refund-authority.js +72 -0
  465. package/src/lib/server/pos-refund-authority.js.map +1 -0
  466. package/src/lib/server/pos-return.d.ts +58 -0
  467. package/src/lib/server/pos-return.js +891 -0
  468. package/src/lib/server/pos-return.js.map +1 -0
  469. package/src/lib/server/pos-sale-stamp.d.ts +66 -0
  470. package/src/lib/server/pos-sale-stamp.js +84 -0
  471. package/src/lib/server/pos-sale-stamp.js.map +1 -0
  472. package/src/lib/server/pos-sale.d.ts +170 -0
  473. package/src/lib/server/pos-sale.js +461 -0
  474. package/src/lib/server/pos-sale.js.map +1 -0
  475. package/src/lib/server/pos-shift.d.ts +45 -0
  476. package/src/lib/server/pos-shift.js +484 -0
  477. package/src/lib/server/pos-shift.js.map +1 -0
  478. package/src/lib/server/pos-staff-pin.d.ts +26 -0
  479. package/src/lib/server/pos-staff-pin.js +339 -0
  480. package/src/lib/server/pos-staff-pin.js.map +1 -0
  481. package/src/lib/server/pos-stripe.d.ts +91 -0
  482. package/src/lib/server/pos-stripe.js +129 -0
  483. package/src/lib/server/pos-stripe.js.map +1 -0
  484. package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
  485. package/src/lib/server/pos-terminal-connection-token.js +166 -0
  486. package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
  487. package/src/lib/server/pos-terminal.d.ts +218 -0
  488. package/src/lib/server/pos-terminal.js +1014 -0
  489. package/src/lib/server/pos-terminal.js.map +1 -0
  490. package/src/lib/server/print-queue.d.ts +124 -0
  491. package/src/lib/server/print-queue.js +301 -0
  492. package/src/lib/server/print-queue.js.map +1 -0
  493. package/src/lib/server/printer-poll.d.ts +75 -0
  494. package/src/lib/server/printer-poll.js +325 -0
  495. package/src/lib/server/printer-poll.js.map +1 -0
  496. package/src/lib/server/printer-secret.d.ts +39 -0
  497. package/src/lib/server/printer-secret.js +56 -0
  498. package/src/lib/server/printer-secret.js.map +1 -0
  499. package/src/lib/server/printers.d.ts +114 -0
  500. package/src/lib/server/printers.js +546 -0
  501. package/src/lib/server/printers.js.map +1 -0
  502. package/src/lib/server/product-catalog.d.ts +42 -0
  503. package/src/lib/server/product-catalog.js +309 -0
  504. package/src/lib/server/product-catalog.js.map +1 -0
  505. package/src/lib/server/product-drafts.d.ts +5 -1
  506. package/src/lib/server/product-drafts.js +3 -3
  507. package/src/lib/server/product-drafts.js.map +1 -1
  508. package/src/lib/server/product-writer.d.ts +19 -0
  509. package/src/lib/server/product-writer.js +261 -0
  510. package/src/lib/server/product-writer.js.map +1 -0
  511. package/src/lib/server/products-write.d.ts +61 -0
  512. package/src/lib/server/products-write.js +375 -0
  513. package/src/lib/server/products-write.js.map +1 -0
  514. package/src/lib/server/refund.js +110 -45
  515. package/src/lib/server/refund.js.map +1 -1
  516. package/src/lib/server/reserve.js +2 -0
  517. package/src/lib/server/reserve.js.map +1 -1
  518. package/src/lib/server/return-status-action.d.ts +37 -0
  519. package/src/lib/server/return-status-action.js +57 -0
  520. package/src/lib/server/return-status-action.js.map +1 -0
  521. package/src/lib/server/returns.d.ts +119 -0
  522. package/src/lib/server/returns.js +938 -0
  523. package/src/lib/server/returns.js.map +1 -0
  524. package/src/lib/server/shipment-records.d.ts +36 -0
  525. package/src/lib/server/shipment-records.js +289 -0
  526. package/src/lib/server/shipment-records.js.map +1 -0
  527. package/src/lib/server/shipping-connector-gates.d.ts +40 -0
  528. package/src/lib/server/shipping-connector-gates.js +97 -0
  529. package/src/lib/server/shipping-connector-gates.js.map +1 -0
  530. package/src/lib/server/shipping-connectors.d.ts +29 -0
  531. package/src/lib/server/shipping-connectors.js +236 -0
  532. package/src/lib/server/shipping-connectors.js.map +1 -0
  533. package/src/lib/server/shippingeasy.d.ts +238 -0
  534. package/src/lib/server/shippingeasy.js +787 -0
  535. package/src/lib/server/shippingeasy.js.map +1 -0
  536. package/src/lib/server/shipstation.d.ts +129 -0
  537. package/src/lib/server/shipstation.js +483 -0
  538. package/src/lib/server/shipstation.js.map +1 -0
  539. package/src/lib/server/site-page-resolver.d.ts +5 -0
  540. package/src/lib/server/site-page-resolver.js +156 -1
  541. package/src/lib/server/site-page-resolver.js.map +1 -1
  542. package/src/lib/server/stock-levels.d.ts +21 -0
  543. package/src/lib/server/stock-levels.js +263 -0
  544. package/src/lib/server/stock-levels.js.map +1 -0
  545. package/src/lib/server/stripe-refund.d.ts +47 -0
  546. package/src/lib/server/stripe-refund.js +87 -0
  547. package/src/lib/server/stripe-refund.js.map +1 -0
  548. package/src/lib/server/supplier-update.js +46 -5
  549. package/src/lib/server/supplier-update.js.map +1 -1
  550. package/src/lib/server/tax-engine-quote.d.ts +47 -0
  551. package/src/lib/server/tax-engine-quote.js +105 -0
  552. package/src/lib/server/tax-engine-quote.js.map +1 -0
  553. package/src/lib/server.js +143 -2
  554. package/src/lib/server.js.map +1 -1
  555. package/src/lib/site.js +12 -0
  556. package/src/lib/site.js.map +1 -1
  557. package/src/lib/subprocessors.d.ts +26 -0
  558. package/src/lib/subprocessors.js +50 -0
  559. package/src/lib/subprocessors.js.map +1 -0
  560. package/src/lib/tenant-emails.js +461 -3
  561. package/src/lib/tenant-emails.js.map +1 -1
  562. package/src/lib/testing/fake-firestore.d.ts +45 -0
  563. package/src/lib/testing/fake-firestore.js +189 -0
  564. package/src/lib/testing/fake-firestore.js.map +1 -0
  565. package/src/lib/testing/memory-firestore.d.ts +136 -0
  566. package/src/lib/testing/memory-firestore.js +282 -0
  567. package/src/lib/testing/memory-firestore.js.map +1 -0
  568. package/src/lib/testing/pos-ops-harness.d.ts +50 -0
  569. package/src/lib/testing/pos-ops-harness.js +184 -0
  570. package/src/lib/testing/pos-ops-harness.js.map +1 -0
  571. package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
  572. package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
  573. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
  574. package/src/lib/transfer/products.server.d.ts +5 -0
  575. package/src/lib/transfer/products.server.js +2 -2
  576. package/src/lib/transfer/products.server.js.map +1 -1
  577. package/src/lib/transfer/records-transfer.d.ts +11 -1
  578. package/src/lib/transfer/records-transfer.js +127 -5
  579. package/src/lib/transfer/records-transfer.js.map +1 -1
  580. package/src/lib/transfer/records.server.d.ts +9 -2
  581. package/src/lib/transfer/records.server.js +58 -7
  582. package/src/lib/transfer/records.server.js.map +1 -1
  583. package/src/lib/transfer/register-transfer-resources.js +40 -1
  584. package/src/lib/transfer/register-transfer-resources.js.map +1 -1
  585. package/src/lib/transfer/register-transfer-ui.js +4 -1
  586. package/src/lib/transfer/register-transfer-ui.js.map +1 -1
  587. package/src/lib/transfer/shipping-presets.d.ts +23 -0
  588. package/src/lib/transfer/shipping-presets.js +156 -0
  589. package/src/lib/transfer/shipping-presets.js.map +1 -0
  590. package/src/lib/transfer/tracking-transfer.d.ts +101 -0
  591. package/src/lib/transfer/tracking-transfer.js +546 -0
  592. package/src/lib/transfer/tracking-transfer.js.map +1 -0
  593. package/src/lib/transfer/tracking.server.d.ts +37 -0
  594. package/src/lib/transfer/tracking.server.js +393 -0
  595. package/src/lib/transfer/tracking.server.js.map +1 -0
  596. package/src/lib/transfer/transfer-keys.d.ts +2 -1
  597. package/src/lib/transfer/transfer-keys.js +6 -2
  598. package/src/lib/transfer/transfer-keys.js.map +1 -1
  599. package/src/lib/utils/code128.d.ts +37 -0
  600. package/src/lib/utils/code128.js +199 -0
  601. package/src/lib/utils/code128.js.map +1 -0
  602. package/src/lib/utils/order-invoice.d.ts +55 -0
  603. package/src/lib/utils/order-invoice.js +127 -0
  604. package/src/lib/utils/order-invoice.js.map +1 -0
  605. package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
  606. package/src/lib/utils/use-checkout-return-notice.js +78 -0
  607. package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
  608. package/src/lib/server/feed.js +0 -69
  609. package/src/lib/server/feed.js.map +0 -1
@@ -0,0 +1,484 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
18
+ import { computePosShiftReport, posShiftPrintReport, posCashVarianceCents } from "../model/commerce-pos-ops.js";
19
+ import { authorizePosOps, defaultPosOpsDeps, posOpsBody, posOpsCleanId, readPosRegister, resolvePosCashier } from "./pos-ops-gate.js";
20
+ /*==========================================
21
+ * SHIFTS AND THE CASH DRAWER (AGL-3609): `POST /api/commerce/pos-shift`.
22
+ *
23
+ * open a starting float; refused while the register has a shift open
24
+ * cash-event paid in, paid out or a safe drop, with a reason
25
+ * x-report the open shift's figures so far, changing nothing
26
+ * close the counted cash, the Z report frozen onto the shift
27
+ * current the register's open shift, or none
28
+ *
29
+ * ONE OPEN SHIFT PER REGISTER is the register document's `openShiftId`,
30
+ * claimed and released inside the same transaction as the shift it names.
31
+ * Two tablets opening the same till at once both read the register; the
32
+ * transaction that commits second re-reads it, finds the first one's shift
33
+ * and refuses — there is no window in which both stand.
34
+ *=========================================*/ /** The most sales one report reads; past it the report says it is partial. */ export const POS_SHIFT_SALES_CEILING = 5000;
35
+ /** The largest float or cash movement the drawer records in one entry. */ export const POS_CASH_ENTRY_MAX_CENTS = 10000000;
36
+ const CASH_EVENT_TYPES = new Set([
37
+ 'paid_in',
38
+ 'paid_out',
39
+ 'drop'
40
+ ]);
41
+ function cents(value) {
42
+ const number = Number(value);
43
+ if (!Number.isFinite(number)) return null;
44
+ const rounded = Math.round(number);
45
+ return rounded >= 0 && rounded <= POS_CASH_ENTRY_MAX_CENTS ? rounded : null;
46
+ }
47
+ /**
48
+ * The figures for a shift, read from the sales stamped with it and the
49
+ * returns rung against it. Inside a transaction when one is given, so a Z
50
+ * report and the close it freezes see the same sales.
51
+ */ export async function readPosShiftReport(registerRef, hostRef, shiftId, shift, transaction) {
52
+ const salesQuery = hostRef.collection('orders').where('shiftId', '==', shiftId).limit(POS_SHIFT_SALES_CEILING + 1);
53
+ const returnsQuery = registerRef.collection('returns').where('shiftId', '==', shiftId).limit(2000);
54
+ const [salesSnapshot, returnsSnapshot] = transaction ? await Promise.all([
55
+ transaction.get(salesQuery),
56
+ transaction.get(returnsQuery)
57
+ ]) : await Promise.all([
58
+ salesQuery.get(),
59
+ returnsQuery.get()
60
+ ]);
61
+ const sales = salesSnapshot.docs.slice(0, POS_SHIFT_SALES_CEILING).map((doc)=>{
62
+ var _doc_data;
63
+ return (_doc_data = doc.data()) != null ? _doc_data : {};
64
+ });
65
+ const refunds = returnsSnapshot.docs.map((doc)=>{
66
+ var _doc_data, _data_refundedCents;
67
+ const data = (_doc_data = doc.data()) != null ? _doc_data : {};
68
+ const tenders = Array.isArray(data['tenders']) ? data['tenders'] : [];
69
+ return {
70
+ refundedCents: Number((_data_refundedCents = data['refundedCents']) != null ? _data_refundedCents : 0),
71
+ tenders: tenders.filter((tender)=>(tender == null ? void 0 : tender.status) !== 'failed').map((tender)=>{
72
+ var _tender_amountCents;
73
+ return {
74
+ method: tender.method,
75
+ amountCents: Number((_tender_amountCents = tender.amountCents) != null ? _tender_amountCents : 0)
76
+ };
77
+ })
78
+ };
79
+ });
80
+ return computePosShiftReport({
81
+ shift,
82
+ sales,
83
+ refunds,
84
+ truncated: salesSnapshot.docs.length > POS_SHIFT_SALES_CEILING
85
+ });
86
+ }
87
+ function shiftOf(data) {
88
+ var _data_openingFloatCents;
89
+ if (!data) return null;
90
+ return _extends({}, data, {
91
+ cashEvents: Array.isArray(data['cashEvents']) ? data['cashEvents'] : [],
92
+ openingFloatCents: Number((_data_openingFloatCents = data['openingFloatCents']) != null ? _data_openingFloatCents : 0)
93
+ });
94
+ }
95
+ export async function handlePosShift(deps, req) {
96
+ var _body_action;
97
+ if (req.method !== 'POST') return {
98
+ status: 405,
99
+ body: {
100
+ error: 'Method not allowed'
101
+ }
102
+ };
103
+ const body = posOpsBody(req);
104
+ const gate = await authorizePosOps(deps, req, body['hostId']);
105
+ if ('error' in gate) return {
106
+ status: gate.status,
107
+ body: {
108
+ error: gate.error
109
+ }
110
+ };
111
+ const staff = gate.staff;
112
+ const register = await readPosRegister(staff, body['registerId']);
113
+ if ('error' in register) return {
114
+ status: register.status,
115
+ body: {
116
+ error: register.error
117
+ }
118
+ };
119
+ const registerId = register.ref.id;
120
+ const { cashierId } = await resolvePosCashier(deps, staff, registerId, body['cashierAssertion']);
121
+ const action = String((_body_action = body['action']) != null ? _body_action : '');
122
+ const firestore = deps.firestore();
123
+ const shifts = register.ref.collection('shifts');
124
+ switch(action){
125
+ case 'current':
126
+ {
127
+ var _register_data_openShiftId;
128
+ const openShiftId = String((_register_data_openShiftId = register.data['openShiftId']) != null ? _register_data_openShiftId : '');
129
+ if (!openShiftId) return {
130
+ status: 200,
131
+ body: {
132
+ shift: null
133
+ }
134
+ };
135
+ const shift = shiftOf((await shifts.doc(openShiftId).get()).data());
136
+ return {
137
+ status: 200,
138
+ body: {
139
+ shift: shift && shift.status === 'open' ? _extends({
140
+ id: openShiftId
141
+ }, shift) : null
142
+ }
143
+ };
144
+ }
145
+ case 'open':
146
+ {
147
+ var _body_openingFloatCents;
148
+ const float = cents((_body_openingFloatCents = body['openingFloatCents']) != null ? _body_openingFloatCents : 0);
149
+ if (float == null) return {
150
+ status: 400,
151
+ body: {
152
+ error: 'Enter the starting cash as an amount.'
153
+ }
154
+ };
155
+ const shiftRef = shifts.doc(createResourceUid());
156
+ const now = deps.now();
157
+ const openedByName = await deps.memberName(cashierId);
158
+ return await firestore.runTransaction(async (transaction)=>{
159
+ var _fresh_get;
160
+ const fresh = await transaction.get(register.ref);
161
+ const standing = String((_fresh_get = fresh.get('openShiftId')) != null ? _fresh_get : '');
162
+ if (standing) {
163
+ const standingShift = await transaction.get(shifts.doc(standing));
164
+ if (standingShift.exists && standingShift.get('status') === 'open') {
165
+ return {
166
+ status: 409,
167
+ body: {
168
+ error: 'This register already has a shift open. Close it before opening another.',
169
+ shiftId: standing
170
+ }
171
+ };
172
+ }
173
+ }
174
+ const shift = {
175
+ hostId: staff.hostId,
176
+ registerId,
177
+ status: 'open',
178
+ openedBy: cashierId,
179
+ openedByName,
180
+ openedAtMs: now,
181
+ openingFloatCents: float,
182
+ cashEvents: []
183
+ };
184
+ transaction.create(shiftRef, shift);
185
+ transaction.update(register.ref, {
186
+ openShiftId: shiftRef.id
187
+ });
188
+ return {
189
+ status: 200,
190
+ body: {
191
+ shift: _extends({
192
+ id: shiftRef.id
193
+ }, shift)
194
+ }
195
+ };
196
+ });
197
+ }
198
+ case 'cash-event':
199
+ {
200
+ var _body_type, _body_reason;
201
+ const type = String((_body_type = body['type']) != null ? _body_type : '');
202
+ if (!CASH_EVENT_TYPES.has(type)) {
203
+ return {
204
+ status: 400,
205
+ body: {
206
+ error: 'Choose paid in, paid out or a safe drop.'
207
+ }
208
+ };
209
+ }
210
+ const amount = cents(body['amountCents']);
211
+ if (!amount) return {
212
+ status: 400,
213
+ body: {
214
+ error: 'Enter an amount above zero.'
215
+ }
216
+ };
217
+ const reason = String((_body_reason = body['reason']) != null ? _body_reason : '').trim().slice(0, 200);
218
+ if (!reason && type !== 'drop') {
219
+ return {
220
+ status: 400,
221
+ body: {
222
+ error: 'Say what the cash was for.'
223
+ }
224
+ };
225
+ }
226
+ const eventId = posOpsCleanId(body['eventId']) || createResourceUid();
227
+ const recorded = await firestore.runTransaction(async (transaction)=>{
228
+ var _fresh_get;
229
+ const fresh = await transaction.get(register.ref);
230
+ const shiftId = String((_fresh_get = fresh.get('openShiftId')) != null ? _fresh_get : '');
231
+ if (!shiftId) return {
232
+ status: 409,
233
+ body: {
234
+ error: 'Open a shift first.'
235
+ }
236
+ };
237
+ const shiftRef = shifts.doc(shiftId);
238
+ const shift = shiftOf((await transaction.get(shiftRef)).data());
239
+ if (!shift || shift.status !== 'open') {
240
+ return {
241
+ status: 409,
242
+ body: {
243
+ error: 'Open a shift first.'
244
+ }
245
+ };
246
+ }
247
+ // A retried tap carries the same id: recorded once, answered twice.
248
+ if (shift.cashEvents.some((event)=>event.id === eventId)) {
249
+ return {
250
+ status: 200,
251
+ body: {
252
+ shift: _extends({
253
+ id: shiftId
254
+ }, shift),
255
+ replayed: true
256
+ }
257
+ };
258
+ }
259
+ const event = {
260
+ id: eventId,
261
+ type,
262
+ amountCents: amount,
263
+ reason,
264
+ by: cashierId,
265
+ atMs: deps.now()
266
+ };
267
+ const cashEvents = [
268
+ ...shift.cashEvents,
269
+ event
270
+ ];
271
+ transaction.update(shiftRef, {
272
+ cashEvents
273
+ });
274
+ return {
275
+ status: 200,
276
+ body: {
277
+ shift: _extends({
278
+ id: shiftId
279
+ }, shift, {
280
+ cashEvents
281
+ })
282
+ }
283
+ };
284
+ });
285
+ // The drawer opens for the cash once it is on the record; a replayed
286
+ // tap kicked it the first time.
287
+ if (recorded.status === 200 && !recorded.body['replayed']) {
288
+ await deps.printer.kickDrawer({
289
+ hostId: staff.hostId,
290
+ registerId,
291
+ reason: type,
292
+ causeId: eventId,
293
+ createdBy: cashierId
294
+ });
295
+ }
296
+ return recorded;
297
+ }
298
+ case 'print-report':
299
+ {
300
+ var _register_data_openShiftId1, _host_get;
301
+ // An X report of the open shift, or the Z report a closed one froze, on
302
+ // the register's receipt printer. `printed: false` tells the register
303
+ // there is no cloud printer, and it prints through the browser instead.
304
+ const requested = posOpsCleanId(body['shiftId']) || String((_register_data_openShiftId1 = register.data['openShiftId']) != null ? _register_data_openShiftId1 : '');
305
+ if (!requested) return {
306
+ status: 409,
307
+ body: {
308
+ error: 'No shift is open on this register.'
309
+ }
310
+ };
311
+ const shift = shiftOf((await shifts.doc(requested).get()).data());
312
+ if (!shift) return {
313
+ status: 404,
314
+ body: {
315
+ error: 'Unknown shift'
316
+ }
317
+ };
318
+ const closed = shift.status === 'closed' && shift.report;
319
+ const report = closed ? shift.report : await readPosShiftReport(register.ref, staff.hostRef, requested, shift);
320
+ const host = await staff.hostRef.get();
321
+ const by = closed ? shift.closedByName : shift.openedByName;
322
+ const printed = await deps.printer.printReport({
323
+ hostId: staff.hostId,
324
+ registerId,
325
+ shiftId: requested,
326
+ report: posShiftPrintReport(_extends({
327
+ title: closed ? 'Z REPORT' : 'X REPORT',
328
+ storeName: String((_host_get = host.get('displayName')) != null ? _host_get : '') || 'Register'
329
+ }, register.data['name'] ? {
330
+ registerName: String(register.data['name'])
331
+ } : {}, by ? {
332
+ subtitle: `${closed ? 'Closed' : 'Opened'} by ${by}`
333
+ } : {}, {
334
+ report
335
+ }, closed ? {
336
+ shift
337
+ } : {})),
338
+ createdBy: cashierId,
339
+ attemptKey: posOpsCleanId(body['attemptKey']) || String(deps.now())
340
+ });
341
+ return {
342
+ status: 200,
343
+ body: {
344
+ printed: printed.jobIds.length > 0,
345
+ jobIds: printed.jobIds
346
+ }
347
+ };
348
+ }
349
+ case 'x-report':
350
+ {
351
+ var _register_data_openShiftId2;
352
+ const shiftId = String((_register_data_openShiftId2 = register.data['openShiftId']) != null ? _register_data_openShiftId2 : '');
353
+ const shift = shiftId ? shiftOf((await shifts.doc(shiftId).get()).data()) : null;
354
+ if (!shift || shift.status !== 'open') {
355
+ return {
356
+ status: 409,
357
+ body: {
358
+ error: 'No shift is open on this register.'
359
+ }
360
+ };
361
+ }
362
+ const report = await readPosShiftReport(register.ref, staff.hostRef, shiftId, shift);
363
+ return {
364
+ status: 200,
365
+ body: {
366
+ shiftId,
367
+ shift: _extends({
368
+ id: shiftId
369
+ }, shift),
370
+ report
371
+ }
372
+ };
373
+ }
374
+ case 'close':
375
+ {
376
+ var _body_note;
377
+ const counted = cents(body['countedCashCents']);
378
+ if (counted == null) return {
379
+ status: 400,
380
+ body: {
381
+ error: 'Enter the cash you counted.'
382
+ }
383
+ };
384
+ const note = String((_body_note = body['note']) != null ? _body_note : '').trim().slice(0, 500);
385
+ const expectedShiftId = posOpsCleanId(body['shiftId']);
386
+ const closedByName = await deps.memberName(cashierId);
387
+ return await firestore.runTransaction(async (transaction)=>{
388
+ var _fresh_get;
389
+ const fresh = await transaction.get(register.ref);
390
+ const shiftId = String((_fresh_get = fresh.get('openShiftId')) != null ? _fresh_get : '');
391
+ if (!shiftId) return {
392
+ status: 409,
393
+ body: {
394
+ error: 'No shift is open on this register.'
395
+ }
396
+ };
397
+ // A stale tablet closing a shift another tablet already closed and
398
+ // reopened must not close the new one with the old count.
399
+ if (expectedShiftId && expectedShiftId !== shiftId) {
400
+ return {
401
+ status: 409,
402
+ body: {
403
+ error: 'That shift is already closed. Refresh to see the open one.'
404
+ }
405
+ };
406
+ }
407
+ const shiftRef = shifts.doc(shiftId);
408
+ const shift = shiftOf((await transaction.get(shiftRef)).data());
409
+ if (!shift || shift.status !== 'open') {
410
+ return {
411
+ status: 409,
412
+ body: {
413
+ error: 'No shift is open on this register.'
414
+ }
415
+ };
416
+ }
417
+ const report = await readPosShiftReport(register.ref, staff.hostRef, shiftId, shift, transaction);
418
+ const closed = _extends({
419
+ status: 'closed',
420
+ closedBy: cashierId,
421
+ closedByName,
422
+ closedAtMs: deps.now(),
423
+ countedCashCents: counted,
424
+ expectedCashCents: report.expectedCashCents,
425
+ varianceCents: posCashVarianceCents(counted, report.expectedCashCents),
426
+ report
427
+ }, note ? {
428
+ closingNote: note
429
+ } : {});
430
+ transaction.update(shiftRef, closed);
431
+ transaction.update(register.ref, {
432
+ openShiftId: null
433
+ });
434
+ return {
435
+ status: 200,
436
+ body: {
437
+ shift: _extends({
438
+ id: shiftId
439
+ }, shift, closed),
440
+ report
441
+ }
442
+ };
443
+ });
444
+ }
445
+ default:
446
+ return {
447
+ status: 400,
448
+ body: {
449
+ error: 'Unknown action'
450
+ }
451
+ };
452
+ }
453
+ }
454
+ /** Whether a register may take a sale or pay cash out, by the site's shift rule. */ export async function posShiftForSale(staff, registerRef) {
455
+ var _register_get;
456
+ const register = await registerRef.get();
457
+ const shiftId = String((_register_get = register.get('openShiftId')) != null ? _register_get : '') || null;
458
+ if (!shiftId && staff.settings.requireOpenShift) {
459
+ return {
460
+ ok: false,
461
+ error: 'Open a shift on this register before ringing a sale.'
462
+ };
463
+ }
464
+ return {
465
+ ok: true,
466
+ shiftId
467
+ };
468
+ }
469
+ export function createPosShiftHandler(deps = defaultPosOpsDeps) {
470
+ return async (req, res)=>{
471
+ try {
472
+ const outcome = await handlePosShift(deps(), req);
473
+ return res.status(outcome.status).json(outcome.body);
474
+ } catch (error) {
475
+ console.error('[pos-shift] failed', error);
476
+ return res.status(500).json({
477
+ error: 'The shift could not be updated'
478
+ });
479
+ }
480
+ };
481
+ }
482
+ export const posShiftHandler = createPosShiftHandler();
483
+
484
+ //# sourceMappingURL=pos-shift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-shift.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createResourceUid } from '@aglyn/aglyn/app-utils/create-resource-uid'\nimport type { PluginApiHandler, PluginApiRequest } from '@aglyn/aglyn/server'\nimport {\n computePosShiftReport,\n posShiftPrintReport,\n posCashVarianceCents,\n type PosCashEvent,\n type PosCashEventType,\n type PosShift,\n type PosShiftRefund,\n type PosShiftReport,\n type PosShiftSale,\n} from '../model/commerce-pos-ops'\nimport {\n authorizePosOps,\n defaultPosOpsDeps,\n posOpsBody,\n posOpsCleanId,\n readPosRegister,\n resolvePosCashier,\n type PosOpsDeps,\n type PosOpsStaff,\n} from './pos-ops-gate'\n\n/*==========================================\n * SHIFTS AND THE CASH DRAWER (AGL-3609): `POST /api/commerce/pos-shift`.\n *\n * open a starting float; refused while the register has a shift open\n * cash-event paid in, paid out or a safe drop, with a reason\n * x-report the open shift's figures so far, changing nothing\n * close the counted cash, the Z report frozen onto the shift\n * current the register's open shift, or none\n *\n * ONE OPEN SHIFT PER REGISTER is the register document's `openShiftId`,\n * claimed and released inside the same transaction as the shift it names.\n * Two tablets opening the same till at once both read the register; the\n * transaction that commits second re-reads it, finds the first one's shift\n * and refuses — there is no window in which both stand.\n *=========================================*/\n\n/** The most sales one report reads; past it the report says it is partial. */\nexport const POS_SHIFT_SALES_CEILING = 5000\n/** The largest float or cash movement the drawer records in one entry. */\nexport const POS_CASH_ENTRY_MAX_CENTS = 10_000_000\n\nconst CASH_EVENT_TYPES: ReadonlySet<PosCashEventType> = new Set(['paid_in', 'paid_out', 'drop'])\n\nfunction cents(value: unknown): number | null {\n const number = Number(value)\n if (!Number.isFinite(number)) return null\n const rounded = Math.round(number)\n return rounded >= 0 && rounded <= POS_CASH_ENTRY_MAX_CENTS ? rounded : null\n}\n\n/**\n * The figures for a shift, read from the sales stamped with it and the\n * returns rung against it. Inside a transaction when one is given, so a Z\n * report and the close it freezes see the same sales.\n */\nexport async function readPosShiftReport(\n registerRef: FirebaseFirestore.DocumentReference,\n hostRef: FirebaseFirestore.DocumentReference,\n shiftId: string,\n shift: Pick<PosShift, 'openingFloatCents' | 'cashEvents'>,\n transaction?: FirebaseFirestore.Transaction,\n): Promise<PosShiftReport> {\n const salesQuery = hostRef\n .collection('orders')\n .where('shiftId', '==', shiftId)\n .limit(POS_SHIFT_SALES_CEILING + 1)\n const returnsQuery = registerRef.collection('returns').where('shiftId', '==', shiftId).limit(2000)\n const [salesSnapshot, returnsSnapshot] = transaction\n ? await Promise.all([transaction.get(salesQuery), transaction.get(returnsQuery)])\n : await Promise.all([salesQuery.get(), returnsQuery.get()])\n const sales = salesSnapshot.docs\n .slice(0, POS_SHIFT_SALES_CEILING)\n .map((doc) => (doc.data() ?? {}) as PosShiftSale)\n const refunds: PosShiftRefund[] = returnsSnapshot.docs.map((doc) => {\n const data = (doc.data() ?? {}) as Record<string, any>\n const tenders = Array.isArray(data['tenders']) ? data['tenders'] : []\n return {\n refundedCents: Number(data['refundedCents'] ?? 0),\n tenders: tenders\n .filter((tender: any) => tender?.status !== 'failed')\n .map((tender: any) => ({ method: tender.method, amountCents: Number(tender.amountCents ?? 0) })),\n }\n })\n return computePosShiftReport({\n shift,\n sales,\n refunds,\n truncated: salesSnapshot.docs.length > POS_SHIFT_SALES_CEILING,\n })\n}\n\nfunction shiftOf(data: Record<string, any> | undefined): PosShift | null {\n if (!data) return null\n return {\n ...(data as PosShift),\n cashEvents: Array.isArray(data['cashEvents']) ? (data['cashEvents'] as PosCashEvent[]) : [],\n openingFloatCents: Number(data['openingFloatCents'] ?? 0),\n }\n}\n\ntype Outcome = { status: number; body: Record<string, unknown> }\n\nexport async function handlePosShift(\n deps: PosOpsDeps,\n req: PluginApiRequest,\n): Promise<Outcome> {\n if (req.method !== 'POST') return { status: 405, body: { error: 'Method not allowed' } }\n const body = posOpsBody(req)\n const gate = await authorizePosOps(deps, req, body['hostId'])\n if ('error' in gate) return { status: gate.status, body: { error: gate.error } }\n const staff = gate.staff\n const register = await readPosRegister(staff, body['registerId'])\n if ('error' in register) return { status: register.status, body: { error: register.error } }\n const registerId = register.ref.id\n const { cashierId } = await resolvePosCashier(deps, staff, registerId, body['cashierAssertion'])\n const action = String(body['action'] ?? '')\n const firestore = deps.firestore()\n const shifts = register.ref.collection('shifts')\n\n switch (action) {\n case 'current': {\n const openShiftId = String(register.data['openShiftId'] ?? '')\n if (!openShiftId) return { status: 200, body: { shift: null } }\n const shift = shiftOf((await shifts.doc(openShiftId).get()).data())\n return {\n status: 200,\n body: { shift: shift && shift.status === 'open' ? { id: openShiftId, ...shift } : null },\n }\n }\n\n case 'open': {\n const float = cents(body['openingFloatCents'] ?? 0)\n if (float == null) return { status: 400, body: { error: 'Enter the starting cash as an amount.' } }\n const shiftRef = shifts.doc(createResourceUid())\n const now = deps.now()\n const openedByName = await deps.memberName(cashierId)\n return await firestore.runTransaction(async (transaction) => {\n const fresh = await transaction.get(register.ref)\n const standing = String(fresh.get('openShiftId') ?? '')\n if (standing) {\n const standingShift = await transaction.get(shifts.doc(standing))\n if (standingShift.exists && standingShift.get('status') === 'open') {\n return {\n status: 409,\n body: {\n error: 'This register already has a shift open. Close it before opening another.',\n shiftId: standing,\n },\n }\n }\n }\n const shift: PosShift = {\n hostId: staff.hostId,\n registerId,\n status: 'open',\n openedBy: cashierId,\n openedByName,\n openedAtMs: now,\n openingFloatCents: float,\n cashEvents: [],\n }\n transaction.create(shiftRef, shift)\n transaction.update(register.ref, { openShiftId: shiftRef.id })\n return { status: 200, body: { shift: { id: shiftRef.id, ...shift } } }\n })\n }\n\n case 'cash-event': {\n const type = String(body['type'] ?? '') as PosCashEventType\n if (!CASH_EVENT_TYPES.has(type)) {\n return { status: 400, body: { error: 'Choose paid in, paid out or a safe drop.' } }\n }\n const amount = cents(body['amountCents'])\n if (!amount) return { status: 400, body: { error: 'Enter an amount above zero.' } }\n const reason = String(body['reason'] ?? '').trim().slice(0, 200)\n if (!reason && type !== 'drop') {\n return { status: 400, body: { error: 'Say what the cash was for.' } }\n }\n const eventId = posOpsCleanId(body['eventId']) || createResourceUid()\n const recorded: Outcome = await firestore.runTransaction(async (transaction) => {\n const fresh = await transaction.get(register.ref)\n const shiftId = String(fresh.get('openShiftId') ?? '')\n if (!shiftId) return { status: 409, body: { error: 'Open a shift first.' } }\n const shiftRef = shifts.doc(shiftId)\n const shift = shiftOf((await transaction.get(shiftRef)).data())\n if (!shift || shift.status !== 'open') {\n return { status: 409, body: { error: 'Open a shift first.' } }\n }\n // A retried tap carries the same id: recorded once, answered twice.\n if (shift.cashEvents.some((event) => event.id === eventId)) {\n return { status: 200, body: { shift: { id: shiftId, ...shift }, replayed: true } }\n }\n const event: PosCashEvent = {\n id: eventId,\n type,\n amountCents: amount,\n reason,\n by: cashierId,\n atMs: deps.now(),\n }\n const cashEvents = [...shift.cashEvents, event]\n transaction.update(shiftRef, { cashEvents })\n return { status: 200, body: { shift: { id: shiftId, ...shift, cashEvents } } }\n })\n // The drawer opens for the cash once it is on the record; a replayed\n // tap kicked it the first time.\n if (recorded.status === 200 && !recorded.body['replayed']) {\n await deps.printer.kickDrawer({\n hostId: staff.hostId,\n registerId,\n reason: type as Exclude<PosCashEventType, 'refund'>,\n causeId: eventId,\n createdBy: cashierId,\n })\n }\n return recorded\n }\n\n case 'print-report': {\n // An X report of the open shift, or the Z report a closed one froze, on\n // the register's receipt printer. `printed: false` tells the register\n // there is no cloud printer, and it prints through the browser instead.\n const requested = posOpsCleanId(body['shiftId']) || String(register.data['openShiftId'] ?? '')\n if (!requested) return { status: 409, body: { error: 'No shift is open on this register.' } }\n const shift = shiftOf((await shifts.doc(requested).get()).data())\n if (!shift) return { status: 404, body: { error: 'Unknown shift' } }\n const closed = shift.status === 'closed' && shift.report\n const report = closed\n ? (shift.report as PosShiftReport)\n : await readPosShiftReport(register.ref, staff.hostRef, requested, shift)\n const host = await staff.hostRef.get()\n const by = closed ? shift.closedByName : shift.openedByName\n const printed = await deps.printer.printReport({\n hostId: staff.hostId,\n registerId,\n shiftId: requested,\n report: posShiftPrintReport({\n title: closed ? 'Z REPORT' : 'X REPORT',\n storeName: String(host.get('displayName') ?? '') || 'Register',\n ...(register.data['name'] ? { registerName: String(register.data['name']) } : {}),\n ...(by ? { subtitle: `${closed ? 'Closed' : 'Opened'} by ${by}` } : {}),\n report,\n ...(closed ? { shift } : {}),\n }),\n createdBy: cashierId,\n attemptKey: posOpsCleanId(body['attemptKey']) || String(deps.now()),\n })\n return { status: 200, body: { printed: printed.jobIds.length > 0, jobIds: printed.jobIds } }\n }\n\n case 'x-report': {\n const shiftId = String(register.data['openShiftId'] ?? '')\n const shift = shiftId ? shiftOf((await shifts.doc(shiftId).get()).data()) : null\n if (!shift || shift.status !== 'open') {\n return { status: 409, body: { error: 'No shift is open on this register.' } }\n }\n const report = await readPosShiftReport(register.ref, staff.hostRef, shiftId, shift)\n return { status: 200, body: { shiftId, shift: { id: shiftId, ...shift }, report } }\n }\n\n case 'close': {\n const counted = cents(body['countedCashCents'])\n if (counted == null) return { status: 400, body: { error: 'Enter the cash you counted.' } }\n const note = String(body['note'] ?? '').trim().slice(0, 500)\n const expectedShiftId = posOpsCleanId(body['shiftId'])\n const closedByName = await deps.memberName(cashierId)\n return await firestore.runTransaction(async (transaction) => {\n const fresh = await transaction.get(register.ref)\n const shiftId = String(fresh.get('openShiftId') ?? '')\n if (!shiftId) return { status: 409, body: { error: 'No shift is open on this register.' } }\n // A stale tablet closing a shift another tablet already closed and\n // reopened must not close the new one with the old count.\n if (expectedShiftId && expectedShiftId !== shiftId) {\n return {\n status: 409,\n body: { error: 'That shift is already closed. Refresh to see the open one.' },\n }\n }\n const shiftRef = shifts.doc(shiftId)\n const shift = shiftOf((await transaction.get(shiftRef)).data())\n if (!shift || shift.status !== 'open') {\n return { status: 409, body: { error: 'No shift is open on this register.' } }\n }\n const report = await readPosShiftReport(\n register.ref,\n staff.hostRef,\n shiftId,\n shift,\n transaction,\n )\n const closed: Partial<PosShift> = {\n status: 'closed',\n closedBy: cashierId,\n closedByName,\n closedAtMs: deps.now(),\n countedCashCents: counted,\n expectedCashCents: report.expectedCashCents,\n varianceCents: posCashVarianceCents(counted, report.expectedCashCents),\n report,\n ...(note ? { closingNote: note } : {}),\n }\n transaction.update(shiftRef, closed)\n transaction.update(register.ref, { openShiftId: null })\n return { status: 200, body: { shift: { id: shiftId, ...shift, ...closed }, report } }\n })\n }\n\n default:\n return { status: 400, body: { error: 'Unknown action' } }\n }\n}\n\n/** Whether a register may take a sale or pay cash out, by the site's shift rule. */\nexport async function posShiftForSale(\n staff: Pick<PosOpsStaff, 'settings'>,\n registerRef: FirebaseFirestore.DocumentReference,\n): Promise<{ ok: true; shiftId: string | null } | { ok: false; error: string }> {\n const register = await registerRef.get()\n const shiftId = String(register.get('openShiftId') ?? '') || null\n if (!shiftId && staff.settings.requireOpenShift) {\n return { ok: false, error: 'Open a shift on this register before ringing a sale.' }\n }\n return { ok: true, shiftId }\n}\n\nexport function createPosShiftHandler(deps: () => PosOpsDeps = defaultPosOpsDeps): PluginApiHandler {\n return async (req, res) => {\n try {\n const outcome = await handlePosShift(deps(), req)\n return res.status(outcome.status).json(outcome.body)\n } catch (error) {\n console.error('[pos-shift] failed', error)\n return res.status(500).json({ error: 'The shift could not be updated' })\n }\n }\n}\n\nexport const posShiftHandler = createPosShiftHandler()\n"],"names":["createResourceUid","computePosShiftReport","posShiftPrintReport","posCashVarianceCents","authorizePosOps","defaultPosOpsDeps","posOpsBody","posOpsCleanId","readPosRegister","resolvePosCashier","POS_SHIFT_SALES_CEILING","POS_CASH_ENTRY_MAX_CENTS","CASH_EVENT_TYPES","Set","cents","value","number","Number","isFinite","rounded","Math","round","readPosShiftReport","registerRef","hostRef","shiftId","shift","transaction","salesQuery","collection","where","limit","returnsQuery","salesSnapshot","returnsSnapshot","Promise","all","get","sales","docs","slice","map","doc","data","refunds","tenders","Array","isArray","refundedCents","filter","tender","status","method","amountCents","truncated","length","shiftOf","cashEvents","openingFloatCents","handlePosShift","deps","req","body","error","gate","staff","register","registerId","ref","id","cashierId","action","String","firestore","shifts","openShiftId","float","shiftRef","now","openedByName","memberName","runTransaction","fresh","standing","standingShift","exists","hostId","openedBy","openedAtMs","create","update","type","has","amount","reason","trim","eventId","recorded","some","event","replayed","by","atMs","printer","kickDrawer","causeId","createdBy","host","requested","closed","report","closedByName","printed","printReport","title","storeName","registerName","subtitle","attemptKey","jobIds","counted","note","expectedShiftId","closedBy","closedAtMs","countedCashCents","expectedCashCents","varianceCents","closingNote","posShiftForSale","settings","requireOpenShift","ok","createPosShiftHandler","res","outcome","json","console","posShiftHandler"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { PluginApiHandler, PluginApiRequest } from '@aglyn/aglyn/server';
18
+ import { type PosOpsDeps } from './pos-ops-gate';
19
+ type Outcome = {
20
+ status: number;
21
+ body: Record<string, unknown>;
22
+ };
23
+ export declare function handlePosStaffPin(deps: PosOpsDeps, req: PluginApiRequest): Promise<Outcome>;
24
+ export declare function createPosStaffPinHandler(deps?: () => PosOpsDeps): PluginApiHandler;
25
+ export declare const posStaffPinHandler: PluginApiHandler;
26
+ export {};