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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/package.json +13 -13
  2. package/src/index.d.ts +0 -1
  3. package/src/index.js +0 -1
  4. package/src/index.js.map +1 -1
  5. package/src/lib/barcode/barcode-decode.d.ts +71 -0
  6. package/src/lib/barcode/barcode-decode.js +498 -0
  7. package/src/lib/barcode/barcode-decode.js.map +1 -0
  8. package/src/lib/barcode/barcode-encode.d.ts +44 -0
  9. package/src/lib/barcode/barcode-encode.js +138 -0
  10. package/src/lib/barcode/barcode-encode.js.map +1 -0
  11. package/src/lib/barcode/barcode-scanner.component.d.ts +23 -0
  12. package/src/lib/barcode/barcode-scanner.component.js +260 -0
  13. package/src/lib/barcode/barcode-scanner.component.js.map +1 -0
  14. package/src/lib/barcode/scan-button.component.d.ts +10 -0
  15. package/src/lib/barcode/scan-button.component.js +62 -0
  16. package/src/lib/barcode/scan-button.component.js.map +1 -0
  17. package/src/lib/barcode/scanner-wedge.d.ts +35 -0
  18. package/src/lib/barcode/scanner-wedge.js +108 -0
  19. package/src/lib/barcode/scanner-wedge.js.map +1 -0
  20. package/src/lib/components/account.js +10 -1
  21. package/src/lib/components/account.js.map +1 -1
  22. package/src/lib/components/cart-extras.d.ts +45 -0
  23. package/src/lib/components/cart-extras.js +127 -0
  24. package/src/lib/components/cart-extras.js.map +1 -0
  25. package/src/lib/components/cart.js +82 -15
  26. package/src/lib/components/cart.js.map +1 -1
  27. package/src/lib/components/checkout-return-notice.d.ts +26 -0
  28. package/src/lib/components/checkout-return-notice.js +48 -0
  29. package/src/lib/components/checkout-return-notice.js.map +1 -0
  30. package/src/lib/components/commerce-console-page.js +124 -0
  31. package/src/lib/components/commerce-console-page.js.map +1 -1
  32. package/src/lib/components/commerce-console-sections.d.ts +1 -1
  33. package/src/lib/components/commerce-console-sections.js +4 -0
  34. package/src/lib/components/commerce-console-sections.js.map +1 -1
  35. package/src/lib/components/console/bulk-fulfill.d.ts +44 -0
  36. package/src/lib/components/console/bulk-fulfill.js +84 -0
  37. package/src/lib/components/console/bulk-fulfill.js.map +1 -0
  38. package/src/lib/components/console/customer-notifications-card.component.d.ts +19 -0
  39. package/src/lib/components/console/customer-notifications-card.component.js +149 -0
  40. package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
  41. package/src/lib/components/console/host-orders-card.component.js +84 -5
  42. package/src/lib/components/console/host-orders-card.component.js.map +1 -1
  43. package/src/lib/components/console/locations-card.component.js +164 -57
  44. package/src/lib/components/console/locations-card.component.js.map +1 -1
  45. package/src/lib/components/console/order-detail-dialog.component.js +209 -61
  46. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  47. package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
  48. package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
  49. package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
  50. package/src/lib/components/console/order-invoice.component.d.ts +33 -0
  51. package/src/lib/components/console/order-invoice.component.js +81 -0
  52. package/src/lib/components/console/order-invoice.component.js.map +1 -0
  53. package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
  54. package/src/lib/components/console/order-receipt-resend.component.js +203 -0
  55. package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
  56. package/src/lib/components/console/order-returns.component.d.ts +36 -0
  57. package/src/lib/components/console/order-returns.component.js +142 -0
  58. package/src/lib/components/console/order-returns.component.js.map +1 -0
  59. package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
  60. package/src/lib/components/console/order-shipping-actions.component.js +149 -0
  61. package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
  62. package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
  63. package/src/lib/components/console/order-webhooks-card.component.js +623 -0
  64. package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
  65. package/src/lib/components/console/order-zones.d.ts +155 -0
  66. package/src/lib/components/console/order-zones.js +40 -0
  67. package/src/lib/components/console/order-zones.js.map +1 -0
  68. package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
  69. package/src/lib/components/console/payment-methods-card.component.js +395 -0
  70. package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
  71. package/src/lib/components/console/pos/pos-api.d.ts +124 -0
  72. package/src/lib/components/console/pos/pos-api.js +101 -0
  73. package/src/lib/components/console/pos/pos-api.js.map +1 -0
  74. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
  75. package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
  76. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
  77. package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
  78. package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
  79. package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
  80. package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
  81. package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
  82. package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
  83. package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
  84. package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
  85. package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
  86. package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
  87. package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
  88. package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
  89. package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
  90. package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
  91. package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
  92. package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
  93. package/src/lib/components/console/pos/use-pos-display.js +161 -0
  94. package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
  95. package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
  96. package/src/lib/components/console/pos-devices-card.component.js +546 -0
  97. package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
  98. package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
  99. package/src/lib/components/console/pos-display/brand-screen.js +85 -0
  100. package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
  101. package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
  102. package/src/lib/components/console/pos-display/cart-screen.js +166 -0
  103. package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
  104. package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
  105. package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
  106. package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
  107. package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
  108. package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
  109. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
  110. package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
  111. package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
  112. package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
  113. package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
  114. package/src/lib/components/console/pos-display/tip-screen.js +211 -0
  115. package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
  116. package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
  117. package/src/lib/components/console/pos-display-page.component.js +407 -0
  118. package/src/lib/components/console/pos-display-page.component.js.map +1 -0
  119. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
  120. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
  121. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
  122. package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
  123. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
  124. package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
  125. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
  126. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
  127. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
  128. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
  129. package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
  130. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
  131. package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
  132. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
  133. package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
  134. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
  135. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
  136. package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
  137. package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
  138. package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
  139. package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
  140. package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
  141. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
  142. package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
  143. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
  144. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
  145. package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
  146. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
  147. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
  148. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
  149. package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
  150. package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
  151. package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
  152. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
  153. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
  154. package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
  155. package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
  156. package/src/lib/components/console/pos-ops/register-ops.js +28 -0
  157. package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
  158. package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
  159. package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
  160. package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
  161. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
  162. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
  163. package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
  164. package/src/lib/components/console/pos-page.component.d.ts +13 -5
  165. package/src/lib/components/console/pos-page.component.js +729 -657
  166. package/src/lib/components/console/pos-page.component.js.map +1 -1
  167. package/src/lib/components/console/product-editor-dialog.component.js +51 -7
  168. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  169. package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
  170. package/src/lib/components/console/product-labels-dialog.component.js +197 -0
  171. package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
  172. package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
  173. package/src/lib/components/console/product-register-fields.component.js +241 -0
  174. package/src/lib/components/console/product-register-fields.component.js.map +1 -0
  175. package/src/lib/components/console/product-zones.d.ts +44 -0
  176. package/src/lib/components/console/product-zones.js.map +1 -1
  177. package/src/lib/components/console/products-hub-card.component.js +12 -0
  178. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  179. package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
  180. package/src/lib/components/console/register-hardware-card.component.js +826 -0
  181. package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
  182. package/src/lib/components/console/registers-card.component.js +24 -5
  183. package/src/lib/components/console/registers-card.component.js.map +1 -1
  184. package/src/lib/components/console/return-actions.d.ts +38 -0
  185. package/src/lib/components/console/return-actions.js +76 -0
  186. package/src/lib/components/console/return-actions.js.map +1 -0
  187. package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
  188. package/src/lib/components/console/return-detail-dialog.component.js +718 -0
  189. package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
  190. package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
  191. package/src/lib/components/console/return-settings-card.component.js +195 -0
  192. package/src/lib/components/console/return-settings-card.component.js.map +1 -0
  193. package/src/lib/components/console/return-zones.d.ts +87 -0
  194. package/src/lib/components/console/return-zones.js +31 -0
  195. package/src/lib/components/console/return-zones.js.map +1 -0
  196. package/src/lib/components/console/returns-card.component.d.ts +45 -0
  197. package/src/lib/components/console/returns-card.component.js +159 -0
  198. package/src/lib/components/console/returns-card.component.js.map +1 -0
  199. package/src/lib/components/console/shipping-settings-card.component.js +161 -5
  200. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
  201. package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
  202. package/src/lib/components/console/shippingeasy-card.component.js +378 -0
  203. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
  204. package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
  205. package/src/lib/components/console/shipstation-card.component.js +345 -0
  206. package/src/lib/components/console/shipstation-card.component.js.map +1 -0
  207. package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
  208. package/src/lib/components/console/start-return-dialog.component.js +243 -0
  209. package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
  210. package/src/lib/components/console/stock-movements-card.component.js +2 -1
  211. package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
  212. package/src/lib/components/console/store-settings-card.component.js +2 -66
  213. package/src/lib/components/console/store-settings-card.component.js.map +1 -1
  214. package/src/lib/components/console/store-zones.d.ts +42 -0
  215. package/src/lib/components/console/store-zones.js +39 -0
  216. package/src/lib/components/console/store-zones.js.map +1 -0
  217. package/src/lib/components/order-status.d.ts +36 -0
  218. package/src/lib/components/order-status.js +502 -0
  219. package/src/lib/components/order-status.js.map +1 -0
  220. package/src/lib/components/product-detail.js +41 -2
  221. package/src/lib/components/product-detail.js.map +1 -1
  222. package/src/lib/components/return-request.d.ts +32 -0
  223. package/src/lib/components/return-request.js +576 -0
  224. package/src/lib/components/return-request.js.map +1 -0
  225. package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
  226. package/src/lib/components/storefront-payment-appearance.js +114 -0
  227. package/src/lib/components/storefront-payment-appearance.js.map +1 -0
  228. package/src/lib/components/storefront-payment-element.d.ts +57 -1
  229. package/src/lib/components/storefront-payment-element.js +332 -33
  230. package/src/lib/components/storefront-payment-element.js.map +1 -1
  231. package/src/lib/constants/order-status.d.ts +22 -0
  232. package/src/lib/constants/order-status.js +22 -0
  233. package/src/lib/constants/order-status.js.map +1 -0
  234. package/src/lib/constants/return-request.d.ts +27 -0
  235. package/src/lib/constants/return-request.js +32 -0
  236. package/src/lib/constants/return-request.js.map +1 -0
  237. package/src/lib/constants/stock-movement-query.js +2 -1
  238. package/src/lib/constants/stock-movement-query.js.map +1 -1
  239. package/src/lib/declarations.console-server.js +9 -0
  240. package/src/lib/declarations.console-server.js.map +1 -1
  241. package/src/lib/declarations.server.d.ts +2 -1
  242. package/src/lib/declarations.server.js +47 -1
  243. package/src/lib/declarations.server.js.map +1 -1
  244. package/src/lib/model/buyer-notifications.d.ts +59 -0
  245. package/src/lib/model/buyer-notifications.js +97 -0
  246. package/src/lib/model/buyer-notifications.js.map +1 -0
  247. package/src/lib/model/commerce-orders.d.ts +127 -1
  248. package/src/lib/model/commerce-orders.js +24 -15
  249. package/src/lib/model/commerce-orders.js.map +1 -1
  250. package/src/lib/model/commerce-payment-methods.d.ts +146 -0
  251. package/src/lib/model/commerce-payment-methods.js +247 -0
  252. package/src/lib/model/commerce-payment-methods.js.map +1 -0
  253. package/src/lib/model/commerce-pos-ops.d.ts +437 -0
  254. package/src/lib/model/commerce-pos-ops.js +721 -0
  255. package/src/lib/model/commerce-pos-ops.js.map +1 -0
  256. package/src/lib/model/commerce-pos.d.ts +263 -0
  257. package/src/lib/model/commerce-pos.js +375 -0
  258. package/src/lib/model/commerce-pos.js.map +1 -0
  259. package/src/lib/model/commerce-printers.d.ts +211 -0
  260. package/src/lib/model/commerce-printers.js +181 -0
  261. package/src/lib/model/commerce-printers.js.map +1 -0
  262. package/src/lib/model/commerce-receipt.d.ts +97 -0
  263. package/src/lib/model/commerce-receipt.js +180 -0
  264. package/src/lib/model/commerce-receipt.js.map +1 -0
  265. package/src/lib/model/commerce-returns.d.ts +207 -0
  266. package/src/lib/model/commerce-returns.js +300 -0
  267. package/src/lib/model/commerce-returns.js.map +1 -0
  268. package/src/lib/model/commerce-shipping.d.ts +44 -1
  269. package/src/lib/model/commerce-shipping.js +53 -9
  270. package/src/lib/model/commerce-shipping.js.map +1 -1
  271. package/src/lib/model/commerce-tax-engine.d.ts +90 -0
  272. package/src/lib/model/commerce-tax-engine.js +129 -0
  273. package/src/lib/model/commerce-tax-engine.js.map +1 -0
  274. package/src/lib/model/commerce.d.ts +88 -2
  275. package/src/lib/model/commerce.js +89 -1
  276. package/src/lib/model/commerce.js.map +1 -1
  277. package/src/lib/model/index.d.ts +15 -0
  278. package/src/lib/model/index.js +15 -0
  279. package/src/lib/model/index.js.map +1 -1
  280. package/src/lib/model/order-events.d.ts +154 -0
  281. package/src/lib/model/order-events.js +153 -0
  282. package/src/lib/model/order-events.js.map +1 -0
  283. package/src/lib/model/order-fulfillment.d.ts +117 -0
  284. package/src/lib/model/order-fulfillment.js +217 -0
  285. package/src/lib/model/order-fulfillment.js.map +1 -0
  286. package/src/lib/model/order-history.d.ts +58 -0
  287. package/src/lib/model/order-history.js +22 -0
  288. package/src/lib/model/order-history.js.map +1 -0
  289. package/src/lib/model/order-list-fields.d.ts +9 -1
  290. package/src/lib/model/order-list-fields.js +7 -1
  291. package/src/lib/model/order-list-fields.js.map +1 -1
  292. package/src/lib/model/order-shipping-export.d.ts +91 -0
  293. package/src/lib/model/order-shipping-export.js +192 -0
  294. package/src/lib/model/order-shipping-export.js.map +1 -0
  295. package/src/lib/model/order-status-view.d.ts +103 -0
  296. package/src/lib/model/order-status-view.js +156 -0
  297. package/src/lib/model/order-status-view.js.map +1 -0
  298. package/src/lib/model/order-webhooks.d.ts +142 -0
  299. package/src/lib/model/order-webhooks.js +91 -0
  300. package/src/lib/model/order-webhooks.js.map +1 -0
  301. package/src/lib/model/product-channel.d.ts +56 -0
  302. package/src/lib/model/product-channel.js +86 -0
  303. package/src/lib/model/product-channel.js.map +1 -0
  304. package/src/lib/model/product-modifiers.d.ts +80 -0
  305. package/src/lib/model/product-modifiers.js +140 -0
  306. package/src/lib/model/product-modifiers.js.map +1 -0
  307. package/src/lib/model/shippingeasy.d.ts +94 -0
  308. package/src/lib/model/shippingeasy.js +267 -0
  309. package/src/lib/model/shippingeasy.js.map +1 -0
  310. package/src/lib/model/shipstation.d.ts +125 -0
  311. package/src/lib/model/shipstation.js +399 -0
  312. package/src/lib/model/shipstation.js.map +1 -0
  313. package/src/lib/model/smart-collection-reads.d.ts +32 -0
  314. package/src/lib/model/smart-collection-reads.js +63 -0
  315. package/src/lib/model/smart-collection-reads.js.map +1 -0
  316. package/src/lib/model/tracking-url.d.ts +74 -0
  317. package/src/lib/model/tracking-url.js +159 -0
  318. package/src/lib/model/tracking-url.js.map +1 -0
  319. package/src/lib/plugin-config.d.ts +13 -0
  320. package/src/lib/plugin-config.js +77 -5
  321. package/src/lib/plugin-config.js.map +1 -1
  322. package/src/lib/plugin.js +23 -0
  323. package/src/lib/plugin.js.map +1 -1
  324. package/src/lib/pos-ops-config.d.ts +39 -0
  325. package/src/lib/pos-ops-config.js +88 -0
  326. package/src/lib/pos-ops-config.js.map +1 -0
  327. package/src/lib/printing/print-document.d.ts +106 -0
  328. package/src/lib/printing/print-document.js +464 -0
  329. package/src/lib/printing/print-document.js.map +1 -0
  330. package/src/lib/printing/product-labels.d.ts +58 -0
  331. package/src/lib/printing/product-labels.js +116 -0
  332. package/src/lib/printing/product-labels.js.map +1 -0
  333. package/src/lib/printing/render-epson.d.ts +57 -0
  334. package/src/lib/printing/render-epson.js +135 -0
  335. package/src/lib/printing/render-epson.js.map +1 -0
  336. package/src/lib/printing/render-star.d.ts +45 -0
  337. package/src/lib/printing/render-star.js +100 -0
  338. package/src/lib/printing/render-star.js.map +1 -0
  339. package/src/lib/printing/render-text.d.ts +25 -0
  340. package/src/lib/printing/render-text.js +53 -0
  341. package/src/lib/printing/render-text.js.map +1 -0
  342. package/src/lib/server/api-v1/openapi.js +27 -4
  343. package/src/lib/server/api-v1/openapi.js.map +1 -1
  344. package/src/lib/server/api-v1/order-view.d.ts +67 -0
  345. package/src/lib/server/api-v1/order-view.js +120 -0
  346. package/src/lib/server/api-v1/order-view.js.map +1 -0
  347. package/src/lib/server/api-v1/orders-and-products.js +58 -65
  348. package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
  349. package/src/lib/server/billing-webhook.js +135 -28
  350. package/src/lib/server/billing-webhook.js.map +1 -1
  351. package/src/lib/server/cancel-order.js +29 -0
  352. package/src/lib/server/cancel-order.js.map +1 -1
  353. package/src/lib/server/carrier-rates-availability.d.ts +26 -0
  354. package/src/lib/server/carrier-rates-availability.js +76 -0
  355. package/src/lib/server/carrier-rates-availability.js.map +1 -0
  356. package/src/lib/server/carrier-shipping.d.ts +84 -0
  357. package/src/lib/server/carrier-shipping.js +135 -0
  358. package/src/lib/server/carrier-shipping.js.map +1 -0
  359. package/src/lib/server/cart-checkout.d.ts +2 -0
  360. package/src/lib/server/cart-checkout.js +226 -22
  361. package/src/lib/server/cart-checkout.js.map +1 -1
  362. package/src/lib/server/checkout-extras.d.ts +64 -0
  363. package/src/lib/server/checkout-extras.js +157 -0
  364. package/src/lib/server/checkout-extras.js.map +1 -0
  365. package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
  366. package/src/lib/server/checkout-status.js +111 -0
  367. package/src/lib/server/checkout-status.js.map +1 -0
  368. package/src/lib/server/checkout.js +86 -9
  369. package/src/lib/server/checkout.js.map +1 -1
  370. package/src/lib/server/draft-order.js +34 -5
  371. package/src/lib/server/draft-order.js.map +1 -1
  372. package/src/lib/server/fulfill-order.d.ts +127 -10
  373. package/src/lib/server/fulfill-order.js +451 -49
  374. package/src/lib/server/fulfill-order.js.map +1 -1
  375. package/src/lib/server/legacy-feed.d.ts +28 -0
  376. package/src/lib/server/legacy-feed.js +52 -0
  377. package/src/lib/server/legacy-feed.js.map +1 -0
  378. package/src/lib/server/native-checkout.d.ts +34 -15
  379. package/src/lib/server/native-checkout.js +32 -17
  380. package/src/lib/server/native-checkout.js.map +1 -1
  381. package/src/lib/server/order-event-host-emit.d.ts +23 -0
  382. package/src/lib/server/order-event-host-emit.js +30 -0
  383. package/src/lib/server/order-event-host-emit.js.map +1 -0
  384. package/src/lib/server/order-event-triggers.d.ts +37 -0
  385. package/src/lib/server/order-event-triggers.js +119 -0
  386. package/src/lib/server/order-event-triggers.js.map +1 -0
  387. package/src/lib/server/order-events.d.ts +62 -0
  388. package/src/lib/server/order-events.js +109 -0
  389. package/src/lib/server/order-events.js.map +1 -0
  390. package/src/lib/server/order-history.d.ts +23 -0
  391. package/src/lib/server/order-history.js +65 -0
  392. package/src/lib/server/order-history.js.map +1 -0
  393. package/src/lib/server/order-notifications.d.ts +185 -0
  394. package/src/lib/server/order-notifications.js +567 -0
  395. package/src/lib/server/order-notifications.js.map +1 -0
  396. package/src/lib/server/order-receipt-send.d.ts +39 -0
  397. package/src/lib/server/order-receipt-send.js +151 -0
  398. package/src/lib/server/order-receipt-send.js.map +1 -0
  399. package/src/lib/server/order-status-token.d.ts +31 -0
  400. package/src/lib/server/order-status-token.js +75 -0
  401. package/src/lib/server/order-status-token.js.map +1 -0
  402. package/src/lib/server/order-status.d.ts +58 -0
  403. package/src/lib/server/order-status.js +141 -0
  404. package/src/lib/server/order-status.js.map +1 -0
  405. package/src/lib/server/order-webhooks.d.ts +108 -0
  406. package/src/lib/server/order-webhooks.js +622 -0
  407. package/src/lib/server/order-webhooks.js.map +1 -0
  408. package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
  409. package/src/lib/server/orders-shipping-prepare.js +121 -0
  410. package/src/lib/server/orders-shipping-prepare.js.map +1 -0
  411. package/src/lib/server/payment-method-domains.d.ts +209 -0
  412. package/src/lib/server/payment-method-domains.js +444 -0
  413. package/src/lib/server/payment-method-domains.js.map +1 -0
  414. package/src/lib/server/payment-methods.d.ts +77 -0
  415. package/src/lib/server/payment-methods.js +284 -0
  416. package/src/lib/server/payment-methods.js.map +1 -0
  417. package/src/lib/server/pos-auth.d.ts +50 -0
  418. package/src/lib/server/pos-auth.js +121 -0
  419. package/src/lib/server/pos-auth.js.map +1 -0
  420. package/src/lib/server/pos-customer.d.ts +49 -0
  421. package/src/lib/server/pos-customer.js +257 -0
  422. package/src/lib/server/pos-customer.js.map +1 -0
  423. package/src/lib/server/pos-display.d.ts +57 -0
  424. package/src/lib/server/pos-display.js +419 -0
  425. package/src/lib/server/pos-display.js.map +1 -0
  426. package/src/lib/server/pos-fee-month.d.ts +34 -0
  427. package/src/lib/server/pos-fee-month.js +36 -0
  428. package/src/lib/server/pos-fee-month.js.map +1 -0
  429. package/src/lib/server/pos-ops-gate.d.ts +161 -0
  430. package/src/lib/server/pos-ops-gate.js +295 -0
  431. package/src/lib/server/pos-ops-gate.js.map +1 -0
  432. package/src/lib/server/pos-ops-routes.d.ts +22 -0
  433. package/src/lib/server/pos-ops-routes.js +36 -0
  434. package/src/lib/server/pos-ops-routes.js.map +1 -0
  435. package/src/lib/server/pos-order.d.ts +1 -18
  436. package/src/lib/server/pos-order.js +222 -42
  437. package/src/lib/server/pos-order.js.map +1 -1
  438. package/src/lib/server/pos-payment.d.ts +39 -0
  439. package/src/lib/server/pos-payment.js +922 -0
  440. package/src/lib/server/pos-payment.js.map +1 -0
  441. package/src/lib/server/pos-print.d.ts +82 -0
  442. package/src/lib/server/pos-print.js +193 -0
  443. package/src/lib/server/pos-print.js.map +1 -0
  444. package/src/lib/server/pos-readers.d.ts +27 -0
  445. package/src/lib/server/pos-readers.js +276 -0
  446. package/src/lib/server/pos-readers.js.map +1 -0
  447. package/src/lib/server/pos-refund-authority.d.ts +60 -0
  448. package/src/lib/server/pos-refund-authority.js +72 -0
  449. package/src/lib/server/pos-refund-authority.js.map +1 -0
  450. package/src/lib/server/pos-return.d.ts +58 -0
  451. package/src/lib/server/pos-return.js +891 -0
  452. package/src/lib/server/pos-return.js.map +1 -0
  453. package/src/lib/server/pos-sale-stamp.d.ts +66 -0
  454. package/src/lib/server/pos-sale-stamp.js +84 -0
  455. package/src/lib/server/pos-sale-stamp.js.map +1 -0
  456. package/src/lib/server/pos-sale.d.ts +170 -0
  457. package/src/lib/server/pos-sale.js +461 -0
  458. package/src/lib/server/pos-sale.js.map +1 -0
  459. package/src/lib/server/pos-shift.d.ts +45 -0
  460. package/src/lib/server/pos-shift.js +484 -0
  461. package/src/lib/server/pos-shift.js.map +1 -0
  462. package/src/lib/server/pos-staff-pin.d.ts +26 -0
  463. package/src/lib/server/pos-staff-pin.js +339 -0
  464. package/src/lib/server/pos-staff-pin.js.map +1 -0
  465. package/src/lib/server/pos-stripe.d.ts +91 -0
  466. package/src/lib/server/pos-stripe.js +129 -0
  467. package/src/lib/server/pos-stripe.js.map +1 -0
  468. package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
  469. package/src/lib/server/pos-terminal-connection-token.js +166 -0
  470. package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
  471. package/src/lib/server/pos-terminal.d.ts +218 -0
  472. package/src/lib/server/pos-terminal.js +1014 -0
  473. package/src/lib/server/pos-terminal.js.map +1 -0
  474. package/src/lib/server/print-queue.d.ts +124 -0
  475. package/src/lib/server/print-queue.js +301 -0
  476. package/src/lib/server/print-queue.js.map +1 -0
  477. package/src/lib/server/printer-poll.d.ts +75 -0
  478. package/src/lib/server/printer-poll.js +325 -0
  479. package/src/lib/server/printer-poll.js.map +1 -0
  480. package/src/lib/server/printer-secret.d.ts +39 -0
  481. package/src/lib/server/printer-secret.js +56 -0
  482. package/src/lib/server/printer-secret.js.map +1 -0
  483. package/src/lib/server/printers.d.ts +114 -0
  484. package/src/lib/server/printers.js +546 -0
  485. package/src/lib/server/printers.js.map +1 -0
  486. package/src/lib/server/product-catalog.d.ts +42 -0
  487. package/src/lib/server/product-catalog.js +305 -0
  488. package/src/lib/server/product-catalog.js.map +1 -0
  489. package/src/lib/server/refund.js +110 -45
  490. package/src/lib/server/refund.js.map +1 -1
  491. package/src/lib/server/reserve.js +2 -0
  492. package/src/lib/server/reserve.js.map +1 -1
  493. package/src/lib/server/return-status-action.d.ts +37 -0
  494. package/src/lib/server/return-status-action.js +57 -0
  495. package/src/lib/server/return-status-action.js.map +1 -0
  496. package/src/lib/server/returns.d.ts +119 -0
  497. package/src/lib/server/returns.js +938 -0
  498. package/src/lib/server/returns.js.map +1 -0
  499. package/src/lib/server/shipment-records.d.ts +36 -0
  500. package/src/lib/server/shipment-records.js +289 -0
  501. package/src/lib/server/shipment-records.js.map +1 -0
  502. package/src/lib/server/shipping-connector-gates.d.ts +40 -0
  503. package/src/lib/server/shipping-connector-gates.js +97 -0
  504. package/src/lib/server/shipping-connector-gates.js.map +1 -0
  505. package/src/lib/server/shipping-connectors.d.ts +29 -0
  506. package/src/lib/server/shipping-connectors.js +236 -0
  507. package/src/lib/server/shipping-connectors.js.map +1 -0
  508. package/src/lib/server/shippingeasy.d.ts +238 -0
  509. package/src/lib/server/shippingeasy.js +787 -0
  510. package/src/lib/server/shippingeasy.js.map +1 -0
  511. package/src/lib/server/shipstation.d.ts +129 -0
  512. package/src/lib/server/shipstation.js +483 -0
  513. package/src/lib/server/shipstation.js.map +1 -0
  514. package/src/lib/server/site-page-resolver.d.ts +5 -0
  515. package/src/lib/server/site-page-resolver.js +156 -1
  516. package/src/lib/server/site-page-resolver.js.map +1 -1
  517. package/src/lib/server/stock-levels.d.ts +21 -0
  518. package/src/lib/server/stock-levels.js +263 -0
  519. package/src/lib/server/stock-levels.js.map +1 -0
  520. package/src/lib/server/stripe-refund.d.ts +47 -0
  521. package/src/lib/server/stripe-refund.js +87 -0
  522. package/src/lib/server/stripe-refund.js.map +1 -0
  523. package/src/lib/server/supplier-update.js +46 -5
  524. package/src/lib/server/supplier-update.js.map +1 -1
  525. package/src/lib/server/tax-engine-quote.d.ts +47 -0
  526. package/src/lib/server/tax-engine-quote.js +105 -0
  527. package/src/lib/server/tax-engine-quote.js.map +1 -0
  528. package/src/lib/server.js +138 -2
  529. package/src/lib/server.js.map +1 -1
  530. package/src/lib/site.js +12 -0
  531. package/src/lib/site.js.map +1 -1
  532. package/src/lib/subprocessors.d.ts +26 -0
  533. package/src/lib/subprocessors.js +50 -0
  534. package/src/lib/subprocessors.js.map +1 -0
  535. package/src/lib/tenant-emails.js +461 -3
  536. package/src/lib/tenant-emails.js.map +1 -1
  537. package/src/lib/testing/fake-firestore.d.ts +45 -0
  538. package/src/lib/testing/fake-firestore.js +189 -0
  539. package/src/lib/testing/fake-firestore.js.map +1 -0
  540. package/src/lib/testing/memory-firestore.d.ts +123 -0
  541. package/src/lib/testing/memory-firestore.js +274 -0
  542. package/src/lib/testing/memory-firestore.js.map +1 -0
  543. package/src/lib/testing/pos-ops-harness.d.ts +50 -0
  544. package/src/lib/testing/pos-ops-harness.js +184 -0
  545. package/src/lib/testing/pos-ops-harness.js.map +1 -0
  546. package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
  547. package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
  548. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
  549. package/src/lib/transfer/records-transfer.d.ts +11 -1
  550. package/src/lib/transfer/records-transfer.js +127 -5
  551. package/src/lib/transfer/records-transfer.js.map +1 -1
  552. package/src/lib/transfer/records.server.d.ts +9 -2
  553. package/src/lib/transfer/records.server.js +58 -7
  554. package/src/lib/transfer/records.server.js.map +1 -1
  555. package/src/lib/transfer/register-transfer-resources.js +40 -1
  556. package/src/lib/transfer/register-transfer-resources.js.map +1 -1
  557. package/src/lib/transfer/register-transfer-ui.js +4 -1
  558. package/src/lib/transfer/register-transfer-ui.js.map +1 -1
  559. package/src/lib/transfer/shipping-presets.d.ts +23 -0
  560. package/src/lib/transfer/shipping-presets.js +156 -0
  561. package/src/lib/transfer/shipping-presets.js.map +1 -0
  562. package/src/lib/transfer/tracking-transfer.d.ts +101 -0
  563. package/src/lib/transfer/tracking-transfer.js +546 -0
  564. package/src/lib/transfer/tracking-transfer.js.map +1 -0
  565. package/src/lib/transfer/tracking.server.d.ts +37 -0
  566. package/src/lib/transfer/tracking.server.js +393 -0
  567. package/src/lib/transfer/tracking.server.js.map +1 -0
  568. package/src/lib/transfer/transfer-keys.d.ts +2 -1
  569. package/src/lib/transfer/transfer-keys.js +6 -2
  570. package/src/lib/transfer/transfer-keys.js.map +1 -1
  571. package/src/lib/utils/code128.d.ts +37 -0
  572. package/src/lib/utils/code128.js +199 -0
  573. package/src/lib/utils/code128.js.map +1 -0
  574. package/src/lib/utils/order-invoice.d.ts +55 -0
  575. package/src/lib/utils/order-invoice.js +127 -0
  576. package/src/lib/utils/order-invoice.js.map +1 -0
  577. package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
  578. package/src/lib/utils/use-checkout-return-notice.js +78 -0
  579. package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
  580. package/src/lib/server/feed.js +0 -69
  581. package/src/lib/server/feed.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos/pos-tender-panel.component.tsx"],"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'use client'\n\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Divider,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useConfirmationContext } from '@aglyn/shared-ui-jsx'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as CommerceModel from '../../../model'\nimport {\n centsFromInput,\n newAttemptKey,\n posGiftCardBalance,\n posNativeBridge,\n posTender,\n PosRequestError,\n usd,\n type PosRegisterContext,\n type PosSaleSummary,\n type PosTenderAction,\n type PosTenderResult,\n} from './pos-api'\nimport { POS_TOUCH_PX } from './pos-product-grid.component'\nimport {\n PosCashDialog,\n PosFolioDialog,\n PosGiftCardDialog,\n PosKeyedCardDialog,\n PosQrDialog,\n} from './pos-tender-dialogs.component'\nimport type { PosDisplayControl } from './use-pos-display'\n\ntype User = Parameters<typeof posTender>[0]\n\nconst STATUS_LABEL: Record<CommerceModel.OrderPaymentStatus, string> = {\n pending: 'Waiting',\n succeeded: 'Approved',\n failed: 'Declined',\n canceled: 'Canceled',\n reversed: 'Returned',\n}\n\nconst STATUS_COLOR: Record<\n CommerceModel.OrderPaymentStatus,\n 'default' | 'success' | 'error' | 'warning' | 'info'\n> = {\n pending: 'info',\n succeeded: 'success',\n failed: 'error',\n canceled: 'default',\n reversed: 'warning',\n}\n\nexport interface PosTenderPanelProps {\n user: User\n hostId: string\n registerId: string\n sale: PosSaleSummary\n context: PosRegisterContext | null\n stays: any[]\n display: PosDisplayControl\n onSale: (sale: PosSaleSummary) => void\n /** The sale is voided: the basket is the cashier's again. */\n onVoided: () => void\n /** The tip chosen for the next payment, before it is taken. */\n onTipChange?: (tipCents: number) => void\n /** A PIN-switched cashier (AGL-3609) takes each payment they start. */\n cashierAssertion?: string\n notify: (message: string, variant: 'success' | 'error' | 'warning' | 'info') => void\n}\n\n/**\n * Taking payment on an open sale (AGL-3607): the balance due, every payment\n * taken so far with its live status, and the tenders. A sale can take as many\n * payments as it needs; it is paid when the balance reaches zero, and only\n * then does the server take the stock and complete it.\n */\nexport function PosTenderPanel(props: PosTenderPanelProps) {\n const { user, hostId, sale, context, display, onSale, notify } = props\n const settings = context?.settings\n const [amount, setAmount] = useState('')\n const [tipCents, setTipCents] = useState(0)\n const [busy, setBusy] = useState(false)\n const [dialog, setDialog] = useState<'cash' | 'gift' | 'folio' | null>(null)\n const [qr, setQr] = useState<{ url: string; amountCents: number } | null>(null)\n const [keyed, setKeyed] = useState<{ clientSecret: string; amountCents: number; paymentId: string } | null>(\n null,\n )\n const [readerId, setReaderId] = useState('')\n const inFlight = useRef(false)\n const { confirm } = useConfirmationContext()\n const { onTipChange } = props\n useEffect(() => {\n onTipChange?.(tipCents)\n }, [onTipChange, tipCents])\n\n const readers = (context?.readers ?? []).filter(\n (reader) => !reader.registerId || reader.registerId === props.registerId,\n )\n useEffect(() => {\n if (!readerId && readers.length) {\n setReaderId(readers.find((reader) => reader.registerId === props.registerId)?.id ?? readers[0].id)\n }\n }, [readerId, readers, props.registerId])\n\n // The amount defaults to whatever is still open; a split is the cashier\n // typing less than that.\n const typedCents = centsFromInput(amount)\n const chargeCents = typedCents > 0 ? Math.min(typedCents, sale.tenderableCents) : sale.tenderableCents\n const paid = sale.status === 'paid'\n\n const run = useCallback(\n async (\n action: PosTenderAction,\n body: Record<string, unknown> = {},\n starts = false,\n ): Promise<PosTenderResult | null> => {\n if (inFlight.current) return null\n inFlight.current = true\n setBusy(true)\n try {\n const result = await posTender(\n user,\n hostId,\n sale.orderId,\n action,\n starts && props.cashierAssertion ? { ...body, cashierAssertion: props.cashierAssertion } : body,\n starts ? newAttemptKey() : undefined,\n )\n onSale(result.sale)\n if (starts) {\n setAmount('')\n setTipCents(0)\n }\n return result\n } catch (error) {\n notify(error instanceof PosRequestError ? error.message : 'Something went wrong', 'error')\n return null\n } finally {\n inFlight.current = false\n setBusy(false)\n }\n },\n [user, hostId, sale.orderId, onSale, notify, props.cashierAssertion],\n )\n\n // Card payments still waiting are checked every two seconds: the reader,\n // the QR page and the typed card all settle on the server, and this is the\n // register's view of it (the webhook does the same thing when it lands).\n const pending = sale.payments.filter(\n (payment) => payment.status === 'pending' && CommerceModel.isCardPaymentMethod(payment.method),\n )\n const pendingKey = pending.map((payment) => payment.id).join(',')\n const latest = useRef({ user, onSale })\n latest.current = { user, onSale }\n useEffect(() => {\n if (!pendingKey) return undefined\n const timer = setInterval(async () => {\n for (const id of pendingKey.split(',')) {\n try {\n const result = await posTender(latest.current.user, hostId, sale.orderId, 'status', {\n paymentId: id,\n })\n latest.current.onSale(result.sale)\n } catch {\n // The next tick asks again.\n }\n }\n }, 2000)\n return () => clearInterval(timer)\n }, [pendingKey, hostId, sale.orderId])\n\n // The display shows \"tap your card\" while a reader payment waits, and the\n // running balance otherwise.\n const readerWaiting = pending.some((payment) => payment.method === 'card_present')\n useEffect(() => {\n if (!display.connected || display.asking) return\n if (readerWaiting) {\n void display.show({ mode: 'processing', processing: { message: 'Tap, insert or swipe your card on the reader.' } })\n }\n }, [readerWaiting, display])\n\n const askTip = useCallback(async () => {\n const base = chargeCents\n if (!(base > 0) || !settings) return\n const answer = await display.ask({\n mode: 'tip',\n tip: { baseCents: base, percentages: settings.tipPercentages, allowCustom: true },\n })\n if (answer) {\n setTipCents(answer.tipCents ?? 0)\n notify(answer.tipCents ? `Tip: ${usd(answer.tipCents)}` : 'No tip', 'info')\n }\n }, [chargeCents, settings, display, notify])\n\n const startCardPresent = useCallback(async () => {\n if (!readerId) return\n await run('card-present', { amountCents: chargeCents, tipCents, readerId }, true)\n }, [run, chargeCents, tipCents, readerId])\n\n const startBridge = useCallback(async () => {\n const bridge = posNativeBridge()\n if (!bridge) return\n const amountCents = chargeCents\n const result = await run('card-present-sdk', { amountCents, tipCents }, true)\n if (!result?.paymentIntentId || !result.clientSecret || !result.paymentId) return\n try {\n const collected = await bridge.collectCardPayment({\n paymentIntentId: result.paymentIntentId,\n clientSecret: result.clientSecret,\n amountCents: amountCents + tipCents,\n })\n if (collected.status !== 'collected') {\n notify(collected.message ?? 'The card was not taken.', 'warning')\n }\n } finally {\n // Settled by the server either way: the status poll captures an\n // authorized tap and records a decline or a cancel.\n await run('status', { paymentId: result.paymentId })\n }\n }, [run, chargeCents, tipCents, notify])\n\n const startKeyed = useCallback(async () => {\n const amountCents = chargeCents\n const result = await run('card-keyed', { amountCents, tipCents }, true)\n if (result?.clientSecret && result.paymentId) {\n setKeyed({ clientSecret: result.clientSecret, amountCents: amountCents + tipCents, paymentId: result.paymentId })\n }\n }, [run, chargeCents, tipCents])\n\n const startLink = useCallback(async () => {\n const amountCents = chargeCents\n const result = await run('card-link', { amountCents, tipCents }, true)\n const url = result?.sale.payments.find((payment) => payment.id === result.paymentId)?.checkoutUrl\n if (url) setQr({ url, amountCents: amountCents + tipCents })\n }, [run, chargeCents, tipCents])\n\n const tipOn = Boolean(settings?.tippingEnabled) && !paid\n\n return (\n <Stack spacing={1.5} sx={{ minHeight: 0 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline' }}>\n <Typography variant=\"h6\">{paid ? 'Paid' : 'Balance due'}</Typography>\n <Typography variant=\"h4\" component=\"p\">\n {usd(paid ? sale.totalCents : sale.dueCents)}\n </Typography>\n </Box>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`Total ${usd(sale.totalCents)} · paid ${usd(sale.paidCents)}` +\n (sale.tipCents ? ` · tips ${usd(sale.tipCents)}` : '')}\n </Typography>\n\n {sale.payments.length ? (\n <Stack spacing={1} aria-label=\"Payments\">\n {sale.payments.map((payment) => (\n <Box key={payment.id} sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n <Typography variant=\"body2\" sx={{ flex: 1, minWidth: 140 }}>\n {CommerceModel.describeOrderPayment({ ...payment, atMs: 0 })}\n {payment.changeCents ? ` · change ${usd(payment.changeCents)}` : ''}\n </Typography>\n <Chip size=\"small\" label={STATUS_LABEL[payment.status]} color={STATUS_COLOR[payment.status]} />\n {payment.status === 'pending' && CommerceModel.isCardPaymentMethod(payment.method) ? (\n <>\n {payment.method === 'card_link' && payment.checkoutUrl ? (\n <Button\n size=\"small\"\n onClick={() => setQr({ url: payment.checkoutUrl as string, amountCents: payment.amountCents })}\n >\n {'Show QR'}\n </Button>\n ) : null}\n {payment.method === 'card_present' && payment.livemode === false && context?.terminal?.testMode ? (\n <Button size=\"small\" onClick={() => void run('simulate', { paymentId: payment.id })}>\n {'Simulate tap'}\n </Button>\n ) : null}\n <Button size=\"small\" color=\"error\" onClick={() => void run('cancel', { paymentId: payment.id })}>\n {'Cancel'}\n </Button>\n </>\n ) : null}\n {payment.status === 'failed' && payment.method === 'card_present' && !paid ? (\n <Button size=\"small\" onClick={() => void run('retry', { paymentId: payment.id })}>\n {'Retry'}\n </Button>\n ) : null}\n {payment.failureMessage && payment.status === 'failed' ? (\n <Typography variant=\"caption\" color=\"error\" sx={{ width: 1 }}>\n {payment.failureMessage}\n </Typography>\n ) : null}\n </Box>\n ))}\n </Stack>\n ) : null}\n\n {!paid ? (\n <>\n <Divider />\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <TextField\n label=\"Amount to charge ($)\"\n placeholder={(sale.tenderableCents / 100).toFixed(2)}\n value={amount}\n onChange={(event) => setAmount(event.target.value.replace(/[^0-9.]/g, ''))}\n sx={{ flex: 1 }}\n helperText={\n typedCents > 0 && typedCents < sale.tenderableCents\n ? `Split: ${usd(sale.tenderableCents - typedCents)} stays open`\n : ' '\n }\n slotProps={{ htmlInput: { inputMode: 'decimal' } }}\n />\n </Stack>\n {tipOn ? (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', flexWrap: 'wrap', rowGap: 1 }}>\n <Typography variant=\"body2\" sx={{ mr: 1 }}>\n {`Tip ${usd(tipCents)}`}\n </Typography>\n {display.connected ? (\n <Button\n variant=\"outlined\"\n onClick={() => void askTip()}\n disabled={busy || Boolean(display.asking)}\n sx={{ minHeight: POS_TOUCH_PX }}\n >\n {display.asking === 'tip' ? 'Waiting for customer…' : 'Ask on display'}\n </Button>\n ) : null}\n {(settings?.tipPercentages ?? []).map((pct) => (\n <Button\n key={pct}\n variant={tipCents === CommerceModel.posTipFromPercent(chargeCents, pct) && tipCents > 0 ? 'contained' : 'outlined'}\n onClick={() => setTipCents(CommerceModel.posTipFromPercent(chargeCents, pct))}\n sx={{ minHeight: POS_TOUCH_PX }}\n >\n {`${pct}%`}\n </Button>\n ))}\n <Button onClick={() => setTipCents(0)} sx={{ minHeight: POS_TOUCH_PX }}>\n {'No tip'}\n </Button>\n </Stack>\n ) : null}\n <Box\n sx={{\n display: 'grid',\n gap: 1,\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\n }}\n >\n <Button\n variant=\"contained\"\n disabled={busy || chargeCents <= 0}\n onClick={() => setDialog('cash')}\n sx={{ minHeight: 56 }}\n >\n {'Cash'}\n </Button>\n {context?.terminal?.available && readers.length ? (\n <Button\n variant=\"contained\"\n disabled={busy || chargeCents <= 0 || !readerId}\n onClick={() => void startCardPresent()}\n sx={{ minHeight: 56 }}\n >\n {'Card reader'}\n </Button>\n ) : null}\n {posNativeBridge() ? (\n <Button\n variant=\"contained\"\n disabled={busy || chargeCents <= 0}\n onClick={() => void startBridge()}\n sx={{ minHeight: 56 }}\n >\n {'Tap to Pay / Bluetooth reader'}\n </Button>\n ) : null}\n {context?.publishableKey ? (\n <Button\n variant=\"outlined\"\n disabled={busy || chargeCents <= 0}\n onClick={() => void startKeyed()}\n sx={{ minHeight: 56 }}\n >\n {'Type card'}\n </Button>\n ) : null}\n <Button\n variant=\"outlined\"\n disabled={busy || chargeCents <= 0}\n onClick={() => void startLink()}\n sx={{ minHeight: 56 }}\n >\n {'Card (QR)'}\n </Button>\n <Button\n variant=\"outlined\"\n disabled={busy || chargeCents <= 0}\n onClick={() => setDialog('gift')}\n sx={{ minHeight: 56 }}\n >\n {'Gift card'}\n </Button>\n {props.stays.length ? (\n <Button\n variant=\"outlined\"\n disabled={busy || chargeCents <= 0}\n onClick={() => setDialog('folio')}\n sx={{ minHeight: 56 }}\n >\n {'Room'}\n </Button>\n ) : null}\n </Box>\n {context?.terminal?.available && readers.length > 1 ? (\n <TextField\n select\n size=\"small\"\n label=\"Card reader\"\n value={readerId}\n onChange={(event) => setReaderId(event.target.value)}\n >\n {readers.map((reader) => (\n <MenuItem key={reader.id} value={reader.id}>\n {`${reader.label}${reader.status === 'online' ? '' : ' (offline)'}`}\n </MenuItem>\n ))}\n </TextField>\n ) : null}\n {readers.some((reader) => reader.id === readerId && reader.status !== 'online') ? (\n <Alert severity=\"warning\">{'The selected card reader looks offline.'}</Alert>\n ) : null}\n <Button\n color=\"error\"\n disabled={busy}\n onClick={async () => {\n const confirmed = await confirm({\n title: 'Void this sale?',\n description:\n 'Every payment taken on it is handed back: cards are refunded, gift ' +\n 'cards re-credited and room charges removed. Hand back any cash.',\n confirmationText: 'Void sale',\n confirmationButtonProps: { color: 'error' },\n })\n .then(() => true)\n .catch(() => false)\n if (!confirmed) return\n const result = await run('void')\n if (result) {\n notify('Sale voided', 'info')\n props.onVoided()\n }\n }}\n sx={{ minHeight: POS_TOUCH_PX, alignSelf: 'flex-start' }}\n >\n {'Void sale'}\n </Button>\n </>\n ) : null}\n\n <PosCashDialog\n open={dialog === 'cash'}\n dueCents={chargeCents}\n tipCents={tipCents}\n busy={busy}\n onClose={() => setDialog(null)}\n onTake={async (tenderedCents) => {\n const result = await run(\n 'cash',\n {\n tenderedCents,\n ...(typedCents > 0 ? { amountCents: chargeCents } : {}),\n tipCents,\n },\n true,\n )\n if (result) {\n setDialog(null)\n const change = result.sale.payments.find((payment) => payment.id === result.paymentId)?.changeCents\n if (change) notify(`Change due: ${usd(change)}`, 'success')\n }\n }}\n />\n <PosGiftCardDialog\n open={dialog === 'gift'}\n busy={busy}\n onClose={() => setDialog(null)}\n onCheck={async (code) => {\n try {\n return await posGiftCardBalance(user, hostId, code)\n } catch (error) {\n notify(error instanceof PosRequestError ? error.message : 'Could not read that card', 'warning')\n return null\n }\n }}\n onApply={async (code) => {\n const result = await run('gift-card', { code, ...(typedCents > 0 ? { amountCents: chargeCents } : {}) }, true)\n if (result) setDialog(null)\n }}\n />\n <PosFolioDialog\n open={dialog === 'folio'}\n amountCents={chargeCents}\n stays={props.stays}\n busy={busy}\n onClose={() => setDialog(null)}\n onCharge={async (reservationId) => {\n const result = await run(\n 'folio',\n { reservationId, ...(typedCents > 0 ? { amountCents: chargeCents } : {}) },\n true,\n )\n if (result) setDialog(null)\n }}\n />\n <PosQrDialog url={qr?.url ?? ''} amountCents={qr?.amountCents ?? 0} onClose={() => setQr(null)} />\n <PosKeyedCardDialog\n clientSecret={keyed?.clientSecret ?? ''}\n publishableKey={context?.publishableKey ?? ''}\n amountCents={keyed?.amountCents ?? 0}\n onClose={async () => {\n const open = keyed\n setKeyed(null)\n // Closing without paying releases the amount for another tender.\n if (open) await run('cancel', { paymentId: open.paymentId })\n }}\n onConfirmed={async () => {\n const open = keyed\n setKeyed(null)\n if (open) await run('status', { paymentId: open.paymentId })\n }}\n />\n </Stack>\n )\n}\nPosTenderPanel.displayName = 'PosTenderPanel'\n"],"names":["Alert","Box","Button","Chip","Divider","MenuItem","Stack","TextField","Typography","useConfirmationContext","useCallback","useEffect","useRef","useState","CommerceModel","centsFromInput","newAttemptKey","posGiftCardBalance","posNativeBridge","posTender","PosRequestError","usd","POS_TOUCH_PX","PosCashDialog","PosFolioDialog","PosGiftCardDialog","PosKeyedCardDialog","PosQrDialog","STATUS_LABEL","pending","succeeded","failed","canceled","reversed","STATUS_COLOR","PosTenderPanel","props","context","user","hostId","sale","display","onSale","notify","settings","amount","setAmount","tipCents","setTipCents","busy","setBusy","dialog","setDialog","qr","setQr","keyed","setKeyed","readerId","setReaderId","inFlight","confirm","onTipChange","readers","filter","reader","registerId","length","find","id","typedCents","chargeCents","Math","min","tenderableCents","paid","status","run","action","body","starts","current","result","orderId","cashierAssertion","undefined","error","message","payments","payment","isCardPaymentMethod","method","pendingKey","map","join","latest","timer","setInterval","split","paymentId","clearInterval","readerWaiting","some","connected","asking","show","mode","processing","askTip","base","answer","ask","tip","baseCents","percentages","tipPercentages","allowCustom","startCardPresent","amountCents","startBridge","bridge","paymentIntentId","clientSecret","collected","collectCardPayment","startKeyed","startLink","url","checkoutUrl","tipOn","Boolean","tippingEnabled","spacing","sx","minHeight","justifyContent","alignItems","variant","component","totalCents","dueCents","color","paidCents","aria-label","gap","flexWrap","flex","minWidth","describeOrderPayment","atMs","changeCents","size","label","onClick","livemode","terminal","testMode","failureMessage","width","direction","placeholder","toFixed","value","onChange","event","target","replace","helperText","slotProps","htmlInput","inputMode","rowGap","mr","disabled","pct","posTipFromPercent","gridTemplateColumns","available","publishableKey","stays","select","severity","confirmed","title","description","confirmationText","confirmationButtonProps","then","catch","onVoided","alignSelf","open","onClose","onTake","tenderedCents","change","onCheck","code","onApply","onCharge","reservationId","onConfirmed","displayName"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type * as CommerceModel from '../../../model';
2
+ import { posDisplayCall } from './pos-api';
3
+ type User = Parameters<typeof posDisplayCall>[0];
4
+ /**
5
+ * The tip the customer screen shows beside the sale (AGL-3608): the tips
6
+ * already on its payments, plus one chosen for the payment about to be taken
7
+ * (on the display or by the cashier), which the ledger does not hold until
8
+ * that payment is recorded. Without the second part the screen read the
9
+ * sale's total right after the customer added a tip, short by that tip.
10
+ */
11
+ export declare function posDisplayTipCents(sale: {
12
+ status: string;
13
+ tipCents: number;
14
+ } | null | undefined, pendingTipCents: number): number;
15
+ /** How long the register waits for the customer to answer a prompt. */
16
+ export declare const POS_DISPLAY_ANSWER_TIMEOUT_MS: number;
17
+ export interface PosDisplayControl {
18
+ /** A display for this register polled within the last two minutes. */
19
+ connected: boolean;
20
+ /** The prompt the register is waiting on, if any. */
21
+ asking: CommerceModel.PosDisplayMode | null;
22
+ /** Shows something on the display with no answer expected. */
23
+ show: (state: Omit<CommerceModel.PosDisplayState, 'updatedAtMs' | 'promptId'>) => Promise<void>;
24
+ /**
25
+ * Asks the customer (a tip or a receipt) and resolves with their answer,
26
+ * or null when the cashier cancels or the customer does not answer.
27
+ */
28
+ ask: (state: Omit<CommerceModel.PosDisplayState, 'updatedAtMs' | 'promptId'>) => Promise<CommerceModel.PosDisplayResponse | null>;
29
+ cancelAsk: () => void;
30
+ /** A fresh six-digit pairing code for a new display. */
31
+ pairingCode: () => Promise<{
32
+ code: string;
33
+ expiresAtMs: number;
34
+ }>;
35
+ }
36
+ /**
37
+ * The register's half of the customer display (AGL-3608). It writes the
38
+ * display's state through `commerce/pos-display` and reads answers back the
39
+ * same way; nothing here talks to Firestore, because the display state is
40
+ * server-only (it can hold a customer's typed email address).
41
+ */
42
+ export declare function usePosDisplay(user: User | null | undefined, hostId: string, registerId: string): PosDisplayControl;
43
+ export {};
@@ -0,0 +1,161 @@
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
+ */ 'use client';
17
+ import { _ as _extends } from "@swc/helpers/_/_extends";
18
+ import { useCallback, useEffect, useRef, useState } from "react";
19
+ import { newAttemptKey, posDisplayCall } from "./pos-api.js";
20
+ /**
21
+ * The tip the customer screen shows beside the sale (AGL-3608): the tips
22
+ * already on its payments, plus one chosen for the payment about to be taken
23
+ * (on the display or by the cashier), which the ledger does not hold until
24
+ * that payment is recorded. Without the second part the screen read the
25
+ * sale's total right after the customer added a tip, short by that tip.
26
+ */ export function posDisplayTipCents(sale, pendingTipCents) {
27
+ if (!sale) return 0;
28
+ const pending = sale.status === 'paid' ? 0 : Math.max(0, Math.round(pendingTipCents) || 0);
29
+ return Math.max(0, sale.tipCents) + pending;
30
+ }
31
+ /** How long the register waits for the customer to answer a prompt. */ export const POS_DISPLAY_ANSWER_TIMEOUT_MS = 3 * 60 * 1000;
32
+ /**
33
+ * The register's half of the customer display (AGL-3608). It writes the
34
+ * display's state through `commerce/pos-display` and reads answers back the
35
+ * same way; nothing here talks to Firestore, because the display state is
36
+ * server-only (it can hold a customer's typed email address).
37
+ */ export function usePosDisplay(user, hostId, registerId) {
38
+ var _ref;
39
+ const [connected, setConnected] = useState(false);
40
+ const [asking, setAsking] = useState(null);
41
+ const cancelRef = useRef(null);
42
+ // The poll reads the latest session through a ref and is keyed on the uid,
43
+ // so a refreshed user object does not restart it.
44
+ const userRef = useRef(user);
45
+ userRef.current = user;
46
+ const uid = (_ref = user == null ? void 0 : user.uid) != null ? _ref : '';
47
+ useEffect(()=>{
48
+ if (!uid || !registerId) return undefined;
49
+ let active = true;
50
+ const check = async ()=>{
51
+ const signedIn = userRef.current;
52
+ if (!signedIn) return;
53
+ try {
54
+ const result = await posDisplayCall(signedIn, {
55
+ action: 'state',
56
+ hostId,
57
+ registerId
58
+ }, 'GET');
59
+ if (active) setConnected(Boolean(result.connected));
60
+ } catch (unused) {
61
+ if (active) setConnected(false);
62
+ }
63
+ };
64
+ void check();
65
+ const timer = setInterval(check, 15000);
66
+ return ()=>{
67
+ active = false;
68
+ clearInterval(timer);
69
+ };
70
+ }, [
71
+ uid,
72
+ hostId,
73
+ registerId
74
+ ]);
75
+ const show = useCallback(async (state)=>{
76
+ if (!user || !registerId || !connected) return;
77
+ await posDisplayCall(user, {
78
+ action: 'push',
79
+ hostId,
80
+ registerId,
81
+ state
82
+ }).catch(()=>undefined);
83
+ }, [
84
+ user,
85
+ hostId,
86
+ registerId,
87
+ connected
88
+ ]);
89
+ const cancelAsk = useCallback(()=>{
90
+ cancelRef.current == null ? void 0 : cancelRef.current.call(cancelRef);
91
+ }, []);
92
+ const ask = useCallback(async (state)=>{
93
+ if (!user || !registerId) return null;
94
+ cancelRef.current == null ? void 0 : cancelRef.current.call(cancelRef);
95
+ const promptId = newAttemptKey().slice(0, 32);
96
+ await posDisplayCall(user, {
97
+ action: 'push',
98
+ hostId,
99
+ registerId,
100
+ state: _extends({}, state, {
101
+ promptId
102
+ })
103
+ });
104
+ setAsking(state.mode);
105
+ return await new Promise((resolve)=>{
106
+ let done = false;
107
+ const finish = (answer)=>{
108
+ if (done) return;
109
+ done = true;
110
+ clearInterval(timer);
111
+ clearTimeout(timeout);
112
+ cancelRef.current = null;
113
+ setAsking(null);
114
+ resolve(answer);
115
+ };
116
+ const timer = setInterval(async ()=>{
117
+ try {
118
+ var _result_state;
119
+ const result = await posDisplayCall(user, {
120
+ action: 'state',
121
+ hostId,
122
+ registerId
123
+ }, 'GET');
124
+ const response = (_result_state = result.state) == null ? void 0 : _result_state.response;
125
+ if (response && response.promptId === promptId) finish(response);
126
+ } catch (unused) {
127
+ // A missed poll is retried on the next tick.
128
+ }
129
+ }, 1000);
130
+ const timeout = setTimeout(()=>finish(null), POS_DISPLAY_ANSWER_TIMEOUT_MS);
131
+ cancelRef.current = ()=>finish(null);
132
+ });
133
+ }, [
134
+ user,
135
+ hostId,
136
+ registerId
137
+ ]);
138
+ const pairingCode = useCallback(async ()=>{
139
+ if (!user) throw new Error('Not signed in');
140
+ const result = await posDisplayCall(user, {
141
+ action: 'pairing-code',
142
+ hostId,
143
+ registerId
144
+ });
145
+ return result;
146
+ }, [
147
+ user,
148
+ hostId,
149
+ registerId
150
+ ]);
151
+ return {
152
+ connected,
153
+ asking,
154
+ show,
155
+ ask,
156
+ cancelAsk,
157
+ pairingCode
158
+ };
159
+ }
160
+
161
+ //# sourceMappingURL=use-pos-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos/use-pos-display.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'use client'\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport type * as CommerceModel from '../../../model'\nimport { newAttemptKey, posDisplayCall } from './pos-api'\n\ntype User = Parameters<typeof posDisplayCall>[0]\n\n/**\n * The tip the customer screen shows beside the sale (AGL-3608): the tips\n * already on its payments, plus one chosen for the payment about to be taken\n * (on the display or by the cashier), which the ledger does not hold until\n * that payment is recorded. Without the second part the screen read the\n * sale's total right after the customer added a tip, short by that tip.\n */\nexport function posDisplayTipCents(\n sale: { status: string; tipCents: number } | null | undefined,\n pendingTipCents: number,\n): number {\n if (!sale) return 0\n const pending = sale.status === 'paid' ? 0 : Math.max(0, Math.round(pendingTipCents) || 0)\n return Math.max(0, sale.tipCents) + pending\n}\n\n/** How long the register waits for the customer to answer a prompt. */\nexport const POS_DISPLAY_ANSWER_TIMEOUT_MS = 3 * 60 * 1000\n\nexport interface PosDisplayControl {\n /** A display for this register polled within the last two minutes. */\n connected: boolean\n /** The prompt the register is waiting on, if any. */\n asking: CommerceModel.PosDisplayMode | null\n /** Shows something on the display with no answer expected. */\n show: (state: Omit<CommerceModel.PosDisplayState, 'updatedAtMs' | 'promptId'>) => Promise<void>\n /**\n * Asks the customer (a tip or a receipt) and resolves with their answer,\n * or null when the cashier cancels or the customer does not answer.\n */\n ask: (\n state: Omit<CommerceModel.PosDisplayState, 'updatedAtMs' | 'promptId'>,\n ) => Promise<CommerceModel.PosDisplayResponse | null>\n cancelAsk: () => void\n /** A fresh six-digit pairing code for a new display. */\n pairingCode: () => Promise<{ code: string; expiresAtMs: number }>\n}\n\n/**\n * The register's half of the customer display (AGL-3608). It writes the\n * display's state through `commerce/pos-display` and reads answers back the\n * same way; nothing here talks to Firestore, because the display state is\n * server-only (it can hold a customer's typed email address).\n */\nexport function usePosDisplay(\n user: User | null | undefined,\n hostId: string,\n registerId: string,\n): PosDisplayControl {\n const [connected, setConnected] = useState(false)\n const [asking, setAsking] = useState<CommerceModel.PosDisplayMode | null>(null)\n const cancelRef = useRef<(() => void) | null>(null)\n // The poll reads the latest session through a ref and is keyed on the uid,\n // so a refreshed user object does not restart it.\n const userRef = useRef(user)\n userRef.current = user\n const uid = (user as { uid?: string } | null | undefined)?.uid ?? ''\n\n useEffect(() => {\n if (!uid || !registerId) return undefined\n let active = true\n const check = async () => {\n const signedIn = userRef.current\n if (!signedIn) return\n try {\n const result = await posDisplayCall<{ connected: boolean }>(\n signedIn,\n { action: 'state', hostId, registerId },\n 'GET',\n )\n if (active) setConnected(Boolean(result.connected))\n } catch {\n if (active) setConnected(false)\n }\n }\n void check()\n const timer = setInterval(check, 15_000)\n return () => {\n active = false\n clearInterval(timer)\n }\n }, [uid, hostId, registerId])\n\n const show = useCallback<PosDisplayControl['show']>(\n async (state) => {\n if (!user || !registerId || !connected) return\n await posDisplayCall(user, { action: 'push', hostId, registerId, state }).catch(() => undefined)\n },\n [user, hostId, registerId, connected],\n )\n\n const cancelAsk = useCallback(() => {\n cancelRef.current?.()\n }, [])\n\n const ask = useCallback<PosDisplayControl['ask']>(\n async (state) => {\n if (!user || !registerId) return null\n cancelRef.current?.()\n const promptId = newAttemptKey().slice(0, 32)\n await posDisplayCall(user, {\n action: 'push',\n hostId,\n registerId,\n state: { ...state, promptId },\n })\n setAsking(state.mode)\n return await new Promise<CommerceModel.PosDisplayResponse | null>((resolve) => {\n let done = false\n const finish = (answer: CommerceModel.PosDisplayResponse | null) => {\n if (done) return\n done = true\n clearInterval(timer)\n clearTimeout(timeout)\n cancelRef.current = null\n setAsking(null)\n resolve(answer)\n }\n const timer = setInterval(async () => {\n try {\n const result = await posDisplayCall<{\n state: CommerceModel.PosDisplayState | null\n }>(user, { action: 'state', hostId, registerId }, 'GET')\n const response = result.state?.response\n if (response && response.promptId === promptId) finish(response)\n } catch {\n // A missed poll is retried on the next tick.\n }\n }, 1000)\n const timeout = setTimeout(() => finish(null), POS_DISPLAY_ANSWER_TIMEOUT_MS)\n cancelRef.current = () => finish(null)\n })\n },\n [user, hostId, registerId],\n )\n\n const pairingCode = useCallback(async () => {\n if (!user) throw new Error('Not signed in')\n const result = await posDisplayCall<{ code: string; expiresAtMs: number }>(user, {\n action: 'pairing-code',\n hostId,\n registerId,\n })\n return result\n }, [user, hostId, registerId])\n\n return { connected, asking, show, ask, cancelAsk, pairingCode }\n}\n"],"names":["useCallback","useEffect","useRef","useState","newAttemptKey","posDisplayCall","posDisplayTipCents","sale","pendingTipCents","pending","status","Math","max","round","tipCents","POS_DISPLAY_ANSWER_TIMEOUT_MS","usePosDisplay","user","hostId","registerId","connected","setConnected","asking","setAsking","cancelRef","userRef","current","uid","undefined","active","check","signedIn","result","action","Boolean","timer","setInterval","clearInterval","show","state","catch","cancelAsk","ask","promptId","slice","mode","Promise","resolve","done","finish","answer","clearTimeout","timeout","response","setTimeout","pairingCode","Error"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface PosDevicesCardProps {
2
+ hostId: string;
3
+ }
4
+ /**
5
+ * The register's hardware (AGL-3607, AGL-3608): Stripe Terminal card readers
6
+ * — registered with the code a reader shows, bound to a register, renamed,
7
+ * removed — and the customer displays paired to each register, which can be
8
+ * signed out. Readers appear only where card readers are offered at all.
9
+ */
10
+ export declare function PosDevicesCard({ hostId }: PosDevicesCardProps): import("react").JSX.Element;
11
+ export declare namespace PosDevicesCard {
12
+ var displayName: string;
13
+ }
14
+ export default PosDevicesCard;