@openlup/platform 0.17.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 +96 -0
- package/README.md +284 -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/contracts/index.d.ts +1 -0
- package/dist/communications/contracts/marketingSync.d.ts +194 -0
- package/dist/communications/contracts/marketingSync.js +1 -0
- package/dist/communications/index.d.ts +1 -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/newsletterIntegrationContracts.d.ts +3 -3
- package/dist/communications/resend/index.d.ts +40 -0
- package/dist/communications/resend/index.js +310 -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/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 +62 -2
- package/release-gates.json +218 -10
- package/sql/20260807140000_read_parity_catalog.sql +94 -0
- package/sql/20260810120000_storefront_catalog_attributes.sql +51 -0
- package/sql/20260812140000_sellable_bundle_catalog.sql +124 -0
- package/sql/20260812210000_bundle_operator_write_boundary.sql +567 -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/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/contracts/index.ts +1 -0
- package/src/communications/contracts/marketingSync.ts +109 -0
- package/src/communications/index.ts +1 -0
- package/src/communications/klaviyo/consentPush.ts +19 -0
- package/src/communications/klaviyo/index.ts +649 -0
- package/src/communications/resend/index.ts +350 -0
- package/src/composition/catalogContribution.ts +32 -0
- package/src/composition/index.ts +1 -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,52 @@
|
|
|
1
|
+
import type { HttpResponse } from "../http/index.js";
|
|
2
|
+
import type { AdminShippingRateResponse, AdminSetShippingRateRequest, AdminSetShippingRateResponse } from "./contracts/shippingRate.js";
|
|
3
|
+
/** Only the incumbent flat-rate reads, writes and best-effort audit. */
|
|
4
|
+
export interface ShippingRateDataPort {
|
|
5
|
+
getShippingFlatMinor(): Promise<number>;
|
|
6
|
+
setShippingFlatMinor(minor: number): Promise<void>;
|
|
7
|
+
recordPromotionAudit(entry: {
|
|
8
|
+
actorId: string;
|
|
9
|
+
actorEmail: string | null;
|
|
10
|
+
action: "shipping_rate_change";
|
|
11
|
+
promotionId: string;
|
|
12
|
+
newValue: Record<string, unknown>;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
type Authorization = {
|
|
16
|
+
ok: true;
|
|
17
|
+
userId: string;
|
|
18
|
+
role: "admin" | "distributor";
|
|
19
|
+
isMachineActor: boolean;
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
code: "UNAUTHORIZED" | "FORBIDDEN";
|
|
23
|
+
message: string;
|
|
24
|
+
identityCode?: string;
|
|
25
|
+
};
|
|
26
|
+
export interface AdminShippingRateHandlerDeps {
|
|
27
|
+
dataPort: ShippingRateDataPort;
|
|
28
|
+
authorizeAdmin: () => Promise<Authorization>;
|
|
29
|
+
/** The host retains its authorization/error response context. */
|
|
30
|
+
resolveAdmin: (authorizeAdmin: () => Promise<Authorization>, res: HttpResponse) => Promise<{
|
|
31
|
+
userId: string;
|
|
32
|
+
} | null>;
|
|
33
|
+
}
|
|
34
|
+
type Schema<T> = {
|
|
35
|
+
safeParse(input: unknown): {
|
|
36
|
+
success: true;
|
|
37
|
+
data: T;
|
|
38
|
+
} | {
|
|
39
|
+
success: false;
|
|
40
|
+
error: {
|
|
41
|
+
flatten(): unknown;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/** Required host validation; there is no default amount policy. */
|
|
46
|
+
export interface ShippingRateHandlerSchemas {
|
|
47
|
+
contractVersion: AdminShippingRateResponse["contractVersion"];
|
|
48
|
+
adminShippingRateResponseSchema: Schema<AdminShippingRateResponse>;
|
|
49
|
+
adminSetShippingRateRequestSchema: Schema<AdminSetShippingRateRequest>;
|
|
50
|
+
adminSetShippingRateResponseSchema: Schema<AdminSetShippingRateResponse>;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openlup/platform",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Runnable server substrate: Node HTTP runtime, BFF dispatch, scheduler, storage, data gateways and bundle composition; development preview.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"api:update": "npm run build && node --experimental-strip-types ./scripts/api-contract.ts --update"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@openlup/core": "0.
|
|
34
|
+
"@openlup/core": "0.18.0",
|
|
35
35
|
"pg": "^8.22.0",
|
|
36
36
|
"@aws-sdk/client-s3": "^3.1144.0",
|
|
37
37
|
"@types/pg": "^8.20.0"
|
|
@@ -115,6 +115,66 @@
|
|
|
115
115
|
"types": "./dist/communications/contracts/index.d.ts",
|
|
116
116
|
"import": "./dist/communications/contracts/index.js",
|
|
117
117
|
"default": "./dist/communications/contracts/index.js"
|
|
118
|
+
},
|
|
119
|
+
"./catalog": {
|
|
120
|
+
"types": "./dist/catalog/index.d.ts",
|
|
121
|
+
"import": "./dist/catalog/index.js",
|
|
122
|
+
"default": "./dist/catalog/index.js"
|
|
123
|
+
},
|
|
124
|
+
"./catalog/contracts": {
|
|
125
|
+
"types": "./dist/catalog/contracts/index.d.ts",
|
|
126
|
+
"import": "./dist/catalog/contracts/index.js",
|
|
127
|
+
"default": "./dist/catalog/contracts/index.js"
|
|
128
|
+
},
|
|
129
|
+
"./pricing": {
|
|
130
|
+
"types": "./dist/pricing/index.d.ts",
|
|
131
|
+
"import": "./dist/pricing/index.js",
|
|
132
|
+
"default": "./dist/pricing/index.js"
|
|
133
|
+
},
|
|
134
|
+
"./pricing/contracts": {
|
|
135
|
+
"types": "./dist/pricing/contracts/index.d.ts",
|
|
136
|
+
"import": "./dist/pricing/contracts/index.js",
|
|
137
|
+
"default": "./dist/pricing/contracts/index.js"
|
|
138
|
+
},
|
|
139
|
+
"./promotions": {
|
|
140
|
+
"types": "./dist/promotions/index.d.ts",
|
|
141
|
+
"import": "./dist/promotions/index.js",
|
|
142
|
+
"default": "./dist/promotions/index.js"
|
|
143
|
+
},
|
|
144
|
+
"./promotions/contracts": {
|
|
145
|
+
"types": "./dist/promotions/contracts/index.d.ts",
|
|
146
|
+
"import": "./dist/promotions/contracts/index.js",
|
|
147
|
+
"default": "./dist/promotions/contracts/index.js"
|
|
148
|
+
},
|
|
149
|
+
"./communications/resend": {
|
|
150
|
+
"types": "./dist/communications/resend/index.d.ts",
|
|
151
|
+
"import": "./dist/communications/resend/index.js",
|
|
152
|
+
"default": "./dist/communications/resend/index.js"
|
|
153
|
+
},
|
|
154
|
+
"./communications/klaviyo": {
|
|
155
|
+
"types": "./dist/communications/klaviyo/index.d.ts",
|
|
156
|
+
"import": "./dist/communications/klaviyo/index.js",
|
|
157
|
+
"default": "./dist/communications/klaviyo/index.js"
|
|
158
|
+
},
|
|
159
|
+
"./inventory": {
|
|
160
|
+
"types": "./dist/inventory/index.d.ts",
|
|
161
|
+
"import": "./dist/inventory/index.js",
|
|
162
|
+
"default": "./dist/inventory/index.js"
|
|
163
|
+
},
|
|
164
|
+
"./inventory/contracts": {
|
|
165
|
+
"types": "./dist/inventory/contracts/index.d.ts",
|
|
166
|
+
"import": "./dist/inventory/contracts/index.js",
|
|
167
|
+
"default": "./dist/inventory/contracts/index.js"
|
|
168
|
+
},
|
|
169
|
+
"./shipping": {
|
|
170
|
+
"types": "./dist/shipping/index.d.ts",
|
|
171
|
+
"import": "./dist/shipping/index.js",
|
|
172
|
+
"default": "./dist/shipping/index.js"
|
|
173
|
+
},
|
|
174
|
+
"./shipping/contracts": {
|
|
175
|
+
"types": "./dist/shipping/contracts/index.d.ts",
|
|
176
|
+
"import": "./dist/shipping/contracts/index.js",
|
|
177
|
+
"default": "./dist/shipping/contracts/index.js"
|
|
118
178
|
}
|
|
119
179
|
},
|
|
120
180
|
"repository": {
|
package/release-gates.json
CHANGED
|
@@ -135,7 +135,9 @@
|
|
|
135
135
|
"test/packageBoundary.test.ts",
|
|
136
136
|
"test/communications/sql.test.ts",
|
|
137
137
|
"test/communications/contribution.test.ts",
|
|
138
|
-
"test/communications/transportConformance.test.ts"
|
|
138
|
+
"test/communications/transportConformance.test.ts",
|
|
139
|
+
"test/communications/marketingSyncConformance.test.ts",
|
|
140
|
+
"test/communications/marketingSyncCompatibility.test.ts"
|
|
139
141
|
],
|
|
140
142
|
"entrypoint": "dist/communications/index.d.ts",
|
|
141
143
|
"snapshot": "api/communications.api.md"
|
|
@@ -146,31 +148,237 @@
|
|
|
146
148
|
"compatibilityPolicy": "internal-candidate",
|
|
147
149
|
"packageSmokeEvidence": [
|
|
148
150
|
"test/packageBoundary.test.ts",
|
|
149
|
-
"test/communications/contracts.test.ts"
|
|
151
|
+
"test/communications/contracts.test.ts",
|
|
152
|
+
"test/communications/marketingSyncConformance.test.ts",
|
|
153
|
+
"test/communications/marketingSyncCompatibility.test.ts"
|
|
150
154
|
],
|
|
151
155
|
"entrypoint": "dist/communications/contracts/index.d.ts",
|
|
152
156
|
"snapshot": "api/communications-contracts.api.md"
|
|
157
|
+
},
|
|
158
|
+
"./catalog": {
|
|
159
|
+
"role": "capability",
|
|
160
|
+
"maturity": "experimental",
|
|
161
|
+
"compatibilityPolicy": "internal-candidate",
|
|
162
|
+
"packageSmokeEvidence": [
|
|
163
|
+
"test/packageBoundary.test.ts",
|
|
164
|
+
"test/catalog/catalogDraftHandler.test.ts",
|
|
165
|
+
"test/catalog/catalogDraftValidation.test.ts",
|
|
166
|
+
"test/catalog/resolvedSkuProjection.test.ts",
|
|
167
|
+
"test/catalog/referenceCatalogHandler.test.ts",
|
|
168
|
+
"test/catalog/catalogMediaResolution.test.ts",
|
|
169
|
+
"test/catalog/catalogLifecycleContracts.test.ts",
|
|
170
|
+
"test/catalog/bundleRules.test.ts",
|
|
171
|
+
"test/catalog/bundleAvailability.test.ts",
|
|
172
|
+
"test/catalog/bundleAvailabilityService.test.ts",
|
|
173
|
+
"test/catalog/bundleCatalogReadPort.test.ts",
|
|
174
|
+
"test/catalog/sellableBundleHandler.test.ts",
|
|
175
|
+
"test/catalog/catalogFoundationContracts.test.ts",
|
|
176
|
+
"test/catalog/catalogDraftContracts.test.ts"
|
|
177
|
+
],
|
|
178
|
+
"entrypoint": "dist/catalog/index.d.ts",
|
|
179
|
+
"snapshot": "api/catalog.api.md"
|
|
180
|
+
},
|
|
181
|
+
"./catalog/contracts": {
|
|
182
|
+
"role": "capability",
|
|
183
|
+
"maturity": "experimental",
|
|
184
|
+
"compatibilityPolicy": "internal-candidate",
|
|
185
|
+
"packageSmokeEvidence": [
|
|
186
|
+
"test/packageBoundary.test.ts",
|
|
187
|
+
"test/catalog/catalogFoundationContracts.test.ts",
|
|
188
|
+
"test/catalog/catalogProductTypeContracts.test.ts",
|
|
189
|
+
"test/catalog/catalogDraftContracts.test.ts",
|
|
190
|
+
"test/catalog/catalogMediaResolution.test.ts",
|
|
191
|
+
"test/catalog/catalogLifecycleContracts.test.ts"
|
|
192
|
+
],
|
|
193
|
+
"entrypoint": "dist/catalog/contracts/index.d.ts",
|
|
194
|
+
"snapshot": "api/catalog-contracts.api.md"
|
|
195
|
+
},
|
|
196
|
+
"./pricing": {
|
|
197
|
+
"role": "capability",
|
|
198
|
+
"maturity": "experimental",
|
|
199
|
+
"compatibilityPolicy": "internal-candidate",
|
|
200
|
+
"packageSmokeEvidence": [
|
|
201
|
+
"test/packageBoundary.test.ts",
|
|
202
|
+
"test/pricing/commercePriceAuthority.test.ts",
|
|
203
|
+
"test/pricing/subscriptionPricePolicy.test.ts",
|
|
204
|
+
"test/pricing/pricingPolicyToken.test.ts",
|
|
205
|
+
"test/pricing/commercePricingPolicyErrors.test.ts",
|
|
206
|
+
"test/pricing/quoteContracts.test.ts",
|
|
207
|
+
"test/pricing/catalogFactsProvenance.test.ts",
|
|
208
|
+
"test/pricing/commerceTaxProfileGuard.test.ts",
|
|
209
|
+
"test/pricing/dbBackedCommerceQuotePort.test.ts",
|
|
210
|
+
"test/pricing/dbBackedCommerceQuoteHelpers.test.ts",
|
|
211
|
+
"test/pricing/commerceQuoteSnapshotExpect.test.ts",
|
|
212
|
+
"test/pricing/dbBackedCommerceQuoteSnapshotVerifier.test.ts",
|
|
213
|
+
"test/pricing/commerceQuoteHandler.test.ts",
|
|
214
|
+
"test/pricing/commerceQuoteBatchHandler.test.ts",
|
|
215
|
+
"test/pricing/commerceOfferPricing.test.ts",
|
|
216
|
+
"test/pricing/commerceOfferPricingHandler.test.ts",
|
|
217
|
+
"test/pricing/commerceOfferPricingCache.test.ts",
|
|
218
|
+
"test/pricing/offerPolicyReadiness.test.ts",
|
|
219
|
+
"test/pricing/acquisition.test.ts",
|
|
220
|
+
"test/pricing/offerPricingContracts.test.ts"
|
|
221
|
+
],
|
|
222
|
+
"entrypoint": "dist/pricing/index.d.ts",
|
|
223
|
+
"snapshot": "api/pricing.api.md"
|
|
224
|
+
},
|
|
225
|
+
"./pricing/contracts": {
|
|
226
|
+
"role": "capability",
|
|
227
|
+
"maturity": "experimental",
|
|
228
|
+
"compatibilityPolicy": "internal-candidate",
|
|
229
|
+
"packageSmokeEvidence": [
|
|
230
|
+
"test/packageBoundary.test.ts",
|
|
231
|
+
"test/pricing/subscriptionPricePolicy.test.ts",
|
|
232
|
+
"test/pricing/quoteContracts.test.ts",
|
|
233
|
+
"test/pricing/offerPricingContracts.test.ts"
|
|
234
|
+
],
|
|
235
|
+
"entrypoint": "dist/pricing/contracts/index.d.ts",
|
|
236
|
+
"snapshot": "api/pricing-contracts.api.md"
|
|
237
|
+
},
|
|
238
|
+
"./promotions": {
|
|
239
|
+
"role": "capability",
|
|
240
|
+
"maturity": "experimental",
|
|
241
|
+
"compatibilityPolicy": "internal-candidate",
|
|
242
|
+
"packageSmokeEvidence": [
|
|
243
|
+
"test/packageBoundary.test.ts",
|
|
244
|
+
"test/promotions/applicationConformance.test.ts",
|
|
245
|
+
"test/promotions/acceptanceCallbacks.test.ts",
|
|
246
|
+
"test/promotions/quotePromotionV2.test.ts",
|
|
247
|
+
"test/promotions/quotePromotionV2.legacyCodeOutcomes.test.ts",
|
|
248
|
+
"test/promotions/quoteAutomaticPromotions.test.ts",
|
|
249
|
+
"test/promotions/quotePromoDiscounts.test.ts",
|
|
250
|
+
"test/promotions/quotePromotionCodeAdjustments.test.ts",
|
|
251
|
+
"test/promotions/promotionBenefitDefinition.test.ts",
|
|
252
|
+
"test/promotions/promoDataPort.test.ts",
|
|
253
|
+
"test/promotions/promotionCodeQuotePort.test.ts",
|
|
254
|
+
"test/promotions/promotionCodePreview.test.ts",
|
|
255
|
+
"test/promotions/promotionQuoteBinding.test.ts",
|
|
256
|
+
"test/promotions/promotionQuoteAcceptance.test.ts",
|
|
257
|
+
"test/promotions/adminPromotionCodesDataPort.test.ts",
|
|
258
|
+
"test/promotions/adminPromotionCodesContracts.test.ts",
|
|
259
|
+
"test/promotions/promotionClaimSweepPort.test.ts",
|
|
260
|
+
"test/promotions/promotionClaims.test.ts"
|
|
261
|
+
],
|
|
262
|
+
"entrypoint": "dist/promotions/index.d.ts",
|
|
263
|
+
"snapshot": "api/promotions.api.md"
|
|
264
|
+
},
|
|
265
|
+
"./promotions/contracts": {
|
|
266
|
+
"role": "capability",
|
|
267
|
+
"maturity": "experimental",
|
|
268
|
+
"compatibilityPolicy": "internal-candidate",
|
|
269
|
+
"packageSmokeEvidence": [
|
|
270
|
+
"test/packageBoundary.test.ts",
|
|
271
|
+
"test/promotions/applicationConformance.test.ts",
|
|
272
|
+
"test/promotions/promotionCodePreview.test.ts",
|
|
273
|
+
"test/promotions/adminPromotionCodesContracts.test.ts"
|
|
274
|
+
],
|
|
275
|
+
"entrypoint": "dist/promotions/contracts/index.d.ts",
|
|
276
|
+
"snapshot": "api/promotions-contracts.api.md"
|
|
277
|
+
},
|
|
278
|
+
"./communications/resend": {
|
|
279
|
+
"role": "capability",
|
|
280
|
+
"maturity": "experimental",
|
|
281
|
+
"compatibilityPolicy": "internal-candidate",
|
|
282
|
+
"packageSmokeEvidence": [
|
|
283
|
+
"test/communications/resend/egress.test.ts",
|
|
284
|
+
"test/communications/resend/protocol.test.ts"
|
|
285
|
+
],
|
|
286
|
+
"entrypoint": "dist/communications/resend/index.d.ts",
|
|
287
|
+
"snapshot": "api/communications-resend.api.md"
|
|
288
|
+
},
|
|
289
|
+
"./communications/klaviyo": {
|
|
290
|
+
"role": "capability",
|
|
291
|
+
"maturity": "experimental",
|
|
292
|
+
"compatibilityPolicy": "internal-candidate",
|
|
293
|
+
"packageSmokeEvidence": [
|
|
294
|
+
"test/communications/klaviyo/portConformance.test.ts",
|
|
295
|
+
"test/communications/klaviyo/protocol.test.ts",
|
|
296
|
+
"test/communications/klaviyo/permissions.test.ts"
|
|
297
|
+
],
|
|
298
|
+
"entrypoint": "dist/communications/klaviyo/index.d.ts",
|
|
299
|
+
"snapshot": "api/communications-klaviyo.api.md"
|
|
300
|
+
},
|
|
301
|
+
"./inventory": {
|
|
302
|
+
"role": "capability",
|
|
303
|
+
"maturity": "experimental",
|
|
304
|
+
"compatibilityPolicy": "internal-candidate",
|
|
305
|
+
"packageSmokeEvidence": [
|
|
306
|
+
"test/packageBoundary.test.ts",
|
|
307
|
+
"test/inventory/contracts.test.ts",
|
|
308
|
+
"test/inventory/adminInventoryConformance.test.ts",
|
|
309
|
+
"test/inventory/inventoryAvailabilityCharacterization.test.ts",
|
|
310
|
+
"test/inventory/newPurchaseStockBoundary.test.ts",
|
|
311
|
+
"test/inventory/reservationPolicyConformance.test.ts",
|
|
312
|
+
"test/inventory/subscriptionForecastCalculation.test.ts"
|
|
313
|
+
],
|
|
314
|
+
"entrypoint": "dist/inventory/index.d.ts",
|
|
315
|
+
"snapshot": "api/inventory.api.md"
|
|
316
|
+
},
|
|
317
|
+
"./inventory/contracts": {
|
|
318
|
+
"role": "capability",
|
|
319
|
+
"maturity": "experimental",
|
|
320
|
+
"compatibilityPolicy": "internal-candidate",
|
|
321
|
+
"packageSmokeEvidence": [
|
|
322
|
+
"test/packageBoundary.test.ts",
|
|
323
|
+
"test/inventory/contracts.test.ts",
|
|
324
|
+
"test/inventory/newPurchaseStockBoundary.test.ts",
|
|
325
|
+
"test/inventory/reservationPolicyConformance.test.ts",
|
|
326
|
+
"test/inventory/subscriptionForecastCalculation.test.ts"
|
|
327
|
+
],
|
|
328
|
+
"entrypoint": "dist/inventory/contracts/index.d.ts",
|
|
329
|
+
"snapshot": "api/inventory-contracts.api.md"
|
|
330
|
+
},
|
|
331
|
+
"./shipping": {
|
|
332
|
+
"role": "capability",
|
|
333
|
+
"maturity": "experimental",
|
|
334
|
+
"compatibilityPolicy": "internal-candidate",
|
|
335
|
+
"packageSmokeEvidence": [
|
|
336
|
+
"test/packageBoundary.test.ts",
|
|
337
|
+
"test/shipping/deliveryConformance.test.ts",
|
|
338
|
+
"test/shipping/addressConformance.test.ts",
|
|
339
|
+
"test/shipping/shippingRateConformance.test.ts"
|
|
340
|
+
],
|
|
341
|
+
"entrypoint": "dist/shipping/index.d.ts",
|
|
342
|
+
"snapshot": "api/shipping.api.md"
|
|
343
|
+
},
|
|
344
|
+
"./shipping/contracts": {
|
|
345
|
+
"role": "capability",
|
|
346
|
+
"maturity": "experimental",
|
|
347
|
+
"compatibilityPolicy": "internal-candidate",
|
|
348
|
+
"packageSmokeEvidence": [
|
|
349
|
+
"test/packageBoundary.test.ts",
|
|
350
|
+
"test/shipping/deliveryConformance.test.ts",
|
|
351
|
+
"test/shipping/addressConformance.test.ts",
|
|
352
|
+
"test/shipping/shippingRateConformance.test.ts"
|
|
353
|
+
],
|
|
354
|
+
"entrypoint": "dist/shipping/contracts/index.d.ts",
|
|
355
|
+
"snapshot": "api/shipping-contracts.api.md"
|
|
153
356
|
}
|
|
154
357
|
},
|
|
155
358
|
"pack": {
|
|
156
359
|
"code": {
|
|
157
|
-
"maxPackedBytes":
|
|
158
|
-
"maxFiles":
|
|
360
|
+
"maxPackedBytes": 1126400,
|
|
361
|
+
"maxFiles": 2000
|
|
159
362
|
},
|
|
160
363
|
"docs": {
|
|
161
364
|
"maxPackedBytes": 40960,
|
|
162
365
|
"maxFiles": 10
|
|
163
366
|
},
|
|
164
|
-
"maxPackedBytes":
|
|
165
|
-
"maxUnpackedBytes":
|
|
166
|
-
"maxFiles":
|
|
367
|
+
"maxPackedBytes": 1351680,
|
|
368
|
+
"maxUnpackedBytes": 5734400,
|
|
369
|
+
"maxFiles": 2100,
|
|
167
370
|
"baseline": {
|
|
168
|
-
"version": "0.
|
|
169
|
-
"packedBytes":
|
|
371
|
+
"version": "0.17.0",
|
|
372
|
+
"packedBytes": 414220
|
|
170
373
|
},
|
|
171
374
|
"browserEntries": {
|
|
172
375
|
"./communications/contracts": 11776,
|
|
173
|
-
"./identity/contracts": 4800
|
|
376
|
+
"./identity/contracts": 4800,
|
|
377
|
+
"./catalog/contracts": 4096,
|
|
378
|
+
"./pricing/contracts": 416,
|
|
379
|
+
"./promotions/contracts": 32,
|
|
380
|
+
"./inventory/contracts": 32,
|
|
381
|
+
"./shipping/contracts": 32
|
|
174
382
|
}
|
|
175
383
|
}
|
|
176
384
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
-- Public platform read surface: catalog, pricing and settings.
|
|
2
|
+
--
|
|
3
|
+
-- Authored from scratch for this forward migration. The column set is exactly what
|
|
4
|
+
-- the platform read ports project on the second bundle, not a cut of any historical
|
|
5
|
+
-- migration: no business function, trigger, policy or grant is created here, and the
|
|
6
|
+
-- product-specific attributes that the chain keeps on a sellable unit are deliberately
|
|
7
|
+
-- absent. The capability slice that actually executes them authors them as its own
|
|
8
|
+
-- forward, so this catalog never carries a column nothing here reads.
|
|
9
|
+
|
|
10
|
+
CREATE TABLE public.catalog_products (
|
|
11
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
12
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
13
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
14
|
+
slug text NOT NULL,
|
|
15
|
+
status text NOT NULL DEFAULT 'active',
|
|
16
|
+
name text NOT NULL,
|
|
17
|
+
description text,
|
|
18
|
+
CONSTRAINT catalog_products_slug_nonempty_check CHECK (btrim(slug) <> ''),
|
|
19
|
+
CONSTRAINT catalog_products_name_nonempty_check CHECK (btrim(name) <> ''),
|
|
20
|
+
CONSTRAINT catalog_products_status_check CHECK (status IN ('draft', 'active', 'archived'))
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE UNIQUE INDEX idx_catalog_products_slug ON public.catalog_products (slug);
|
|
24
|
+
|
|
25
|
+
CREATE TABLE public.catalog_skus (
|
|
26
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
27
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
28
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
29
|
+
product_id uuid NOT NULL REFERENCES public.catalog_products (id) ON DELETE CASCADE,
|
|
30
|
+
sku text NOT NULL,
|
|
31
|
+
title text NOT NULL,
|
|
32
|
+
status text NOT NULL DEFAULT 'active',
|
|
33
|
+
min_order_qty integer NOT NULL DEFAULT 1,
|
|
34
|
+
is_addon boolean NOT NULL DEFAULT false,
|
|
35
|
+
sellable_standalone boolean NOT NULL DEFAULT true,
|
|
36
|
+
sellable_in_subscription boolean NOT NULL DEFAULT false,
|
|
37
|
+
CONSTRAINT catalog_skus_sku_nonempty_check CHECK (btrim(sku) <> ''),
|
|
38
|
+
CONSTRAINT catalog_skus_status_check CHECK (status IN ('draft', 'active', 'archived')),
|
|
39
|
+
CONSTRAINT catalog_skus_min_order_qty_check CHECK (min_order_qty >= 1)
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE UNIQUE INDEX idx_catalog_skus_sku ON public.catalog_skus (sku);
|
|
43
|
+
CREATE INDEX idx_catalog_skus_product_id ON public.catalog_skus (product_id);
|
|
44
|
+
|
|
45
|
+
CREATE TABLE public.price_lists (
|
|
46
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
47
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
48
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
49
|
+
name text NOT NULL,
|
|
50
|
+
region_code text NOT NULL,
|
|
51
|
+
currency text NOT NULL,
|
|
52
|
+
status text NOT NULL DEFAULT 'active',
|
|
53
|
+
valid_from timestamptz NOT NULL DEFAULT now(),
|
|
54
|
+
valid_to timestamptz,
|
|
55
|
+
CONSTRAINT price_lists_name_nonempty_check CHECK (btrim(name) <> ''),
|
|
56
|
+
CONSTRAINT price_lists_region_code_check CHECK (char_length(region_code) BETWEEN 2 AND 3),
|
|
57
|
+
CONSTRAINT price_lists_currency_check CHECK (currency ~ '^[A-Z]{3}$'),
|
|
58
|
+
CONSTRAINT price_lists_status_check CHECK (status IN ('draft', 'active', 'archived')),
|
|
59
|
+
CONSTRAINT price_lists_validity_check CHECK (valid_to IS NULL OR valid_to > valid_from)
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CREATE INDEX idx_price_lists_region_currency_status
|
|
63
|
+
ON public.price_lists (region_code, currency, status);
|
|
64
|
+
|
|
65
|
+
CREATE TABLE public.price_entries (
|
|
66
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
67
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
68
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
69
|
+
price_list_id uuid NOT NULL REFERENCES public.price_lists (id) ON DELETE CASCADE,
|
|
70
|
+
variant_id uuid NOT NULL REFERENCES public.catalog_skus (id) ON DELETE CASCADE,
|
|
71
|
+
mode text NOT NULL DEFAULT 'any',
|
|
72
|
+
min_qty integer NOT NULL DEFAULT 1,
|
|
73
|
+
unit_price_minor integer NOT NULL,
|
|
74
|
+
amount_kind text NOT NULL DEFAULT 'gross',
|
|
75
|
+
active boolean NOT NULL DEFAULT true,
|
|
76
|
+
valid_from timestamptz NOT NULL DEFAULT now(),
|
|
77
|
+
valid_to timestamptz,
|
|
78
|
+
CONSTRAINT price_entries_mode_check CHECK (mode IN ('one_time', 'subscription', 'any')),
|
|
79
|
+
CONSTRAINT price_entries_amount_kind_check CHECK (amount_kind IN ('gross', 'net')),
|
|
80
|
+
CONSTRAINT price_entries_min_qty_check CHECK (min_qty >= 1),
|
|
81
|
+
CONSTRAINT price_entries_unit_price_minor_check CHECK (unit_price_minor >= 0),
|
|
82
|
+
CONSTRAINT price_entries_validity_check CHECK (valid_to IS NULL OR valid_to > valid_from)
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
CREATE INDEX idx_price_entries_variant_mode_list
|
|
86
|
+
ON public.price_entries (variant_id, mode, price_list_id);
|
|
87
|
+
|
|
88
|
+
CREATE TABLE public.commerce_settings (
|
|
89
|
+
key text PRIMARY KEY,
|
|
90
|
+
value_minor integer,
|
|
91
|
+
value_text text,
|
|
92
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
93
|
+
CONSTRAINT commerce_settings_key_nonempty_check CHECK (btrim(key) <> '')
|
|
94
|
+
);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-- Public platform catalogue attributes: the three columns a public listing needs.
|
|
2
|
+
--
|
|
3
|
+
-- Authored from scratch for this delta. The read-parity forward that created these two
|
|
4
|
+
-- relations deliberately left every sellable attribute out, on the ruling that the slice
|
|
5
|
+
-- which actually executes them would author them as its own forward. This is that slice,
|
|
6
|
+
-- and the demand is no longer a guess: the shipped response contract was validated against
|
|
7
|
+
-- an assembly read out of a live kernel database, and it refused with thirteen issues over
|
|
8
|
+
-- five field paths -- a product line, a positive net weight per sellable unit, a non-empty
|
|
9
|
+
-- declared composition with at least one entry, and a non-empty format label. Every one of
|
|
10
|
+
-- them is `too_small`, which is the schema saying "you gave me nothing", not "you gave me
|
|
11
|
+
-- the wrong thing". Nothing here is optional decoration: without these three columns the
|
|
12
|
+
-- listing route answers 502 for an operator's own rows, on any schema.
|
|
13
|
+
--
|
|
14
|
+
-- WHY THESE THREE NAMES AND NOT THE FIVE THAT WERE SIZED. The neutral projection is served
|
|
15
|
+
-- to BOTH bundles by the discovery harness, so a column this kernel invents and the managed
|
|
16
|
+
-- chain lacks would fail the managed half of the proof on contact. The names below are the
|
|
17
|
+
-- ones that chain already carries with a compatible type and, critically, with no foreign
|
|
18
|
+
-- key. Two further names were sized and are refused here: on the managed chain both are
|
|
19
|
+
-- foreign keys into lookup relations of sellable-unit vocabulary, so honouring them would
|
|
20
|
+
-- force this kernel to grow two dictionaries of exactly the domain language the public
|
|
21
|
+
-- platform must not own. The packaging unit therefore stays at the assembly's own default
|
|
22
|
+
-- and the calorific figures stay absent, which is why the composition this platform can
|
|
23
|
+
-- express is a list of declared entries and not the richer card set an overlay keeps beside
|
|
24
|
+
-- it.
|
|
25
|
+
--
|
|
26
|
+
-- WHY NULLABILITY IS SPENT AS A DEFAULT AND NOT AS NULL. Every column arrives NOT NULL with
|
|
27
|
+
-- a neutral zero value -- an empty array, an empty object, a zero integer -- so an already
|
|
28
|
+
-- populated deployment boots unchanged and no read has to branch on absence. A zero weight
|
|
29
|
+
-- and an empty composition are still refused by the response contract, which is the correct
|
|
30
|
+
-- outcome: the platform now HAS somewhere to put the answer, and an operator who has not
|
|
31
|
+
-- put one there has published nothing, rather than published something broken. No CHECK is
|
|
32
|
+
-- added, for the same reason the managed chain has none on these columns -- the shape that
|
|
33
|
+
-- matters is enforced by the response contract, one layer up, where it can name the field.
|
|
34
|
+
--
|
|
35
|
+
-- NO FUNCTION, NO TRIGGER, NO POLICY, NO GRANT, NO INDEX. Three ALTER TABLE statements and
|
|
36
|
+
-- three comments. The read path that consumes them is a projection widening in application
|
|
37
|
+
-- code, not a database behaviour.
|
|
38
|
+
|
|
39
|
+
ALTER TABLE public.catalog_products
|
|
40
|
+
ADD COLUMN ingredients text[] NOT NULL DEFAULT ARRAY[]::text[],
|
|
41
|
+
ADD COLUMN marketing_content jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
42
|
+
|
|
43
|
+
ALTER TABLE public.catalog_skus
|
|
44
|
+
ADD COLUMN net_weight_g integer NOT NULL DEFAULT 0;
|
|
45
|
+
|
|
46
|
+
COMMENT ON COLUMN public.catalog_products.ingredients IS
|
|
47
|
+
'Declared composition, one free-text entry per line. An entry may end in a percentage share; the read splits it, and keeps the whole entry as the label when it does not.';
|
|
48
|
+
COMMENT ON COLUMN public.catalog_products.marketing_content IS
|
|
49
|
+
'Front-of-house copy the platform stores and never interprets. The public read looks up two keys in it: line_name and format_marketing_copy.';
|
|
50
|
+
COMMENT ON COLUMN public.catalog_skus.net_weight_g IS
|
|
51
|
+
'Net weight of one sellable unit, in grams. Zero means the operator has not declared one, and the response contract refuses such a unit.';
|