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