@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,114 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { PluginApiHandler, PluginApiRequest } from '@aglyn/aglyn/server';
18
+ import { type PosPrinter, type PrinterBrand, type PrintReport } from '../model/commerce-printers';
19
+ import { type ReceiptData } from '../model/commerce-receipt';
20
+ import type { HostOrder } from '../model/commerce-orders';
21
+ /**
22
+ * `POST /api/commerce/printers` (AGL-3619): a register's cloud receipt
23
+ * printers, from the Hardware card, and the jobs a manager sends them by hand
24
+ * (a test page, a reprint, "open drawer").
25
+ *
26
+ * Every write to `printers` and `printJobs` is here or in the poll routes:
27
+ * the Firestore rules deny both to every client, so a printer's identity, its
28
+ * secret's version and its queue cannot be edited around this gate.
29
+ */
30
+ /** A counter seldom has more than two; the cap keeps a typo loop from minting dozens. */
31
+ export declare const MAX_PRINTERS_PER_REGISTER = 4;
32
+ interface PrinterManager {
33
+ uid: string;
34
+ hostId: string;
35
+ }
36
+ /**
37
+ * The register's gate (`pos-order.ts`): `admin` or `editor` on THIS site,
38
+ * `managePos` on the member's permissions, and `pos` on the owning plan.
39
+ */
40
+ export declare function authorizePrinterManager(req: PluginApiRequest, hostId: string): Promise<{
41
+ ok: true;
42
+ manager: PrinterManager;
43
+ } | {
44
+ ok: false;
45
+ status: number;
46
+ error: string;
47
+ }>;
48
+ /** The editable settings in a create or update body, validated. */
49
+ export declare function printerSettingsFromBody(body: Record<string, any>, brand: PrinterBrand): {
50
+ ok: true;
51
+ patch: Partial<PosPrinter>;
52
+ } | {
53
+ ok: false;
54
+ error: string;
55
+ };
56
+ /** What the card shows a manager to paste into the printer's web configuration. */
57
+ export declare function printerCredentials(hostId: string, printerId: string, printer: PosPrinter): {
58
+ printerId: string;
59
+ brand: PrinterBrand;
60
+ pollUrl: string;
61
+ deviceId: string;
62
+ };
63
+ /** What a receipt needs from the site, the location and the register. */
64
+ export declare function receiptContextFor(hostId: string, order: Pick<HostOrder, 'locationId'> & {
65
+ registerId?: string;
66
+ }, firestore?: any): Promise<{
67
+ timeZone: string;
68
+ registerName?: string;
69
+ storeLines?: string[];
70
+ storeName: string;
71
+ }>;
72
+ /** The receipt an order prints, with the site's name, address and time zone. */
73
+ export declare function orderReceipt(hostId: string, orderId: string, order: HostOrder & Record<string, any>, options?: {
74
+ banner?: string;
75
+ firestore?: any;
76
+ }): Promise<ReceiptData>;
77
+ /**
78
+ * Queues work for a register's printers (AGL-3619): a receipt for every
79
+ * printer set to auto-print, and a drawer kick on the FIRST printer set to
80
+ * kick the drawer (a till has one drawer; two kicks would be one too many).
81
+ * When the receipt printer is also the drawer printer, the kick rides the
82
+ * receipt job so the drawer opens as the receipt starts.
83
+ *
84
+ * `kitchenTicket` prints on every printer set to print kitchen tickets, and
85
+ * only when asked for: a Z-report or a paid-out slip is not an order to make.
86
+ *
87
+ * `receiptChoice` is what the customer said at the register: `none` (or a
88
+ * receipt sent by email or text) prints no customer receipt; `print` prints
89
+ * one even when no printer auto-prints, on the register's first printer.
90
+ * Absent, the printers' own "every sale" setting decides.
91
+ *
92
+ * `idempotencyKey` names the cause (a sale's order id, a shift event's id): a
93
+ * cause delivered twice queues its jobs once.
94
+ */
95
+ export declare function queueRegisterPrint(input: {
96
+ hostId: string;
97
+ registerId: string;
98
+ receipt?: ReceiptData;
99
+ /** A shift report (AGL-3609): printed once, on the register's receipt printer. */
100
+ report?: PrintReport;
101
+ kitchenTicket?: ReceiptData;
102
+ receiptChoice?: 'print' | 'none';
103
+ openDrawer?: boolean;
104
+ orderId?: string;
105
+ reason: string;
106
+ idempotencyKey?: string;
107
+ createdBy?: string;
108
+ firestore?: any;
109
+ nowMs?: number;
110
+ }): Promise<{
111
+ jobIds: string[];
112
+ }>;
113
+ export declare const printersHandler: PluginApiHandler;
114
+ export {};
@@ -0,0 +1,546 @@
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 * as Aglyn from "@aglyn/aglyn/server";
18
+ import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
19
+ import { resolveSiteTimeZone } from "@aglyn/aglyn/app-utils/collection-entry-date";
20
+ import { firebaseAdmin, getOrgForHost } from "@aglyn/tenant-data-admin";
21
+ import { resolveOrgPermissions } from "@aglyn/tenant-runtime/org-permissions";
22
+ import { normalizePrinterDeviceId, PRINTER_BRANDS } from "../model/commerce-printers.js";
23
+ import { receiptDataFromOrder } from "../model/commerce-receipt.js";
24
+ import { enqueuePrintJob, printJobsRef, printersRef } from "./print-queue.js";
25
+ import { printerPollUrl } from "./printer-secret.js";
26
+ import { isRefusedIdToken } from "@aglyn/tenant-data-admin/server/id-token-refusal";
27
+ /**
28
+ * `POST /api/commerce/printers` (AGL-3619): a register's cloud receipt
29
+ * printers, from the Hardware card, and the jobs a manager sends them by hand
30
+ * (a test page, a reprint, "open drawer").
31
+ *
32
+ * Every write to `printers` and `printJobs` is here or in the poll routes:
33
+ * the Firestore rules deny both to every client, so a printer's identity, its
34
+ * secret's version and its queue cannot be edited around this gate.
35
+ */ /** A counter seldom has more than two; the cap keeps a typo loop from minting dozens. */ export const MAX_PRINTERS_PER_REGISTER = 4;
36
+ /**
37
+ * The register's gate (`pos-order.ts`): `admin` or `editor` on THIS site,
38
+ * `managePos` on the member's permissions, and `pos` on the owning plan.
39
+ */ export async function authorizePrinterManager(req, hostId) {
40
+ var _req_headers_authorization, _host_get;
41
+ const authorization = String((_req_headers_authorization = req.headers.authorization) != null ? _req_headers_authorization : '');
42
+ const idToken = authorization.startsWith('Bearer ') ? authorization.slice(7) : '';
43
+ if (!idToken) return {
44
+ ok: false,
45
+ status: 401,
46
+ error: 'Unauthenticated'
47
+ };
48
+ if (!/^[A-Za-z0-9_-]{1,128}$/.test(hostId)) return {
49
+ ok: false,
50
+ status: 400,
51
+ error: 'Missing hostId'
52
+ };
53
+ let uid;
54
+ try {
55
+ uid = (await firebaseAdmin.app().auth().verifyIdToken(idToken)).uid;
56
+ } catch (error) {
57
+ if (!isRefusedIdToken(error)) throw error;
58
+ return {
59
+ ok: false,
60
+ status: 401,
61
+ error: 'Unauthenticated'
62
+ };
63
+ }
64
+ const host = await firebaseAdmin.app().firestore().collection('hosts').doc(hostId).get();
65
+ if (!host.exists) return {
66
+ ok: false,
67
+ status: 404,
68
+ error: 'Unknown site'
69
+ };
70
+ const role = ((_host_get = host.get('memberRoles')) != null ? _host_get : {})[uid];
71
+ if (role !== 'admin' && role !== 'editor') return {
72
+ ok: false,
73
+ status: 403,
74
+ error: 'Not permitted'
75
+ };
76
+ const membership = await resolveOrgPermissions(uid, {
77
+ hostId
78
+ });
79
+ if (!membership.permissions.managePos) return {
80
+ ok: false,
81
+ status: 403,
82
+ error: 'Not permitted'
83
+ };
84
+ const owner = await getOrgForHost(hostId);
85
+ if (!Aglyn.checkEntitlement(owner == null ? void 0 : owner.org, 'pos')) {
86
+ return {
87
+ ok: false,
88
+ status: 403,
89
+ error: 'POS requires the Pro plan or above'
90
+ };
91
+ }
92
+ return {
93
+ ok: true,
94
+ manager: {
95
+ uid,
96
+ hostId
97
+ }
98
+ };
99
+ }
100
+ function requestBody(req) {
101
+ if (typeof req.body === 'string') {
102
+ try {
103
+ const parsed = JSON.parse(req.body);
104
+ return parsed && typeof parsed === 'object' ? parsed : {};
105
+ } catch (unused) {
106
+ return {};
107
+ }
108
+ }
109
+ return req.body && typeof req.body === 'object' ? req.body : {};
110
+ }
111
+ const text = (value, max)=>String(value != null ? value : '').trim().slice(0, max);
112
+ /** The editable settings in a create or update body, validated. */ export function printerSettingsFromBody(body, brand) {
113
+ const patch = {};
114
+ if ('name' in body) {
115
+ const name = text(body['name'], 60);
116
+ if (!name) return {
117
+ ok: false,
118
+ error: 'Name the printer'
119
+ };
120
+ patch.name = name;
121
+ }
122
+ if ('model' in body) patch.model = text(body['model'], 40);
123
+ if ('deviceId' in body) {
124
+ const deviceId = normalizePrinterDeviceId(brand, body['deviceId']);
125
+ if (!deviceId) {
126
+ return {
127
+ ok: false,
128
+ error: brand === 'star' ? 'Enter the printer’s MAC address, e.g. 00:11:62:12:34:56' : 'Enter the Server Direct Print ID: 1-30 letters, digits, dots, dashes or underscores'
129
+ };
130
+ }
131
+ patch.deviceId = deviceId;
132
+ }
133
+ if ('paperWidthMm' in body) patch.paperWidthMm = Number(body['paperWidthMm']) === 58 ? 58 : 80;
134
+ if ('autoPrintReceipts' in body) patch.autoPrintReceipts = body['autoPrintReceipts'] === true;
135
+ if ('kickDrawer' in body) patch.kickDrawer = body['kickDrawer'] === true;
136
+ if ('kitchenTickets' in body) patch.kitchenTickets = body['kitchenTickets'] === true;
137
+ if ('logoKey' in body) {
138
+ const logoKey = text(body['logoKey'], 10);
139
+ const valid = !logoKey || (brand === 'star' ? /^\d{1,3}$/.test(logoKey) && Number(logoKey) >= 1 && Number(logoKey) <= 255 : /^\d{2,3}\s*,\s*\d{2,3}$/.test(logoKey));
140
+ if (!valid) {
141
+ return {
142
+ ok: false,
143
+ error: brand === 'star' ? 'The logo number is 1-255, as stored with Star Quick Setup Utility' : 'The logo key is two numbers, e.g. 48,48, as stored with Epson TM Utility'
144
+ };
145
+ }
146
+ patch.logoKey = logoKey.replace(/\s+/g, '');
147
+ }
148
+ return {
149
+ ok: true,
150
+ patch
151
+ };
152
+ }
153
+ /** What the card shows a manager to paste into the printer's web configuration. */ export function printerCredentials(hostId, printerId, printer) {
154
+ return {
155
+ printerId,
156
+ brand: printer.brand,
157
+ pollUrl: printerPollUrl(printer.brand, hostId, printerId, printer.secretVersion),
158
+ deviceId: printer.deviceId
159
+ };
160
+ }
161
+ /** What a receipt needs from the site, the location and the register. */ export async function receiptContextFor(hostId, order, firestore = firebaseAdmin.app().firestore()) {
162
+ var _ref, _host_get, _register_get, _ref1;
163
+ var _location_get;
164
+ const hostRef = firestore.collection('hosts').doc(hostId);
165
+ const [host, owner, location, register] = await Promise.all([
166
+ hostRef.get(),
167
+ getOrgForHost(hostId).catch(()=>null),
168
+ order.locationId ? hostRef.collection('locations').doc(order.locationId).get() : null,
169
+ order.registerId ? hostRef.collection('registers').doc(order.registerId).get() : null
170
+ ]);
171
+ const storeLines = [
172
+ location == null ? void 0 : (_location_get = location.get) == null ? void 0 : _location_get.call(location, 'address')
173
+ ].filter(Boolean).map(String);
174
+ return _extends({
175
+ storeName: String((_ref = (_host_get = host.get('displayName')) != null ? _host_get : host.get('subdomain')) != null ? _ref : 'Receipt')
176
+ }, storeLines.length ? {
177
+ storeLines
178
+ } : {}, (register == null ? void 0 : register.exists) ? {
179
+ registerName: String((_register_get = register.get('name')) != null ? _register_get : '')
180
+ } : {}, {
181
+ timeZone: resolveSiteTimeZone(owner == null ? void 0 : owner.org, (_ref1 = host.data == null ? void 0 : host.data.call(host)) != null ? _ref1 : {})
182
+ });
183
+ }
184
+ /** The receipt an order prints, with the site's name, address and time zone. */ export async function orderReceipt(hostId, orderId, order, options = {}) {
185
+ const context = await receiptContextFor(hostId, order, options.firestore);
186
+ return receiptDataFromOrder(orderId, order, _extends({}, context, options.banner ? {
187
+ banner: options.banner
188
+ } : {}));
189
+ }
190
+ /**
191
+ * Queues work for a register's printers (AGL-3619): a receipt for every
192
+ * printer set to auto-print, and a drawer kick on the FIRST printer set to
193
+ * kick the drawer (a till has one drawer; two kicks would be one too many).
194
+ * When the receipt printer is also the drawer printer, the kick rides the
195
+ * receipt job so the drawer opens as the receipt starts.
196
+ *
197
+ * `kitchenTicket` prints on every printer set to print kitchen tickets, and
198
+ * only when asked for: a Z-report or a paid-out slip is not an order to make.
199
+ *
200
+ * `receiptChoice` is what the customer said at the register: `none` (or a
201
+ * receipt sent by email or text) prints no customer receipt; `print` prints
202
+ * one even when no printer auto-prints, on the register's first printer.
203
+ * Absent, the printers' own "every sale" setting decides.
204
+ *
205
+ * `idempotencyKey` names the cause (a sale's order id, a shift event's id): a
206
+ * cause delivered twice queues its jobs once.
207
+ */ export async function queueRegisterPrint(input) {
208
+ var _input_firestore;
209
+ const firestore = (_input_firestore = input.firestore) != null ? _input_firestore : firebaseAdmin.app().firestore();
210
+ if (!input.registerId) return {
211
+ jobIds: []
212
+ };
213
+ const snapshot = await printersRef(firestore, input.hostId).where('registerId', '==', input.registerId).limit(MAX_PRINTERS_PER_REGISTER).get();
214
+ const printers = snapshot.docs.map((doc)=>({
215
+ id: doc.id,
216
+ printer: doc.data()
217
+ })).sort((a, b)=>a.printer.createdAtMs - b.printer.createdAtMs || a.id.localeCompare(b.id));
218
+ const drawerPrinter = input.openDrawer ? printers.find((entry)=>entry.printer.kickDrawer) : undefined;
219
+ const jobIds = [];
220
+ const key = (suffix)=>input.idempotencyKey ? `${input.reason}-${input.idempotencyKey}-${suffix}`.replace(/[^A-Za-z0-9_-]/g, '').slice(0, 120) : undefined;
221
+ let drawerHandled = false;
222
+ const receiptPrinters = input.receiptChoice === 'none' ? [] : printers.filter((entry)=>entry.printer.autoPrintReceipts);
223
+ if (input.receiptChoice === 'print' && !receiptPrinters.length && printers.length) {
224
+ receiptPrinters.push(printers[0]);
225
+ }
226
+ if (input.receipt) {
227
+ for (const entry of receiptPrinters){
228
+ const openDrawer = (drawerPrinter == null ? void 0 : drawerPrinter.id) === entry.id;
229
+ drawerHandled || (drawerHandled = openDrawer);
230
+ const { jobId } = await enqueuePrintJob(firestore, input.hostId, entry.id, {
231
+ kind: 'receipt',
232
+ receipt: input.receipt,
233
+ openDrawer,
234
+ orderId: input.orderId,
235
+ registerId: input.registerId,
236
+ reason: input.reason,
237
+ createdBy: input.createdBy,
238
+ jobId: key(entry.id)
239
+ }, input.nowMs);
240
+ jobIds.push(jobId);
241
+ }
242
+ }
243
+ if (input.report) {
244
+ var _printers_find;
245
+ // One copy, on the printer that prints receipts — or the till's only one.
246
+ const target = (_printers_find = printers.find((entry)=>entry.printer.autoPrintReceipts)) != null ? _printers_find : printers[0];
247
+ if (target) {
248
+ const { jobId } = await enqueuePrintJob(firestore, input.hostId, target.id, {
249
+ kind: 'report',
250
+ report: input.report,
251
+ registerId: input.registerId,
252
+ reason: input.reason,
253
+ createdBy: input.createdBy,
254
+ jobId: key(`${target.id}-report`)
255
+ }, input.nowMs);
256
+ jobIds.push(jobId);
257
+ }
258
+ }
259
+ if (input.kitchenTicket) {
260
+ for (const entry of printers){
261
+ if (!entry.printer.kitchenTickets) continue;
262
+ const { jobId } = await enqueuePrintJob(firestore, input.hostId, entry.id, {
263
+ kind: 'kitchen',
264
+ receipt: input.kitchenTicket,
265
+ orderId: input.orderId,
266
+ registerId: input.registerId,
267
+ reason: input.reason,
268
+ createdBy: input.createdBy,
269
+ jobId: key(`${entry.id}-kitchen`)
270
+ }, input.nowMs);
271
+ jobIds.push(jobId);
272
+ }
273
+ }
274
+ if (drawerPrinter && !drawerHandled) {
275
+ const { jobId } = await enqueuePrintJob(firestore, input.hostId, drawerPrinter.id, {
276
+ kind: 'drawer',
277
+ orderId: input.orderId,
278
+ registerId: input.registerId,
279
+ reason: input.reason,
280
+ createdBy: input.createdBy,
281
+ jobId: key(`${drawerPrinter.id}-drawer`)
282
+ }, input.nowMs);
283
+ jobIds.push(jobId);
284
+ }
285
+ return {
286
+ jobIds
287
+ };
288
+ }
289
+ export const printersHandler = async (req, res)=>{
290
+ if (req.method !== 'POST') return res.status(405).json({
291
+ error: 'Method not allowed'
292
+ });
293
+ const body = requestBody(req);
294
+ const hostId = text(body['hostId'], 128);
295
+ const gate = await authorizePrinterManager(req, hostId);
296
+ if ('error' in gate) return res.status(gate.status).json({
297
+ error: gate.error
298
+ });
299
+ const { uid } = gate.manager;
300
+ const firestore = firebaseAdmin.app().firestore();
301
+ const printers = printersRef(firestore, hostId);
302
+ const action = text(body['action'], 20);
303
+ const printerId = text(body['printerId'], 128);
304
+ const loadPrinter = async ()=>{
305
+ if (!/^[A-Za-z0-9_-]{1,128}$/.test(printerId)) return null;
306
+ const snapshot = await printers.doc(printerId).get();
307
+ return snapshot.exists ? {
308
+ ref: snapshot.ref,
309
+ printer: snapshot.data()
310
+ } : null;
311
+ };
312
+ try {
313
+ switch(action){
314
+ case 'create':
315
+ {
316
+ var _settings_patch_model, _settings_patch_paperWidthMm, _settings_patch_autoPrintReceipts, _settings_patch_kickDrawer, _settings_patch_kitchenTickets;
317
+ const brand = text(body['brand'], 10);
318
+ if (!PRINTER_BRANDS.includes(brand)) return res.status(400).json({
319
+ error: 'Choose Star or Epson'
320
+ });
321
+ const registerId = text(body['registerId'], 128);
322
+ const register = /^[A-Za-z0-9_-]{1,128}$/.test(registerId) ? await firestore.collection('hosts').doc(hostId).collection('registers').doc(registerId).get() : null;
323
+ if (!(register == null ? void 0 : register.exists)) return res.status(404).json({
324
+ error: 'Unknown register'
325
+ });
326
+ const settings = printerSettingsFromBody(_extends({
327
+ name: '',
328
+ deviceId: ''
329
+ }, body), brand);
330
+ if ('error' in settings) return res.status(400).json({
331
+ error: settings.error
332
+ });
333
+ const siblings = await printers.where('registerId', '==', registerId).limit(MAX_PRINTERS_PER_REGISTER).get();
334
+ if (siblings.size >= MAX_PRINTERS_PER_REGISTER) {
335
+ return res.status(409).json({
336
+ error: `A register can have up to ${MAX_PRINTERS_PER_REGISTER} printers.`
337
+ });
338
+ }
339
+ const duplicate = await printers.where('deviceId', '==', settings.patch.deviceId).limit(1).get();
340
+ if (!duplicate.empty) {
341
+ return res.status(409).json({
342
+ error: 'That printer is already added to this site.'
343
+ });
344
+ }
345
+ const ref = printers.doc(createResourceUid());
346
+ const printer = _extends({
347
+ name: settings.patch.name,
348
+ brand,
349
+ model: (_settings_patch_model = settings.patch.model) != null ? _settings_patch_model : '',
350
+ deviceId: settings.patch.deviceId,
351
+ registerId,
352
+ paperWidthMm: (_settings_patch_paperWidthMm = settings.patch.paperWidthMm) != null ? _settings_patch_paperWidthMm : 80,
353
+ autoPrintReceipts: (_settings_patch_autoPrintReceipts = settings.patch.autoPrintReceipts) != null ? _settings_patch_autoPrintReceipts : true,
354
+ kickDrawer: (_settings_patch_kickDrawer = settings.patch.kickDrawer) != null ? _settings_patch_kickDrawer : false,
355
+ kitchenTickets: (_settings_patch_kitchenTickets = settings.patch.kitchenTickets) != null ? _settings_patch_kitchenTickets : false
356
+ }, settings.patch.logoKey ? {
357
+ logoKey: settings.patch.logoKey
358
+ } : {}, {
359
+ secretVersion: 1,
360
+ createdAtMs: Date.now(),
361
+ createdBy: uid
362
+ });
363
+ await ref.set(printer);
364
+ return res.status(200).json(printerCredentials(hostId, ref.id, printer));
365
+ }
366
+ case 'update':
367
+ {
368
+ const loaded = await loadPrinter();
369
+ if (!loaded) return res.status(404).json({
370
+ error: 'Unknown printer'
371
+ });
372
+ const settings = printerSettingsFromBody(body, loaded.printer.brand);
373
+ if ('error' in settings) return res.status(400).json({
374
+ error: settings.error
375
+ });
376
+ if (settings.patch.deviceId && settings.patch.deviceId !== loaded.printer.deviceId) {
377
+ const duplicate = await printers.where('deviceId', '==', settings.patch.deviceId).limit(1).get();
378
+ if (!duplicate.empty) {
379
+ return res.status(409).json({
380
+ error: 'That printer is already added to this site.'
381
+ });
382
+ }
383
+ }
384
+ await loaded.ref.set(_extends({}, settings.patch, {
385
+ updatedAtMs: Date.now()
386
+ }), {
387
+ merge: true
388
+ });
389
+ return res.status(200).json({
390
+ ok: true
391
+ });
392
+ }
393
+ case 'remove':
394
+ {
395
+ const loaded = await loadPrinter();
396
+ if (!loaded) return res.status(200).json({
397
+ ok: true
398
+ });
399
+ const active = await printJobsRef(firestore, hostId).where('printerId', '==', printerId).where('status', 'in', [
400
+ 'queued',
401
+ 'printing'
402
+ ]).orderBy('createdAtMs', 'asc').limit(50).get();
403
+ const batch = firestore.batch();
404
+ for (const doc of active.docs){
405
+ batch.update(doc.ref, {
406
+ status: 'canceled',
407
+ finishedAtMs: Date.now()
408
+ });
409
+ }
410
+ batch.delete(loaded.ref);
411
+ await batch.commit();
412
+ return res.status(200).json({
413
+ ok: true
414
+ });
415
+ }
416
+ case 'credentials':
417
+ {
418
+ const loaded = await loadPrinter();
419
+ if (!loaded) return res.status(404).json({
420
+ error: 'Unknown printer'
421
+ });
422
+ return res.status(200).json(printerCredentials(hostId, printerId, loaded.printer));
423
+ }
424
+ case 'regenerate':
425
+ {
426
+ const loaded = await loadPrinter();
427
+ if (!loaded) return res.status(404).json({
428
+ error: 'Unknown printer'
429
+ });
430
+ const secretVersion = Math.max(1, Number(loaded.printer.secretVersion) || 1) + 1;
431
+ await loaded.ref.set({
432
+ secretVersion,
433
+ updatedAtMs: Date.now()
434
+ }, {
435
+ merge: true
436
+ });
437
+ return res.status(200).json(printerCredentials(hostId, printerId, _extends({}, loaded.printer, {
438
+ secretVersion
439
+ })));
440
+ }
441
+ case 'test':
442
+ case 'drawer':
443
+ {
444
+ const loaded = await loadPrinter();
445
+ if (!loaded) return res.status(404).json({
446
+ error: 'Unknown printer'
447
+ });
448
+ const context = action === 'test' ? await receiptContextFor(hostId, {}, firestore) : null;
449
+ const { jobId } = await enqueuePrintJob(firestore, hostId, printerId, _extends({
450
+ kind: action,
451
+ registerId: loaded.printer.registerId,
452
+ reason: action === 'test' ? 'test' : 'open_drawer',
453
+ createdBy: uid
454
+ }, context ? {
455
+ storeName: context.storeName,
456
+ timeZone: context.timeZone
457
+ } : {}, action === 'test' && body['openDrawer'] === true ? {
458
+ openDrawer: true
459
+ } : {}));
460
+ return res.status(200).json({
461
+ jobId
462
+ });
463
+ }
464
+ case 'reprint':
465
+ {
466
+ const orderId = text(body['orderId'], 128);
467
+ if (!/^[A-Za-z0-9_-]{1,128}$/.test(orderId)) return res.status(400).json({
468
+ error: 'Missing orderId'
469
+ });
470
+ const orderSnapshot = await firestore.collection('hosts').doc(hostId).collection('orders').doc(orderId).get();
471
+ if (!orderSnapshot.exists) return res.status(404).json({
472
+ error: 'Unknown order'
473
+ });
474
+ const order = orderSnapshot.data();
475
+ let target = printerId ? await loadPrinter() : null;
476
+ if (!target && order['registerId']) {
477
+ var _candidates_docs_find;
478
+ const candidates = await printers.where('registerId', '==', String(order['registerId'])).limit(MAX_PRINTERS_PER_REGISTER).get();
479
+ const doc = (_candidates_docs_find = candidates.docs.find((d)=>d.get('autoPrintReceipts'))) != null ? _candidates_docs_find : candidates.docs[0];
480
+ if (doc) target = {
481
+ ref: doc.ref,
482
+ printer: doc.data()
483
+ };
484
+ }
485
+ if (!target) return res.status(404).json({
486
+ error: 'No printer for this register'
487
+ });
488
+ const receipt = await orderReceipt(hostId, orderId, order, {
489
+ banner: 'REPRINT',
490
+ firestore
491
+ });
492
+ const { jobId } = await enqueuePrintJob(firestore, hostId, target.ref.id, {
493
+ kind: 'receipt',
494
+ receipt,
495
+ orderId,
496
+ registerId: target.printer.registerId,
497
+ reason: 'reprint',
498
+ createdBy: uid
499
+ });
500
+ return res.status(200).json({
501
+ jobId
502
+ });
503
+ }
504
+ case 'cancel':
505
+ {
506
+ const jobId = text(body['jobId'], 128);
507
+ if (!/^[A-Za-z0-9_-]{1,128}$/.test(jobId)) return res.status(400).json({
508
+ error: 'Missing jobId'
509
+ });
510
+ const ref = printJobsRef(firestore, hostId).doc(jobId);
511
+ const outcome = await firestore.runTransaction(async (transaction)=>{
512
+ const snapshot = await transaction.get(ref);
513
+ if (!snapshot.exists) return 'missing';
514
+ if (snapshot.get('status') !== 'queued') return 'started';
515
+ transaction.update(ref, {
516
+ status: 'canceled',
517
+ finishedAtMs: Date.now()
518
+ });
519
+ return 'canceled';
520
+ });
521
+ if (outcome === 'missing') return res.status(404).json({
522
+ error: 'Unknown job'
523
+ });
524
+ if (outcome === 'started') {
525
+ return res.status(409).json({
526
+ error: 'The printer already has it.'
527
+ });
528
+ }
529
+ return res.status(200).json({
530
+ ok: true
531
+ });
532
+ }
533
+ default:
534
+ return res.status(400).json({
535
+ error: 'Unknown action'
536
+ });
537
+ }
538
+ } catch (error) {
539
+ console.error('[printers]', action, error);
540
+ return res.status(500).json({
541
+ error: 'The printer could not be updated'
542
+ });
543
+ }
544
+ };
545
+
546
+ //# sourceMappingURL=printers.js.map