@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,276 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
18
|
+
import { authorizePosStaff, posRequestBody } from "./pos-auth.js";
|
|
19
|
+
import { revokePosDisplays } from "./pos-display.js";
|
|
20
|
+
import { posStripe, posStripeErrorMessage, posStripeTestMode, posTerminalAvailable } from "./pos-stripe.js";
|
|
21
|
+
import { ensurePosTerminalLocation, ownedTerminalReader, refreshPosReaderStatus } from "./pos-terminal.js";
|
|
22
|
+
/**
|
|
23
|
+
* `POST /api/commerce/pos-readers` (AGL-3607): the site's Stripe Terminal
|
|
24
|
+
* card readers, from the "Card readers" settings card, and the server-side
|
|
25
|
+
* removal of a register.
|
|
26
|
+
*
|
|
27
|
+
* Every action names a reader by id, and every one reads that reader under
|
|
28
|
+
* the CALLER's site first (`ownedTerminalReader`): a reader id copied from
|
|
29
|
+
* another store is "not on this site", whatever Stripe would say about it.
|
|
30
|
+
*/ export const posReadersHandler = async (req, res)=>{
|
|
31
|
+
var _body_hostId, _body_action;
|
|
32
|
+
if (req.method !== 'POST') return res.status(405).json({
|
|
33
|
+
error: 'Method not allowed'
|
|
34
|
+
});
|
|
35
|
+
const body = posRequestBody(req);
|
|
36
|
+
const hostId = String((_body_hostId = body['hostId']) != null ? _body_hostId : '');
|
|
37
|
+
const gate = await authorizePosStaff(req, hostId);
|
|
38
|
+
if ('error' in gate) return res.status(gate.status).json({
|
|
39
|
+
error: gate.error
|
|
40
|
+
});
|
|
41
|
+
const staff = gate.staff;
|
|
42
|
+
const action = String((_body_action = body['action']) != null ? _body_action : '');
|
|
43
|
+
try {
|
|
44
|
+
switch(action){
|
|
45
|
+
case 'list':
|
|
46
|
+
return res.status(200).json(await listReaders(staff, body['refresh'] === true));
|
|
47
|
+
case 'register':
|
|
48
|
+
return await registerReader(staff, body, res);
|
|
49
|
+
case 'update':
|
|
50
|
+
return await updateReader(staff, body, res);
|
|
51
|
+
case 'remove':
|
|
52
|
+
return await removeReader(staff, body, res);
|
|
53
|
+
case 'remove-register':
|
|
54
|
+
return await removeRegister(staff, body, res);
|
|
55
|
+
default:
|
|
56
|
+
return res.status(400).json({
|
|
57
|
+
error: 'Unknown action'
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error('[pos-readers]', action, error);
|
|
62
|
+
return res.status(500).json({
|
|
63
|
+
error: 'Card readers could not be updated'
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
function readersRef(hostId) {
|
|
68
|
+
return firebaseAdmin.app().firestore().collection('hosts').doc(hostId).collection('terminalReaders');
|
|
69
|
+
}
|
|
70
|
+
async function listReaders(staff, refresh) {
|
|
71
|
+
const available = posTerminalAvailable();
|
|
72
|
+
const snapshot = await readersRef(staff.hostId).limit(50).get();
|
|
73
|
+
const readers = snapshot.docs.map((doc)=>_extends({
|
|
74
|
+
id: doc.id
|
|
75
|
+
}, doc.data()));
|
|
76
|
+
if (available && refresh) {
|
|
77
|
+
await Promise.all(readers.map(async (reader)=>{
|
|
78
|
+
const fresh = await refreshPosReaderStatus(staff.hostId, reader.id).catch(()=>null);
|
|
79
|
+
if (fresh) reader.status = fresh.status;
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
const config = await firebaseAdmin.app().firestore().collection('hosts').doc(staff.hostId).collection('terminal').doc('config').get();
|
|
83
|
+
return {
|
|
84
|
+
available,
|
|
85
|
+
testMode: posStripeTestMode(),
|
|
86
|
+
locationReady: Boolean(config.get('stripeLocationId')),
|
|
87
|
+
readers: readers.map((reader)=>{
|
|
88
|
+
var _reader_registerId, _reader_deviceType, _reader_serialNumber, _reader_status;
|
|
89
|
+
return {
|
|
90
|
+
id: reader.id,
|
|
91
|
+
label: reader.label,
|
|
92
|
+
registerId: (_reader_registerId = reader.registerId) != null ? _reader_registerId : null,
|
|
93
|
+
deviceType: (_reader_deviceType = reader.deviceType) != null ? _reader_deviceType : null,
|
|
94
|
+
serialNumber: (_reader_serialNumber = reader.serialNumber) != null ? _reader_serialNumber : null,
|
|
95
|
+
status: (_reader_status = reader.status) != null ? _reader_status : 'offline',
|
|
96
|
+
livemode: reader.livemode
|
|
97
|
+
};
|
|
98
|
+
})
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
async function registerExists(hostId, registerId) {
|
|
102
|
+
if (!/^[A-Za-z0-9_-]{1,128}$/.test(registerId)) return false;
|
|
103
|
+
return (await firebaseAdmin.app().firestore().collection('hosts').doc(hostId).collection('registers').doc(registerId).get()).exists;
|
|
104
|
+
}
|
|
105
|
+
async function registerReader(staff, body, res) {
|
|
106
|
+
var _body_registrationCode, _body_label, _body_registerId, _ref, _host_get, _address_line1, _address_city, _address_postalCode, _address_country, _created_body_status;
|
|
107
|
+
var _created_body;
|
|
108
|
+
if (!posTerminalAvailable()) {
|
|
109
|
+
return res.status(409).json({
|
|
110
|
+
error: 'Card readers are not available yet.'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const registrationCode = String((_body_registrationCode = body['registrationCode']) != null ? _body_registrationCode : '').trim();
|
|
114
|
+
if (!/^[A-Za-z0-9-]{3,64}$/.test(registrationCode)) {
|
|
115
|
+
return res.status(400).json({
|
|
116
|
+
error: 'Enter the code the reader shows on its screen.'
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const label = String((_body_label = body['label']) != null ? _body_label : '').trim().slice(0, 60) || 'Card reader';
|
|
120
|
+
const registerId = String((_body_registerId = body['registerId']) != null ? _body_registerId : '');
|
|
121
|
+
if (registerId && !await registerExists(staff.hostId, registerId)) {
|
|
122
|
+
return res.status(404).json({
|
|
123
|
+
error: 'Unknown register'
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const host = await firebaseAdmin.app().firestore().collection('hosts').doc(staff.hostId).get();
|
|
127
|
+
const address = body['address'];
|
|
128
|
+
const location = await ensurePosTerminalLocation(_extends({
|
|
129
|
+
hostId: staff.hostId,
|
|
130
|
+
orgId: staff.orgId,
|
|
131
|
+
displayName: String((_ref = (_host_get = host.get('name')) != null ? _host_get : host.get('title')) != null ? _ref : 'Store')
|
|
132
|
+
}, address ? {
|
|
133
|
+
address: _extends({
|
|
134
|
+
line1: String((_address_line1 = address.line1) != null ? _address_line1 : '').slice(0, 200)
|
|
135
|
+
}, address.line2 ? {
|
|
136
|
+
line2: String(address.line2).slice(0, 200)
|
|
137
|
+
} : {}, {
|
|
138
|
+
city: String((_address_city = address.city) != null ? _address_city : '').slice(0, 100)
|
|
139
|
+
}, address.state ? {
|
|
140
|
+
state: String(address.state).slice(0, 100)
|
|
141
|
+
} : {}, {
|
|
142
|
+
postalCode: String((_address_postalCode = address.postalCode) != null ? _address_postalCode : '').slice(0, 20),
|
|
143
|
+
country: String((_address_country = address.country) != null ? _address_country : '').toUpperCase().slice(0, 2)
|
|
144
|
+
})
|
|
145
|
+
} : {}));
|
|
146
|
+
if ('error' in location) return res.status(location.status).json({
|
|
147
|
+
error: location.error
|
|
148
|
+
});
|
|
149
|
+
// Not keyed: a registration code is single-use at Stripe, which is the
|
|
150
|
+
// dedupe — a second press with the same code is refused there, and no
|
|
151
|
+
// other store can ever register a reader this one already holds.
|
|
152
|
+
const created = await posStripe('POST', 'terminal/readers', {
|
|
153
|
+
params: _extends({
|
|
154
|
+
registration_code: registrationCode,
|
|
155
|
+
label,
|
|
156
|
+
location: location.locationId,
|
|
157
|
+
'metadata[orgId]': staff.orgId,
|
|
158
|
+
'metadata[hostId]': staff.hostId
|
|
159
|
+
}, registerId ? {
|
|
160
|
+
'metadata[registerId]': registerId
|
|
161
|
+
} : {})
|
|
162
|
+
});
|
|
163
|
+
if (!created.ok || !((_created_body = created.body) == null ? void 0 : _created_body.id)) {
|
|
164
|
+
return res.status(400).json({
|
|
165
|
+
error: posStripeErrorMessage(created.body, 'That code did not register a reader. Check the code on the reader and try again.')
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
const reader = _extends({
|
|
169
|
+
label
|
|
170
|
+
}, registerId ? {
|
|
171
|
+
registerId
|
|
172
|
+
} : {}, {
|
|
173
|
+
stripeLocationId: location.locationId
|
|
174
|
+
}, created.body.device_type ? {
|
|
175
|
+
deviceType: String(created.body.device_type)
|
|
176
|
+
} : {}, created.body.serial_number ? {
|
|
177
|
+
serialNumber: String(created.body.serial_number)
|
|
178
|
+
} : {}, {
|
|
179
|
+
status: String((_created_body_status = created.body.status) != null ? _created_body_status : 'offline'),
|
|
180
|
+
livemode: Boolean(created.body.livemode),
|
|
181
|
+
createdAtMs: Date.now(),
|
|
182
|
+
createdBy: staff.uid
|
|
183
|
+
});
|
|
184
|
+
await readersRef(staff.hostId).doc(String(created.body.id)).set(reader);
|
|
185
|
+
return res.status(200).json({
|
|
186
|
+
reader: _extends({
|
|
187
|
+
id: String(created.body.id)
|
|
188
|
+
}, reader)
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
async function updateReader(staff, body, res) {
|
|
192
|
+
var _body_registerId;
|
|
193
|
+
const reader = await ownedTerminalReader(staff.hostId, body['readerId']);
|
|
194
|
+
if (!reader) return res.status(404).json({
|
|
195
|
+
error: 'That card reader is not on this site.'
|
|
196
|
+
});
|
|
197
|
+
const patch = {};
|
|
198
|
+
if (typeof body['label'] === 'string') {
|
|
199
|
+
patch['label'] = body['label'].trim().slice(0, 60) || reader.label;
|
|
200
|
+
}
|
|
201
|
+
if ('registerId' in body) {
|
|
202
|
+
var _body_registerId1;
|
|
203
|
+
const registerId = String((_body_registerId1 = body['registerId']) != null ? _body_registerId1 : '');
|
|
204
|
+
if (registerId && !await registerExists(staff.hostId, registerId)) {
|
|
205
|
+
return res.status(404).json({
|
|
206
|
+
error: 'Unknown register'
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
patch['registerId'] = registerId || firebaseAdmin.firestore.FieldValue.delete();
|
|
210
|
+
}
|
|
211
|
+
const updated = await posStripe('POST', `terminal/readers/${reader.id}`, {
|
|
212
|
+
params: _extends({}, patch['label'] ? {
|
|
213
|
+
label: String(patch['label'])
|
|
214
|
+
} : {}, 'registerId' in body ? {
|
|
215
|
+
'metadata[registerId]': String((_body_registerId = body['registerId']) != null ? _body_registerId : '')
|
|
216
|
+
} : {})
|
|
217
|
+
});
|
|
218
|
+
if (!updated.ok) {
|
|
219
|
+
return res.status(502).json({
|
|
220
|
+
error: posStripeErrorMessage(updated.body, 'The reader could not be updated.')
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
await readersRef(staff.hostId).doc(reader.id).set(patch, {
|
|
224
|
+
merge: true
|
|
225
|
+
});
|
|
226
|
+
return res.status(200).json({
|
|
227
|
+
ok: true
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async function removeReader(staff, body, res) {
|
|
231
|
+
const reader = await ownedTerminalReader(staff.hostId, body['readerId']);
|
|
232
|
+
if (!reader) return res.status(404).json({
|
|
233
|
+
error: 'That card reader is not on this site.'
|
|
234
|
+
});
|
|
235
|
+
const removed = await posStripe('DELETE', `terminal/readers/${reader.id}`);
|
|
236
|
+
// Already gone at Stripe is the outcome asked for; anything else is not.
|
|
237
|
+
if (!removed.ok && removed.status !== 404) {
|
|
238
|
+
return res.status(502).json({
|
|
239
|
+
error: posStripeErrorMessage(removed.body, 'The reader could not be removed.')
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
await readersRef(staff.hostId).doc(reader.id).delete();
|
|
243
|
+
return res.status(200).json({
|
|
244
|
+
ok: true
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Removes a register on the server (AGL-3617). The settings card deleted it
|
|
249
|
+
* with a client `deleteDoc`, which the Firestore rules refuse for everyone but
|
|
250
|
+
* staff (`registers` is server-owned since AGL-1775), so a merchant's Remove
|
|
251
|
+
* button failed with a permission error. Removing it here also signs out its
|
|
252
|
+
* customer displays and unbinds its readers.
|
|
253
|
+
*/ async function removeRegister(staff, body, res) {
|
|
254
|
+
var _body_registerId;
|
|
255
|
+
const registerId = String((_body_registerId = body['registerId']) != null ? _body_registerId : '');
|
|
256
|
+
if (!await registerExists(staff.hostId, registerId)) {
|
|
257
|
+
return res.status(404).json({
|
|
258
|
+
error: 'Unknown register'
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
const firestore = firebaseAdmin.app().firestore();
|
|
262
|
+
const registerRef = firestore.collection('hosts').doc(staff.hostId).collection('registers').doc(registerId);
|
|
263
|
+
await revokePosDisplays(staff.hostId, registerId);
|
|
264
|
+
await registerRef.delete();
|
|
265
|
+
const bound = await readersRef(staff.hostId).where('registerId', '==', registerId).limit(50).get();
|
|
266
|
+
await Promise.all(bound.docs.map((doc)=>doc.ref.set({
|
|
267
|
+
registerId: firebaseAdmin.firestore.FieldValue.delete()
|
|
268
|
+
}, {
|
|
269
|
+
merge: true
|
|
270
|
+
})));
|
|
271
|
+
return res.status(200).json({
|
|
272
|
+
ok: true
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
//# sourceMappingURL=pos-readers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-readers.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { firebaseAdmin } from '@aglyn/tenant-data-admin'\nimport type { PluginApiHandler } from '@aglyn/aglyn/server'\nimport { authorizePosStaff, posRequestBody, type PosStaff } from './pos-auth'\nimport { revokePosDisplays } from './pos-display'\nimport { posStripe, posStripeErrorMessage, posStripeTestMode, posTerminalAvailable } from './pos-stripe'\nimport {\n ensurePosTerminalLocation,\n ownedTerminalReader,\n refreshPosReaderStatus,\n type PosTerminalAddress,\n type PosTerminalReader,\n} from './pos-terminal'\n\n/**\n * `POST /api/commerce/pos-readers` (AGL-3607): the site's Stripe Terminal\n * card readers, from the \"Card readers\" settings card, and the server-side\n * removal of a register.\n *\n * Every action names a reader by id, and every one reads that reader under\n * the CALLER's site first (`ownedTerminalReader`): a reader id copied from\n * another store is \"not on this site\", whatever Stripe would say about it.\n */\nexport const posReadersHandler: PluginApiHandler = async (req, res) => {\n if (req.method !== 'POST') return res.status(405).json({ error: 'Method not allowed' })\n const body = posRequestBody(req)\n const hostId = String(body['hostId'] ?? '')\n const gate = await authorizePosStaff(req, hostId)\n if ('error' in gate) return res.status(gate.status).json({ error: gate.error })\n const staff = gate.staff\n const action = String(body['action'] ?? '')\n try {\n switch (action) {\n case 'list':\n return res.status(200).json(await listReaders(staff, body['refresh'] === true))\n case 'register':\n return await registerReader(staff, body, res)\n case 'update':\n return await updateReader(staff, body, res)\n case 'remove':\n return await removeReader(staff, body, res)\n case 'remove-register':\n return await removeRegister(staff, body, res)\n default:\n return res.status(400).json({ error: 'Unknown action' })\n }\n } catch (error) {\n console.error('[pos-readers]', action, error)\n return res.status(500).json({ error: 'Card readers could not be updated' })\n }\n}\n\nfunction readersRef(hostId: string) {\n return firebaseAdmin.app().firestore().collection('hosts').doc(hostId).collection('terminalReaders')\n}\n\nasync function listReaders(staff: PosStaff, refresh: boolean) {\n const available = posTerminalAvailable()\n const snapshot = await readersRef(staff.hostId).limit(50).get()\n const readers = snapshot.docs.map((doc: any) => ({\n id: doc.id as string,\n ...(doc.data() as PosTerminalReader),\n }))\n if (available && refresh) {\n await Promise.all(\n readers.map(async (reader: PosTerminalReader & { id: string }) => {\n const fresh = await refreshPosReaderStatus(staff.hostId, reader.id).catch(() => null)\n if (fresh) reader.status = fresh.status\n }),\n )\n }\n const config = await firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(staff.hostId)\n .collection('terminal')\n .doc('config')\n .get()\n return {\n available,\n testMode: posStripeTestMode(),\n locationReady: Boolean(config.get('stripeLocationId')),\n readers: readers.map((reader: PosTerminalReader & { id: string }) => ({\n id: reader.id,\n label: reader.label,\n registerId: reader.registerId ?? null,\n deviceType: reader.deviceType ?? null,\n serialNumber: reader.serialNumber ?? null,\n status: reader.status ?? 'offline',\n livemode: reader.livemode,\n })),\n }\n}\n\nasync function registerExists(hostId: string, registerId: string): Promise<boolean> {\n if (!/^[A-Za-z0-9_-]{1,128}$/.test(registerId)) return false\n return (\n await firebaseAdmin\n .app()\n .firestore()\n .collection('hosts')\n .doc(hostId)\n .collection('registers')\n .doc(registerId)\n .get()\n ).exists\n}\n\nasync function registerReader(\n staff: PosStaff,\n body: Record<string, any>,\n res: Parameters<PluginApiHandler>[1],\n) {\n if (!posTerminalAvailable()) {\n return res.status(409).json({ error: 'Card readers are not available yet.' })\n }\n const registrationCode = String(body['registrationCode'] ?? '').trim()\n if (!/^[A-Za-z0-9-]{3,64}$/.test(registrationCode)) {\n return res.status(400).json({ error: 'Enter the code the reader shows on its screen.' })\n }\n const label = String(body['label'] ?? '').trim().slice(0, 60) || 'Card reader'\n const registerId = String(body['registerId'] ?? '')\n if (registerId && !(await registerExists(staff.hostId, registerId))) {\n return res.status(404).json({ error: 'Unknown register' })\n }\n const host = await firebaseAdmin.app().firestore().collection('hosts').doc(staff.hostId).get()\n const address = body['address'] as PosTerminalAddress | undefined\n const location = await ensurePosTerminalLocation({\n hostId: staff.hostId,\n orgId: staff.orgId,\n displayName: String(host.get('name') ?? host.get('title') ?? 'Store'),\n ...(address\n ? {\n address: {\n line1: String(address.line1 ?? '').slice(0, 200),\n ...(address.line2 ? { line2: String(address.line2).slice(0, 200) } : {}),\n city: String(address.city ?? '').slice(0, 100),\n ...(address.state ? { state: String(address.state).slice(0, 100) } : {}),\n postalCode: String(address.postalCode ?? '').slice(0, 20),\n country: String(address.country ?? '').toUpperCase().slice(0, 2),\n },\n }\n : {}),\n })\n if ('error' in location) return res.status(location.status).json({ error: location.error })\n // Not keyed: a registration code is single-use at Stripe, which is the\n // dedupe — a second press with the same code is refused there, and no\n // other store can ever register a reader this one already holds.\n const created = await posStripe('POST', 'terminal/readers', {\n params: {\n registration_code: registrationCode,\n label,\n location: location.locationId,\n 'metadata[orgId]': staff.orgId,\n 'metadata[hostId]': staff.hostId,\n ...(registerId ? { 'metadata[registerId]': registerId } : {}),\n },\n })\n if (!created.ok || !created.body?.id) {\n return res.status(400).json({\n error: posStripeErrorMessage(\n created.body,\n 'That code did not register a reader. Check the code on the reader and try again.',\n ),\n })\n }\n const reader: PosTerminalReader = {\n label,\n ...(registerId ? { registerId } : {}),\n stripeLocationId: location.locationId,\n ...(created.body.device_type ? { deviceType: String(created.body.device_type) } : {}),\n ...(created.body.serial_number ? { serialNumber: String(created.body.serial_number) } : {}),\n status: String(created.body.status ?? 'offline'),\n livemode: Boolean(created.body.livemode),\n createdAtMs: Date.now(),\n createdBy: staff.uid,\n }\n await readersRef(staff.hostId).doc(String(created.body.id)).set(reader)\n return res.status(200).json({ reader: { id: String(created.body.id), ...reader } })\n}\n\nasync function updateReader(\n staff: PosStaff,\n body: Record<string, any>,\n res: Parameters<PluginApiHandler>[1],\n) {\n const reader = await ownedTerminalReader(staff.hostId, body['readerId'])\n if (!reader) return res.status(404).json({ error: 'That card reader is not on this site.' })\n const patch: Record<string, unknown> = {}\n if (typeof body['label'] === 'string') {\n patch['label'] = body['label'].trim().slice(0, 60) || reader.label\n }\n if ('registerId' in body) {\n const registerId = String(body['registerId'] ?? '')\n if (registerId && !(await registerExists(staff.hostId, registerId))) {\n return res.status(404).json({ error: 'Unknown register' })\n }\n patch['registerId'] = registerId || firebaseAdmin.firestore.FieldValue.delete()\n }\n const updated = await posStripe('POST', `terminal/readers/${reader.id}`, {\n params: {\n ...(patch['label'] ? { label: String(patch['label']) } : {}),\n ...('registerId' in body ? { 'metadata[registerId]': String(body['registerId'] ?? '') } : {}),\n },\n })\n if (!updated.ok) {\n return res.status(502).json({ error: posStripeErrorMessage(updated.body, 'The reader could not be updated.') })\n }\n await readersRef(staff.hostId).doc(reader.id).set(patch, { merge: true })\n return res.status(200).json({ ok: true })\n}\n\nasync function removeReader(\n staff: PosStaff,\n body: Record<string, any>,\n res: Parameters<PluginApiHandler>[1],\n) {\n const reader = await ownedTerminalReader(staff.hostId, body['readerId'])\n if (!reader) return res.status(404).json({ error: 'That card reader is not on this site.' })\n const removed = await posStripe('DELETE', `terminal/readers/${reader.id}`)\n // Already gone at Stripe is the outcome asked for; anything else is not.\n if (!removed.ok && removed.status !== 404) {\n return res.status(502).json({ error: posStripeErrorMessage(removed.body, 'The reader could not be removed.') })\n }\n await readersRef(staff.hostId).doc(reader.id).delete()\n return res.status(200).json({ ok: true })\n}\n\n/**\n * Removes a register on the server (AGL-3617). The settings card deleted it\n * with a client `deleteDoc`, which the Firestore rules refuse for everyone but\n * staff (`registers` is server-owned since AGL-1775), so a merchant's Remove\n * button failed with a permission error. Removing it here also signs out its\n * customer displays and unbinds its readers.\n */\nasync function removeRegister(\n staff: PosStaff,\n body: Record<string, any>,\n res: Parameters<PluginApiHandler>[1],\n) {\n const registerId = String(body['registerId'] ?? '')\n if (!(await registerExists(staff.hostId, registerId))) {\n return res.status(404).json({ error: 'Unknown register' })\n }\n const firestore = firebaseAdmin.app().firestore()\n const registerRef = firestore\n .collection('hosts')\n .doc(staff.hostId)\n .collection('registers')\n .doc(registerId)\n await revokePosDisplays(staff.hostId, registerId)\n await registerRef.delete()\n const bound = await readersRef(staff.hostId).where('registerId', '==', registerId).limit(50).get()\n await Promise.all(\n bound.docs.map((doc: any) =>\n doc.ref.set({ registerId: firebaseAdmin.firestore.FieldValue.delete() }, { merge: true }),\n ),\n )\n return res.status(200).json({ ok: true })\n}\n"],"names":["firebaseAdmin","authorizePosStaff","posRequestBody","revokePosDisplays","posStripe","posStripeErrorMessage","posStripeTestMode","posTerminalAvailable","ensurePosTerminalLocation","ownedTerminalReader","refreshPosReaderStatus","posReadersHandler","req","res","body","method","status","json","error","hostId","String","gate","staff","action","listReaders","registerReader","updateReader","removeReader","removeRegister","console","readersRef","app","firestore","collection","doc","refresh","available","snapshot","limit","get","readers","docs","map","id","data","Promise","all","reader","fresh","catch","config","testMode","locationReady","Boolean","label","registerId","deviceType","serialNumber","livemode","registerExists","test","exists","host","address","created","registrationCode","trim","slice","location","orgId","displayName","line1","line2","city","state","postalCode","country","toUpperCase","params","registration_code","locationId","ok","stripeLocationId","device_type","serial_number","createdAtMs","Date","now","createdBy","uid","set","patch","FieldValue","delete","updated","merge","removed","registerRef","bound","where","ref"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 PosOpsDeps } from './pos-ops-gate';
|
|
18
|
+
export type PosRefundAuthority = {
|
|
19
|
+
ok: true;
|
|
20
|
+
approvedBy?: string;
|
|
21
|
+
} | {
|
|
22
|
+
ok: false;
|
|
23
|
+
body: {
|
|
24
|
+
error: string;
|
|
25
|
+
needsManager?: boolean;
|
|
26
|
+
limitCents?: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/** The limit question, with the money already known. */
|
|
30
|
+
export declare function decidePosRefundAuthority(deps: PosOpsDeps, input: {
|
|
31
|
+
hostId: string;
|
|
32
|
+
hostRef: FirebaseFirestore.DocumentReference;
|
|
33
|
+
registerId: string;
|
|
34
|
+
refundCents: number;
|
|
35
|
+
limitCents: number;
|
|
36
|
+
/** The member asking is a workspace admin, or a manager's PIN stands behind them. */
|
|
37
|
+
isManager: boolean;
|
|
38
|
+
managerAssertion: unknown;
|
|
39
|
+
}): Promise<PosRefundAuthority>;
|
|
40
|
+
/**
|
|
41
|
+
* For `refund.ts`: a register member refunding from the order dialog. The
|
|
42
|
+
* amount is the one the route is about to reserve — the amount asked, else
|
|
43
|
+
* the named lines, else everything left.
|
|
44
|
+
*/
|
|
45
|
+
export declare function posRegisterRefundAuthority(input: {
|
|
46
|
+
hostId: string;
|
|
47
|
+
hostRef: FirebaseFirestore.DocumentReference;
|
|
48
|
+
order: {
|
|
49
|
+
channel?: string;
|
|
50
|
+
totals?: {
|
|
51
|
+
totalCents?: number;
|
|
52
|
+
} | null;
|
|
53
|
+
amountCents?: number;
|
|
54
|
+
refundedCents?: number;
|
|
55
|
+
};
|
|
56
|
+
amountCents: number | null;
|
|
57
|
+
lineCents: number | null;
|
|
58
|
+
registerId: string;
|
|
59
|
+
managerAssertion: unknown;
|
|
60
|
+
}, deps?: PosOpsDeps): Promise<PosRefundAuthority>;
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
*/ import { posMoney } from "../model/commerce-pos-ops.js";
|
|
17
|
+
import { posOpsSettings } from "../pos-ops-config.js";
|
|
18
|
+
import { defaultPosOpsDeps, posOpsCleanId, resolvePosStaffAssertion } from "./pos-ops-gate.js";
|
|
19
|
+
/** The limit question, with the money already known. */ export async function decidePosRefundAuthority(deps, input) {
|
|
20
|
+
if (input.isManager || input.refundCents <= input.limitCents) return {
|
|
21
|
+
ok: true
|
|
22
|
+
};
|
|
23
|
+
const registerId = posOpsCleanId(input.registerId);
|
|
24
|
+
const approvedBy = registerId && input.managerAssertion ? await resolvePosStaffAssertion(deps, input.hostRef, input.managerAssertion, {
|
|
25
|
+
hostId: input.hostId,
|
|
26
|
+
registerId,
|
|
27
|
+
purpose: 'manager'
|
|
28
|
+
}) : null;
|
|
29
|
+
if (approvedBy) return {
|
|
30
|
+
ok: true,
|
|
31
|
+
approvedBy
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
ok: false,
|
|
35
|
+
body: {
|
|
36
|
+
error: input.limitCents > 0 ? `Refunds over ${posMoney(input.limitCents)} need a manager's PIN.` : "Register refunds need a manager's PIN.",
|
|
37
|
+
needsManager: true,
|
|
38
|
+
limitCents: input.limitCents
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* For `refund.ts`: a register member refunding from the order dialog. The
|
|
44
|
+
* amount is the one the route is about to reserve — the amount asked, else
|
|
45
|
+
* the named lines, else everything left.
|
|
46
|
+
*/ export async function posRegisterRefundAuthority(input, deps = defaultPosOpsDeps()) {
|
|
47
|
+
var _ref, _ref1, _input_order_refundedCents;
|
|
48
|
+
var _input_order_totals;
|
|
49
|
+
if (input.order.channel !== 'pos') {
|
|
50
|
+
return {
|
|
51
|
+
ok: false,
|
|
52
|
+
body: {
|
|
53
|
+
error: 'Refunds of online orders require an admin of the whole workspace'
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const remaining = Math.max(0, Math.round(Number((_ref = (_ref1 = (_input_order_totals = input.order.totals) == null ? void 0 : _input_order_totals.totalCents) != null ? _ref1 : input.order.amountCents) != null ? _ref : 0)) - Math.round(Number((_input_order_refundedCents = input.order.refundedCents) != null ? _input_order_refundedCents : 0)));
|
|
58
|
+
const asked = input.amountCents != null && Number.isFinite(input.amountCents) ? Math.round(input.amountCents) : input.lineCents != null ? input.lineCents : remaining;
|
|
59
|
+
const owner = await deps.orgForHost(input.hostId);
|
|
60
|
+
const settings = posOpsSettings((owner == null ? void 0 : owner.orgId) ? await deps.pluginConfig(owner.orgId, input.hostId).catch(()=>({})) : {});
|
|
61
|
+
return decidePosRefundAuthority(deps, {
|
|
62
|
+
hostId: input.hostId,
|
|
63
|
+
hostRef: input.hostRef,
|
|
64
|
+
registerId: input.registerId,
|
|
65
|
+
refundCents: Math.min(asked, remaining),
|
|
66
|
+
limitCents: settings.refundLimitCents,
|
|
67
|
+
isManager: false,
|
|
68
|
+
managerAssertion: input.managerAssertion
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=pos-refund-authority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/server/pos-refund-authority.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 { posMoney } from '../model/commerce-pos-ops'\nimport { posOpsSettings } from '../pos-ops-config'\nimport {\n defaultPosOpsDeps,\n posOpsCleanId,\n resolvePosStaffAssertion,\n type PosOpsDeps,\n} from './pos-ops-gate'\n\n/*==========================================\n * HOW MUCH THE REGISTER MAY REFUND (AGL-3609).\n *\n * A workspace admin refunds anything, as before. A member who works the\n * register refunds a POS sale up to the site's cashier refund limit\n * (`posRefundLimit`, $0 by default, so out of the box every register refund\n * needs a manager), and above it only with a MANAGER ASSERTION: a workspace\n * admin's PIN, entered at that register for that refund, minted for two\n * minutes and re-checked against the manager's role when it is used.\n *\n * Only a POS sale. An online order's refund stays a workspace admin's, so the\n * register's limit is not a way to refund the storefront.\n *=========================================*/\n\nexport type PosRefundAuthority =\n | { ok: true; approvedBy?: string }\n | { ok: false; body: { error: string; needsManager?: boolean; limitCents?: number } }\n\n/** The limit question, with the money already known. */\nexport async function decidePosRefundAuthority(\n deps: PosOpsDeps,\n input: {\n hostId: string\n hostRef: FirebaseFirestore.DocumentReference\n registerId: string\n refundCents: number\n limitCents: number\n /** The member asking is a workspace admin, or a manager's PIN stands behind them. */\n isManager: boolean\n managerAssertion: unknown\n },\n): Promise<PosRefundAuthority> {\n if (input.isManager || input.refundCents <= input.limitCents) return { ok: true }\n const registerId = posOpsCleanId(input.registerId)\n const approvedBy =\n registerId && input.managerAssertion\n ? await resolvePosStaffAssertion(deps, input.hostRef, input.managerAssertion, {\n hostId: input.hostId,\n registerId,\n purpose: 'manager',\n })\n : null\n if (approvedBy) return { ok: true, approvedBy }\n return {\n ok: false,\n body: {\n error:\n input.limitCents > 0\n ? `Refunds over ${posMoney(input.limitCents)} need a manager's PIN.`\n : \"Register refunds need a manager's PIN.\",\n needsManager: true,\n limitCents: input.limitCents,\n },\n }\n}\n\n/**\n * For `refund.ts`: a register member refunding from the order dialog. The\n * amount is the one the route is about to reserve — the amount asked, else\n * the named lines, else everything left.\n */\nexport async function posRegisterRefundAuthority(\n input: {\n hostId: string\n hostRef: FirebaseFirestore.DocumentReference\n order: {\n channel?: string\n totals?: { totalCents?: number } | null\n amountCents?: number\n refundedCents?: number\n }\n amountCents: number | null\n lineCents: number | null\n registerId: string\n managerAssertion: unknown\n },\n deps: PosOpsDeps = defaultPosOpsDeps(),\n): Promise<PosRefundAuthority> {\n if (input.order.channel !== 'pos') {\n return {\n ok: false,\n body: { error: 'Refunds of online orders require an admin of the whole workspace' },\n }\n }\n const remaining = Math.max(\n 0,\n Math.round(Number(input.order.totals?.totalCents ?? input.order.amountCents ?? 0)) -\n Math.round(Number(input.order.refundedCents ?? 0)),\n )\n const asked =\n input.amountCents != null && Number.isFinite(input.amountCents)\n ? Math.round(input.amountCents)\n : input.lineCents != null\n ? input.lineCents\n : remaining\n const owner = await deps.orgForHost(input.hostId)\n const settings = posOpsSettings(\n owner?.orgId ? await deps.pluginConfig(owner.orgId, input.hostId).catch(() => ({})) : {},\n )\n return decidePosRefundAuthority(deps, {\n hostId: input.hostId,\n hostRef: input.hostRef,\n registerId: input.registerId,\n refundCents: Math.min(asked, remaining),\n limitCents: settings.refundLimitCents,\n isManager: false,\n managerAssertion: input.managerAssertion,\n })\n}\n"],"names":["posMoney","posOpsSettings","defaultPosOpsDeps","posOpsCleanId","resolvePosStaffAssertion","decidePosRefundAuthority","deps","input","isManager","refundCents","limitCents","ok","registerId","approvedBy","managerAssertion","hostRef","hostId","purpose","body","error","needsManager","posRegisterRefundAuthority","order","channel","remaining","Math","max","round","Number","totals","totalCents","amountCents","refundedCents","asked","isFinite","lineCents","owner","orgForHost","settings","orgId","pluginConfig","catch","min","refundLimitCents"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,QAAQ,QAAQ,+BAA2B;AACpD,SAASC,cAAc,QAAQ,uBAAmB;AAClD,SACEC,iBAAiB,EACjBC,aAAa,EACbC,wBAAwB,QAEnB,oBAAgB;AAoBvB,sDAAsD,GACtD,OAAO,eAAeC,yBACpBC,IAAgB,EAChBC,KASC;IAED,IAAIA,MAAMC,SAAS,IAAID,MAAME,WAAW,IAAIF,MAAMG,UAAU,EAAE,OAAO;QAAEC,IAAI;IAAK;IAChF,MAAMC,aAAaT,cAAcI,MAAMK,UAAU;IACjD,MAAMC,aACJD,cAAcL,MAAMO,gBAAgB,GAChC,MAAMV,yBAAyBE,MAAMC,MAAMQ,OAAO,EAAER,MAAMO,gBAAgB,EAAE;QAC1EE,QAAQT,MAAMS,MAAM;QACpBJ;QACAK,SAAS;IACX,KACA;IACN,IAAIJ,YAAY,OAAO;QAAEF,IAAI;QAAME;IAAW;IAC9C,OAAO;QACLF,IAAI;QACJO,MAAM;YACJC,OACEZ,MAAMG,UAAU,GAAG,IACf,CAAC,aAAa,EAAEV,SAASO,MAAMG,UAAU,EAAE,sBAAsB,CAAC,GAClE;YACNU,cAAc;YACdV,YAAYH,MAAMG,UAAU;QAC9B;IACF;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeW,2BACpBd,KAaC,EACDD,OAAmBJ,mBAAmB;QAUlBK,aACEA;QADFA;IARpB,IAAIA,MAAMe,KAAK,CAACC,OAAO,KAAK,OAAO;QACjC,OAAO;YACLZ,IAAI;YACJO,MAAM;gBAAEC,OAAO;YAAmE;QACpF;IACF;IACA,MAAMK,YAAYC,KAAKC,GAAG,CACxB,GACAD,KAAKE,KAAK,CAACC,QAAOrB,iBAAAA,sBAAAA,MAAMe,KAAK,CAACO,MAAM,qBAAlBtB,oBAAoBuB,UAAU,oBAAIvB,MAAMe,KAAK,CAACS,WAAW,YAAzDxB,OAA6D,MAC7EkB,KAAKE,KAAK,CAACC,QAAOrB,6BAAAA,MAAMe,KAAK,CAACU,aAAa,YAAzBzB,6BAA6B;IAEnD,MAAM0B,QACJ1B,MAAMwB,WAAW,IAAI,QAAQH,OAAOM,QAAQ,CAAC3B,MAAMwB,WAAW,IAC1DN,KAAKE,KAAK,CAACpB,MAAMwB,WAAW,IAC5BxB,MAAM4B,SAAS,IAAI,OACjB5B,MAAM4B,SAAS,GACfX;IACR,MAAMY,QAAQ,MAAM9B,KAAK+B,UAAU,CAAC9B,MAAMS,MAAM;IAChD,MAAMsB,WAAWrC,eACfmC,CAAAA,yBAAAA,MAAOG,KAAK,IAAG,MAAMjC,KAAKkC,YAAY,CAACJ,MAAMG,KAAK,EAAEhC,MAAMS,MAAM,EAAEyB,KAAK,CAAC,IAAO,CAAA,CAAC,CAAA,KAAM,CAAC;IAEzF,OAAOpC,yBAAyBC,MAAM;QACpCU,QAAQT,MAAMS,MAAM;QACpBD,SAASR,MAAMQ,OAAO;QACtBH,YAAYL,MAAMK,UAAU;QAC5BH,aAAagB,KAAKiB,GAAG,CAACT,OAAOT;QAC7Bd,YAAY4B,SAASK,gBAAgB;QACrCnC,WAAW;QACXM,kBAAkBP,MAAMO,gBAAgB;IAC1C;AACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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, type PluginApiRequest } from '@aglyn/aglyn/server';
|
|
18
|
+
import * as CommerceModel from '../model';
|
|
19
|
+
import { type PosOpsDeps } from './pos-ops-gate';
|
|
20
|
+
export interface PosReturnSideEffects {
|
|
21
|
+
hostId: string;
|
|
22
|
+
orderId: string;
|
|
23
|
+
/** The return's id, the same under the register and in the store's returns. */
|
|
24
|
+
returnId: string;
|
|
25
|
+
/** The return as the store's returns list holds it, for the return event. */
|
|
26
|
+
storeReturn: CommerceModel.HostReturn;
|
|
27
|
+
/** The Stripe refunds the return made, if any, for the refund event. */
|
|
28
|
+
refundIds: string[];
|
|
29
|
+
email: string | null | undefined;
|
|
30
|
+
refundCents: number;
|
|
31
|
+
closedTheOrder: boolean;
|
|
32
|
+
returnedProductIds: string[];
|
|
33
|
+
fullyRefunded: boolean;
|
|
34
|
+
lineIndexes: number[];
|
|
35
|
+
/** The lines this return finished taking back in full. */
|
|
36
|
+
fullLineIndexes: number[];
|
|
37
|
+
}
|
|
38
|
+
export interface PosReturnDeps extends PosOpsDeps {
|
|
39
|
+
/** What every refund tells the rest of the workspace, after the money moved. Never throws. */
|
|
40
|
+
afterRefund(input: PosReturnSideEffects): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export declare function defaultPosReturnDeps(): PosReturnDeps;
|
|
43
|
+
type Outcome = {
|
|
44
|
+
status: number;
|
|
45
|
+
body: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
export declare function handlePosReturn(deps: PosReturnDeps, req: PluginApiRequest): Promise<Outcome>;
|
|
48
|
+
/**
|
|
49
|
+
* Units per order line that the store's OTHER returns — the online returns
|
|
50
|
+
* flow (AGL-3611) — hold or already took back. The register's own returns are
|
|
51
|
+
* left out: `returnedQuantities` on the order already counts them.
|
|
52
|
+
*/
|
|
53
|
+
export declare function unitsHeldByOnlineReturns(docs: ReadonlyArray<{
|
|
54
|
+
data(): FirebaseFirestore.DocumentData | undefined;
|
|
55
|
+
}>): number[];
|
|
56
|
+
export declare function createPosReturnHandler(deps?: () => PosReturnDeps): PluginApiHandler;
|
|
57
|
+
export declare const posReturnHandler: PluginApiHandler;
|
|
58
|
+
export {};
|