@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
@@ -13,6 +13,18 @@
13
13
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ /** The tier defaults `managePos` has, which every finer key mirrors. */ const POS_TIER_DEFAULTS = {
18
+ admin: true,
19
+ editor: true,
20
+ viewer: false
21
+ };
22
+ /*
23
+ * The register is a site's own (AGL-4047): `managePos` and its five finer
24
+ * keys are `narrowsPerSite`, so an editor of the whole workspace given Viewer
25
+ * or Author access to one site does not work that site's register unless the
26
+ * site grants it to them. `posBuyHardware` is not: the hardware shop spends
27
+ * the workspace's money, and its verdict is the workspace's on every site.
16
28
  */ /**
17
29
  * Commerce's plugin-declared permissions (AGL-435) — the reference
18
30
  * adopter. Pure data: the client barrel and /server entry both register
@@ -22,14 +34,219 @@
22
34
  key: 'managePos',
23
35
  pluginId: 'commerce',
24
36
  label: 'Use the point of sale',
25
- description: 'Open the POS page and record in-person sales.',
26
- defaults: {
27
- admin: true,
28
- editor: true,
29
- viewer: false
30
- },
31
- groupLabel: 'Commerce'
37
+ description: 'Open the point of sale. Each point of sale permission below follows this one unless a role or member sets it.',
38
+ defaults: _extends({}, POS_TIER_DEFAULTS),
39
+ groupLabel: 'Commerce',
40
+ narrowsPerSite: true
41
+ },
42
+ {
43
+ key: 'posSell',
44
+ pluginId: 'commerce',
45
+ label: 'Sell at the register',
46
+ description: 'Ring up sales and take payment at the register, the kiosk and the point of sale apps.',
47
+ defaults: _extends({}, POS_TIER_DEFAULTS),
48
+ groupLabel: 'Commerce',
49
+ narrowsPerSite: true,
50
+ refines: 'managePos'
51
+ },
52
+ {
53
+ key: 'posRefund',
54
+ pluginId: 'commerce',
55
+ label: 'Refunds and returns',
56
+ description: 'Refund point of sale orders at the register, up to its refund limit, and take returns and exchanges.',
57
+ defaults: _extends({}, POS_TIER_DEFAULTS),
58
+ groupLabel: 'Commerce',
59
+ narrowsPerSite: true,
60
+ refines: 'managePos'
61
+ },
62
+ {
63
+ key: 'posDiscount',
64
+ pluginId: 'commerce',
65
+ label: 'Give discounts at the register',
66
+ description: 'Take a discount off a sale at the register. A shopper’s discount code and the store’s own promotions apply without it.',
67
+ defaults: _extends({}, POS_TIER_DEFAULTS),
68
+ groupLabel: 'Commerce',
69
+ narrowsPerSite: true,
70
+ refines: 'managePos'
71
+ },
72
+ {
73
+ key: 'posCashDrawer',
74
+ pluginId: 'commerce',
75
+ label: 'Cash drawer and shifts',
76
+ description: 'Open and close shifts, record cash in and out, print shift reports and open the drawer without a sale.',
77
+ defaults: _extends({}, POS_TIER_DEFAULTS),
78
+ groupLabel: 'Commerce',
79
+ narrowsPerSite: true,
80
+ refines: 'managePos'
81
+ },
82
+ {
83
+ key: 'posDevices',
84
+ pluginId: 'commerce',
85
+ label: 'Registers and devices',
86
+ description: 'Add, change and remove card readers, receipt printers and customer displays, and set the reader screen.',
87
+ defaults: _extends({}, POS_TIER_DEFAULTS),
88
+ groupLabel: 'Commerce',
89
+ narrowsPerSite: true,
90
+ refines: 'managePos'
91
+ },
92
+ {
93
+ key: 'posBuyHardware',
94
+ pluginId: 'commerce',
95
+ label: 'Buy point of sale hardware',
96
+ description: 'Order card readers and other hardware from the hardware shop. Follows "Use the point of sale" unless a role or member sets it, and may be allowed without it.',
97
+ defaults: _extends({}, POS_TIER_DEFAULTS),
98
+ groupLabel: 'Commerce',
99
+ follows: 'managePos'
100
+ }
101
+ ];
102
+ /** One finer register key's label, for a refusal or a disabled control's reason. */ export function posPermissionLabel(permission) {
103
+ var _ref;
104
+ var _COMMERCE_PERMISSIONS_find;
105
+ return (_ref = (_COMMERCE_PERMISSIONS_find = COMMERCE_PERMISSIONS.find((entry)=>entry.key === permission)) == null ? void 0 : _COMMERCE_PERMISSIONS_find.label) != null ? _ref : permission;
106
+ }
107
+ /**
108
+ * Whether a resolved permission map allows one of the register's finer
109
+ * actions (AGL-4047): `managePos`, and the finer key not refused. A map
110
+ * that does not carry the finer key at all follows `managePos` — the
111
+ * resolvers always carry it once commerce has registered, so an absent key
112
+ * is a map built before that, which keeps the register it had.
113
+ *
114
+ * `posBuyHardware` stands on its own: its own verdict when the map carries
115
+ * one, granted with or without `managePos`, and `managePos`'s when it does
116
+ * not.
117
+ */ export function holdsPosPermission(permissions, permission) {
118
+ if (permission === 'posBuyHardware') {
119
+ const own = permissions == null ? void 0 : permissions[permission];
120
+ return typeof own === 'boolean' ? own : (permissions == null ? void 0 : permissions['managePos']) === true;
121
+ }
122
+ return (permissions == null ? void 0 : permissions['managePos']) === true && (permissions == null ? void 0 : permissions[permission]) !== false;
123
+ }
124
+ /**
125
+ * Whether a member may open the hardware shop at all (AGL-4047): see what
126
+ * it offers and what the store ordered. Whoever works the register, and
127
+ * whoever may buy hardware without working it.
128
+ */ export function mayVisitPosHardwareShop(permissions) {
129
+ return (permissions == null ? void 0 : permissions['managePos']) === true || holdsPosPermission(permissions, 'posBuyHardware');
130
+ }
131
+ /** The refusal a register route answers when a finer key is not held. */ export function posPermissionRefusal(permission) {
132
+ return `Your role does not include "${posPermissionLabel(permission)}" — ask an organization admin`;
133
+ }
134
+ /** Who held reservations on a site before they were keys: Admin, Editor and Author. */ export const RESERVATION_SITE_ROLE_PRESET = {
135
+ admin: true,
136
+ editor: true,
137
+ author: true,
138
+ viewer: false
139
+ };
140
+ /** The same, per workspace role: the answer with no site named. */ const RESERVATION_ORG_ROLE_PRESET = {
141
+ owner: true,
142
+ admin: true,
143
+ editor: true,
144
+ viewer: false
145
+ };
146
+ /**
147
+ * Who worked a site's orders and gift cards before they were keys: the site's
148
+ * Admin and Editor (an Author edits the catalog and never touched an order).
149
+ */ export const ORDERS_SITE_ROLE_PRESET = {
150
+ admin: true,
151
+ editor: true,
152
+ author: false,
153
+ viewer: false
154
+ };
155
+ /**
156
+ * Who changed a site's payment methods and its shipping app connections
157
+ * before they were keys: the site's Admin alone (an Editor could see them, as
158
+ * whoever works the orders still can).
159
+ */ export const STORE_SETTINGS_SITE_ROLE_PRESET = {
160
+ admin: true,
161
+ editor: false,
162
+ author: false,
163
+ viewer: false
164
+ };
165
+ /** The same, per workspace role: the answer with no site named. */ export const STORE_SETTINGS_ORG_ROLE_PRESET = {
166
+ owner: true,
167
+ admin: true,
168
+ editor: false,
169
+ viewer: false
170
+ };
171
+ /**
172
+ * The reservation keys as commerce declares them into the org permission
173
+ * catalog (AGL-4047), registered beside `COMMERCE_PERMISSIONS`.
174
+ */ export const COMMERCE_SITE_PERMISSIONS = [
175
+ {
176
+ key: 'commerce.reservations',
177
+ label: 'Manage reservations',
178
+ description: 'Edit, cancel and check out stays, and add, change and remove what can be booked. Follows the site role unless a role or member sets it.',
179
+ roleDefaults: _extends({}, RESERVATION_ORG_ROLE_PRESET),
180
+ hostRoleDefaults: _extends({}, RESERVATION_SITE_ROLE_PRESET),
181
+ group: 'commerce',
182
+ groupLabel: 'Commerce',
183
+ presetFromSiteRole: true
184
+ },
185
+ {
186
+ key: 'commerce.walkIns',
187
+ label: 'Book walk-ins and change guests',
188
+ description: 'Book a walk-in stay and change how many guests a stay is for. Follows "Manage reservations" unless a role or member sets it, and may be allowed without it.',
189
+ roleDefaults: _extends({}, RESERVATION_ORG_ROLE_PRESET),
190
+ hostRoleDefaults: _extends({}, RESERVATION_SITE_ROLE_PRESET),
191
+ group: 'commerce',
192
+ groupLabel: 'Commerce',
193
+ presetFromSiteRole: true,
194
+ follows: 'commerce.reservations'
195
+ },
196
+ {
197
+ key: 'commerce.orders',
198
+ label: 'Manage orders',
199
+ description: 'Fulfill, cancel and print orders, resend receipts, build draft orders, take returns and record shipments. Follows the site role unless a role or member sets it.',
200
+ roleDefaults: _extends({}, RESERVATION_ORG_ROLE_PRESET),
201
+ hostRoleDefaults: _extends({}, ORDERS_SITE_ROLE_PRESET),
202
+ group: 'commerce',
203
+ groupLabel: 'Commerce',
204
+ presetFromSiteRole: true
205
+ },
206
+ {
207
+ key: 'commerce.giftCards',
208
+ label: 'Issue gift cards',
209
+ description: 'Issue, adjust and void the store’s gift cards. Follows the site role unless a role or member sets it.',
210
+ roleDefaults: _extends({}, RESERVATION_ORG_ROLE_PRESET),
211
+ hostRoleDefaults: _extends({}, ORDERS_SITE_ROLE_PRESET),
212
+ group: 'commerce',
213
+ groupLabel: 'Commerce',
214
+ presetFromSiteRole: true
215
+ },
216
+ {
217
+ key: 'commerce.paymentMethods',
218
+ label: 'Manage payment methods',
219
+ description: 'Turn the store’s payment methods on and off. Anyone with "Manage orders" sees them. Follows the site role unless a role or member sets it.',
220
+ roleDefaults: _extends({}, STORE_SETTINGS_ORG_ROLE_PRESET),
221
+ hostRoleDefaults: _extends({}, STORE_SETTINGS_SITE_ROLE_PRESET),
222
+ group: 'commerce',
223
+ groupLabel: 'Commerce',
224
+ presetFromSiteRole: true
225
+ },
226
+ {
227
+ key: 'commerce.shippingConnections',
228
+ label: 'Connect shipping apps',
229
+ description: 'Connect, sync and disconnect ShipStation and ShippingEasy, and show or replace their credentials. Anyone with "Manage orders" sees whether they are connected. Follows the site role unless a role or member sets it.',
230
+ roleDefaults: _extends({}, STORE_SETTINGS_ORG_ROLE_PRESET),
231
+ hostRoleDefaults: _extends({}, STORE_SETTINGS_SITE_ROLE_PRESET),
232
+ group: 'commerce',
233
+ groupLabel: 'Commerce',
234
+ presetFromSiteRole: true
32
235
  }
33
236
  ];
237
+ /** The refusal a door answers when a commerce site key is not held: names the permission. */ export function commerceSitePermissionRefusal(key) {
238
+ var _ref;
239
+ var _COMMERCE_SITE_PERMISSIONS_find;
240
+ const label = (_ref = (_COMMERCE_SITE_PERMISSIONS_find = COMMERCE_SITE_PERMISSIONS.find((entry)=>entry.key === key)) == null ? void 0 : _COMMERCE_SITE_PERMISSIONS_find.label) != null ? _ref : key;
241
+ return `Your role does not include "${label}" — ask an organization admin`;
242
+ }
243
+ /** One reservation key's label, for a refusal. */ export function reservationPermissionLabel(permission) {
244
+ var _ref;
245
+ var _COMMERCE_SITE_PERMISSIONS_find;
246
+ return (_ref = (_COMMERCE_SITE_PERMISSIONS_find = COMMERCE_SITE_PERMISSIONS.find((entry)=>entry.key === permission)) == null ? void 0 : _COMMERCE_SITE_PERMISSIONS_find.label) != null ? _ref : permission;
247
+ }
248
+ /** The refusal a reservation route answers when its key is not held; names the permission, never a role. */ export function reservationPermissionRefusal(permission) {
249
+ return commerceSitePermissionRefusal(permission);
250
+ }
34
251
 
35
252
  //# sourceMappingURL=plugin-permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/model/plugin-permissions.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 type { PluginPermission } from '@aglyn/aglyn/plugin-manager/plugin-permissions'\n\n/**\n * Commerce's plugin-declared permissions (AGL-435) — the reference\n * adopter. Pure data: the client barrel and /server entry both register\n * it, so console gating and API-side resolution agree.\n */\nexport const COMMERCE_PERMISSIONS: readonly PluginPermission[] = [\n {\n key: 'managePos',\n pluginId: 'commerce',\n label: 'Use the point of sale',\n description: 'Open the POS page and record in-person sales.',\n defaults: { admin: true, editor: true, viewer: false },\n groupLabel: 'Commerce',\n },\n]\n"],"names":["COMMERCE_PERMISSIONS","key","pluginId","label","description","defaults","admin","editor","viewer","groupLabel"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAID;;;;CAIC,GACD,OAAO,MAAMA,uBAAoD;IAC/D;QACEC,KAAK;QACLC,UAAU;QACVC,OAAO;QACPC,aAAa;QACbC,UAAU;YAAEC,OAAO;YAAMC,QAAQ;YAAMC,QAAQ;QAAM;QACrDC,YAAY;IACd;CACD,CAAA"}
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/model/plugin-permissions.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 type { HostAccessRole } from '@aglyn/aglyn/foundation/definitions/organization.types'\nimport type { PluginOrgPermissionDeclaration } from '@aglyn/aglyn/plugin-manager/plugin-entitlements'\nimport type { PluginPermission } from '@aglyn/aglyn/plugin-manager/plugin-permissions'\n\n/**\n * The register's finer permissions (AGL-4047), each a part of `managePos`\n * (Use the point of sale). Each REFINES it: never held without it, and,\n * where no custom role or override sets one, it follows `managePos` — so a\n * member keeps exactly the register they had until somebody narrows it.\n */\nexport type PosRegisterPermission =\n | 'posSell'\n | 'posRefund'\n | 'posDiscount'\n | 'posCashDrawer'\n | 'posDevices'\n\n/**\n * The register's keys and `posBuyHardware`, which stands on its own\n * (AGL-4047): it FOLLOWS `managePos` where no custom role or override sets\n * it, so every member keeps the hardware shop they had, but it may be\n * granted without the register — a bookkeeper who orders the store's readers\n * and never rings a sale.\n */\nexport type PosPermission = PosRegisterPermission | 'posBuyHardware'\n\n/** The tier defaults `managePos` has, which every finer key mirrors. */\nconst POS_TIER_DEFAULTS = { admin: true, editor: true, viewer: false } as const\n\n/*\n * The register is a site's own (AGL-4047): `managePos` and its five finer\n * keys are `narrowsPerSite`, so an editor of the whole workspace given Viewer\n * or Author access to one site does not work that site's register unless the\n * site grants it to them. `posBuyHardware` is not: the hardware shop spends\n * the workspace's money, and its verdict is the workspace's on every site.\n */\n\n/**\n * Commerce's plugin-declared permissions (AGL-435) — the reference\n * adopter. Pure data: the client barrel and /server entry both register\n * it, so console gating and API-side resolution agree.\n */\nexport const COMMERCE_PERMISSIONS: readonly PluginPermission[] = [\n {\n key: 'managePos',\n pluginId: 'commerce',\n label: 'Use the point of sale',\n description:\n 'Open the point of sale. Each point of sale permission below follows this one unless a role or member sets it.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n narrowsPerSite: true,\n },\n {\n key: 'posSell',\n pluginId: 'commerce',\n label: 'Sell at the register',\n description: 'Ring up sales and take payment at the register, the kiosk and the point of sale apps.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n narrowsPerSite: true,\n refines: 'managePos',\n },\n {\n key: 'posRefund',\n pluginId: 'commerce',\n label: 'Refunds and returns',\n description: 'Refund point of sale orders at the register, up to its refund limit, and take returns and exchanges.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n narrowsPerSite: true,\n refines: 'managePos',\n },\n {\n key: 'posDiscount',\n pluginId: 'commerce',\n label: 'Give discounts at the register',\n description:\n 'Take a discount off a sale at the register. A shopper’s discount code and the store’s own promotions apply without it.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n narrowsPerSite: true,\n refines: 'managePos',\n },\n {\n key: 'posCashDrawer',\n pluginId: 'commerce',\n label: 'Cash drawer and shifts',\n description: 'Open and close shifts, record cash in and out, print shift reports and open the drawer without a sale.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n narrowsPerSite: true,\n refines: 'managePos',\n },\n {\n key: 'posDevices',\n pluginId: 'commerce',\n label: 'Registers and devices',\n description: 'Add, change and remove card readers, receipt printers and customer displays, and set the reader screen.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n narrowsPerSite: true,\n refines: 'managePos',\n },\n {\n key: 'posBuyHardware',\n pluginId: 'commerce',\n label: 'Buy point of sale hardware',\n description:\n 'Order card readers and other hardware from the hardware shop. Follows \"Use the point of sale\" unless a role or member sets it, and may be allowed without it.',\n defaults: { ...POS_TIER_DEFAULTS },\n groupLabel: 'Commerce',\n follows: 'managePos',\n },\n]\n\n/** One finer register key's label, for a refusal or a disabled control's reason. */\nexport function posPermissionLabel(permission: PosPermission): string {\n return COMMERCE_PERMISSIONS.find((entry) => entry.key === permission)?.label ?? permission\n}\n\n/**\n * Whether a resolved permission map allows one of the register's finer\n * actions (AGL-4047): `managePos`, and the finer key not refused. A map\n * that does not carry the finer key at all follows `managePos` — the\n * resolvers always carry it once commerce has registered, so an absent key\n * is a map built before that, which keeps the register it had.\n *\n * `posBuyHardware` stands on its own: its own verdict when the map carries\n * one, granted with or without `managePos`, and `managePos`'s when it does\n * not.\n */\nexport function holdsPosPermission(\n permissions: Readonly<Record<string, boolean | undefined>> | null | undefined,\n permission: PosPermission,\n): boolean {\n if (permission === 'posBuyHardware') {\n const own = permissions?.[permission]\n return typeof own === 'boolean' ? own : permissions?.['managePos'] === true\n }\n return permissions?.['managePos'] === true && permissions?.[permission] !== false\n}\n\n/**\n * Whether a member may open the hardware shop at all (AGL-4047): see what\n * it offers and what the store ordered. Whoever works the register, and\n * whoever may buy hardware without working it.\n */\nexport function mayVisitPosHardwareShop(\n permissions: Readonly<Record<string, boolean | undefined>> | null | undefined,\n): boolean {\n return permissions?.['managePos'] === true || holdsPosPermission(permissions, 'posBuyHardware')\n}\n\n/** The refusal a register route answers when a finer key is not held. */\nexport function posPermissionRefusal(permission: PosPermission): string {\n return `Your role does not include \"${posPermissionLabel(permission)}\" — ask an organization admin`\n}\n\n/*\n * RESERVATIONS (AGL-4047).\n *\n * A site's stays and what they book were decided by the member's role ON THE\n * SITE: Admin, Editor and Author could book a walk-in, change a stay's guests\n * and edit or cancel stays, and a Viewer could not (`canWriteHostContent` in\n * the rules, the same three roles at the routes). Those are now keys whose\n * preset is that site role (`presetFromSiteRole`), so every member keeps\n * exactly the access they had, and a custom role, a member's own permissions\n * or a site's toggle can grant or refuse either one: the window's staff can\n * be allowed walk-ins without editing anyone's booking.\n */\n\n/** The reservation keys. */\nexport type ReservationPermission = 'commerce.reservations' | 'commerce.walkIns'\n\n/** Commerce's keys whose preset is the site role (AGL-4047). */\nexport type CommerceSitePermission =\n | ReservationPermission\n | 'commerce.orders'\n | 'commerce.giftCards'\n | 'commerce.paymentMethods'\n | 'commerce.shippingConnections'\n\n/** Who held reservations on a site before they were keys: Admin, Editor and Author. */\nexport const RESERVATION_SITE_ROLE_PRESET: Readonly<Record<HostAccessRole, boolean>> = {\n admin: true,\n editor: true,\n author: true,\n viewer: false,\n}\n\n/** The same, per workspace role: the answer with no site named. */\nconst RESERVATION_ORG_ROLE_PRESET = { owner: true, admin: true, editor: true, viewer: false } as const\n\n/**\n * Who worked a site's orders and gift cards before they were keys: the site's\n * Admin and Editor (an Author edits the catalog and never touched an order).\n */\nexport const ORDERS_SITE_ROLE_PRESET: Readonly<Record<HostAccessRole, boolean>> = {\n admin: true,\n editor: true,\n author: false,\n viewer: false,\n}\n\n/**\n * Who changed a site's payment methods and its shipping app connections\n * before they were keys: the site's Admin alone (an Editor could see them, as\n * whoever works the orders still can).\n */\nexport const STORE_SETTINGS_SITE_ROLE_PRESET: Readonly<Record<HostAccessRole, boolean>> = {\n admin: true,\n editor: false,\n author: false,\n viewer: false,\n}\n\n/** The same, per workspace role: the answer with no site named. */\nexport const STORE_SETTINGS_ORG_ROLE_PRESET = { owner: true, admin: true, editor: false, viewer: false } as const\n\n/**\n * The reservation keys as commerce declares them into the org permission\n * catalog (AGL-4047), registered beside `COMMERCE_PERMISSIONS`.\n */\nexport const COMMERCE_SITE_PERMISSIONS: readonly PluginOrgPermissionDeclaration[] = [\n {\n key: 'commerce.reservations',\n label: 'Manage reservations',\n description:\n 'Edit, cancel and check out stays, and add, change and remove what can be booked. Follows the site role unless a role or member sets it.',\n roleDefaults: { ...RESERVATION_ORG_ROLE_PRESET },\n hostRoleDefaults: { ...RESERVATION_SITE_ROLE_PRESET },\n group: 'commerce',\n groupLabel: 'Commerce',\n presetFromSiteRole: true,\n },\n {\n key: 'commerce.walkIns',\n label: 'Book walk-ins and change guests',\n description:\n 'Book a walk-in stay and change how many guests a stay is for. Follows \"Manage reservations\" unless a role or member sets it, and may be allowed without it.',\n roleDefaults: { ...RESERVATION_ORG_ROLE_PRESET },\n hostRoleDefaults: { ...RESERVATION_SITE_ROLE_PRESET },\n group: 'commerce',\n groupLabel: 'Commerce',\n presetFromSiteRole: true,\n follows: 'commerce.reservations',\n },\n {\n key: 'commerce.orders',\n label: 'Manage orders',\n description:\n 'Fulfill, cancel and print orders, resend receipts, build draft orders, take returns and record shipments. Follows the site role unless a role or member sets it.',\n roleDefaults: { ...RESERVATION_ORG_ROLE_PRESET },\n hostRoleDefaults: { ...ORDERS_SITE_ROLE_PRESET },\n group: 'commerce',\n groupLabel: 'Commerce',\n presetFromSiteRole: true,\n },\n {\n key: 'commerce.giftCards',\n label: 'Issue gift cards',\n description: 'Issue, adjust and void the store’s gift cards. Follows the site role unless a role or member sets it.',\n roleDefaults: { ...RESERVATION_ORG_ROLE_PRESET },\n hostRoleDefaults: { ...ORDERS_SITE_ROLE_PRESET },\n group: 'commerce',\n groupLabel: 'Commerce',\n presetFromSiteRole: true,\n },\n {\n key: 'commerce.paymentMethods',\n label: 'Manage payment methods',\n description:\n 'Turn the store’s payment methods on and off. Anyone with \"Manage orders\" sees them. Follows the site role unless a role or member sets it.',\n roleDefaults: { ...STORE_SETTINGS_ORG_ROLE_PRESET },\n hostRoleDefaults: { ...STORE_SETTINGS_SITE_ROLE_PRESET },\n group: 'commerce',\n groupLabel: 'Commerce',\n presetFromSiteRole: true,\n },\n {\n key: 'commerce.shippingConnections',\n label: 'Connect shipping apps',\n description:\n 'Connect, sync and disconnect ShipStation and ShippingEasy, and show or replace their credentials. Anyone with \"Manage orders\" sees whether they are connected. Follows the site role unless a role or member sets it.',\n roleDefaults: { ...STORE_SETTINGS_ORG_ROLE_PRESET },\n hostRoleDefaults: { ...STORE_SETTINGS_SITE_ROLE_PRESET },\n group: 'commerce',\n groupLabel: 'Commerce',\n presetFromSiteRole: true,\n },\n]\n\n/** The refusal a door answers when a commerce site key is not held: names the permission. */\nexport function commerceSitePermissionRefusal(key: CommerceSitePermission): string {\n const label = COMMERCE_SITE_PERMISSIONS.find((entry) => entry.key === key)?.label ?? key\n return `Your role does not include \"${label}\" — ask an organization admin`\n}\n\n/** One reservation key's label, for a refusal. */\nexport function reservationPermissionLabel(permission: ReservationPermission): string {\n return COMMERCE_SITE_PERMISSIONS.find((entry) => entry.key === permission)?.label ?? permission\n}\n\n/** The refusal a reservation route answers when its key is not held; names the permission, never a role. */\nexport function reservationPermissionRefusal(permission: ReservationPermission): string {\n return commerceSitePermissionRefusal(permission)\n}\n"],"names":["POS_TIER_DEFAULTS","admin","editor","viewer","COMMERCE_PERMISSIONS","key","pluginId","label","description","defaults","groupLabel","narrowsPerSite","refines","follows","posPermissionLabel","permission","find","entry","holdsPosPermission","permissions","own","mayVisitPosHardwareShop","posPermissionRefusal","RESERVATION_SITE_ROLE_PRESET","author","RESERVATION_ORG_ROLE_PRESET","owner","ORDERS_SITE_ROLE_PRESET","STORE_SETTINGS_SITE_ROLE_PRESET","STORE_SETTINGS_ORG_ROLE_PRESET","COMMERCE_SITE_PERMISSIONS","roleDefaults","hostRoleDefaults","group","presetFromSiteRole","commerceSitePermissionRefusal","reservationPermissionLabel","reservationPermissionRefusal"],"mappings":"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"}
@@ -0,0 +1,223 @@
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
+ export declare const POS_CELLULAR_ENV: {
18
+ readonly monthlyCostCents: "POS_CELLULAR_MONTHLY_COST_CENTS";
19
+ readonly billingCostBps: "POS_CELLULAR_BILLING_COST_BPS";
20
+ readonly billingCostFixedCents: "POS_CELLULAR_BILLING_COST_FIXED_CENTS";
21
+ readonly productId: "STRIPE_PRODUCT_POS_CELLULAR";
22
+ readonly graceDays: "POS_CELLULAR_GRACE_DAYS";
23
+ };
24
+ /** How long a month's charge may stay unpaid before 4G is turned off, unless configured. */
25
+ export declare const POS_CELLULAR_DEFAULT_GRACE_DAYS = 14;
26
+ /** A day, in milliseconds. */
27
+ export declare const POS_CELLULAR_DAY_MS: number;
28
+ /** The platform's card processing rate, in basis points: the default billing cost. */
29
+ export declare const POS_CELLULAR_DEFAULT_BILLING_COST_BPS: number;
30
+ /** The platform's card processing fixed fee, in cents: the default billing cost. */
31
+ export declare const POS_CELLULAR_DEFAULT_BILLING_COST_FIXED_CENTS: number;
32
+ /** The Stripe device types that take cellular service: the S710, and its simulator. */
33
+ export declare const POS_CELLULAR_DEVICE_TYPES: readonly string[];
34
+ /** The top-level, server-only record of each reader's 4G months. */
35
+ export declare const POS_CELLULAR_READERS_COLLECTION = "posCellularReaders";
36
+ /** The top-level, server-only record of each workspace's monthly 4G charge. */
37
+ export declare const POS_CELLULAR_CHARGES_COLLECTION = "posCellularCharges";
38
+ /** The metadata `kind` the charge's invoice carries. */
39
+ export declare const POS_CELLULAR_CHARGE_KIND = "pos-cellular";
40
+ /** How many 4G periods a reader's record keeps: two years of on and off. */
41
+ export declare const POS_CELLULAR_MAX_PERIODS = 24;
42
+ export interface PosCellularConfig {
43
+ monthlyCostCents: number;
44
+ billingCostBps: number;
45
+ billingCostFixedCents: number;
46
+ productId: string;
47
+ /** Days a charge may stay unpaid before 4G is turned off for the workspace. */
48
+ graceDays: number;
49
+ }
50
+ /**
51
+ * The deployment's 4G pricing, or null when 4G is not offered: no monthly
52
+ * cost, no product, or a value that is not a whole number in range. A bad
53
+ * value hides the feature rather than billing a guess.
54
+ */
55
+ export declare function parsePosCellularConfig(env?: Record<string, string | undefined>): PosCellularConfig | null;
56
+ /**
57
+ * One workspace's 4G charge for a month, in whole cents: Stripe's price for
58
+ * each reader, grossed up so that what the charge's own processing takes
59
+ * leaves the platform exactly that:
60
+ *
61
+ * ceil((readers × cost + fixed) / (1 − rate))
62
+ *
63
+ * Rounded up, the one direction that never bills below cost.
64
+ * Zero readers is no charge.
65
+ */
66
+ export declare function posCellularChargeCents(readers: number, config: PosCellularConfig): number;
67
+ /**
68
+ * What one reader costs a month, as the console shows it: a store's charge
69
+ * for a single reader. More readers on one charge share its fixed fee, so
70
+ * this is never less than any reader's share of a larger charge.
71
+ */
72
+ export declare function posCellularReaderMonthlyCents(config: PosCellularConfig): number;
73
+ /** Whether a reader of this Stripe device type can have 4G. */
74
+ export declare function isPosCellularDeviceType(deviceType: unknown): boolean;
75
+ /** `2026-10` for a time in October 2026, in UTC. */
76
+ export declare function posCellularMonthKey(ms: number): string;
77
+ /** The calendar month before the one `ms` falls in. */
78
+ export declare function posCellularPreviousMonthKey(ms: number): string;
79
+ /** A month's first instant, and the next month's, in UTC; null for a key that is not one. */
80
+ export declare function posCellularMonthBounds(month: string): {
81
+ startMs: number;
82
+ endMs: number;
83
+ } | null;
84
+ /** `October 2026`, for the invoice line. */
85
+ export declare function posCellularMonthLabel(month: string): string;
86
+ /** One stretch of time a reader had 4G: from when it was turned on, to when it was turned off (open while it is on). */
87
+ export interface PosCellularPeriod {
88
+ fromMs: number;
89
+ toMs: number | null;
90
+ }
91
+ /**
92
+ * `posCellularReaders/{hostId}_{readerId}`: one S710's 4G months, written
93
+ * only by the server. No person is named on it: a workspace, a store, a
94
+ * Stripe reader and its serial, and when it had 4G.
95
+ */
96
+ export interface PosCellularReaderRecord {
97
+ orgId: string;
98
+ hostId: string;
99
+ readerId: string;
100
+ serialNumber: string | null;
101
+ /** The store's Terminal Configuration that carries `cellular[enabled]`. */
102
+ stripeConfigurationId: string | null;
103
+ enabled: boolean;
104
+ periods: PosCellularPeriod[];
105
+ /** The last time a period was closed, which the month's charge queries by. */
106
+ disabledAtMs: number | null;
107
+ updatedAtMs: number;
108
+ }
109
+ /** The record's document id. */
110
+ export declare function posCellularReaderId(hostId: string, readerId: string): string;
111
+ /** The record with a period open from `now`, unless one already is. */
112
+ export declare function openPosCellularPeriod(base: Omit<PosCellularReaderRecord, 'enabled' | 'periods' | 'disabledAtMs' | 'updatedAtMs'>, existing: PosCellularReaderRecord | null, now: number): PosCellularReaderRecord;
113
+ /** The record with its open period closed at `now`; unchanged when none is open. */
114
+ export declare function closePosCellularPeriod(existing: PosCellularReaderRecord, now: number): PosCellularReaderRecord;
115
+ /** Whether a reader had 4G at any time in the month. */
116
+ export declare function posCellularBilledInMonth(record: Pick<PosCellularReaderRecord, 'periods'>, bounds: {
117
+ startMs: number;
118
+ endMs: number;
119
+ }): boolean;
120
+ /** Each workspace's readers that had 4G in the month, by workspace. */
121
+ export declare function posCellularReadersByWorkspace(records: ReadonlyArray<PosCellularReaderRecord>, month: string): Map<string, {
122
+ readers: number;
123
+ hostIds: string[];
124
+ }>;
125
+ /**
126
+ * The outcome of a workspace's month: charged and paid; charged and left
127
+ * open on their Billing page because the card failed; still unpaid after the
128
+ * grace period, so 4G was turned off for the workspace (`suspended`); its
129
+ * invoice voided by staff (`voided`); not charged because there is no one to
130
+ * bill (no workspace, no customer) or nothing to bill (under Stripe's
131
+ * minimum); or `charging`, claimed by a run in progress.
132
+ */
133
+ export type PosCellularChargeState = 'charging' | 'paid' | 'open' | 'suspended' | 'voided' | 'failed' | 'no-workspace' | 'no-customer' | 'below-minimum';
134
+ /** States a later run never charges again. */
135
+ export declare const POS_CELLULAR_SETTLED_STATES: readonly PosCellularChargeState[];
136
+ /** `posCellularCharges/{orgId}_{month}`: one workspace's 4G charge for one month. */
137
+ export interface PosCellularCharge {
138
+ orgId: string;
139
+ month: string;
140
+ readers: number;
141
+ amountCents: number;
142
+ state: PosCellularChargeState;
143
+ invoiceId: string | null;
144
+ paidCents: number;
145
+ attempts: number;
146
+ createdAtMs: number;
147
+ updatedAtMs: number;
148
+ /** When the charge was left open, which the grace period counts from. */
149
+ openedAtMs?: number | null;
150
+ /** When 4G was turned off for the workspace because it stayed unpaid. */
151
+ suspendedAtMs?: number | null;
152
+ /** The stores 4G was turned off for, whose notice clears once it is paid. */
153
+ suspendedHostIds?: string[];
154
+ /**
155
+ * When the people who manage the workspace's billing were warned, as the
156
+ * charge was left open, of the day 4G turns off unless it is paid.
157
+ */
158
+ warnedAtMs?: number | null;
159
+ /** When the people who manage the workspace's billing were told 4G was turned off. */
160
+ noticeSentAtMs?: number | null;
161
+ /** Charged as the workspace was erased, for the month it was deleted in (or the one before). */
162
+ final?: boolean;
163
+ }
164
+ /**
165
+ * When a charge left open runs out of grace: the grace period after it was
166
+ * left open (or, for a charge from before that was recorded, after it last
167
+ * changed).
168
+ */
169
+ export declare function posCellularGraceEndsAtMs(charge: Pick<PosCellularCharge, 'openedAtMs' | 'updatedAtMs'>, graceDays: number): number;
170
+ /** Whether an open charge is past its grace period. */
171
+ export declare function posCellularOverdue(charge: Pick<PosCellularCharge, 'state' | 'openedAtMs' | 'updatedAtMs'>, graceDays: number, now: number): boolean;
172
+ /**
173
+ * Whether the people who manage a workspace's billing are still owed the
174
+ * warning that 4G turns off unless the charge is paid: an open charge not yet
175
+ * warned of. Never a charge made as the workspace was erased, whose 4G is
176
+ * already off and whose members are gone.
177
+ */
178
+ export declare function posCellularWarningDue(charge: Pick<PosCellularCharge, 'state' | 'warnedAtMs' | 'final'>): boolean;
179
+ /**
180
+ * A day as the workspace reads it, `November 16, 2026`, in its time zone
181
+ * (UTC for a zone the runtime cannot format in).
182
+ */
183
+ export declare function posCellularDayLabel(ms: number, timeZone?: string): string;
184
+ /**
185
+ * On a store's terminal settings (`cellularSuspended`) while 4G is off because
186
+ * a month's charge was not paid: which month, its invoice, and when.
187
+ */
188
+ export interface PosCellularSuspension {
189
+ month: string;
190
+ invoiceId: string | null;
191
+ atMs: number;
192
+ }
193
+ /** What the POS devices card is told about 4G for a store; null hides it. */
194
+ export interface PosCellularView {
195
+ /** What one reader costs a month, in cents, before any sales tax. */
196
+ readerMonthlyCents: number;
197
+ enabled: boolean;
198
+ /** The store's readers that take 4G. */
199
+ readers: number;
200
+ /** Turned off because a month's charge was not paid: that month, as `October 2026`, and when. */
201
+ suspended?: {
202
+ month: string;
203
+ atMs: number;
204
+ } | null;
205
+ /**
206
+ * Why the viewer may not turn 4G ON (it is charged to the workspace, so it
207
+ * also takes "Manage billing"), or null. Turning it off needs only the
208
+ * card's own key.
209
+ */
210
+ turnOnBlocked?: string | null;
211
+ }
212
+ /**
213
+ * The 4G row of a store's POS devices card: shown only where 4G is offered
214
+ * and the store has an S710, or already has 4G on (so it can be turned off).
215
+ */
216
+ export declare function posCellularView(config: PosCellularConfig | null, terminal: {
217
+ cellularEnabled?: unknown;
218
+ cellularSuspended?: unknown;
219
+ } | null | undefined, readers: ReadonlyArray<{
220
+ deviceType?: unknown;
221
+ }>, options?: {
222
+ turnOnBlocked?: string | null;
223
+ }): PosCellularView | null;