@openlup/platform 0.16.0 → 0.18.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 +180 -0
- package/README.md +564 -6
- package/dist/catalog/activeSkuSelection.d.ts +2 -0
- package/dist/catalog/activeSkuSelection.js +20 -0
- package/dist/catalog/adminBindings.d.ts +72 -0
- package/dist/catalog/adminBindings.js +1 -0
- package/dist/catalog/adminBundleHandler.d.ts +26 -0
- package/dist/catalog/adminBundleHandler.js +111 -0
- package/dist/catalog/adminBundleReadHandler.d.ts +20 -0
- package/dist/catalog/adminBundleReadHandler.js +185 -0
- package/dist/catalog/adminBundleWritePort.d.ts +85 -0
- package/dist/catalog/adminBundleWritePort.js +1 -0
- package/dist/catalog/bundleAvailability.d.ts +63 -0
- package/dist/catalog/bundleAvailability.js +78 -0
- package/dist/catalog/bundleAvailabilityService.d.ts +65 -0
- package/dist/catalog/bundleAvailabilityService.js +89 -0
- package/dist/catalog/bundleBindings.d.ts +33 -0
- package/dist/catalog/bundleBindings.js +1 -0
- package/dist/catalog/bundleCatalogQueries.d.ts +28 -0
- package/dist/catalog/bundleCatalogQueries.js +84 -0
- package/dist/catalog/bundleCatalogReadPort.d.ts +166 -0
- package/dist/catalog/bundleCatalogReadPort.js +36 -0
- package/dist/catalog/bundleCatalogStore.d.ts +3 -0
- package/dist/catalog/bundleCatalogStore.js +152 -0
- package/dist/catalog/bundleRuleCodes.d.ts +41 -0
- package/dist/catalog/bundleRuleCodes.js +110 -0
- package/dist/catalog/bundleRules.d.ts +69 -0
- package/dist/catalog/bundleRules.js +102 -0
- package/dist/catalog/catalogDraftStore.d.ts +4 -0
- package/dist/catalog/catalogDraftStore.js +63 -0
- package/dist/catalog/catalogSkuEnvelope.d.ts +7 -0
- package/dist/catalog/catalogSkuEnvelope.js +142 -0
- package/dist/catalog/catalogSkuEnvelopeMapper.d.ts +38 -0
- package/dist/catalog/catalogSkuEnvelopeMapper.js +88 -0
- package/dist/catalog/contracts/bundleAdmin.d.ts +143 -0
- package/dist/catalog/contracts/bundleAdmin.js +1 -0
- package/dist/catalog/contracts/bundleAvailability.d.ts +61 -0
- package/dist/catalog/contracts/bundleAvailability.js +1 -0
- package/dist/catalog/contracts/bundleRead.d.ts +223 -0
- package/dist/catalog/contracts/bundleRead.js +1 -0
- package/dist/catalog/contracts/draft.d.ts +79 -0
- package/dist/catalog/contracts/draft.js +47 -0
- package/dist/catalog/contracts/foundation.d.ts +78 -0
- package/dist/catalog/contracts/foundation.js +53 -0
- package/dist/catalog/contracts/index.d.ts +14 -0
- package/dist/catalog/contracts/index.js +6 -0
- package/dist/catalog/contracts/lifecycle.d.ts +77 -0
- package/dist/catalog/contracts/lifecycle.js +1 -0
- package/dist/catalog/contracts/productMediaContracts.d.ts +77 -0
- package/dist/catalog/contracts/productMediaContracts.js +149 -0
- package/dist/catalog/contracts/productTypes.d.ts +54 -0
- package/dist/catalog/contracts/productTypes.js +16 -0
- package/dist/catalog/contracts/resolveProductMedia.d.ts +3 -0
- package/dist/catalog/contracts/resolveProductMedia.js +78 -0
- package/dist/catalog/contracts/sellable.d.ts +23 -0
- package/dist/catalog/contracts/sellable.js +1 -0
- package/dist/catalog/draftHandler.d.ts +25 -0
- package/dist/catalog/draftHandler.js +118 -0
- package/dist/catalog/draftPorts.d.ts +18 -0
- package/dist/catalog/draftPorts.js +8 -0
- package/dist/catalog/draftSchemas.d.ts +423 -0
- package/dist/catalog/draftSchemas.js +89 -0
- package/dist/catalog/draftValidation.d.ts +21 -0
- package/dist/catalog/draftValidation.js +125 -0
- package/dist/catalog/foundationSchemas.d.ts +98 -0
- package/dist/catalog/foundationSchemas.js +110 -0
- package/dist/catalog/index.d.ts +43 -0
- package/dist/catalog/index.js +25 -0
- package/dist/catalog/mediaSourcePack.d.ts +51 -0
- package/dist/catalog/mediaSourcePack.js +247 -0
- package/dist/catalog/productTypeSchemas.d.ts +46 -0
- package/dist/catalog/productTypeSchemas.js +72 -0
- package/dist/catalog/publicationPorts.d.ts +42 -0
- package/dist/catalog/publicationPorts.js +1 -0
- package/dist/catalog/readPorts.d.ts +51 -0
- package/dist/catalog/readPorts.js +1 -0
- package/dist/catalog/referenceCatalogHandler.d.ts +7 -0
- package/dist/catalog/referenceCatalogHandler.js +27 -0
- package/dist/catalog/resolvedSkuProjection.d.ts +88 -0
- package/dist/catalog/resolvedSkuProjection.js +60 -0
- package/dist/catalog/sellableBundleHandler.d.ts +46 -0
- package/dist/catalog/sellableBundleHandler.js +84 -0
- package/dist/catalog/sellableSchemas.d.ts +46 -0
- package/dist/catalog/sellableSchemas.js +27 -0
- package/dist/catalog/sql.d.ts +46 -0
- package/dist/catalog/sql.js +13 -0
- package/dist/catalog/validation.d.ts +2 -0
- package/dist/catalog/validation.js +3 -0
- package/dist/communications/accountingDocumentDelivery.d.ts +35 -0
- package/dist/communications/accountingDocumentDelivery.js +33 -0
- package/dist/communications/authEmailError.d.ts +5 -0
- package/dist/communications/authEmailError.js +8 -0
- package/dist/communications/authEmailPorts.d.ts +2 -0
- package/dist/communications/authEmailPorts.js +1 -0
- package/dist/communications/authSendEmailHook.d.ts +35 -0
- package/dist/communications/authSendEmailHook.js +250 -0
- package/dist/communications/capturedTransactionalDelivery.d.ts +13 -0
- package/dist/communications/capturedTransactionalDelivery.js +14 -0
- package/dist/communications/communicationSync.d.ts +11 -0
- package/dist/communications/communicationSync.js +79 -0
- package/dist/communications/communicationSyncWorker.d.ts +68 -0
- package/dist/communications/communicationSyncWorker.js +218 -0
- package/dist/communications/consentPolicy.d.ts +19 -0
- package/dist/communications/consentPolicy.js +43 -0
- package/dist/communications/consentPurposeRegistry.d.ts +4 -0
- package/dist/communications/consentPurposeRegistry.js +24 -0
- package/dist/communications/contracts/abandonedCart.d.ts +27 -0
- package/dist/communications/contracts/abandonedCart.js +25 -0
- package/dist/communications/contracts/authEmail.d.ts +62 -0
- package/dist/communications/contracts/authEmail.js +1 -0
- package/dist/communications/contracts/backInStock.d.ts +28 -0
- package/dist/communications/contracts/backInStock.js +28 -0
- package/dist/communications/contracts/blocks.d.ts +24 -0
- package/dist/communications/contracts/blocks.js +23 -0
- package/dist/communications/contracts/checkoutExpired.d.ts +22 -0
- package/dist/communications/contracts/checkoutExpired.js +25 -0
- package/dist/communications/contracts/checkoutRecovery.d.ts +26 -0
- package/dist/communications/contracts/checkoutRecovery.js +37 -0
- package/dist/communications/contracts/commerceEmailContent.d.ts +176 -0
- package/dist/communications/contracts/commerceEmailContent.js +1 -0
- package/dist/communications/contracts/commerceEngagementEmailContent.d.ts +95 -0
- package/dist/communications/contracts/commerceEngagementEmailContent.js +1 -0
- package/dist/communications/contracts/consent.d.ts +12 -0
- package/dist/communications/contracts/consent.js +1 -0
- package/dist/communications/contracts/email.d.ts +182 -0
- package/dist/communications/contracts/email.js +1 -0
- package/dist/communications/contracts/guideCard.d.ts +3 -0
- package/dist/communications/contracts/guideCard.js +26 -0
- package/dist/communications/contracts/index.d.ts +52 -0
- package/dist/communications/contracts/index.js +42 -0
- package/dist/communications/contracts/inquiryContent.d.ts +32 -0
- package/dist/communications/contracts/inquiryContent.js +33 -0
- package/dist/communications/contracts/invoiceDocumentContent.d.ts +26 -0
- package/dist/communications/contracts/invoiceDocumentContent.js +36 -0
- package/dist/communications/contracts/marketingAutomation.d.ts +52 -0
- package/dist/communications/contracts/marketingAutomation.js +1 -0
- package/dist/communications/contracts/marketingSync.d.ts +194 -0
- package/dist/communications/contracts/marketingSync.js +1 -0
- package/dist/communications/contracts/newsletter.d.ts +63 -0
- package/dist/communications/contracts/newsletter.js +1 -0
- package/dist/communications/contracts/newsletterWebhook.d.ts +26 -0
- package/dist/communications/contracts/newsletterWebhook.js +1 -0
- package/dist/communications/contracts/optOutContent.d.ts +11 -0
- package/dist/communications/contracts/optOutContent.js +17 -0
- package/dist/communications/contracts/orderCanceled.d.ts +25 -0
- package/dist/communications/contracts/orderCanceled.js +27 -0
- package/dist/communications/contracts/orderDraft.d.ts +46 -0
- package/dist/communications/contracts/orderDraft.js +46 -0
- package/dist/communications/contracts/orderPaid.d.ts +53 -0
- package/dist/communications/contracts/orderPaid.js +71 -0
- package/dist/communications/contracts/orderRefunded.d.ts +24 -0
- package/dist/communications/contracts/orderRefunded.js +27 -0
- package/dist/communications/contracts/paymentFailed.d.ts +24 -0
- package/dist/communications/contracts/paymentFailed.js +24 -0
- package/dist/communications/contracts/publicIntake.d.ts +49 -0
- package/dist/communications/contracts/publicIntake.js +1 -0
- package/dist/communications/contracts/render.d.ts +2 -0
- package/dist/communications/contracts/render.js +229 -0
- package/dist/communications/contracts/reorderReminder.d.ts +24 -0
- package/dist/communications/contracts/reorderReminder.js +24 -0
- package/dist/communications/contracts/returnEmails.d.ts +25 -0
- package/dist/communications/contracts/returnEmails.js +62 -0
- package/dist/communications/contracts/reviewEffects.d.ts +26 -0
- package/dist/communications/contracts/reviewEffects.js +25 -0
- package/dist/communications/contracts/reviewRequest.d.ts +26 -0
- package/dist/communications/contracts/reviewRequest.js +24 -0
- package/dist/communications/contracts/roleNotificationContent.d.ts +25 -0
- package/dist/communications/contracts/roleNotificationContent.js +46 -0
- package/dist/communications/contracts/shipmentDelivered.d.ts +23 -0
- package/dist/communications/contracts/shipmentDelivered.js +24 -0
- package/dist/communications/contracts/shipmentDispatched.d.ts +27 -0
- package/dist/communications/contracts/shipmentDispatched.js +35 -0
- package/dist/communications/contracts/shipmentException.d.ts +21 -0
- package/dist/communications/contracts/shipmentException.js +26 -0
- package/dist/communications/contracts/subscriptionActivationActionRequired.d.ts +17 -0
- package/dist/communications/contracts/subscriptionActivationActionRequired.js +22 -0
- package/dist/communications/contracts/subscriptionAddressChanged.d.ts +19 -0
- package/dist/communications/contracts/subscriptionAddressChanged.js +25 -0
- package/dist/communications/contracts/subscriptionCancelled.d.ts +19 -0
- package/dist/communications/contracts/subscriptionCancelled.js +25 -0
- package/dist/communications/contracts/subscriptionCycleSkipped.d.ts +25 -0
- package/dist/communications/contracts/subscriptionCycleSkipped.js +40 -0
- package/dist/communications/contracts/subscriptionDeliveryRescheduled.d.ts +25 -0
- package/dist/communications/contracts/subscriptionDeliveryRescheduled.js +39 -0
- package/dist/communications/contracts/subscriptionEmailContent.d.ts +145 -0
- package/dist/communications/contracts/subscriptionEmailContent.js +1 -0
- package/dist/communications/contracts/subscriptionPackageChanged.d.ts +20 -0
- package/dist/communications/contracts/subscriptionPackageChanged.js +26 -0
- package/dist/communications/contracts/subscriptionPauseReminder.d.ts +23 -0
- package/dist/communications/contracts/subscriptionPauseReminder.js +29 -0
- package/dist/communications/contracts/subscriptionPaused.d.ts +21 -0
- package/dist/communications/contracts/subscriptionPaused.js +25 -0
- package/dist/communications/contracts/subscriptionPaymentExpired.d.ts +34 -0
- package/dist/communications/contracts/subscriptionPaymentExpired.js +37 -0
- package/dist/communications/contracts/subscriptionPaymentFailed.d.ts +49 -0
- package/dist/communications/contracts/subscriptionPaymentFailed.js +56 -0
- package/dist/communications/contracts/subscriptionPaymentRecovered.d.ts +19 -0
- package/dist/communications/contracts/subscriptionPaymentRecovered.js +22 -0
- package/dist/communications/contracts/subscriptionRenewalAtRisk.d.ts +36 -0
- package/dist/communications/contracts/subscriptionRenewalAtRisk.js +36 -0
- package/dist/communications/contracts/subscriptionRenewalUpcoming.d.ts +49 -0
- package/dist/communications/contracts/subscriptionRenewalUpcoming.js +43 -0
- package/dist/communications/contracts/subscriptionResumed.d.ts +23 -0
- package/dist/communications/contracts/subscriptionResumed.js +25 -0
- package/dist/communications/contracts/subscriptionWelcome.d.ts +44 -0
- package/dist/communications/contracts/subscriptionWelcome.js +45 -0
- package/dist/communications/contracts/subscriptionWinback.d.ts +21 -0
- package/dist/communications/contracts/subscriptionWinback.js +28 -0
- package/dist/communications/contracts/transactionalDelivery.d.ts +42 -0
- package/dist/communications/contracts/transactionalDelivery.js +1 -0
- package/dist/communications/contracts/types.d.ts +46 -0
- package/dist/communications/contracts/types.js +1 -0
- package/dist/communications/contribution.d.ts +10 -0
- package/dist/communications/contribution.js +24 -0
- package/dist/communications/deliveryReconciliation.d.ts +64 -0
- package/dist/communications/deliveryReconciliation.js +60 -0
- package/dist/communications/emailEgress.d.ts +38 -0
- package/dist/communications/emailEgress.js +100 -0
- package/dist/communications/emailHealthAssessment.d.ts +39 -0
- package/dist/communications/emailHealthAssessment.js +59 -0
- package/dist/communications/emailHealthMetricsPort.d.ts +17 -0
- package/dist/communications/emailHealthMetricsPort.js +1 -0
- package/dist/communications/emailNotificationControl.d.ts +27 -0
- package/dist/communications/emailNotificationControl.js +10 -0
- package/dist/communications/emailObservation.d.ts +28 -0
- package/dist/communications/emailObservation.js +23 -0
- package/dist/communications/emailTransport.d.ts +82 -0
- package/dist/communications/emailTransport.js +95 -0
- package/dist/communications/errors.d.ts +15 -0
- package/dist/communications/errors.js +30 -0
- package/dist/communications/index.d.ts +47 -0
- package/dist/communications/index.js +38 -0
- package/dist/communications/integrationEventSignature.d.ts +15 -0
- package/dist/communications/integrationEventSignature.js +37 -0
- package/dist/communications/klaviyo/consentPush.d.ts +51 -0
- package/dist/communications/klaviyo/consentPush.js +19 -0
- package/dist/communications/klaviyo/index.d.ts +110 -0
- package/dist/communications/klaviyo/index.js +860 -0
- package/dist/communications/managedTransactionalDeliveryStore.d.ts +12 -0
- package/dist/communications/managedTransactionalDeliveryStore.js +49 -0
- package/dist/communications/nativeOperations.d.ts +79 -0
- package/dist/communications/nativeOperations.js +3 -0
- package/dist/communications/newsletterIntegrationContracts.d.ts +130 -0
- package/dist/communications/newsletterIntegrationContracts.js +128 -0
- package/dist/communications/newsletterWebhookPort.d.ts +11 -0
- package/dist/communications/newsletterWebhookPort.js +84 -0
- package/dist/communications/newsletterWebhookProcessing.d.ts +17 -0
- package/dist/communications/newsletterWebhookProcessing.js +71 -0
- package/dist/communications/originPolicy.d.ts +40 -0
- package/dist/communications/originPolicy.js +100 -0
- package/dist/communications/postgresCommunicationSync.d.ts +79 -0
- package/dist/communications/postgresCommunicationSync.js +111 -0
- package/dist/communications/postgresConsentEvaluator.d.ts +19 -0
- package/dist/communications/postgresConsentEvaluator.js +43 -0
- package/dist/communications/postgresDeliveryReconciliation.d.ts +3 -0
- package/dist/communications/postgresDeliveryReconciliation.js +113 -0
- package/dist/communications/postgresNativeOperations.d.ts +13 -0
- package/dist/communications/postgresNativeOperations.js +63 -0
- package/dist/communications/postgresNotificationRecipients.d.ts +37 -0
- package/dist/communications/postgresNotificationRecipients.js +60 -0
- package/dist/communications/postgresTransactionalDeliveryStore.d.ts +7 -0
- package/dist/communications/postgresTransactionalDeliveryStore.js +55 -0
- package/dist/communications/preferencesToken.d.ts +10 -0
- package/dist/communications/preferencesToken.js +40 -0
- package/dist/communications/publicPreferenceToken.d.ts +24 -0
- package/dist/communications/publicPreferenceToken.js +53 -0
- package/dist/communications/resend/index.d.ts +40 -0
- package/dist/communications/resend/index.js +310 -0
- package/dist/communications/shipmentNotifications.d.ts +34 -0
- package/dist/communications/shipmentNotifications.js +61 -0
- package/dist/communications/sql.d.ts +26 -0
- package/dist/communications/sql.js +7 -0
- package/dist/communications/standardWebhooks.d.ts +14 -0
- package/dist/communications/standardWebhooks.js +73 -0
- package/dist/communications/status.d.ts +11 -0
- package/dist/communications/status.js +36 -0
- package/dist/communications/transactionalDelivery.d.ts +19 -0
- package/dist/communications/transactionalDelivery.js +96 -0
- package/dist/communications/transactionalDeliveryIdentifier.d.ts +3 -0
- package/dist/communications/transactionalDeliveryIdentifier.js +6 -0
- package/dist/communications/unsubscribeToken.d.ts +77 -0
- package/dist/communications/unsubscribeToken.js +150 -0
- package/dist/communications/validation.d.ts +2 -0
- package/dist/communications/validation.js +3 -0
- package/dist/composition/catalogContribution.d.ts +18 -0
- package/dist/composition/catalogContribution.js +21 -0
- package/dist/composition/index.d.ts +1 -0
- package/dist/composition/index.js +1 -0
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.js +1 -0
- package/dist/http/webhookSignature.d.ts +42 -0
- package/dist/http/webhookSignature.js +86 -0
- package/dist/identity/customerContracts.d.ts +2 -2
- package/dist/inventory/adminInventory.d.ts +13 -0
- package/dist/inventory/adminInventory.js +214 -0
- package/dist/inventory/contracts/forecast.d.ts +86 -0
- package/dist/inventory/contracts/forecast.js +1 -0
- package/dist/inventory/contracts/index.d.ts +4 -0
- package/dist/inventory/contracts/index.js +1 -0
- package/dist/inventory/contracts/inventory.d.ts +157 -0
- package/dist/inventory/contracts/inventory.js +1 -0
- package/dist/inventory/contracts/newPurchaseStock.d.ts +20 -0
- package/dist/inventory/contracts/newPurchaseStock.js +1 -0
- package/dist/inventory/contracts/reservation.d.ts +18 -0
- package/dist/inventory/contracts/reservation.js +1 -0
- package/dist/inventory/forecast.d.ts +24 -0
- package/dist/inventory/forecast.js +200 -0
- package/dist/inventory/index.d.ts +13 -0
- package/dist/inventory/index.js +10 -0
- package/dist/inventory/inventoryHandlers.d.ts +53 -0
- package/dist/inventory/inventoryHandlers.js +151 -0
- package/dist/inventory/newPurchaseStockAvailability.d.ts +47 -0
- package/dist/inventory/newPurchaseStockAvailability.js +75 -0
- package/dist/inventory/ports.d.ts +21 -0
- package/dist/inventory/ports.js +16 -0
- package/dist/inventory/renewalReservation.d.ts +27 -0
- package/dist/inventory/renewalReservation.js +61 -0
- package/dist/inventory/reservationPolicy.d.ts +6 -0
- package/dist/inventory/reservationPolicy.js +19 -0
- package/dist/inventory/schemas.d.ts +137 -0
- package/dist/inventory/schemas.js +112 -0
- package/dist/inventory/sql.d.ts +14 -0
- package/dist/inventory/sql.js +5 -0
- package/dist/inventory/subscriptionForecastCalculation.d.ts +4 -0
- package/dist/inventory/subscriptionForecastCalculation.js +133 -0
- package/dist/pricing/acquisitionFinancialPolicy.d.ts +26 -0
- package/dist/pricing/acquisitionFinancialPolicy.js +1 -0
- package/dist/pricing/acquisitionOfferPricing.d.ts +27 -0
- package/dist/pricing/acquisitionOfferPricing.js +25 -0
- package/dist/pricing/acquisitionOfferPricingHandler.d.ts +20 -0
- package/dist/pricing/acquisitionOfferPricingHandler.js +105 -0
- package/dist/pricing/acquisitionOfferPricingSchemas.d.ts +31 -0
- package/dist/pricing/acquisitionOfferPricingSchemas.js +33 -0
- package/dist/pricing/acquisitionQuoteBinding.d.ts +12 -0
- package/dist/pricing/acquisitionQuoteBinding.js +12 -0
- package/dist/pricing/acquisitionReadiness.d.ts +31 -0
- package/dist/pricing/acquisitionReadiness.js +117 -0
- package/dist/pricing/acquisitionTerms.d.ts +19 -0
- package/dist/pricing/acquisitionTerms.js +126 -0
- package/dist/pricing/acquisitionTermsSchemas.d.ts +59 -0
- package/dist/pricing/acquisitionTermsSchemas.js +42 -0
- package/dist/pricing/catalogFactsProvenance.d.ts +33 -0
- package/dist/pricing/catalogFactsProvenance.js +64 -0
- package/dist/pricing/catalogFactsSchemas.d.ts +45 -0
- package/dist/pricing/catalogFactsSchemas.js +58 -0
- package/dist/pricing/commerceOfferPricing.d.ts +25 -0
- package/dist/pricing/commerceOfferPricing.js +139 -0
- package/dist/pricing/commerceOfferPricingCache.d.ts +10 -0
- package/dist/pricing/commerceOfferPricingCache.js +44 -0
- package/dist/pricing/commerceOfferPricingHandler.d.ts +21 -0
- package/dist/pricing/commerceOfferPricingHandler.js +78 -0
- package/dist/pricing/commercePriceAuthority.d.ts +26 -0
- package/dist/pricing/commercePriceAuthority.js +79 -0
- package/dist/pricing/commercePricingPolicyErrors.d.ts +40 -0
- package/dist/pricing/commercePricingPolicyErrors.js +67 -0
- package/dist/pricing/commerceQuoteBatchHandler.d.ts +37 -0
- package/dist/pricing/commerceQuoteBatchHandler.js +83 -0
- package/dist/pricing/commerceQuoteCatalogReadPort.d.ts +27 -0
- package/dist/pricing/commerceQuoteCatalogReadPort.js +8 -0
- package/dist/pricing/commerceQuoteHandler.d.ts +31 -0
- package/dist/pricing/commerceQuoteHandler.js +110 -0
- package/dist/pricing/commerceQuoteSnapshotExpect.d.ts +9 -0
- package/dist/pricing/commerceQuoteSnapshotExpect.js +22 -0
- package/dist/pricing/contracts/acquisitionTerms.d.ts +32 -0
- package/dist/pricing/contracts/acquisitionTerms.js +2 -0
- package/dist/pricing/contracts/authority.d.ts +27 -0
- package/dist/pricing/contracts/authority.js +1 -0
- package/dist/pricing/contracts/evidence.d.ts +33 -0
- package/dist/pricing/contracts/evidence.js +1 -0
- package/dist/pricing/contracts/index.d.ts +17 -0
- package/dist/pricing/contracts/index.js +7 -0
- package/dist/pricing/contracts/money.d.ts +27 -0
- package/dist/pricing/contracts/money.js +1 -0
- package/dist/pricing/contracts/offer.d.ts +52 -0
- package/dist/pricing/contracts/offer.js +4 -0
- package/dist/pricing/contracts/offerPolicy.d.ts +16 -0
- package/dist/pricing/contracts/offerPolicy.js +5 -0
- package/dist/pricing/contracts/policy.d.ts +22 -0
- package/dist/pricing/contracts/policy.js +3 -0
- package/dist/pricing/contracts/provenance.d.ts +24 -0
- package/dist/pricing/contracts/provenance.js +2 -0
- package/dist/pricing/contracts/quote.d.ts +94 -0
- package/dist/pricing/contracts/quote.js +1 -0
- package/dist/pricing/dbBackedCommerceQuoteHelpers.d.ts +78 -0
- package/dist/pricing/dbBackedCommerceQuoteHelpers.js +146 -0
- package/dist/pricing/dbBackedCommerceQuotePort.d.ts +66 -0
- package/dist/pricing/dbBackedCommerceQuotePort.js +206 -0
- package/dist/pricing/dbBackedCommerceQuoteSnapshotVerifier.d.ts +4 -0
- package/dist/pricing/dbBackedCommerceQuoteSnapshotVerifier.js +25 -0
- package/dist/pricing/index.d.ts +51 -0
- package/dist/pricing/index.js +36 -0
- package/dist/pricing/offerPolicyReadiness.d.ts +21 -0
- package/dist/pricing/offerPolicyReadiness.js +79 -0
- package/dist/pricing/offerPolicySchemas.d.ts +25 -0
- package/dist/pricing/offerPolicySchemas.js +15 -0
- package/dist/pricing/offerPricingSchemas.d.ts +315 -0
- package/dist/pricing/offerPricingSchemas.js +65 -0
- package/dist/pricing/ports.d.ts +13 -0
- package/dist/pricing/ports.js +9 -0
- package/dist/pricing/pricingPolicyToken.d.ts +39 -0
- package/dist/pricing/pricingPolicyToken.js +84 -0
- package/dist/pricing/quoteAcquisitionTerms.d.ts +2 -0
- package/dist/pricing/quoteAcquisitionTerms.js +4 -0
- package/dist/pricing/quoteCodeRejectionDetails.d.ts +20 -0
- package/dist/pricing/quoteCodeRejectionDetails.js +22 -0
- package/dist/pricing/quotePorts.d.ts +30 -0
- package/dist/pricing/quotePorts.js +20 -0
- package/dist/pricing/quotePrimitives.d.ts +13 -0
- package/dist/pricing/quotePrimitives.js +18 -0
- package/dist/pricing/quotePromotionEvidence.d.ts +39 -0
- package/dist/pricing/quotePromotionEvidence.js +73 -0
- package/dist/pricing/quoteSchemas.d.ts +1176 -0
- package/dist/pricing/quoteSchemas.js +196 -0
- package/dist/pricing/subscriptionPricePolicy.d.ts +52 -0
- package/dist/pricing/subscriptionPricePolicy.js +96 -0
- package/dist/pricing/taxProfileGuard.d.ts +2 -0
- package/dist/pricing/taxProfileGuard.js +24 -0
- package/dist/pricing/validation.d.ts +2 -0
- package/dist/pricing/validation.js +3 -0
- package/dist/promotions/adminBindings.d.ts +72 -0
- package/dist/promotions/adminBindings.js +1 -0
- package/dist/promotions/adminPromotionCodesContracts.d.ts +498 -0
- package/dist/promotions/adminPromotionCodesContracts.js +211 -0
- package/dist/promotions/adminPromotionCodesDataPort.d.ts +47 -0
- package/dist/promotions/adminPromotionCodesDataPort.js +1 -0
- package/dist/promotions/adminPromotionCodesHandler.d.ts +14 -0
- package/dist/promotions/adminPromotionCodesHandler.js +194 -0
- package/dist/promotions/adminPromotionsContracts.d.ts +235 -0
- package/dist/promotions/adminPromotionsContracts.js +99 -0
- package/dist/promotions/adminPromotionsDataPort.d.ts +42 -0
- package/dist/promotions/adminPromotionsDataPort.js +1 -0
- package/dist/promotions/adminPromotionsHandler.d.ts +16 -0
- package/dist/promotions/adminPromotionsHandler.js +47 -0
- package/dist/promotions/contracts/index.d.ts +387 -0
- package/dist/promotions/contracts/index.js +1 -0
- package/dist/promotions/index.d.ts +22 -0
- package/dist/promotions/index.js +21 -0
- package/dist/promotions/promoDataPort.d.ts +47 -0
- package/dist/promotions/promoDataPort.js +14 -0
- package/dist/promotions/promotionAcceptanceTelemetry.d.ts +29 -0
- package/dist/promotions/promotionAcceptanceTelemetry.js +45 -0
- package/dist/promotions/promotionBenefitDefinition.d.ts +37 -0
- package/dist/promotions/promotionBenefitDefinition.js +33 -0
- package/dist/promotions/promotionClaimSweepPort.d.ts +14 -0
- package/dist/promotions/promotionClaimSweepPort.js +8 -0
- package/dist/promotions/promotionClaims.d.ts +5 -0
- package/dist/promotions/promotionClaims.js +57 -0
- package/dist/promotions/promotionCodePreview.d.ts +11 -0
- package/dist/promotions/promotionCodePreview.js +154 -0
- package/dist/promotions/promotionCodeQuotePort.d.ts +25 -0
- package/dist/promotions/promotionCodeQuotePort.js +1 -0
- package/dist/promotions/promotionQuoteAcceptance.d.ts +65 -0
- package/dist/promotions/promotionQuoteAcceptance.js +202 -0
- package/dist/promotions/promotionQuoteBinding.d.ts +71 -0
- package/dist/promotions/promotionQuoteBinding.js +85 -0
- package/dist/promotions/quoteAutomaticPromotions.d.ts +24 -0
- package/dist/promotions/quoteAutomaticPromotions.js +36 -0
- package/dist/promotions/quotePromoDiscounts.d.ts +32 -0
- package/dist/promotions/quotePromoDiscounts.js +140 -0
- package/dist/promotions/quotePromotionCodeAdjustments.d.ts +27 -0
- package/dist/promotions/quotePromotionCodeAdjustments.js +223 -0
- package/dist/promotions/quotePromotionV2.d.ts +29 -0
- package/dist/promotions/quotePromotionV2.js +174 -0
- package/dist/promotions/sql.d.ts +14 -0
- package/dist/promotions/sql.js +5 -0
- package/dist/promotions/validation.d.ts +2 -0
- package/dist/promotions/validation.js +3 -0
- package/dist/shipping/addressCanonLookupHandler.d.ts +7 -0
- package/dist/shipping/addressCanonLookupHandler.js +105 -0
- package/dist/shipping/addressCanonical.d.ts +2 -0
- package/dist/shipping/addressCanonical.js +26 -0
- package/dist/shipping/addressPorts.d.ts +39 -0
- package/dist/shipping/addressPorts.js +1 -0
- package/dist/shipping/addressSchemas.d.ts +30 -0
- package/dist/shipping/addressSchemas.js +1 -0
- package/dist/shipping/adminShippingRateHandler.d.ts +4 -0
- package/dist/shipping/adminShippingRateHandler.js +64 -0
- package/dist/shipping/contracts/address.d.ts +144 -0
- package/dist/shipping/contracts/address.js +1 -0
- package/dist/shipping/contracts/delivery.d.ts +110 -0
- package/dist/shipping/contracts/delivery.js +1 -0
- package/dist/shipping/contracts/index.d.ts +3 -0
- package/dist/shipping/contracts/index.js +1 -0
- package/dist/shipping/contracts/shippingRate.d.ts +11 -0
- package/dist/shipping/contracts/shippingRate.js +1 -0
- package/dist/shipping/customerAddressesHandler.d.ts +5 -0
- package/dist/shipping/customerAddressesHandler.js +80 -0
- package/dist/shipping/customerSelfServiceAddressModels.d.ts +27 -0
- package/dist/shipping/customerSelfServiceAddressModels.js +101 -0
- package/dist/shipping/deliverySelectionHandler.d.ts +10 -0
- package/dist/shipping/deliverySelectionHandler.js +77 -0
- package/dist/shipping/deliverySelectionPort.d.ts +8 -0
- package/dist/shipping/deliverySelectionPort.js +1 -0
- package/dist/shipping/deliverySelectionSummary.d.ts +2 -0
- package/dist/shipping/deliverySelectionSummary.js +53 -0
- package/dist/shipping/handlerSchemas.d.ts +21 -0
- package/dist/shipping/handlerSchemas.js +1 -0
- package/dist/shipping/index.d.ts +17 -0
- package/dist/shipping/index.js +8 -0
- package/dist/shipping/pickupPointSearchPort.d.ts +4 -0
- package/dist/shipping/pickupPointSearchPort.js +1 -0
- package/dist/shipping/readDeliverySelectionEvidence.d.ts +2 -0
- package/dist/shipping/readDeliverySelectionEvidence.js +44 -0
- package/dist/shipping/shippingRatePorts.d.ts +52 -0
- package/dist/shipping/shippingRatePorts.js +1 -0
- package/package.json +72 -2
- package/release-gates.json +249 -8
- package/sql/20260807140000_read_parity_catalog.sql +94 -0
- package/sql/20260807190000_comms_outbox_rail.sql +329 -0
- package/sql/20260810120000_storefront_catalog_attributes.sql +51 -0
- package/sql/20260810120001_transactional_delivery_receipts.sql +209 -0
- package/sql/20260812140000_sellable_bundle_catalog.sql +124 -0
- package/sql/20260812210000_bundle_operator_write_boundary.sql +567 -0
- package/sql/20260813120000_communications_control_plane.sql +568 -0
- package/sql/20260814000000_fulfillment_stock_evidence.sql +239 -0
- package/sql/20260815120000_automatic_subscription_renewal.sql +1083 -0
- package/sql/20260817180000_promotion_claim_lifecycle.sql +591 -0
- package/sql/20260817180100_promotion_claim_lifecycle_validation.sql +23 -0
- package/sql/20260827220000_catalog_document_revision_foundation.sql +226 -0
- package/sql/20260827220001_catalog_document_revision_foundation_validate.sql +10 -0
- package/sql/20260908100000_catalog_draft_foundation.sql +217 -0
- package/sql/20261019200000_communications_native_operations.sql +68 -0
- package/src/catalog/activeSkuSelection.ts +20 -0
- package/src/catalog/adminBindings.ts +59 -0
- package/src/catalog/adminBundleHandler.ts +165 -0
- package/src/catalog/adminBundleReadHandler.ts +261 -0
- package/src/catalog/adminBundleWritePort.ts +102 -0
- package/src/catalog/bundleAvailability.ts +129 -0
- package/src/catalog/bundleAvailabilityService.ts +171 -0
- package/src/catalog/bundleBindings.ts +29 -0
- package/src/catalog/bundleCatalogQueries.ts +98 -0
- package/src/catalog/bundleCatalogReadPort.ts +177 -0
- package/src/catalog/bundleCatalogStore.ts +269 -0
- package/src/catalog/bundleRuleCodes.ts +134 -0
- package/src/catalog/bundleRules.ts +153 -0
- package/src/catalog/catalogDraftStore.ts +71 -0
- package/src/catalog/catalogSkuEnvelope.ts +214 -0
- package/src/catalog/catalogSkuEnvelopeMapper.ts +160 -0
- package/src/catalog/contracts/bundleAdmin.ts +20 -0
- package/src/catalog/contracts/bundleAvailability.ts +5 -0
- package/src/catalog/contracts/bundleRead.ts +13 -0
- package/src/catalog/contracts/draft.ts +69 -0
- package/src/catalog/contracts/foundation.ts +104 -0
- package/src/catalog/contracts/index.ts +14 -0
- package/src/catalog/contracts/lifecycle.ts +74 -0
- package/src/catalog/contracts/productMediaContracts.ts +170 -0
- package/src/catalog/contracts/productTypes.ts +35 -0
- package/src/catalog/contracts/resolveProductMedia.ts +85 -0
- package/src/catalog/contracts/sellable.ts +12 -0
- package/src/catalog/draftHandler.ts +105 -0
- package/src/catalog/draftPorts.ts +18 -0
- package/src/catalog/draftSchemas.ts +88 -0
- package/src/catalog/draftValidation.ts +100 -0
- package/src/catalog/foundationSchemas.ts +123 -0
- package/src/catalog/index.ts +43 -0
- package/src/catalog/mediaSourcePack.ts +219 -0
- package/src/catalog/productTypeSchemas.ts +70 -0
- package/src/catalog/publicationPorts.ts +44 -0
- package/src/catalog/readPorts.ts +61 -0
- package/src/catalog/referenceCatalogHandler.ts +39 -0
- package/src/catalog/resolvedSkuProjection.ts +76 -0
- package/src/catalog/sellableBundleHandler.ts +133 -0
- package/src/catalog/sellableSchemas.ts +33 -0
- package/src/catalog/sql.ts +14 -0
- package/src/catalog/validation.ts +3 -0
- package/src/communications/accountingDocumentDelivery.ts +63 -0
- package/src/communications/authEmailError.ts +10 -0
- package/src/communications/authEmailPorts.ts +2 -0
- package/src/communications/authSendEmailHook.ts +310 -0
- package/src/communications/capturedTransactionalDelivery.ts +29 -0
- package/src/communications/communicationSync.ts +96 -0
- package/src/communications/communicationSyncWorker.ts +302 -0
- package/src/communications/consentPolicy.ts +82 -0
- package/src/communications/consentPurposeRegistry.ts +31 -0
- package/src/communications/contracts/abandonedCart.ts +64 -0
- package/src/communications/contracts/authEmail.ts +73 -0
- package/src/communications/contracts/backInStock.ts +69 -0
- package/src/communications/contracts/blocks.ts +47 -0
- package/src/communications/contracts/checkoutExpired.ts +62 -0
- package/src/communications/contracts/checkoutRecovery.ts +68 -0
- package/src/communications/contracts/commerceEmailContent.ts +189 -0
- package/src/communications/contracts/commerceEngagementEmailContent.ts +106 -0
- package/src/communications/contracts/consent.ts +13 -0
- package/src/communications/contracts/email.ts +210 -0
- package/src/communications/contracts/guideCard.ts +34 -0
- package/src/communications/contracts/index.ts +52 -0
- package/src/communications/contracts/inquiryContent.ts +53 -0
- package/src/communications/contracts/invoiceDocumentContent.ts +57 -0
- package/src/communications/contracts/marketingAutomation.ts +45 -0
- package/src/communications/contracts/marketingSync.ts +109 -0
- package/src/communications/contracts/newsletter.ts +78 -0
- package/src/communications/contracts/newsletterWebhook.ts +23 -0
- package/src/communications/contracts/optOutContent.ts +23 -0
- package/src/communications/contracts/orderCanceled.ts +64 -0
- package/src/communications/contracts/orderDraft.ts +112 -0
- package/src/communications/contracts/orderPaid.ts +147 -0
- package/src/communications/contracts/orderRefunded.ts +63 -0
- package/src/communications/contracts/paymentFailed.ts +59 -0
- package/src/communications/contracts/publicIntake.ts +53 -0
- package/src/communications/contracts/render.ts +271 -0
- package/src/communications/contracts/reorderReminder.ts +59 -0
- package/src/communications/contracts/returnEmails.ts +113 -0
- package/src/communications/contracts/reviewEffects.ts +60 -0
- package/src/communications/contracts/reviewRequest.ts +59 -0
- package/src/communications/contracts/roleNotificationContent.ts +65 -0
- package/src/communications/contracts/shipmentDelivered.ts +59 -0
- package/src/communications/contracts/shipmentDispatched.ts +77 -0
- package/src/communications/contracts/shipmentException.ts +62 -0
- package/src/communications/contracts/subscriptionActivationActionRequired.ts +37 -0
- package/src/communications/contracts/subscriptionAddressChanged.ts +56 -0
- package/src/communications/contracts/subscriptionCancelled.ts +57 -0
- package/src/communications/contracts/subscriptionCycleSkipped.ts +80 -0
- package/src/communications/contracts/subscriptionDeliveryRescheduled.ts +79 -0
- package/src/communications/contracts/subscriptionEmailContent.ts +163 -0
- package/src/communications/contracts/subscriptionPackageChanged.ts +59 -0
- package/src/communications/contracts/subscriptionPauseReminder.ts +63 -0
- package/src/communications/contracts/subscriptionPaused.ts +58 -0
- package/src/communications/contracts/subscriptionPaymentExpired.ts +83 -0
- package/src/communications/contracts/subscriptionPaymentFailed.ts +117 -0
- package/src/communications/contracts/subscriptionPaymentRecovered.ts +50 -0
- package/src/communications/contracts/subscriptionRenewalAtRisk.ts +85 -0
- package/src/communications/contracts/subscriptionRenewalUpcoming.ts +103 -0
- package/src/communications/contracts/subscriptionResumed.ts +60 -0
- package/src/communications/contracts/subscriptionWelcome.ts +102 -0
- package/src/communications/contracts/subscriptionWinback.ts +62 -0
- package/src/communications/contracts/transactionalDelivery.ts +43 -0
- package/src/communications/contracts/types.ts +58 -0
- package/src/communications/contribution.ts +33 -0
- package/src/communications/deliveryReconciliation.ts +108 -0
- package/src/communications/emailEgress.ts +111 -0
- package/src/communications/emailHealthAssessment.ts +106 -0
- package/src/communications/emailHealthMetricsPort.ts +17 -0
- package/src/communications/emailNotificationControl.ts +28 -0
- package/src/communications/emailObservation.ts +43 -0
- package/src/communications/emailTransport.ts +167 -0
- package/src/communications/errors.ts +34 -0
- package/src/communications/index.ts +47 -0
- package/src/communications/integrationEventSignature.ts +49 -0
- package/src/communications/klaviyo/consentPush.ts +19 -0
- package/src/communications/klaviyo/index.ts +649 -0
- package/src/communications/managedTransactionalDeliveryStore.ts +59 -0
- package/src/communications/nativeOperations.ts +40 -0
- package/src/communications/newsletterIntegrationContracts.ts +154 -0
- package/src/communications/newsletterWebhookPort.ts +104 -0
- package/src/communications/newsletterWebhookProcessing.ts +102 -0
- package/src/communications/originPolicy.ts +151 -0
- package/src/communications/postgresCommunicationSync.ts +127 -0
- package/src/communications/postgresConsentEvaluator.ts +49 -0
- package/src/communications/postgresDeliveryReconciliation.ts +101 -0
- package/src/communications/postgresNativeOperations.ts +55 -0
- package/src/communications/postgresNotificationRecipients.ts +57 -0
- package/src/communications/postgresTransactionalDeliveryStore.ts +79 -0
- package/src/communications/preferencesToken.ts +62 -0
- package/src/communications/publicPreferenceToken.ts +68 -0
- package/src/communications/resend/index.ts +350 -0
- package/src/communications/shipmentNotifications.ts +78 -0
- package/src/communications/sql.ts +7 -0
- package/src/communications/standardWebhooks.ts +84 -0
- package/src/communications/status.ts +51 -0
- package/src/communications/transactionalDelivery.ts +114 -0
- package/src/communications/transactionalDeliveryIdentifier.ts +9 -0
- package/src/communications/unsubscribeToken.ts +186 -0
- package/src/communications/validation.ts +3 -0
- package/src/composition/catalogContribution.ts +32 -0
- package/src/composition/index.ts +1 -0
- package/src/http/index.ts +1 -0
- package/src/http/webhookSignature.ts +96 -0
- package/src/inventory/adminInventory.ts +251 -0
- package/src/inventory/contracts/forecast.ts +96 -0
- package/src/inventory/contracts/index.ts +18 -0
- package/src/inventory/contracts/inventory.ts +14 -0
- package/src/inventory/contracts/newPurchaseStock.ts +23 -0
- package/src/inventory/contracts/reservation.ts +20 -0
- package/src/inventory/forecast.ts +239 -0
- package/src/inventory/index.ts +21 -0
- package/src/inventory/inventoryHandlers.ts +215 -0
- package/src/inventory/newPurchaseStockAvailability.ts +120 -0
- package/src/inventory/ports.ts +46 -0
- package/src/inventory/renewalReservation.ts +88 -0
- package/src/inventory/reservationPolicy.ts +27 -0
- package/src/inventory/schemas.ts +128 -0
- package/src/inventory/sql.ts +5 -0
- package/src/inventory/subscriptionForecastCalculation.ts +157 -0
- package/src/pricing/acquisitionFinancialPolicy.ts +26 -0
- package/src/pricing/acquisitionOfferPricing.ts +38 -0
- package/src/pricing/acquisitionOfferPricingHandler.ts +157 -0
- package/src/pricing/acquisitionOfferPricingSchemas.ts +35 -0
- package/src/pricing/acquisitionQuoteBinding.ts +12 -0
- package/src/pricing/acquisitionReadiness.ts +148 -0
- package/src/pricing/acquisitionTerms.ts +125 -0
- package/src/pricing/acquisitionTermsSchemas.ts +52 -0
- package/src/pricing/catalogFactsProvenance.ts +102 -0
- package/src/pricing/catalogFactsSchemas.ts +69 -0
- package/src/pricing/commerceOfferPricing.ts +224 -0
- package/src/pricing/commerceOfferPricingCache.ts +53 -0
- package/src/pricing/commerceOfferPricingHandler.ts +137 -0
- package/src/pricing/commercePriceAuthority.ts +104 -0
- package/src/pricing/commercePricingPolicyErrors.ts +88 -0
- package/src/pricing/commerceQuoteBatchHandler.ts +129 -0
- package/src/pricing/commerceQuoteCatalogReadPort.ts +42 -0
- package/src/pricing/commerceQuoteHandler.ts +184 -0
- package/src/pricing/commerceQuoteSnapshotExpect.ts +48 -0
- package/src/pricing/contracts/acquisitionTerms.ts +26 -0
- package/src/pricing/contracts/authority.ts +44 -0
- package/src/pricing/contracts/evidence.ts +25 -0
- package/src/pricing/contracts/index.ts +17 -0
- package/src/pricing/contracts/money.ts +32 -0
- package/src/pricing/contracts/offer.ts +42 -0
- package/src/pricing/contracts/offerPolicy.ts +17 -0
- package/src/pricing/contracts/policy.ts +26 -0
- package/src/pricing/contracts/provenance.ts +19 -0
- package/src/pricing/contracts/quote.ts +106 -0
- package/src/pricing/dbBackedCommerceQuoteHelpers.ts +256 -0
- package/src/pricing/dbBackedCommerceQuotePort.ts +260 -0
- package/src/pricing/dbBackedCommerceQuoteSnapshotVerifier.ts +49 -0
- package/src/pricing/index.ts +52 -0
- package/src/pricing/offerPolicyReadiness.ts +110 -0
- package/src/pricing/offerPolicySchemas.ts +23 -0
- package/src/pricing/offerPricingSchemas.ts +92 -0
- package/src/pricing/ports.ts +17 -0
- package/src/pricing/pricingPolicyToken.ts +119 -0
- package/src/pricing/quoteAcquisitionTerms.ts +10 -0
- package/src/pricing/quoteCodeRejectionDetails.ts +23 -0
- package/src/pricing/quotePorts.ts +58 -0
- package/src/pricing/quotePrimitives.ts +21 -0
- package/src/pricing/quotePromotionEvidence.ts +82 -0
- package/src/pricing/quoteSchemas.ts +230 -0
- package/src/pricing/subscriptionPricePolicy.ts +113 -0
- package/src/pricing/taxProfileGuard.ts +33 -0
- package/src/pricing/validation.ts +3 -0
- package/src/promotions/adminBindings.ts +53 -0
- package/src/promotions/adminPromotionCodesContracts.ts +244 -0
- package/src/promotions/adminPromotionCodesDataPort.ts +56 -0
- package/src/promotions/adminPromotionCodesHandler.ts +254 -0
- package/src/promotions/adminPromotionsContracts.ts +121 -0
- package/src/promotions/adminPromotionsDataPort.ts +48 -0
- package/src/promotions/adminPromotionsHandler.ts +72 -0
- package/src/promotions/contracts/index.ts +387 -0
- package/src/promotions/index.ts +22 -0
- package/src/promotions/promoDataPort.ts +65 -0
- package/src/promotions/promotionAcceptanceTelemetry.ts +73 -0
- package/src/promotions/promotionBenefitDefinition.ts +48 -0
- package/src/promotions/promotionClaimSweepPort.ts +23 -0
- package/src/promotions/promotionClaims.ts +70 -0
- package/src/promotions/promotionCodePreview.ts +183 -0
- package/src/promotions/promotionCodeQuotePort.ts +35 -0
- package/src/promotions/promotionQuoteAcceptance.ts +284 -0
- package/src/promotions/promotionQuoteBinding.ts +158 -0
- package/src/promotions/quoteAutomaticPromotions.ts +58 -0
- package/src/promotions/quotePromoDiscounts.ts +185 -0
- package/src/promotions/quotePromotionCodeAdjustments.ts +277 -0
- package/src/promotions/quotePromotionV2.ts +223 -0
- package/src/promotions/sql.ts +5 -0
- package/src/promotions/validation.ts +3 -0
- package/src/shipping/addressCanonLookupHandler.ts +114 -0
- package/src/shipping/addressCanonical.ts +31 -0
- package/src/shipping/addressPorts.ts +48 -0
- package/src/shipping/addressSchemas.ts +28 -0
- package/src/shipping/adminShippingRateHandler.ts +72 -0
- package/src/shipping/contracts/address.ts +71 -0
- package/src/shipping/contracts/delivery.ts +114 -0
- package/src/shipping/contracts/index.ts +18 -0
- package/src/shipping/contracts/shippingRate.ts +7 -0
- package/src/shipping/customerAddressesHandler.ts +100 -0
- package/src/shipping/customerSelfServiceAddressModels.ts +124 -0
- package/src/shipping/deliverySelectionHandler.ts +94 -0
- package/src/shipping/deliverySelectionPort.ts +10 -0
- package/src/shipping/deliverySelectionSummary.ts +56 -0
- package/src/shipping/handlerSchemas.ts +19 -0
- package/src/shipping/index.ts +23 -0
- package/src/shipping/pickupPointSearchPort.ts +8 -0
- package/src/shipping/readDeliverySelectionEvidence.ts +51 -0
- package/src/shipping/shippingRatePorts.ts +36 -0
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
-- Public provider-neutral communications control plane.
|
|
2
|
+
--
|
|
3
|
+
-- This forward adds only opaque operator, control, template and command
|
|
4
|
+
-- identifiers around the existing transactional-delivery receipt. It stores no
|
|
5
|
+
-- recipient address, message content, provider identifier or transport payload.
|
|
6
|
+
-- Every routine is invoker-rights with a fixed search path; browser principals
|
|
7
|
+
-- receive no table or function grant and the catalog contains no branded seed.
|
|
8
|
+
|
|
9
|
+
CREATE TABLE public.platform_communication_operators (
|
|
10
|
+
principal_id uuid PRIMARY KEY,
|
|
11
|
+
active boolean NOT NULL DEFAULT true,
|
|
12
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
13
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
14
|
+
CONSTRAINT platform_communication_operators_timestamp_check
|
|
15
|
+
CHECK (updated_at >= created_at)
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE TABLE public.communication_delivery_controls (
|
|
19
|
+
control_key text PRIMARY KEY,
|
|
20
|
+
enabled boolean NOT NULL DEFAULT false,
|
|
21
|
+
revision integer NOT NULL DEFAULT 1,
|
|
22
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
23
|
+
CONSTRAINT communication_delivery_controls_key_check
|
|
24
|
+
CHECK (control_key ~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$'),
|
|
25
|
+
CONSTRAINT communication_delivery_controls_revision_check CHECK (revision >= 1)
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
CREATE TABLE public.communication_delivery_templates (
|
|
29
|
+
template_reference text PRIMARY KEY,
|
|
30
|
+
control_key text NOT NULL REFERENCES public.communication_delivery_controls(control_key),
|
|
31
|
+
active boolean NOT NULL DEFAULT false,
|
|
32
|
+
revision integer NOT NULL DEFAULT 1,
|
|
33
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
34
|
+
CONSTRAINT communication_delivery_templates_reference_check
|
|
35
|
+
CHECK (template_reference ~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$'),
|
|
36
|
+
CONSTRAINT communication_delivery_templates_revision_check CHECK (revision >= 1)
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
CREATE TABLE public.communication_delivery_preparations (
|
|
40
|
+
idempotency_key text PRIMARY KEY,
|
|
41
|
+
command_fingerprint text NOT NULL,
|
|
42
|
+
template_reference text NOT NULL REFERENCES public.communication_delivery_templates(template_reference),
|
|
43
|
+
control_key text NOT NULL REFERENCES public.communication_delivery_controls(control_key),
|
|
44
|
+
recipient_fingerprint text NOT NULL,
|
|
45
|
+
operator_id uuid NOT NULL REFERENCES public.platform_communication_operators(principal_id),
|
|
46
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
47
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
48
|
+
CONSTRAINT communication_delivery_preparations_key_check
|
|
49
|
+
CHECK (idempotency_key ~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$'),
|
|
50
|
+
CONSTRAINT communication_delivery_preparations_fingerprint_check
|
|
51
|
+
CHECK (command_fingerprint ~ '^[a-f0-9]{64}$'),
|
|
52
|
+
CONSTRAINT communication_delivery_preparations_recipient_fingerprint_check
|
|
53
|
+
CHECK (recipient_fingerprint ~ '^[a-f0-9]{64}$'),
|
|
54
|
+
CONSTRAINT communication_delivery_preparations_timestamp_check
|
|
55
|
+
CHECK (updated_at >= created_at)
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
CREATE TABLE public.communication_delivery_commands (
|
|
59
|
+
idempotency_key text PRIMARY KEY,
|
|
60
|
+
command_fingerprint text NOT NULL,
|
|
61
|
+
template_reference text NOT NULL REFERENCES public.communication_delivery_templates(template_reference),
|
|
62
|
+
control_key text NOT NULL REFERENCES public.communication_delivery_controls(control_key),
|
|
63
|
+
recipient_fingerprint text NOT NULL,
|
|
64
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
65
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
66
|
+
CONSTRAINT communication_delivery_commands_receipt_fk
|
|
67
|
+
FOREIGN KEY (idempotency_key)
|
|
68
|
+
REFERENCES public.transactional_delivery_receipts(idempotency_key)
|
|
69
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
70
|
+
CONSTRAINT communication_delivery_commands_key_check
|
|
71
|
+
CHECK (idempotency_key ~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$'),
|
|
72
|
+
CONSTRAINT communication_delivery_commands_fingerprint_check
|
|
73
|
+
CHECK (command_fingerprint ~ '^[a-f0-9]{64}$'),
|
|
74
|
+
CONSTRAINT communication_delivery_commands_recipient_fingerprint_check
|
|
75
|
+
CHECK (recipient_fingerprint ~ '^[a-f0-9]{64}$'),
|
|
76
|
+
CONSTRAINT communication_delivery_commands_timestamp_check
|
|
77
|
+
CHECK (updated_at >= created_at)
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
CREATE TABLE public.communication_delivery_events (
|
|
81
|
+
event_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
82
|
+
idempotency_key text NOT NULL
|
|
83
|
+
REFERENCES public.communication_delivery_commands(idempotency_key),
|
|
84
|
+
transition text NOT NULL,
|
|
85
|
+
attempt_count integer NOT NULL,
|
|
86
|
+
operator_id uuid NOT NULL REFERENCES public.platform_communication_operators(principal_id),
|
|
87
|
+
occurred_at timestamptz NOT NULL DEFAULT now(),
|
|
88
|
+
CONSTRAINT communication_delivery_events_transition_check
|
|
89
|
+
CHECK (transition IN ('attempted', 'accepted', 'failed', 'replayed')),
|
|
90
|
+
CONSTRAINT communication_delivery_events_attempt_check CHECK (attempt_count >= 1)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
CREATE INDEX communication_delivery_commands_updated_idx
|
|
94
|
+
ON public.communication_delivery_commands(updated_at DESC, idempotency_key);
|
|
95
|
+
CREATE INDEX communication_delivery_events_command_idx
|
|
96
|
+
ON public.communication_delivery_events(idempotency_key, event_id);
|
|
97
|
+
|
|
98
|
+
CREATE FUNCTION public.communications_refuse_delivery_event_mutation()
|
|
99
|
+
RETURNS trigger
|
|
100
|
+
LANGUAGE plpgsql
|
|
101
|
+
SET search_path = pg_catalog
|
|
102
|
+
AS $$
|
|
103
|
+
BEGIN
|
|
104
|
+
RAISE LOG 'communications_delivery_events_append_only_rejected';
|
|
105
|
+
RAISE EXCEPTION 'communications_delivery_events_append_only' USING ERRCODE = '55000';
|
|
106
|
+
END;
|
|
107
|
+
$$;
|
|
108
|
+
|
|
109
|
+
CREATE TRIGGER communications_delivery_events_append_only
|
|
110
|
+
BEFORE UPDATE OR DELETE ON public.communication_delivery_events
|
|
111
|
+
FOR EACH ROW EXECUTE FUNCTION public.communications_refuse_delivery_event_mutation();
|
|
112
|
+
|
|
113
|
+
REVOKE ALL ON TABLE
|
|
114
|
+
public.platform_communication_operators,
|
|
115
|
+
public.communication_delivery_controls,
|
|
116
|
+
public.communication_delivery_templates,
|
|
117
|
+
public.communication_delivery_preparations,
|
|
118
|
+
public.communication_delivery_commands,
|
|
119
|
+
public.communication_delivery_events
|
|
120
|
+
FROM PUBLIC, anon, authenticated;
|
|
121
|
+
REVOKE ALL ON SEQUENCE public.communication_delivery_events_event_id_seq
|
|
122
|
+
FROM PUBLIC, anon, authenticated;
|
|
123
|
+
|
|
124
|
+
CREATE FUNCTION public.communications_operator_is_active(p_principal_id uuid)
|
|
125
|
+
RETURNS boolean
|
|
126
|
+
LANGUAGE sql
|
|
127
|
+
STABLE
|
|
128
|
+
SET search_path = pg_catalog
|
|
129
|
+
AS $$
|
|
130
|
+
SELECT EXISTS (
|
|
131
|
+
SELECT 1
|
|
132
|
+
FROM public.platform_communication_operators AS operator_row
|
|
133
|
+
WHERE operator_row.principal_id = p_principal_id
|
|
134
|
+
AND operator_row.active IS TRUE
|
|
135
|
+
);
|
|
136
|
+
$$;
|
|
137
|
+
|
|
138
|
+
CREATE FUNCTION public.communications_require_active_operator(p_operator_id uuid)
|
|
139
|
+
RETURNS void
|
|
140
|
+
LANGUAGE plpgsql
|
|
141
|
+
STABLE
|
|
142
|
+
SET search_path = pg_catalog
|
|
143
|
+
AS $$
|
|
144
|
+
BEGIN
|
|
145
|
+
IF p_operator_id IS NULL OR NOT public.communications_operator_is_active(p_operator_id) THEN
|
|
146
|
+
RAISE EXCEPTION 'communications_operator_inactive' USING ERRCODE = '42501';
|
|
147
|
+
END IF;
|
|
148
|
+
END;
|
|
149
|
+
$$;
|
|
150
|
+
|
|
151
|
+
CREATE FUNCTION public.communications_set_delivery_control(
|
|
152
|
+
p_operator_id uuid,
|
|
153
|
+
p_control_key text,
|
|
154
|
+
p_enabled boolean
|
|
155
|
+
)
|
|
156
|
+
RETURNS integer
|
|
157
|
+
LANGUAGE plpgsql
|
|
158
|
+
SET search_path = pg_catalog
|
|
159
|
+
AS $$
|
|
160
|
+
DECLARE
|
|
161
|
+
v_revision integer;
|
|
162
|
+
BEGIN
|
|
163
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
164
|
+
IF p_control_key IS NULL
|
|
165
|
+
OR p_control_key !~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$'
|
|
166
|
+
OR p_enabled IS NULL THEN
|
|
167
|
+
RAISE EXCEPTION 'communications_control_invalid' USING ERRCODE = '22023';
|
|
168
|
+
END IF;
|
|
169
|
+
|
|
170
|
+
INSERT INTO public.communication_delivery_controls(control_key, enabled)
|
|
171
|
+
VALUES (p_control_key, p_enabled)
|
|
172
|
+
ON CONFLICT (control_key) DO UPDATE
|
|
173
|
+
SET enabled = EXCLUDED.enabled,
|
|
174
|
+
revision = public.communication_delivery_controls.revision + 1,
|
|
175
|
+
updated_at = now()
|
|
176
|
+
RETURNING revision INTO v_revision;
|
|
177
|
+
RETURN v_revision;
|
|
178
|
+
END;
|
|
179
|
+
$$;
|
|
180
|
+
|
|
181
|
+
CREATE FUNCTION public.communications_set_delivery_template(
|
|
182
|
+
p_operator_id uuid,
|
|
183
|
+
p_template_reference text,
|
|
184
|
+
p_control_key text,
|
|
185
|
+
p_active boolean
|
|
186
|
+
)
|
|
187
|
+
RETURNS integer
|
|
188
|
+
LANGUAGE plpgsql
|
|
189
|
+
SET search_path = pg_catalog
|
|
190
|
+
AS $$
|
|
191
|
+
DECLARE
|
|
192
|
+
v_revision integer;
|
|
193
|
+
BEGIN
|
|
194
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
195
|
+
IF p_template_reference IS NULL
|
|
196
|
+
OR p_template_reference !~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$'
|
|
197
|
+
OR p_control_key IS NULL
|
|
198
|
+
OR p_control_key !~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$'
|
|
199
|
+
OR p_active IS NULL THEN
|
|
200
|
+
RAISE EXCEPTION 'communications_template_invalid' USING ERRCODE = '22023';
|
|
201
|
+
END IF;
|
|
202
|
+
IF NOT EXISTS (
|
|
203
|
+
SELECT 1 FROM public.communication_delivery_controls
|
|
204
|
+
WHERE control_key = p_control_key
|
|
205
|
+
) THEN
|
|
206
|
+
RAISE EXCEPTION 'communications_control_not_found' USING ERRCODE = '23505';
|
|
207
|
+
END IF;
|
|
208
|
+
|
|
209
|
+
INSERT INTO public.communication_delivery_templates(
|
|
210
|
+
template_reference, control_key, active
|
|
211
|
+
) VALUES (p_template_reference, p_control_key, p_active)
|
|
212
|
+
ON CONFLICT (template_reference) DO UPDATE
|
|
213
|
+
SET control_key = EXCLUDED.control_key,
|
|
214
|
+
active = EXCLUDED.active,
|
|
215
|
+
revision = public.communication_delivery_templates.revision + 1,
|
|
216
|
+
updated_at = now()
|
|
217
|
+
RETURNING revision INTO v_revision;
|
|
218
|
+
RETURN v_revision;
|
|
219
|
+
END;
|
|
220
|
+
$$;
|
|
221
|
+
|
|
222
|
+
CREATE FUNCTION public.communications_prepare_delivery_command(
|
|
223
|
+
p_operator_id uuid,
|
|
224
|
+
p_idempotency_key text,
|
|
225
|
+
p_command_fingerprint text,
|
|
226
|
+
p_template_reference text,
|
|
227
|
+
p_recipient_fingerprint text
|
|
228
|
+
)
|
|
229
|
+
RETURNS TABLE(action text, attempt_count integer)
|
|
230
|
+
LANGUAGE plpgsql
|
|
231
|
+
SET search_path = pg_catalog
|
|
232
|
+
AS $$
|
|
233
|
+
DECLARE
|
|
234
|
+
v_command public.communication_delivery_commands%ROWTYPE;
|
|
235
|
+
v_preparation public.communication_delivery_preparations%ROWTYPE;
|
|
236
|
+
v_receipt public.transactional_delivery_receipts%ROWTYPE;
|
|
237
|
+
v_control_key text;
|
|
238
|
+
BEGIN
|
|
239
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
240
|
+
IF p_idempotency_key IS NULL
|
|
241
|
+
OR p_idempotency_key !~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$'
|
|
242
|
+
OR p_command_fingerprint IS NULL
|
|
243
|
+
OR p_command_fingerprint !~ '^[a-f0-9]{64}$'
|
|
244
|
+
OR p_template_reference IS NULL
|
|
245
|
+
OR p_template_reference !~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$'
|
|
246
|
+
OR p_recipient_fingerprint IS NULL
|
|
247
|
+
OR p_recipient_fingerprint !~ '^[a-f0-9]{64}$' THEN
|
|
248
|
+
RAISE EXCEPTION 'communications_command_invalid' USING ERRCODE = '22023';
|
|
249
|
+
END IF;
|
|
250
|
+
|
|
251
|
+
PERFORM pg_catalog.pg_advisory_xact_lock(pg_catalog.hashtextextended(p_idempotency_key, 0));
|
|
252
|
+
SELECT * INTO v_command
|
|
253
|
+
FROM public.communication_delivery_commands
|
|
254
|
+
WHERE idempotency_key = p_idempotency_key
|
|
255
|
+
FOR UPDATE;
|
|
256
|
+
|
|
257
|
+
IF FOUND THEN
|
|
258
|
+
IF v_command.command_fingerprint <> p_command_fingerprint
|
|
259
|
+
OR v_command.template_reference <> p_template_reference
|
|
260
|
+
OR v_command.recipient_fingerprint <> p_recipient_fingerprint THEN
|
|
261
|
+
RAISE EXCEPTION 'communications_command_conflict' USING ERRCODE = '23505';
|
|
262
|
+
END IF;
|
|
263
|
+
SELECT * INTO STRICT v_receipt
|
|
264
|
+
FROM public.transactional_delivery_receipts
|
|
265
|
+
WHERE idempotency_key = p_idempotency_key
|
|
266
|
+
FOR UPDATE;
|
|
267
|
+
IF v_receipt.state = 'accepted' THEN
|
|
268
|
+
INSERT INTO public.communication_delivery_events(
|
|
269
|
+
idempotency_key, transition, attempt_count, operator_id
|
|
270
|
+
) VALUES (p_idempotency_key, 'replayed', v_receipt.attempt_count, p_operator_id);
|
|
271
|
+
RETURN QUERY SELECT 'replayed'::text, v_receipt.attempt_count;
|
|
272
|
+
RETURN;
|
|
273
|
+
END IF;
|
|
274
|
+
|
|
275
|
+
-- A durable accepted receipt always replays, even if policy changes later.
|
|
276
|
+
-- A failed command is a new delivery attempt and must re-check current
|
|
277
|
+
-- eligibility before invoking the captured delivery adapter again.
|
|
278
|
+
IF NOT EXISTS (
|
|
279
|
+
SELECT 1
|
|
280
|
+
FROM public.communication_delivery_templates AS template_row
|
|
281
|
+
JOIN public.communication_delivery_controls AS control_row
|
|
282
|
+
ON control_row.control_key = template_row.control_key
|
|
283
|
+
WHERE template_row.template_reference = v_command.template_reference
|
|
284
|
+
AND template_row.active IS TRUE
|
|
285
|
+
AND control_row.enabled IS TRUE
|
|
286
|
+
) THEN
|
|
287
|
+
RAISE EXCEPTION 'communications_delivery_disabled' USING ERRCODE = '23505';
|
|
288
|
+
END IF;
|
|
289
|
+
|
|
290
|
+
INSERT INTO public.communication_delivery_events(
|
|
291
|
+
idempotency_key, transition, attempt_count, operator_id
|
|
292
|
+
) VALUES (p_idempotency_key, 'attempted', v_receipt.attempt_count + 1, p_operator_id);
|
|
293
|
+
RETURN QUERY SELECT 'proceed'::text, v_receipt.attempt_count + 1;
|
|
294
|
+
RETURN;
|
|
295
|
+
END IF;
|
|
296
|
+
|
|
297
|
+
SELECT * INTO v_preparation
|
|
298
|
+
FROM public.communication_delivery_preparations
|
|
299
|
+
WHERE idempotency_key = p_idempotency_key
|
|
300
|
+
FOR UPDATE;
|
|
301
|
+
IF FOUND THEN
|
|
302
|
+
IF v_preparation.command_fingerprint <> p_command_fingerprint
|
|
303
|
+
OR v_preparation.template_reference <> p_template_reference
|
|
304
|
+
OR v_preparation.recipient_fingerprint <> p_recipient_fingerprint
|
|
305
|
+
OR v_preparation.operator_id <> p_operator_id THEN
|
|
306
|
+
RAISE EXCEPTION 'communications_command_conflict' USING ERRCODE = '23505';
|
|
307
|
+
END IF;
|
|
308
|
+
IF NOT EXISTS (
|
|
309
|
+
SELECT 1
|
|
310
|
+
FROM public.communication_delivery_templates AS template_row
|
|
311
|
+
JOIN public.communication_delivery_controls AS control_row
|
|
312
|
+
ON control_row.control_key = template_row.control_key
|
|
313
|
+
WHERE template_row.template_reference = v_preparation.template_reference
|
|
314
|
+
AND template_row.active IS TRUE
|
|
315
|
+
AND control_row.enabled IS TRUE
|
|
316
|
+
) THEN
|
|
317
|
+
RAISE EXCEPTION 'communications_delivery_disabled' USING ERRCODE = '23505';
|
|
318
|
+
END IF;
|
|
319
|
+
UPDATE public.communication_delivery_preparations
|
|
320
|
+
SET updated_at = now() WHERE idempotency_key = p_idempotency_key;
|
|
321
|
+
RETURN QUERY SELECT 'proceed'::text, 1;
|
|
322
|
+
RETURN;
|
|
323
|
+
END IF;
|
|
324
|
+
|
|
325
|
+
SELECT template_row.control_key INTO v_control_key
|
|
326
|
+
FROM public.communication_delivery_templates AS template_row
|
|
327
|
+
JOIN public.communication_delivery_controls AS control_row
|
|
328
|
+
ON control_row.control_key = template_row.control_key
|
|
329
|
+
WHERE template_row.template_reference = p_template_reference
|
|
330
|
+
AND template_row.active IS TRUE
|
|
331
|
+
AND control_row.enabled IS TRUE
|
|
332
|
+
FOR UPDATE OF template_row, control_row;
|
|
333
|
+
IF NOT FOUND THEN
|
|
334
|
+
RAISE EXCEPTION 'communications_delivery_disabled' USING ERRCODE = '23505';
|
|
335
|
+
END IF;
|
|
336
|
+
|
|
337
|
+
INSERT INTO public.communication_delivery_preparations(
|
|
338
|
+
idempotency_key, command_fingerprint, template_reference,
|
|
339
|
+
control_key, recipient_fingerprint, operator_id
|
|
340
|
+
) VALUES (
|
|
341
|
+
p_idempotency_key, p_command_fingerprint, p_template_reference,
|
|
342
|
+
v_control_key, p_recipient_fingerprint, p_operator_id
|
|
343
|
+
);
|
|
344
|
+
RETURN QUERY SELECT 'proceed'::text, 1;
|
|
345
|
+
END;
|
|
346
|
+
$$;
|
|
347
|
+
|
|
348
|
+
CREATE FUNCTION public.communications_record_delivery_accepted(
|
|
349
|
+
p_operator_id uuid,
|
|
350
|
+
p_idempotency_key text,
|
|
351
|
+
p_command_fingerprint text,
|
|
352
|
+
p_delivery_reference text
|
|
353
|
+
)
|
|
354
|
+
RETURNS SETOF public.transactional_delivery_receipts
|
|
355
|
+
LANGUAGE plpgsql
|
|
356
|
+
SET search_path = pg_catalog
|
|
357
|
+
AS $$
|
|
358
|
+
DECLARE
|
|
359
|
+
v_command public.communication_delivery_commands%ROWTYPE;
|
|
360
|
+
v_preparation public.communication_delivery_preparations%ROWTYPE;
|
|
361
|
+
v_receipt public.transactional_delivery_receipts%ROWTYPE;
|
|
362
|
+
BEGIN
|
|
363
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
364
|
+
PERFORM pg_catalog.pg_advisory_xact_lock(pg_catalog.hashtextextended(p_idempotency_key, 0));
|
|
365
|
+
SELECT * INTO v_command FROM public.communication_delivery_commands
|
|
366
|
+
WHERE idempotency_key = p_idempotency_key FOR UPDATE;
|
|
367
|
+
IF FOUND AND v_command.command_fingerprint <> p_command_fingerprint THEN
|
|
368
|
+
RAISE EXCEPTION 'communications_command_conflict' USING ERRCODE = '23505';
|
|
369
|
+
END IF;
|
|
370
|
+
IF NOT FOUND THEN
|
|
371
|
+
SELECT * INTO v_preparation FROM public.communication_delivery_preparations
|
|
372
|
+
WHERE idempotency_key = p_idempotency_key FOR UPDATE;
|
|
373
|
+
IF NOT FOUND OR v_preparation.command_fingerprint <> p_command_fingerprint
|
|
374
|
+
OR v_preparation.operator_id <> p_operator_id THEN
|
|
375
|
+
RAISE EXCEPTION 'communications_command_conflict' USING ERRCODE = '23505';
|
|
376
|
+
END IF;
|
|
377
|
+
END IF;
|
|
378
|
+
SELECT * INTO v_receipt FROM public.transactional_delivery_record_accepted(
|
|
379
|
+
p_idempotency_key, p_command_fingerprint, p_delivery_reference
|
|
380
|
+
);
|
|
381
|
+
IF v_command.idempotency_key IS NULL THEN
|
|
382
|
+
INSERT INTO public.communication_delivery_commands(
|
|
383
|
+
idempotency_key, command_fingerprint, template_reference,
|
|
384
|
+
control_key, recipient_fingerprint
|
|
385
|
+
) VALUES (
|
|
386
|
+
v_preparation.idempotency_key, v_preparation.command_fingerprint,
|
|
387
|
+
v_preparation.template_reference, v_preparation.control_key,
|
|
388
|
+
v_preparation.recipient_fingerprint
|
|
389
|
+
);
|
|
390
|
+
INSERT INTO public.communication_delivery_events(
|
|
391
|
+
idempotency_key, transition, attempt_count, operator_id
|
|
392
|
+
) VALUES (p_idempotency_key, 'attempted', v_receipt.attempt_count, p_operator_id);
|
|
393
|
+
DELETE FROM public.communication_delivery_preparations
|
|
394
|
+
WHERE idempotency_key = p_idempotency_key;
|
|
395
|
+
END IF;
|
|
396
|
+
UPDATE public.communication_delivery_commands
|
|
397
|
+
SET updated_at = now() WHERE idempotency_key = p_idempotency_key;
|
|
398
|
+
INSERT INTO public.communication_delivery_events(
|
|
399
|
+
idempotency_key, transition, attempt_count, operator_id
|
|
400
|
+
) VALUES (p_idempotency_key, 'accepted', v_receipt.attempt_count, p_operator_id);
|
|
401
|
+
RETURN NEXT v_receipt;
|
|
402
|
+
END;
|
|
403
|
+
$$;
|
|
404
|
+
|
|
405
|
+
CREATE FUNCTION public.communications_record_delivery_failed(
|
|
406
|
+
p_operator_id uuid,
|
|
407
|
+
p_idempotency_key text,
|
|
408
|
+
p_command_fingerprint text,
|
|
409
|
+
p_error_code text
|
|
410
|
+
)
|
|
411
|
+
RETURNS SETOF public.transactional_delivery_receipts
|
|
412
|
+
LANGUAGE plpgsql
|
|
413
|
+
SET search_path = pg_catalog
|
|
414
|
+
AS $$
|
|
415
|
+
DECLARE
|
|
416
|
+
v_command public.communication_delivery_commands%ROWTYPE;
|
|
417
|
+
v_preparation public.communication_delivery_preparations%ROWTYPE;
|
|
418
|
+
v_receipt public.transactional_delivery_receipts%ROWTYPE;
|
|
419
|
+
BEGIN
|
|
420
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
421
|
+
PERFORM pg_catalog.pg_advisory_xact_lock(pg_catalog.hashtextextended(p_idempotency_key, 0));
|
|
422
|
+
SELECT * INTO v_command FROM public.communication_delivery_commands
|
|
423
|
+
WHERE idempotency_key = p_idempotency_key FOR UPDATE;
|
|
424
|
+
IF FOUND AND v_command.command_fingerprint <> p_command_fingerprint THEN
|
|
425
|
+
RAISE EXCEPTION 'communications_command_conflict' USING ERRCODE = '23505';
|
|
426
|
+
END IF;
|
|
427
|
+
IF NOT FOUND THEN
|
|
428
|
+
SELECT * INTO v_preparation FROM public.communication_delivery_preparations
|
|
429
|
+
WHERE idempotency_key = p_idempotency_key FOR UPDATE;
|
|
430
|
+
IF NOT FOUND OR v_preparation.command_fingerprint <> p_command_fingerprint
|
|
431
|
+
OR v_preparation.operator_id <> p_operator_id THEN
|
|
432
|
+
RAISE EXCEPTION 'communications_command_conflict' USING ERRCODE = '23505';
|
|
433
|
+
END IF;
|
|
434
|
+
END IF;
|
|
435
|
+
SELECT * INTO v_receipt FROM public.transactional_delivery_record_failed(
|
|
436
|
+
p_idempotency_key, p_command_fingerprint, p_error_code
|
|
437
|
+
);
|
|
438
|
+
IF v_command.idempotency_key IS NULL THEN
|
|
439
|
+
INSERT INTO public.communication_delivery_commands(
|
|
440
|
+
idempotency_key, command_fingerprint, template_reference,
|
|
441
|
+
control_key, recipient_fingerprint
|
|
442
|
+
) VALUES (
|
|
443
|
+
v_preparation.idempotency_key, v_preparation.command_fingerprint,
|
|
444
|
+
v_preparation.template_reference, v_preparation.control_key,
|
|
445
|
+
v_preparation.recipient_fingerprint
|
|
446
|
+
);
|
|
447
|
+
INSERT INTO public.communication_delivery_events(
|
|
448
|
+
idempotency_key, transition, attempt_count, operator_id
|
|
449
|
+
) VALUES (p_idempotency_key, 'attempted', v_receipt.attempt_count, p_operator_id);
|
|
450
|
+
DELETE FROM public.communication_delivery_preparations
|
|
451
|
+
WHERE idempotency_key = p_idempotency_key;
|
|
452
|
+
END IF;
|
|
453
|
+
UPDATE public.communication_delivery_commands
|
|
454
|
+
SET updated_at = now() WHERE idempotency_key = p_idempotency_key;
|
|
455
|
+
INSERT INTO public.communication_delivery_events(
|
|
456
|
+
idempotency_key, transition, attempt_count, operator_id
|
|
457
|
+
) VALUES (p_idempotency_key, 'failed', v_receipt.attempt_count, p_operator_id);
|
|
458
|
+
RETURN NEXT v_receipt;
|
|
459
|
+
END;
|
|
460
|
+
$$;
|
|
461
|
+
|
|
462
|
+
CREATE FUNCTION public.communications_list_delivery_operations(
|
|
463
|
+
p_operator_id uuid,
|
|
464
|
+
p_page integer,
|
|
465
|
+
p_page_size integer
|
|
466
|
+
)
|
|
467
|
+
RETURNS TABLE(
|
|
468
|
+
idempotency_key text, template_reference text, recipient_fingerprint text,
|
|
469
|
+
state text, delivery_reference text, error_code text, attempt_count integer,
|
|
470
|
+
created_at timestamptz, updated_at timestamptz, total_count bigint
|
|
471
|
+
)
|
|
472
|
+
LANGUAGE plpgsql
|
|
473
|
+
STABLE
|
|
474
|
+
SET search_path = pg_catalog
|
|
475
|
+
AS $$
|
|
476
|
+
BEGIN
|
|
477
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
478
|
+
IF p_page IS NULL OR p_page < 0 OR p_page_size IS NULL OR p_page_size < 1 OR p_page_size > 100 THEN
|
|
479
|
+
RAISE EXCEPTION 'communications_page_invalid' USING ERRCODE = '22023';
|
|
480
|
+
END IF;
|
|
481
|
+
RETURN QUERY
|
|
482
|
+
SELECT command_row.idempotency_key, command_row.template_reference,
|
|
483
|
+
command_row.recipient_fingerprint, receipt.state,
|
|
484
|
+
receipt.delivery_reference, receipt.error_code, receipt.attempt_count,
|
|
485
|
+
command_row.created_at, command_row.updated_at, count(*) OVER ()
|
|
486
|
+
FROM public.communication_delivery_commands AS command_row
|
|
487
|
+
JOIN public.transactional_delivery_receipts AS receipt
|
|
488
|
+
ON receipt.idempotency_key = command_row.idempotency_key
|
|
489
|
+
ORDER BY command_row.updated_at DESC, command_row.idempotency_key
|
|
490
|
+
LIMIT p_page_size OFFSET p_page * p_page_size;
|
|
491
|
+
END;
|
|
492
|
+
$$;
|
|
493
|
+
|
|
494
|
+
CREATE FUNCTION public.communications_list_delivery_events(
|
|
495
|
+
p_operator_id uuid,
|
|
496
|
+
p_idempotency_key text
|
|
497
|
+
)
|
|
498
|
+
RETURNS TABLE(
|
|
499
|
+
event_id bigint, idempotency_key text, transition text, attempt_count integer,
|
|
500
|
+
operator_id uuid, occurred_at timestamptz
|
|
501
|
+
)
|
|
502
|
+
LANGUAGE plpgsql
|
|
503
|
+
STABLE
|
|
504
|
+
SET search_path = pg_catalog
|
|
505
|
+
AS $$
|
|
506
|
+
BEGIN
|
|
507
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
508
|
+
RETURN QUERY
|
|
509
|
+
SELECT event_row.event_id, event_row.idempotency_key, event_row.transition,
|
|
510
|
+
event_row.attempt_count, event_row.operator_id, event_row.occurred_at
|
|
511
|
+
FROM public.communication_delivery_events AS event_row
|
|
512
|
+
WHERE event_row.idempotency_key = p_idempotency_key
|
|
513
|
+
ORDER BY event_row.event_id;
|
|
514
|
+
END;
|
|
515
|
+
$$;
|
|
516
|
+
|
|
517
|
+
CREATE FUNCTION public.communications_list_delivery_controls(p_operator_id uuid)
|
|
518
|
+
RETURNS SETOF public.communication_delivery_controls
|
|
519
|
+
LANGUAGE plpgsql STABLE SET search_path = pg_catalog
|
|
520
|
+
AS $$ BEGIN
|
|
521
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
522
|
+
RETURN QUERY SELECT * FROM public.communication_delivery_controls ORDER BY control_key;
|
|
523
|
+
END; $$;
|
|
524
|
+
|
|
525
|
+
CREATE FUNCTION public.communications_list_delivery_templates(p_operator_id uuid)
|
|
526
|
+
RETURNS SETOF public.communication_delivery_templates
|
|
527
|
+
LANGUAGE plpgsql STABLE SET search_path = pg_catalog
|
|
528
|
+
AS $$ BEGIN
|
|
529
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
530
|
+
RETURN QUERY SELECT * FROM public.communication_delivery_templates ORDER BY template_reference;
|
|
531
|
+
END; $$;
|
|
532
|
+
|
|
533
|
+
CREATE FUNCTION public.communications_delivery_health(p_operator_id uuid)
|
|
534
|
+
RETURNS TABLE(attempted bigint, accepted bigint, failed bigint)
|
|
535
|
+
LANGUAGE plpgsql STABLE SET search_path = pg_catalog
|
|
536
|
+
AS $$ BEGIN
|
|
537
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
538
|
+
RETURN QUERY SELECT
|
|
539
|
+
count(*) FILTER (WHERE transition = 'attempted'),
|
|
540
|
+
count(*) FILTER (WHERE transition = 'accepted'),
|
|
541
|
+
count(*) FILTER (WHERE transition = 'failed')
|
|
542
|
+
FROM public.communication_delivery_events;
|
|
543
|
+
END; $$;
|
|
544
|
+
|
|
545
|
+
CREATE FUNCTION public.communications_delivery_readiness(p_operator_id uuid)
|
|
546
|
+
RETURNS TABLE(required_control_count bigint, disabled_control_keys text[])
|
|
547
|
+
LANGUAGE plpgsql STABLE SET search_path = pg_catalog
|
|
548
|
+
AS $$ BEGIN
|
|
549
|
+
PERFORM public.communications_require_active_operator(p_operator_id);
|
|
550
|
+
RETURN QUERY SELECT count(*),
|
|
551
|
+
COALESCE(array_agg(control_key ORDER BY control_key) FILTER (WHERE enabled IS FALSE), ARRAY[]::text[])
|
|
552
|
+
FROM public.communication_delivery_controls;
|
|
553
|
+
END; $$;
|
|
554
|
+
|
|
555
|
+
REVOKE ALL ON FUNCTION public.communications_operator_is_active(uuid) FROM PUBLIC, anon, authenticated;
|
|
556
|
+
REVOKE ALL ON FUNCTION public.communications_refuse_delivery_event_mutation() FROM PUBLIC, anon, authenticated;
|
|
557
|
+
REVOKE ALL ON FUNCTION public.communications_require_active_operator(uuid) FROM PUBLIC, anon, authenticated;
|
|
558
|
+
REVOKE ALL ON FUNCTION public.communications_set_delivery_control(uuid,text,boolean) FROM PUBLIC, anon, authenticated;
|
|
559
|
+
REVOKE ALL ON FUNCTION public.communications_set_delivery_template(uuid,text,text,boolean) FROM PUBLIC, anon, authenticated;
|
|
560
|
+
REVOKE ALL ON FUNCTION public.communications_prepare_delivery_command(uuid,text,text,text,text) FROM PUBLIC, anon, authenticated;
|
|
561
|
+
REVOKE ALL ON FUNCTION public.communications_record_delivery_accepted(uuid,text,text,text) FROM PUBLIC, anon, authenticated;
|
|
562
|
+
REVOKE ALL ON FUNCTION public.communications_record_delivery_failed(uuid,text,text,text) FROM PUBLIC, anon, authenticated;
|
|
563
|
+
REVOKE ALL ON FUNCTION public.communications_list_delivery_operations(uuid,integer,integer) FROM PUBLIC, anon, authenticated;
|
|
564
|
+
REVOKE ALL ON FUNCTION public.communications_list_delivery_events(uuid,text) FROM PUBLIC, anon, authenticated;
|
|
565
|
+
REVOKE ALL ON FUNCTION public.communications_list_delivery_controls(uuid) FROM PUBLIC, anon, authenticated;
|
|
566
|
+
REVOKE ALL ON FUNCTION public.communications_list_delivery_templates(uuid) FROM PUBLIC, anon, authenticated;
|
|
567
|
+
REVOKE ALL ON FUNCTION public.communications_delivery_health(uuid) FROM PUBLIC, anon, authenticated;
|
|
568
|
+
REVOKE ALL ON FUNCTION public.communications_delivery_readiness(uuid) FROM PUBLIC, anon, authenticated;
|