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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/README.md +1 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/cart.js +25 -12
  4. package/src/lib/components/cart.js.map +1 -1
  5. package/src/lib/components/commerce-console-page.js +70 -13
  6. package/src/lib/components/commerce-console-page.js.map +1 -1
  7. package/src/lib/components/console/order-detail-dialog.component.js +2 -1
  8. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  9. package/src/lib/components/console/payment-methods-card.component.js +1 -1
  10. package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
  11. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
  12. package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
  13. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
  14. package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
  15. package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
  16. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
  17. package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
  18. package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
  19. package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
  20. package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
  21. package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
  22. package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
  23. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
  24. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
  25. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
  26. package/src/lib/components/console/pos/use-pos-display.js +50 -0
  27. package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
  28. package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
  29. package/src/lib/components/console/pos-cellular-control.component.js +211 -0
  30. package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
  31. package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
  32. package/src/lib/components/console/pos-devices-card.component.js +47 -15
  33. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  34. package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
  35. package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
  36. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
  37. package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
  38. package/src/lib/components/console/pos-display-page.component.js +44 -2
  39. package/src/lib/components/console/pos-display-page.component.js.map +1 -1
  40. package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
  41. package/src/lib/components/console/pos-hardware-card.component.js +157 -36
  42. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
  43. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
  44. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
  45. package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
  46. package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
  47. package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
  49. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
  50. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
  51. package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
  52. package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
  53. package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
  54. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
  55. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
  57. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
  58. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
  59. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
  60. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
  61. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  62. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
  63. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
  64. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
  65. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
  66. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
  67. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
  68. package/src/lib/components/console/pos-page.component.d.ts +1 -1
  69. package/src/lib/components/console/pos-page.component.js +63 -12
  70. package/src/lib/components/console/pos-page.component.js.map +1 -1
  71. package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
  72. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
  73. package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
  74. package/src/lib/components/console/product-check-in-fields.component.js +60 -14
  75. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
  76. package/src/lib/components/console/product-editor-dialog.component.js +44 -1
  77. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  78. package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
  79. package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
  80. package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
  81. package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
  82. package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
  83. package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
  84. package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
  85. package/src/lib/components/console/product-register-fields.component.js +31 -2
  86. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  87. package/src/lib/components/console/products-hub-card.component.js +11 -2
  88. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  89. package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
  90. package/src/lib/components/console/register-hardware-card.component.js +56 -27
  91. package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
  92. package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
  93. package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
  94. package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
  95. package/src/lib/components/console/reservations-card.component.d.ts +9 -0
  96. package/src/lib/components/console/reservations-card.component.js +158 -23
  97. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  98. package/src/lib/components/console/shippingeasy-card.component.js +1 -1
  99. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
  100. package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
  101. package/src/lib/components/console/shipstation-card.component.js +3 -3
  102. package/src/lib/components/console/shipstation-card.component.js.map +1 -1
  103. package/src/lib/components/product-detail.d.ts +4 -0
  104. package/src/lib/components/product-detail.js +40 -5
  105. package/src/lib/components/product-detail.js.map +1 -1
  106. package/src/lib/components/product-reviews.js +28 -11
  107. package/src/lib/components/product-reviews.js.map +1 -1
  108. package/src/lib/components/reservation-widget.js +28 -5
  109. package/src/lib/components/reservation-widget.js.map +1 -1
  110. package/src/lib/components/use-day-picker.d.ts +25 -0
  111. package/src/lib/components/use-day-picker.js +57 -0
  112. package/src/lib/components/use-day-picker.js.map +1 -0
  113. package/src/lib/constants/operator-alerts.d.ts +55 -0
  114. package/src/lib/constants/operator-alerts.js +156 -1
  115. package/src/lib/constants/operator-alerts.js.map +1 -1
  116. package/src/lib/declarations.console-server.js +54 -1
  117. package/src/lib/declarations.console-server.js.map +1 -1
  118. package/src/lib/declarations.d.ts +4 -2
  119. package/src/lib/declarations.js +11 -4
  120. package/src/lib/declarations.js.map +1 -1
  121. package/src/lib/declarations.server.js +9 -0
  122. package/src/lib/declarations.server.js.map +1 -1
  123. package/src/lib/model/commerce-cart.d.ts +9 -1
  124. package/src/lib/model/commerce-cart.js +4 -3
  125. package/src/lib/model/commerce-cart.js.map +1 -1
  126. package/src/lib/model/commerce-check-in-product.d.ts +26 -0
  127. package/src/lib/model/commerce-check-in-product.js +64 -2
  128. package/src/lib/model/commerce-check-in-product.js.map +1 -1
  129. package/src/lib/model/commerce-check-in-record.d.ts +127 -0
  130. package/src/lib/model/commerce-check-in-record.js +36 -0
  131. package/src/lib/model/commerce-check-in-record.js.map +1 -0
  132. package/src/lib/model/commerce-check-in.d.ts +91 -87
  133. package/src/lib/model/commerce-check-in.js +186 -62
  134. package/src/lib/model/commerce-check-in.js.map +1 -1
  135. package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
  136. package/src/lib/model/commerce-kiosk-offer.js +35 -0
  137. package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
  138. package/src/lib/model/commerce-orders.d.ts +76 -0
  139. package/src/lib/model/commerce-orders.js +6 -0
  140. package/src/lib/model/commerce-orders.js.map +1 -1
  141. package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
  142. package/src/lib/model/commerce-pos-day-report.js +39 -2
  143. package/src/lib/model/commerce-pos-day-report.js.map +1 -1
  144. package/src/lib/model/commerce-pos-offline.d.ts +1 -1
  145. package/src/lib/model/commerce-pos-offline.js +6 -1
  146. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  147. package/src/lib/model/commerce-pos-ops.js +3 -2
  148. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  149. package/src/lib/model/commerce-pos.d.ts +36 -3
  150. package/src/lib/model/commerce-pos.js +14 -6
  151. package/src/lib/model/commerce-pos.js.map +1 -1
  152. package/src/lib/model/commerce-receipt.js +3 -2
  153. package/src/lib/model/commerce-receipt.js.map +1 -1
  154. package/src/lib/model/commerce-reservations.d.ts +69 -4
  155. package/src/lib/model/commerce-reservations.js +57 -5
  156. package/src/lib/model/commerce-reservations.js.map +1 -1
  157. package/src/lib/model/commerce.d.ts +66 -0
  158. package/src/lib/model/commerce.js +15 -0
  159. package/src/lib/model/commerce.js.map +1 -1
  160. package/src/lib/model/order-list-fields.d.ts +11 -0
  161. package/src/lib/model/order-list-fields.js +17 -1
  162. package/src/lib/model/order-list-fields.js.map +1 -1
  163. package/src/lib/model/own-store-tax-summary.d.ts +152 -0
  164. package/src/lib/model/own-store-tax-summary.js +288 -0
  165. package/src/lib/model/own-store-tax-summary.js.map +1 -0
  166. package/src/lib/model/plugin-permissions.d.ts +67 -0
  167. package/src/lib/model/plugin-permissions.js +224 -7
  168. package/src/lib/model/plugin-permissions.js.map +1 -1
  169. package/src/lib/model/pos-cellular.d.ts +223 -0
  170. package/src/lib/model/pos-cellular.js +293 -0
  171. package/src/lib/model/pos-cellular.js.map +1 -0
  172. package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
  173. package/src/lib/model/pos-hardware-in-person.js +224 -0
  174. package/src/lib/model/pos-hardware-in-person.js.map +1 -0
  175. package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
  176. package/src/lib/model/pos-hardware-tax-summary.js +225 -0
  177. package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
  178. package/src/lib/model/pos-hardware-terms.d.ts +74 -0
  179. package/src/lib/model/pos-hardware-terms.js +115 -0
  180. package/src/lib/model/pos-hardware-terms.js.map +1 -0
  181. package/src/lib/model/pos-hardware.d.ts +349 -7
  182. package/src/lib/model/pos-hardware.js +291 -20
  183. package/src/lib/model/pos-hardware.js.map +1 -1
  184. package/src/lib/model/product-write.d.ts +10 -0
  185. package/src/lib/model/product-write.js +4 -2
  186. package/src/lib/model/product-write.js.map +1 -1
  187. package/src/lib/plugin.js +16 -0
  188. package/src/lib/plugin.js.map +1 -1
  189. package/src/lib/server/billing-webhook.js +25 -1
  190. package/src/lib/server/billing-webhook.js.map +1 -1
  191. package/src/lib/server/cancel-order.js +7 -5
  192. package/src/lib/server/cancel-order.js.map +1 -1
  193. package/src/lib/server/cart-checkout.js +20 -8
  194. package/src/lib/server/cart-checkout.js.map +1 -1
  195. package/src/lib/server/cart.js +29 -0
  196. package/src/lib/server/cart.js.map +1 -1
  197. package/src/lib/server/checkout.js +42 -13
  198. package/src/lib/server/checkout.js.map +1 -1
  199. package/src/lib/server/collection-membership.d.ts +4 -0
  200. package/src/lib/server/collection-membership.js +5 -10
  201. package/src/lib/server/collection-membership.js.map +1 -1
  202. package/src/lib/server/commerce-site-keys.d.ts +29 -0
  203. package/src/lib/server/commerce-site-keys.js +40 -0
  204. package/src/lib/server/commerce-site-keys.js.map +1 -0
  205. package/src/lib/server/draft-order.js +8 -5
  206. package/src/lib/server/draft-order.js.map +1 -1
  207. package/src/lib/server/fulfill-order.js +7 -5
  208. package/src/lib/server/fulfill-order.js.map +1 -1
  209. package/src/lib/server/gift-cards.js +8 -5
  210. package/src/lib/server/gift-cards.js.map +1 -1
  211. package/src/lib/server/local-fulfillment-status.js +9 -6
  212. package/src/lib/server/local-fulfillment-status.js.map +1 -1
  213. package/src/lib/server/member-post.js +6 -5
  214. package/src/lib/server/member-post.js.map +1 -1
  215. package/src/lib/server/membership-admin-password.d.ts +4 -2
  216. package/src/lib/server/membership-admin-password.js +10 -8
  217. package/src/lib/server/membership-admin-password.js.map +1 -1
  218. package/src/lib/server/membership-admin-remove.d.ts +7 -5
  219. package/src/lib/server/membership-admin-remove.js +9 -9
  220. package/src/lib/server/membership-admin-remove.js.map +1 -1
  221. package/src/lib/server/order-notifications.js +5 -2
  222. package/src/lib/server/order-notifications.js.map +1 -1
  223. package/src/lib/server/order-print.js +7 -5
  224. package/src/lib/server/order-print.js.map +1 -1
  225. package/src/lib/server/order-receipt-send.js +8 -5
  226. package/src/lib/server/order-receipt-send.js.map +1 -1
  227. package/src/lib/server/orders-shipping-prepare.js +9 -6
  228. package/src/lib/server/orders-shipping-prepare.js.map +1 -1
  229. package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
  230. package/src/lib/server/own-store-tax-return-source.js +312 -0
  231. package/src/lib/server/own-store-tax-return-source.js.map +1 -0
  232. package/src/lib/server/payment-methods.js +13 -9
  233. package/src/lib/server/payment-methods.js.map +1 -1
  234. package/src/lib/server/pos-auth.d.ts +37 -6
  235. package/src/lib/server/pos-auth.js +40 -15
  236. package/src/lib/server/pos-auth.js.map +1 -1
  237. package/src/lib/server/pos-cellular-billing.d.ts +81 -0
  238. package/src/lib/server/pos-cellular-billing.js +711 -0
  239. package/src/lib/server/pos-cellular-billing.js.map +1 -0
  240. package/src/lib/server/pos-cellular-notify.d.ts +47 -0
  241. package/src/lib/server/pos-cellular-notify.js +150 -0
  242. package/src/lib/server/pos-cellular-notify.js.map +1 -0
  243. package/src/lib/server/pos-cellular.d.ts +88 -0
  244. package/src/lib/server/pos-cellular.js +339 -0
  245. package/src/lib/server/pos-cellular.js.map +1 -0
  246. package/src/lib/server/pos-check-in.d.ts +5 -1
  247. package/src/lib/server/pos-check-in.js +296 -28
  248. package/src/lib/server/pos-check-in.js.map +1 -1
  249. package/src/lib/server/pos-day-report.js +29 -3
  250. package/src/lib/server/pos-day-report.js.map +1 -1
  251. package/src/lib/server/pos-display.d.ts +16 -0
  252. package/src/lib/server/pos-display.js +129 -2
  253. package/src/lib/server/pos-display.js.map +1 -1
  254. package/src/lib/server/pos-hardware-admin.d.ts +10 -1
  255. package/src/lib/server/pos-hardware-admin.js +250 -84
  256. package/src/lib/server/pos-hardware-admin.js.map +1 -1
  257. package/src/lib/server/pos-hardware-attach.d.ts +105 -0
  258. package/src/lib/server/pos-hardware-attach.js +443 -0
  259. package/src/lib/server/pos-hardware-attach.js.map +1 -0
  260. package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
  261. package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
  262. package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
  263. package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
  264. package/src/lib/server/pos-hardware-buyer-record.js +86 -0
  265. package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
  266. package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
  267. package/src/lib/server/pos-hardware-cancel.js +147 -0
  268. package/src/lib/server/pos-hardware-cancel.js.map +1 -0
  269. package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
  270. package/src/lib/server/pos-hardware-closure-notices.js +85 -0
  271. package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
  272. package/src/lib/server/pos-hardware-closure.d.ts +60 -0
  273. package/src/lib/server/pos-hardware-closure.js +153 -0
  274. package/src/lib/server/pos-hardware-closure.js.map +1 -0
  275. package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
  276. package/src/lib/server/pos-hardware-in-person.js +236 -0
  277. package/src/lib/server/pos-hardware-in-person.js.map +1 -0
  278. package/src/lib/server/pos-hardware-notify.d.ts +40 -2
  279. package/src/lib/server/pos-hardware-notify.js +195 -14
  280. package/src/lib/server/pos-hardware-notify.js.map +1 -1
  281. package/src/lib/server/pos-hardware-readers.d.ts +115 -0
  282. package/src/lib/server/pos-hardware-readers.js +430 -0
  283. package/src/lib/server/pos-hardware-readers.js.map +1 -0
  284. package/src/lib/server/pos-hardware-returns.d.ts +116 -0
  285. package/src/lib/server/pos-hardware-returns.js +502 -0
  286. package/src/lib/server/pos-hardware-returns.js.map +1 -0
  287. package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
  288. package/src/lib/server/pos-hardware-sale-fields.js +44 -0
  289. package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
  290. package/src/lib/server/pos-hardware-sale.d.ts +54 -0
  291. package/src/lib/server/pos-hardware-sale.js +369 -0
  292. package/src/lib/server/pos-hardware-sale.js.map +1 -0
  293. package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
  294. package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
  295. package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
  296. package/src/lib/server/pos-hardware-terms.d.ts +64 -0
  297. package/src/lib/server/pos-hardware-terms.js +154 -0
  298. package/src/lib/server/pos-hardware-terms.js.map +1 -0
  299. package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
  300. package/src/lib/server/pos-hardware-user-eraser.js +31 -7
  301. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
  302. package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
  303. package/src/lib/server/pos-hardware-webhook.js +51 -6
  304. package/src/lib/server/pos-hardware-webhook.js.map +1 -1
  305. package/src/lib/server/pos-hardware.d.ts +74 -1
  306. package/src/lib/server/pos-hardware.js +175 -10
  307. package/src/lib/server/pos-hardware.js.map +1 -1
  308. package/src/lib/server/pos-kiosk.d.ts +2 -0
  309. package/src/lib/server/pos-kiosk.js +17 -12
  310. package/src/lib/server/pos-kiosk.js.map +1 -1
  311. package/src/lib/server/pos-offline-card-order.d.ts +64 -0
  312. package/src/lib/server/pos-offline-card-order.js +102 -0
  313. package/src/lib/server/pos-offline-card-order.js.map +1 -0
  314. package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
  315. package/src/lib/server/pos-offline-card-reconcile.js +215 -18
  316. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
  317. package/src/lib/server/pos-offline-sync.d.ts +39 -0
  318. package/src/lib/server/pos-offline-sync.js +190 -55
  319. package/src/lib/server/pos-offline-sync.js.map +1 -1
  320. package/src/lib/server/pos-ops-gate.d.ts +15 -4
  321. package/src/lib/server/pos-ops-gate.js +42 -9
  322. package/src/lib/server/pos-ops-gate.js.map +1 -1
  323. package/src/lib/server/pos-ops-routes.js +24 -0
  324. package/src/lib/server/pos-ops-routes.js.map +1 -1
  325. package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
  326. package/src/lib/server/pos-order-refund-ids.js +31 -0
  327. package/src/lib/server/pos-order-refund-ids.js.map +1 -0
  328. package/src/lib/server/pos-order.js +52 -49
  329. package/src/lib/server/pos-order.js.map +1 -1
  330. package/src/lib/server/pos-payment.js +1 -1
  331. package/src/lib/server/pos-payment.js.map +1 -1
  332. package/src/lib/server/pos-reader-splash-admin.js +30 -32
  333. package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
  334. package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
  335. package/src/lib/server/pos-reader-splash-images-route.js +113 -0
  336. package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
  337. package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
  338. package/src/lib/server/pos-reader-splash-images.js +123 -0
  339. package/src/lib/server/pos-reader-splash-images.js.map +1 -0
  340. package/src/lib/server/pos-reader-splash.d.ts +68 -1
  341. package/src/lib/server/pos-reader-splash.js +182 -11
  342. package/src/lib/server/pos-reader-splash.js.map +1 -1
  343. package/src/lib/server/pos-readers.d.ts +29 -0
  344. package/src/lib/server/pos-readers.js +134 -35
  345. package/src/lib/server/pos-readers.js.map +1 -1
  346. package/src/lib/server/pos-return.d.ts +10 -0
  347. package/src/lib/server/pos-return.js +26 -1
  348. package/src/lib/server/pos-return.js.map +1 -1
  349. package/src/lib/server/pos-sale.js +6 -1
  350. package/src/lib/server/pos-sale.js.map +1 -1
  351. package/src/lib/server/pos-shift.js +11 -0
  352. package/src/lib/server/pos-shift.js.map +1 -1
  353. package/src/lib/server/pos-staff-pin.js +25 -20
  354. package/src/lib/server/pos-staff-pin.js.map +1 -1
  355. package/src/lib/server/pos-terminal.d.ts +14 -4
  356. package/src/lib/server/pos-terminal.js +34 -38
  357. package/src/lib/server/pos-terminal.js.map +1 -1
  358. package/src/lib/server/printers.d.ts +7 -3
  359. package/src/lib/server/printers.js +18 -12
  360. package/src/lib/server/printers.js.map +1 -1
  361. package/src/lib/server/product-drafts.d.ts +11 -1
  362. package/src/lib/server/product-drafts.js +12 -8
  363. package/src/lib/server/product-drafts.js.map +1 -1
  364. package/src/lib/server/product.d.ts +15 -1
  365. package/src/lib/server/product.js +16 -3
  366. package/src/lib/server/product.js.map +1 -1
  367. package/src/lib/server/products-write.d.ts +26 -2
  368. package/src/lib/server/products-write.js +19 -7
  369. package/src/lib/server/products-write.js.map +1 -1
  370. package/src/lib/server/refund.js +34 -11
  371. package/src/lib/server/refund.js.map +1 -1
  372. package/src/lib/server/reservation-availability-query.d.ts +8 -0
  373. package/src/lib/server/reservation-availability-query.js +11 -1
  374. package/src/lib/server/reservation-availability-query.js.map +1 -1
  375. package/src/lib/server/reservation-availability.d.ts +1 -1
  376. package/src/lib/server/reservation-availability.js +7 -2
  377. package/src/lib/server/reservation-availability.js.map +1 -1
  378. package/src/lib/server/reservation-guests.d.ts +32 -0
  379. package/src/lib/server/reservation-guests.js +285 -0
  380. package/src/lib/server/reservation-guests.js.map +1 -0
  381. package/src/lib/server/reservation-walk-in.d.ts +11 -1
  382. package/src/lib/server/reservation-walk-in.js +56 -12
  383. package/src/lib/server/reservation-walk-in.js.map +1 -1
  384. package/src/lib/server/reserve.js +18 -5
  385. package/src/lib/server/reserve.js.map +1 -1
  386. package/src/lib/server/returns.js +9 -6
  387. package/src/lib/server/returns.js.map +1 -1
  388. package/src/lib/server/reviews.d.ts +22 -2
  389. package/src/lib/server/reviews.js +88 -20
  390. package/src/lib/server/reviews.js.map +1 -1
  391. package/src/lib/server/shipping-connectors.js +10 -11
  392. package/src/lib/server/shipping-connectors.js.map +1 -1
  393. package/src/lib/server/site-page-resolver.js +20 -3
  394. package/src/lib/server/site-page-resolver.js.map +1 -1
  395. package/src/lib/server/store-day.d.ts +33 -0
  396. package/src/lib/server/store-day.js +46 -0
  397. package/src/lib/server/store-day.js.map +1 -0
  398. package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
  399. package/src/lib/server/store-setup-ai-writer.js +5 -6
  400. package/src/lib/server/store-setup-ai-writer.js.map +1 -1
  401. package/src/lib/server/storefront-tax.d.ts +13 -0
  402. package/src/lib/server/storefront-tax.js +8 -1
  403. package/src/lib/server/storefront-tax.js.map +1 -1
  404. package/src/lib/server/tax-return-source.d.ts +32 -3
  405. package/src/lib/server/tax-return-source.js +99 -20
  406. package/src/lib/server/tax-return-source.js.map +1 -1
  407. package/src/lib/server.js +100 -2
  408. package/src/lib/server.js.map +1 -1
  409. package/src/lib/testing/fake-firestore.js +58 -16
  410. package/src/lib/testing/fake-firestore.js.map +1 -1
  411. package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
  412. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
  413. package/src/lib/testing/site-register-permissions.d.ts +29 -0
  414. package/src/lib/testing/site-register-permissions.js +38 -0
  415. package/src/lib/testing/site-register-permissions.js.map +1 -0
  416. package/src/lib/transfer/tracking.server.js +8 -5
  417. package/src/lib/transfer/tracking.server.js.map +1 -1
  418. package/src/lib/utils/add-to-cart.d.ts +2 -0
  419. package/src/lib/utils/add-to-cart.js +6 -3
  420. package/src/lib/utils/add-to-cart.js.map +1 -1
@@ -0,0 +1,339 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ import { firebaseAdmin, readOrgBilling } from "@aglyn/tenant-data-admin";
18
+ import { resolveOrgPermissions } from "@aglyn/tenant-runtime/org-permissions";
19
+ import { closePosCellularPeriod, isPosCellularDeviceType, openPosCellularPeriod, parsePosCellularConfig, posCellularReaderId, posCellularMonthLabel, posCellularReaderMonthlyCents, POS_CELLULAR_CHARGES_COLLECTION, POS_CELLULAR_READERS_COLLECTION } from "../model/pos-cellular.js";
20
+ import { posStripe, posTerminalAvailable } from "./pos-stripe.js";
21
+ import { savePosReaderConfiguration } from "./pos-terminal.js";
22
+ /*==========================================
23
+ * TURNING 4G ON AND OFF FOR A STORE (AGL-4038).
24
+ *
25
+ * The POS devices card's "Turn on 4G" sets `cellular[enabled]` on the
26
+ * store's ONE Terminal Configuration (`savePosReaderConfiguration`, where
27
+ * tipping, offline mode and the start-up screen also live), so every Stripe
28
+ * Reader S710 at the store has 4G from the next time it connects. See
29
+ * `model/pos-cellular.ts` for why it is per store and what it costs.
30
+ *
31
+ * Each S710 at a store with 4G on has an open period on its
32
+ * `posCellularReaders` record, which is what the month's charge counts
33
+ * (`pos-cellular-billing.ts`). The records follow the store: turning 4G on
34
+ * or off, and adding or removing a reader, re-reads the store's readers and
35
+ * opens or closes each one's period ({@link syncPosCellularReaders}).
36
+ *
37
+ * Turning it on needs the workspace to be billable (a Stripe customer, so a
38
+ * card on file) and the person's agreement to the monthly charge, which the
39
+ * store's terminal settings record with the price they agreed to. It is
40
+ * charged to the workspace, so turning it ON also takes the workspace's
41
+ * "Manage billing" key (`billing.manage`) beside the card's "Registers and
42
+ * devices"; turning it off takes only the card's key. While a month's charge
43
+ * is unpaid past its grace period (`pos-cellular-billing.ts`), it cannot be
44
+ * turned on again: paying it, then turning it on, is the way back.
45
+ *=========================================*/ /** The workspace key turning 4G on takes, beside "Registers and devices". */ export const POS_CELLULAR_BILLING_PERMISSION = 'billing.manage';
46
+ /** What a member without it is told, naming the permission. */ export const POS_CELLULAR_BILLING_REFUSAL = 'Your role does not include "Manage billing" — ask an organization admin. 4G is charged to the workspace.';
47
+ /** Whether the member may turn 4G on for a store: the workspace's "Manage billing", resolved for that store. */ export async function mayTurnOnPosCellular(uid, hostId) {
48
+ var _resolved_permissions;
49
+ const resolved = await resolveOrgPermissions(uid, {
50
+ hostId
51
+ }).catch(()=>null);
52
+ return (resolved == null ? void 0 : (_resolved_permissions = resolved.permissions) == null ? void 0 : _resolved_permissions[POS_CELLULAR_BILLING_PERMISSION]) === true;
53
+ }
54
+ /**
55
+ * A charge's invoice as Stripe has it now: its status and what it collected,
56
+ * or null when Stripe could not be asked (which is never read as "unpaid
57
+ * long enough to act on" nor as "paid").
58
+ */ export async function posCellularInvoiceStatus(invoiceId) {
59
+ var _body_status;
60
+ if (!/^in_[A-Za-z0-9]+$/.test(invoiceId)) return null;
61
+ const answer = await posStripe('GET', `invoices/${invoiceId}`).catch(()=>null);
62
+ if (!(answer == null ? void 0 : answer.ok)) return null;
63
+ const body = answer.body;
64
+ const status = String((_body_status = body.status) != null ? _body_status : '');
65
+ return status ? {
66
+ status,
67
+ amountPaidCents: Math.max(0, Math.round(Number(body.amount_paid) || 0))
68
+ } : null;
69
+ }
70
+ /**
71
+ * The month whose unpaid charge turned 4G off for the workspace and is STILL
72
+ * unpaid, or null. Asks Stripe about each, so one paid since is settled as
73
+ * paid here, and its stores' notices cleared, rather than waiting for the
74
+ * next daily run.
75
+ */ export async function unpaidPosCellularSuspension(orgId, now, invoiceStatus = posCellularInvoiceStatus) {
76
+ const snapshot = await firestore().collection(POS_CELLULAR_CHARGES_COLLECTION).where('orgId', '==', orgId).where('state', '==', 'suspended').limit(24).get();
77
+ for (const doc of snapshot.docs){
78
+ const charge = doc.data();
79
+ const invoice = charge.invoiceId ? await invoiceStatus(charge.invoiceId) : null;
80
+ if ((invoice == null ? void 0 : invoice.status) === 'paid' || (invoice == null ? void 0 : invoice.status) === 'void') {
81
+ await settleSuspendedPosCellularCharge(String(doc.id), charge, invoice.status === 'paid' ? 'paid' : 'voided', invoice.amountPaidCents, now);
82
+ continue;
83
+ }
84
+ return {
85
+ month: charge.month
86
+ };
87
+ }
88
+ return null;
89
+ }
90
+ /**
91
+ * A suspended month that was paid (or voided by staff): settled, and the
92
+ * notice on each store it turned 4G off for taken down. 4G stays off until
93
+ * the merchant turns it on again.
94
+ */ export async function settleSuspendedPosCellularCharge(chargeId, charge, state, paidCents, now) {
95
+ var _charge_suspendedHostIds;
96
+ await firestore().collection(POS_CELLULAR_CHARGES_COLLECTION).doc(chargeId).set(_extends({
97
+ state
98
+ }, state === 'paid' ? {
99
+ paidCents
100
+ } : {}, {
101
+ updatedAtMs: now
102
+ }), {
103
+ merge: true
104
+ });
105
+ for (const hostId of (_charge_suspendedHostIds = charge.suspendedHostIds) != null ? _charge_suspendedHostIds : []){
106
+ const ref = terminalConfigRef(hostId);
107
+ const terminal = await ref.get();
108
+ const notice = terminal.exists ? terminal.get('cellularSuspended') : null;
109
+ if ((notice == null ? void 0 : notice.month) === charge.month) await ref.set({
110
+ cellularSuspended: null
111
+ }, {
112
+ merge: true
113
+ });
114
+ }
115
+ }
116
+ function firestore() {
117
+ return firebaseAdmin.app().firestore();
118
+ }
119
+ function terminalConfigRef(hostId) {
120
+ return firestore().collection('hosts').doc(hostId).collection('terminal').doc('config');
121
+ }
122
+ function readersRef(hostId) {
123
+ return firestore().collection('hosts').doc(hostId).collection('terminalReaders');
124
+ }
125
+ function cellularReadersRef() {
126
+ return firestore().collection(POS_CELLULAR_READERS_COLLECTION);
127
+ }
128
+ /**
129
+ * Opens a 4G period for every S710 the store has while 4G is on, and closes
130
+ * every open one that should not be: 4G off, or the reader gone. In one
131
+ * transaction over the store's records, so two calls at once never open a
132
+ * reader twice. Idempotent, and cheap where the store never had 4G: one
133
+ * read of its settings and one of its (empty) records.
134
+ */ export async function syncPosCellularReaders(input) {
135
+ var _input_now, _terminal_get;
136
+ const now = (_input_now = input.now) != null ? _input_now : Date.now();
137
+ const [terminal, readers] = await Promise.all([
138
+ terminalConfigRef(input.hostId).get(),
139
+ readersRef(input.hostId).limit(50).get()
140
+ ]);
141
+ const enabled = terminal.get('cellularEnabled') === true;
142
+ const configurationId = String((_terminal_get = terminal.get('stripeConfigurationId')) != null ? _terminal_get : '') || null;
143
+ const capable = new Map();
144
+ for (const doc of readers.docs){
145
+ if (isPosCellularDeviceType(doc.get('deviceType'))) {
146
+ var _doc_get;
147
+ capable.set(String(doc.id), {
148
+ serialNumber: String((_doc_get = doc.get('serialNumber')) != null ? _doc_get : '') || null
149
+ });
150
+ }
151
+ }
152
+ return firestore().runTransaction(async (transaction)=>{
153
+ const known = await transaction.get(cellularReadersRef().where('hostId', '==', input.hostId).limit(100));
154
+ const records = new Map();
155
+ for (const doc of known.docs){
156
+ records.set(String(doc.id), doc.data());
157
+ }
158
+ let open = 0;
159
+ let closed = 0;
160
+ if (enabled) {
161
+ for (const [readerId, reader] of capable){
162
+ var _records_get;
163
+ const id = posCellularReaderId(input.hostId, readerId);
164
+ const existing = (_records_get = records.get(id)) != null ? _records_get : null;
165
+ const next = openPosCellularPeriod({
166
+ orgId: input.orgId,
167
+ hostId: input.hostId,
168
+ readerId,
169
+ serialNumber: reader.serialNumber,
170
+ stripeConfigurationId: configurationId
171
+ }, existing, now);
172
+ open += 1;
173
+ const unchanged = (existing == null ? void 0 : existing.enabled) === true && existing.periods.some((period)=>period.toMs === null) && existing.orgId === input.orgId && existing.serialNumber === reader.serialNumber && existing.stripeConfigurationId === configurationId;
174
+ if (unchanged) continue;
175
+ transaction.set(cellularReadersRef().doc(id), next);
176
+ }
177
+ }
178
+ for (const [id, record] of records){
179
+ const keep = enabled && capable.has(record.readerId);
180
+ if (keep || !record.enabled) continue;
181
+ transaction.set(cellularReadersRef().doc(id), closePosCellularPeriod(record, now));
182
+ closed += 1;
183
+ }
184
+ return {
185
+ open,
186
+ closed
187
+ };
188
+ });
189
+ }
190
+ /**
191
+ * `cellular` on the card readers route: turns 4G on (`enabled: true`, with
192
+ * `consent: true`) or off for the caller's store. The route has already
193
+ * checked the "Registers and devices" key on the store.
194
+ */ export async function setPosStoreCellular(staff, body) {
195
+ const config = parsePosCellularConfig(process.env);
196
+ // Not offered: answered as unknown, the way the card never shows it.
197
+ if (!config || !posTerminalAvailable()) {
198
+ return {
199
+ status: 404,
200
+ body: {
201
+ error: '4G is not available.',
202
+ code: 'cellular-unavailable'
203
+ }
204
+ };
205
+ }
206
+ if (typeof body['enabled'] !== 'boolean') return {
207
+ status: 400,
208
+ body: {
209
+ error: 'Say whether 4G is on or off.'
210
+ }
211
+ };
212
+ const enable = body['enabled'] === true;
213
+ const terminalRef = terminalConfigRef(staff.hostId);
214
+ const terminal = await terminalRef.get();
215
+ if (!terminal.get('stripeLocationId')) {
216
+ return {
217
+ status: 409,
218
+ body: {
219
+ error: 'Add a card reader to this store first.',
220
+ code: 'no-location'
221
+ }
222
+ };
223
+ }
224
+ if (enable) {
225
+ var _billing_stripeCustomerId;
226
+ // Charged to the workspace: its billing key, as well as the card's own.
227
+ if (!await mayTurnOnPosCellular(staff.uid, staff.hostId)) {
228
+ return {
229
+ status: 403,
230
+ body: {
231
+ error: POS_CELLULAR_BILLING_REFUSAL,
232
+ code: 'billing-permission'
233
+ }
234
+ };
235
+ }
236
+ if (body['consent'] !== true) {
237
+ return {
238
+ status: 400,
239
+ body: {
240
+ error: 'Agree to the monthly charge for each reader to turn 4G on.',
241
+ code: 'consent-required'
242
+ }
243
+ };
244
+ }
245
+ const readers = await readersRef(staff.hostId).limit(50).get();
246
+ const capable = readers.docs.some((doc)=>isPosCellularDeviceType(doc.get('deviceType')));
247
+ if (!capable) {
248
+ return {
249
+ status: 409,
250
+ body: {
251
+ error: '4G works on the Stripe Reader S710. Add one to this store first.',
252
+ code: 'no-capable-reader'
253
+ }
254
+ };
255
+ }
256
+ const billing = await readOrgBilling(staff.orgId).catch(()=>({}));
257
+ if (!String((_billing_stripeCustomerId = billing.stripeCustomerId) != null ? _billing_stripeCustomerId : '')) {
258
+ return {
259
+ status: 409,
260
+ body: {
261
+ error: 'Add a payment method in Billing first: 4G is charged to this workspace each month.',
262
+ code: 'no-billing'
263
+ }
264
+ };
265
+ }
266
+ // Turned off for an unpaid month: paid first, then on again.
267
+ const unpaid = await unpaidPosCellularSuspension(staff.orgId, Date.now());
268
+ if (unpaid) {
269
+ return {
270
+ status: 409,
271
+ body: {
272
+ error: `4G was turned off because the 4G charge for ${posCellularMonthLabel(unpaid.month)} wasn't paid. Pay it on the Billing page, then turn 4G on again.`,
273
+ code: 'cellular-unpaid'
274
+ }
275
+ };
276
+ }
277
+ }
278
+ const already = terminal.get('cellularEnabled') === true === enable && (!enable || terminal.get('cellularConfigurationId') === terminal.get('stripeConfigurationId'));
279
+ const now = Date.now();
280
+ if (!already) {
281
+ // Each direction keys its own first create: one key sent with other
282
+ // parameters is refused by Stripe for a day.
283
+ const saved = await savePosReaderConfiguration(staff.hostId, {
284
+ 'cellular[enabled]': enable
285
+ }, enable ? 'cellular-on' : 'cellular-off');
286
+ if ('error' in saved) {
287
+ console.error('[pos-cellular] Stripe refused the cellular setting', staff.hostId, saved.error);
288
+ return {
289
+ status: 502,
290
+ body: {
291
+ error: enable ? 'Stripe did not turn 4G on. Try again.' : 'Stripe did not turn 4G off. Try again.'
292
+ }
293
+ };
294
+ }
295
+ await terminalRef.set(_extends({
296
+ cellularEnabled: enable,
297
+ cellularConfigurationId: saved.configurationId,
298
+ cellularChangedAtMs: now,
299
+ cellularChangedBy: staff.uid
300
+ }, enable ? {
301
+ cellularConsent: {
302
+ atMs: now,
303
+ uid: staff.uid,
304
+ readerMonthlyCents: posCellularReaderMonthlyCents(config)
305
+ }
306
+ } : {}, enable ? {
307
+ cellularSuspended: null
308
+ } : {}), {
309
+ merge: true
310
+ });
311
+ }
312
+ await syncPosCellularReaders({
313
+ hostId: staff.hostId,
314
+ orgId: staff.orgId,
315
+ now
316
+ });
317
+ return {
318
+ status: 200,
319
+ body: {
320
+ ok: true,
321
+ enabled: enable
322
+ }
323
+ };
324
+ }
325
+ /**
326
+ * Turns 4G off at Stripe on a store's Configuration, by its id: for a store
327
+ * or workspace that is being deleted, whose settings may be gone already.
328
+ * True when Stripe took it, or the Configuration no longer exists.
329
+ */ export async function turnOffPosCellularConfiguration(configurationId) {
330
+ if (!/^tmc_[A-Za-z0-9]+$/.test(configurationId)) return false;
331
+ const answer = await posStripe('POST', `terminal/configurations/${configurationId}`, {
332
+ params: {
333
+ 'cellular[enabled]': false
334
+ }
335
+ });
336
+ return answer.ok || answer.status === 404;
337
+ }
338
+
339
+ //# sourceMappingURL=pos-cellular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-cellular.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { firebaseAdmin, readOrgBilling } from '@aglyn/tenant-data-admin'\nimport { resolveOrgPermissions } from '@aglyn/tenant-runtime/org-permissions'\nimport {\n closePosCellularPeriod,\n isPosCellularDeviceType,\n openPosCellularPeriod,\n parsePosCellularConfig,\n posCellularReaderId,\n posCellularMonthLabel,\n posCellularReaderMonthlyCents,\n POS_CELLULAR_CHARGES_COLLECTION,\n POS_CELLULAR_READERS_COLLECTION,\n type PosCellularCharge,\n type PosCellularReaderRecord,\n} from '../model/pos-cellular'\nimport type { PosStaff } from './pos-auth'\nimport { posStripe, posTerminalAvailable } from './pos-stripe'\nimport { savePosReaderConfiguration } from './pos-terminal'\n\n/*==========================================\n * TURNING 4G ON AND OFF FOR A STORE (AGL-4038).\n *\n * The POS devices card's \"Turn on 4G\" sets `cellular[enabled]` on the\n * store's ONE Terminal Configuration (`savePosReaderConfiguration`, where\n * tipping, offline mode and the start-up screen also live), so every Stripe\n * Reader S710 at the store has 4G from the next time it connects. See\n * `model/pos-cellular.ts` for why it is per store and what it costs.\n *\n * Each S710 at a store with 4G on has an open period on its\n * `posCellularReaders` record, which is what the month's charge counts\n * (`pos-cellular-billing.ts`). The records follow the store: turning 4G on\n * or off, and adding or removing a reader, re-reads the store's readers and\n * opens or closes each one's period ({@link syncPosCellularReaders}).\n *\n * Turning it on needs the workspace to be billable (a Stripe customer, so a\n * card on file) and the person's agreement to the monthly charge, which the\n * store's terminal settings record with the price they agreed to. It is\n * charged to the workspace, so turning it ON also takes the workspace's\n * \"Manage billing\" key (`billing.manage`) beside the card's \"Registers and\n * devices\"; turning it off takes only the card's key. While a month's charge\n * is unpaid past its grace period (`pos-cellular-billing.ts`), it cannot be\n * turned on again: paying it, then turning it on, is the way back.\n *=========================================*/\n\n/** The workspace key turning 4G on takes, beside \"Registers and devices\". */\nexport const POS_CELLULAR_BILLING_PERMISSION = 'billing.manage'\n\n/** What a member without it is told, naming the permission. */\nexport const POS_CELLULAR_BILLING_REFUSAL =\n 'Your role does not include \"Manage billing\" — ask an organization admin. 4G is charged to the workspace.'\n\n/** Whether the member may turn 4G on for a store: the workspace's \"Manage billing\", resolved for that store. */\nexport async function mayTurnOnPosCellular(uid: string, hostId: string): Promise<boolean> {\n const resolved = await resolveOrgPermissions(uid, { hostId }).catch(() => null)\n return resolved?.permissions?.[POS_CELLULAR_BILLING_PERMISSION] === true\n}\n\n/**\n * A charge's invoice as Stripe has it now: its status and what it collected,\n * or null when Stripe could not be asked (which is never read as \"unpaid\n * long enough to act on\" nor as \"paid\").\n */\nexport async function posCellularInvoiceStatus(\n invoiceId: string,\n): Promise<{ status: string; amountPaidCents: number } | null> {\n if (!/^in_[A-Za-z0-9]+$/.test(invoiceId)) return null\n const answer = await posStripe('GET', `invoices/${invoiceId}`).catch(() => null)\n if (!answer?.ok) return null\n const body = answer.body as { status?: unknown; amount_paid?: unknown }\n const status = String(body.status ?? '')\n return status ? { status, amountPaidCents: Math.max(0, Math.round(Number(body.amount_paid) || 0)) } : null\n}\n\n/**\n * The month whose unpaid charge turned 4G off for the workspace and is STILL\n * unpaid, or null. Asks Stripe about each, so one paid since is settled as\n * paid here, and its stores' notices cleared, rather than waiting for the\n * next daily run.\n */\nexport async function unpaidPosCellularSuspension(\n orgId: string,\n now: number,\n invoiceStatus: (invoiceId: string) => Promise<{ status: string; amountPaidCents: number } | null> = posCellularInvoiceStatus,\n): Promise<{ month: string } | null> {\n const snapshot = await firestore()\n .collection(POS_CELLULAR_CHARGES_COLLECTION)\n .where('orgId', '==', orgId)\n .where('state', '==', 'suspended')\n .limit(24)\n .get()\n for (const doc of snapshot.docs as unknown as Array<{ id: string; data: () => PosCellularCharge }>) {\n const charge = doc.data()\n const invoice = charge.invoiceId ? await invoiceStatus(charge.invoiceId) : null\n if (invoice?.status === 'paid' || invoice?.status === 'void') {\n await settleSuspendedPosCellularCharge(String(doc.id), charge, invoice.status === 'paid' ? 'paid' : 'voided', invoice.amountPaidCents, now)\n continue\n }\n return { month: charge.month }\n }\n return null\n}\n\n/**\n * A suspended month that was paid (or voided by staff): settled, and the\n * notice on each store it turned 4G off for taken down. 4G stays off until\n * the merchant turns it on again.\n */\nexport async function settleSuspendedPosCellularCharge(\n chargeId: string,\n charge: PosCellularCharge,\n state: 'paid' | 'voided',\n paidCents: number,\n now: number,\n): Promise<void> {\n await firestore()\n .collection(POS_CELLULAR_CHARGES_COLLECTION)\n .doc(chargeId)\n .set({ state, ...(state === 'paid' ? { paidCents } : {}), updatedAtMs: now }, { merge: true })\n for (const hostId of charge.suspendedHostIds ?? []) {\n const ref = terminalConfigRef(hostId)\n const terminal = await ref.get()\n const notice = terminal.exists ? (terminal.get('cellularSuspended') as { month?: unknown } | null) : null\n if (notice?.month === charge.month) await ref.set({ cellularSuspended: null }, { merge: true })\n }\n}\n\nfunction firestore() {\n return firebaseAdmin.app().firestore()\n}\n\nfunction terminalConfigRef(hostId: string) {\n return firestore().collection('hosts').doc(hostId).collection('terminal').doc('config')\n}\n\nfunction readersRef(hostId: string) {\n return firestore().collection('hosts').doc(hostId).collection('terminalReaders')\n}\n\nfunction cellularReadersRef() {\n return firestore().collection(POS_CELLULAR_READERS_COLLECTION)\n}\n\nexport interface PosCellularAnswer {\n status: number\n body: { ok: true; enabled: boolean } | { error: string; code?: string }\n}\n\n/**\n * Opens a 4G period for every S710 the store has while 4G is on, and closes\n * every open one that should not be: 4G off, or the reader gone. In one\n * transaction over the store's records, so two calls at once never open a\n * reader twice. Idempotent, and cheap where the store never had 4G: one\n * read of its settings and one of its (empty) records.\n */\nexport async function syncPosCellularReaders(input: {\n hostId: string\n orgId: string\n now?: number\n}): Promise<{ open: number; closed: number }> {\n const now = input.now ?? Date.now()\n const [terminal, readers] = await Promise.all([\n terminalConfigRef(input.hostId).get(),\n readersRef(input.hostId).limit(50).get(),\n ])\n const enabled = terminal.get('cellularEnabled') === true\n const configurationId = String(terminal.get('stripeConfigurationId') ?? '') || null\n const capable = new Map<string, { serialNumber: string | null }>()\n for (const doc of readers.docs as Array<{ id: string; get: (field: string) => unknown }>) {\n if (isPosCellularDeviceType(doc.get('deviceType'))) {\n capable.set(String(doc.id), { serialNumber: String(doc.get('serialNumber') ?? '') || null })\n }\n }\n return firestore().runTransaction(async (transaction: any) => {\n const known = await transaction.get(cellularReadersRef().where('hostId', '==', input.hostId).limit(100))\n const records = new Map<string, PosCellularReaderRecord>()\n for (const doc of known.docs as Array<{ id: string; data: () => PosCellularReaderRecord }>) {\n records.set(String(doc.id), doc.data())\n }\n let open = 0\n let closed = 0\n if (enabled) {\n for (const [readerId, reader] of capable) {\n const id = posCellularReaderId(input.hostId, readerId)\n const existing = records.get(id) ?? null\n const next = openPosCellularPeriod(\n {\n orgId: input.orgId,\n hostId: input.hostId,\n readerId,\n serialNumber: reader.serialNumber,\n stripeConfigurationId: configurationId,\n },\n existing,\n now,\n )\n open += 1\n const unchanged =\n existing?.enabled === true &&\n existing.periods.some((period) => period.toMs === null) &&\n existing.orgId === input.orgId &&\n existing.serialNumber === reader.serialNumber &&\n existing.stripeConfigurationId === configurationId\n if (unchanged) continue\n transaction.set(cellularReadersRef().doc(id), next)\n }\n }\n for (const [id, record] of records) {\n const keep = enabled && capable.has(record.readerId)\n if (keep || !record.enabled) continue\n transaction.set(cellularReadersRef().doc(id), closePosCellularPeriod(record, now))\n closed += 1\n }\n return { open, closed }\n })\n}\n\n/**\n * `cellular` on the card readers route: turns 4G on (`enabled: true`, with\n * `consent: true`) or off for the caller's store. The route has already\n * checked the \"Registers and devices\" key on the store.\n */\nexport async function setPosStoreCellular(\n staff: PosStaff,\n body: Record<string, unknown>,\n): Promise<PosCellularAnswer> {\n const config = parsePosCellularConfig(process.env)\n // Not offered: answered as unknown, the way the card never shows it.\n if (!config || !posTerminalAvailable()) {\n return { status: 404, body: { error: '4G is not available.', code: 'cellular-unavailable' } }\n }\n if (typeof body['enabled'] !== 'boolean') return { status: 400, body: { error: 'Say whether 4G is on or off.' } }\n const enable = body['enabled'] === true\n const terminalRef = terminalConfigRef(staff.hostId)\n const terminal = await terminalRef.get()\n if (!terminal.get('stripeLocationId')) {\n return { status: 409, body: { error: 'Add a card reader to this store first.', code: 'no-location' } }\n }\n if (enable) {\n // Charged to the workspace: its billing key, as well as the card's own.\n if (!(await mayTurnOnPosCellular(staff.uid, staff.hostId))) {\n return { status: 403, body: { error: POS_CELLULAR_BILLING_REFUSAL, code: 'billing-permission' } }\n }\n if (body['consent'] !== true) {\n return {\n status: 400,\n body: { error: 'Agree to the monthly charge for each reader to turn 4G on.', code: 'consent-required' },\n }\n }\n const readers = await readersRef(staff.hostId).limit(50).get()\n const capable = (readers.docs as Array<{ get: (field: string) => unknown }>).some((doc) =>\n isPosCellularDeviceType(doc.get('deviceType')),\n )\n if (!capable) {\n return {\n status: 409,\n body: { error: '4G works on the Stripe Reader S710. Add one to this store first.', code: 'no-capable-reader' },\n }\n }\n const billing = (await readOrgBilling(staff.orgId).catch(() => ({}))) as { stripeCustomerId?: unknown }\n if (!String(billing.stripeCustomerId ?? '')) {\n return {\n status: 409,\n body: {\n error: 'Add a payment method in Billing first: 4G is charged to this workspace each month.',\n code: 'no-billing',\n },\n }\n }\n // Turned off for an unpaid month: paid first, then on again.\n const unpaid = await unpaidPosCellularSuspension(staff.orgId, Date.now())\n if (unpaid) {\n return {\n status: 409,\n body: {\n error: `4G was turned off because the 4G charge for ${posCellularMonthLabel(unpaid.month)} wasn't paid. Pay it on the Billing page, then turn 4G on again.`,\n code: 'cellular-unpaid',\n },\n }\n }\n }\n const already =\n (terminal.get('cellularEnabled') === true) === enable &&\n (!enable || terminal.get('cellularConfigurationId') === terminal.get('stripeConfigurationId'))\n const now = Date.now()\n if (!already) {\n // Each direction keys its own first create: one key sent with other\n // parameters is refused by Stripe for a day.\n const saved = await savePosReaderConfiguration(\n staff.hostId,\n { 'cellular[enabled]': enable },\n enable ? 'cellular-on' : 'cellular-off',\n )\n if ('error' in saved) {\n console.error('[pos-cellular] Stripe refused the cellular setting', staff.hostId, saved.error)\n return {\n status: 502,\n body: { error: enable ? 'Stripe did not turn 4G on. Try again.' : 'Stripe did not turn 4G off. Try again.' },\n }\n }\n await terminalRef.set(\n {\n cellularEnabled: enable,\n cellularConfigurationId: saved.configurationId,\n cellularChangedAtMs: now,\n cellularChangedBy: staff.uid,\n // What they agreed to, and when: the price per reader at the time.\n ...(enable ? { cellularConsent: { atMs: now, uid: staff.uid, readerMonthlyCents: posCellularReaderMonthlyCents(config) } } : {}),\n // On again: the notice of an unpaid month that turned it off is done.\n ...(enable ? { cellularSuspended: null } : {}),\n },\n { merge: true },\n )\n }\n await syncPosCellularReaders({ hostId: staff.hostId, orgId: staff.orgId, now })\n return { status: 200, body: { ok: true, enabled: enable } }\n}\n\n/**\n * Turns 4G off at Stripe on a store's Configuration, by its id: for a store\n * or workspace that is being deleted, whose settings may be gone already.\n * True when Stripe took it, or the Configuration no longer exists.\n */\nexport async function turnOffPosCellularConfiguration(configurationId: string): Promise<boolean> {\n if (!/^tmc_[A-Za-z0-9]+$/.test(configurationId)) return false\n const answer = await posStripe('POST', `terminal/configurations/${configurationId}`, {\n params: { 'cellular[enabled]': false },\n })\n return answer.ok || answer.status === 404\n}\n"],"names":["firebaseAdmin","readOrgBilling","resolveOrgPermissions","closePosCellularPeriod","isPosCellularDeviceType","openPosCellularPeriod","parsePosCellularConfig","posCellularReaderId","posCellularMonthLabel","posCellularReaderMonthlyCents","POS_CELLULAR_CHARGES_COLLECTION","POS_CELLULAR_READERS_COLLECTION","posStripe","posTerminalAvailable","savePosReaderConfiguration","POS_CELLULAR_BILLING_PERMISSION","POS_CELLULAR_BILLING_REFUSAL","mayTurnOnPosCellular","uid","hostId","resolved","catch","permissions","posCellularInvoiceStatus","invoiceId","body","test","answer","ok","status","String","amountPaidCents","Math","max","round","Number","amount_paid","unpaidPosCellularSuspension","orgId","now","invoiceStatus","snapshot","firestore","collection","where","limit","get","doc","docs","charge","data","invoice","settleSuspendedPosCellularCharge","id","month","chargeId","state","paidCents","set","updatedAtMs","merge","suspendedHostIds","ref","terminalConfigRef","terminal","notice","exists","cellularSuspended","app","readersRef","cellularReadersRef","syncPosCellularReaders","input","Date","readers","Promise","all","enabled","configurationId","capable","Map","serialNumber","runTransaction","transaction","known","records","open","closed","readerId","reader","existing","next","stripeConfigurationId","unchanged","periods","some","period","toMs","record","keep","has","setPosStoreCellular","staff","config","process","env","error","code","enable","terminalRef","billing","stripeCustomerId","unpaid","already","saved","console","cellularEnabled","cellularConfigurationId","cellularChangedAtMs","cellularChangedBy","cellularConsent","atMs","readerMonthlyCents","turnOffPosCellularConfiguration","params"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { PluginApiHandler, PluginApiRequest } from '@aglyn/aglyn/server';
2
+ import { STAY_CHECK_IN_SETTINGS_DOC } from '../model/commerce-check-in';
3
+ import { type StayCheckInMode } from '../model/commerce-reservations';
2
4
  import { type PosOpsDeps } from './pos-ops-gate';
3
5
  import { type PosSaleCompletedEvent } from './pos-sale';
4
6
  /** How stale a day's reconcile may be before a search or the list redoes it. */
@@ -24,6 +26,9 @@ export declare function readCheckInDay(deps: PosOpsDeps, hostRef: FirebaseFirest
24
26
  ok: false;
25
27
  error: string;
26
28
  }>;
29
+ export { STAY_CHECK_IN_SETTINGS_DOC };
30
+ /** The store's control for how stays are checked in; each resource's own setting when unset. */
31
+ export declare function readStayCheckInMode(hostRef: FirebaseFirestore.DocumentReference): Promise<StayCheckInMode>;
27
32
  /**
28
33
  * Brings a day's check-ins in line with its orders and stays, at most every
29
34
  * {@link CHECK_IN_RECONCILE_MS} unless `force`. Answers whether a source
@@ -46,4 +51,3 @@ export declare function registerPosSaleCheckIns(): void;
46
51
  export declare function handlePosCheckIn(deps: PosOpsDeps, req: PluginApiRequest): Promise<Outcome>;
47
52
  export declare function createPosCheckInHandler(deps?: () => PosOpsDeps): PluginApiHandler;
48
53
  export declare const posCheckInHandler: PluginApiHandler;
49
- export {};