@openlup/platform 0.26.0 → 0.27.0
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/CHANGELOG.md +138 -218
- package/README.md +229 -16
- package/dist/commerce/adapters/managed/commerceOmsControlPlane.d.ts +3 -0
- package/dist/commerce/adapters/managed/commerceOmsControlPlane.js +71 -0
- package/dist/commerce/adapters/managed/commerceOmsMutations.d.ts +10 -0
- package/dist/commerce/adapters/managed/commerceOmsMutations.js +119 -0
- package/dist/commerce/adapters/managed/commerceOmsPort.d.ts +28 -0
- package/dist/commerce/adapters/managed/commerceOmsPort.js +101 -0
- package/dist/commerce/adapters/managed/oms/accounting.d.ts +3 -0
- package/dist/commerce/adapters/managed/oms/accounting.js +13 -0
- package/dist/commerce/adapters/managed/oms/fulfillmentReads.d.ts +17 -0
- package/dist/commerce/adapters/managed/oms/fulfillmentReads.js +81 -0
- package/dist/commerce/adapters/managed/oms/inboundEvents.d.ts +9 -0
- package/dist/commerce/adapters/managed/oms/inboundEvents.js +40 -0
- package/dist/commerce/adapters/managed/oms/outboxEvents.d.ts +2 -0
- package/dist/commerce/adapters/managed/oms/outboxEvents.js +23 -0
- package/dist/commerce/adapters/managed/oms/paymentAttempts.d.ts +3 -0
- package/dist/commerce/adapters/managed/oms/paymentAttempts.js +15 -0
- package/dist/commerce/adapters/managed/oms/queueSelection.d.ts +12 -0
- package/dist/commerce/adapters/managed/oms/queueSelection.js +109 -0
- package/dist/commerce/adapters/managed/oms/readProjections.d.ts +18 -0
- package/dist/commerce/adapters/managed/oms/readProjections.js +13 -0
- package/dist/commerce/adapters/managed/oms/readQueries.d.ts +16 -0
- package/dist/commerce/adapters/managed/oms/readQueries.js +276 -0
- package/dist/commerce/adapters/managed/oms/types.d.ts +2 -0
- package/dist/commerce/adapters/managed/oms/types.js +7 -0
- package/dist/commerce/checkoutCommandSchemas.d.ts +89 -0
- package/dist/commerce/checkoutCommandSchemas.js +70 -0
- package/dist/commerce/checkoutHelpers.d.ts +21 -0
- package/dist/commerce/checkoutHelpers.js +29 -0
- package/dist/commerce/checkoutResumeSchemas.d.ts +158 -0
- package/dist/commerce/checkoutResumeSchemas.js +145 -0
- package/dist/commerce/checkoutSchemas.d.ts +158 -0
- package/dist/commerce/checkoutSchemas.js +161 -0
- package/dist/commerce/commerceReturnsPort.d.ts +97 -0
- package/dist/commerce/commerceReturnsPort.js +39 -0
- package/dist/commerce/configuratorIntentPersistenceSchemas.d.ts +20 -0
- package/dist/commerce/configuratorIntentPersistenceSchemas.js +21 -0
- package/dist/commerce/configuratorIntentSchemas.d.ts +63 -0
- package/dist/commerce/configuratorIntentSchemas.js +43 -0
- package/dist/commerce/contractPrimitives.d.ts +50 -0
- package/dist/commerce/contractPrimitives.js +25 -0
- package/dist/commerce/contracts/availability.d.ts +23 -0
- package/dist/commerce/contracts/availability.js +1 -0
- package/dist/commerce/contracts/fulfillmentRecovery.d.ts +25 -0
- package/dist/commerce/contracts/fulfillmentRecovery.js +1 -0
- package/dist/commerce/contracts/index.d.ts +13 -0
- package/dist/commerce/contracts/index.js +1 -0
- package/dist/commerce/contracts/intent.d.ts +86 -0
- package/dist/commerce/contracts/intent.js +1 -0
- package/dist/commerce/contracts/omsTypes.d.ts +1216 -0
- package/dist/commerce/contracts/omsTypes.js +1 -0
- package/dist/commerce/contracts/order.d.ts +39 -0
- package/dist/commerce/contracts/order.js +1 -0
- package/dist/commerce/contracts/orderMoney.d.ts +52 -0
- package/dist/commerce/contracts/orderMoney.js +1 -0
- package/dist/commerce/contracts/ports.d.ts +113 -0
- package/dist/commerce/contracts/ports.js +1 -0
- package/dist/commerce/contracts/recovery.d.ts +11 -0
- package/dist/commerce/contracts/recovery.js +1 -0
- package/dist/commerce/contracts/runtimePorts.d.ts +196 -0
- package/dist/commerce/contracts/runtimePorts.js +1 -0
- package/dist/commerce/contracts/state.d.ts +26 -0
- package/dist/commerce/contracts/state.js +43 -0
- package/dist/commerce/customerDefaultsSnapshotSchemas.d.ts +51 -0
- package/dist/commerce/customerDefaultsSnapshotSchemas.js +106 -0
- package/dist/commerce/errors.d.ts +18 -0
- package/dist/commerce/errors.js +36 -0
- package/dist/commerce/fulfillmentEligibility.d.ts +6 -0
- package/dist/commerce/fulfillmentEligibility.js +31 -0
- package/dist/commerce/index.d.ts +72 -0
- package/dist/commerce/index.js +67 -0
- package/dist/commerce/model/customerFulfillmentRecovery.d.ts +40 -0
- package/dist/commerce/model/customerFulfillmentRecovery.js +144 -0
- package/dist/commerce/model/fulfillmentCancellationEligibility.d.ts +7 -0
- package/dist/commerce/model/fulfillmentCancellationEligibility.js +9 -0
- package/dist/commerce/model/omsAccountingVisibility.d.ts +12 -0
- package/dist/commerce/model/omsAccountingVisibility.js +118 -0
- package/dist/commerce/model/omsBillingInvoiceBuyer.d.ts +2 -0
- package/dist/commerce/model/omsBillingInvoiceBuyer.js +15 -0
- package/dist/commerce/model/omsCurrency.d.ts +4 -0
- package/dist/commerce/model/omsCurrency.js +5 -0
- package/dist/commerce/model/omsFulfillmentDebug.d.ts +20 -0
- package/dist/commerce/model/omsFulfillmentDebug.js +122 -0
- package/dist/commerce/model/omsFulfillmentSummary.d.ts +16 -0
- package/dist/commerce/model/omsFulfillmentSummary.js +189 -0
- package/dist/commerce/model/omsListTotals.d.ts +13 -0
- package/dist/commerce/model/omsListTotals.js +32 -0
- package/dist/commerce/model/omsOperationalLadder.d.ts +51 -0
- package/dist/commerce/model/omsOperationalLadder.js +158 -0
- package/dist/commerce/model/omsOrderLineMoney.d.ts +4 -0
- package/dist/commerce/model/omsOrderLineMoney.js +25 -0
- package/dist/commerce/model/omsPaymentMethodSummary.d.ts +5 -0
- package/dist/commerce/model/omsPaymentMethodSummary.js +11 -0
- package/dist/commerce/model/omsReadModel.d.ts +43 -0
- package/dist/commerce/model/omsReadModel.js +211 -0
- package/dist/commerce/model/omsReadModelCommunication.d.ts +3 -0
- package/dist/commerce/model/omsReadModelCommunication.js +29 -0
- package/dist/commerce/model/omsReadModelHelpers.d.ts +125 -0
- package/dist/commerce/model/omsReadModelHelpers.js +212 -0
- package/dist/commerce/model/omsReadModelList.d.ts +33 -0
- package/dist/commerce/model/omsReadModelList.js +50 -0
- package/dist/commerce/model/omsReadModelListSummary.d.ts +3 -0
- package/dist/commerce/model/omsReadModelListSummary.js +13 -0
- package/dist/commerce/model/omsReadModelPricing.d.ts +5 -0
- package/dist/commerce/model/omsReadModelPricing.js +36 -0
- package/dist/commerce/model/omsReadModelProjections.d.ts +1 -0
- package/dist/commerce/model/omsReadModelProjections.js +1 -0
- package/dist/commerce/model/omsReadModelRowCore.d.ts +79 -0
- package/dist/commerce/model/omsReadModelRowCore.js +149 -0
- package/dist/commerce/model/omsReadModelRows.d.ts +1 -0
- package/dist/commerce/model/omsReadModelRows.js +6 -0
- package/dist/commerce/offerAvailability.d.ts +18 -0
- package/dist/commerce/offerAvailability.js +53 -0
- package/dist/commerce/offerAvailabilitySchemas.d.ts +43 -0
- package/dist/commerce/offerAvailabilitySchemas.js +42 -0
- package/dist/commerce/offerEvidenceSchemas.d.ts +7 -0
- package/dist/commerce/offerEvidenceSchemas.js +13 -0
- package/dist/commerce/oms/omsContractBase.d.ts +130 -0
- package/dist/commerce/oms/omsContractBase.js +86 -0
- package/dist/commerce/oms/omsContractReadAuxSchemas.d.ts +222 -0
- package/dist/commerce/oms/omsContractReadAuxSchemas.js +123 -0
- package/dist/commerce/oms/omsContractReadSchemas.d.ts +2266 -0
- package/dist/commerce/oms/omsContractReadSchemas.js +277 -0
- package/dist/commerce/oms/omsContractRequests.d.ts +196 -0
- package/dist/commerce/oms/omsContractRequests.js +118 -0
- package/dist/commerce/oms/omsContracts.d.ts +5 -0
- package/dist/commerce/oms/omsContracts.js +4 -0
- package/dist/commerce/oms/omsControlPlane.d.ts +275 -0
- package/dist/commerce/oms/omsControlPlane.js +72 -0
- package/dist/commerce/oms/omsFulfillmentContractSchemas.d.ts +203 -0
- package/dist/commerce/oms/omsFulfillmentContractSchemas.js +94 -0
- package/dist/commerce/oms/omsFulfillmentDebugSchemas.d.ts +69 -0
- package/dist/commerce/oms/omsFulfillmentDebugSchemas.js +33 -0
- package/dist/commerce/oms/omsFulfillmentHealthSchemas.d.ts +67 -0
- package/dist/commerce/oms/omsFulfillmentHealthSchemas.js +44 -0
- package/dist/commerce/oms/omsPorts.d.ts +84 -0
- package/dist/commerce/oms/omsPorts.js +148 -0
- package/dist/commerce/oms/omsPrimitives.d.ts +5 -0
- package/dist/commerce/oms/omsPrimitives.js +3 -0
- package/dist/commerce/oms/omsProviderEvidenceSchemas.d.ts +15 -0
- package/dist/commerce/oms/omsProviderEvidenceSchemas.js +12 -0
- package/dist/commerce/orderDraftErrors.d.ts +13 -0
- package/dist/commerce/orderDraftErrors.js +20 -0
- package/dist/commerce/orderEmailEligibility.d.ts +54 -0
- package/dist/commerce/orderEmailEligibility.js +123 -0
- package/dist/commerce/orderEmailLines.d.ts +12 -0
- package/dist/commerce/orderEmailLines.js +8 -0
- package/dist/commerce/orderFeedbackContracts.d.ts +41 -0
- package/dist/commerce/orderFeedbackContracts.js +33 -0
- package/dist/commerce/orderMoney.d.ts +6 -0
- package/dist/commerce/orderMoney.js +168 -0
- package/dist/commerce/orderReviewContracts.d.ts +475 -0
- package/dist/commerce/orderReviewContracts.js +94 -0
- package/dist/commerce/orderReviewPorts.d.ts +140 -0
- package/dist/commerce/orderReviewPorts.js +1 -0
- package/dist/commerce/outboxDispatchContracts.d.ts +30 -0
- package/dist/commerce/outboxDispatchContracts.js +1 -0
- package/dist/commerce/outboxEventSchemas.d.ts +162 -0
- package/dist/commerce/outboxEventSchemas.js +164 -0
- package/dist/commerce/outboxOrderDraftEmailPorts.d.ts +207 -0
- package/dist/commerce/outboxOrderDraftEmailPorts.js +12 -0
- package/dist/commerce/paymentContinuation.d.ts +4 -0
- package/dist/commerce/paymentContinuation.js +4 -0
- package/dist/commerce/ports.d.ts +8 -0
- package/dist/commerce/ports.js +1 -0
- package/dist/commerce/recoveryDestination.d.ts +3 -0
- package/dist/commerce/recoveryDestination.js +17 -0
- package/dist/commerce/runtimeErrors.d.ts +8 -0
- package/dist/commerce/runtimeErrors.js +16 -0
- package/dist/commerce/salesChannelEnvelope.d.ts +20 -0
- package/dist/commerce/salesChannelEnvelope.js +7 -0
- package/dist/commerce/schemas.d.ts +174 -0
- package/dist/commerce/schemas.js +84 -0
- package/dist/commerce/server/checkoutCompensation.d.ts +21 -0
- package/dist/commerce/server/checkoutCompensation.js +32 -0
- package/dist/commerce/server/checkoutConflictClassifiers.d.ts +17 -0
- package/dist/commerce/server/checkoutConflictClassifiers.js +38 -0
- package/dist/commerce/server/checkoutExpiredRecoveryPolicy.d.ts +38 -0
- package/dist/commerce/server/checkoutExpiredRecoveryPolicy.js +85 -0
- package/dist/commerce/server/checkoutInvoiceBuyerSnapshot.d.ts +22 -0
- package/dist/commerce/server/checkoutInvoiceBuyerSnapshot.js +30 -0
- package/dist/commerce/server/checkoutOfferPolicyPort.d.ts +33 -0
- package/dist/commerce/server/checkoutOfferPolicyPort.js +49 -0
- package/dist/commerce/server/checkoutPaymentContinuationCredential.d.ts +58 -0
- package/dist/commerce/server/checkoutPaymentContinuationCredential.js +154 -0
- package/dist/commerce/server/checkoutQuoteTypes.d.ts +19 -0
- package/dist/commerce/server/checkoutQuoteTypes.js +1 -0
- package/dist/commerce/server/checkoutRecoveryOrderPort.d.ts +42 -0
- package/dist/commerce/server/checkoutRecoveryOrderPort.js +1 -0
- package/dist/commerce/server/checkoutRecoveryToken.d.ts +40 -0
- package/dist/commerce/server/checkoutRecoveryToken.js +26 -0
- package/dist/commerce/server/checkoutRefusalContinuation.d.ts +24 -0
- package/dist/commerce/server/checkoutRefusalContinuation.js +18 -0
- package/dist/commerce/server/checkoutRuntimeTypes.d.ts +81 -0
- package/dist/commerce/server/checkoutRuntimeTypes.js +1 -0
- package/dist/commerce/server/commerceCheckoutCommandExecution.d.ts +60 -0
- package/dist/commerce/server/commerceCheckoutCommandExecution.js +136 -0
- package/dist/commerce/server/commerceCheckoutCompensation.d.ts +26 -0
- package/dist/commerce/server/commerceCheckoutCompensation.js +46 -0
- package/dist/commerce/server/commerceCheckoutContinuationTerms.d.ts +50 -0
- package/dist/commerce/server/commerceCheckoutContinuationTerms.js +66 -0
- package/dist/commerce/server/commerceCheckoutCustomerDefaults.d.ts +18 -0
- package/dist/commerce/server/commerceCheckoutCustomerDefaults.js +17 -0
- package/dist/commerce/server/commerceCheckoutFailureHandler.d.ts +51 -0
- package/dist/commerce/server/commerceCheckoutFailureHandler.js +90 -0
- package/dist/commerce/server/commerceCheckoutHandler.d.ts +213 -0
- package/dist/commerce/server/commerceCheckoutHandler.js +196 -0
- package/dist/commerce/server/commerceCheckoutHandlerAdmission.d.ts +58 -0
- package/dist/commerce/server/commerceCheckoutHandlerAdmission.js +94 -0
- package/dist/commerce/server/commerceCheckoutHandlerHelpers.d.ts +67 -0
- package/dist/commerce/server/commerceCheckoutHandlerHelpers.js +155 -0
- package/dist/commerce/server/commerceCheckoutOrchestrationError.d.ts +9 -0
- package/dist/commerce/server/commerceCheckoutOrchestrationError.js +14 -0
- package/dist/commerce/server/commerceCheckoutPromotionPriceChange.d.ts +47 -0
- package/dist/commerce/server/commerceCheckoutPromotionPriceChange.js +43 -0
- package/dist/commerce/server/commerceCheckoutProviderPayment.d.ts +34 -0
- package/dist/commerce/server/commerceCheckoutProviderPayment.js +37 -0
- package/dist/commerce/server/commerceCheckoutQuoteGuard.d.ts +62 -0
- package/dist/commerce/server/commerceCheckoutQuoteGuard.js +106 -0
- package/dist/commerce/server/commerceCheckoutResume.d.ts +29 -0
- package/dist/commerce/server/commerceCheckoutResume.js +81 -0
- package/dist/commerce/server/commerceCheckoutResumeGuard.d.ts +54 -0
- package/dist/commerce/server/commerceCheckoutResumeGuard.js +138 -0
- package/dist/commerce/server/commerceCheckoutSavedPaymentMethod.d.ts +39 -0
- package/dist/commerce/server/commerceCheckoutSavedPaymentMethod.js +44 -0
- package/dist/commerce/server/commerceCheckoutStartRuntimeFailure.d.ts +7 -0
- package/dist/commerce/server/commerceCheckoutStartRuntimeFailure.js +39 -0
- package/dist/commerce/server/commerceCheckoutTiming.d.ts +8 -0
- package/dist/commerce/server/commerceCheckoutTiming.js +31 -0
- package/dist/commerce/server/commerceDiagnostics.d.ts +6 -0
- package/dist/commerce/server/commerceDiagnostics.js +31 -0
- package/dist/commerce/server/commerceOmsCancelOrderHandler.d.ts +7 -0
- package/dist/commerce/server/commerceOmsCancelOrderHandler.js +22 -0
- package/dist/commerce/server/commerceOmsControlPlaneHandlers.d.ts +18 -0
- package/dist/commerce/server/commerceOmsControlPlaneHandlers.js +60 -0
- package/dist/commerce/server/commerceOmsHandlers.d.ts +47 -0
- package/dist/commerce/server/commerceOmsHandlers.js +176 -0
- package/dist/commerce/server/commerceOmsMarkRefundedHandler.d.ts +7 -0
- package/dist/commerce/server/commerceOmsMarkRefundedHandler.js +19 -0
- package/dist/commerce/server/commerceOrderDraft.d.ts +24 -0
- package/dist/commerce/server/commerceOrderDraft.js +92 -0
- package/dist/commerce/server/commercePaidOrderOrchestration.d.ts +131 -0
- package/dist/commerce/server/commercePaidOrderOrchestration.js +140 -0
- package/dist/commerce/server/commerceProviderAttemptFailure.d.ts +133 -0
- package/dist/commerce/server/commerceProviderAttemptFailure.js +175 -0
- package/dist/commerce/server/commerceReturnsHandlers.d.ts +41 -0
- package/dist/commerce/server/commerceReturnsHandlers.js +100 -0
- package/dist/commerce/server/commerceRuntimePort.d.ts +16 -0
- package/dist/commerce/server/commerceRuntimePort.js +57 -0
- package/dist/commerce/server/commerceRuntimeService.d.ts +98 -0
- package/dist/commerce/server/commerceRuntimeService.js +186 -0
- package/dist/commerce/server/commerceRuntimeStartResponse.d.ts +37 -0
- package/dist/commerce/server/commerceRuntimeStartResponse.js +56 -0
- package/dist/commerce/server/commerceStarterOfferGuard.d.ts +55 -0
- package/dist/commerce/server/commerceStarterOfferGuard.js +128 -0
- package/dist/commerce/server/configuratorIntentPersistence.d.ts +47 -0
- package/dist/commerce/server/configuratorIntentPersistence.js +85 -0
- package/dist/commerce/server/configuratorIntentPersistenceHandler.d.ts +14 -0
- package/dist/commerce/server/configuratorIntentPersistenceHandler.js +42 -0
- package/dist/commerce/server/emailRuntime.d.ts +47 -0
- package/dist/commerce/server/emailRuntime.js +1 -0
- package/dist/commerce/server/handlerSupport.d.ts +68 -0
- package/dist/commerce/server/handlerSupport.js +1 -0
- package/dist/commerce/server/index.d.ts +178 -0
- package/dist/commerce/server/index.js +127 -0
- package/dist/commerce/server/offerAvailability.d.ts +21 -0
- package/dist/commerce/server/offerAvailability.js +163 -0
- package/dist/commerce/server/orderDraftRpcPayload.d.ts +20 -0
- package/dist/commerce/server/orderDraftRpcPayload.js +21 -0
- package/dist/commerce/server/orderFeedbackSubmit.d.ts +20 -0
- package/dist/commerce/server/orderFeedbackSubmit.js +16 -0
- package/dist/commerce/server/orderFeedbackTokenCheck.d.ts +17 -0
- package/dist/commerce/server/orderFeedbackTokenCheck.js +14 -0
- package/dist/commerce/server/orderReviewAdminHandlers.d.ts +47 -0
- package/dist/commerce/server/orderReviewAdminHandlers.js +41 -0
- package/dist/commerce/server/orderReviewHandlers.d.ts +114 -0
- package/dist/commerce/server/orderReviewHandlers.js +42 -0
- package/dist/commerce/server/orderReviewLifecycle.d.ts +10 -0
- package/dist/commerce/server/orderReviewLifecycle.js +121 -0
- package/dist/commerce/server/orderReviewMedia.d.ts +11 -0
- package/dist/commerce/server/orderReviewMedia.js +172 -0
- package/dist/commerce/server/orderReviewRawUploadHandler.d.ts +40 -0
- package/dist/commerce/server/orderReviewRawUploadHandler.js +316 -0
- package/dist/commerce/server/outboxCheckoutExpiredEmailHandler.d.ts +14 -0
- package/dist/commerce/server/outboxCheckoutExpiredEmailHandler.js +57 -0
- package/dist/commerce/server/outboxCheckoutRecoveryEmailHandler.d.ts +13 -0
- package/dist/commerce/server/outboxCheckoutRecoveryEmailHandler.js +150 -0
- package/dist/commerce/server/outboxDispatchRegistry.d.ts +46 -0
- package/dist/commerce/server/outboxDispatchRegistry.js +184 -0
- package/dist/commerce/server/outboxDispatchRegistryComposition.d.ts +6 -0
- package/dist/commerce/server/outboxDispatchRegistryComposition.js +23 -0
- package/dist/commerce/server/outboxOrderDraftEmailHandler.d.ts +14 -0
- package/dist/commerce/server/outboxOrderDraftEmailHandler.js +130 -0
- package/dist/commerce/server/outboxOrderPaidEmailHandler.d.ts +21 -0
- package/dist/commerce/server/outboxOrderPaidEmailHandler.js +93 -0
- package/dist/commerce/server/outboxOrderPaidFulfillmentHandler.d.ts +3 -0
- package/dist/commerce/server/outboxOrderPaidFulfillmentHandler.js +1 -0
- package/dist/commerce/server/outboxOrderPaidFulfillmentPorts.d.ts +3 -0
- package/dist/commerce/server/outboxOrderPaidFulfillmentPorts.js +1 -0
- package/dist/commerce/server/outboxOrderRefundedEmailHandler.d.ts +13 -0
- package/dist/commerce/server/outboxOrderRefundedEmailHandler.js +42 -0
- package/dist/commerce/server/outboxPaymentFailedEmailHandler.d.ts +14 -0
- package/dist/commerce/server/outboxPaymentFailedEmailHandler.js +65 -0
- package/dist/commerce/server/outboxReturnEmailHandlers.d.ts +26 -0
- package/dist/commerce/server/outboxReturnEmailHandlers.js +53 -0
- package/dist/commerce/server/outboxShipmentDeliveredEmailHandler.d.ts +17 -0
- package/dist/commerce/server/outboxShipmentDeliveredEmailHandler.js +52 -0
- package/dist/commerce/server/outboxShipmentDispatchedEmailHandler.d.ts +13 -0
- package/dist/commerce/server/outboxShipmentDispatchedEmailHandler.js +87 -0
- package/dist/commerce/server/outboxShipmentExceptionEmailHandler.d.ts +13 -0
- package/dist/commerce/server/outboxShipmentExceptionEmailHandler.js +46 -0
- package/dist/commerce/server/referenceCheckoutHandler.d.ts +48 -0
- package/dist/commerce/server/referenceCheckoutHandler.js +68 -0
- package/dist/commerce/server/reservationSweepPort.d.ts +31 -0
- package/dist/commerce/server/reservationSweepPort.js +45 -0
- package/dist/commerce/server/starterTermsPort.d.ts +22 -0
- package/dist/commerce/server/starterTermsPort.js +1 -0
- package/dist/commerce/server/supabaseCommerceReturnsPort.d.ts +13 -0
- package/dist/commerce/server/supabaseCommerceReturnsPort.js +56 -0
- package/dist/communications/consentPurposeRegistry.d.ts +1 -1
- package/dist/communications/newsletterIntegrationContracts.d.ts +5 -5
- package/dist/composition/commerceContribution.d.ts +21 -0
- package/dist/composition/commerceContribution.js +27 -0
- package/dist/composition/index.d.ts +1 -0
- package/dist/composition/index.js +1 -0
- package/dist/fulfillment/handlerSchemas.d.ts +41 -41
- package/dist/fulfillment/index.d.ts +1 -1
- package/dist/fulfillment/index.js +1 -1
- package/dist/fulfillment/paidHandoff.d.ts +12 -1
- package/dist/fulfillment/paidHandoff.js +2 -2
- package/dist/fulfillment/providerDispatchWorker.d.ts +4 -4
- package/dist/identity/customerContracts.d.ts +2 -2
- package/dist/inventory/bindings.d.ts +3 -0
- package/dist/inventory/bindings.js +10 -4
- package/dist/inventory/index.d.ts +1 -0
- package/dist/inventory/index.js +1 -0
- package/dist/inventory/managedStockAvailability.d.ts +15 -0
- package/dist/inventory/managedStockAvailability.js +16 -0
- package/dist/inventory/postgresStockAvailability.js +2 -25
- package/dist/inventory/schemas.d.ts +1 -1
- package/dist/inventory/stockReadResponse.d.ts +4 -0
- package/dist/inventory/stockReadResponse.js +27 -0
- package/dist/pricing/browser/index.d.ts +6 -0
- package/dist/pricing/browser/index.js +6 -0
- package/dist/promotions/adminPromotionsContracts.d.ts +2 -2
- package/dist/subscriptions/index.d.ts +3 -2
- package/dist/subscriptions/index.js +3 -2
- package/package.json +22 -2
- package/release-gates.json +63 -8
- package/src/commerce/adapters/managed/commerceOmsControlPlane.ts +80 -0
- package/src/commerce/adapters/managed/commerceOmsMutations.ts +145 -0
- package/src/commerce/adapters/managed/commerceOmsPort.ts +158 -0
- package/src/commerce/adapters/managed/oms/accounting.ts +18 -0
- package/src/commerce/adapters/managed/oms/fulfillmentReads.ts +82 -0
- package/src/commerce/adapters/managed/oms/inboundEvents.ts +45 -0
- package/src/commerce/adapters/managed/oms/outboxEvents.ts +30 -0
- package/src/commerce/adapters/managed/oms/paymentAttempts.ts +19 -0
- package/src/commerce/adapters/managed/oms/queueSelection.ts +132 -0
- package/src/commerce/adapters/managed/oms/readProjections.ts +22 -0
- package/src/commerce/adapters/managed/oms/readQueries.ts +292 -0
- package/src/commerce/adapters/managed/oms/types.ts +9 -0
- package/src/commerce/checkoutCommandSchemas.ts +93 -0
- package/src/commerce/checkoutHelpers.ts +47 -0
- package/src/commerce/checkoutResumeSchemas.ts +164 -0
- package/src/commerce/checkoutSchemas.ts +182 -0
- package/src/commerce/commerceReturnsPort.ts +67 -0
- package/src/commerce/configuratorIntentPersistenceSchemas.ts +26 -0
- package/src/commerce/configuratorIntentSchemas.ts +47 -0
- package/src/commerce/contractPrimitives.ts +30 -0
- package/src/commerce/contracts/availability.ts +21 -0
- package/src/commerce/contracts/fulfillmentRecovery.ts +26 -0
- package/src/commerce/contracts/index.ts +17 -0
- package/src/commerce/contracts/intent.ts +58 -0
- package/src/commerce/contracts/omsTypes.ts +1217 -0
- package/src/commerce/contracts/order.ts +44 -0
- package/src/commerce/contracts/orderMoney.ts +75 -0
- package/src/commerce/contracts/ports.ts +124 -0
- package/src/commerce/contracts/recovery.ts +24 -0
- package/src/commerce/contracts/runtimePorts.ts +201 -0
- package/src/commerce/contracts/state.ts +64 -0
- package/src/commerce/customerDefaultsSnapshotSchemas.ts +117 -0
- package/src/commerce/errors.ts +53 -0
- package/src/commerce/fulfillmentEligibility.ts +32 -0
- package/src/commerce/index.ts +82 -0
- package/src/commerce/model/customerFulfillmentRecovery.ts +185 -0
- package/src/commerce/model/fulfillmentCancellationEligibility.ts +18 -0
- package/src/commerce/model/omsAccountingVisibility.ts +135 -0
- package/src/commerce/model/omsBillingInvoiceBuyer.ts +20 -0
- package/src/commerce/model/omsCurrency.ts +8 -0
- package/src/commerce/model/omsFulfillmentDebug.ts +157 -0
- package/src/commerce/model/omsFulfillmentSummary.ts +225 -0
- package/src/commerce/model/omsListTotals.ts +38 -0
- package/src/commerce/model/omsOperationalLadder.ts +181 -0
- package/src/commerce/model/omsOrderLineMoney.ts +34 -0
- package/src/commerce/model/omsPaymentMethodSummary.ts +19 -0
- package/src/commerce/model/omsReadModel.ts +302 -0
- package/src/commerce/model/omsReadModelCommunication.ts +32 -0
- package/src/commerce/model/omsReadModelHelpers.ts +279 -0
- package/src/commerce/model/omsReadModelList.ts +90 -0
- package/src/commerce/model/omsReadModelListSummary.ts +19 -0
- package/src/commerce/model/omsReadModelPricing.ts +57 -0
- package/src/commerce/model/omsReadModelProjections.ts +1 -0
- package/src/commerce/model/omsReadModelRowCore.ts +193 -0
- package/src/commerce/model/omsReadModelRows.ts +7 -0
- package/src/commerce/offerAvailability.ts +75 -0
- package/src/commerce/offerAvailabilitySchemas.ts +56 -0
- package/src/commerce/offerEvidenceSchemas.ts +17 -0
- package/src/commerce/oms/omsContractBase.ts +92 -0
- package/src/commerce/oms/omsContractReadAuxSchemas.ts +130 -0
- package/src/commerce/oms/omsContractReadSchemas.ts +303 -0
- package/src/commerce/oms/omsContractRequests.ts +143 -0
- package/src/commerce/oms/omsContracts.ts +6 -0
- package/src/commerce/oms/omsControlPlane.ts +85 -0
- package/src/commerce/oms/omsFulfillmentContractSchemas.ts +113 -0
- package/src/commerce/oms/omsFulfillmentDebugSchemas.ts +38 -0
- package/src/commerce/oms/omsFulfillmentHealthSchemas.ts +46 -0
- package/src/commerce/oms/omsPorts.ts +165 -0
- package/src/commerce/oms/omsPrimitives.ts +3 -0
- package/src/commerce/oms/omsProviderEvidenceSchemas.ts +13 -0
- package/src/commerce/orderDraftErrors.ts +28 -0
- package/src/commerce/orderEmailEligibility.ts +131 -0
- package/src/commerce/orderEmailLines.ts +22 -0
- package/src/commerce/orderFeedbackContracts.ts +47 -0
- package/src/commerce/orderMoney.ts +207 -0
- package/src/commerce/orderReviewContracts.ts +124 -0
- package/src/commerce/orderReviewPorts.ts +94 -0
- package/src/commerce/outboxDispatchContracts.ts +30 -0
- package/src/commerce/outboxEventSchemas.ts +230 -0
- package/src/commerce/outboxOrderDraftEmailPorts.ts +241 -0
- package/src/commerce/paymentContinuation.ts +5 -0
- package/src/commerce/ports.ts +7 -0
- package/src/commerce/recoveryDestination.ts +23 -0
- package/src/commerce/runtimeErrors.ts +19 -0
- package/src/commerce/salesChannelEnvelope.ts +28 -0
- package/src/commerce/schemas.ts +104 -0
- package/src/commerce/server/checkoutCompensation.ts +49 -0
- package/src/commerce/server/checkoutConflictClassifiers.ts +53 -0
- package/src/commerce/server/checkoutExpiredRecoveryPolicy.ts +107 -0
- package/src/commerce/server/checkoutInvoiceBuyerSnapshot.ts +36 -0
- package/src/commerce/server/checkoutOfferPolicyPort.ts +60 -0
- package/src/commerce/server/checkoutPaymentContinuationCredential.ts +222 -0
- package/src/commerce/server/checkoutQuoteTypes.ts +9 -0
- package/src/commerce/server/checkoutRecoveryOrderPort.ts +40 -0
- package/src/commerce/server/checkoutRecoveryToken.ts +63 -0
- package/src/commerce/server/checkoutRefusalContinuation.ts +29 -0
- package/src/commerce/server/checkoutRuntimeTypes.ts +26 -0
- package/src/commerce/server/commerceCheckoutCommandExecution.ts +188 -0
- package/src/commerce/server/commerceCheckoutCompensation.ts +66 -0
- package/src/commerce/server/commerceCheckoutContinuationTerms.ts +87 -0
- package/src/commerce/server/commerceCheckoutCustomerDefaults.ts +24 -0
- package/src/commerce/server/commerceCheckoutFailureHandler.ts +144 -0
- package/src/commerce/server/commerceCheckoutHandler.ts +269 -0
- package/src/commerce/server/commerceCheckoutHandlerAdmission.ts +157 -0
- package/src/commerce/server/commerceCheckoutHandlerHelpers.ts +223 -0
- package/src/commerce/server/commerceCheckoutOrchestrationError.ts +15 -0
- package/src/commerce/server/commerceCheckoutPromotionPriceChange.ts +83 -0
- package/src/commerce/server/commerceCheckoutProviderPayment.ts +45 -0
- package/src/commerce/server/commerceCheckoutQuoteGuard.ts +172 -0
- package/src/commerce/server/commerceCheckoutResume.ts +132 -0
- package/src/commerce/server/commerceCheckoutResumeGuard.ts +195 -0
- package/src/commerce/server/commerceCheckoutSavedPaymentMethod.ts +85 -0
- package/src/commerce/server/commerceCheckoutStartRuntimeFailure.ts +59 -0
- package/src/commerce/server/commerceCheckoutTiming.ts +53 -0
- package/src/commerce/server/commerceDiagnostics.ts +37 -0
- package/src/commerce/server/commerceOmsCancelOrderHandler.ts +43 -0
- package/src/commerce/server/commerceOmsControlPlaneHandlers.ts +71 -0
- package/src/commerce/server/commerceOmsHandlers.ts +275 -0
- package/src/commerce/server/commerceOmsMarkRefundedHandler.ts +39 -0
- package/src/commerce/server/commerceOrderDraft.ts +131 -0
- package/src/commerce/server/commercePaidOrderOrchestration.ts +275 -0
- package/src/commerce/server/commerceProviderAttemptFailure.ts +257 -0
- package/src/commerce/server/commerceReturnsHandlers.ts +143 -0
- package/src/commerce/server/commerceRuntimePort.ts +75 -0
- package/src/commerce/server/commerceRuntimeService.ts +229 -0
- package/src/commerce/server/commerceRuntimeStartResponse.ts +76 -0
- package/src/commerce/server/commerceStarterOfferGuard.ts +200 -0
- package/src/commerce/server/configuratorIntentPersistence.ts +161 -0
- package/src/commerce/server/configuratorIntentPersistenceHandler.ts +54 -0
- package/src/commerce/server/emailRuntime.ts +30 -0
- package/src/commerce/server/handlerSupport.ts +22 -0
- package/src/commerce/server/index.ts +181 -0
- package/src/commerce/server/offerAvailability.ts +275 -0
- package/src/commerce/server/orderDraftRpcPayload.ts +39 -0
- package/src/commerce/server/orderFeedbackSubmit.ts +40 -0
- package/src/commerce/server/orderFeedbackTokenCheck.ts +28 -0
- package/src/commerce/server/orderReviewAdminHandlers.ts +43 -0
- package/src/commerce/server/orderReviewHandlers.ts +57 -0
- package/src/commerce/server/orderReviewLifecycle.ts +129 -0
- package/src/commerce/server/orderReviewMedia.ts +170 -0
- package/src/commerce/server/orderReviewRawUploadHandler.ts +300 -0
- package/src/commerce/server/outboxCheckoutExpiredEmailHandler.ts +86 -0
- package/src/commerce/server/outboxCheckoutRecoveryEmailHandler.ts +188 -0
- package/src/commerce/server/outboxDispatchRegistry.ts +269 -0
- package/src/commerce/server/outboxDispatchRegistryComposition.ts +31 -0
- package/src/commerce/server/outboxOrderDraftEmailHandler.ts +162 -0
- package/src/commerce/server/outboxOrderPaidEmailHandler.ts +147 -0
- package/src/commerce/server/outboxOrderPaidFulfillmentHandler.ts +4 -0
- package/src/commerce/server/outboxOrderPaidFulfillmentPorts.ts +3 -0
- package/src/commerce/server/outboxOrderRefundedEmailHandler.ts +58 -0
- package/src/commerce/server/outboxPaymentFailedEmailHandler.ts +99 -0
- package/src/commerce/server/outboxReturnEmailHandlers.ts +92 -0
- package/src/commerce/server/outboxShipmentDeliveredEmailHandler.ts +94 -0
- package/src/commerce/server/outboxShipmentDispatchedEmailHandler.ts +112 -0
- package/src/commerce/server/outboxShipmentExceptionEmailHandler.ts +73 -0
- package/src/commerce/server/referenceCheckoutHandler.ts +87 -0
- package/src/commerce/server/reservationSweepPort.ts +67 -0
- package/src/commerce/server/starterTermsPort.ts +22 -0
- package/src/commerce/server/supabaseCommerceReturnsPort.ts +81 -0
- package/src/composition/commerceContribution.ts +35 -0
- package/src/composition/index.ts +1 -0
- package/src/fulfillment/index.ts +1 -1
- package/src/fulfillment/paidHandoff.ts +2 -2
- package/src/inventory/bindings.ts +12 -4
- package/src/inventory/index.ts +1 -0
- package/src/inventory/managedStockAvailability.ts +23 -0
- package/src/inventory/postgresStockAvailability.ts +2 -21
- package/src/inventory/stockReadResponse.ts +25 -0
- package/src/pricing/browser/index.ts +6 -0
- package/src/subscriptions/index.ts +3 -2
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { parcelSequenceNo } from "@openlup/core/fulfillment";
|
|
2
|
+
import type { SubscriptionCycleStatus } from "@openlup/core/subscription";
|
|
3
|
+
import {
|
|
4
|
+
resolveDeliverySelectionEvidence,
|
|
5
|
+
summarizeDeliverySelection,
|
|
6
|
+
} from "../../shipping/index.js";
|
|
7
|
+
import {
|
|
8
|
+
adminCommerceOrderDetailResponseSchema,
|
|
9
|
+
type AdminCommerceOrderDetailResponse,
|
|
10
|
+
type OmsDeliveryContactResolution,
|
|
11
|
+
type OmsOrderDetail,
|
|
12
|
+
} from "../oms/omsContracts.js";
|
|
13
|
+
import { enrichBillingWithInvoiceBuyer } from "./omsBillingInvoiceBuyer.js";
|
|
14
|
+
import {
|
|
15
|
+
buildOmsFulfillmentDebug,
|
|
16
|
+
type OmsFulfillmentProviderStockCurrentRow,
|
|
17
|
+
type OmsInboundProviderEventRow,
|
|
18
|
+
} from "./omsFulfillmentDebug.js";
|
|
19
|
+
import {
|
|
20
|
+
type OmsFulfillmentOperationRow,
|
|
21
|
+
type OmsFulfillmentOrderRow,
|
|
22
|
+
type OmsProviderAttemptRow,
|
|
23
|
+
type OmsProviderDispatchRefRow,
|
|
24
|
+
type OmsProviderStatusEvidenceRow,
|
|
25
|
+
type OmsReleasedProviderExceptionHoldRow,
|
|
26
|
+
type OmsShipmentExternalRefRow,
|
|
27
|
+
} from "./omsFulfillmentSummary.js";
|
|
28
|
+
import { mapOmsOrderLine } from "./omsOrderLineMoney.js";
|
|
29
|
+
import { mapCommunicationDelivery } from "./omsReadModelCommunication.js";
|
|
30
|
+
import {
|
|
31
|
+
actionEligibility,
|
|
32
|
+
mapAddress,
|
|
33
|
+
mapCustomer,
|
|
34
|
+
type OmsActionAvailabilityFlags,
|
|
35
|
+
} from "./omsReadModelHelpers.js";
|
|
36
|
+
import { deriveOmsOrderMoney } from "./omsReadModelPricing.js";
|
|
37
|
+
import type { OmsReadModelProjections } from "./omsReadModelProjections.js";
|
|
38
|
+
import { buildCurrentDeliveryContact,buildOmsOrderRowCore } from "./omsReadModelRowCore.js";
|
|
39
|
+
import type { OmsAccountingInvoiceRow,OmsAccountingOutboxRow,OmsAddressRow,OmsCommunicationDeliveryRow,OmsCustomerRow,OmsHoldRow,OmsInventoryReservationRow,OmsOperationRow,OmsOrderItemRow,OmsOrderRow,OmsPaymentAttemptRow,OmsPaymentIntentRow,OmsPaymentTransitionRow } from "./omsReadModelRows.js";
|
|
40
|
+
import { COMMERCE_CONTRACT_VERSION } from "../../pricing/contracts/index.js";
|
|
41
|
+
|
|
42
|
+
export { buildOmsOrderListResponse } from "./omsReadModelList.js";
|
|
43
|
+
export type { OmsAccountingInvoiceRow,OmsAccountingOutboxRow,OmsAddressRow,OmsCommunicationDeliveryRow,OmsCustomerRow,OmsHoldRow,OmsInventoryReservationRow,OmsOperationRow,OmsOrderItemRow,OmsOrderRow,OmsPaymentAttemptRow,OmsPaymentIntentRow,OmsPaymentTransitionRow } from "./omsReadModelRows.js";
|
|
44
|
+
|
|
45
|
+
export function buildOmsOrderDetailResponse(input: {
|
|
46
|
+
order: OmsOrderRow;
|
|
47
|
+
identityExtras?: Record<string, unknown>;
|
|
48
|
+
projections?: OmsReadModelProjections;
|
|
49
|
+
paymentIntent: OmsPaymentIntentRow | null;
|
|
50
|
+
paymentAttempts: OmsPaymentAttemptRow[];
|
|
51
|
+
paymentTransitions: OmsPaymentTransitionRow[];
|
|
52
|
+
holds: OmsHoldRow[];
|
|
53
|
+
operations: OmsOperationRow[];
|
|
54
|
+
customer?: OmsCustomerRow | null;
|
|
55
|
+
shippingAddress?: OmsAddressRow | null;
|
|
56
|
+
billingAddress?: OmsAddressRow | null;
|
|
57
|
+
accountingInvoice?: OmsAccountingInvoiceRow | null;
|
|
58
|
+
accountingOutbox?: OmsAccountingOutboxRow[];
|
|
59
|
+
communicationDeliveries?: OmsCommunicationDeliveryRow[];
|
|
60
|
+
orderItems?: OmsOrderItemRow[];
|
|
61
|
+
inventoryReservations?: OmsInventoryReservationRow[];
|
|
62
|
+
fulfillmentOrders?: OmsFulfillmentOrderRow[]; fulfillmentOperations?: OmsFulfillmentOperationRow[];
|
|
63
|
+
supersededFulfillmentOrders?: OmsFulfillmentOrderRow[];
|
|
64
|
+
shipmentExternalRefs?: OmsShipmentExternalRefRow[]; providerAttempts?: OmsProviderAttemptRow[];
|
|
65
|
+
providerDispatchRefs?: OmsProviderDispatchRefRow[]; providerStatusEvidence?: OmsProviderStatusEvidenceRow[];
|
|
66
|
+
releasedProviderExceptionHolds?: OmsReleasedProviderExceptionHoldRow[];
|
|
67
|
+
fulfillmentHealth?: OmsOrderDetail["fulfillmentHealth"];
|
|
68
|
+
inboundProviderEvents?: OmsInboundProviderEventRow[];
|
|
69
|
+
providerStockCurrent?: OmsFulfillmentProviderStockCurrentRow[];
|
|
70
|
+
subscriptionCycleStatus: SubscriptionCycleStatus | null;
|
|
71
|
+
subscriptionCyclePaidAt?: string | null;
|
|
72
|
+
subscriptionNextCycleAt?: string | null;
|
|
73
|
+
actionFlags?: OmsActionAvailabilityFlags;
|
|
74
|
+
deliveryContactResolution?: OmsDeliveryContactResolution;
|
|
75
|
+
}): AdminCommerceOrderDetailResponse {
|
|
76
|
+
const activeHoldCount = input.holds.filter((hold) => hold.status === "active").length;
|
|
77
|
+
const orderItems = input.orderItems;
|
|
78
|
+
const orderMoney = deriveOmsOrderMoney(input.order, orderItems);
|
|
79
|
+
const {
|
|
80
|
+
row: order,
|
|
81
|
+
paymentStatus,
|
|
82
|
+
inventory,
|
|
83
|
+
fulfillment,
|
|
84
|
+
accounting,
|
|
85
|
+
fulfillmentEligibility,
|
|
86
|
+
} = buildOmsOrderRowCore({
|
|
87
|
+
projections: input.projections,
|
|
88
|
+
order: input.order,
|
|
89
|
+
activeHoldCount,
|
|
90
|
+
paymentIntents: input.paymentIntent ? [input.paymentIntent] : [],
|
|
91
|
+
paymentAttempts: input.paymentAttempts,
|
|
92
|
+
identity: { customer: mapCustomer(input.customer ?? null), ...input.identityExtras },
|
|
93
|
+
orderItems,
|
|
94
|
+
inventoryReservations: input.inventoryReservations ?? [],
|
|
95
|
+
fulfillmentOrders: input.fulfillmentOrders ?? [],
|
|
96
|
+
fulfillmentOperations: input.fulfillmentOperations ?? [],
|
|
97
|
+
shipmentExternalRefs: input.shipmentExternalRefs ?? [],
|
|
98
|
+
providerAttempts: input.providerAttempts ?? [],
|
|
99
|
+
dispatchRefs: input.providerDispatchRefs ?? [],
|
|
100
|
+
statusEvidence: input.providerStatusEvidence ?? [],
|
|
101
|
+
releasedProviderExceptionHolds: input.releasedProviderExceptionHolds,
|
|
102
|
+
accountingInvoice: input.accountingInvoice ?? null,
|
|
103
|
+
accountingOutbox: input.accountingOutbox ?? [],
|
|
104
|
+
subscriptionCycleStatus: input.subscriptionCycleStatus,
|
|
105
|
+
orderMoney,
|
|
106
|
+
});
|
|
107
|
+
const fulfillmentHealth = buildOmsFulfillmentHealth({ orderId: input.order.id, fulfillmentHealth: input.fulfillmentHealth });
|
|
108
|
+
const { deliveryContact, effectiveShippingAddress } = buildCurrentDeliveryContact({
|
|
109
|
+
resolution: input.deliveryContactResolution ?? { resolutionVersion: 1, scope: "missing", baseline: null, contact: null, contactDigest: null },
|
|
110
|
+
shippingAddressId: input.order.shipping_address_id,
|
|
111
|
+
fulfillmentOrders: input.fulfillmentOrders ?? [],
|
|
112
|
+
dispatchRefs: input.providerDispatchRefs ?? [],
|
|
113
|
+
});
|
|
114
|
+
const detail: OmsOrderDetail = {
|
|
115
|
+
...order,
|
|
116
|
+
...input.projections?.detailFields?.({ order: input.order, orderItems, orderMoney }),
|
|
117
|
+
activeHoldReasons: [...new Set(input.holds.filter((hold) => hold.status === "active").map((hold) => hold.reason))],
|
|
118
|
+
fulfillmentHealthDigest: { healthStatus: fulfillmentHealth.healthStatus, attentionReasons: fulfillmentHealth.attentionReasons },
|
|
119
|
+
shippingAddress: deliveryContact.scope === "missing"
|
|
120
|
+
? mapAddress(input.shippingAddress ?? null)
|
|
121
|
+
: effectiveShippingAddress,
|
|
122
|
+
deliveryContact,
|
|
123
|
+
billingAddress: enrichBillingWithInvoiceBuyer(
|
|
124
|
+
mapAddress(input.billingAddress ?? input.shippingAddress ?? null),
|
|
125
|
+
input.order.metadata,
|
|
126
|
+
),
|
|
127
|
+
deliverySelection: (() => {
|
|
128
|
+
const evidence = resolveDeliverySelectionEvidence({ orderMetadata: input.order.metadata });
|
|
129
|
+
const summary = summarizeDeliverySelection(evidence.selection, evidence.source);
|
|
130
|
+
return summary ? { ...summary, source: summary.source ?? null } : null;
|
|
131
|
+
})(),
|
|
132
|
+
lines: (orderItems ?? []).map((item, index) =>
|
|
133
|
+
mapOmsOrderLine(item, input.order.currency, orderMoney.lines[index]!),
|
|
134
|
+
),
|
|
135
|
+
subscription: {
|
|
136
|
+
subscriptionId: input.order.subscription_id,
|
|
137
|
+
subscriptionCycleId: input.order.subscription_cycle_id,
|
|
138
|
+
subscriptionCycleStatus: input.subscriptionCycleStatus,
|
|
139
|
+
nextCycleAt: input.subscriptionNextCycleAt ?? null,
|
|
140
|
+
cyclePaidAt: input.subscriptionCyclePaidAt ?? null,
|
|
141
|
+
},
|
|
142
|
+
fulfillmentEligibility,
|
|
143
|
+
inventory,
|
|
144
|
+
fulfillment,
|
|
145
|
+
replacementChain: buildOmsReplacementChain({
|
|
146
|
+
currentParcel: (input.fulfillmentOrders ?? [])[0] ?? null,
|
|
147
|
+
supersededParcels: input.supersededFulfillmentOrders ?? [],
|
|
148
|
+
shipmentExternalRefs: input.shipmentExternalRefs ?? [],
|
|
149
|
+
}),
|
|
150
|
+
fulfillmentHealth,
|
|
151
|
+
fulfillmentDebug: buildOmsFulfillmentDebug({
|
|
152
|
+
projections: input.projections,
|
|
153
|
+
paymentStatus,
|
|
154
|
+
inventory,
|
|
155
|
+
fulfillment,
|
|
156
|
+
reservations: input.inventoryReservations ?? [],
|
|
157
|
+
communicationDeliveries: input.communicationDeliveries ?? [],
|
|
158
|
+
providerAttempts: input.providerAttempts ?? [],
|
|
159
|
+
providerDispatchRefs: input.providerDispatchRefs ?? [],
|
|
160
|
+
providerStatusEvidence: input.providerStatusEvidence ?? [],
|
|
161
|
+
inboundProviderEvents: input.inboundProviderEvents ?? [],
|
|
162
|
+
providerStockCurrent: input.providerStockCurrent ?? [],
|
|
163
|
+
}),
|
|
164
|
+
accounting,
|
|
165
|
+
actionEligibility: actionEligibility({
|
|
166
|
+
fulfillmentEligibility,
|
|
167
|
+
activeHoldCount,
|
|
168
|
+
fulfillmentStatus: fulfillment.status,
|
|
169
|
+
hasFulfillmentOrder: Boolean(fulfillment.fulfillmentOrderId),
|
|
170
|
+
hasShippingAddress: Boolean(input.order.shipping_address_id),
|
|
171
|
+
deliveryContact,
|
|
172
|
+
orderStatus: input.order.status,
|
|
173
|
+
orderMode: input.order.mode,
|
|
174
|
+
providerCancellationConfirmed: hasLatestProviderCancellation(
|
|
175
|
+
input.providerStatusEvidence ?? [],
|
|
176
|
+
fulfillment.fulfillmentOrderId,
|
|
177
|
+
),
|
|
178
|
+
flags: input.actionFlags,
|
|
179
|
+
}),
|
|
180
|
+
holds: input.holds.map((hold) => ({
|
|
181
|
+
id: hold.id,
|
|
182
|
+
orderId: hold.order_id,
|
|
183
|
+
status: hold.status,
|
|
184
|
+
reason: hold.reason,
|
|
185
|
+
note: hold.note,
|
|
186
|
+
createdAt: hold.created_at,
|
|
187
|
+
releasedAt: hold.released_at,
|
|
188
|
+
})),
|
|
189
|
+
operations: input.operations.map((operation) => ({
|
|
190
|
+
id: operation.id,
|
|
191
|
+
orderId: operation.order_id,
|
|
192
|
+
type: operation.operation_type,
|
|
193
|
+
holdId: operation.hold_id,
|
|
194
|
+
actorUserId: operation.actor_user_id,
|
|
195
|
+
occurredAt: operation.occurred_at,
|
|
196
|
+
payload: operation.payload,
|
|
197
|
+
})),
|
|
198
|
+
payment: {
|
|
199
|
+
intentId: input.paymentIntent?.id ?? null,
|
|
200
|
+
paymentId: input.paymentIntent?.payment_id ?? null,
|
|
201
|
+
status: paymentStatus,
|
|
202
|
+
activeAttemptId: input.paymentIntent?.active_attempt_id ?? null,
|
|
203
|
+
providerPaymentId: input.paymentIntent?.provider_payment_id ?? null,
|
|
204
|
+
updatedAt: input.paymentIntent?.updated_at ?? null,
|
|
205
|
+
},
|
|
206
|
+
paymentAttempts: input.paymentAttempts.map((attempt) => ({
|
|
207
|
+
id: attempt.id,
|
|
208
|
+
status: attempt.status,
|
|
209
|
+
provider: attempt.provider,
|
|
210
|
+
providerAttemptId: attempt.provider_attempt_id,
|
|
211
|
+
nextActionKind: attempt.next_action_kind,
|
|
212
|
+
updatedAt: attempt.updated_at,
|
|
213
|
+
})),
|
|
214
|
+
paymentTransitions: input.paymentTransitions.map((transition) => ({
|
|
215
|
+
id: transition.id,
|
|
216
|
+
transitionKind: transition.transition_kind,
|
|
217
|
+
fromStatus: transition.from_status,
|
|
218
|
+
toStatus: transition.to_status,
|
|
219
|
+
reason: transition.reason,
|
|
220
|
+
occurredAt: transition.occurred_at,
|
|
221
|
+
})),
|
|
222
|
+
communicationDeliveries: (input.communicationDeliveries ?? []).map(mapCommunicationDelivery),
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
return (input.projections?.parseDetail ?? (value => adminCommerceOrderDetailResponseSchema.parse(value)))({
|
|
226
|
+
contractVersion: COMMERCE_CONTRACT_VERSION,
|
|
227
|
+
order: detail,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function hasLatestProviderCancellation(
|
|
232
|
+
evidence: OmsProviderStatusEvidenceRow[],
|
|
233
|
+
fulfillmentOrderId: string | null,
|
|
234
|
+
): boolean {
|
|
235
|
+
if (!fulfillmentOrderId) return false;
|
|
236
|
+
const latest = evidence
|
|
237
|
+
.filter((row) => row.fulfillment_order_id === fulfillmentOrderId)
|
|
238
|
+
.sort((left, right) => evidenceTimestamp(right) - evidenceTimestamp(left))[0];
|
|
239
|
+
return latest?.provider_status?.trim().toUpperCase() === "CANCELLED";
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function evidenceTimestamp(row: OmsProviderStatusEvidenceRow): number {
|
|
243
|
+
const raw = row.occurred_at ?? row.created_at;
|
|
244
|
+
const parsed = raw ? Date.parse(raw) : Number.NaN;
|
|
245
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* The order's replacement chain, from rows the detail read already holds.
|
|
250
|
+
*
|
|
251
|
+
* ⛔ Attribution here is STRICT, unlike `rowsForParcel`: a tracking reference that names no
|
|
252
|
+
* parcel belongs to whichever parcel is asking, which is right for the current parcel and
|
|
253
|
+
* wrong here - it would print one legacy reference under every superseded parcel as if the
|
|
254
|
+
* carrier had issued it several times. A superseded parcel shows only references that name it.
|
|
255
|
+
*/
|
|
256
|
+
function buildOmsReplacementChain(input: {
|
|
257
|
+
currentParcel: OmsFulfillmentOrderRow | null;
|
|
258
|
+
supersededParcels: OmsFulfillmentOrderRow[];
|
|
259
|
+
shipmentExternalRefs: OmsShipmentExternalRefRow[];
|
|
260
|
+
}): OmsOrderDetail["replacementChain"] {
|
|
261
|
+
return {
|
|
262
|
+
sequenceNo: input.currentParcel ? parcelSequenceNo(input.currentParcel) : 0,
|
|
263
|
+
replacesFulfillmentOrderId: input.currentParcel?.replaces_fulfillment_order_id ?? null,
|
|
264
|
+
replacementReason: input.currentParcel?.replacement_reason ?? null,
|
|
265
|
+
supersededParcels: input.supersededParcels.map((parcel) => ({
|
|
266
|
+
fulfillmentOrderId: parcel.id,
|
|
267
|
+
sequenceNo: parcelSequenceNo(parcel),
|
|
268
|
+
status: parcel.status ?? null,
|
|
269
|
+
replacementReason: parcel.replacement_reason ?? null,
|
|
270
|
+
handedOverAt: parcel.handed_over_at ?? null,
|
|
271
|
+
deliveredAt: parcel.delivered_at ?? null,
|
|
272
|
+
trackingReferences: input.shipmentExternalRefs
|
|
273
|
+
.filter((ref) => ref.fulfillment_order_id === parcel.id && ref.active !== false && Boolean(ref.provider_tracking_id))
|
|
274
|
+
.map((ref) => ({
|
|
275
|
+
providerKind: ref.provider_kind ?? "unknown",
|
|
276
|
+
trackingNumber: ref.provider_tracking_id,
|
|
277
|
+
trackingUrl: ref.tracking_url ?? null,
|
|
278
|
+
carrierKind: ref.carrier_kind ?? ref.provider_kind ?? null,
|
|
279
|
+
service: ref.service ?? null,
|
|
280
|
+
updatedAt: ref.updated_at ?? ref.created_at ?? null,
|
|
281
|
+
})),
|
|
282
|
+
})),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function buildOmsFulfillmentHealth(input: {
|
|
287
|
+
orderId: string;
|
|
288
|
+
fulfillmentHealth?: OmsOrderDetail["fulfillmentHealth"];
|
|
289
|
+
}): OmsOrderDetail["fulfillmentHealth"] {
|
|
290
|
+
return input.fulfillmentHealth ?? {
|
|
291
|
+
healthStatus: "ok",
|
|
292
|
+
attentionReasons: [],
|
|
293
|
+
oldestAgeSeconds: null,
|
|
294
|
+
opaqueIds: {
|
|
295
|
+
orderId: input.orderId,
|
|
296
|
+
fulfillmentOrderId: null,
|
|
297
|
+
outboxEventId: null,
|
|
298
|
+
dispatchRefFulfillmentOrderId: null,
|
|
299
|
+
latestEvidenceFulfillmentOrderId: null,
|
|
300
|
+
},
|
|
301
|
+
};
|
|
302
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { OmsOrderDetail } from "../oms/omsContracts.js";
|
|
2
|
+
import type { OmsCommunicationDeliveryRow } from "./omsReadModelRows.js";
|
|
3
|
+
|
|
4
|
+
export function mapCommunicationDelivery(row: OmsCommunicationDeliveryRow): OmsOrderDetail["communicationDeliveries"][number] {
|
|
5
|
+
return {
|
|
6
|
+
id: row.id,
|
|
7
|
+
purpose: row.purpose,
|
|
8
|
+
templateSlug: row.template_slug,
|
|
9
|
+
triggerSource: row.trigger_source,
|
|
10
|
+
triggerEvent: row.trigger_event,
|
|
11
|
+
aggregateType: row.aggregate_type,
|
|
12
|
+
aggregateId: row.aggregate_id,
|
|
13
|
+
dedupeKey: row.dedupe_key,
|
|
14
|
+
status: row.status,
|
|
15
|
+
providerKind: row.provider_kind,
|
|
16
|
+
providerMessageId: row.provider_message_id,
|
|
17
|
+
scheduledDueAt: row.scheduled_due_at,
|
|
18
|
+
expectedSendAt: row.expected_send_at,
|
|
19
|
+
queuedAt: row.queued_at,
|
|
20
|
+
firstAttemptAt: row.first_attempt_at,
|
|
21
|
+
sentAt: row.sent_at,
|
|
22
|
+
deliveredAt: row.delivered_at,
|
|
23
|
+
terminalAt: row.terminal_at,
|
|
24
|
+
lastErrorCode: row.last_error_code,
|
|
25
|
+
outboxEventId: row.outbox_event_id,
|
|
26
|
+
platformJobRunId: row.platform_job_run_id,
|
|
27
|
+
emailSendId: row.email_send_id,
|
|
28
|
+
metadata: row.metadata ?? {},
|
|
29
|
+
createdAt: row.created_at,
|
|
30
|
+
updatedAt: row.updated_at,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import type { OmsActionAvailabilityFlags,OmsOrderIdentity } from "../contracts/omsTypes.js";
|
|
2
|
+
import type {
|
|
3
|
+
OmsAccountingStatus,
|
|
4
|
+
OmsInventoryStatus,
|
|
5
|
+
OmsOrderDetail,
|
|
6
|
+
OmsOrderPaymentStatus,
|
|
7
|
+
} from "../oms/omsContracts.js";
|
|
8
|
+
import { canCancelFulfillment } from "./fulfillmentCancellationEligibility.js";
|
|
9
|
+
import { resolveOmsOperationalState } from "./omsOperationalLadder.js";
|
|
10
|
+
import type { OmsPaymentMethodSummary } from "./omsPaymentMethodSummary.js";
|
|
11
|
+
import { pricingSummaryForOrder } from "./omsReadModelPricing.js";
|
|
12
|
+
import type {
|
|
13
|
+
OmsAddressRow,
|
|
14
|
+
OmsCustomerRow,
|
|
15
|
+
OmsInventoryReservationRow,
|
|
16
|
+
OmsOrderItemRow,
|
|
17
|
+
OmsOrderRow,
|
|
18
|
+
OmsPaymentIntentRow,
|
|
19
|
+
} from "./omsReadModelRows.js";
|
|
20
|
+
import type { CanonicalOrderMoney } from "../orderMoney.js";
|
|
21
|
+
import { mapOmsPaymentStatus } from "../fulfillmentEligibility.js";
|
|
22
|
+
export type { OmsActionAvailabilityFlags,OmsOrderIdentity } from "../contracts/omsTypes.js";
|
|
23
|
+
export { buildOmsDeliveryContactProjection,deliveryContactAddress } from "./omsReadModelRowCore.js";
|
|
24
|
+
// Who the row is about. One pair rather than two loose fields, so the row core
|
|
25
|
+
// forwards it untouched and neither builder can supply half of it.
|
|
26
|
+
|
|
27
|
+
export function findCustomer(order: OmsOrderRow, customers: OmsCustomerRow[]): OmsOrderDetail["customer"] {
|
|
28
|
+
return mapCustomer(customers.find((customer) => customer.id === order.client_id) ?? null);
|
|
29
|
+
}
|
|
30
|
+
export function mapCustomer(row: OmsCustomerRow | null): OmsOrderDetail["customer"] {
|
|
31
|
+
if (!row) return null;
|
|
32
|
+
return {
|
|
33
|
+
id: row.id,
|
|
34
|
+
email: row.email,
|
|
35
|
+
firstName: row.first_name,
|
|
36
|
+
lastName: row.last_name,
|
|
37
|
+
phone: row.phone,
|
|
38
|
+
lifecycleStage: row.lifecycle_stage,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function mapAddress(row: OmsAddressRow | null): OmsOrderDetail["shippingAddress"] {
|
|
42
|
+
if (!row) return null;
|
|
43
|
+
return {
|
|
44
|
+
id: row.id,
|
|
45
|
+
label: row.label ?? null,
|
|
46
|
+
line1: row.line1 ?? null,
|
|
47
|
+
line2: row.line2 ?? null,
|
|
48
|
+
city: row.city ?? null,
|
|
49
|
+
postalCode: row.postal_code ?? null,
|
|
50
|
+
country: row.country ?? null,
|
|
51
|
+
recipientName: row.recipient_name ?? null,
|
|
52
|
+
contactPhone: row.contact_phone ?? null,
|
|
53
|
+
companyName: row.company_name ?? null,
|
|
54
|
+
taxId: row.tax_id ?? null,
|
|
55
|
+
deliveryNotes: row.delivery_notes ?? null,
|
|
56
|
+
courierInstructions: row.courier_instructions ?? null,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function evaluateOperationalState(input: {
|
|
60
|
+
order: OmsOrderRow;
|
|
61
|
+
paymentStatus: OmsOrderPaymentStatus;
|
|
62
|
+
activeHoldCount: number;
|
|
63
|
+
inventoryStatus: OmsInventoryStatus;
|
|
64
|
+
fulfillmentStatus: OmsOrderDetail["fulfillmentStatus"];
|
|
65
|
+
fulfillmentEligibility?: { allowed: boolean; reason: string | null };
|
|
66
|
+
accountingStatus: OmsAccountingStatus;
|
|
67
|
+
}): Pick<OmsOrderDetail, "attentionReason" | "nextAction"> {
|
|
68
|
+
// The rungs themselves live in omsOperationalLadder.ts, next to the live SQL
|
|
69
|
+
// arms they mirror, so the parity test can compare the two ladders directly.
|
|
70
|
+
// This function only adapts the row shapes onto the ladder's flat input.
|
|
71
|
+
return resolveOmsOperationalState({
|
|
72
|
+
orderStatus: input.order.status,
|
|
73
|
+
activeHoldCount: input.activeHoldCount,
|
|
74
|
+
paymentStatus: input.paymentStatus,
|
|
75
|
+
hasShippingAddress: Boolean(input.order.shipping_address_id),
|
|
76
|
+
inventoryStatus: input.inventoryStatus,
|
|
77
|
+
fulfillmentStatus: input.fulfillmentStatus,
|
|
78
|
+
// An absent eligibility evaluation never blocked: the old cascade consulted
|
|
79
|
+
// it only when it was supplied. `true` reproduces that exactly.
|
|
80
|
+
fulfillmentAllowed: input.fulfillmentEligibility ? input.fulfillmentEligibility.allowed : true,
|
|
81
|
+
accountingStatus: input.accountingStatus,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function actionEligibility(input: {
|
|
85
|
+
fulfillmentEligibility: { allowed: boolean; reason: string | null };
|
|
86
|
+
activeHoldCount: number;
|
|
87
|
+
fulfillmentStatus: OmsOrderDetail["fulfillmentStatus"];
|
|
88
|
+
hasFulfillmentOrder: boolean;
|
|
89
|
+
hasShippingAddress: boolean;
|
|
90
|
+
deliveryContact?: NonNullable<OmsOrderDetail["deliveryContact"]>;
|
|
91
|
+
orderStatus: OmsOrderDetail["status"];
|
|
92
|
+
orderMode: "one_time" | "subscription_cycle";
|
|
93
|
+
providerCancellationConfirmed?: boolean;
|
|
94
|
+
flags?: OmsActionAvailabilityFlags;
|
|
95
|
+
}): OmsOrderDetail["actionEligibility"] {
|
|
96
|
+
const flags = {
|
|
97
|
+
holdMutationsEnabled: true,
|
|
98
|
+
supportMutationsEnabled: true,
|
|
99
|
+
fulfillmentMutationsEnabled: true,
|
|
100
|
+
refundMutationsEnabled: true,
|
|
101
|
+
orderCancellationEnabled: true,
|
|
102
|
+
...input.flags,
|
|
103
|
+
};
|
|
104
|
+
const canCreateFulfillment = input.fulfillmentEligibility.allowed && !input.hasFulfillmentOrder;
|
|
105
|
+
const canRecordLabel = input.fulfillmentStatus === "created" || input.fulfillmentStatus === "packed" || input.fulfillmentStatus === "label_pending";
|
|
106
|
+
const base: OmsOrderDetail["actionEligibility"] = {
|
|
107
|
+
addNote: { allowed: true, reason: null },
|
|
108
|
+
createHold: input.activeHoldCount > 0 ? { allowed: false, reason: "order_already_on_hold" } : { allowed: true, reason: null },
|
|
109
|
+
releaseHold: input.activeHoldCount > 0 ? { allowed: true, reason: null } : { allowed: false, reason: "no_active_hold" },
|
|
110
|
+
createFulfillment: canCreateFulfillment ? { allowed: true, reason: null } : { allowed: false, reason: input.fulfillmentEligibility.reason ?? "fulfillment_order_exists" },
|
|
111
|
+
updateShippingAddress: input.deliveryContact
|
|
112
|
+
? !input.deliveryContact.effective
|
|
113
|
+
? { allowed: false, reason: "missing_shipping_address" }
|
|
114
|
+
: input.deliveryContact.correctionAllowed
|
|
115
|
+
? { allowed: true, reason: null }
|
|
116
|
+
: { allowed: false, reason: deliveryContactRefusalReason(input.deliveryContact) }
|
|
117
|
+
: !input.hasShippingAddress
|
|
118
|
+
? { allowed: false, reason: "missing_shipping_address" }
|
|
119
|
+
: canUpdateShippingAddress(input.fulfillmentStatus)
|
|
120
|
+
? { allowed: true, reason: null }
|
|
121
|
+
: { allowed: false, reason: "address_locked_after_label" },
|
|
122
|
+
recordLabel: canRecordLabel ? { allowed: true, reason: null } : { allowed: false, reason: "fulfillment_not_ready_for_label" },
|
|
123
|
+
handOff: input.fulfillmentStatus === "label_created" ? { allowed: true, reason: null } : { allowed: false, reason: "label_required_before_handoff" },
|
|
124
|
+
recordTrackingEvent: canRecordTrackingEvent(input.fulfillmentStatus) ? { allowed: true, reason: null } : { allowed: false, reason: "tracking_not_ready" },
|
|
125
|
+
cancelFulfillment: input.fulfillmentStatus
|
|
126
|
+
? canCancelFulfillment(input.fulfillmentStatus, {
|
|
127
|
+
activeHoldCount: input.activeHoldCount,
|
|
128
|
+
orderMode: input.orderMode,
|
|
129
|
+
orderStatus: input.orderStatus,
|
|
130
|
+
providerCancellationConfirmed: input.providerCancellationConfirmed ?? false,
|
|
131
|
+
})
|
|
132
|
+
? { allowed: true, reason: null }
|
|
133
|
+
: { allowed: false, reason: "fulfillment_not_cancellable" }
|
|
134
|
+
: { allowed: false, reason: "no_fulfillment_order" },
|
|
135
|
+
cancelOrder: input.orderStatus === "pending_payment"
|
|
136
|
+
? { allowed: true, reason: null }
|
|
137
|
+
: { allowed: false, reason: "order_not_pending_payment" },
|
|
138
|
+
markRefunded: input.orderStatus === "paid"
|
|
139
|
+
? { allowed: true, reason: null }
|
|
140
|
+
: input.orderStatus === "refunded"
|
|
141
|
+
? { allowed: false, reason: "already_refunded" }
|
|
142
|
+
: { allowed: false, reason: "order_not_paid" },
|
|
143
|
+
};
|
|
144
|
+
return {
|
|
145
|
+
addNote: flagGate(base.addNote, flags.supportMutationsEnabled, "oms_support_mutations_disabled"),
|
|
146
|
+
createHold: flagGate(base.createHold, flags.holdMutationsEnabled, "oms_hold_mutations_disabled"),
|
|
147
|
+
releaseHold: flagGate(base.releaseHold, flags.holdMutationsEnabled, "oms_hold_mutations_disabled"),
|
|
148
|
+
createFulfillment: flagGate(base.createFulfillment, flags.fulfillmentMutationsEnabled, "commerce_fulfillment_mutations_disabled"),
|
|
149
|
+
updateShippingAddress: flagGate(base.updateShippingAddress, flags.supportMutationsEnabled, "oms_support_mutations_disabled"),
|
|
150
|
+
recordLabel: flagGate(base.recordLabel, flags.fulfillmentMutationsEnabled, "commerce_fulfillment_mutations_disabled"),
|
|
151
|
+
handOff: flagGate(base.handOff, flags.fulfillmentMutationsEnabled, "commerce_fulfillment_mutations_disabled"),
|
|
152
|
+
recordTrackingEvent: flagGate(base.recordTrackingEvent, flags.fulfillmentMutationsEnabled, "commerce_fulfillment_mutations_disabled"),
|
|
153
|
+
cancelFulfillment: flagGate(base.cancelFulfillment, flags.fulfillmentMutationsEnabled, "commerce_fulfillment_mutations_disabled"),
|
|
154
|
+
cancelOrder: flagGate(base.cancelOrder, flags.orderCancellationEnabled, "oms_order_cancellation_disabled"),
|
|
155
|
+
markRefunded: flagGate(base.markRefunded, flags.refundMutationsEnabled, "oms_refund_mutations_disabled"),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function deliveryContactRefusalReason(
|
|
159
|
+
projection: NonNullable<OmsOrderDetail["deliveryContact"]>,
|
|
160
|
+
): string {
|
|
161
|
+
return ["submitting", "created", "uncertain", "failed", "cancel_requested", "cancelled", "unknown"]
|
|
162
|
+
.includes(projection.providerSubmissionState)
|
|
163
|
+
? "delivery_contact_submission_started"
|
|
164
|
+
: "address_locked_after_label";
|
|
165
|
+
}
|
|
166
|
+
export function inventorySummary(
|
|
167
|
+
reservations: OmsInventoryReservationRow[],
|
|
168
|
+
orderItems: OmsOrderItemRow[],
|
|
169
|
+
): OmsOrderDetail["inventory"] {
|
|
170
|
+
const reservation = reservations[0] ?? null;
|
|
171
|
+
if (!reservation) return emptyInventory();
|
|
172
|
+
const base = {
|
|
173
|
+
reservationId: reservation.id,
|
|
174
|
+
reservationStatus: reservation.status,
|
|
175
|
+
expiresAt: reservation.expires_at,
|
|
176
|
+
locationId: reservation.location_id,
|
|
177
|
+
locationCode: reservation.inventory_locations?.code ?? null,
|
|
178
|
+
};
|
|
179
|
+
if (orderItems.length > 0 && !hasCoverageReservation(reservations) && reservation.status !== "consumed") {
|
|
180
|
+
return { status: reservation.status === "reserved" ? "reserved" : reservation.status, ...base };
|
|
181
|
+
}
|
|
182
|
+
if (orderItems.length > 0 && !allOrderItemsCovered(orderItems, reservations)) return { status: "missing", ...base };
|
|
183
|
+
return { status: reservation.status === "reserved" ? "reserved" : reservation.status, ...base };
|
|
184
|
+
}
|
|
185
|
+
export function baseOrder(input: {
|
|
186
|
+
order: OmsOrderRow;
|
|
187
|
+
paymentStatus: OmsOrderPaymentStatus;
|
|
188
|
+
paymentMethod: OmsPaymentMethodSummary;
|
|
189
|
+
activeHoldCount: number;
|
|
190
|
+
identity: OmsOrderIdentity;
|
|
191
|
+
inventoryStatus: OmsInventoryStatus;
|
|
192
|
+
fulfillmentStatus: OmsOrderDetail["fulfillmentStatus"];
|
|
193
|
+
customerFulfillmentStep: OmsOrderDetail["customerFulfillmentStep"];
|
|
194
|
+
accountingStatus: OmsAccountingStatus;
|
|
195
|
+
providerOpsStatus: OmsOrderDetail["providerOpsStatus"];
|
|
196
|
+
providerOpsSla: OmsOrderDetail["providerOpsSla"];
|
|
197
|
+
providerOrderId: OmsOrderDetail["providerOrderId"];
|
|
198
|
+
attentionReason: OmsOrderDetail["attentionReason"];
|
|
199
|
+
nextAction: OmsOrderDetail["nextAction"];
|
|
200
|
+
orderItems?: OmsOrderItemRow[];
|
|
201
|
+
orderMoney?: CanonicalOrderMoney;
|
|
202
|
+
}) {
|
|
203
|
+
const pricingSummary = pricingSummaryForOrder(
|
|
204
|
+
input.order,
|
|
205
|
+
input.orderItems,
|
|
206
|
+
input.orderMoney,
|
|
207
|
+
);
|
|
208
|
+
return {
|
|
209
|
+
orderId: input.order.id,
|
|
210
|
+
orderNumber: input.order.order_number,
|
|
211
|
+
clientId: input.order.client_id,
|
|
212
|
+
...input.identity,
|
|
213
|
+
status: input.order.status,
|
|
214
|
+
mode: input.order.mode,
|
|
215
|
+
// undefined, not null: "no source axis read" is not "storefront order".
|
|
216
|
+
sourceKind: input.order.source_kind ?? undefined,
|
|
217
|
+
sourceChannelSlug: input.order.sales_channels?.slug ?? undefined,
|
|
218
|
+
sourceOrderRef: input.order.source_order_ref ?? undefined,
|
|
219
|
+
paymentMethodLabel: input.paymentMethod.label,
|
|
220
|
+
paymentProvider: input.paymentMethod.provider,
|
|
221
|
+
paymentStatus: input.paymentStatus,
|
|
222
|
+
fulfillmentStatus: input.fulfillmentStatus,
|
|
223
|
+
customerFulfillmentStep: input.customerFulfillmentStep,
|
|
224
|
+
inventoryStatus: input.inventoryStatus,
|
|
225
|
+
accountingStatus: input.accountingStatus,
|
|
226
|
+
providerOpsStatus: input.providerOpsStatus,
|
|
227
|
+
providerOpsSla: input.providerOpsSla,
|
|
228
|
+
providerOrderId: input.providerOrderId,
|
|
229
|
+
attentionReason: input.attentionReason,
|
|
230
|
+
nextAction: input.nextAction,
|
|
231
|
+
activeHoldCount: input.activeHoldCount,
|
|
232
|
+
total: pricingSummary.finalTotal,
|
|
233
|
+
pricingSummary,
|
|
234
|
+
createdAt: input.order.created_at,
|
|
235
|
+
updatedAt: input.order.updated_at,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
export function paymentStatusForOrder(orderId: string, paymentIntents: OmsPaymentIntentRow[]) {
|
|
239
|
+
const intent = paymentIntents.find((candidate) => candidate.id && candidate.order_id === orderId);
|
|
240
|
+
return mapOmsPaymentStatus(intent?.status ?? null) as OmsOrderPaymentStatus;
|
|
241
|
+
}
|
|
242
|
+
function canUpdateShippingAddress(status: OmsOrderDetail["fulfillmentStatus"]): boolean {
|
|
243
|
+
return !status || status === "created" || status === "packed" || status === "label_pending";
|
|
244
|
+
}
|
|
245
|
+
function canRecordTrackingEvent(status: OmsOrderDetail["fulfillmentStatus"]): boolean {
|
|
246
|
+
return status === "handed_over" || status === "in_transit";
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function flagGate(
|
|
250
|
+
eligibility: OmsOrderDetail["actionEligibility"]["addNote"],
|
|
251
|
+
enabled: boolean | undefined,
|
|
252
|
+
reason: string,
|
|
253
|
+
): OmsOrderDetail["actionEligibility"]["addNote"] {
|
|
254
|
+
return enabled ? eligibility : { allowed: false, reason };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function allOrderItemsCovered(orderItems: OmsOrderItemRow[], reservations: OmsInventoryReservationRow[]): boolean {
|
|
258
|
+
const reservedQtyByItem = new Map<string, number>();
|
|
259
|
+
for (const reservation of reservations) {
|
|
260
|
+
if ((reservation.status !== "reserved" && reservation.status !== "consumed") || !reservation.order_item_id) continue;
|
|
261
|
+
reservedQtyByItem.set(reservation.order_item_id, (reservedQtyByItem.get(reservation.order_item_id) ?? 0) + reservation.quantity);
|
|
262
|
+
}
|
|
263
|
+
return orderItems.every((item) => (reservedQtyByItem.get(item.id) ?? 0) >= item.quantity);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function hasCoverageReservation(reservations: OmsInventoryReservationRow[]): boolean {
|
|
267
|
+
return reservations.some((reservation) => reservation.status === "reserved" || reservation.status === "consumed");
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function emptyInventory(): OmsOrderDetail["inventory"] {
|
|
271
|
+
return {
|
|
272
|
+
status: "missing",
|
|
273
|
+
reservationId: null,
|
|
274
|
+
reservationStatus: null,
|
|
275
|
+
expiresAt: null,
|
|
276
|
+
locationId: null,
|
|
277
|
+
locationCode: null,
|
|
278
|
+
};
|
|
279
|
+
}
|