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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/package.json +13 -13
  2. package/src/index.d.ts +0 -1
  3. package/src/index.js +0 -1
  4. package/src/index.js.map +1 -1
  5. package/src/lib/barcode/barcode-decode.d.ts +71 -0
  6. package/src/lib/barcode/barcode-decode.js +498 -0
  7. package/src/lib/barcode/barcode-decode.js.map +1 -0
  8. package/src/lib/barcode/barcode-encode.d.ts +44 -0
  9. package/src/lib/barcode/barcode-encode.js +138 -0
  10. package/src/lib/barcode/barcode-encode.js.map +1 -0
  11. package/src/lib/barcode/barcode-scanner.component.d.ts +23 -0
  12. package/src/lib/barcode/barcode-scanner.component.js +260 -0
  13. package/src/lib/barcode/barcode-scanner.component.js.map +1 -0
  14. package/src/lib/barcode/scan-button.component.d.ts +10 -0
  15. package/src/lib/barcode/scan-button.component.js +62 -0
  16. package/src/lib/barcode/scan-button.component.js.map +1 -0
  17. package/src/lib/barcode/scanner-wedge.d.ts +35 -0
  18. package/src/lib/barcode/scanner-wedge.js +108 -0
  19. package/src/lib/barcode/scanner-wedge.js.map +1 -0
  20. package/src/lib/components/account.js +10 -1
  21. package/src/lib/components/account.js.map +1 -1
  22. package/src/lib/components/cart-extras.d.ts +45 -0
  23. package/src/lib/components/cart-extras.js +127 -0
  24. package/src/lib/components/cart-extras.js.map +1 -0
  25. package/src/lib/components/cart.js +82 -15
  26. package/src/lib/components/cart.js.map +1 -1
  27. package/src/lib/components/checkout-return-notice.d.ts +26 -0
  28. package/src/lib/components/checkout-return-notice.js +48 -0
  29. package/src/lib/components/checkout-return-notice.js.map +1 -0
  30. package/src/lib/components/commerce-console-page.js +124 -0
  31. package/src/lib/components/commerce-console-page.js.map +1 -1
  32. package/src/lib/components/commerce-console-sections.d.ts +1 -1
  33. package/src/lib/components/commerce-console-sections.js +4 -0
  34. package/src/lib/components/commerce-console-sections.js.map +1 -1
  35. package/src/lib/components/console/bulk-fulfill.d.ts +44 -0
  36. package/src/lib/components/console/bulk-fulfill.js +84 -0
  37. package/src/lib/components/console/bulk-fulfill.js.map +1 -0
  38. package/src/lib/components/console/customer-notifications-card.component.d.ts +19 -0
  39. package/src/lib/components/console/customer-notifications-card.component.js +149 -0
  40. package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
  41. package/src/lib/components/console/host-orders-card.component.js +84 -5
  42. package/src/lib/components/console/host-orders-card.component.js.map +1 -1
  43. package/src/lib/components/console/locations-card.component.js +164 -57
  44. package/src/lib/components/console/locations-card.component.js.map +1 -1
  45. package/src/lib/components/console/order-detail-dialog.component.js +209 -61
  46. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  47. package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
  48. package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
  49. package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
  50. package/src/lib/components/console/order-invoice.component.d.ts +33 -0
  51. package/src/lib/components/console/order-invoice.component.js +81 -0
  52. package/src/lib/components/console/order-invoice.component.js.map +1 -0
  53. package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
  54. package/src/lib/components/console/order-receipt-resend.component.js +203 -0
  55. package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
  56. package/src/lib/components/console/order-returns.component.d.ts +36 -0
  57. package/src/lib/components/console/order-returns.component.js +142 -0
  58. package/src/lib/components/console/order-returns.component.js.map +1 -0
  59. package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
  60. package/src/lib/components/console/order-shipping-actions.component.js +149 -0
  61. package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
  62. package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
  63. package/src/lib/components/console/order-webhooks-card.component.js +623 -0
  64. package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
  65. package/src/lib/components/console/order-zones.d.ts +155 -0
  66. package/src/lib/components/console/order-zones.js +40 -0
  67. package/src/lib/components/console/order-zones.js.map +1 -0
  68. package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
  69. package/src/lib/components/console/payment-methods-card.component.js +395 -0
  70. package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
  71. package/src/lib/components/console/pos/pos-api.d.ts +124 -0
  72. package/src/lib/components/console/pos/pos-api.js +101 -0
  73. package/src/lib/components/console/pos/pos-api.js.map +1 -0
  74. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
  75. package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
  76. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
  77. package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
  78. package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
  79. package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
  80. package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
  81. package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
  82. package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
  83. package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
  84. package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
  85. package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
  86. package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
  87. package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
  88. package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
  89. package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
  90. package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
  91. package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
  92. package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
  93. package/src/lib/components/console/pos/use-pos-display.js +161 -0
  94. package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
  95. package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
  96. package/src/lib/components/console/pos-devices-card.component.js +546 -0
  97. package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
  98. package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
  99. package/src/lib/components/console/pos-display/brand-screen.js +85 -0
  100. package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
  101. package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
  102. package/src/lib/components/console/pos-display/cart-screen.js +166 -0
  103. package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
  104. package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
  105. package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
  106. package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
  107. package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
  108. package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
  109. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
  110. package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
  111. package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
  112. package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
  113. package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
  114. package/src/lib/components/console/pos-display/tip-screen.js +211 -0
  115. package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
  116. package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
  117. package/src/lib/components/console/pos-display-page.component.js +407 -0
  118. package/src/lib/components/console/pos-display-page.component.js.map +1 -0
  119. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
  120. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
  121. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
  122. package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
  123. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
  124. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
  125. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
  126. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
  127. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
  128. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
  129. package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
  130. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
  131. package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
  132. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
  133. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
  134. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
  135. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
  136. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
  137. package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
  138. package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
  139. package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
  140. package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
  141. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
  142. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
  143. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
  144. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
  145. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
  146. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
  147. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
  148. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
  149. package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
  150. package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
  151. package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
  152. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
  153. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
  154. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
  155. package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
  156. package/src/lib/components/console/pos-ops/register-ops.js +28 -0
  157. package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
  158. package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
  159. package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
  160. package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
  161. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
  162. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
  163. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
  164. package/src/lib/components/console/pos-page.component.d.ts +13 -5
  165. package/src/lib/components/console/pos-page.component.js +729 -657
  166. package/src/lib/components/console/pos-page.component.js.map +1 -1
  167. package/src/lib/components/console/product-editor-dialog.component.js +51 -7
  168. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  169. package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
  170. package/src/lib/components/console/product-labels-dialog.component.js +197 -0
  171. package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
  172. package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
  173. package/src/lib/components/console/product-register-fields.component.js +241 -0
  174. package/src/lib/components/console/product-register-fields.component.js.map +1 -0
  175. package/src/lib/components/console/product-zones.d.ts +58 -2
  176. package/src/lib/components/console/product-zones.js +10 -2
  177. package/src/lib/components/console/product-zones.js.map +1 -1
  178. package/src/lib/components/console/products-hub-card.component.js +51 -11
  179. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  180. package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
  181. package/src/lib/components/console/register-hardware-card.component.js +826 -0
  182. package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
  183. package/src/lib/components/console/registers-card.component.js +24 -5
  184. package/src/lib/components/console/registers-card.component.js.map +1 -1
  185. package/src/lib/components/console/return-actions.d.ts +38 -0
  186. package/src/lib/components/console/return-actions.js +76 -0
  187. package/src/lib/components/console/return-actions.js.map +1 -0
  188. package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
  189. package/src/lib/components/console/return-detail-dialog.component.js +718 -0
  190. package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
  191. package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
  192. package/src/lib/components/console/return-settings-card.component.js +195 -0
  193. package/src/lib/components/console/return-settings-card.component.js.map +1 -0
  194. package/src/lib/components/console/return-zones.d.ts +87 -0
  195. package/src/lib/components/console/return-zones.js +31 -0
  196. package/src/lib/components/console/return-zones.js.map +1 -0
  197. package/src/lib/components/console/returns-card.component.d.ts +45 -0
  198. package/src/lib/components/console/returns-card.component.js +159 -0
  199. package/src/lib/components/console/returns-card.component.js.map +1 -0
  200. package/src/lib/components/console/shipping-settings-card.component.js +161 -5
  201. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
  202. package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
  203. package/src/lib/components/console/shippingeasy-card.component.js +378 -0
  204. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
  205. package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
  206. package/src/lib/components/console/shipstation-card.component.js +345 -0
  207. package/src/lib/components/console/shipstation-card.component.js.map +1 -0
  208. package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
  209. package/src/lib/components/console/start-return-dialog.component.js +243 -0
  210. package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
  211. package/src/lib/components/console/stock-movements-card.component.js +2 -1
  212. package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
  213. package/src/lib/components/console/store-settings-card.component.js +2 -66
  214. package/src/lib/components/console/store-settings-card.component.js.map +1 -1
  215. package/src/lib/components/console/store-zones.d.ts +42 -0
  216. package/src/lib/components/console/store-zones.js +39 -0
  217. package/src/lib/components/console/store-zones.js.map +1 -0
  218. package/src/lib/components/order-status.d.ts +36 -0
  219. package/src/lib/components/order-status.js +502 -0
  220. package/src/lib/components/order-status.js.map +1 -0
  221. package/src/lib/components/product-detail.js +44 -2
  222. package/src/lib/components/product-detail.js.map +1 -1
  223. package/src/lib/components/return-request.d.ts +32 -0
  224. package/src/lib/components/return-request.js +576 -0
  225. package/src/lib/components/return-request.js.map +1 -0
  226. package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
  227. package/src/lib/components/storefront-payment-appearance.js +114 -0
  228. package/src/lib/components/storefront-payment-appearance.js.map +1 -0
  229. package/src/lib/components/storefront-payment-element.d.ts +57 -1
  230. package/src/lib/components/storefront-payment-element.js +332 -33
  231. package/src/lib/components/storefront-payment-element.js.map +1 -1
  232. package/src/lib/constants/order-status.d.ts +22 -0
  233. package/src/lib/constants/order-status.js +22 -0
  234. package/src/lib/constants/order-status.js.map +1 -0
  235. package/src/lib/constants/return-request.d.ts +27 -0
  236. package/src/lib/constants/return-request.js +32 -0
  237. package/src/lib/constants/return-request.js.map +1 -0
  238. package/src/lib/constants/stock-movement-query.js +2 -1
  239. package/src/lib/constants/stock-movement-query.js.map +1 -1
  240. package/src/lib/declarations.console-server.js +9 -0
  241. package/src/lib/declarations.console-server.js.map +1 -1
  242. package/src/lib/declarations.server.d.ts +2 -1
  243. package/src/lib/declarations.server.js +47 -1
  244. package/src/lib/declarations.server.js.map +1 -1
  245. package/src/lib/model/buyer-notifications.d.ts +59 -0
  246. package/src/lib/model/buyer-notifications.js +97 -0
  247. package/src/lib/model/buyer-notifications.js.map +1 -0
  248. package/src/lib/model/commerce-orders.d.ts +127 -1
  249. package/src/lib/model/commerce-orders.js +24 -15
  250. package/src/lib/model/commerce-orders.js.map +1 -1
  251. package/src/lib/model/commerce-payment-methods.d.ts +146 -0
  252. package/src/lib/model/commerce-payment-methods.js +247 -0
  253. package/src/lib/model/commerce-payment-methods.js.map +1 -0
  254. package/src/lib/model/commerce-pos-ops.d.ts +437 -0
  255. package/src/lib/model/commerce-pos-ops.js +721 -0
  256. package/src/lib/model/commerce-pos-ops.js.map +1 -0
  257. package/src/lib/model/commerce-pos.d.ts +263 -0
  258. package/src/lib/model/commerce-pos.js +375 -0
  259. package/src/lib/model/commerce-pos.js.map +1 -0
  260. package/src/lib/model/commerce-printers.d.ts +211 -0
  261. package/src/lib/model/commerce-printers.js +181 -0
  262. package/src/lib/model/commerce-printers.js.map +1 -0
  263. package/src/lib/model/commerce-receipt.d.ts +97 -0
  264. package/src/lib/model/commerce-receipt.js +180 -0
  265. package/src/lib/model/commerce-receipt.js.map +1 -0
  266. package/src/lib/model/commerce-returns.d.ts +207 -0
  267. package/src/lib/model/commerce-returns.js +300 -0
  268. package/src/lib/model/commerce-returns.js.map +1 -0
  269. package/src/lib/model/commerce-shipping.d.ts +44 -1
  270. package/src/lib/model/commerce-shipping.js +53 -9
  271. package/src/lib/model/commerce-shipping.js.map +1 -1
  272. package/src/lib/model/commerce-tax-engine.d.ts +90 -0
  273. package/src/lib/model/commerce-tax-engine.js +129 -0
  274. package/src/lib/model/commerce-tax-engine.js.map +1 -0
  275. package/src/lib/model/commerce.d.ts +88 -2
  276. package/src/lib/model/commerce.js +89 -1
  277. package/src/lib/model/commerce.js.map +1 -1
  278. package/src/lib/model/index.d.ts +15 -0
  279. package/src/lib/model/index.js +15 -0
  280. package/src/lib/model/index.js.map +1 -1
  281. package/src/lib/model/order-events.d.ts +154 -0
  282. package/src/lib/model/order-events.js +153 -0
  283. package/src/lib/model/order-events.js.map +1 -0
  284. package/src/lib/model/order-fulfillment.d.ts +117 -0
  285. package/src/lib/model/order-fulfillment.js +217 -0
  286. package/src/lib/model/order-fulfillment.js.map +1 -0
  287. package/src/lib/model/order-history.d.ts +58 -0
  288. package/src/lib/model/order-history.js +22 -0
  289. package/src/lib/model/order-history.js.map +1 -0
  290. package/src/lib/model/order-list-fields.d.ts +9 -1
  291. package/src/lib/model/order-list-fields.js +7 -1
  292. package/src/lib/model/order-list-fields.js.map +1 -1
  293. package/src/lib/model/order-shipping-export.d.ts +91 -0
  294. package/src/lib/model/order-shipping-export.js +192 -0
  295. package/src/lib/model/order-shipping-export.js.map +1 -0
  296. package/src/lib/model/order-status-view.d.ts +103 -0
  297. package/src/lib/model/order-status-view.js +156 -0
  298. package/src/lib/model/order-status-view.js.map +1 -0
  299. package/src/lib/model/order-webhooks.d.ts +142 -0
  300. package/src/lib/model/order-webhooks.js +91 -0
  301. package/src/lib/model/order-webhooks.js.map +1 -0
  302. package/src/lib/model/product-channel.d.ts +56 -0
  303. package/src/lib/model/product-channel.js +86 -0
  304. package/src/lib/model/product-channel.js.map +1 -0
  305. package/src/lib/model/product-modifiers.d.ts +80 -0
  306. package/src/lib/model/product-modifiers.js +140 -0
  307. package/src/lib/model/product-modifiers.js.map +1 -0
  308. package/src/lib/model/shippingeasy.d.ts +94 -0
  309. package/src/lib/model/shippingeasy.js +267 -0
  310. package/src/lib/model/shippingeasy.js.map +1 -0
  311. package/src/lib/model/shipstation.d.ts +125 -0
  312. package/src/lib/model/shipstation.js +399 -0
  313. package/src/lib/model/shipstation.js.map +1 -0
  314. package/src/lib/model/smart-collection-reads.d.ts +32 -0
  315. package/src/lib/model/smart-collection-reads.js +63 -0
  316. package/src/lib/model/smart-collection-reads.js.map +1 -0
  317. package/src/lib/model/tracking-url.d.ts +74 -0
  318. package/src/lib/model/tracking-url.js +159 -0
  319. package/src/lib/model/tracking-url.js.map +1 -0
  320. package/src/lib/plugin-config.d.ts +13 -0
  321. package/src/lib/plugin-config.js +77 -5
  322. package/src/lib/plugin-config.js.map +1 -1
  323. package/src/lib/plugin.js +23 -0
  324. package/src/lib/plugin.js.map +1 -1
  325. package/src/lib/pos-ops-config.d.ts +39 -0
  326. package/src/lib/pos-ops-config.js +88 -0
  327. package/src/lib/pos-ops-config.js.map +1 -0
  328. package/src/lib/printing/print-document.d.ts +106 -0
  329. package/src/lib/printing/print-document.js +464 -0
  330. package/src/lib/printing/print-document.js.map +1 -0
  331. package/src/lib/printing/product-labels.d.ts +58 -0
  332. package/src/lib/printing/product-labels.js +116 -0
  333. package/src/lib/printing/product-labels.js.map +1 -0
  334. package/src/lib/printing/render-epson.d.ts +57 -0
  335. package/src/lib/printing/render-epson.js +135 -0
  336. package/src/lib/printing/render-epson.js.map +1 -0
  337. package/src/lib/printing/render-star.d.ts +45 -0
  338. package/src/lib/printing/render-star.js +100 -0
  339. package/src/lib/printing/render-star.js.map +1 -0
  340. package/src/lib/printing/render-text.d.ts +25 -0
  341. package/src/lib/printing/render-text.js +53 -0
  342. package/src/lib/printing/render-text.js.map +1 -0
  343. package/src/lib/server/api-v1/openapi.js +27 -4
  344. package/src/lib/server/api-v1/openapi.js.map +1 -1
  345. package/src/lib/server/api-v1/order-view.d.ts +67 -0
  346. package/src/lib/server/api-v1/order-view.js +120 -0
  347. package/src/lib/server/api-v1/order-view.js.map +1 -0
  348. package/src/lib/server/api-v1/orders-and-products.js +58 -65
  349. package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
  350. package/src/lib/server/billing-webhook.js +135 -28
  351. package/src/lib/server/billing-webhook.js.map +1 -1
  352. package/src/lib/server/cancel-order.js +29 -0
  353. package/src/lib/server/cancel-order.js.map +1 -1
  354. package/src/lib/server/carrier-rates-availability.d.ts +26 -0
  355. package/src/lib/server/carrier-rates-availability.js +76 -0
  356. package/src/lib/server/carrier-rates-availability.js.map +1 -0
  357. package/src/lib/server/carrier-shipping.d.ts +84 -0
  358. package/src/lib/server/carrier-shipping.js +135 -0
  359. package/src/lib/server/carrier-shipping.js.map +1 -0
  360. package/src/lib/server/cart-checkout.d.ts +2 -0
  361. package/src/lib/server/cart-checkout.js +226 -22
  362. package/src/lib/server/cart-checkout.js.map +1 -1
  363. package/src/lib/server/checkout-extras.d.ts +64 -0
  364. package/src/lib/server/checkout-extras.js +157 -0
  365. package/src/lib/server/checkout-extras.js.map +1 -0
  366. package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
  367. package/src/lib/server/checkout-status.js +111 -0
  368. package/src/lib/server/checkout-status.js.map +1 -0
  369. package/src/lib/server/checkout.js +86 -9
  370. package/src/lib/server/checkout.js.map +1 -1
  371. package/src/lib/server/draft-order.js +34 -5
  372. package/src/lib/server/draft-order.js.map +1 -1
  373. package/src/lib/server/fulfill-order.d.ts +127 -10
  374. package/src/lib/server/fulfill-order.js +451 -49
  375. package/src/lib/server/fulfill-order.js.map +1 -1
  376. package/src/lib/server/legacy-feed.d.ts +28 -0
  377. package/src/lib/server/legacy-feed.js +52 -0
  378. package/src/lib/server/legacy-feed.js.map +1 -0
  379. package/src/lib/server/native-checkout.d.ts +34 -15
  380. package/src/lib/server/native-checkout.js +32 -17
  381. package/src/lib/server/native-checkout.js.map +1 -1
  382. package/src/lib/server/order-event-host-emit.d.ts +23 -0
  383. package/src/lib/server/order-event-host-emit.js +30 -0
  384. package/src/lib/server/order-event-host-emit.js.map +1 -0
  385. package/src/lib/server/order-event-triggers.d.ts +37 -0
  386. package/src/lib/server/order-event-triggers.js +119 -0
  387. package/src/lib/server/order-event-triggers.js.map +1 -0
  388. package/src/lib/server/order-events.d.ts +62 -0
  389. package/src/lib/server/order-events.js +109 -0
  390. package/src/lib/server/order-events.js.map +1 -0
  391. package/src/lib/server/order-history.d.ts +23 -0
  392. package/src/lib/server/order-history.js +65 -0
  393. package/src/lib/server/order-history.js.map +1 -0
  394. package/src/lib/server/order-notifications.d.ts +185 -0
  395. package/src/lib/server/order-notifications.js +567 -0
  396. package/src/lib/server/order-notifications.js.map +1 -0
  397. package/src/lib/server/order-receipt-send.d.ts +39 -0
  398. package/src/lib/server/order-receipt-send.js +151 -0
  399. package/src/lib/server/order-receipt-send.js.map +1 -0
  400. package/src/lib/server/order-status-token.d.ts +31 -0
  401. package/src/lib/server/order-status-token.js +75 -0
  402. package/src/lib/server/order-status-token.js.map +1 -0
  403. package/src/lib/server/order-status.d.ts +58 -0
  404. package/src/lib/server/order-status.js +141 -0
  405. package/src/lib/server/order-status.js.map +1 -0
  406. package/src/lib/server/order-webhooks.d.ts +108 -0
  407. package/src/lib/server/order-webhooks.js +622 -0
  408. package/src/lib/server/order-webhooks.js.map +1 -0
  409. package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
  410. package/src/lib/server/orders-shipping-prepare.js +121 -0
  411. package/src/lib/server/orders-shipping-prepare.js.map +1 -0
  412. package/src/lib/server/payment-method-domains.d.ts +209 -0
  413. package/src/lib/server/payment-method-domains.js +444 -0
  414. package/src/lib/server/payment-method-domains.js.map +1 -0
  415. package/src/lib/server/payment-methods.d.ts +77 -0
  416. package/src/lib/server/payment-methods.js +284 -0
  417. package/src/lib/server/payment-methods.js.map +1 -0
  418. package/src/lib/server/pos-auth.d.ts +50 -0
  419. package/src/lib/server/pos-auth.js +121 -0
  420. package/src/lib/server/pos-auth.js.map +1 -0
  421. package/src/lib/server/pos-customer.d.ts +49 -0
  422. package/src/lib/server/pos-customer.js +257 -0
  423. package/src/lib/server/pos-customer.js.map +1 -0
  424. package/src/lib/server/pos-display.d.ts +57 -0
  425. package/src/lib/server/pos-display.js +419 -0
  426. package/src/lib/server/pos-display.js.map +1 -0
  427. package/src/lib/server/pos-fee-month.d.ts +34 -0
  428. package/src/lib/server/pos-fee-month.js +36 -0
  429. package/src/lib/server/pos-fee-month.js.map +1 -0
  430. package/src/lib/server/pos-ops-gate.d.ts +161 -0
  431. package/src/lib/server/pos-ops-gate.js +295 -0
  432. package/src/lib/server/pos-ops-gate.js.map +1 -0
  433. package/src/lib/server/pos-ops-routes.d.ts +22 -0
  434. package/src/lib/server/pos-ops-routes.js +36 -0
  435. package/src/lib/server/pos-ops-routes.js.map +1 -0
  436. package/src/lib/server/pos-order.d.ts +1 -18
  437. package/src/lib/server/pos-order.js +222 -42
  438. package/src/lib/server/pos-order.js.map +1 -1
  439. package/src/lib/server/pos-payment.d.ts +39 -0
  440. package/src/lib/server/pos-payment.js +922 -0
  441. package/src/lib/server/pos-payment.js.map +1 -0
  442. package/src/lib/server/pos-print.d.ts +82 -0
  443. package/src/lib/server/pos-print.js +193 -0
  444. package/src/lib/server/pos-print.js.map +1 -0
  445. package/src/lib/server/pos-readers.d.ts +27 -0
  446. package/src/lib/server/pos-readers.js +276 -0
  447. package/src/lib/server/pos-readers.js.map +1 -0
  448. package/src/lib/server/pos-refund-authority.d.ts +60 -0
  449. package/src/lib/server/pos-refund-authority.js +72 -0
  450. package/src/lib/server/pos-refund-authority.js.map +1 -0
  451. package/src/lib/server/pos-return.d.ts +58 -0
  452. package/src/lib/server/pos-return.js +891 -0
  453. package/src/lib/server/pos-return.js.map +1 -0
  454. package/src/lib/server/pos-sale-stamp.d.ts +66 -0
  455. package/src/lib/server/pos-sale-stamp.js +84 -0
  456. package/src/lib/server/pos-sale-stamp.js.map +1 -0
  457. package/src/lib/server/pos-sale.d.ts +170 -0
  458. package/src/lib/server/pos-sale.js +461 -0
  459. package/src/lib/server/pos-sale.js.map +1 -0
  460. package/src/lib/server/pos-shift.d.ts +45 -0
  461. package/src/lib/server/pos-shift.js +484 -0
  462. package/src/lib/server/pos-shift.js.map +1 -0
  463. package/src/lib/server/pos-staff-pin.d.ts +26 -0
  464. package/src/lib/server/pos-staff-pin.js +339 -0
  465. package/src/lib/server/pos-staff-pin.js.map +1 -0
  466. package/src/lib/server/pos-stripe.d.ts +91 -0
  467. package/src/lib/server/pos-stripe.js +129 -0
  468. package/src/lib/server/pos-stripe.js.map +1 -0
  469. package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
  470. package/src/lib/server/pos-terminal-connection-token.js +166 -0
  471. package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
  472. package/src/lib/server/pos-terminal.d.ts +218 -0
  473. package/src/lib/server/pos-terminal.js +1014 -0
  474. package/src/lib/server/pos-terminal.js.map +1 -0
  475. package/src/lib/server/print-queue.d.ts +124 -0
  476. package/src/lib/server/print-queue.js +301 -0
  477. package/src/lib/server/print-queue.js.map +1 -0
  478. package/src/lib/server/printer-poll.d.ts +75 -0
  479. package/src/lib/server/printer-poll.js +325 -0
  480. package/src/lib/server/printer-poll.js.map +1 -0
  481. package/src/lib/server/printer-secret.d.ts +39 -0
  482. package/src/lib/server/printer-secret.js +56 -0
  483. package/src/lib/server/printer-secret.js.map +1 -0
  484. package/src/lib/server/printers.d.ts +114 -0
  485. package/src/lib/server/printers.js +546 -0
  486. package/src/lib/server/printers.js.map +1 -0
  487. package/src/lib/server/product-ai-capability.d.ts +42 -0
  488. package/src/lib/server/product-ai-capability.js +159 -0
  489. package/src/lib/server/product-ai-capability.js.map +1 -0
  490. package/src/lib/server/product-catalog.d.ts +42 -0
  491. package/src/lib/server/product-catalog.js +305 -0
  492. package/src/lib/server/product-catalog.js.map +1 -0
  493. package/src/lib/server/product-drafts.d.ts +119 -0
  494. package/src/lib/server/product-drafts.js +384 -0
  495. package/src/lib/server/product-drafts.js.map +1 -0
  496. package/src/lib/server/refund.js +110 -45
  497. package/src/lib/server/refund.js.map +1 -1
  498. package/src/lib/server/reserve.js +2 -0
  499. package/src/lib/server/reserve.js.map +1 -1
  500. package/src/lib/server/return-status-action.d.ts +37 -0
  501. package/src/lib/server/return-status-action.js +57 -0
  502. package/src/lib/server/return-status-action.js.map +1 -0
  503. package/src/lib/server/returns.d.ts +119 -0
  504. package/src/lib/server/returns.js +938 -0
  505. package/src/lib/server/returns.js.map +1 -0
  506. package/src/lib/server/shipment-records.d.ts +36 -0
  507. package/src/lib/server/shipment-records.js +289 -0
  508. package/src/lib/server/shipment-records.js.map +1 -0
  509. package/src/lib/server/shipping-connector-gates.d.ts +40 -0
  510. package/src/lib/server/shipping-connector-gates.js +97 -0
  511. package/src/lib/server/shipping-connector-gates.js.map +1 -0
  512. package/src/lib/server/shipping-connectors.d.ts +29 -0
  513. package/src/lib/server/shipping-connectors.js +236 -0
  514. package/src/lib/server/shipping-connectors.js.map +1 -0
  515. package/src/lib/server/shippingeasy.d.ts +238 -0
  516. package/src/lib/server/shippingeasy.js +787 -0
  517. package/src/lib/server/shippingeasy.js.map +1 -0
  518. package/src/lib/server/shipstation.d.ts +129 -0
  519. package/src/lib/server/shipstation.js +483 -0
  520. package/src/lib/server/shipstation.js.map +1 -0
  521. package/src/lib/server/site-page-resolver.d.ts +5 -0
  522. package/src/lib/server/site-page-resolver.js +156 -1
  523. package/src/lib/server/site-page-resolver.js.map +1 -1
  524. package/src/lib/server/stock-levels.d.ts +21 -0
  525. package/src/lib/server/stock-levels.js +263 -0
  526. package/src/lib/server/stock-levels.js.map +1 -0
  527. package/src/lib/server/stripe-refund.d.ts +47 -0
  528. package/src/lib/server/stripe-refund.js +87 -0
  529. package/src/lib/server/stripe-refund.js.map +1 -0
  530. package/src/lib/server/supplier-update.js +46 -5
  531. package/src/lib/server/supplier-update.js.map +1 -1
  532. package/src/lib/server/tax-engine-quote.d.ts +47 -0
  533. package/src/lib/server/tax-engine-quote.js +105 -0
  534. package/src/lib/server/tax-engine-quote.js.map +1 -0
  535. package/src/lib/server.js +146 -2
  536. package/src/lib/server.js.map +1 -1
  537. package/src/lib/site.js +12 -0
  538. package/src/lib/site.js.map +1 -1
  539. package/src/lib/subprocessors.d.ts +26 -0
  540. package/src/lib/subprocessors.js +50 -0
  541. package/src/lib/subprocessors.js.map +1 -0
  542. package/src/lib/tenant-emails.js +461 -3
  543. package/src/lib/tenant-emails.js.map +1 -1
  544. package/src/lib/testing/fake-firestore.d.ts +45 -0
  545. package/src/lib/testing/fake-firestore.js +189 -0
  546. package/src/lib/testing/fake-firestore.js.map +1 -0
  547. package/src/lib/testing/memory-firestore.d.ts +123 -0
  548. package/src/lib/testing/memory-firestore.js +274 -0
  549. package/src/lib/testing/memory-firestore.js.map +1 -0
  550. package/src/lib/testing/pos-ops-harness.d.ts +50 -0
  551. package/src/lib/testing/pos-ops-harness.js +184 -0
  552. package/src/lib/testing/pos-ops-harness.js.map +1 -0
  553. package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
  554. package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
  555. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
  556. package/src/lib/transfer/records-transfer.d.ts +11 -1
  557. package/src/lib/transfer/records-transfer.js +127 -5
  558. package/src/lib/transfer/records-transfer.js.map +1 -1
  559. package/src/lib/transfer/records.server.d.ts +9 -2
  560. package/src/lib/transfer/records.server.js +58 -7
  561. package/src/lib/transfer/records.server.js.map +1 -1
  562. package/src/lib/transfer/register-transfer-resources.js +40 -1
  563. package/src/lib/transfer/register-transfer-resources.js.map +1 -1
  564. package/src/lib/transfer/register-transfer-ui.js +4 -1
  565. package/src/lib/transfer/register-transfer-ui.js.map +1 -1
  566. package/src/lib/transfer/shipping-presets.d.ts +23 -0
  567. package/src/lib/transfer/shipping-presets.js +156 -0
  568. package/src/lib/transfer/shipping-presets.js.map +1 -0
  569. package/src/lib/transfer/tracking-transfer.d.ts +101 -0
  570. package/src/lib/transfer/tracking-transfer.js +546 -0
  571. package/src/lib/transfer/tracking-transfer.js.map +1 -0
  572. package/src/lib/transfer/tracking.server.d.ts +37 -0
  573. package/src/lib/transfer/tracking.server.js +393 -0
  574. package/src/lib/transfer/tracking.server.js.map +1 -0
  575. package/src/lib/transfer/transfer-keys.d.ts +2 -1
  576. package/src/lib/transfer/transfer-keys.js +6 -2
  577. package/src/lib/transfer/transfer-keys.js.map +1 -1
  578. package/src/lib/utils/code128.d.ts +37 -0
  579. package/src/lib/utils/code128.js +199 -0
  580. package/src/lib/utils/code128.js.map +1 -0
  581. package/src/lib/utils/order-invoice.d.ts +55 -0
  582. package/src/lib/utils/order-invoice.js +127 -0
  583. package/src/lib/utils/order-invoice.js.map +1 -0
  584. package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
  585. package/src/lib/utils/use-checkout-return-notice.js +78 -0
  586. package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
  587. package/src/lib/utils/use-storefront-purchase-event.js +4 -0
  588. package/src/lib/utils/use-storefront-purchase-event.js.map +1 -1
  589. package/src/lib/server/feed.js +0 -69
  590. package/src/lib/server/feed.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-payment.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 {\n consumeRateLimit,\n firebaseAdmin,\n getPluginConfig,\n} from '@aglyn/tenant-data-admin'\nimport { buildRoute, Route, type PluginApiHandler } from '@aglyn/aglyn/server'\nimport recordCapturedContact from '@aglyn/aglyn/plugin-manager/record-captured-contact'\nimport { pluginSmsAvailable } from '@aglyn/aglyn/plugin-manager/plugin-sms-messaging'\nimport { finishPosDisplayReceipt } from './pos-display'\nimport * as CommerceModel from '../model'\nimport { posRegisterSettings } from '../plugin-config'\nimport {\n authorizePosStaff,\n posIdempotencyKey,\n posQueryBody,\n posRequestBody,\n type PosStaff,\n} from './pos-auth'\nimport {\n applyPosPayment,\n deliverChosenPosReceipt,\n posPaymentId,\n posSaleSummary,\n readPosSale,\n releasePosSaleDiscount,\n type PosLiftedOrder,\n type PosPaymentOutcome,\n} from './pos-sale'\nimport { posPaymentCashierId } from './pos-sale-stamp'\nimport { printPosSaleReceipt } from './pos-print'\nimport {\n POS_CURRENCY,\n posStripe,\n posStripeErrorMessage,\n posStripeTestMode,\n posTerminalAvailable,\n} from './pos-stripe'\nimport {\n cancelPosCardPayment,\n createCardPresentIntent,\n refreshPosCardPayment,\n retryCardPresentPayment,\n simulatePosReaderTap,\n startCardKeyedPayment,\n startCardLinkPayment,\n startCardPresentPayment,\n} from './pos-terminal'\n\n/**\n * `POST /api/commerce/pos-payment` (AGL-3607): every tender against an OPEN\n * register sale, one `action` per request.\n *\n * The sale was priced by `pos-order.ts` (`payment: 'open'`); nothing here\n * re-prices it or lets the register name a total. Each payment-starting action\n * needs the register's `Idempotency-Key`, from which the payment's id is\n * derived: pressing a tender twice, or retrying after a lost response, finds\n * the payment the first press started instead of taking the money twice.\n */\nexport const posPaymentHandler: PluginApiHandler = async (req, res) => {\n // `sale` is a read and may be a GET, so a register re-reading its sale does\n // not spend the console's write budget; everything else moves money.\n const body = req.method === 'GET' ? posQueryBody(req) : posRequestBody(req)\n if (\n !(\n req.method === 'POST' ||\n (req.method === 'GET' && (body['action'] === 'sale' || body['action'] === 'context'))\n )\n ) {\n return res.status(405).json({ error: 'Method not allowed' })\n }\n const hostId = String(body['hostId'] ?? '')\n const gate = await authorizePosStaff(req, hostId)\n if ('error' in gate) return res.status(gate.status).json({ error: gate.error })\n let staff = gate.staff\n const action = String(body['action'] ?? '')\n const orderId = String(body['orderId'] ?? '')\n try {\n if (action === 'gift-card-balance') {\n return await giftCardBalance(staff, body, res)\n }\n if (action === 'context') {\n // What the register needs to draw its tenders: the site's tip and\n // receipt settings, whether card readers are offered at all, and the\n // key the typed-card form loads Stripe with.\n const readers = posTerminalAvailable()\n ? (\n await firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .collection('terminalReaders')\n .limit(50)\n .get()\n ).docs.map((doc: any) => ({\n id: doc.id as string,\n label: String(doc.get('label') ?? 'Card reader'),\n registerId: (doc.get('registerId') as string | undefined) ?? null,\n status: String(doc.get('status') ?? 'offline'),\n livemode: Boolean(doc.get('livemode')),\n }))\n : []\n return res.status(200).json({\n settings: posRegisterSettings(\n await getPluginConfig(staff.orgId || undefined, 'commerce', { hostId }),\n ),\n terminal: { available: posTerminalAvailable(), testMode: posStripeTestMode() },\n readers,\n publishableKey: String(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY ?? ''),\n // A text receipt is offered only when an SMS provider is on (AGL-3610).\n smsReceipts: pluginSmsAvailable(),\n })\n }\n if (!orderId) return res.status(400).json({ error: 'Missing orderId' })\n const startsPayment = [\n 'card-present-sdk',\n 'cash',\n 'gift-card',\n 'folio',\n 'card-present',\n 'card-keyed',\n 'card-link',\n ].includes(action)\n const attemptKey = posIdempotencyKey(req)\n if (startsPayment && !attemptKey) {\n return res.status(400).json({ error: 'Missing Idempotency-Key' })\n }\n const paymentId = startsPayment\n ? posPaymentId(orderId, attemptKey)\n : String(body['paymentId'] ?? '')\n // The cashier a PIN switched in takes the payment (AGL-3609).\n if (startsPayment && body['cashierAssertion']) {\n staff = {\n ...staff,\n uid: await posPaymentCashierId({\n hostId,\n orderId,\n signedInUid: staff.uid,\n assertion: body['cashierAssertion'],\n }),\n }\n }\n const amountCents = Math.round(Number(body['amountCents'] ?? 0))\n const tipCents = Math.round(Number(body['tipCents'] ?? 0)) || 0\n const settings = posRegisterSettings(\n await getPluginConfig(staff.orgId || undefined, 'commerce', { hostId }),\n )\n let outcome: (PosPaymentOutcome & { clientSecret?: string; paymentIntentId?: string }) | null = null\n switch (action) {\n case 'sale': {\n const order = await readPosSale(hostId, orderId)\n if (!order) return res.status(404).json({ error: 'Unknown sale' })\n outcome = { ok: true, order, payment: null, completed: false, changed: false }\n break\n }\n case 'cash':\n outcome = await takeCash(staff, orderId, paymentId, body, tipCents)\n break\n case 'gift-card':\n outcome = await takeGiftCard(staff, orderId, paymentId, body)\n break\n case 'folio':\n outcome = await takeFolio(staff, orderId, paymentId, body)\n break\n case 'card-present':\n outcome = await startCardPresentPayment({\n hostId,\n orderId,\n paymentId,\n amountCents,\n tipCents,\n cashierId: staff.uid,\n org: staff.org,\n readerId: String(body['readerId'] ?? ''),\n settings,\n })\n break\n case 'card-present-sdk':\n // Collected by a native app's Stripe Terminal SDK (Tap to Pay or a\n // Bluetooth reader, AGL-3618) against this server-made intent; it\n // settles exactly like a smart-reader payment.\n outcome = await createCardPresentIntent({\n hostId,\n orderId,\n paymentId,\n amountCents,\n tipCents,\n cashierId: staff.uid,\n org: staff.org,\n })\n break\n case 'card-keyed':\n outcome = await startCardKeyedPayment({\n hostId,\n orderId,\n paymentId,\n amountCents,\n tipCents,\n cashierId: staff.uid,\n org: staff.org,\n })\n break\n case 'card-link':\n outcome = await startCardLinkPayment({\n hostId,\n orderId,\n paymentId,\n amountCents,\n tipCents,\n cashierId: staff.uid,\n org: staff.org,\n returnUrl: await registerReturnUrl(req.headers.host, hostId, staff),\n })\n break\n case 'status':\n outcome = await refreshPosCardPayment({ hostId, orderId, paymentId })\n break\n case 'cancel':\n outcome = await cancelPosCardPayment({ hostId, orderId, paymentId })\n break\n case 'retry':\n outcome = await retryCardPresentPayment({ hostId, orderId, paymentId, settings })\n break\n case 'simulate':\n outcome = await simulatePosReaderTap({\n hostId,\n orderId,\n paymentId,\n cardNumber: String(body['cardNumber'] ?? ''),\n })\n break\n case 'void':\n outcome = await voidPosSale(staff, orderId)\n break\n case 'receipt':\n outcome = await recordReceiptChoice(staff, orderId, body)\n break\n default:\n return res.status(400).json({ error: 'Unknown action' })\n }\n if ('error' in outcome) return res.status(outcome.status).json({ error: outcome.error })\n return res.status(200).json({\n sale: posSaleSummary(outcome.order),\n ...(outcome.payment ? { paymentId: outcome.payment.id } : {}),\n completed: outcome.order.status === 'paid',\n ...(outcome.clientSecret ? { clientSecret: outcome.clientSecret } : {}),\n ...(outcome.paymentIntentId ? { paymentIntentId: outcome.paymentIntentId } : {}),\n })\n } catch (error) {\n console.error('[pos-payment]', action, error)\n return res.status(500).json({ error: 'Payment failed — check the sale before trying again' })\n }\n}\n\n/** Where a QR payment page sends the customer back to: the register. */\nasync function registerReturnUrl(\n requestHost: string | string[] | undefined,\n hostId: string,\n staff: PosStaff,\n): Promise<string> {\n const origin = `https://${String(requestHost ?? '')}`\n const subdomain = (\n await firebaseAdmin.app().firestore().collection('hostIndex').doc(hostId).get()\n ).get('subdomain') as string | undefined\n const orgSlug = staff.org?.['slug'] as string | undefined\n return orgSlug && subdomain\n ? `${origin}${buildRoute(Route.HOST_PLUGIN, { orgSlug, host: subdomain, pluginSlug: 'pos' })}`\n : origin\n}\n\n/** The balance a new tender may take, or a refusal. */\nfunction tenderable(\n order: PosLiftedOrder,\n payments: CommerceModel.OrderPayment[],\n): number {\n return CommerceModel.posTenderableCents(Number(order.totals?.totalCents ?? 0), payments)\n}\n\nconst NOT_OPEN = { kind: 'refuse' as const, status: 409, error: 'This sale is no longer open' }\n\n/**\n * Cash: the amount defaults to whatever is left, the change is what the\n * customer handed over beyond it (and beyond any tip they chose).\n */\nasync function takeCash(\n staff: PosStaff,\n orderId: string,\n paymentId: string,\n body: Record<string, any>,\n tipCents: number,\n): Promise<PosPaymentOutcome> {\n const tenderedCents = Math.round(Number(body['tenderedCents'] ?? 0))\n const askedCents = Math.round(Number(body['amountCents'] ?? 0))\n return await applyPosPayment({\n hostId: staff.hostId,\n orderId,\n paymentId,\n decide: ({ order, payments, existing }) => {\n if (existing) return { kind: 'keep' }\n if (order.status !== 'pending') return NOT_OPEN\n if (!Number.isFinite(tenderedCents) || tenderedCents <= 0) {\n return { kind: 'refuse', status: 400, error: 'Enter the cash received.' }\n }\n const open = tenderable(order, payments)\n if (open <= 0) return { kind: 'refuse', status: 409, error: 'Nothing is left to pay on this sale.' }\n const amountCents =\n askedCents > 0 ? Math.min(askedCents, open) : Math.min(open, Math.max(0, tenderedCents - tipCents))\n if (!(amountCents > 0)) {\n return { kind: 'refuse', status: 400, error: 'The cash received does not cover the tip.' }\n }\n const tipProblem = CommerceModel.posTipProblem(tipCents, amountCents)\n if (tipProblem) return { kind: 'refuse', status: 400, error: tipProblem }\n if (tenderedCents < amountCents + tipCents) {\n return { kind: 'refuse', status: 400, error: 'Cash received is short' }\n }\n const total = Number(order.totals?.totalCents ?? 0)\n const now = Date.now()\n return {\n kind: 'put',\n payment: {\n id: paymentId,\n method: 'cash',\n amountCents,\n ...(tipCents > 0 ? { tipCents } : {}),\n status: 'succeeded',\n atMs: now,\n settledAtMs: now,\n cashTenderedCents: tenderedCents,\n changeCents: tenderedCents - amountCents - tipCents,\n takeFeeCents: CommerceModel.posTakeShareCents({\n takeFeeCents: Number(order.posTakeFeeCents ?? 0),\n totalCents: total,\n amountCents,\n }),\n feeCents: 0,\n cashierId: staff.uid,\n },\n }\n },\n })\n}\n\nfunction giftCardRef(hostId: string, code: string) {\n return firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .collection('giftCards')\n .doc(code)\n}\n\n/** A gift card's spendable balance, for the cashier to read to the customer. */\nasync function giftCardBalance(\n staff: PosStaff,\n body: Record<string, any>,\n res: Parameters<PluginApiHandler>[1],\n): Promise<void> {\n const code = CommerceModel.giftCardCodeOf(body['code'])\n const rate = await consumeRateLimit(`pos-gift-balance:${staff.uid}`, {\n limit: 30,\n windowMs: 60_000,\n })\n if (!rate.allowed) {\n return res.status(429).json({ error: 'Too many balance checks. Wait a minute and try again.' })\n }\n if (CommerceModel.giftCardCodeProblem(code)) {\n return res.status(404).json({ error: 'No gift card has that code.' })\n }\n const snapshot = await giftCardRef(staff.hostId, code).get()\n if (!snapshot.exists) return res.status(404).json({ error: 'No gift card has that code.' })\n const card = snapshot.data() as CommerceModel.HostGiftCard\n return res.status(200).json({\n availableCents: CommerceModel.giftCardAvailableCents(card, Date.now()),\n frozen: CommerceModel.isGiftCardFrozen(card),\n voided: Number(card.voidedAtMs) > 0,\n last4: code.slice(-4),\n })\n}\n\n/**\n * A gift card: takes the smaller of what the card can give and what is left\n * to pay, in ONE transaction with the sale. The card's spendable balance\n * honours every live hold an online checkout placed on it (AGL-2449), and a\n * frozen card gives nothing (AGL-3363), so the till and the website can\n * never spend the same dollars.\n */\nasync function takeGiftCard(\n staff: PosStaff,\n orderId: string,\n paymentId: string,\n body: Record<string, any>,\n): Promise<PosPaymentOutcome> {\n const code = CommerceModel.giftCardCodeOf(body['code'])\n if (CommerceModel.giftCardCodeProblem(code)) {\n return { ok: false, status: 404, error: 'No gift card has that code.' }\n }\n const askedCents = Math.round(Number(body['amountCents'] ?? 0))\n const cardRef = giftCardRef(staff.hostId, code)\n return await applyPosPayment({\n hostId: staff.hostId,\n orderId,\n paymentId,\n prepare: async (transaction) => {\n const snapshot = await transaction.get(cardRef)\n return snapshot.exists ? (snapshot.data() as CommerceModel.HostGiftCard) : null\n },\n decide: ({ order, payments, existing, context: card }) => {\n if (existing) return { kind: 'keep' }\n if (order.status !== 'pending') return NOT_OPEN\n if (!card) return { kind: 'refuse', status: 404, error: 'No gift card has that code.' }\n const available = CommerceModel.giftCardAvailableCents(card, Date.now())\n if (available <= 0) {\n return {\n kind: 'refuse',\n status: 409,\n error: CommerceModel.isGiftCardFrozen(card)\n ? 'This gift card is on hold and cannot be used right now.'\n : 'This gift card has no balance left.',\n }\n }\n const open = tenderable(order, payments)\n const amountCents = Math.min(available, open, askedCents > 0 ? askedCents : open)\n if (!(amountCents > 0)) {\n return { kind: 'refuse', status: 409, error: 'Nothing is left to pay on this sale.' }\n }\n const now = Date.now()\n return {\n kind: 'put',\n payment: {\n id: paymentId,\n method: 'gift_card',\n amountCents,\n status: 'succeeded',\n atMs: now,\n settledAtMs: now,\n giftCardId: code,\n last4: code.slice(-4),\n takeFeeCents: CommerceModel.posTakeShareCents({\n takeFeeCents: Number(order.posTakeFeeCents ?? 0),\n totalCents: Number(order.totals?.totalCents ?? 0),\n amountCents,\n }),\n feeCents: 0,\n cashierId: staff.uid,\n },\n }\n },\n write: (transaction, card, payment) => {\n transaction.set(\n cardRef,\n {\n balanceCents: Math.max(0, Number(card?.balanceCents ?? 0) - payment.amountCents),\n lastUsedAtMs: Date.now(),\n },\n { merge: true },\n )\n },\n })\n}\n\nfunction reservationRef(hostId: string, reservationId: string) {\n return firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .collection('reservations')\n .doc(reservationId)\n}\n\n/** Charged to a checked-in stay's folio, in the same commit as the payment. */\nasync function takeFolio(\n staff: PosStaff,\n orderId: string,\n paymentId: string,\n body: Record<string, any>,\n): Promise<PosPaymentOutcome> {\n const reservationId = String(body['reservationId'] ?? '')\n if (!/^[A-Za-z0-9_-]{1,128}$/.test(reservationId)) {\n return { ok: false, status: 400, error: 'Pick a reservation' }\n }\n const askedCents = Math.round(Number(body['amountCents'] ?? 0))\n const stayRef = reservationRef(staff.hostId, reservationId)\n return await applyPosPayment({\n hostId: staff.hostId,\n orderId,\n paymentId,\n prepare: async (transaction) => (await transaction.get(stayRef)).exists as boolean,\n decide: ({ order, payments, existing, context: stayExists }) => {\n if (existing) return { kind: 'keep' }\n if (order.status !== 'pending') return NOT_OPEN\n if (!stayExists) return { kind: 'refuse', status: 404, error: 'Unknown reservation' }\n const open = tenderable(order, payments)\n const amountCents = Math.min(open, askedCents > 0 ? askedCents : open)\n if (!(amountCents > 0)) {\n return { kind: 'refuse', status: 409, error: 'Nothing is left to pay on this sale.' }\n }\n const now = Date.now()\n return {\n kind: 'put',\n payment: {\n id: paymentId,\n method: 'folio',\n amountCents,\n status: 'succeeded',\n atMs: now,\n settledAtMs: now,\n reservationId,\n folioAtMs: now,\n takeFeeCents: CommerceModel.posTakeShareCents({\n takeFeeCents: Number(order.posTakeFeeCents ?? 0),\n totalCents: Number(order.totals?.totalCents ?? 0),\n amountCents,\n }),\n feeCents: 0,\n cashierId: staff.uid,\n },\n event: { event: 'folio', detail: `Charged to reservation ${reservationId}` },\n }\n },\n write: (transaction, _stay, payment) => {\n // `update`, never a merge-set: a missing stay must not be minted as a\n // stub holding one folio line (AGL-1760). It exists — read above.\n transaction.update(stayRef, {\n folio: firebaseAdmin.firestore.FieldValue.arrayUnion({\n orderId,\n paymentId: payment.id,\n amountCents: payment.amountCents,\n note: 'Register sale',\n atMs: payment.folioAtMs ?? Date.now(),\n }),\n })\n },\n })\n}\n\n/**\n * Abandons an open sale: everything it took is handed back first — cards\n * refunded in full (tip included, fee and transfer reversed), gift cards\n * re-credited, the room charge taken off the folio, cash marked as returned —\n * and only then is the order cancelled. A refund Stripe refuses stops the void\n * with the sale still open and its payment still recorded, never cancelled\n * over money that did not come back.\n */\nexport async function voidPosSale(\n staff: PosStaff,\n orderId: string,\n): Promise<PosPaymentOutcome> {\n const hostId = staff.hostId\n const order = await readPosSale(hostId, orderId)\n if (!order) return { ok: false, status: 404, error: 'Unknown sale' }\n if (order.status === 'cancelled') return { ok: true, order, payment: null, completed: false, changed: false }\n if (order.status !== 'pending' || !Array.isArray(order.payments)) {\n return {\n ok: false,\n status: 409,\n error: 'This sale is already paid. Refund it from the order instead.',\n }\n }\n for (const payment of CommerceModel.orderPayments(order)) {\n if (payment.status === 'pending' && CommerceModel.isCardPaymentMethod(payment.method)) {\n const cancelled = await cancelPosCardPayment({ hostId, orderId, paymentId: payment.id })\n if (!cancelled.ok) return cancelled\n }\n }\n // Re-read after the cancels: one may have completed the sale in the gap.\n const current = await readPosSale(hostId, orderId)\n if (!current) return { ok: false, status: 404, error: 'Unknown sale' }\n if (current.status !== 'pending') {\n return {\n ok: false,\n status: 409,\n error: 'The last card payment went through and the sale is paid. Refund it from the order instead.',\n }\n }\n for (const payment of CommerceModel.orderPayments(current)) {\n if (payment.status !== 'succeeded') continue\n const reversed = await reversePayment(staff, current, payment)\n if (!reversed.ok) return reversed\n }\n const firestore = firebaseAdmin.app().firestore()\n const orderRef = firestore.collection('hosts').doc(hostId).collection('orders').doc(orderId)\n const cancelled = await firestore.runTransaction(async (transaction: any) => {\n const fresh = {\n ...(CommerceModel.liftLegacyOrder(((await transaction.get(orderRef)).data() ?? {}) as any) as any),\n $id: orderId,\n } as PosLiftedOrder\n if (fresh.status !== 'pending') return null\n const open = CommerceModel.orderPayments(fresh).some(\n (payment) => payment.status === 'pending' || payment.status === 'succeeded',\n )\n if (open) return null\n const next = {\n ...fresh,\n status: 'cancelled' as const,\n timeline: CommerceModel.appendOrderEvent(fresh, 'pos-sale-voided', 'Voided at the register'),\n }\n transaction.set(\n orderRef,\n {\n status: 'cancelled',\n cancelledAtMs: Date.now(),\n timeline: next.timeline,\n ...CommerceModel.orderListFields(next, orderId),\n },\n { merge: true },\n )\n return next\n })\n if (!cancelled) {\n return { ok: false, status: 409, error: 'A payment on this sale changed. Check it and try again.' }\n }\n await releasePosSaleDiscount(hostId, current)\n return { ok: true, order: cancelled, payment: null, completed: false, changed: true }\n}\n\n/** Hands one settled payment back, recording `reversed` in the same commit. */\nasync function reversePayment(\n staff: PosStaff,\n order: PosLiftedOrder,\n payment: CommerceModel.OrderPayment,\n): Promise<PosPaymentOutcome> {\n const hostId = staff.hostId\n if (CommerceModel.isCardPaymentMethod(payment.method)) {\n if (!payment.paymentIntentId) {\n return { ok: false, status: 409, error: 'A card payment on this sale has no charge to refund.' }\n }\n const refund = await posStripe('POST', 'refunds', {\n idempotencyKey: `pos-void:${payment.id}`,\n params: {\n payment_intent: payment.paymentIntentId,\n reverse_transfer: true,\n refund_application_fee: true,\n 'metadata[kind]': 'pos-void',\n 'metadata[orderId]': order.$id,\n },\n })\n if (!refund.ok) {\n return {\n ok: false,\n status: 502,\n error: posStripeErrorMessage(refund.body, 'The card refund failed. The sale is still open.'),\n }\n }\n }\n const cardRef = payment.giftCardId ? giftCardRef(hostId, payment.giftCardId) : null\n const stayRef = payment.reservationId ? reservationRef(hostId, payment.reservationId) : null\n return await applyPosPayment({\n hostId,\n orderId: order.$id,\n paymentId: payment.id,\n prepare: async (transaction) => {\n if (payment.method === 'gift_card' && cardRef) {\n const snapshot = await transaction.get(cardRef)\n return { card: snapshot.exists ? (snapshot.data() as CommerceModel.HostGiftCard) : null, folio: null }\n }\n if (payment.method === 'folio' && stayRef) {\n const snapshot = await transaction.get(stayRef)\n return { card: null, folio: snapshot.exists ? ((snapshot.get('folio') ?? []) as any[]) : null }\n }\n return { card: null, folio: null }\n },\n decide: ({ existing }) => {\n if (!existing) return { kind: 'refuse', status: 404, error: 'Unknown payment' }\n if (existing.status !== 'succeeded') return { kind: 'keep' }\n return {\n kind: 'put',\n payment: { ...existing, status: 'reversed' },\n event: {\n event: 'pos-payment-reversed',\n detail:\n existing.method === 'cash'\n ? `${CommerceModel.describeOrderPayment(existing)} handed back in cash`\n : `${CommerceModel.describeOrderPayment(existing)} returned`,\n },\n }\n },\n write: (transaction, context, reversed) => {\n if (reversed.method === 'gift_card' && cardRef && context.card) {\n transaction.set(\n cardRef,\n { balanceCents: Number(context.card.balanceCents ?? 0) + reversed.amountCents },\n { merge: true },\n )\n }\n if (reversed.method === 'folio' && stayRef && context.folio) {\n transaction.update(stayRef, {\n folio: context.folio.filter((entry) => entry?.paymentId !== reversed.id),\n })\n }\n },\n })\n}\n\n/** A repeat of the same receipt choice inside this window sends nothing more. */\nconst RECEIPT_REPEAT_WINDOW_MS = 2 * 60 * 1000\n\n/**\n * How the customer wants their receipt, from the cashier or the customer\n * display. Kept on the order; an email chosen after the sale is paid is sent\n * at once, and one chosen before is sent when it completes.\n */\nasync function recordReceiptChoice(\n staff: PosStaff,\n orderId: string,\n body: Record<string, any>,\n): Promise<PosPaymentOutcome> {\n const channel = String(body['channel'] ?? '') as CommerceModel.PosReceiptChannel\n if (!['email', 'sms', 'print', 'none'].includes(channel)) {\n return { ok: false, status: 400, error: 'Choose email, text, print or no receipt.' }\n }\n const to =\n channel === 'email'\n ? CommerceModel.posDisplayEmail(body['to'])\n : channel === 'sms'\n ? CommerceModel.posDisplayPhone(body['to'])\n : ''\n if ((channel === 'email' || channel === 'sms') && !to) {\n return {\n ok: false,\n status: 400,\n error: channel === 'email' ? 'Enter a valid email address.' : 'Enter a valid phone number.',\n }\n }\n if (channel === 'sms' && !pluginSmsAvailable()) {\n return { ok: false, status: 409, error: 'Text receipts are not set up for this store.' }\n }\n const marketingOptIn = channel === 'email' && body['marketingOptIn'] === true\n const firestore = firebaseAdmin.app().firestore()\n const orderRef = firestore.collection('hosts').doc(staff.hostId).collection('orders').doc(orderId)\n const order = await firestore.runTransaction(async (transaction: any) => {\n const snapshot = await transaction.get(orderRef)\n if (!snapshot.exists) return null\n const fresh = {\n ...(CommerceModel.liftLegacyOrder((snapshot.data() ?? {}) as any) as any),\n $id: orderId,\n } as PosLiftedOrder\n if (fresh.channel !== 'pos') return null\n // The same choice twice in a row (a double tap, or the display and the\n // cashier answering together) is one receipt, not two.\n const previous = fresh.receiptRequest\n if (\n fresh.status === 'paid' &&\n previous &&\n previous.channel === channel &&\n String(previous.to ?? '') === to &&\n Date.now() - Number(previous.atMs ?? 0) < RECEIPT_REPEAT_WINDOW_MS\n ) {\n return { ...fresh, repeated: true } as PosLiftedOrder & { repeated?: boolean }\n }\n const receiptRequest = {\n channel,\n ...(to ? { to } : {}),\n ...(marketingOptIn ? { marketingOptIn: true } : {}),\n atMs: Date.now(),\n }\n transaction.set(\n orderRef,\n {\n receiptRequest,\n ...(channel === 'email' && !fresh.customerEmail\n ? {\n customerEmail: to,\n ...CommerceModel.orderListFields({ ...fresh, customerEmail: to }, orderId),\n }\n : {}),\n // The receipt door texts `customerPhone` (AGL-3610).\n ...(channel === 'sms' ? { customerPhone: to } : {}),\n },\n { merge: true },\n )\n return { ...fresh, receiptRequest } as PosLiftedOrder & { repeated?: boolean }\n })\n if (!order) return { ok: false, status: 404, error: 'Unknown sale' }\n if (order.repeated) return { ok: true, order, payment: null, completed: false, changed: false }\n if (order.status === 'paid' && channel === 'print') {\n // Chosen after the sale completed: printed now on the register's receipt\n // printer, under the sale's own key so it never prints twice (AGL-3609).\n await printPosSaleReceipt(staff.hostId, orderId)\n }\n if (order.status === 'paid' && order.registerId) {\n // The customer has answered (or the cashier for them): the display says\n // thank you and drops the address they typed (AGL-3608).\n await finishPosDisplayReceipt(staff.hostId, order.registerId).catch((error: unknown) =>\n console.error('[pos-payment] display finish failed', error),\n )\n }\n if (order.status === 'paid' && (channel === 'email' || channel === 'sms')) {\n // Chosen after the sale completed: sent now, to where they said.\n const sent = await deliverChosenPosReceipt(\n { hostId: staff.hostId, orderId },\n { channel, to, orderEmail: String(order.customerEmail ?? '') },\n )\n if (channel === 'email') {\n await recordCapturedContact({\n orgId: '',\n hostId: staff.hostId,\n identity: { email: to },\n surface: 'relationship',\n lifecycleFloor: 'customer',\n ...(marketingOptIn ? { marketingConsent: true } : {}),\n interaction: {\n source: 'order',\n refId: orderId,\n summary: `In-store purchase (${CommerceModel.formatReceiptMoney(\n Number(order.totals?.totalCents ?? 0),\n POS_CURRENCY,\n )})`,\n },\n }).catch((error: unknown) => console.error('[pos-payment] contact capture failed', error))\n }\n if (sent !== 'sent') {\n // A failed send is not a repeat: the cashier's retry goes out.\n await orderRef\n .set({ receiptRequest: { atMs: 0 } }, { merge: true })\n .catch((error: unknown) => console.error('[pos-payment] receipt retry reset failed', error))\n }\n if (sent === 'not_configured') {\n return {\n ok: false,\n status: 409,\n error: channel === 'sms' ? 'Text receipts are not set up for this store.' : 'Email is not set up.',\n }\n }\n if (sent !== 'sent') return { ok: false, status: 502, error: 'The receipt could not be sent.' }\n }\n return { ok: true, order, payment: null, completed: false, changed: true }\n}\n"],"names":["consumeRateLimit","firebaseAdmin","getPluginConfig","buildRoute","Route","recordCapturedContact","pluginSmsAvailable","finishPosDisplayReceipt","CommerceModel","posRegisterSettings","authorizePosStaff","posIdempotencyKey","posQueryBody","posRequestBody","applyPosPayment","deliverChosenPosReceipt","posPaymentId","posSaleSummary","readPosSale","releasePosSaleDiscount","posPaymentCashierId","printPosSaleReceipt","POS_CURRENCY","posStripe","posStripeErrorMessage","posStripeTestMode","posTerminalAvailable","cancelPosCardPayment","createCardPresentIntent","refreshPosCardPayment","retryCardPresentPayment","simulatePosReaderTap","startCardKeyedPayment","startCardLinkPayment","startCardPresentPayment","posPaymentHandler","req","res","body","method","status","json","error","hostId","String","gate","staff","action","orderId","giftCardBalance","process","readers","app","firestore","collection","doc","limit","get","docs","map","id","label","registerId","livemode","Boolean","settings","orgId","undefined","terminal","available","testMode","publishableKey","env","NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY","smsReceipts","startsPayment","includes","attemptKey","paymentId","uid","signedInUid","assertion","amountCents","Math","round","Number","tipCents","outcome","order","ok","payment","completed","changed","takeCash","takeGiftCard","takeFolio","cashierId","org","readerId","returnUrl","registerReturnUrl","headers","host","cardNumber","voidPosSale","recordReceiptChoice","sale","clientSecret","paymentIntentId","console","requestHost","origin","subdomain","orgSlug","HOST_PLUGIN","pluginSlug","tenderable","payments","posTenderableCents","totals","totalCents","NOT_OPEN","kind","tenderedCents","askedCents","decide","existing","isFinite","open","min","max","tipProblem","posTipProblem","total","now","Date","atMs","settledAtMs","cashTenderedCents","changeCents","takeFeeCents","posTakeShareCents","posTakeFeeCents","feeCents","giftCardRef","code","giftCardCodeOf","rate","windowMs","allowed","giftCardCodeProblem","snapshot","exists","card","data","availableCents","giftCardAvailableCents","frozen","isGiftCardFrozen","voided","voidedAtMs","last4","slice","cardRef","prepare","transaction","context","giftCardId","write","set","balanceCents","lastUsedAtMs","merge","reservationRef","reservationId","test","stayRef","stayExists","folioAtMs","event","detail","_stay","update","folio","FieldValue","arrayUnion","note","Array","isArray","orderPayments","isCardPaymentMethod","cancelled","current","reversed","reversePayment","orderRef","runTransaction","fresh","liftLegacyOrder","$id","some","next","timeline","appendOrderEvent","cancelledAtMs","orderListFields","refund","idempotencyKey","params","payment_intent","reverse_transfer","refund_application_fee","describeOrderPayment","filter","entry","RECEIPT_REPEAT_WINDOW_MS","channel","to","posDisplayEmail","posDisplayPhone","marketingOptIn","previous","receiptRequest","repeated","customerEmail","customerPhone","catch","sent","orderEmail","identity","email","surface","lifecycleFloor","marketingConsent","interaction","source","refId","summary","formatReceiptMoney"],"mappings":"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"}
@@ -0,0 +1,82 @@
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 { HostOrder } from '../model/commerce-orders';
18
+ import type { PosCashEventType } from '../model/commerce-pos-ops';
19
+ import type { PrintReport } from '../model/commerce-printers';
20
+ import { type PosRegisterSettings } from '../plugin-config';
21
+ import { type PosSaleCompletedEvent } from './pos-sale';
22
+ import { orderReceipt, queueRegisterPrint } from './printers';
23
+ export interface PosPrintDeps {
24
+ firestore(): any;
25
+ queue: typeof queueRegisterPrint;
26
+ receipt: typeof orderReceipt;
27
+ /** The site's register settings (tips, receipts, display). */
28
+ registerSettings(hostId: string): Promise<PosRegisterSettings>;
29
+ /** A member's name as the receipt prints it. */
30
+ memberName(uid: string): Promise<string>;
31
+ }
32
+ export declare function defaultPosPrintDeps(): PosPrintDeps;
33
+ /**
34
+ * What a completed sale puts on paper: the receipt when the site always
35
+ * prints or the customer asked for print, never when they chose email, a
36
+ * text or nothing — and the drawer whenever cash changed hands.
37
+ */
38
+ export declare function posSalePrintPlan(order: Pick<HostOrder, 'payments' | 'status' | 'channel'> & {
39
+ receiptRequest?: {
40
+ channel?: string;
41
+ } | null;
42
+ }, receiptDefault: PosRegisterSettings['receiptDefault']): {
43
+ receipt: boolean;
44
+ drawer: boolean;
45
+ };
46
+ /** A completed register sale's receipt and drawer, by {@link posSalePrintPlan}. */
47
+ export declare function printPosSale(event: Pick<PosSaleCompletedEvent, 'hostId' | 'orderId'>, deps?: PosPrintDeps): Promise<{
48
+ jobIds: string[];
49
+ }>;
50
+ /**
51
+ * The receipt a customer asked for on the display AFTER the sale completed.
52
+ * Under the sale's own key, so a receipt the completion already printed is
53
+ * not printed twice.
54
+ */
55
+ export declare function printPosSaleReceipt(hostId: string, orderId: string, deps?: PosPrintDeps): Promise<{
56
+ jobIds: string[];
57
+ }>;
58
+ /** Opens the drawer for cash that moved without a sale. */
59
+ export declare function kickPosDrawer(input: {
60
+ hostId: string;
61
+ registerId: string;
62
+ reason: PosCashEventType | 'cash_refund';
63
+ /** The event or return id: a retried tap kicks once. */
64
+ causeId: string;
65
+ createdBy?: string;
66
+ }, deps?: PosPrintDeps): Promise<{
67
+ jobIds: string[];
68
+ }>;
69
+ /** Queues a shift report on the register's receipt printer; no printer, no jobs. */
70
+ export declare function printPosShiftReport(input: {
71
+ hostId: string;
72
+ registerId: string;
73
+ shiftId: string;
74
+ report: PrintReport;
75
+ createdBy?: string;
76
+ /** Distinguishes a second deliberate print of the same report. */
77
+ attemptKey: string;
78
+ }, deps?: PosPrintDeps): Promise<{
79
+ jobIds: string[];
80
+ }>;
81
+ /** Prints every completed register sale; safe to call more than once. */
82
+ export declare function registerPosSalePrinting(): void;
@@ -0,0 +1,193 @@
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 { firebaseAdmin, getOrgForHost, getPluginConfig } from "@aglyn/tenant-data-admin";
18
+ import { findUserByUidAcrossPools } from "@aglyn/tenant-data-admin/server/auth-pools";
19
+ import { orderPayments } from "../model/commerce-pos.js";
20
+ import { posRegisterSettings } from "../plugin-config.js";
21
+ import { onPosSaleCompleted } from "./pos-sale.js";
22
+ import { orderReceipt, queueRegisterPrint } from "./printers.js";
23
+ export function defaultPosPrintDeps() {
24
+ return {
25
+ firestore: ()=>firebaseAdmin.app().firestore(),
26
+ queue: queueRegisterPrint,
27
+ receipt: orderReceipt,
28
+ registerSettings: async (hostId)=>{
29
+ const owner = await getOrgForHost(hostId).catch(()=>null);
30
+ return posRegisterSettings((owner == null ? void 0 : owner.orgId) ? await getPluginConfig(owner.orgId, 'commerce', {
31
+ hostId
32
+ }).catch(()=>({})) : {});
33
+ },
34
+ memberName: async (uid)=>{
35
+ // Every pool: a member who signs in through SSO lives in a GCIP tenant
36
+ // pool, not the project one (AGL-1122).
37
+ try {
38
+ var _this;
39
+ const user = (_this = await findUserByUidAcrossPools(uid)) == null ? void 0 : _this.record;
40
+ return (user == null ? void 0 : user.displayName) || (user == null ? void 0 : user.email) || '';
41
+ } catch (unused) {
42
+ return '';
43
+ }
44
+ }
45
+ };
46
+ }
47
+ /** The one key a sale's receipt prints under, whichever path asks first. */ const SALE_RECEIPT_REASON = 'sale';
48
+ /**
49
+ * What a completed sale puts on paper: the receipt when the site always
50
+ * prints or the customer asked for print, never when they chose email, a
51
+ * text or nothing — and the drawer whenever cash changed hands.
52
+ */ export function posSalePrintPlan(order, receiptDefault) {
53
+ var _order_receiptRequest;
54
+ const drawer = orderPayments(order).some((payment)=>payment.status === 'succeeded' && payment.method === 'cash');
55
+ const choice = (_order_receiptRequest = order.receiptRequest) == null ? void 0 : _order_receiptRequest.channel;
56
+ const receipt = choice ? choice === 'print' : receiptDefault === 'print';
57
+ return {
58
+ receipt,
59
+ drawer
60
+ };
61
+ }
62
+ /**
63
+ * True when the customer chose a printed receipt: it then prints on the
64
+ * register's first printer even when none is set to print every sale.
65
+ */ function customerAskedForPrint(order) {
66
+ var _order_receiptRequest;
67
+ return ((_order_receiptRequest = order.receiptRequest) == null ? void 0 : _order_receiptRequest.channel) === 'print';
68
+ }
69
+ async function readOrder(deps, hostId, orderId) {
70
+ const snapshot = await deps.firestore().collection('hosts').doc(hostId).collection('orders').doc(orderId).get();
71
+ return snapshot.exists ? snapshot.data() : null;
72
+ }
73
+ async function saleReceipt(deps, hostId, orderId, order) {
74
+ const [receipt, cashierName] = await Promise.all([
75
+ deps.receipt(hostId, orderId, order, {
76
+ firestore: deps.firestore()
77
+ }),
78
+ order.cashierId ? deps.memberName(order.cashierId) : Promise.resolve('')
79
+ ]);
80
+ return cashierName ? _extends({}, receipt, {
81
+ cashierName
82
+ }) : receipt;
83
+ }
84
+ /** A completed register sale's receipt and drawer, by {@link posSalePrintPlan}. */ export async function printPosSale(event, deps = defaultPosPrintDeps()) {
85
+ try {
86
+ const order = await readOrder(deps, event.hostId, event.orderId);
87
+ if (!order || order.channel !== 'pos' || !order.registerId) return {
88
+ jobIds: []
89
+ };
90
+ const settings = await deps.registerSettings(event.hostId);
91
+ const plan = posSalePrintPlan(order, settings.receiptDefault);
92
+ // The kitchen ticket prints whatever the customer chose for their own
93
+ // receipt (AGL-3619): it is an order to make, not paper for the customer,
94
+ // and only printers set to print kitchen tickets receive it.
95
+ const receipt = await saleReceipt(deps, event.hostId, event.orderId, order);
96
+ return await deps.queue(_extends({
97
+ hostId: event.hostId,
98
+ registerId: order.registerId
99
+ }, plan.receipt ? {
100
+ receipt
101
+ } : {}, customerAskedForPrint(order) ? {
102
+ receiptChoice: 'print'
103
+ } : {}, {
104
+ kitchenTicket: receipt,
105
+ openDrawer: plan.drawer,
106
+ orderId: event.orderId,
107
+ reason: SALE_RECEIPT_REASON,
108
+ idempotencyKey: event.orderId,
109
+ firestore: deps.firestore()
110
+ }));
111
+ } catch (error) {
112
+ console.error('[pos-print] sale print failed', event.orderId, error);
113
+ return {
114
+ jobIds: []
115
+ };
116
+ }
117
+ }
118
+ /**
119
+ * The receipt a customer asked for on the display AFTER the sale completed.
120
+ * Under the sale's own key, so a receipt the completion already printed is
121
+ * not printed twice.
122
+ */ export async function printPosSaleReceipt(hostId, orderId, deps = defaultPosPrintDeps()) {
123
+ try {
124
+ const order = await readOrder(deps, hostId, orderId);
125
+ if (!order || order.channel !== 'pos' || !order.registerId) return {
126
+ jobIds: []
127
+ };
128
+ return await deps.queue({
129
+ hostId,
130
+ registerId: order.registerId,
131
+ receipt: await saleReceipt(deps, hostId, orderId, order),
132
+ // Asked for by name, so it prints even when no printer auto-prints.
133
+ receiptChoice: 'print',
134
+ orderId,
135
+ reason: SALE_RECEIPT_REASON,
136
+ idempotencyKey: orderId,
137
+ firestore: deps.firestore()
138
+ });
139
+ } catch (error) {
140
+ console.error('[pos-print] receipt print failed', orderId, error);
141
+ return {
142
+ jobIds: []
143
+ };
144
+ }
145
+ }
146
+ /** Opens the drawer for cash that moved without a sale. */ export async function kickPosDrawer(input, deps = defaultPosPrintDeps()) {
147
+ try {
148
+ return await deps.queue(_extends({
149
+ hostId: input.hostId,
150
+ registerId: input.registerId,
151
+ openDrawer: true,
152
+ reason: input.reason,
153
+ idempotencyKey: input.causeId
154
+ }, input.createdBy ? {
155
+ createdBy: input.createdBy
156
+ } : {}, {
157
+ firestore: deps.firestore()
158
+ }));
159
+ } catch (error) {
160
+ console.error('[pos-print] drawer kick failed', input.causeId, error);
161
+ return {
162
+ jobIds: []
163
+ };
164
+ }
165
+ }
166
+ /** Queues a shift report on the register's receipt printer; no printer, no jobs. */ export async function printPosShiftReport(input, deps = defaultPosPrintDeps()) {
167
+ try {
168
+ return await deps.queue(_extends({
169
+ hostId: input.hostId,
170
+ registerId: input.registerId,
171
+ report: input.report,
172
+ reason: input.report.title === 'Z REPORT' ? 'z_report' : 'x_report',
173
+ idempotencyKey: `${input.shiftId}-${input.attemptKey}`
174
+ }, input.createdBy ? {
175
+ createdBy: input.createdBy
176
+ } : {}, {
177
+ firestore: deps.firestore()
178
+ }));
179
+ } catch (error) {
180
+ console.error('[pos-print] report print failed', input.shiftId, error);
181
+ return {
182
+ jobIds: []
183
+ };
184
+ }
185
+ }
186
+ let subscribed = false;
187
+ /** Prints every completed register sale; safe to call more than once. */ export function registerPosSalePrinting() {
188
+ if (subscribed) return;
189
+ subscribed = true;
190
+ onPosSaleCompleted((event)=>printPosSale(event).then(()=>undefined));
191
+ }
192
+
193
+ //# sourceMappingURL=pos-print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-print.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 { firebaseAdmin, getOrgForHost, getPluginConfig } from '@aglyn/tenant-data-admin'\nimport { findUserByUidAcrossPools } from '@aglyn/tenant-data-admin/server/auth-pools'\nimport type { HostOrder } from '../model/commerce-orders'\nimport { orderPayments } from '../model/commerce-pos'\nimport type { PosCashEventType } from '../model/commerce-pos-ops'\nimport type { PrintReport } from '../model/commerce-printers'\nimport { posRegisterSettings, type PosRegisterSettings } from '../plugin-config'\nimport { onPosSaleCompleted, type PosSaleCompletedEvent } from './pos-sale'\nimport { orderReceipt, queueRegisterPrint } from './printers'\n\n/*==========================================\n * THE REGISTER'S PAPER AND DRAWER (AGL-3609), through the cloud printer\n * queue (AGL-3619) rather than a second one:\n *\n * a completed sale its receipt, when the site always prints or the\n * customer chose print, a kitchen ticket on the\n * printers that print them, and a drawer kick when\n * cash was taken\n * a cash event paid in, paid out, a safe drop or a cash refund\n * opens the drawer\n * an X or Z report printed on the register's receipt printer\n *\n * Every job is keyed on its cause (the order, the event, the return), so a\n * cause delivered twice prints once. Nothing here can fail the money that\n * caused it: each entry point logs and returns.\n *=========================================*/\n\nexport interface PosPrintDeps {\n firestore(): any\n queue: typeof queueRegisterPrint\n receipt: typeof orderReceipt\n /** The site's register settings (tips, receipts, display). */\n registerSettings(hostId: string): Promise<PosRegisterSettings>\n /** A member's name as the receipt prints it. */\n memberName(uid: string): Promise<string>\n}\n\nexport function defaultPosPrintDeps(): PosPrintDeps {\n return {\n firestore: () => firebaseAdmin.app().firestore(),\n queue: queueRegisterPrint,\n receipt: orderReceipt,\n registerSettings: async (hostId) => {\n const owner = await getOrgForHost(hostId).catch(() => null)\n return posRegisterSettings(\n owner?.orgId ? await getPluginConfig(owner.orgId, 'commerce', { hostId }).catch(() => ({})) : {},\n )\n },\n memberName: async (uid) => {\n // Every pool: a member who signs in through SSO lives in a GCIP tenant\n // pool, not the project one (AGL-1122).\n try {\n const user = (await findUserByUidAcrossPools(uid))?.record\n return user?.displayName || user?.email || ''\n } catch {\n return ''\n }\n },\n }\n}\n\n/** The one key a sale's receipt prints under, whichever path asks first. */\nconst SALE_RECEIPT_REASON = 'sale'\n\n/**\n * What a completed sale puts on paper: the receipt when the site always\n * prints or the customer asked for print, never when they chose email, a\n * text or nothing — and the drawer whenever cash changed hands.\n */\nexport function posSalePrintPlan(\n order: Pick<HostOrder, 'payments' | 'status' | 'channel'> & {\n receiptRequest?: { channel?: string } | null\n },\n receiptDefault: PosRegisterSettings['receiptDefault'],\n): { receipt: boolean; drawer: boolean } {\n const drawer = orderPayments(order as Parameters<typeof orderPayments>[0]).some(\n (payment) => payment.status === 'succeeded' && payment.method === 'cash',\n )\n const choice = order.receiptRequest?.channel\n const receipt = choice ? choice === 'print' : receiptDefault === 'print'\n return { receipt, drawer }\n}\n\n/**\n * True when the customer chose a printed receipt: it then prints on the\n * register's first printer even when none is set to print every sale.\n */\nfunction customerAskedForPrint(order: { receiptRequest?: { channel?: string } | null }): boolean {\n return order.receiptRequest?.channel === 'print'\n}\n\nasync function readOrder(deps: PosPrintDeps, hostId: string, orderId: string) {\n const snapshot = await deps\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .collection('orders')\n .doc(orderId)\n .get()\n return snapshot.exists ? (snapshot.data() as HostOrder & Record<string, any>) : null\n}\n\nasync function saleReceipt(\n deps: PosPrintDeps,\n hostId: string,\n orderId: string,\n order: HostOrder & Record<string, any>,\n) {\n const [receipt, cashierName] = await Promise.all([\n deps.receipt(hostId, orderId, order, { firestore: deps.firestore() }),\n order.cashierId ? deps.memberName(order.cashierId) : Promise.resolve(''),\n ])\n return cashierName ? { ...receipt, cashierName } : receipt\n}\n\n/** A completed register sale's receipt and drawer, by {@link posSalePrintPlan}. */\nexport async function printPosSale(\n event: Pick<PosSaleCompletedEvent, 'hostId' | 'orderId'>,\n deps: PosPrintDeps = defaultPosPrintDeps(),\n): Promise<{ jobIds: string[] }> {\n try {\n const order = await readOrder(deps, event.hostId, event.orderId)\n if (!order || order.channel !== 'pos' || !order.registerId) return { jobIds: [] }\n const settings = await deps.registerSettings(event.hostId)\n const plan = posSalePrintPlan(order, settings.receiptDefault)\n // The kitchen ticket prints whatever the customer chose for their own\n // receipt (AGL-3619): it is an order to make, not paper for the customer,\n // and only printers set to print kitchen tickets receive it.\n const receipt = await saleReceipt(deps, event.hostId, event.orderId, order)\n return await deps.queue({\n hostId: event.hostId,\n registerId: order.registerId,\n ...(plan.receipt ? { receipt } : {}),\n ...(customerAskedForPrint(order) ? { receiptChoice: 'print' as const } : {}),\n kitchenTicket: receipt,\n openDrawer: plan.drawer,\n orderId: event.orderId,\n reason: SALE_RECEIPT_REASON,\n idempotencyKey: event.orderId,\n firestore: deps.firestore(),\n })\n } catch (error) {\n console.error('[pos-print] sale print failed', event.orderId, error)\n return { jobIds: [] }\n }\n}\n\n/**\n * The receipt a customer asked for on the display AFTER the sale completed.\n * Under the sale's own key, so a receipt the completion already printed is\n * not printed twice.\n */\nexport async function printPosSaleReceipt(\n hostId: string,\n orderId: string,\n deps: PosPrintDeps = defaultPosPrintDeps(),\n): Promise<{ jobIds: string[] }> {\n try {\n const order = await readOrder(deps, hostId, orderId)\n if (!order || order.channel !== 'pos' || !order.registerId) return { jobIds: [] }\n return await deps.queue({\n hostId,\n registerId: order.registerId,\n receipt: await saleReceipt(deps, hostId, orderId, order),\n // Asked for by name, so it prints even when no printer auto-prints.\n receiptChoice: 'print',\n orderId,\n reason: SALE_RECEIPT_REASON,\n idempotencyKey: orderId,\n firestore: deps.firestore(),\n })\n } catch (error) {\n console.error('[pos-print] receipt print failed', orderId, error)\n return { jobIds: [] }\n }\n}\n\n/** Opens the drawer for cash that moved without a sale. */\nexport async function kickPosDrawer(\n input: {\n hostId: string\n registerId: string\n reason: PosCashEventType | 'cash_refund'\n /** The event or return id: a retried tap kicks once. */\n causeId: string\n createdBy?: string\n },\n deps: PosPrintDeps = defaultPosPrintDeps(),\n): Promise<{ jobIds: string[] }> {\n try {\n return await deps.queue({\n hostId: input.hostId,\n registerId: input.registerId,\n openDrawer: true,\n reason: input.reason,\n idempotencyKey: input.causeId,\n ...(input.createdBy ? { createdBy: input.createdBy } : {}),\n firestore: deps.firestore(),\n })\n } catch (error) {\n console.error('[pos-print] drawer kick failed', input.causeId, error)\n return { jobIds: [] }\n }\n}\n\n/** Queues a shift report on the register's receipt printer; no printer, no jobs. */\nexport async function printPosShiftReport(\n input: {\n hostId: string\n registerId: string\n shiftId: string\n report: PrintReport\n createdBy?: string\n /** Distinguishes a second deliberate print of the same report. */\n attemptKey: string\n },\n deps: PosPrintDeps = defaultPosPrintDeps(),\n): Promise<{ jobIds: string[] }> {\n try {\n return await deps.queue({\n hostId: input.hostId,\n registerId: input.registerId,\n report: input.report,\n reason: input.report.title === 'Z REPORT' ? 'z_report' : 'x_report',\n idempotencyKey: `${input.shiftId}-${input.attemptKey}`,\n ...(input.createdBy ? { createdBy: input.createdBy } : {}),\n firestore: deps.firestore(),\n })\n } catch (error) {\n console.error('[pos-print] report print failed', input.shiftId, error)\n return { jobIds: [] }\n }\n}\n\nlet subscribed = false\n\n/** Prints every completed register sale; safe to call more than once. */\nexport function registerPosSalePrinting(): void {\n if (subscribed) return\n subscribed = true\n onPosSaleCompleted((event) => printPosSale(event).then(() => undefined))\n}\n"],"names":["firebaseAdmin","getOrgForHost","getPluginConfig","findUserByUidAcrossPools","orderPayments","posRegisterSettings","onPosSaleCompleted","orderReceipt","queueRegisterPrint","defaultPosPrintDeps","firestore","app","queue","receipt","registerSettings","hostId","owner","catch","orgId","memberName","uid","user","record","displayName","email","SALE_RECEIPT_REASON","posSalePrintPlan","order","receiptDefault","drawer","some","payment","status","method","choice","receiptRequest","channel","customerAskedForPrint","readOrder","deps","orderId","snapshot","collection","doc","get","exists","data","saleReceipt","cashierName","Promise","all","cashierId","resolve","printPosSale","event","registerId","jobIds","settings","plan","receiptChoice","kitchenTicket","openDrawer","reason","idempotencyKey","error","console","printPosSaleReceipt","kickPosDrawer","input","causeId","createdBy","printPosShiftReport","report","title","shiftId","attemptKey","subscribed","registerPosSalePrinting","then","undefined"],"mappings":"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"}
@@ -0,0 +1,27 @@
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 } from '@aglyn/aglyn/server';
18
+ /**
19
+ * `POST /api/commerce/pos-readers` (AGL-3607): the site's Stripe Terminal
20
+ * card readers, from the "Card readers" settings card, and the server-side
21
+ * removal of a register.
22
+ *
23
+ * Every action names a reader by id, and every one reads that reader under
24
+ * the CALLER's site first (`ownedTerminalReader`): a reader id copied from
25
+ * another store is "not on this site", whatever Stripe would say about it.
26
+ */
27
+ export declare const posReadersHandler: PluginApiHandler;