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

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 (430) 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/order-webhooks-card.component.js +1 -1
  10. package/src/lib/components/console/order-webhooks-card.component.js.map +1 -1
  11. package/src/lib/components/console/payment-methods-card.component.js +1 -1
  12. package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
  13. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
  14. package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
  15. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
  16. package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
  17. package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
  18. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
  19. package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
  20. package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
  21. package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
  22. package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
  23. package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
  24. package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
  25. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
  26. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
  27. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
  28. package/src/lib/components/console/pos/use-pos-display.js +50 -0
  29. package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
  30. package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
  31. package/src/lib/components/console/pos-cellular-control.component.js +211 -0
  32. package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
  33. package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
  34. package/src/lib/components/console/pos-devices-card.component.js +47 -15
  35. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  36. package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
  37. package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
  38. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
  39. package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
  40. package/src/lib/components/console/pos-display-page.component.js +44 -2
  41. package/src/lib/components/console/pos-display-page.component.js.map +1 -1
  42. package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
  43. package/src/lib/components/console/pos-hardware-card.component.js +157 -36
  44. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
  45. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
  46. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
  47. package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
  48. package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
  49. package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
  50. package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
  51. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
  52. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
  53. package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
  54. package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
  55. package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
  56. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
  57. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
  58. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
  59. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
  60. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
  61. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
  62. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
  63. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  64. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
  65. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
  66. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
  67. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
  68. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
  69. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
  70. package/src/lib/components/console/pos-page.component.d.ts +1 -1
  71. package/src/lib/components/console/pos-page.component.js +63 -12
  72. package/src/lib/components/console/pos-page.component.js.map +1 -1
  73. package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
  74. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
  75. package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
  76. package/src/lib/components/console/product-check-in-fields.component.js +60 -14
  77. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
  78. package/src/lib/components/console/product-editor-dialog.component.js +44 -1
  79. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  80. package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
  81. package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
  82. package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
  83. package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
  84. package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
  85. package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
  86. package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
  87. package/src/lib/components/console/product-register-fields.component.js +31 -2
  88. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  89. package/src/lib/components/console/products-hub-card.component.js +11 -2
  90. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  91. package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
  92. package/src/lib/components/console/register-hardware-card.component.js +56 -27
  93. package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
  94. package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
  95. package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
  96. package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
  97. package/src/lib/components/console/reservations-card.component.d.ts +9 -0
  98. package/src/lib/components/console/reservations-card.component.js +158 -23
  99. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  100. package/src/lib/components/console/shippingeasy-card.component.js +1 -1
  101. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
  102. package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
  103. package/src/lib/components/console/shipstation-card.component.js +3 -3
  104. package/src/lib/components/console/shipstation-card.component.js.map +1 -1
  105. package/src/lib/components/product-detail.d.ts +4 -0
  106. package/src/lib/components/product-detail.js +40 -5
  107. package/src/lib/components/product-detail.js.map +1 -1
  108. package/src/lib/components/product-reviews.js +28 -11
  109. package/src/lib/components/product-reviews.js.map +1 -1
  110. package/src/lib/components/reservation-widget.js +28 -5
  111. package/src/lib/components/reservation-widget.js.map +1 -1
  112. package/src/lib/components/use-day-picker.d.ts +25 -0
  113. package/src/lib/components/use-day-picker.js +57 -0
  114. package/src/lib/components/use-day-picker.js.map +1 -0
  115. package/src/lib/constants/operator-alerts.d.ts +55 -0
  116. package/src/lib/constants/operator-alerts.js +156 -1
  117. package/src/lib/constants/operator-alerts.js.map +1 -1
  118. package/src/lib/declarations.console-server.js +54 -1
  119. package/src/lib/declarations.console-server.js.map +1 -1
  120. package/src/lib/declarations.d.ts +4 -2
  121. package/src/lib/declarations.js +15 -4
  122. package/src/lib/declarations.js.map +1 -1
  123. package/src/lib/declarations.server.js +9 -0
  124. package/src/lib/declarations.server.js.map +1 -1
  125. package/src/lib/model/commerce-cart.d.ts +9 -1
  126. package/src/lib/model/commerce-cart.js +4 -3
  127. package/src/lib/model/commerce-cart.js.map +1 -1
  128. package/src/lib/model/commerce-check-in-product.d.ts +26 -0
  129. package/src/lib/model/commerce-check-in-product.js +64 -2
  130. package/src/lib/model/commerce-check-in-product.js.map +1 -1
  131. package/src/lib/model/commerce-check-in-record.d.ts +127 -0
  132. package/src/lib/model/commerce-check-in-record.js +36 -0
  133. package/src/lib/model/commerce-check-in-record.js.map +1 -0
  134. package/src/lib/model/commerce-check-in.d.ts +91 -87
  135. package/src/lib/model/commerce-check-in.js +186 -62
  136. package/src/lib/model/commerce-check-in.js.map +1 -1
  137. package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
  138. package/src/lib/model/commerce-kiosk-offer.js +35 -0
  139. package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
  140. package/src/lib/model/commerce-orders.d.ts +76 -0
  141. package/src/lib/model/commerce-orders.js +6 -0
  142. package/src/lib/model/commerce-orders.js.map +1 -1
  143. package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
  144. package/src/lib/model/commerce-pos-day-report.js +39 -2
  145. package/src/lib/model/commerce-pos-day-report.js.map +1 -1
  146. package/src/lib/model/commerce-pos-offline.d.ts +1 -1
  147. package/src/lib/model/commerce-pos-offline.js +6 -1
  148. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  149. package/src/lib/model/commerce-pos-ops.js +3 -2
  150. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  151. package/src/lib/model/commerce-pos.d.ts +36 -3
  152. package/src/lib/model/commerce-pos.js +14 -6
  153. package/src/lib/model/commerce-pos.js.map +1 -1
  154. package/src/lib/model/commerce-receipt.js +3 -2
  155. package/src/lib/model/commerce-receipt.js.map +1 -1
  156. package/src/lib/model/commerce-reservations.d.ts +69 -4
  157. package/src/lib/model/commerce-reservations.js +57 -5
  158. package/src/lib/model/commerce-reservations.js.map +1 -1
  159. package/src/lib/model/commerce.d.ts +66 -0
  160. package/src/lib/model/commerce.js +15 -0
  161. package/src/lib/model/commerce.js.map +1 -1
  162. package/src/lib/model/order-list-fields.d.ts +11 -0
  163. package/src/lib/model/order-list-fields.js +17 -1
  164. package/src/lib/model/order-list-fields.js.map +1 -1
  165. package/src/lib/model/own-store-tax-summary.d.ts +152 -0
  166. package/src/lib/model/own-store-tax-summary.js +288 -0
  167. package/src/lib/model/own-store-tax-summary.js.map +1 -0
  168. package/src/lib/model/plugin-permissions.d.ts +74 -0
  169. package/src/lib/model/plugin-permissions.js +224 -7
  170. package/src/lib/model/plugin-permissions.js.map +1 -1
  171. package/src/lib/model/pos-cellular.d.ts +223 -0
  172. package/src/lib/model/pos-cellular.js +293 -0
  173. package/src/lib/model/pos-cellular.js.map +1 -0
  174. package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
  175. package/src/lib/model/pos-hardware-in-person.js +224 -0
  176. package/src/lib/model/pos-hardware-in-person.js.map +1 -0
  177. package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
  178. package/src/lib/model/pos-hardware-tax-summary.js +225 -0
  179. package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
  180. package/src/lib/model/pos-hardware-terms.d.ts +74 -0
  181. package/src/lib/model/pos-hardware-terms.js +115 -0
  182. package/src/lib/model/pos-hardware-terms.js.map +1 -0
  183. package/src/lib/model/pos-hardware.d.ts +349 -7
  184. package/src/lib/model/pos-hardware.js +291 -20
  185. package/src/lib/model/pos-hardware.js.map +1 -1
  186. package/src/lib/model/product-write.d.ts +10 -0
  187. package/src/lib/model/product-write.js +4 -2
  188. package/src/lib/model/product-write.js.map +1 -1
  189. package/src/lib/model/workspace-site-permissions.d.ts +26 -0
  190. package/src/lib/model/workspace-site-permissions.js +81 -0
  191. package/src/lib/model/workspace-site-permissions.js.map +1 -0
  192. package/src/lib/plugin.js +16 -0
  193. package/src/lib/plugin.js.map +1 -1
  194. package/src/lib/server/billing-webhook.js +25 -1
  195. package/src/lib/server/billing-webhook.js.map +1 -1
  196. package/src/lib/server/cancel-order.js +7 -5
  197. package/src/lib/server/cancel-order.js.map +1 -1
  198. package/src/lib/server/cart-checkout.js +20 -8
  199. package/src/lib/server/cart-checkout.js.map +1 -1
  200. package/src/lib/server/cart.js +29 -0
  201. package/src/lib/server/cart.js.map +1 -1
  202. package/src/lib/server/checkout.js +42 -13
  203. package/src/lib/server/checkout.js.map +1 -1
  204. package/src/lib/server/collection-membership.d.ts +4 -0
  205. package/src/lib/server/collection-membership.js +5 -10
  206. package/src/lib/server/collection-membership.js.map +1 -1
  207. package/src/lib/server/commerce-site-keys.d.ts +48 -0
  208. package/src/lib/server/commerce-site-keys.js +61 -0
  209. package/src/lib/server/commerce-site-keys.js.map +1 -0
  210. package/src/lib/server/draft-order.js +8 -5
  211. package/src/lib/server/draft-order.js.map +1 -1
  212. package/src/lib/server/fulfill-order.js +7 -5
  213. package/src/lib/server/fulfill-order.js.map +1 -1
  214. package/src/lib/server/gift-cards.js +8 -5
  215. package/src/lib/server/gift-cards.js.map +1 -1
  216. package/src/lib/server/local-fulfillment-status.js +9 -6
  217. package/src/lib/server/local-fulfillment-status.js.map +1 -1
  218. package/src/lib/server/member-post.js +6 -5
  219. package/src/lib/server/member-post.js.map +1 -1
  220. package/src/lib/server/membership-admin-password.d.ts +4 -2
  221. package/src/lib/server/membership-admin-password.js +10 -8
  222. package/src/lib/server/membership-admin-password.js.map +1 -1
  223. package/src/lib/server/membership-admin-remove.d.ts +7 -5
  224. package/src/lib/server/membership-admin-remove.js +9 -9
  225. package/src/lib/server/membership-admin-remove.js.map +1 -1
  226. package/src/lib/server/order-notifications.js +5 -2
  227. package/src/lib/server/order-notifications.js.map +1 -1
  228. package/src/lib/server/order-print.js +7 -5
  229. package/src/lib/server/order-print.js.map +1 -1
  230. package/src/lib/server/order-receipt-send.js +8 -5
  231. package/src/lib/server/order-receipt-send.js.map +1 -1
  232. package/src/lib/server/order-webhooks.js +8 -8
  233. package/src/lib/server/order-webhooks.js.map +1 -1
  234. package/src/lib/server/orders-shipping-prepare.js +9 -6
  235. package/src/lib/server/orders-shipping-prepare.js.map +1 -1
  236. package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
  237. package/src/lib/server/own-store-tax-return-source.js +312 -0
  238. package/src/lib/server/own-store-tax-return-source.js.map +1 -0
  239. package/src/lib/server/payment-methods.js +13 -9
  240. package/src/lib/server/payment-methods.js.map +1 -1
  241. package/src/lib/server/pos-auth.d.ts +37 -6
  242. package/src/lib/server/pos-auth.js +40 -15
  243. package/src/lib/server/pos-auth.js.map +1 -1
  244. package/src/lib/server/pos-cellular-billing.d.ts +81 -0
  245. package/src/lib/server/pos-cellular-billing.js +711 -0
  246. package/src/lib/server/pos-cellular-billing.js.map +1 -0
  247. package/src/lib/server/pos-cellular-notify.d.ts +47 -0
  248. package/src/lib/server/pos-cellular-notify.js +150 -0
  249. package/src/lib/server/pos-cellular-notify.js.map +1 -0
  250. package/src/lib/server/pos-cellular.d.ts +88 -0
  251. package/src/lib/server/pos-cellular.js +339 -0
  252. package/src/lib/server/pos-cellular.js.map +1 -0
  253. package/src/lib/server/pos-check-in.d.ts +5 -1
  254. package/src/lib/server/pos-check-in.js +296 -28
  255. package/src/lib/server/pos-check-in.js.map +1 -1
  256. package/src/lib/server/pos-day-report.js +29 -3
  257. package/src/lib/server/pos-day-report.js.map +1 -1
  258. package/src/lib/server/pos-display.d.ts +16 -0
  259. package/src/lib/server/pos-display.js +129 -2
  260. package/src/lib/server/pos-display.js.map +1 -1
  261. package/src/lib/server/pos-hardware-admin.d.ts +10 -1
  262. package/src/lib/server/pos-hardware-admin.js +250 -84
  263. package/src/lib/server/pos-hardware-admin.js.map +1 -1
  264. package/src/lib/server/pos-hardware-attach.d.ts +105 -0
  265. package/src/lib/server/pos-hardware-attach.js +443 -0
  266. package/src/lib/server/pos-hardware-attach.js.map +1 -0
  267. package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
  268. package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
  269. package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
  270. package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
  271. package/src/lib/server/pos-hardware-buyer-record.js +86 -0
  272. package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
  273. package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
  274. package/src/lib/server/pos-hardware-cancel.js +147 -0
  275. package/src/lib/server/pos-hardware-cancel.js.map +1 -0
  276. package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
  277. package/src/lib/server/pos-hardware-closure-notices.js +85 -0
  278. package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
  279. package/src/lib/server/pos-hardware-closure.d.ts +60 -0
  280. package/src/lib/server/pos-hardware-closure.js +153 -0
  281. package/src/lib/server/pos-hardware-closure.js.map +1 -0
  282. package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
  283. package/src/lib/server/pos-hardware-in-person.js +236 -0
  284. package/src/lib/server/pos-hardware-in-person.js.map +1 -0
  285. package/src/lib/server/pos-hardware-notify.d.ts +40 -2
  286. package/src/lib/server/pos-hardware-notify.js +195 -14
  287. package/src/lib/server/pos-hardware-notify.js.map +1 -1
  288. package/src/lib/server/pos-hardware-readers.d.ts +115 -0
  289. package/src/lib/server/pos-hardware-readers.js +430 -0
  290. package/src/lib/server/pos-hardware-readers.js.map +1 -0
  291. package/src/lib/server/pos-hardware-returns.d.ts +116 -0
  292. package/src/lib/server/pos-hardware-returns.js +502 -0
  293. package/src/lib/server/pos-hardware-returns.js.map +1 -0
  294. package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
  295. package/src/lib/server/pos-hardware-sale-fields.js +44 -0
  296. package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
  297. package/src/lib/server/pos-hardware-sale.d.ts +54 -0
  298. package/src/lib/server/pos-hardware-sale.js +369 -0
  299. package/src/lib/server/pos-hardware-sale.js.map +1 -0
  300. package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
  301. package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
  302. package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
  303. package/src/lib/server/pos-hardware-terms.d.ts +64 -0
  304. package/src/lib/server/pos-hardware-terms.js +154 -0
  305. package/src/lib/server/pos-hardware-terms.js.map +1 -0
  306. package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
  307. package/src/lib/server/pos-hardware-user-eraser.js +31 -7
  308. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
  309. package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
  310. package/src/lib/server/pos-hardware-webhook.js +51 -6
  311. package/src/lib/server/pos-hardware-webhook.js.map +1 -1
  312. package/src/lib/server/pos-hardware.d.ts +74 -1
  313. package/src/lib/server/pos-hardware.js +175 -10
  314. package/src/lib/server/pos-hardware.js.map +1 -1
  315. package/src/lib/server/pos-kiosk.d.ts +2 -0
  316. package/src/lib/server/pos-kiosk.js +17 -12
  317. package/src/lib/server/pos-kiosk.js.map +1 -1
  318. package/src/lib/server/pos-offline-card-order.d.ts +64 -0
  319. package/src/lib/server/pos-offline-card-order.js +102 -0
  320. package/src/lib/server/pos-offline-card-order.js.map +1 -0
  321. package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
  322. package/src/lib/server/pos-offline-card-reconcile.js +215 -18
  323. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
  324. package/src/lib/server/pos-offline-sync.d.ts +39 -0
  325. package/src/lib/server/pos-offline-sync.js +190 -55
  326. package/src/lib/server/pos-offline-sync.js.map +1 -1
  327. package/src/lib/server/pos-ops-gate.d.ts +28 -9
  328. package/src/lib/server/pos-ops-gate.js +50 -19
  329. package/src/lib/server/pos-ops-gate.js.map +1 -1
  330. package/src/lib/server/pos-ops-routes.js +24 -0
  331. package/src/lib/server/pos-ops-routes.js.map +1 -1
  332. package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
  333. package/src/lib/server/pos-order-refund-ids.js +31 -0
  334. package/src/lib/server/pos-order-refund-ids.js.map +1 -0
  335. package/src/lib/server/pos-order.js +52 -49
  336. package/src/lib/server/pos-order.js.map +1 -1
  337. package/src/lib/server/pos-payment.js +1 -1
  338. package/src/lib/server/pos-payment.js.map +1 -1
  339. package/src/lib/server/pos-reader-splash-admin.js +30 -32
  340. package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
  341. package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
  342. package/src/lib/server/pos-reader-splash-images-route.js +113 -0
  343. package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
  344. package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
  345. package/src/lib/server/pos-reader-splash-images.js +123 -0
  346. package/src/lib/server/pos-reader-splash-images.js.map +1 -0
  347. package/src/lib/server/pos-reader-splash.d.ts +68 -1
  348. package/src/lib/server/pos-reader-splash.js +182 -11
  349. package/src/lib/server/pos-reader-splash.js.map +1 -1
  350. package/src/lib/server/pos-readers.d.ts +29 -0
  351. package/src/lib/server/pos-readers.js +134 -35
  352. package/src/lib/server/pos-readers.js.map +1 -1
  353. package/src/lib/server/pos-refund-authority.d.ts +3 -1
  354. package/src/lib/server/pos-refund-authority.js +3 -2
  355. package/src/lib/server/pos-refund-authority.js.map +1 -1
  356. package/src/lib/server/pos-return.d.ts +10 -0
  357. package/src/lib/server/pos-return.js +29 -7
  358. package/src/lib/server/pos-return.js.map +1 -1
  359. package/src/lib/server/pos-sale.js +6 -1
  360. package/src/lib/server/pos-sale.js.map +1 -1
  361. package/src/lib/server/pos-shift.js +11 -0
  362. package/src/lib/server/pos-shift.js.map +1 -1
  363. package/src/lib/server/pos-staff-pin.js +29 -24
  364. package/src/lib/server/pos-staff-pin.js.map +1 -1
  365. package/src/lib/server/pos-terminal.d.ts +14 -4
  366. package/src/lib/server/pos-terminal.js +34 -38
  367. package/src/lib/server/pos-terminal.js.map +1 -1
  368. package/src/lib/server/printers.d.ts +7 -3
  369. package/src/lib/server/printers.js +18 -12
  370. package/src/lib/server/printers.js.map +1 -1
  371. package/src/lib/server/product-drafts.d.ts +11 -1
  372. package/src/lib/server/product-drafts.js +12 -8
  373. package/src/lib/server/product-drafts.js.map +1 -1
  374. package/src/lib/server/product.d.ts +15 -1
  375. package/src/lib/server/product.js +16 -3
  376. package/src/lib/server/product.js.map +1 -1
  377. package/src/lib/server/products-write.d.ts +26 -2
  378. package/src/lib/server/products-write.js +19 -7
  379. package/src/lib/server/products-write.js.map +1 -1
  380. package/src/lib/server/refund.js +55 -42
  381. package/src/lib/server/refund.js.map +1 -1
  382. package/src/lib/server/reservation-availability-query.d.ts +8 -0
  383. package/src/lib/server/reservation-availability-query.js +11 -1
  384. package/src/lib/server/reservation-availability-query.js.map +1 -1
  385. package/src/lib/server/reservation-availability.d.ts +1 -1
  386. package/src/lib/server/reservation-availability.js +7 -2
  387. package/src/lib/server/reservation-availability.js.map +1 -1
  388. package/src/lib/server/reservation-guests.d.ts +32 -0
  389. package/src/lib/server/reservation-guests.js +285 -0
  390. package/src/lib/server/reservation-guests.js.map +1 -0
  391. package/src/lib/server/reservation-walk-in.d.ts +11 -1
  392. package/src/lib/server/reservation-walk-in.js +56 -12
  393. package/src/lib/server/reservation-walk-in.js.map +1 -1
  394. package/src/lib/server/reserve.js +18 -5
  395. package/src/lib/server/reserve.js.map +1 -1
  396. package/src/lib/server/returns.js +9 -6
  397. package/src/lib/server/returns.js.map +1 -1
  398. package/src/lib/server/reviews.d.ts +22 -2
  399. package/src/lib/server/reviews.js +88 -20
  400. package/src/lib/server/reviews.js.map +1 -1
  401. package/src/lib/server/shipping-connectors.js +10 -11
  402. package/src/lib/server/shipping-connectors.js.map +1 -1
  403. package/src/lib/server/site-page-resolver.js +20 -3
  404. package/src/lib/server/site-page-resolver.js.map +1 -1
  405. package/src/lib/server/store-day.d.ts +33 -0
  406. package/src/lib/server/store-day.js +46 -0
  407. package/src/lib/server/store-day.js.map +1 -0
  408. package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
  409. package/src/lib/server/store-setup-ai-writer.js +5 -6
  410. package/src/lib/server/store-setup-ai-writer.js.map +1 -1
  411. package/src/lib/server/storefront-tax.d.ts +13 -0
  412. package/src/lib/server/storefront-tax.js +8 -1
  413. package/src/lib/server/storefront-tax.js.map +1 -1
  414. package/src/lib/server/tax-return-source.d.ts +32 -3
  415. package/src/lib/server/tax-return-source.js +99 -20
  416. package/src/lib/server/tax-return-source.js.map +1 -1
  417. package/src/lib/server.js +100 -2
  418. package/src/lib/server.js.map +1 -1
  419. package/src/lib/testing/fake-firestore.js +58 -16
  420. package/src/lib/testing/fake-firestore.js.map +1 -1
  421. package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
  422. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
  423. package/src/lib/testing/site-register-permissions.d.ts +29 -0
  424. package/src/lib/testing/site-register-permissions.js +38 -0
  425. package/src/lib/testing/site-register-permissions.js.map +1 -0
  426. package/src/lib/transfer/tracking.server.js +8 -5
  427. package/src/lib/transfer/tracking.server.js.map +1 -1
  428. package/src/lib/utils/add-to-cart.d.ts +2 -0
  429. package/src/lib/utils/add-to-cart.js +6 -3
  430. package/src/lib/utils/add-to-cart.js.map +1 -1
@@ -17,18 +17,44 @@
17
17
  import { firebaseAdmin, getOrgForHost } from "@aglyn/tenant-data-admin";
18
18
  import { resolveOrgPermissions } from "@aglyn/tenant-runtime/org-permissions";
19
19
  import { isRefusedIdToken } from "@aglyn/tenant-data-admin/server/id-token-refusal";
20
+ import { holdsPosPermission, posPermissionRefusal } from "../model/plugin-permissions.js";
21
+ /** Who works the register: `managePos`, as resolved for the site (AGL-4047). */ export function worksPosRegister(permissions) {
22
+ return (permissions == null ? void 0 : permissions['managePos']) === true;
23
+ }
20
24
  /**
21
- * The register's gate, shared by every POS route (AGL-3607): the same three
25
+ * The register's gate, shared by every POS route (AGL-3607): the same
22
26
  * questions `pos-order.ts` asks, in the same order, so a payment, a reader or
23
27
  * a display pairing is refused to exactly the people a sale is refused to.
24
28
  *
25
29
  * 1. A Firebase ID token.
26
- * 2. `admin` or `editor` on THIS site (`memberRoles`), an allowlist so a role
27
- * added later is refused until someone decides otherwise (AGL-2262).
28
- * 3. `managePos` on the member's resolved permissions (AGL-2474), and the
29
- * `pos` plan entitlement on the org that owns the site.
30
- */ export async function authorizePosStaff(req, hostId) {
31
- var _req_headers_authorization, _hostSnapshot_get, _ref, _ref1, _ref2;
30
+ * 2. `managePos` on the member's permissions as resolved FOR THIS SITE
31
+ * (AGL-2474) — or what `admits` asks instead — and the `pos` plan
32
+ * entitlement on the org that owns the site.
33
+ * 3. When the route names one, the finer register key its action needs
34
+ * (AGL-4047): `posSell`, `posDevices`, `posBuyHardware` and the rest,
35
+ * each following `managePos` unless a role or the member sets it.
36
+ *
37
+ * THE KEYS DECIDE, NOT THE SITE ROLE (AGL-4047). This asked for `admin` or
38
+ * `editor` in the site's `memberRoles` as well, which is exactly the set the
39
+ * key is on for by default, so nobody who had the register loses it. The
40
+ * resolver answers for this site: an org-wide member from their org role,
41
+ * custom role and overrides; a site collaborator from the role they hold
42
+ * here and their overrides; and anyone without access to the site with
43
+ * nothing. So a site viewer the workspace grants the register works it, and
44
+ * an admin a role narrows is refused. A site no workspace owns resolves
45
+ * against the caller's own workspace, and is refused by the plan step, which
46
+ * reads the plan of the workspace that owns the site.
47
+ */ export async function authorizePosStaff(req, hostId, permission, /**
48
+ * Who the route admits before the finer key: whoever works the register,
49
+ * unless the route says otherwise — the hardware shop also admits a member
50
+ * who may buy hardware without the register.
51
+ */ admits = worksPosRegister, /**
52
+ * `planRequired: false` admits a workspace whose plan does not include the
53
+ * point of sale, for the one read that must tell such a workspace what it
54
+ * needs first: a card reader it bought in person, waiting for that plan
55
+ * (AGL-4038). Everything that acts still asks the plan.
56
+ */ options = {}) {
57
+ var _req_headers_authorization, _membership_permissions, _ref, _ref1, _ref2;
32
58
  var _ownerOrg_org;
33
59
  const authorization = String((_req_headers_authorization = req.headers.authorization) != null ? _req_headers_authorization : '');
34
60
  const idToken = authorization.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : '';
@@ -59,26 +85,25 @@ import { isRefusedIdToken } from "@aglyn/tenant-data-admin/server/id-token-refus
59
85
  status: 404,
60
86
  error: 'Unknown site'
61
87
  };
62
- const memberRole = ((_hostSnapshot_get = hostSnapshot.get('memberRoles')) != null ? _hostSnapshot_get : {})[uid];
63
- if (memberRole !== 'admin' && memberRole !== 'editor') {
88
+ const membership = await resolveOrgPermissions(uid, {
89
+ hostId
90
+ });
91
+ if (!admits((_membership_permissions = membership.permissions) != null ? _membership_permissions : {})) {
64
92
  return {
65
93
  ok: false,
66
94
  status: 403,
67
95
  error: 'Not permitted'
68
96
  };
69
97
  }
70
- const membership = await resolveOrgPermissions(uid, {
71
- hostId
72
- });
73
- if (!membership.permissions.managePos) {
98
+ if (permission && !holdsPosPermission(membership.permissions, permission)) {
74
99
  return {
75
100
  ok: false,
76
101
  status: 403,
77
- error: 'Not permitted'
102
+ error: posPermissionRefusal(permission)
78
103
  };
79
104
  }
80
105
  const ownerOrg = await getOrgForHost(hostId);
81
- if (!Aglyn.checkEntitlement(ownerOrg == null ? void 0 : ownerOrg.org, 'pos')) {
106
+ if (options.planRequired !== false && !Aglyn.checkEntitlement(ownerOrg == null ? void 0 : ownerOrg.org, 'pos')) {
82
107
  return {
83
108
  ok: false,
84
109
  status: 403,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-auth.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 * as Aglyn from '@aglyn/aglyn/server'\nimport type { PluginApiRequest } from '@aglyn/aglyn/server'\nimport { firebaseAdmin, getOrgForHost } from '@aglyn/tenant-data-admin'\nimport { resolveOrgPermissions } from '@aglyn/tenant-runtime/org-permissions'\nimport { isRefusedIdToken } from '@aglyn/tenant-data-admin/server/id-token-refusal'\n\n/** Who is working the register, once the gate has admitted them. */\nexport interface PosStaff {\n uid: string\n hostId: string\n orgId: string\n org: Record<string, any> | null\n}\n\nexport type PosStaffGate =\n | { ok: true; staff: PosStaff }\n | { ok: false; status: number; error: string }\n\n/**\n * The register's gate, shared by every POS route (AGL-3607): the same three\n * questions `pos-order.ts` asks, in the same order, so a payment, a reader or\n * a display pairing is refused to exactly the people a sale is refused to.\n *\n * 1. A Firebase ID token.\n * 2. `admin` or `editor` on THIS site (`memberRoles`), an allowlist so a role\n * added later is refused until someone decides otherwise (AGL-2262).\n * 3. `managePos` on the member's resolved permissions (AGL-2474), and the\n * `pos` plan entitlement on the org that owns the site.\n */\nexport async function authorizePosStaff(\n req: PluginApiRequest,\n hostId: string,\n): Promise<PosStaffGate> {\n const authorization = String(req.headers.authorization ?? '')\n const idToken = authorization.startsWith('Bearer ')\n ? authorization.slice('Bearer '.length)\n : ''\n if (!idToken) return { ok: false, status: 401, error: 'Unauthenticated' }\n if (!hostId) return { ok: false, status: 400, error: 'Missing hostId' }\n let uid: string\n try {\n uid = (await firebaseAdmin.app().auth().verifyIdToken(idToken)).uid\n } catch (error) {\n if (!isRefusedIdToken(error)) throw error\n return { ok: false, status: 401, error: 'Unauthenticated' }\n }\n const hostSnapshot = await firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .get()\n if (!hostSnapshot.exists) return { ok: false, status: 404, error: 'Unknown site' }\n const memberRole = (hostSnapshot.get('memberRoles') ?? {})[uid]\n if (memberRole !== 'admin' && memberRole !== 'editor') {\n return { ok: false, status: 403, error: 'Not permitted' }\n }\n const membership = await resolveOrgPermissions(uid, { hostId })\n if (!membership.permissions.managePos) {\n return { ok: false, status: 403, error: 'Not permitted' }\n }\n const ownerOrg = await getOrgForHost(hostId)\n if (!Aglyn.checkEntitlement(ownerOrg?.org as any, 'pos')) {\n return { ok: false, status: 403, error: 'POS requires the Pro plan or above' }\n }\n return {\n ok: true,\n staff: {\n uid,\n hostId,\n orgId: String(ownerOrg?.org?.id ?? ownerOrg?.orgId ?? ''),\n org: (ownerOrg?.org as Record<string, any>) ?? null,\n },\n }\n}\n\n/** A JSON body, whether the dispatcher parsed it or not. */\nexport function posRequestBody(req: PluginApiRequest): Record<string, any> {\n if (typeof req.body === 'string') {\n try {\n const parsed = JSON.parse(req.body)\n return parsed && typeof parsed === 'object' ? parsed : {}\n } catch {\n return {}\n }\n }\n return req.body && typeof req.body === 'object' ? req.body : {}\n}\n\n/** A GET request's query as a flat body, first value of each key. */\nexport function posQueryBody(req: PluginApiRequest): Record<string, any> {\n return Object.fromEntries(\n Object.entries(req.query ?? {}).map(([key, value]) => [\n key,\n Array.isArray(value) ? value[0] : value,\n ]),\n )\n}\n\n/** The request's Idempotency-Key header, trimmed and bounded. */\nexport function posIdempotencyKey(req: PluginApiRequest): string {\n return String(\n req.headers['idempotency-key'] ?? req.headers['Idempotency-Key'] ?? '',\n )\n .trim()\n .slice(0, 200)\n}\n"],"names":["Aglyn","firebaseAdmin","getOrgForHost","resolveOrgPermissions","isRefusedIdToken","authorizePosStaff","req","hostId","hostSnapshot","ownerOrg","authorization","String","headers","idToken","startsWith","slice","length","ok","status","error","uid","app","auth","verifyIdToken","firestore","collection","doc","get","exists","memberRole","membership","permissions","managePos","checkEntitlement","org","staff","orgId","id","posRequestBody","body","parsed","JSON","parse","posQueryBody","Object","fromEntries","entries","query","map","key","value","Array","isArray","posIdempotencyKey","trim"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-auth.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 * as Aglyn from '@aglyn/aglyn/server'\nimport type { PluginApiRequest } from '@aglyn/aglyn/server'\nimport { firebaseAdmin, getOrgForHost } from '@aglyn/tenant-data-admin'\nimport { resolveOrgPermissions } from '@aglyn/tenant-runtime/org-permissions'\nimport { isRefusedIdToken } from '@aglyn/tenant-data-admin/server/id-token-refusal'\nimport {\n holdsPosPermission,\n posPermissionRefusal,\n type PosPermission,\n} from '../model/plugin-permissions'\n\n/** Who is working the register, once the gate has admitted them. */\nexport interface PosStaff {\n uid: string\n hostId: string\n orgId: string\n org: Record<string, any> | null\n}\n\nexport type PosStaffGate =\n | { ok: true; staff: PosStaff }\n | { ok: false; status: number; error: string }\n\n/** Who works the register: `managePos`, as resolved for the site (AGL-4047). */\nexport function worksPosRegister(\n permissions: Readonly<Record<string, boolean | undefined>> | null | undefined,\n): boolean {\n return permissions?.['managePos'] === true\n}\n\n/**\n * The register's gate, shared by every POS route (AGL-3607): the same\n * questions `pos-order.ts` asks, in the same order, so a payment, a reader or\n * a display pairing is refused to exactly the people a sale is refused to.\n *\n * 1. A Firebase ID token.\n * 2. `managePos` on the member's permissions as resolved FOR THIS SITE\n * (AGL-2474) — or what `admits` asks instead — and the `pos` plan\n * entitlement on the org that owns the site.\n * 3. When the route names one, the finer register key its action needs\n * (AGL-4047): `posSell`, `posDevices`, `posBuyHardware` and the rest,\n * each following `managePos` unless a role or the member sets it.\n *\n * THE KEYS DECIDE, NOT THE SITE ROLE (AGL-4047). This asked for `admin` or\n * `editor` in the site's `memberRoles` as well, which is exactly the set the\n * key is on for by default, so nobody who had the register loses it. The\n * resolver answers for this site: an org-wide member from their org role,\n * custom role and overrides; a site collaborator from the role they hold\n * here and their overrides; and anyone without access to the site with\n * nothing. So a site viewer the workspace grants the register works it, and\n * an admin a role narrows is refused. A site no workspace owns resolves\n * against the caller's own workspace, and is refused by the plan step, which\n * reads the plan of the workspace that owns the site.\n */\nexport async function authorizePosStaff(\n req: PluginApiRequest,\n hostId: string,\n permission?: PosPermission,\n /**\n * Who the route admits before the finer key: whoever works the register,\n * unless the route says otherwise — the hardware shop also admits a member\n * who may buy hardware without the register.\n */\n admits: (permissions: Readonly<Record<string, boolean | undefined>>) => boolean = worksPosRegister,\n /**\n * `planRequired: false` admits a workspace whose plan does not include the\n * point of sale, for the one read that must tell such a workspace what it\n * needs first: a card reader it bought in person, waiting for that plan\n * (AGL-4038). Everything that acts still asks the plan.\n */\n options: { planRequired?: boolean } = {},\n): Promise<PosStaffGate> {\n const authorization = String(req.headers.authorization ?? '')\n const idToken = authorization.startsWith('Bearer ')\n ? authorization.slice('Bearer '.length)\n : ''\n if (!idToken) return { ok: false, status: 401, error: 'Unauthenticated' }\n if (!hostId) return { ok: false, status: 400, error: 'Missing hostId' }\n let uid: string\n try {\n uid = (await firebaseAdmin.app().auth().verifyIdToken(idToken)).uid\n } catch (error) {\n if (!isRefusedIdToken(error)) throw error\n return { ok: false, status: 401, error: 'Unauthenticated' }\n }\n const hostSnapshot = await firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .get()\n if (!hostSnapshot.exists) return { ok: false, status: 404, error: 'Unknown site' }\n const membership = await resolveOrgPermissions(uid, { hostId })\n if (!admits(membership.permissions ?? {})) {\n return { ok: false, status: 403, error: 'Not permitted' }\n }\n if (permission && !holdsPosPermission(membership.permissions, permission)) {\n return { ok: false, status: 403, error: posPermissionRefusal(permission) }\n }\n const ownerOrg = await getOrgForHost(hostId)\n if (options.planRequired !== false && !Aglyn.checkEntitlement(ownerOrg?.org as any, 'pos')) {\n return { ok: false, status: 403, error: 'POS requires the Pro plan or above' }\n }\n return {\n ok: true,\n staff: {\n uid,\n hostId,\n orgId: String(ownerOrg?.org?.id ?? ownerOrg?.orgId ?? ''),\n org: (ownerOrg?.org as Record<string, any>) ?? null,\n },\n }\n}\n\n/** A JSON body, whether the dispatcher parsed it or not. */\nexport function posRequestBody(req: PluginApiRequest): Record<string, any> {\n if (typeof req.body === 'string') {\n try {\n const parsed = JSON.parse(req.body)\n return parsed && typeof parsed === 'object' ? parsed : {}\n } catch {\n return {}\n }\n }\n return req.body && typeof req.body === 'object' ? req.body : {}\n}\n\n/** A GET request's query as a flat body, first value of each key. */\nexport function posQueryBody(req: PluginApiRequest): Record<string, any> {\n return Object.fromEntries(\n Object.entries(req.query ?? {}).map(([key, value]) => [\n key,\n Array.isArray(value) ? value[0] : value,\n ]),\n )\n}\n\n/** The request's Idempotency-Key header, trimmed and bounded. */\nexport function posIdempotencyKey(req: PluginApiRequest): string {\n return String(\n req.headers['idempotency-key'] ?? req.headers['Idempotency-Key'] ?? '',\n )\n .trim()\n .slice(0, 200)\n}\n"],"names":["Aglyn","firebaseAdmin","getOrgForHost","resolveOrgPermissions","isRefusedIdToken","holdsPosPermission","posPermissionRefusal","worksPosRegister","permissions","authorizePosStaff","req","hostId","permission","admits","options","membership","ownerOrg","authorization","String","headers","idToken","startsWith","slice","length","ok","status","error","uid","app","auth","verifyIdToken","hostSnapshot","firestore","collection","doc","get","exists","planRequired","checkEntitlement","org","staff","orgId","id","posRequestBody","body","parsed","JSON","parse","posQueryBody","Object","fromEntries","entries","query","map","key","value","Array","isArray","posIdempotencyKey","trim"],"mappings":"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"}
@@ -0,0 +1,81 @@
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 { PluginOrgEraser } from '@aglyn/aglyn/plugin-manager/plugin-org-erasure';
18
+ import type { PluginJobHostGate } from '@aglyn/aglyn/server';
19
+ import { raiseOperatorAlert } from '@aglyn/tenant-data-admin';
20
+ import { type OrgUsageInvoiceRequest, type OrgUsageInvoiceResult } from '@aglyn/tenant-data-admin/server/usage-invoice';
21
+ import { type PosCellularConfig } from '../model/pos-cellular';
22
+ type Charge = (request: OrgUsageInvoiceRequest) => Promise<OrgUsageInvoiceResult>;
23
+ type InvoiceStatus = (invoiceId: string) => Promise<{
24
+ status: string;
25
+ amountPaidCents: number;
26
+ } | null>;
27
+ export interface PosCellularBillingDeps {
28
+ now?: () => number;
29
+ config?: PosCellularConfig | null;
30
+ charge?: Charge;
31
+ readBilling?: (orgId: string) => Promise<{
32
+ stripeCustomerId?: unknown;
33
+ }>;
34
+ turnOff?: (configurationId: string) => Promise<boolean>;
35
+ alert?: typeof raiseOperatorAlert;
36
+ /** Stripe's word on a charge's invoice now, or null when it cannot be asked. */
37
+ invoiceStatus?: InvoiceStatus;
38
+ /** Tells the workspace 4G was turned off; true once told (or there is nobody to tell). */
39
+ notify?: (notice: import('./pos-cellular-notify').PosCellularTurnedOffNotice) => Promise<boolean>;
40
+ /** Warns the workspace 4G turns off unless the charge is paid; true once told (or there is nobody to tell). */
41
+ warn?: (notice: import('./pos-cellular-notify').PosCellularPaymentDueNotice) => Promise<boolean>;
42
+ }
43
+ export interface PosCellularBillingReport {
44
+ month: string | null;
45
+ workspaces: number;
46
+ paid: number;
47
+ open: number;
48
+ failed: number;
49
+ unbillable: number;
50
+ deferred: number;
51
+ storesGone: number;
52
+ /** Open charges paid since, found by asking Stripe. */
53
+ paidLate: number;
54
+ /** Workspaces warned that 4G turns off unless a charge left open is paid. */
55
+ warned: number;
56
+ /** Workspaces whose 4G was turned off for a month unpaid past its grace. */
57
+ turnedOff: number;
58
+ }
59
+ /** The charge of every workspace whose readers had 4G last month, once each. */
60
+ export declare function runPosCellularBilling(gate: PluginJobHostGate, deps?: PosCellularBillingDeps): Promise<PosCellularBillingReport>;
61
+ /**
62
+ * Commerce's 4G share of a WORKSPACE erasure (AGL-4038), before its data
63
+ * goes:
64
+ *
65
+ * 1. CHARGE IT. The month the workspace is deleted in is charged now, for
66
+ * each S710 that had 4G in it, as the monthly run would have charged it a
67
+ * month later; and last month too, if the run had not charged it yet.
68
+ * Through the run's own claim and key, so the two never charge one month
69
+ * twice. A workspace that is locked is not charged (its card may be the
70
+ * stolen one the lock is about): staff are alerted instead. Any failure
71
+ * alerts staff and goes on.
72
+ * 2. TURN IT OFF. Every store of the workspace with 4G on has cellular turned
73
+ * off at Stripe, so the platform stops paying for readers nobody will be
74
+ * charged for, and their periods are closed.
75
+ *
76
+ * Never fails the erasure: a refusal is a must alert. A dry run only counts.
77
+ */
78
+ export declare function createPosCellularOrgEraser(deps?: Pick<PosCellularBillingDeps, 'turnOff' | 'alert' | 'now' | 'config' | 'charge' | 'readBilling'>): PluginOrgEraser;
79
+ /** The eraser over the platform's own Firestore and Stripe, as the declarations register it. */
80
+ export declare const posCellularOrgEraser: PluginOrgEraser;
81
+ export {};