@aglyn/plugins-commerce 1.0.0-beta.230 → 1.0.0-beta.231
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +13 -13
- package/src/index.d.ts +0 -1
- package/src/index.js +0 -1
- package/src/index.js.map +1 -1
- package/src/lib/barcode/barcode-decode.d.ts +71 -0
- package/src/lib/barcode/barcode-decode.js +498 -0
- package/src/lib/barcode/barcode-decode.js.map +1 -0
- package/src/lib/barcode/barcode-encode.d.ts +44 -0
- package/src/lib/barcode/barcode-encode.js +138 -0
- package/src/lib/barcode/barcode-encode.js.map +1 -0
- package/src/lib/barcode/barcode-scanner.component.d.ts +23 -0
- package/src/lib/barcode/barcode-scanner.component.js +260 -0
- package/src/lib/barcode/barcode-scanner.component.js.map +1 -0
- package/src/lib/barcode/scan-button.component.d.ts +10 -0
- package/src/lib/barcode/scan-button.component.js +62 -0
- package/src/lib/barcode/scan-button.component.js.map +1 -0
- package/src/lib/barcode/scanner-wedge.d.ts +35 -0
- package/src/lib/barcode/scanner-wedge.js +108 -0
- package/src/lib/barcode/scanner-wedge.js.map +1 -0
- package/src/lib/components/account.js +10 -1
- package/src/lib/components/account.js.map +1 -1
- package/src/lib/components/cart-extras.d.ts +45 -0
- package/src/lib/components/cart-extras.js +127 -0
- package/src/lib/components/cart-extras.js.map +1 -0
- package/src/lib/components/cart.js +82 -15
- package/src/lib/components/cart.js.map +1 -1
- package/src/lib/components/checkout-return-notice.d.ts +26 -0
- package/src/lib/components/checkout-return-notice.js +48 -0
- package/src/lib/components/checkout-return-notice.js.map +1 -0
- package/src/lib/components/commerce-console-page.js +124 -0
- package/src/lib/components/commerce-console-page.js.map +1 -1
- package/src/lib/components/commerce-console-sections.d.ts +1 -1
- package/src/lib/components/commerce-console-sections.js +4 -0
- package/src/lib/components/commerce-console-sections.js.map +1 -1
- package/src/lib/components/console/bulk-fulfill.d.ts +44 -0
- package/src/lib/components/console/bulk-fulfill.js +84 -0
- package/src/lib/components/console/bulk-fulfill.js.map +1 -0
- package/src/lib/components/console/customer-notifications-card.component.d.ts +19 -0
- package/src/lib/components/console/customer-notifications-card.component.js +149 -0
- package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
- package/src/lib/components/console/host-orders-card.component.js +84 -5
- package/src/lib/components/console/host-orders-card.component.js.map +1 -1
- package/src/lib/components/console/locations-card.component.js +164 -57
- package/src/lib/components/console/locations-card.component.js.map +1 -1
- package/src/lib/components/console/order-detail-dialog.component.js +209 -61
- package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
- package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
- package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
- package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
- package/src/lib/components/console/order-invoice.component.d.ts +33 -0
- package/src/lib/components/console/order-invoice.component.js +81 -0
- package/src/lib/components/console/order-invoice.component.js.map +1 -0
- package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
- package/src/lib/components/console/order-receipt-resend.component.js +203 -0
- package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
- package/src/lib/components/console/order-returns.component.d.ts +36 -0
- package/src/lib/components/console/order-returns.component.js +142 -0
- package/src/lib/components/console/order-returns.component.js.map +1 -0
- package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
- package/src/lib/components/console/order-shipping-actions.component.js +149 -0
- package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
- package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
- package/src/lib/components/console/order-webhooks-card.component.js +623 -0
- package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
- package/src/lib/components/console/order-zones.d.ts +155 -0
- package/src/lib/components/console/order-zones.js +40 -0
- package/src/lib/components/console/order-zones.js.map +1 -0
- package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
- package/src/lib/components/console/payment-methods-card.component.js +395 -0
- package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-api.d.ts +124 -0
- package/src/lib/components/console/pos/pos-api.js +101 -0
- package/src/lib/components/console/pos/pos-api.js.map +1 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
- package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
- package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
- package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
- package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
- package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
- package/src/lib/components/console/pos/use-pos-display.js +161 -0
- package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
- package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
- package/src/lib/components/console/pos-devices-card.component.js +546 -0
- package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
- package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
- package/src/lib/components/console/pos-display/brand-screen.js +85 -0
- package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
- package/src/lib/components/console/pos-display/cart-screen.js +166 -0
- package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
- package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
- package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
- package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
- package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
- package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
- package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
- package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
- package/src/lib/components/console/pos-display/tip-screen.js +211 -0
- package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
- package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
- package/src/lib/components/console/pos-display-page.component.js +407 -0
- package/src/lib/components/console/pos-display-page.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
- package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
- package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
- package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
- package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
- package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
- package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
- package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
- package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
- package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
- package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
- package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
- package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
- package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
- package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
- package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
- package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
- package/src/lib/components/console/pos-ops/register-ops.js +28 -0
- package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
- package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
- package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
- package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
- package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
- package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
- package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
- package/src/lib/components/console/pos-page.component.d.ts +13 -5
- package/src/lib/components/console/pos-page.component.js +729 -657
- package/src/lib/components/console/pos-page.component.js.map +1 -1
- package/src/lib/components/console/product-editor-dialog.component.js +51 -7
- package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
- package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
- package/src/lib/components/console/product-labels-dialog.component.js +197 -0
- package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
- package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
- package/src/lib/components/console/product-register-fields.component.js +241 -0
- package/src/lib/components/console/product-register-fields.component.js.map +1 -0
- package/src/lib/components/console/product-zones.d.ts +44 -0
- package/src/lib/components/console/product-zones.js.map +1 -1
- package/src/lib/components/console/products-hub-card.component.js +12 -0
- package/src/lib/components/console/products-hub-card.component.js.map +1 -1
- package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
- package/src/lib/components/console/register-hardware-card.component.js +826 -0
- package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
- package/src/lib/components/console/registers-card.component.js +24 -5
- package/src/lib/components/console/registers-card.component.js.map +1 -1
- package/src/lib/components/console/return-actions.d.ts +38 -0
- package/src/lib/components/console/return-actions.js +76 -0
- package/src/lib/components/console/return-actions.js.map +1 -0
- package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
- package/src/lib/components/console/return-detail-dialog.component.js +718 -0
- package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
- package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
- package/src/lib/components/console/return-settings-card.component.js +195 -0
- package/src/lib/components/console/return-settings-card.component.js.map +1 -0
- package/src/lib/components/console/return-zones.d.ts +87 -0
- package/src/lib/components/console/return-zones.js +31 -0
- package/src/lib/components/console/return-zones.js.map +1 -0
- package/src/lib/components/console/returns-card.component.d.ts +45 -0
- package/src/lib/components/console/returns-card.component.js +159 -0
- package/src/lib/components/console/returns-card.component.js.map +1 -0
- package/src/lib/components/console/shipping-settings-card.component.js +161 -5
- package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
- package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
- package/src/lib/components/console/shippingeasy-card.component.js +378 -0
- package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
- package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
- package/src/lib/components/console/shipstation-card.component.js +345 -0
- package/src/lib/components/console/shipstation-card.component.js.map +1 -0
- package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
- package/src/lib/components/console/start-return-dialog.component.js +243 -0
- package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
- package/src/lib/components/console/stock-movements-card.component.js +2 -1
- package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
- package/src/lib/components/console/store-settings-card.component.js +2 -66
- package/src/lib/components/console/store-settings-card.component.js.map +1 -1
- package/src/lib/components/console/store-zones.d.ts +42 -0
- package/src/lib/components/console/store-zones.js +39 -0
- package/src/lib/components/console/store-zones.js.map +1 -0
- package/src/lib/components/order-status.d.ts +36 -0
- package/src/lib/components/order-status.js +502 -0
- package/src/lib/components/order-status.js.map +1 -0
- package/src/lib/components/product-detail.js +41 -2
- package/src/lib/components/product-detail.js.map +1 -1
- package/src/lib/components/return-request.d.ts +32 -0
- package/src/lib/components/return-request.js +576 -0
- package/src/lib/components/return-request.js.map +1 -0
- package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
- package/src/lib/components/storefront-payment-appearance.js +114 -0
- package/src/lib/components/storefront-payment-appearance.js.map +1 -0
- package/src/lib/components/storefront-payment-element.d.ts +57 -1
- package/src/lib/components/storefront-payment-element.js +332 -33
- package/src/lib/components/storefront-payment-element.js.map +1 -1
- package/src/lib/constants/order-status.d.ts +22 -0
- package/src/lib/constants/order-status.js +22 -0
- package/src/lib/constants/order-status.js.map +1 -0
- package/src/lib/constants/return-request.d.ts +27 -0
- package/src/lib/constants/return-request.js +32 -0
- package/src/lib/constants/return-request.js.map +1 -0
- package/src/lib/constants/stock-movement-query.js +2 -1
- package/src/lib/constants/stock-movement-query.js.map +1 -1
- package/src/lib/declarations.console-server.js +9 -0
- package/src/lib/declarations.console-server.js.map +1 -1
- package/src/lib/declarations.server.d.ts +2 -1
- package/src/lib/declarations.server.js +47 -1
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/model/buyer-notifications.d.ts +59 -0
- package/src/lib/model/buyer-notifications.js +97 -0
- package/src/lib/model/buyer-notifications.js.map +1 -0
- package/src/lib/model/commerce-orders.d.ts +127 -1
- package/src/lib/model/commerce-orders.js +24 -15
- package/src/lib/model/commerce-orders.js.map +1 -1
- package/src/lib/model/commerce-payment-methods.d.ts +146 -0
- package/src/lib/model/commerce-payment-methods.js +247 -0
- package/src/lib/model/commerce-payment-methods.js.map +1 -0
- package/src/lib/model/commerce-pos-ops.d.ts +437 -0
- package/src/lib/model/commerce-pos-ops.js +721 -0
- package/src/lib/model/commerce-pos-ops.js.map +1 -0
- package/src/lib/model/commerce-pos.d.ts +263 -0
- package/src/lib/model/commerce-pos.js +375 -0
- package/src/lib/model/commerce-pos.js.map +1 -0
- package/src/lib/model/commerce-printers.d.ts +211 -0
- package/src/lib/model/commerce-printers.js +181 -0
- package/src/lib/model/commerce-printers.js.map +1 -0
- package/src/lib/model/commerce-receipt.d.ts +97 -0
- package/src/lib/model/commerce-receipt.js +180 -0
- package/src/lib/model/commerce-receipt.js.map +1 -0
- package/src/lib/model/commerce-returns.d.ts +207 -0
- package/src/lib/model/commerce-returns.js +300 -0
- package/src/lib/model/commerce-returns.js.map +1 -0
- package/src/lib/model/commerce-shipping.d.ts +44 -1
- package/src/lib/model/commerce-shipping.js +53 -9
- package/src/lib/model/commerce-shipping.js.map +1 -1
- package/src/lib/model/commerce-tax-engine.d.ts +90 -0
- package/src/lib/model/commerce-tax-engine.js +129 -0
- package/src/lib/model/commerce-tax-engine.js.map +1 -0
- package/src/lib/model/commerce.d.ts +88 -2
- package/src/lib/model/commerce.js +89 -1
- package/src/lib/model/commerce.js.map +1 -1
- package/src/lib/model/index.d.ts +15 -0
- package/src/lib/model/index.js +15 -0
- package/src/lib/model/index.js.map +1 -1
- package/src/lib/model/order-events.d.ts +154 -0
- package/src/lib/model/order-events.js +153 -0
- package/src/lib/model/order-events.js.map +1 -0
- package/src/lib/model/order-fulfillment.d.ts +117 -0
- package/src/lib/model/order-fulfillment.js +217 -0
- package/src/lib/model/order-fulfillment.js.map +1 -0
- package/src/lib/model/order-history.d.ts +58 -0
- package/src/lib/model/order-history.js +22 -0
- package/src/lib/model/order-history.js.map +1 -0
- package/src/lib/model/order-list-fields.d.ts +9 -1
- package/src/lib/model/order-list-fields.js +7 -1
- package/src/lib/model/order-list-fields.js.map +1 -1
- package/src/lib/model/order-shipping-export.d.ts +91 -0
- package/src/lib/model/order-shipping-export.js +192 -0
- package/src/lib/model/order-shipping-export.js.map +1 -0
- package/src/lib/model/order-status-view.d.ts +103 -0
- package/src/lib/model/order-status-view.js +156 -0
- package/src/lib/model/order-status-view.js.map +1 -0
- package/src/lib/model/order-webhooks.d.ts +142 -0
- package/src/lib/model/order-webhooks.js +91 -0
- package/src/lib/model/order-webhooks.js.map +1 -0
- package/src/lib/model/product-channel.d.ts +56 -0
- package/src/lib/model/product-channel.js +86 -0
- package/src/lib/model/product-channel.js.map +1 -0
- package/src/lib/model/product-modifiers.d.ts +80 -0
- package/src/lib/model/product-modifiers.js +140 -0
- package/src/lib/model/product-modifiers.js.map +1 -0
- package/src/lib/model/shippingeasy.d.ts +94 -0
- package/src/lib/model/shippingeasy.js +267 -0
- package/src/lib/model/shippingeasy.js.map +1 -0
- package/src/lib/model/shipstation.d.ts +125 -0
- package/src/lib/model/shipstation.js +399 -0
- package/src/lib/model/shipstation.js.map +1 -0
- package/src/lib/model/smart-collection-reads.d.ts +32 -0
- package/src/lib/model/smart-collection-reads.js +63 -0
- package/src/lib/model/smart-collection-reads.js.map +1 -0
- package/src/lib/model/tracking-url.d.ts +74 -0
- package/src/lib/model/tracking-url.js +159 -0
- package/src/lib/model/tracking-url.js.map +1 -0
- package/src/lib/plugin-config.d.ts +13 -0
- package/src/lib/plugin-config.js +77 -5
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +23 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/pos-ops-config.d.ts +39 -0
- package/src/lib/pos-ops-config.js +88 -0
- package/src/lib/pos-ops-config.js.map +1 -0
- package/src/lib/printing/print-document.d.ts +106 -0
- package/src/lib/printing/print-document.js +464 -0
- package/src/lib/printing/print-document.js.map +1 -0
- package/src/lib/printing/product-labels.d.ts +58 -0
- package/src/lib/printing/product-labels.js +116 -0
- package/src/lib/printing/product-labels.js.map +1 -0
- package/src/lib/printing/render-epson.d.ts +57 -0
- package/src/lib/printing/render-epson.js +135 -0
- package/src/lib/printing/render-epson.js.map +1 -0
- package/src/lib/printing/render-star.d.ts +45 -0
- package/src/lib/printing/render-star.js +100 -0
- package/src/lib/printing/render-star.js.map +1 -0
- package/src/lib/printing/render-text.d.ts +25 -0
- package/src/lib/printing/render-text.js +53 -0
- package/src/lib/printing/render-text.js.map +1 -0
- package/src/lib/server/api-v1/openapi.js +27 -4
- package/src/lib/server/api-v1/openapi.js.map +1 -1
- package/src/lib/server/api-v1/order-view.d.ts +67 -0
- package/src/lib/server/api-v1/order-view.js +120 -0
- package/src/lib/server/api-v1/order-view.js.map +1 -0
- package/src/lib/server/api-v1/orders-and-products.js +58 -65
- package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
- package/src/lib/server/billing-webhook.js +135 -28
- package/src/lib/server/billing-webhook.js.map +1 -1
- package/src/lib/server/cancel-order.js +29 -0
- package/src/lib/server/cancel-order.js.map +1 -1
- package/src/lib/server/carrier-rates-availability.d.ts +26 -0
- package/src/lib/server/carrier-rates-availability.js +76 -0
- package/src/lib/server/carrier-rates-availability.js.map +1 -0
- package/src/lib/server/carrier-shipping.d.ts +84 -0
- package/src/lib/server/carrier-shipping.js +135 -0
- package/src/lib/server/carrier-shipping.js.map +1 -0
- package/src/lib/server/cart-checkout.d.ts +2 -0
- package/src/lib/server/cart-checkout.js +226 -22
- package/src/lib/server/cart-checkout.js.map +1 -1
- package/src/lib/server/checkout-extras.d.ts +64 -0
- package/src/lib/server/checkout-extras.js +157 -0
- package/src/lib/server/checkout-extras.js.map +1 -0
- package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
- package/src/lib/server/checkout-status.js +111 -0
- package/src/lib/server/checkout-status.js.map +1 -0
- package/src/lib/server/checkout.js +86 -9
- package/src/lib/server/checkout.js.map +1 -1
- package/src/lib/server/draft-order.js +34 -5
- package/src/lib/server/draft-order.js.map +1 -1
- package/src/lib/server/fulfill-order.d.ts +127 -10
- package/src/lib/server/fulfill-order.js +451 -49
- package/src/lib/server/fulfill-order.js.map +1 -1
- package/src/lib/server/legacy-feed.d.ts +28 -0
- package/src/lib/server/legacy-feed.js +52 -0
- package/src/lib/server/legacy-feed.js.map +1 -0
- package/src/lib/server/native-checkout.d.ts +34 -15
- package/src/lib/server/native-checkout.js +32 -17
- package/src/lib/server/native-checkout.js.map +1 -1
- package/src/lib/server/order-event-host-emit.d.ts +23 -0
- package/src/lib/server/order-event-host-emit.js +30 -0
- package/src/lib/server/order-event-host-emit.js.map +1 -0
- package/src/lib/server/order-event-triggers.d.ts +37 -0
- package/src/lib/server/order-event-triggers.js +119 -0
- package/src/lib/server/order-event-triggers.js.map +1 -0
- package/src/lib/server/order-events.d.ts +62 -0
- package/src/lib/server/order-events.js +109 -0
- package/src/lib/server/order-events.js.map +1 -0
- package/src/lib/server/order-history.d.ts +23 -0
- package/src/lib/server/order-history.js +65 -0
- package/src/lib/server/order-history.js.map +1 -0
- package/src/lib/server/order-notifications.d.ts +185 -0
- package/src/lib/server/order-notifications.js +567 -0
- package/src/lib/server/order-notifications.js.map +1 -0
- package/src/lib/server/order-receipt-send.d.ts +39 -0
- package/src/lib/server/order-receipt-send.js +151 -0
- package/src/lib/server/order-receipt-send.js.map +1 -0
- package/src/lib/server/order-status-token.d.ts +31 -0
- package/src/lib/server/order-status-token.js +75 -0
- package/src/lib/server/order-status-token.js.map +1 -0
- package/src/lib/server/order-status.d.ts +58 -0
- package/src/lib/server/order-status.js +141 -0
- package/src/lib/server/order-status.js.map +1 -0
- package/src/lib/server/order-webhooks.d.ts +108 -0
- package/src/lib/server/order-webhooks.js +622 -0
- package/src/lib/server/order-webhooks.js.map +1 -0
- package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
- package/src/lib/server/orders-shipping-prepare.js +121 -0
- package/src/lib/server/orders-shipping-prepare.js.map +1 -0
- package/src/lib/server/payment-method-domains.d.ts +209 -0
- package/src/lib/server/payment-method-domains.js +444 -0
- package/src/lib/server/payment-method-domains.js.map +1 -0
- package/src/lib/server/payment-methods.d.ts +77 -0
- package/src/lib/server/payment-methods.js +284 -0
- package/src/lib/server/payment-methods.js.map +1 -0
- package/src/lib/server/pos-auth.d.ts +50 -0
- package/src/lib/server/pos-auth.js +121 -0
- package/src/lib/server/pos-auth.js.map +1 -0
- package/src/lib/server/pos-customer.d.ts +49 -0
- package/src/lib/server/pos-customer.js +257 -0
- package/src/lib/server/pos-customer.js.map +1 -0
- package/src/lib/server/pos-display.d.ts +57 -0
- package/src/lib/server/pos-display.js +419 -0
- package/src/lib/server/pos-display.js.map +1 -0
- package/src/lib/server/pos-fee-month.d.ts +34 -0
- package/src/lib/server/pos-fee-month.js +36 -0
- package/src/lib/server/pos-fee-month.js.map +1 -0
- package/src/lib/server/pos-ops-gate.d.ts +161 -0
- package/src/lib/server/pos-ops-gate.js +295 -0
- package/src/lib/server/pos-ops-gate.js.map +1 -0
- package/src/lib/server/pos-ops-routes.d.ts +22 -0
- package/src/lib/server/pos-ops-routes.js +36 -0
- package/src/lib/server/pos-ops-routes.js.map +1 -0
- package/src/lib/server/pos-order.d.ts +1 -18
- package/src/lib/server/pos-order.js +222 -42
- package/src/lib/server/pos-order.js.map +1 -1
- package/src/lib/server/pos-payment.d.ts +39 -0
- package/src/lib/server/pos-payment.js +922 -0
- package/src/lib/server/pos-payment.js.map +1 -0
- package/src/lib/server/pos-print.d.ts +82 -0
- package/src/lib/server/pos-print.js +193 -0
- package/src/lib/server/pos-print.js.map +1 -0
- package/src/lib/server/pos-readers.d.ts +27 -0
- package/src/lib/server/pos-readers.js +276 -0
- package/src/lib/server/pos-readers.js.map +1 -0
- package/src/lib/server/pos-refund-authority.d.ts +60 -0
- package/src/lib/server/pos-refund-authority.js +72 -0
- package/src/lib/server/pos-refund-authority.js.map +1 -0
- package/src/lib/server/pos-return.d.ts +58 -0
- package/src/lib/server/pos-return.js +891 -0
- package/src/lib/server/pos-return.js.map +1 -0
- package/src/lib/server/pos-sale-stamp.d.ts +66 -0
- package/src/lib/server/pos-sale-stamp.js +84 -0
- package/src/lib/server/pos-sale-stamp.js.map +1 -0
- package/src/lib/server/pos-sale.d.ts +170 -0
- package/src/lib/server/pos-sale.js +461 -0
- package/src/lib/server/pos-sale.js.map +1 -0
- package/src/lib/server/pos-shift.d.ts +45 -0
- package/src/lib/server/pos-shift.js +484 -0
- package/src/lib/server/pos-shift.js.map +1 -0
- package/src/lib/server/pos-staff-pin.d.ts +26 -0
- package/src/lib/server/pos-staff-pin.js +339 -0
- package/src/lib/server/pos-staff-pin.js.map +1 -0
- package/src/lib/server/pos-stripe.d.ts +91 -0
- package/src/lib/server/pos-stripe.js +129 -0
- package/src/lib/server/pos-stripe.js.map +1 -0
- package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
- package/src/lib/server/pos-terminal-connection-token.js +166 -0
- package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
- package/src/lib/server/pos-terminal.d.ts +218 -0
- package/src/lib/server/pos-terminal.js +1014 -0
- package/src/lib/server/pos-terminal.js.map +1 -0
- package/src/lib/server/print-queue.d.ts +124 -0
- package/src/lib/server/print-queue.js +301 -0
- package/src/lib/server/print-queue.js.map +1 -0
- package/src/lib/server/printer-poll.d.ts +75 -0
- package/src/lib/server/printer-poll.js +325 -0
- package/src/lib/server/printer-poll.js.map +1 -0
- package/src/lib/server/printer-secret.d.ts +39 -0
- package/src/lib/server/printer-secret.js +56 -0
- package/src/lib/server/printer-secret.js.map +1 -0
- package/src/lib/server/printers.d.ts +114 -0
- package/src/lib/server/printers.js +546 -0
- package/src/lib/server/printers.js.map +1 -0
- package/src/lib/server/product-catalog.d.ts +42 -0
- package/src/lib/server/product-catalog.js +305 -0
- package/src/lib/server/product-catalog.js.map +1 -0
- package/src/lib/server/refund.js +110 -45
- package/src/lib/server/refund.js.map +1 -1
- package/src/lib/server/reserve.js +2 -0
- package/src/lib/server/reserve.js.map +1 -1
- package/src/lib/server/return-status-action.d.ts +37 -0
- package/src/lib/server/return-status-action.js +57 -0
- package/src/lib/server/return-status-action.js.map +1 -0
- package/src/lib/server/returns.d.ts +119 -0
- package/src/lib/server/returns.js +938 -0
- package/src/lib/server/returns.js.map +1 -0
- package/src/lib/server/shipment-records.d.ts +36 -0
- package/src/lib/server/shipment-records.js +289 -0
- package/src/lib/server/shipment-records.js.map +1 -0
- package/src/lib/server/shipping-connector-gates.d.ts +40 -0
- package/src/lib/server/shipping-connector-gates.js +97 -0
- package/src/lib/server/shipping-connector-gates.js.map +1 -0
- package/src/lib/server/shipping-connectors.d.ts +29 -0
- package/src/lib/server/shipping-connectors.js +236 -0
- package/src/lib/server/shipping-connectors.js.map +1 -0
- package/src/lib/server/shippingeasy.d.ts +238 -0
- package/src/lib/server/shippingeasy.js +787 -0
- package/src/lib/server/shippingeasy.js.map +1 -0
- package/src/lib/server/shipstation.d.ts +129 -0
- package/src/lib/server/shipstation.js +483 -0
- package/src/lib/server/shipstation.js.map +1 -0
- package/src/lib/server/site-page-resolver.d.ts +5 -0
- package/src/lib/server/site-page-resolver.js +156 -1
- package/src/lib/server/site-page-resolver.js.map +1 -1
- package/src/lib/server/stock-levels.d.ts +21 -0
- package/src/lib/server/stock-levels.js +263 -0
- package/src/lib/server/stock-levels.js.map +1 -0
- package/src/lib/server/stripe-refund.d.ts +47 -0
- package/src/lib/server/stripe-refund.js +87 -0
- package/src/lib/server/stripe-refund.js.map +1 -0
- package/src/lib/server/supplier-update.js +46 -5
- package/src/lib/server/supplier-update.js.map +1 -1
- package/src/lib/server/tax-engine-quote.d.ts +47 -0
- package/src/lib/server/tax-engine-quote.js +105 -0
- package/src/lib/server/tax-engine-quote.js.map +1 -0
- package/src/lib/server.js +138 -2
- package/src/lib/server.js.map +1 -1
- package/src/lib/site.js +12 -0
- package/src/lib/site.js.map +1 -1
- package/src/lib/subprocessors.d.ts +26 -0
- package/src/lib/subprocessors.js +50 -0
- package/src/lib/subprocessors.js.map +1 -0
- package/src/lib/tenant-emails.js +461 -3
- package/src/lib/tenant-emails.js.map +1 -1
- package/src/lib/testing/fake-firestore.d.ts +45 -0
- package/src/lib/testing/fake-firestore.js +189 -0
- package/src/lib/testing/fake-firestore.js.map +1 -0
- package/src/lib/testing/memory-firestore.d.ts +123 -0
- package/src/lib/testing/memory-firestore.js +274 -0
- package/src/lib/testing/memory-firestore.js.map +1 -0
- package/src/lib/testing/pos-ops-harness.d.ts +50 -0
- package/src/lib/testing/pos-ops-harness.js +184 -0
- package/src/lib/testing/pos-ops-harness.js.map +1 -0
- package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
- package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
- package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
- package/src/lib/transfer/records-transfer.d.ts +11 -1
- package/src/lib/transfer/records-transfer.js +127 -5
- package/src/lib/transfer/records-transfer.js.map +1 -1
- package/src/lib/transfer/records.server.d.ts +9 -2
- package/src/lib/transfer/records.server.js +58 -7
- package/src/lib/transfer/records.server.js.map +1 -1
- package/src/lib/transfer/register-transfer-resources.js +40 -1
- package/src/lib/transfer/register-transfer-resources.js.map +1 -1
- package/src/lib/transfer/register-transfer-ui.js +4 -1
- package/src/lib/transfer/register-transfer-ui.js.map +1 -1
- package/src/lib/transfer/shipping-presets.d.ts +23 -0
- package/src/lib/transfer/shipping-presets.js +156 -0
- package/src/lib/transfer/shipping-presets.js.map +1 -0
- package/src/lib/transfer/tracking-transfer.d.ts +101 -0
- package/src/lib/transfer/tracking-transfer.js +546 -0
- package/src/lib/transfer/tracking-transfer.js.map +1 -0
- package/src/lib/transfer/tracking.server.d.ts +37 -0
- package/src/lib/transfer/tracking.server.js +393 -0
- package/src/lib/transfer/tracking.server.js.map +1 -0
- package/src/lib/transfer/transfer-keys.d.ts +2 -1
- package/src/lib/transfer/transfer-keys.js +6 -2
- package/src/lib/transfer/transfer-keys.js.map +1 -1
- package/src/lib/utils/code128.d.ts +37 -0
- package/src/lib/utils/code128.js +199 -0
- package/src/lib/utils/code128.js.map +1 -0
- package/src/lib/utils/order-invoice.d.ts +55 -0
- package/src/lib/utils/order-invoice.js +127 -0
- package/src/lib/utils/order-invoice.js.map +1 -0
- package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
- package/src/lib/utils/use-checkout-return-notice.js +78 -0
- package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
- package/src/lib/server/feed.js +0 -69
- package/src/lib/server/feed.js.map +0 -1
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
|
|
18
|
+
import { computePosShiftReport, posShiftPrintReport, posCashVarianceCents } from "../model/commerce-pos-ops.js";
|
|
19
|
+
import { authorizePosOps, defaultPosOpsDeps, posOpsBody, posOpsCleanId, readPosRegister, resolvePosCashier } from "./pos-ops-gate.js";
|
|
20
|
+
/*==========================================
|
|
21
|
+
* SHIFTS AND THE CASH DRAWER (AGL-3609): `POST /api/commerce/pos-shift`.
|
|
22
|
+
*
|
|
23
|
+
* open a starting float; refused while the register has a shift open
|
|
24
|
+
* cash-event paid in, paid out or a safe drop, with a reason
|
|
25
|
+
* x-report the open shift's figures so far, changing nothing
|
|
26
|
+
* close the counted cash, the Z report frozen onto the shift
|
|
27
|
+
* current the register's open shift, or none
|
|
28
|
+
*
|
|
29
|
+
* ONE OPEN SHIFT PER REGISTER is the register document's `openShiftId`,
|
|
30
|
+
* claimed and released inside the same transaction as the shift it names.
|
|
31
|
+
* Two tablets opening the same till at once both read the register; the
|
|
32
|
+
* transaction that commits second re-reads it, finds the first one's shift
|
|
33
|
+
* and refuses — there is no window in which both stand.
|
|
34
|
+
*=========================================*/ /** The most sales one report reads; past it the report says it is partial. */ export const POS_SHIFT_SALES_CEILING = 5000;
|
|
35
|
+
/** The largest float or cash movement the drawer records in one entry. */ export const POS_CASH_ENTRY_MAX_CENTS = 10000000;
|
|
36
|
+
const CASH_EVENT_TYPES = new Set([
|
|
37
|
+
'paid_in',
|
|
38
|
+
'paid_out',
|
|
39
|
+
'drop'
|
|
40
|
+
]);
|
|
41
|
+
function cents(value) {
|
|
42
|
+
const number = Number(value);
|
|
43
|
+
if (!Number.isFinite(number)) return null;
|
|
44
|
+
const rounded = Math.round(number);
|
|
45
|
+
return rounded >= 0 && rounded <= POS_CASH_ENTRY_MAX_CENTS ? rounded : null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The figures for a shift, read from the sales stamped with it and the
|
|
49
|
+
* returns rung against it. Inside a transaction when one is given, so a Z
|
|
50
|
+
* report and the close it freezes see the same sales.
|
|
51
|
+
*/ export async function readPosShiftReport(registerRef, hostRef, shiftId, shift, transaction) {
|
|
52
|
+
const salesQuery = hostRef.collection('orders').where('shiftId', '==', shiftId).limit(POS_SHIFT_SALES_CEILING + 1);
|
|
53
|
+
const returnsQuery = registerRef.collection('returns').where('shiftId', '==', shiftId).limit(2000);
|
|
54
|
+
const [salesSnapshot, returnsSnapshot] = transaction ? await Promise.all([
|
|
55
|
+
transaction.get(salesQuery),
|
|
56
|
+
transaction.get(returnsQuery)
|
|
57
|
+
]) : await Promise.all([
|
|
58
|
+
salesQuery.get(),
|
|
59
|
+
returnsQuery.get()
|
|
60
|
+
]);
|
|
61
|
+
const sales = salesSnapshot.docs.slice(0, POS_SHIFT_SALES_CEILING).map((doc)=>{
|
|
62
|
+
var _doc_data;
|
|
63
|
+
return (_doc_data = doc.data()) != null ? _doc_data : {};
|
|
64
|
+
});
|
|
65
|
+
const refunds = returnsSnapshot.docs.map((doc)=>{
|
|
66
|
+
var _doc_data, _data_refundedCents;
|
|
67
|
+
const data = (_doc_data = doc.data()) != null ? _doc_data : {};
|
|
68
|
+
const tenders = Array.isArray(data['tenders']) ? data['tenders'] : [];
|
|
69
|
+
return {
|
|
70
|
+
refundedCents: Number((_data_refundedCents = data['refundedCents']) != null ? _data_refundedCents : 0),
|
|
71
|
+
tenders: tenders.filter((tender)=>(tender == null ? void 0 : tender.status) !== 'failed').map((tender)=>{
|
|
72
|
+
var _tender_amountCents;
|
|
73
|
+
return {
|
|
74
|
+
method: tender.method,
|
|
75
|
+
amountCents: Number((_tender_amountCents = tender.amountCents) != null ? _tender_amountCents : 0)
|
|
76
|
+
};
|
|
77
|
+
})
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
return computePosShiftReport({
|
|
81
|
+
shift,
|
|
82
|
+
sales,
|
|
83
|
+
refunds,
|
|
84
|
+
truncated: salesSnapshot.docs.length > POS_SHIFT_SALES_CEILING
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function shiftOf(data) {
|
|
88
|
+
var _data_openingFloatCents;
|
|
89
|
+
if (!data) return null;
|
|
90
|
+
return _extends({}, data, {
|
|
91
|
+
cashEvents: Array.isArray(data['cashEvents']) ? data['cashEvents'] : [],
|
|
92
|
+
openingFloatCents: Number((_data_openingFloatCents = data['openingFloatCents']) != null ? _data_openingFloatCents : 0)
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export async function handlePosShift(deps, req) {
|
|
96
|
+
var _body_action;
|
|
97
|
+
if (req.method !== 'POST') return {
|
|
98
|
+
status: 405,
|
|
99
|
+
body: {
|
|
100
|
+
error: 'Method not allowed'
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const body = posOpsBody(req);
|
|
104
|
+
const gate = await authorizePosOps(deps, req, body['hostId']);
|
|
105
|
+
if ('error' in gate) return {
|
|
106
|
+
status: gate.status,
|
|
107
|
+
body: {
|
|
108
|
+
error: gate.error
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const staff = gate.staff;
|
|
112
|
+
const register = await readPosRegister(staff, body['registerId']);
|
|
113
|
+
if ('error' in register) return {
|
|
114
|
+
status: register.status,
|
|
115
|
+
body: {
|
|
116
|
+
error: register.error
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const registerId = register.ref.id;
|
|
120
|
+
const { cashierId } = await resolvePosCashier(deps, staff, registerId, body['cashierAssertion']);
|
|
121
|
+
const action = String((_body_action = body['action']) != null ? _body_action : '');
|
|
122
|
+
const firestore = deps.firestore();
|
|
123
|
+
const shifts = register.ref.collection('shifts');
|
|
124
|
+
switch(action){
|
|
125
|
+
case 'current':
|
|
126
|
+
{
|
|
127
|
+
var _register_data_openShiftId;
|
|
128
|
+
const openShiftId = String((_register_data_openShiftId = register.data['openShiftId']) != null ? _register_data_openShiftId : '');
|
|
129
|
+
if (!openShiftId) return {
|
|
130
|
+
status: 200,
|
|
131
|
+
body: {
|
|
132
|
+
shift: null
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const shift = shiftOf((await shifts.doc(openShiftId).get()).data());
|
|
136
|
+
return {
|
|
137
|
+
status: 200,
|
|
138
|
+
body: {
|
|
139
|
+
shift: shift && shift.status === 'open' ? _extends({
|
|
140
|
+
id: openShiftId
|
|
141
|
+
}, shift) : null
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
case 'open':
|
|
146
|
+
{
|
|
147
|
+
var _body_openingFloatCents;
|
|
148
|
+
const float = cents((_body_openingFloatCents = body['openingFloatCents']) != null ? _body_openingFloatCents : 0);
|
|
149
|
+
if (float == null) return {
|
|
150
|
+
status: 400,
|
|
151
|
+
body: {
|
|
152
|
+
error: 'Enter the starting cash as an amount.'
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const shiftRef = shifts.doc(createResourceUid());
|
|
156
|
+
const now = deps.now();
|
|
157
|
+
const openedByName = await deps.memberName(cashierId);
|
|
158
|
+
return await firestore.runTransaction(async (transaction)=>{
|
|
159
|
+
var _fresh_get;
|
|
160
|
+
const fresh = await transaction.get(register.ref);
|
|
161
|
+
const standing = String((_fresh_get = fresh.get('openShiftId')) != null ? _fresh_get : '');
|
|
162
|
+
if (standing) {
|
|
163
|
+
const standingShift = await transaction.get(shifts.doc(standing));
|
|
164
|
+
if (standingShift.exists && standingShift.get('status') === 'open') {
|
|
165
|
+
return {
|
|
166
|
+
status: 409,
|
|
167
|
+
body: {
|
|
168
|
+
error: 'This register already has a shift open. Close it before opening another.',
|
|
169
|
+
shiftId: standing
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const shift = {
|
|
175
|
+
hostId: staff.hostId,
|
|
176
|
+
registerId,
|
|
177
|
+
status: 'open',
|
|
178
|
+
openedBy: cashierId,
|
|
179
|
+
openedByName,
|
|
180
|
+
openedAtMs: now,
|
|
181
|
+
openingFloatCents: float,
|
|
182
|
+
cashEvents: []
|
|
183
|
+
};
|
|
184
|
+
transaction.create(shiftRef, shift);
|
|
185
|
+
transaction.update(register.ref, {
|
|
186
|
+
openShiftId: shiftRef.id
|
|
187
|
+
});
|
|
188
|
+
return {
|
|
189
|
+
status: 200,
|
|
190
|
+
body: {
|
|
191
|
+
shift: _extends({
|
|
192
|
+
id: shiftRef.id
|
|
193
|
+
}, shift)
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
case 'cash-event':
|
|
199
|
+
{
|
|
200
|
+
var _body_type, _body_reason;
|
|
201
|
+
const type = String((_body_type = body['type']) != null ? _body_type : '');
|
|
202
|
+
if (!CASH_EVENT_TYPES.has(type)) {
|
|
203
|
+
return {
|
|
204
|
+
status: 400,
|
|
205
|
+
body: {
|
|
206
|
+
error: 'Choose paid in, paid out or a safe drop.'
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const amount = cents(body['amountCents']);
|
|
211
|
+
if (!amount) return {
|
|
212
|
+
status: 400,
|
|
213
|
+
body: {
|
|
214
|
+
error: 'Enter an amount above zero.'
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const reason = String((_body_reason = body['reason']) != null ? _body_reason : '').trim().slice(0, 200);
|
|
218
|
+
if (!reason && type !== 'drop') {
|
|
219
|
+
return {
|
|
220
|
+
status: 400,
|
|
221
|
+
body: {
|
|
222
|
+
error: 'Say what the cash was for.'
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
const eventId = posOpsCleanId(body['eventId']) || createResourceUid();
|
|
227
|
+
const recorded = await firestore.runTransaction(async (transaction)=>{
|
|
228
|
+
var _fresh_get;
|
|
229
|
+
const fresh = await transaction.get(register.ref);
|
|
230
|
+
const shiftId = String((_fresh_get = fresh.get('openShiftId')) != null ? _fresh_get : '');
|
|
231
|
+
if (!shiftId) return {
|
|
232
|
+
status: 409,
|
|
233
|
+
body: {
|
|
234
|
+
error: 'Open a shift first.'
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
const shiftRef = shifts.doc(shiftId);
|
|
238
|
+
const shift = shiftOf((await transaction.get(shiftRef)).data());
|
|
239
|
+
if (!shift || shift.status !== 'open') {
|
|
240
|
+
return {
|
|
241
|
+
status: 409,
|
|
242
|
+
body: {
|
|
243
|
+
error: 'Open a shift first.'
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
// A retried tap carries the same id: recorded once, answered twice.
|
|
248
|
+
if (shift.cashEvents.some((event)=>event.id === eventId)) {
|
|
249
|
+
return {
|
|
250
|
+
status: 200,
|
|
251
|
+
body: {
|
|
252
|
+
shift: _extends({
|
|
253
|
+
id: shiftId
|
|
254
|
+
}, shift),
|
|
255
|
+
replayed: true
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
const event = {
|
|
260
|
+
id: eventId,
|
|
261
|
+
type,
|
|
262
|
+
amountCents: amount,
|
|
263
|
+
reason,
|
|
264
|
+
by: cashierId,
|
|
265
|
+
atMs: deps.now()
|
|
266
|
+
};
|
|
267
|
+
const cashEvents = [
|
|
268
|
+
...shift.cashEvents,
|
|
269
|
+
event
|
|
270
|
+
];
|
|
271
|
+
transaction.update(shiftRef, {
|
|
272
|
+
cashEvents
|
|
273
|
+
});
|
|
274
|
+
return {
|
|
275
|
+
status: 200,
|
|
276
|
+
body: {
|
|
277
|
+
shift: _extends({
|
|
278
|
+
id: shiftId
|
|
279
|
+
}, shift, {
|
|
280
|
+
cashEvents
|
|
281
|
+
})
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
});
|
|
285
|
+
// The drawer opens for the cash once it is on the record; a replayed
|
|
286
|
+
// tap kicked it the first time.
|
|
287
|
+
if (recorded.status === 200 && !recorded.body['replayed']) {
|
|
288
|
+
await deps.printer.kickDrawer({
|
|
289
|
+
hostId: staff.hostId,
|
|
290
|
+
registerId,
|
|
291
|
+
reason: type,
|
|
292
|
+
causeId: eventId,
|
|
293
|
+
createdBy: cashierId
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
return recorded;
|
|
297
|
+
}
|
|
298
|
+
case 'print-report':
|
|
299
|
+
{
|
|
300
|
+
var _register_data_openShiftId1, _host_get;
|
|
301
|
+
// An X report of the open shift, or the Z report a closed one froze, on
|
|
302
|
+
// the register's receipt printer. `printed: false` tells the register
|
|
303
|
+
// there is no cloud printer, and it prints through the browser instead.
|
|
304
|
+
const requested = posOpsCleanId(body['shiftId']) || String((_register_data_openShiftId1 = register.data['openShiftId']) != null ? _register_data_openShiftId1 : '');
|
|
305
|
+
if (!requested) return {
|
|
306
|
+
status: 409,
|
|
307
|
+
body: {
|
|
308
|
+
error: 'No shift is open on this register.'
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
const shift = shiftOf((await shifts.doc(requested).get()).data());
|
|
312
|
+
if (!shift) return {
|
|
313
|
+
status: 404,
|
|
314
|
+
body: {
|
|
315
|
+
error: 'Unknown shift'
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
const closed = shift.status === 'closed' && shift.report;
|
|
319
|
+
const report = closed ? shift.report : await readPosShiftReport(register.ref, staff.hostRef, requested, shift);
|
|
320
|
+
const host = await staff.hostRef.get();
|
|
321
|
+
const by = closed ? shift.closedByName : shift.openedByName;
|
|
322
|
+
const printed = await deps.printer.printReport({
|
|
323
|
+
hostId: staff.hostId,
|
|
324
|
+
registerId,
|
|
325
|
+
shiftId: requested,
|
|
326
|
+
report: posShiftPrintReport(_extends({
|
|
327
|
+
title: closed ? 'Z REPORT' : 'X REPORT',
|
|
328
|
+
storeName: String((_host_get = host.get('displayName')) != null ? _host_get : '') || 'Register'
|
|
329
|
+
}, register.data['name'] ? {
|
|
330
|
+
registerName: String(register.data['name'])
|
|
331
|
+
} : {}, by ? {
|
|
332
|
+
subtitle: `${closed ? 'Closed' : 'Opened'} by ${by}`
|
|
333
|
+
} : {}, {
|
|
334
|
+
report
|
|
335
|
+
}, closed ? {
|
|
336
|
+
shift
|
|
337
|
+
} : {})),
|
|
338
|
+
createdBy: cashierId,
|
|
339
|
+
attemptKey: posOpsCleanId(body['attemptKey']) || String(deps.now())
|
|
340
|
+
});
|
|
341
|
+
return {
|
|
342
|
+
status: 200,
|
|
343
|
+
body: {
|
|
344
|
+
printed: printed.jobIds.length > 0,
|
|
345
|
+
jobIds: printed.jobIds
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
case 'x-report':
|
|
350
|
+
{
|
|
351
|
+
var _register_data_openShiftId2;
|
|
352
|
+
const shiftId = String((_register_data_openShiftId2 = register.data['openShiftId']) != null ? _register_data_openShiftId2 : '');
|
|
353
|
+
const shift = shiftId ? shiftOf((await shifts.doc(shiftId).get()).data()) : null;
|
|
354
|
+
if (!shift || shift.status !== 'open') {
|
|
355
|
+
return {
|
|
356
|
+
status: 409,
|
|
357
|
+
body: {
|
|
358
|
+
error: 'No shift is open on this register.'
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
const report = await readPosShiftReport(register.ref, staff.hostRef, shiftId, shift);
|
|
363
|
+
return {
|
|
364
|
+
status: 200,
|
|
365
|
+
body: {
|
|
366
|
+
shiftId,
|
|
367
|
+
shift: _extends({
|
|
368
|
+
id: shiftId
|
|
369
|
+
}, shift),
|
|
370
|
+
report
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
case 'close':
|
|
375
|
+
{
|
|
376
|
+
var _body_note;
|
|
377
|
+
const counted = cents(body['countedCashCents']);
|
|
378
|
+
if (counted == null) return {
|
|
379
|
+
status: 400,
|
|
380
|
+
body: {
|
|
381
|
+
error: 'Enter the cash you counted.'
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
const note = String((_body_note = body['note']) != null ? _body_note : '').trim().slice(0, 500);
|
|
385
|
+
const expectedShiftId = posOpsCleanId(body['shiftId']);
|
|
386
|
+
const closedByName = await deps.memberName(cashierId);
|
|
387
|
+
return await firestore.runTransaction(async (transaction)=>{
|
|
388
|
+
var _fresh_get;
|
|
389
|
+
const fresh = await transaction.get(register.ref);
|
|
390
|
+
const shiftId = String((_fresh_get = fresh.get('openShiftId')) != null ? _fresh_get : '');
|
|
391
|
+
if (!shiftId) return {
|
|
392
|
+
status: 409,
|
|
393
|
+
body: {
|
|
394
|
+
error: 'No shift is open on this register.'
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
// A stale tablet closing a shift another tablet already closed and
|
|
398
|
+
// reopened must not close the new one with the old count.
|
|
399
|
+
if (expectedShiftId && expectedShiftId !== shiftId) {
|
|
400
|
+
return {
|
|
401
|
+
status: 409,
|
|
402
|
+
body: {
|
|
403
|
+
error: 'That shift is already closed. Refresh to see the open one.'
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
const shiftRef = shifts.doc(shiftId);
|
|
408
|
+
const shift = shiftOf((await transaction.get(shiftRef)).data());
|
|
409
|
+
if (!shift || shift.status !== 'open') {
|
|
410
|
+
return {
|
|
411
|
+
status: 409,
|
|
412
|
+
body: {
|
|
413
|
+
error: 'No shift is open on this register.'
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
const report = await readPosShiftReport(register.ref, staff.hostRef, shiftId, shift, transaction);
|
|
418
|
+
const closed = _extends({
|
|
419
|
+
status: 'closed',
|
|
420
|
+
closedBy: cashierId,
|
|
421
|
+
closedByName,
|
|
422
|
+
closedAtMs: deps.now(),
|
|
423
|
+
countedCashCents: counted,
|
|
424
|
+
expectedCashCents: report.expectedCashCents,
|
|
425
|
+
varianceCents: posCashVarianceCents(counted, report.expectedCashCents),
|
|
426
|
+
report
|
|
427
|
+
}, note ? {
|
|
428
|
+
closingNote: note
|
|
429
|
+
} : {});
|
|
430
|
+
transaction.update(shiftRef, closed);
|
|
431
|
+
transaction.update(register.ref, {
|
|
432
|
+
openShiftId: null
|
|
433
|
+
});
|
|
434
|
+
return {
|
|
435
|
+
status: 200,
|
|
436
|
+
body: {
|
|
437
|
+
shift: _extends({
|
|
438
|
+
id: shiftId
|
|
439
|
+
}, shift, closed),
|
|
440
|
+
report
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
default:
|
|
446
|
+
return {
|
|
447
|
+
status: 400,
|
|
448
|
+
body: {
|
|
449
|
+
error: 'Unknown action'
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/** Whether a register may take a sale or pay cash out, by the site's shift rule. */ export async function posShiftForSale(staff, registerRef) {
|
|
455
|
+
var _register_get;
|
|
456
|
+
const register = await registerRef.get();
|
|
457
|
+
const shiftId = String((_register_get = register.get('openShiftId')) != null ? _register_get : '') || null;
|
|
458
|
+
if (!shiftId && staff.settings.requireOpenShift) {
|
|
459
|
+
return {
|
|
460
|
+
ok: false,
|
|
461
|
+
error: 'Open a shift on this register before ringing a sale.'
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
return {
|
|
465
|
+
ok: true,
|
|
466
|
+
shiftId
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
export function createPosShiftHandler(deps = defaultPosOpsDeps) {
|
|
470
|
+
return async (req, res)=>{
|
|
471
|
+
try {
|
|
472
|
+
const outcome = await handlePosShift(deps(), req);
|
|
473
|
+
return res.status(outcome.status).json(outcome.body);
|
|
474
|
+
} catch (error) {
|
|
475
|
+
console.error('[pos-shift] failed', error);
|
|
476
|
+
return res.status(500).json({
|
|
477
|
+
error: 'The shift could not be updated'
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
export const posShiftHandler = createPosShiftHandler();
|
|
483
|
+
|
|
484
|
+
//# sourceMappingURL=pos-shift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-shift.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 { createResourceUid } from '@aglyn/aglyn/app-utils/create-resource-uid'\nimport type { PluginApiHandler, PluginApiRequest } from '@aglyn/aglyn/server'\nimport {\n computePosShiftReport,\n posShiftPrintReport,\n posCashVarianceCents,\n type PosCashEvent,\n type PosCashEventType,\n type PosShift,\n type PosShiftRefund,\n type PosShiftReport,\n type PosShiftSale,\n} from '../model/commerce-pos-ops'\nimport {\n authorizePosOps,\n defaultPosOpsDeps,\n posOpsBody,\n posOpsCleanId,\n readPosRegister,\n resolvePosCashier,\n type PosOpsDeps,\n type PosOpsStaff,\n} from './pos-ops-gate'\n\n/*==========================================\n * SHIFTS AND THE CASH DRAWER (AGL-3609): `POST /api/commerce/pos-shift`.\n *\n * open a starting float; refused while the register has a shift open\n * cash-event paid in, paid out or a safe drop, with a reason\n * x-report the open shift's figures so far, changing nothing\n * close the counted cash, the Z report frozen onto the shift\n * current the register's open shift, or none\n *\n * ONE OPEN SHIFT PER REGISTER is the register document's `openShiftId`,\n * claimed and released inside the same transaction as the shift it names.\n * Two tablets opening the same till at once both read the register; the\n * transaction that commits second re-reads it, finds the first one's shift\n * and refuses — there is no window in which both stand.\n *=========================================*/\n\n/** The most sales one report reads; past it the report says it is partial. */\nexport const POS_SHIFT_SALES_CEILING = 5000\n/** The largest float or cash movement the drawer records in one entry. */\nexport const POS_CASH_ENTRY_MAX_CENTS = 10_000_000\n\nconst CASH_EVENT_TYPES: ReadonlySet<PosCashEventType> = new Set(['paid_in', 'paid_out', 'drop'])\n\nfunction cents(value: unknown): number | null {\n const number = Number(value)\n if (!Number.isFinite(number)) return null\n const rounded = Math.round(number)\n return rounded >= 0 && rounded <= POS_CASH_ENTRY_MAX_CENTS ? rounded : null\n}\n\n/**\n * The figures for a shift, read from the sales stamped with it and the\n * returns rung against it. Inside a transaction when one is given, so a Z\n * report and the close it freezes see the same sales.\n */\nexport async function readPosShiftReport(\n registerRef: FirebaseFirestore.DocumentReference,\n hostRef: FirebaseFirestore.DocumentReference,\n shiftId: string,\n shift: Pick<PosShift, 'openingFloatCents' | 'cashEvents'>,\n transaction?: FirebaseFirestore.Transaction,\n): Promise<PosShiftReport> {\n const salesQuery = hostRef\n .collection('orders')\n .where('shiftId', '==', shiftId)\n .limit(POS_SHIFT_SALES_CEILING + 1)\n const returnsQuery = registerRef.collection('returns').where('shiftId', '==', shiftId).limit(2000)\n const [salesSnapshot, returnsSnapshot] = transaction\n ? await Promise.all([transaction.get(salesQuery), transaction.get(returnsQuery)])\n : await Promise.all([salesQuery.get(), returnsQuery.get()])\n const sales = salesSnapshot.docs\n .slice(0, POS_SHIFT_SALES_CEILING)\n .map((doc) => (doc.data() ?? {}) as PosShiftSale)\n const refunds: PosShiftRefund[] = returnsSnapshot.docs.map((doc) => {\n const data = (doc.data() ?? {}) as Record<string, any>\n const tenders = Array.isArray(data['tenders']) ? data['tenders'] : []\n return {\n refundedCents: Number(data['refundedCents'] ?? 0),\n tenders: tenders\n .filter((tender: any) => tender?.status !== 'failed')\n .map((tender: any) => ({ method: tender.method, amountCents: Number(tender.amountCents ?? 0) })),\n }\n })\n return computePosShiftReport({\n shift,\n sales,\n refunds,\n truncated: salesSnapshot.docs.length > POS_SHIFT_SALES_CEILING,\n })\n}\n\nfunction shiftOf(data: Record<string, any> | undefined): PosShift | null {\n if (!data) return null\n return {\n ...(data as PosShift),\n cashEvents: Array.isArray(data['cashEvents']) ? (data['cashEvents'] as PosCashEvent[]) : [],\n openingFloatCents: Number(data['openingFloatCents'] ?? 0),\n }\n}\n\ntype Outcome = { status: number; body: Record<string, unknown> }\n\nexport async function handlePosShift(\n deps: PosOpsDeps,\n req: PluginApiRequest,\n): Promise<Outcome> {\n if (req.method !== 'POST') return { status: 405, body: { error: 'Method not allowed' } }\n const body = posOpsBody(req)\n const gate = await authorizePosOps(deps, req, body['hostId'])\n if ('error' in gate) return { status: gate.status, body: { error: gate.error } }\n const staff = gate.staff\n const register = await readPosRegister(staff, body['registerId'])\n if ('error' in register) return { status: register.status, body: { error: register.error } }\n const registerId = register.ref.id\n const { cashierId } = await resolvePosCashier(deps, staff, registerId, body['cashierAssertion'])\n const action = String(body['action'] ?? '')\n const firestore = deps.firestore()\n const shifts = register.ref.collection('shifts')\n\n switch (action) {\n case 'current': {\n const openShiftId = String(register.data['openShiftId'] ?? '')\n if (!openShiftId) return { status: 200, body: { shift: null } }\n const shift = shiftOf((await shifts.doc(openShiftId).get()).data())\n return {\n status: 200,\n body: { shift: shift && shift.status === 'open' ? { id: openShiftId, ...shift } : null },\n }\n }\n\n case 'open': {\n const float = cents(body['openingFloatCents'] ?? 0)\n if (float == null) return { status: 400, body: { error: 'Enter the starting cash as an amount.' } }\n const shiftRef = shifts.doc(createResourceUid())\n const now = deps.now()\n const openedByName = await deps.memberName(cashierId)\n return await firestore.runTransaction(async (transaction) => {\n const fresh = await transaction.get(register.ref)\n const standing = String(fresh.get('openShiftId') ?? '')\n if (standing) {\n const standingShift = await transaction.get(shifts.doc(standing))\n if (standingShift.exists && standingShift.get('status') === 'open') {\n return {\n status: 409,\n body: {\n error: 'This register already has a shift open. Close it before opening another.',\n shiftId: standing,\n },\n }\n }\n }\n const shift: PosShift = {\n hostId: staff.hostId,\n registerId,\n status: 'open',\n openedBy: cashierId,\n openedByName,\n openedAtMs: now,\n openingFloatCents: float,\n cashEvents: [],\n }\n transaction.create(shiftRef, shift)\n transaction.update(register.ref, { openShiftId: shiftRef.id })\n return { status: 200, body: { shift: { id: shiftRef.id, ...shift } } }\n })\n }\n\n case 'cash-event': {\n const type = String(body['type'] ?? '') as PosCashEventType\n if (!CASH_EVENT_TYPES.has(type)) {\n return { status: 400, body: { error: 'Choose paid in, paid out or a safe drop.' } }\n }\n const amount = cents(body['amountCents'])\n if (!amount) return { status: 400, body: { error: 'Enter an amount above zero.' } }\n const reason = String(body['reason'] ?? '').trim().slice(0, 200)\n if (!reason && type !== 'drop') {\n return { status: 400, body: { error: 'Say what the cash was for.' } }\n }\n const eventId = posOpsCleanId(body['eventId']) || createResourceUid()\n const recorded: Outcome = await firestore.runTransaction(async (transaction) => {\n const fresh = await transaction.get(register.ref)\n const shiftId = String(fresh.get('openShiftId') ?? '')\n if (!shiftId) return { status: 409, body: { error: 'Open a shift first.' } }\n const shiftRef = shifts.doc(shiftId)\n const shift = shiftOf((await transaction.get(shiftRef)).data())\n if (!shift || shift.status !== 'open') {\n return { status: 409, body: { error: 'Open a shift first.' } }\n }\n // A retried tap carries the same id: recorded once, answered twice.\n if (shift.cashEvents.some((event) => event.id === eventId)) {\n return { status: 200, body: { shift: { id: shiftId, ...shift }, replayed: true } }\n }\n const event: PosCashEvent = {\n id: eventId,\n type,\n amountCents: amount,\n reason,\n by: cashierId,\n atMs: deps.now(),\n }\n const cashEvents = [...shift.cashEvents, event]\n transaction.update(shiftRef, { cashEvents })\n return { status: 200, body: { shift: { id: shiftId, ...shift, cashEvents } } }\n })\n // The drawer opens for the cash once it is on the record; a replayed\n // tap kicked it the first time.\n if (recorded.status === 200 && !recorded.body['replayed']) {\n await deps.printer.kickDrawer({\n hostId: staff.hostId,\n registerId,\n reason: type as Exclude<PosCashEventType, 'refund'>,\n causeId: eventId,\n createdBy: cashierId,\n })\n }\n return recorded\n }\n\n case 'print-report': {\n // An X report of the open shift, or the Z report a closed one froze, on\n // the register's receipt printer. `printed: false` tells the register\n // there is no cloud printer, and it prints through the browser instead.\n const requested = posOpsCleanId(body['shiftId']) || String(register.data['openShiftId'] ?? '')\n if (!requested) return { status: 409, body: { error: 'No shift is open on this register.' } }\n const shift = shiftOf((await shifts.doc(requested).get()).data())\n if (!shift) return { status: 404, body: { error: 'Unknown shift' } }\n const closed = shift.status === 'closed' && shift.report\n const report = closed\n ? (shift.report as PosShiftReport)\n : await readPosShiftReport(register.ref, staff.hostRef, requested, shift)\n const host = await staff.hostRef.get()\n const by = closed ? shift.closedByName : shift.openedByName\n const printed = await deps.printer.printReport({\n hostId: staff.hostId,\n registerId,\n shiftId: requested,\n report: posShiftPrintReport({\n title: closed ? 'Z REPORT' : 'X REPORT',\n storeName: String(host.get('displayName') ?? '') || 'Register',\n ...(register.data['name'] ? { registerName: String(register.data['name']) } : {}),\n ...(by ? { subtitle: `${closed ? 'Closed' : 'Opened'} by ${by}` } : {}),\n report,\n ...(closed ? { shift } : {}),\n }),\n createdBy: cashierId,\n attemptKey: posOpsCleanId(body['attemptKey']) || String(deps.now()),\n })\n return { status: 200, body: { printed: printed.jobIds.length > 0, jobIds: printed.jobIds } }\n }\n\n case 'x-report': {\n const shiftId = String(register.data['openShiftId'] ?? '')\n const shift = shiftId ? shiftOf((await shifts.doc(shiftId).get()).data()) : null\n if (!shift || shift.status !== 'open') {\n return { status: 409, body: { error: 'No shift is open on this register.' } }\n }\n const report = await readPosShiftReport(register.ref, staff.hostRef, shiftId, shift)\n return { status: 200, body: { shiftId, shift: { id: shiftId, ...shift }, report } }\n }\n\n case 'close': {\n const counted = cents(body['countedCashCents'])\n if (counted == null) return { status: 400, body: { error: 'Enter the cash you counted.' } }\n const note = String(body['note'] ?? '').trim().slice(0, 500)\n const expectedShiftId = posOpsCleanId(body['shiftId'])\n const closedByName = await deps.memberName(cashierId)\n return await firestore.runTransaction(async (transaction) => {\n const fresh = await transaction.get(register.ref)\n const shiftId = String(fresh.get('openShiftId') ?? '')\n if (!shiftId) return { status: 409, body: { error: 'No shift is open on this register.' } }\n // A stale tablet closing a shift another tablet already closed and\n // reopened must not close the new one with the old count.\n if (expectedShiftId && expectedShiftId !== shiftId) {\n return {\n status: 409,\n body: { error: 'That shift is already closed. Refresh to see the open one.' },\n }\n }\n const shiftRef = shifts.doc(shiftId)\n const shift = shiftOf((await transaction.get(shiftRef)).data())\n if (!shift || shift.status !== 'open') {\n return { status: 409, body: { error: 'No shift is open on this register.' } }\n }\n const report = await readPosShiftReport(\n register.ref,\n staff.hostRef,\n shiftId,\n shift,\n transaction,\n )\n const closed: Partial<PosShift> = {\n status: 'closed',\n closedBy: cashierId,\n closedByName,\n closedAtMs: deps.now(),\n countedCashCents: counted,\n expectedCashCents: report.expectedCashCents,\n varianceCents: posCashVarianceCents(counted, report.expectedCashCents),\n report,\n ...(note ? { closingNote: note } : {}),\n }\n transaction.update(shiftRef, closed)\n transaction.update(register.ref, { openShiftId: null })\n return { status: 200, body: { shift: { id: shiftId, ...shift, ...closed }, report } }\n })\n }\n\n default:\n return { status: 400, body: { error: 'Unknown action' } }\n }\n}\n\n/** Whether a register may take a sale or pay cash out, by the site's shift rule. */\nexport async function posShiftForSale(\n staff: Pick<PosOpsStaff, 'settings'>,\n registerRef: FirebaseFirestore.DocumentReference,\n): Promise<{ ok: true; shiftId: string | null } | { ok: false; error: string }> {\n const register = await registerRef.get()\n const shiftId = String(register.get('openShiftId') ?? '') || null\n if (!shiftId && staff.settings.requireOpenShift) {\n return { ok: false, error: 'Open a shift on this register before ringing a sale.' }\n }\n return { ok: true, shiftId }\n}\n\nexport function createPosShiftHandler(deps: () => PosOpsDeps = defaultPosOpsDeps): PluginApiHandler {\n return async (req, res) => {\n try {\n const outcome = await handlePosShift(deps(), req)\n return res.status(outcome.status).json(outcome.body)\n } catch (error) {\n console.error('[pos-shift] failed', error)\n return res.status(500).json({ error: 'The shift could not be updated' })\n }\n }\n}\n\nexport const posShiftHandler = createPosShiftHandler()\n"],"names":["createResourceUid","computePosShiftReport","posShiftPrintReport","posCashVarianceCents","authorizePosOps","defaultPosOpsDeps","posOpsBody","posOpsCleanId","readPosRegister","resolvePosCashier","POS_SHIFT_SALES_CEILING","POS_CASH_ENTRY_MAX_CENTS","CASH_EVENT_TYPES","Set","cents","value","number","Number","isFinite","rounded","Math","round","readPosShiftReport","registerRef","hostRef","shiftId","shift","transaction","salesQuery","collection","where","limit","returnsQuery","salesSnapshot","returnsSnapshot","Promise","all","get","sales","docs","slice","map","doc","data","refunds","tenders","Array","isArray","refundedCents","filter","tender","status","method","amountCents","truncated","length","shiftOf","cashEvents","openingFloatCents","handlePosShift","deps","req","body","error","gate","staff","register","registerId","ref","id","cashierId","action","String","firestore","shifts","openShiftId","float","shiftRef","now","openedByName","memberName","runTransaction","fresh","standing","standingShift","exists","hostId","openedBy","openedAtMs","create","update","type","has","amount","reason","trim","eventId","recorded","some","event","replayed","by","atMs","printer","kickDrawer","causeId","createdBy","host","requested","closed","report","closedByName","printed","printReport","title","storeName","registerName","subtitle","attemptKey","jobIds","counted","note","expectedShiftId","closedBy","closedAtMs","countedCashCents","expectedCashCents","varianceCents","closingNote","posShiftForSale","settings","requireOpenShift","ok","createPosShiftHandler","res","outcome","json","console","posShiftHandler"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type { PluginApiHandler, PluginApiRequest } from '@aglyn/aglyn/server';
|
|
18
|
+
import { type PosOpsDeps } from './pos-ops-gate';
|
|
19
|
+
type Outcome = {
|
|
20
|
+
status: number;
|
|
21
|
+
body: Record<string, unknown>;
|
|
22
|
+
};
|
|
23
|
+
export declare function handlePosStaffPin(deps: PosOpsDeps, req: PluginApiRequest): Promise<Outcome>;
|
|
24
|
+
export declare function createPosStaffPinHandler(deps?: () => PosOpsDeps): PluginApiHandler;
|
|
25
|
+
export declare const posStaffPinHandler: PluginApiHandler;
|
|
26
|
+
export {};
|