@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
|
@@ -15,8 +15,56 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
15
15
|
* See the License for the specific language governing permissions and
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/ import * as CommerceModel from "../model/index.js";
|
|
18
|
+
import { announcePluginShipment } from "@aglyn/aglyn/plugin-manager/plugin-shipment-records";
|
|
18
19
|
import { createResourceUid } from "@aglyn/aglyn/server";
|
|
19
20
|
import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
21
|
+
import { notifyOrderBuyer } from "./order-notifications.js";
|
|
22
|
+
import { ORDER_DELIVERED_EVENT, ORDER_FULFILLED_EVENT } from "../model/order-events.js";
|
|
23
|
+
import { fulfillmentEventView, stageOrderEvent } from "./order-events.js";
|
|
24
|
+
import { createHash } from "crypto";
|
|
25
|
+
/** How long a carrier name and a tracking number may be, on every door. */ export const CARRIER_MAX = 40;
|
|
26
|
+
export const TRACKING_NUMBER_MAX = 60;
|
|
27
|
+
const URL_MAX = 2048;
|
|
28
|
+
/** Trims a carrier and a tracking number to what every door stores. */ export function boundTracking(input) {
|
|
29
|
+
var _input_carrier, _input_trackingNumber;
|
|
30
|
+
return {
|
|
31
|
+
carrier: String((_input_carrier = input.carrier) != null ? _input_carrier : '').trim().slice(0, CARRIER_MAX),
|
|
32
|
+
trackingNumber: String((_input_trackingNumber = input.trackingNumber) != null ? _input_trackingNumber : '').trim().slice(0, TRACKING_NUMBER_MAX)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** An https link or nothing: a stored link is rendered to buyers as an anchor. */ export function safeHttpsUrl(value) {
|
|
36
|
+
const text = String(value != null ? value : '').trim();
|
|
37
|
+
if (!text || text.length > URL_MAX) return undefined;
|
|
38
|
+
try {
|
|
39
|
+
const url = new URL(text);
|
|
40
|
+
return url.protocol === 'https:' ? url.toString() : undefined;
|
|
41
|
+
} catch (unused) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** The fulfillment id a keyed attempt writes, so a retry finds it. */ export function fulfillmentIdForKey(orderId, key) {
|
|
46
|
+
return `f-${createHash('sha256').update(`${orderId}:${key}`).digest('hex').slice(0, 20)}`;
|
|
47
|
+
}
|
|
48
|
+
/** The tracking keys a fulfillment stores: the number, the carrier and the link. */ function trackingFields(carrier, trackingNumber, explicitUrl) {
|
|
49
|
+
var _CommerceModel_trackingUrlFor;
|
|
50
|
+
const trackingUrl = explicitUrl != null ? explicitUrl : trackingNumber ? (_CommerceModel_trackingUrlFor = CommerceModel.trackingUrlFor(carrier, trackingNumber)) != null ? _CommerceModel_trackingUrlFor : undefined : undefined;
|
|
51
|
+
return _extends({}, carrier ? {
|
|
52
|
+
carrier
|
|
53
|
+
} : {}, trackingNumber ? {
|
|
54
|
+
trackingNumber
|
|
55
|
+
} : {}, trackingUrl ? {
|
|
56
|
+
trackingUrl
|
|
57
|
+
} : {});
|
|
58
|
+
}
|
|
59
|
+
/** The timeline's words for a shipment. */ function shipmentDetail(order, lines, partial, carrier, trackingNumber) {
|
|
60
|
+
const tracking = trackingNumber ? `${carrier || 'Shipped'} ${trackingNumber}` : '';
|
|
61
|
+
if (!partial) return tracking || 'Fulfilled';
|
|
62
|
+
const what = CommerceModel.describeFulfillmentLines(order, lines);
|
|
63
|
+
return tracking ? `${what} — ${tracking}` : `${what} shipped`;
|
|
64
|
+
}
|
|
65
|
+
function orderRefFor(hostId, orderId) {
|
|
66
|
+
return firebaseAdmin.app().firestore().collection('hosts').doc(hostId).collection('orders').doc(orderId);
|
|
67
|
+
}
|
|
20
68
|
/**
|
|
21
69
|
* Record a shipment — the transaction, with NO authorization of any kind
|
|
22
70
|
* (AGL-2461).
|
|
@@ -37,58 +85,322 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
|
37
85
|
* trust in ways that have nothing in common (a Firebase uid in `memberRoles`
|
|
38
86
|
* for the console; an org credential that owns the host for `/v1`).
|
|
39
87
|
*
|
|
88
|
+
* QUANTITIES (AGL-3611). A shipment names units, not just lines, and the
|
|
89
|
+
* remaining count is computed from the transaction's own read, so two admins
|
|
90
|
+
* shipping the last 3 mugs at once cannot ship 6: the second meets
|
|
91
|
+
* `invalid_lines` with `over_fulfilled`. The resulting status is computed
|
|
92
|
+
* from the fulfillments (`statusFromFulfillments`) — `partially_fulfilled`
|
|
93
|
+
* until every shippable unit is covered — and the transition rule is re-asked
|
|
94
|
+
* only when the status actually moves, since a second partial shipment on a
|
|
95
|
+
* `partially_fulfilled` order changes nothing the table speaks to.
|
|
96
|
+
*
|
|
40
97
|
* Every guarantee AGL-1819 built is inside the transaction and therefore
|
|
41
98
|
* inherited by both callers: `canTransitionOrder` is re-asked under the write
|
|
42
99
|
* so a stale caller cannot skip a state, the already-in-target case returns
|
|
43
|
-
* without writing so a retry cannot append a duplicate shipment, and
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*/ export async function recordOrderShipment(
|
|
100
|
+
* without writing so a retry cannot append a duplicate shipment, and the
|
|
101
|
+
* lines and the timeline are computed from the transaction's OWN read so a
|
|
102
|
+
* note landed from another tab survives.
|
|
103
|
+
*/ export async function recordOrderShipment(request) {
|
|
104
|
+
var _result_fulfillment, _result_fulfillment1;
|
|
105
|
+
const { hostId, orderId, to } = request;
|
|
106
|
+
const { carrier, trackingNumber } = boundTracking(request);
|
|
107
|
+
const explicitUrl = safeHttpsUrl(request.trackingUrl);
|
|
108
|
+
const labelUrl = safeHttpsUrl(request.labelUrl);
|
|
47
109
|
const firestore = firebaseAdmin.app().firestore();
|
|
48
|
-
const orderRef =
|
|
49
|
-
|
|
50
|
-
|
|
110
|
+
const orderRef = orderRefFor(hostId, orderId);
|
|
111
|
+
const keyedId = request.idempotencyKey ? fulfillmentIdForKey(orderId, String(request.idempotencyKey).slice(0, 200)) : null;
|
|
112
|
+
const result = await firestore.runTransaction(async (transaction)=>{
|
|
113
|
+
var _snapshot_data, _request_lineItems, _order_fulfillments;
|
|
51
114
|
const snapshot = await transaction.get(orderRef);
|
|
52
115
|
if (!snapshot.exists) return {
|
|
53
116
|
outcome: 'no_such_order'
|
|
54
117
|
};
|
|
55
118
|
const order = CommerceModel.liftLegacyOrder((_snapshot_data = snapshot.data()) != null ? _snapshot_data : {});
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
119
|
+
const atMs = Date.now();
|
|
120
|
+
if (to === 'delivered') {
|
|
121
|
+
if (order.status === 'delivered') return {
|
|
122
|
+
outcome: 'already'
|
|
123
|
+
};
|
|
124
|
+
if (!CommerceModel.canTransitionOrder(order.status, 'delivered')) {
|
|
125
|
+
return {
|
|
126
|
+
outcome: 'blocked',
|
|
127
|
+
from: order.status
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const delivered = {
|
|
131
|
+
status: 'delivered',
|
|
132
|
+
updatedAtMs: atMs,
|
|
133
|
+
timeline: CommerceModel.appendOrderEvent(order, 'delivered', undefined, atMs)
|
|
134
|
+
};
|
|
135
|
+
transaction.update(orderRef, delivered);
|
|
136
|
+
stageOrderEvent(transaction, ORDER_DELIVERED_EVENT, {
|
|
137
|
+
hostId,
|
|
138
|
+
orderId,
|
|
139
|
+
key: 'delivered',
|
|
140
|
+
order: _extends({}, snapshot.data(), delivered)
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
outcome: 'recorded',
|
|
144
|
+
status: 'delivered'
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// A redelivered keyed attempt: the fulfillment it wrote is there.
|
|
148
|
+
if (keyedId) {
|
|
149
|
+
var _order_fulfillments1;
|
|
150
|
+
const existing = ((_order_fulfillments1 = order.fulfillments) != null ? _order_fulfillments1 : []).find((entry)=>entry.id === keyedId);
|
|
151
|
+
if (existing) return {
|
|
152
|
+
outcome: 'already',
|
|
153
|
+
fulfillment: existing
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (request.onceByTracking && trackingNumber) {
|
|
157
|
+
const same = CommerceModel.fulfillmentWithTracking(order, trackingNumber);
|
|
158
|
+
if (same) return {
|
|
159
|
+
outcome: 'already',
|
|
160
|
+
fulfillment: same
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const named = ((_request_lineItems = request.lineItems) != null ? _request_lineItems : []).length > 0;
|
|
164
|
+
// A redelivered click, or the second of two admins, on a "fulfil
|
|
165
|
+
// everything". Success because it IS the state the caller asked for —
|
|
166
|
+
// but nothing is written, so a retry cannot append a second copy.
|
|
167
|
+
if (!named && order.status === 'fulfilled') return {
|
|
60
168
|
outcome: 'already'
|
|
61
169
|
};
|
|
62
|
-
if (!CommerceModel.canTransitionOrder(order.status,
|
|
170
|
+
if (order.status !== 'partially_fulfilled' && order.status !== 'fulfilled' && !CommerceModel.canTransitionOrder(order.status, 'partially_fulfilled') && !CommerceModel.canTransitionOrder(order.status, 'fulfilled')) {
|
|
171
|
+
return {
|
|
172
|
+
outcome: 'blocked',
|
|
173
|
+
from: order.status
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
let lines;
|
|
177
|
+
if (named) {
|
|
178
|
+
var _request_lineItems1;
|
|
179
|
+
const resolved = CommerceModel.resolveFulfillmentLines(order, (_request_lineItems1 = request.lineItems) != null ? _request_lineItems1 : []);
|
|
180
|
+
if (!('lines' in resolved)) {
|
|
181
|
+
return {
|
|
182
|
+
outcome: 'invalid_lines',
|
|
183
|
+
problem: resolved,
|
|
184
|
+
message: CommerceModel.describeFulfillmentLinesProblem(resolved)
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
lines = resolved.lines;
|
|
188
|
+
} else {
|
|
189
|
+
lines = CommerceModel.remainingFulfillmentLines(order);
|
|
190
|
+
// Nothing physical left: a fulfil closes the digital and service
|
|
191
|
+
// lines instead, which is what it did before quantities existed.
|
|
192
|
+
if (lines.length === 0) {
|
|
193
|
+
lines = CommerceModel.orderLineFulfillmentStates(order).filter((state)=>state.remainingQuantity > 0).map((state)=>({
|
|
194
|
+
lineItemId: state.lineItemId,
|
|
195
|
+
quantity: state.remainingQuantity
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const fulfillment = _extends({
|
|
200
|
+
id: keyedId != null ? keyedId : createResourceUid(),
|
|
201
|
+
lineItemIds: lines.map((entry)=>entry.lineItemId),
|
|
202
|
+
lines
|
|
203
|
+
}, trackingFields(carrier, trackingNumber, explicitUrl), labelUrl ? {
|
|
204
|
+
labelUrl
|
|
205
|
+
} : {}, request.labelRef ? {
|
|
206
|
+
labelRef: String(request.labelRef).slice(0, 80)
|
|
207
|
+
} : {}, {
|
|
208
|
+
status: 'active',
|
|
209
|
+
notify: request.notify !== false,
|
|
210
|
+
atMs
|
|
211
|
+
});
|
|
212
|
+
const fulfillments = [
|
|
213
|
+
...(_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : [],
|
|
214
|
+
fulfillment
|
|
215
|
+
];
|
|
216
|
+
let status = CommerceModel.statusFromFulfillments({
|
|
217
|
+
lineItems: order.lineItems,
|
|
218
|
+
fulfillments
|
|
219
|
+
});
|
|
220
|
+
// A fulfil with nothing left to cover still closes the order.
|
|
221
|
+
if (status === 'paid') status = 'fulfilled';
|
|
222
|
+
if (status !== order.status && !CommerceModel.canTransitionOrder(order.status, status)) {
|
|
63
223
|
return {
|
|
64
224
|
outcome: 'blocked',
|
|
65
225
|
from: order.status
|
|
66
226
|
};
|
|
67
227
|
}
|
|
228
|
+
const shipped = {
|
|
229
|
+
status,
|
|
230
|
+
fulfillments,
|
|
231
|
+
// What a shipping tool's feed asks (AGL-3613): which orders changed.
|
|
232
|
+
updatedAtMs: atMs,
|
|
233
|
+
timeline: CommerceModel.appendOrderEvent(order, status, shipmentDetail(order, lines, status === 'partially_fulfilled', carrier, trackingNumber), atMs)
|
|
234
|
+
};
|
|
235
|
+
transaction.update(orderRef, shipped);
|
|
236
|
+
// Once per shipment (AGL-3611), in the same write, so the event exists
|
|
237
|
+
// exactly when the shipment does.
|
|
238
|
+
stageOrderEvent(transaction, ORDER_FULFILLED_EVENT, {
|
|
239
|
+
hostId,
|
|
240
|
+
orderId,
|
|
241
|
+
key: fulfillment.id,
|
|
242
|
+
order: _extends({}, snapshot.data(), shipped),
|
|
243
|
+
extra: {
|
|
244
|
+
fulfillment: fulfillmentEventView(order, fulfillment)
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return {
|
|
248
|
+
outcome: 'recorded',
|
|
249
|
+
status,
|
|
250
|
+
fulfillment
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
// The BUYER hears about it (AGL-3610): shipped with the tracking link, or
|
|
254
|
+
// delivered. Once per shipment, after the write, and never fails the
|
|
255
|
+
// shipment — see `order-notifications.ts`. A retry returns `already` above
|
|
256
|
+
// and never reaches here. A merchant who unticked "Notify customer"
|
|
257
|
+
// (AGL-3611) recorded the shipment with `notify: false`, and nobody is told.
|
|
258
|
+
// Every shipment recorded, by any door, is announced (AGL-3612), so a
|
|
259
|
+
// plugin that follows parcels can follow one typed in by hand too.
|
|
260
|
+
if (result.outcome === 'recorded' && ((_result_fulfillment = result.fulfillment) == null ? void 0 : _result_fulfillment.trackingNumber)) {
|
|
261
|
+
await announcePluginShipment(_extends({
|
|
262
|
+
hostId,
|
|
263
|
+
recordId: orderId,
|
|
264
|
+
shipmentId: result.fulfillment.id
|
|
265
|
+
}, result.fulfillment.carrier ? {
|
|
266
|
+
carrier: result.fulfillment.carrier
|
|
267
|
+
} : {}, {
|
|
268
|
+
trackingNumber: result.fulfillment.trackingNumber
|
|
269
|
+
}, request.labelRef ? {
|
|
270
|
+
labelRef: request.labelRef
|
|
271
|
+
} : {}));
|
|
272
|
+
}
|
|
273
|
+
if (result.outcome === 'recorded' && ((_result_fulfillment1 = result.fulfillment) == null ? void 0 : _result_fulfillment1.notify) !== false) {
|
|
274
|
+
await notifyOrderBuyer({
|
|
275
|
+
hostId,
|
|
276
|
+
orderId
|
|
277
|
+
}, to === 'fulfilled' ? 'shipped' : 'delivered', result.fulfillment ? {
|
|
278
|
+
fulfillmentId: result.fulfillment.id
|
|
279
|
+
} : {});
|
|
280
|
+
}
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Corrects the tracking on one fulfillment (AGL-3611): a mistyped number, a
|
|
285
|
+
* carrier swapped, a label bought after the parcel was recorded. Moves no
|
|
286
|
+
* status and no stock. A cancelled fulfillment is history and is refused.
|
|
287
|
+
*/ export async function updateFulfillmentTracking(request) {
|
|
288
|
+
const { carrier, trackingNumber } = boundTracking(request);
|
|
289
|
+
const explicitUrl = safeHttpsUrl(request.trackingUrl);
|
|
290
|
+
const orderRef = orderRefFor(request.hostId, request.orderId);
|
|
291
|
+
return firebaseAdmin.app().firestore().runTransaction(async (transaction)=>{
|
|
292
|
+
var _snapshot_data, _order_fulfillments, _order_fulfillments1, _current_carrier, _next_carrier, _current_trackingNumber, _next_trackingNumber, _current_trackingUrl, _next_trackingUrl, _order_fulfillments2;
|
|
293
|
+
const snapshot = await transaction.get(orderRef);
|
|
294
|
+
if (!snapshot.exists) return {
|
|
295
|
+
outcome: 'no_such_order'
|
|
296
|
+
};
|
|
297
|
+
const order = CommerceModel.liftLegacyOrder((_snapshot_data = snapshot.data()) != null ? _snapshot_data : {});
|
|
298
|
+
const index = ((_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : []).findIndex((entry)=>entry.id === request.fulfillmentId);
|
|
299
|
+
if (index < 0) return {
|
|
300
|
+
outcome: 'no_such_fulfillment'
|
|
301
|
+
};
|
|
302
|
+
const current = ((_order_fulfillments1 = order.fulfillments) != null ? _order_fulfillments1 : [])[index];
|
|
303
|
+
if (!CommerceModel.fulfillmentIsActive(current) || ![
|
|
304
|
+
'paid',
|
|
305
|
+
'partially_fulfilled',
|
|
306
|
+
'fulfilled',
|
|
307
|
+
'delivered'
|
|
308
|
+
].includes(order.status)) {
|
|
309
|
+
return {
|
|
310
|
+
outcome: 'locked',
|
|
311
|
+
from: CommerceModel.fulfillmentIsActive(current) ? order.status : 'cancelled'
|
|
312
|
+
};
|
|
313
|
+
}
|
|
68
314
|
const atMs = Date.now();
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
]
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
315
|
+
const next = _extends({}, current, {
|
|
316
|
+
updatedAtMs: atMs
|
|
317
|
+
});
|
|
318
|
+
delete next.carrier;
|
|
319
|
+
delete next.trackingNumber;
|
|
320
|
+
delete next.trackingUrl;
|
|
321
|
+
Object.assign(next, trackingFields(carrier, trackingNumber, explicitUrl));
|
|
322
|
+
if (((_current_carrier = current.carrier) != null ? _current_carrier : '') === ((_next_carrier = next.carrier) != null ? _next_carrier : '') && ((_current_trackingNumber = current.trackingNumber) != null ? _current_trackingNumber : '') === ((_next_trackingNumber = next.trackingNumber) != null ? _next_trackingNumber : '') && ((_current_trackingUrl = current.trackingUrl) != null ? _current_trackingUrl : '') === ((_next_trackingUrl = next.trackingUrl) != null ? _next_trackingUrl : '')) {
|
|
323
|
+
return {
|
|
324
|
+
outcome: 'already',
|
|
325
|
+
fulfillment: current
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
const fulfillments = [
|
|
329
|
+
...(_order_fulfillments2 = order.fulfillments) != null ? _order_fulfillments2 : []
|
|
330
|
+
];
|
|
331
|
+
fulfillments[index] = next;
|
|
332
|
+
transaction.update(orderRef, {
|
|
333
|
+
fulfillments,
|
|
334
|
+
updatedAtMs: atMs,
|
|
335
|
+
timeline: CommerceModel.appendOrderEvent(order, 'tracking-updated', trackingNumber ? `${carrier || 'Tracking'} ${trackingNumber}` : 'Tracking removed', atMs)
|
|
336
|
+
});
|
|
337
|
+
return {
|
|
338
|
+
outcome: 'updated',
|
|
339
|
+
status: order.status,
|
|
340
|
+
fulfillment: next
|
|
88
341
|
};
|
|
89
|
-
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Cancels one fulfillment (AGL-3611): the parcel was never handed over, or was
|
|
346
|
+
* recorded against the wrong items. Its units go back to unfulfilled and the
|
|
347
|
+
* order's status is recomputed from what remains — `fulfilled` can step back
|
|
348
|
+
* to `partially_fulfilled` or `paid`.
|
|
349
|
+
*
|
|
350
|
+
* That step back is NOT an `ORDER_TRANSITIONS` edge, on purpose: the table
|
|
351
|
+
* says what may happen to an order going forward, and admitting
|
|
352
|
+
* `fulfilled → paid` there would open it to every other caller. This is the one writer
|
|
353
|
+
* that may take it, and only from a status whose fulfillments are still open
|
|
354
|
+
* (`orderFulfillmentsEditable`): a delivered, refunded or cancelled order's
|
|
355
|
+
* shipments are what happened and stay that way.
|
|
356
|
+
*/ export async function cancelOrderFulfillment(request) {
|
|
357
|
+
const orderRef = orderRefFor(request.hostId, request.orderId);
|
|
358
|
+
return firebaseAdmin.app().firestore().runTransaction(async (transaction)=>{
|
|
359
|
+
var _snapshot_data, _order_fulfillments, _order_fulfillments1, _order_fulfillments2;
|
|
360
|
+
const snapshot = await transaction.get(orderRef);
|
|
361
|
+
if (!snapshot.exists) return {
|
|
362
|
+
outcome: 'no_such_order'
|
|
363
|
+
};
|
|
364
|
+
const order = CommerceModel.liftLegacyOrder((_snapshot_data = snapshot.data()) != null ? _snapshot_data : {});
|
|
365
|
+
const index = ((_order_fulfillments = order.fulfillments) != null ? _order_fulfillments : []).findIndex((entry)=>entry.id === request.fulfillmentId);
|
|
366
|
+
if (index < 0) return {
|
|
367
|
+
outcome: 'no_such_fulfillment'
|
|
368
|
+
};
|
|
369
|
+
const current = ((_order_fulfillments1 = order.fulfillments) != null ? _order_fulfillments1 : [])[index];
|
|
370
|
+
if (!CommerceModel.fulfillmentIsActive(current)) return {
|
|
371
|
+
outcome: 'already',
|
|
372
|
+
fulfillment: current
|
|
373
|
+
};
|
|
374
|
+
if (!CommerceModel.orderFulfillmentsEditable(order)) {
|
|
375
|
+
return {
|
|
376
|
+
outcome: 'locked',
|
|
377
|
+
from: order.status
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
const atMs = Date.now();
|
|
381
|
+
const next = _extends({}, current, {
|
|
382
|
+
status: 'cancelled',
|
|
383
|
+
cancelledAtMs: atMs,
|
|
384
|
+
updatedAtMs: atMs
|
|
385
|
+
});
|
|
386
|
+
const fulfillments = [
|
|
387
|
+
...(_order_fulfillments2 = order.fulfillments) != null ? _order_fulfillments2 : []
|
|
388
|
+
];
|
|
389
|
+
fulfillments[index] = next;
|
|
390
|
+
const status = CommerceModel.statusFromFulfillments({
|
|
391
|
+
lineItems: order.lineItems,
|
|
392
|
+
fulfillments
|
|
393
|
+
});
|
|
394
|
+
transaction.update(orderRef, {
|
|
395
|
+
status,
|
|
396
|
+
fulfillments,
|
|
397
|
+
updatedAtMs: atMs,
|
|
398
|
+
timeline: CommerceModel.appendOrderEvent(order, 'fulfillment-cancelled', CommerceModel.describeFulfillmentLines(order, CommerceModel.fulfillmentLineQuantities(order, current)) + ' back to unfulfilled', atMs)
|
|
399
|
+
});
|
|
90
400
|
return {
|
|
91
|
-
outcome: '
|
|
401
|
+
outcome: 'updated',
|
|
402
|
+
status,
|
|
403
|
+
fulfillment: next
|
|
92
404
|
};
|
|
93
405
|
});
|
|
94
406
|
}
|
|
@@ -120,10 +432,11 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
|
120
432
|
* is an `update()` naming only status, fulfillments and timeline, and the
|
|
121
433
|
* question is still the merchant's to answer.
|
|
122
434
|
*
|
|
123
|
-
* NO NOTIFICATION
|
|
435
|
+
* NO MANAGER NOTIFICATION, matching the client write this replaces: the
|
|
124
436
|
* merchant fulfilled the order themselves, and `notifyHostManagers` would
|
|
125
437
|
* tell them what they just did. (`supplier-update.ts` notifies because there
|
|
126
|
-
* the SUPPLIER acted and the merchant is the one who needs to hear it.)
|
|
438
|
+
* the SUPPLIER acted and the merchant is the one who needs to hear it.) The
|
|
439
|
+
* BUYER is told, through `recordOrderShipment` (AGL-3610).
|
|
127
440
|
*
|
|
128
441
|
* ONCE. A retried request — a lost response, a second click — finds the order
|
|
129
442
|
* already in the target status and returns success WITHOUT writing: appending
|
|
@@ -140,7 +453,7 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
|
140
453
|
* Role gate: `admin` and `editor`, the role the client write already had
|
|
141
454
|
* under the rules' host catch-all — same reasoning as `cancel-order.ts`.
|
|
142
455
|
*/ export const fulfillOrderHandler = async (req, res)=>{
|
|
143
|
-
var _req_headers_authorization, _req_body, _body_hostId, _body_orderId, _body_to,
|
|
456
|
+
var _req_headers_authorization, _req_body, _body_hostId, _body_orderId, _body_action, _body_fulfillmentId, _body_to, _ref, _req_headers_idempotencykey;
|
|
144
457
|
if (req.method !== 'POST') {
|
|
145
458
|
return res.status(405).json({
|
|
146
459
|
error: 'Method not allowed'
|
|
@@ -166,15 +479,33 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
|
166
479
|
error: 'Missing hostId or orderId'
|
|
167
480
|
});
|
|
168
481
|
}
|
|
482
|
+
// Two more acts on one fulfillment (AGL-3611): correct its tracking, or
|
|
483
|
+
// cancel it. Same route, same role gate; neither moves stock or money.
|
|
484
|
+
const action = String((_body_action = body.action) != null ? _body_action : '');
|
|
485
|
+
const fulfillmentId = String((_body_fulfillmentId = body.fulfillmentId) != null ? _body_fulfillmentId : '').slice(0, 100);
|
|
486
|
+
if ((action === 'update-tracking' || action === 'cancel-fulfillment') && !fulfillmentId) {
|
|
487
|
+
return res.status(400).json({
|
|
488
|
+
error: 'Missing fulfillmentId'
|
|
489
|
+
});
|
|
490
|
+
}
|
|
169
491
|
const to = String((_body_to = body.to) != null ? _body_to : '');
|
|
170
|
-
if (to !== 'fulfilled' && to !== 'delivered') {
|
|
492
|
+
if (!action && to !== 'fulfilled' && to !== 'delivered') {
|
|
171
493
|
// Deliberately NOT a generic transition endpoint — see the header.
|
|
172
494
|
return res.status(400).json({
|
|
173
495
|
error: 'to must be fulfilled or delivered'
|
|
174
496
|
});
|
|
175
497
|
}
|
|
176
|
-
|
|
177
|
-
|
|
498
|
+
if (action && action !== 'update-tracking' && action !== 'cancel-fulfillment') {
|
|
499
|
+
return res.status(400).json({
|
|
500
|
+
error: 'Unknown action'
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
const { carrier, trackingNumber } = boundTracking(body);
|
|
504
|
+
const lineItems = Array.isArray(body.lineItems) ? body.lineItems.slice(0, 500).map((entry)=>({
|
|
505
|
+
lineItemId: Number(entry == null ? void 0 : entry.lineItemId),
|
|
506
|
+
quantity: Number(entry == null ? void 0 : entry.quantity)
|
|
507
|
+
})) : undefined;
|
|
508
|
+
const idempotencyKey = String((_ref = (_req_headers_idempotencykey = req.headers['idempotency-key']) != null ? _req_headers_idempotencykey : body.idempotencyKey) != null ? _ref : '').slice(0, 200);
|
|
178
509
|
try {
|
|
179
510
|
var _hostSnapshot_get;
|
|
180
511
|
const decoded = await firebaseAdmin.app().auth().verifyIdToken(idToken);
|
|
@@ -192,33 +523,104 @@ import { firebaseAdmin } from "@aglyn/tenant-data-admin";
|
|
|
192
523
|
error: 'Not permitted'
|
|
193
524
|
});
|
|
194
525
|
}
|
|
526
|
+
if (action) {
|
|
527
|
+
const change = action === 'update-tracking' ? await updateFulfillmentTracking({
|
|
528
|
+
hostId,
|
|
529
|
+
orderId,
|
|
530
|
+
fulfillmentId,
|
|
531
|
+
carrier,
|
|
532
|
+
trackingNumber,
|
|
533
|
+
trackingUrl: body.trackingUrl
|
|
534
|
+
}) : await cancelOrderFulfillment({
|
|
535
|
+
hostId,
|
|
536
|
+
orderId,
|
|
537
|
+
fulfillmentId
|
|
538
|
+
});
|
|
539
|
+
// A corrected tracking number is a parcel to follow (AGL-3612).
|
|
540
|
+
if (change.outcome === 'updated' && action === 'update-tracking' && change.fulfillment.trackingNumber) {
|
|
541
|
+
await announcePluginShipment(_extends({
|
|
542
|
+
hostId,
|
|
543
|
+
recordId: orderId,
|
|
544
|
+
shipmentId: change.fulfillment.id
|
|
545
|
+
}, change.fulfillment.carrier ? {
|
|
546
|
+
carrier: change.fulfillment.carrier
|
|
547
|
+
} : {}, {
|
|
548
|
+
trackingNumber: change.fulfillment.trackingNumber
|
|
549
|
+
}));
|
|
550
|
+
}
|
|
551
|
+
if (change.outcome === 'no_such_order') return res.status(404).json({
|
|
552
|
+
error: 'Unknown order'
|
|
553
|
+
});
|
|
554
|
+
if (change.outcome === 'no_such_fulfillment') {
|
|
555
|
+
return res.status(404).json({
|
|
556
|
+
error: 'That shipment is no longer on this order'
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
if (change.outcome === 'locked') {
|
|
560
|
+
return res.status(409).json({
|
|
561
|
+
error: change.from === 'cancelled' ? 'That shipment was canceled and can no longer be edited' : `Shipments on an order in "${change.from}" can no longer be changed`
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
return res.status(200).json(_extends({
|
|
565
|
+
ok: true
|
|
566
|
+
}, change.outcome === 'already' ? {
|
|
567
|
+
already: true
|
|
568
|
+
} : {
|
|
569
|
+
status: change.status
|
|
570
|
+
}, {
|
|
571
|
+
fulfillment: change.fulfillment
|
|
572
|
+
}));
|
|
573
|
+
}
|
|
195
574
|
// Authorized above; the shipment itself is the shared transaction. The
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
const outcome = await recordOrderShipment({
|
|
575
|
+
// console dialog branches on `ok`, `already` and the 409's `error`
|
|
576
|
+
// string, and this route's contract is with that dialog, not with the
|
|
577
|
+
// registry's vocabulary.
|
|
578
|
+
const outcome = await recordOrderShipment(_extends({
|
|
200
579
|
hostId,
|
|
201
580
|
orderId,
|
|
202
581
|
to,
|
|
203
582
|
carrier,
|
|
204
583
|
trackingNumber
|
|
205
|
-
}
|
|
584
|
+
}, lineItems ? {
|
|
585
|
+
lineItems
|
|
586
|
+
} : {}, body.trackingUrl ? {
|
|
587
|
+
trackingUrl: String(body.trackingUrl)
|
|
588
|
+
} : {}, body.labelUrl ? {
|
|
589
|
+
labelUrl: String(body.labelUrl)
|
|
590
|
+
} : {}, body.notify === false ? {
|
|
591
|
+
notify: false
|
|
592
|
+
} : {}, idempotencyKey ? {
|
|
593
|
+
idempotencyKey
|
|
594
|
+
} : {}));
|
|
206
595
|
if (outcome.outcome === 'no_such_order') {
|
|
207
596
|
return res.status(404).json({
|
|
208
597
|
error: 'Unknown order'
|
|
209
598
|
});
|
|
210
599
|
}
|
|
600
|
+
if (outcome.outcome === 'invalid_lines') {
|
|
601
|
+
return res.status(outcome.problem.problem === 'over_fulfilled' ? 409 : 400).json({
|
|
602
|
+
error: outcome.message
|
|
603
|
+
});
|
|
604
|
+
}
|
|
211
605
|
if (outcome.outcome === 'blocked') {
|
|
212
606
|
return res.status(409).json({
|
|
213
607
|
error: to === 'delivered' ? `Orders in "${outcome.from}" cannot be marked delivered` : `Orders in "${outcome.from}" cannot be fulfilled`
|
|
214
608
|
});
|
|
215
609
|
}
|
|
216
|
-
|
|
610
|
+
if (outcome.outcome === 'already') {
|
|
611
|
+
return res.status(200).json(_extends({
|
|
612
|
+
ok: true,
|
|
613
|
+
already: true
|
|
614
|
+
}, outcome.fulfillment ? {
|
|
615
|
+
fulfillment: outcome.fulfillment
|
|
616
|
+
} : {}));
|
|
617
|
+
}
|
|
618
|
+
return res.status(200).json(_extends({
|
|
217
619
|
ok: true,
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
});
|
|
620
|
+
status: outcome.status
|
|
621
|
+
}, outcome.fulfillment ? {
|
|
622
|
+
fulfillment: outcome.fulfillment
|
|
623
|
+
} : {}));
|
|
222
624
|
} catch (error) {
|
|
223
625
|
// Nothing landed — the transaction is all-or-nothing — so the order is
|
|
224
626
|
// still where it was and the merchant can try again.
|